about summary refs log tree commit diff
path: root/nixpkgs/pkgs/development/tools
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/development/tools')
-rw-r--r--nixpkgs/pkgs/development/tools/aapt/default.nix48
-rw-r--r--nixpkgs/pkgs/development/tools/abuild/default.nix88
-rw-r--r--nixpkgs/pkgs/development/tools/agda-pkg/default.nix47
-rw-r--r--nixpkgs/pkgs/development/tools/air/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/algolia-cli/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/alloy/default.nix69
-rw-r--r--nixpkgs/pkgs/development/tools/alloy/icon.pngbin0 -> 17154 bytes
-rw-r--r--nixpkgs/pkgs/development/tools/allure/default.nix39
-rw-r--r--nixpkgs/pkgs/development/tools/altair-graphql-client/default.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/amazon-qldb-shell/Cargo.lock2825
-rw-r--r--nixpkgs/pkgs/development/tools/amazon-qldb-shell/default.nix44
-rw-r--r--nixpkgs/pkgs/development/tools/ameba/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/ammonite/default.nix91
-rw-r--r--nixpkgs/pkgs/development/tools/amqpcat/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/amqpcat/shards.nix12
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/actionlint/default.nix45
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/banana-vera/default.nix41
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/bingrep/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/binlore/default.nix113
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/brakeman/Gemfile2
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/brakeman/Gemfile.lock15
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/brakeman/default.nix18
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/brakeman/gemset.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/cargo-tarpaulin/default.nix39
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/cccc/cccc.patch24
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/cccc/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/checkov/default.nix164
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/checkov/flake8-compat-5.x.patch25
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/checkstyle/default.nix39
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/clang-analyzer/0001-Fix-scan-build-to-use-NIX_CFLAGS_COMPILE.patch35
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/clang-analyzer/default.nix38
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/clazy/default.nix56
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/coan/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/codeql/default.nix55
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/cov-build/default.nix69
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/coz/default.nix56
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/cppcheck/default.nix85
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/cpplint/0001-Remove-pytest-runner-version-pin.patch16
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/cpplint/default.nix48
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/cvehound/default.nix46
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/dotenv-linter/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/egypt/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/emma/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/eresi/default.nix76
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/evmdis/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/evmdis/go.mod3
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/findbugs/default.nix46
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/flow/default.nix45
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/frama-c/default.nix108
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/garcosim/tracefilegen/default.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/garcosim/tracefilegen/gcc7.patch13
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/garcosim/tracefilesim/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/hopper/default.nix76
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/hotspot/default.nix82
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/ikos/default.nix50
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/include-what-you-use/default.nix51
-rwxr-xr-xnixpkgs/pkgs/development/tools/analysis/include-what-you-use/wrapper26
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/jacoco/default.nix44
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/jdepend/default.nix58
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/kcov/default.nix83
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/lcov/default.nix45
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/makefile2graph/default.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/massif-visualizer/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/nix-linter/default.nix47
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/oclgrind/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/panopticon/default.nix52
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/pev/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/pmd/default.nix41
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/qcachegrind/default.nix44
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/radare2/default.nix118
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/randoop/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/retdec/default.nix236
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/rizin/cutter.nix103
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/rizin/default.nix134
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/rizin/jsdec.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/rizin/librz-wrapper-support.patch13
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/rizin/rz-ghidra.nix67
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/rizin/sigdb.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/rizin/wrapper.nix44
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/rr/default.nix76
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/rr/zen_workaround.nix45
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/smatch/default.nix39
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/snowman/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/snyk/default.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/sparse/default.nix44
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/sparse/tests.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/spin/default.nix47
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/splint/darwin.patch13
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/splint/default.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/splint/tmpdir.patch16
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/stylelint/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/svlint/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/swarm/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/tartan/default.nix53
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/tflint-plugins/default.nix4
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/tflint-plugins/tflint-ruleset-aws.nix38
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/tflint-plugins/tflint-ruleset-google.nix38
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/tflint/default.nix53
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/tfsec/default.nix40
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/uefi-firmware-parser/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/valgrind/default.nix137
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/yallback/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/ansi/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/api-linter/default.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/apkid/default.nix47
-rw-r--r--nixpkgs/pkgs/development/tools/apko/default.nix76
-rw-r--r--nixpkgs/pkgs/development/tools/apksigcopier/default.nix75
-rw-r--r--nixpkgs/pkgs/development/tools/apksigner/default.nix94
-rw-r--r--nixpkgs/pkgs/development/tools/apktool/default.nix45
-rw-r--r--nixpkgs/pkgs/development/tools/appthreat-depscan/default.nix53
-rw-r--r--nixpkgs/pkgs/development/tools/argc/default.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/ashpd-demo/default.nix75
-rw-r--r--nixpkgs/pkgs/development/tools/asmfmt/default.nix39
-rw-r--r--nixpkgs/pkgs/development/tools/asn2quickder/default.nix45
-rw-r--r--nixpkgs/pkgs/development/tools/async-profiler/default.nix44
-rw-r--r--nixpkgs/pkgs/development/tools/async/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/ats-acc/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/avro-tools/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/aws-sam-cli/default.nix148
-rw-r--r--nixpkgs/pkgs/development/tools/azcopy/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/azure-functions-core-tools/default.nix50
-rw-r--r--nixpkgs/pkgs/development/tools/azure-functions-core-tools/deps.nix673
-rw-r--r--nixpkgs/pkgs/development/tools/azure-static-sites-client/default.nix97
-rwxr-xr-xnixpkgs/pkgs/development/tools/azure-static-sites-client/update.sh9
-rw-r--r--nixpkgs/pkgs/development/tools/azure-static-sites-client/versions.json59
-rw-r--r--nixpkgs/pkgs/development/tools/b4/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/backblaze-b2/default.nix99
-rw-r--r--nixpkgs/pkgs/development/tools/bacon/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/bashate/default.nix45
-rw-r--r--nixpkgs/pkgs/development/tools/bazel-gazelle/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/bazel-kazel/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/bazel-watcher/default.nix110
-rw-r--r--nixpkgs/pkgs/development/tools/bazel-watcher/use-go-in-path.patch13
-rw-r--r--nixpkgs/pkgs/development/tools/bazelisk/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/bbin/default.nix48
-rw-r--r--nixpkgs/pkgs/development/tools/bearer/default.nix45
-rw-r--r--nixpkgs/pkgs/development/tools/benthos/default.nix38
-rw-r--r--nixpkgs/pkgs/development/tools/bin2c/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/bingo/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/biodiff/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/biome/default.nix65
-rw-r--r--nixpkgs/pkgs/development/tools/bloaty/default.nix64
-rw-r--r--nixpkgs/pkgs/development/tools/bloom/default.nix55
-rw-r--r--nixpkgs/pkgs/development/tools/bodyclose/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/bomber-go/default.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/boomerang/default.nix38
-rw-r--r--nixpkgs/pkgs/development/tools/boost-build/default.nix74
-rw-r--r--nixpkgs/pkgs/development/tools/bpf-linker/default.nix48
-rw-r--r--nixpkgs/pkgs/development/tools/buf/default.nix78
-rw-r--r--nixpkgs/pkgs/development/tools/buf/skip_broken_tests.patch28
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/alibuild/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/alire/default.nix51
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/apache-ant/default.nix111
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/apache-maven/build-package.nix87
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/apache-maven/default.nix50
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/arpa2cm/default.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bam/default.nix39
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/README.md7
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/bash-tools-test.nix44
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/bazel-remote/default.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_4/actions_path.patch41
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_4/default.nix662
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_4/no-arc.patch34
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_4/src-deps.json1585
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_4/upb-clang16.patch57
-rwxr-xr-xnixpkgs/pkgs/development/tools/build-managers/bazel/bazel_4/update-srcDeps.py54
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_5/actions_path.patch41
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_5/bazel_darwin_sandbox.patch11
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_5/default.nix661
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_5/no-arc.patch42
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_5/src-deps.json2160
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_5/upb-clang16.patch83
-rwxr-xr-xnixpkgs/pkgs/development/tools/build-managers/bazel/bazel_5/update-srcDeps.py54
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_6/actions_path.patch41
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_6/default.nix699
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_6/java_toolchain.patch33
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_6/nix-hacks.patch40
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_6/no-arc.patch42
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_6/src-deps.json2271
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_6/strict_proto_deps.patch21
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_6/upb-clang16.patch30
-rwxr-xr-xnixpkgs/pkgs/development/tools/build-managers/bazel/bazel_6/update-srcDeps.py54
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_7/MODULE.bazel.lock8657
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_7/bazel-repository-cache.nix139
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_7/cpp-test-MODULE.bazel7
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_7/cpp-test-MODULE.bazel.lock1367
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_7/cpp-test.nix89
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_7/darwin_sleep.patch56
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_7/default.nix586
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_7/java-test.nix89
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_7/java_toolchain.patch30
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_7/nix-hacks.patch51
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_7/protobuf-test.MODULE.bazel.lock2803
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_7/protobuf-test.nix171
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_7/strict_proto_deps.patch21
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_7/tests.nix173
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_7/trim-last-argument-to-gcc-if-empty.patch17
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_7/xcode_locator.patch13
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_darwin_sandbox.patch11
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_rc.patch13
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/buildtools/default.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/cpp-test.nix62
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/java-test.nix68
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/nix-hacks.patch43
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/protobuf-test.nix187
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/python-bin-path-test.nix86
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/shebang-test.nix58
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/strict_action_env.patch13
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/trim-last-argument-to-gcc-if-empty.patch37
-rwxr-xr-xnixpkgs/pkgs/development/tools/build-managers/bazel/update-srcDeps.py62
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bear/default.nix93
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bear/fix-functional-tests.patch32
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bloop/default.nix72
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bob/default.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/boot/builder.sh14
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/boot/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/buck/default.nix46
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/buck/pex-mtime.patch13
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/buck2/default.nix120
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/buck2/hashes.json7
-rwxr-xr-xnixpkgs/pkgs/development/tools/build-managers/buck2/update.sh51
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/build2/bdep.nix50
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/build2/bootstrap.nix54
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/build2/bpkg.nix69
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/build2/default.nix110
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/build2/nix-ldflags-sysdirs.patch42
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/build2/remove-config-store-paths.patch14
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/build2/setup-hook.sh91
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/colormake/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/conan/default.nix115
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/corrosion/default.nix47
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/drake/Gemfile2
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/drake/Gemfile.lock15
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/drake/default.nix17
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/drake/gemset.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/dub/default.nix157
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/ekam/default.nix67
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/fac/default.nix53
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/gn/default.nix10
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/gn/generic.nix61
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/gn/rev1924.nix8
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/gn/setup-hook.sh14
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/gnumake/0001-No-impure-bin-sh.patch35
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/gnumake/0002-remove-impure-dirs.patch40
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/gnumake/4.2/default.nix61
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/gnumake/4.2/glibc-2.27-glob.patch32
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/gnumake/4.2/glibc-2.33-glob.patch17
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/gnumake/4.2/impure-dirs.patch34
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/gnumake/4.2/pselect.patch170
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/gnumake/default.nix75
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/gprbuild/boot.nix97
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/gprbuild/default.nix64
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/gprbuild/gpr-project-darwin-rpath-hook.sh10
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/gprbuild/gpr-project-path-hook.sh8
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/gprbuild/gprbuild-relocatable-build.patch13
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/gprbuild/nixpkgs-gnat.xml56
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/gradle/default.nix150
-rwxr-xr-xnixpkgs/pkgs/development/tools/build-managers/gradle/update.sh67
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/gup/default.nix44
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/icmake/default.nix46
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/jam/default.nix118
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/kati/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/kati/version.patch19
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/knit/default.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/leiningen/default.nix63
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/mage/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/mill/default.nix52
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/moon/default.nix44
-rwxr-xr-xnixpkgs/pkgs/development/tools/build-managers/msbuild/create-deps.sh57
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/msbuild/default.nix162
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/msbuild/deps.nix1842
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/muon/default.nix139
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/ninja/default.nix107
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/ninja/setup-hook.sh86
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/qbs/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/rake/Gemfile2
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/rake/Gemfile.lock13
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/rake/default.nix17
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/rake/gemset.nix12
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/rebar/default.nix40
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/rebar3/default.nix143
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/rebar3/global-plugins.patch14
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/rebar3/rebar-deps.nix18
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/rebar3/rebar_ignore_deps.erl43
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/rebar3/skip-plugins.patch80
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/redo-apenwarr/default.nix73
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/redo-c/Makefile10
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/redo-c/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/redo-sh/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/redo/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/remake/default.nix40
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/remake/glibc-2.27-glob.patch34
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/samurai/default.nix59
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/sbt-extras/default.nix78
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/sbt/default.nix55
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/sbt/scala-native.nix14
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/scala-cli/default.nix87
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/scala-cli/sources.json21
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/scala-cli/update.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/scons/3.1.2.nix48
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/scons/4.1.0.nix57
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/scons/4.5.2.nix62
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/scons/env.patch9
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/scons/setup-hook.sh87
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/shards/default.nix45
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/shards/shards.nix8
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/turtle-build/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/waf/default.nix80
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/waf/hook.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/waf/setup-hook.sh94
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/xmake/default.nix48
-rw-r--r--nixpkgs/pkgs/development/tools/buildah/default.nix74
-rw-r--r--nixpkgs/pkgs/development/tools/buildah/wrapper.nix67
-rw-r--r--nixpkgs/pkgs/development/tools/buildkit/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/buildpack/default.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/bundletool/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/bunyan-rs/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/butane/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/cadre/Gemfile3
-rw-r--r--nixpkgs/pkgs/development/tools/cadre/Gemfile.lock19
-rw-r--r--nixpkgs/pkgs/development/tools/cadre/default.nix17
-rw-r--r--nixpkgs/pkgs/development/tools/cadre/gemset.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/cambalache/default.nix105
-rw-r--r--nixpkgs/pkgs/development/tools/capnproto-java/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/capnproto-rust/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/carto/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/castxml/default.nix71
-rw-r--r--nixpkgs/pkgs/development/tools/cbfmt/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/cbor-diag/Gemfile2
-rw-r--r--nixpkgs/pkgs/development/tools/cbor-diag/Gemfile.lock27
-rw-r--r--nixpkgs/pkgs/development/tools/cbor-diag/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/cbor-diag/gemset.nix84
-rw-r--r--nixpkgs/pkgs/development/tools/cddl/Gemfile2
-rw-r--r--nixpkgs/pkgs/development/tools/cddl/Gemfile.lock40
-rw-r--r--nixpkgs/pkgs/development/tools/cddl/default.nix41
-rw-r--r--nixpkgs/pkgs/development/tools/cddl/gemset.nix145
-rw-r--r--nixpkgs/pkgs/development/tools/cdecl/cdecl-2.5-lex.patch13
-rw-r--r--nixpkgs/pkgs/development/tools/cdecl/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/cdecrypt/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/ceedling/Gemfile2
-rw-r--r--nixpkgs/pkgs/development/tools/ceedling/Gemfile.lock21
-rw-r--r--nixpkgs/pkgs/development/tools/ceedling/default.nix16
-rw-r--r--nixpkgs/pkgs/development/tools/ceedling/gemset.nix53
-rw-r--r--nixpkgs/pkgs/development/tools/cfn-nag/Gemfile2
-rw-r--r--nixpkgs/pkgs/development/tools/cfn-nag/Gemfile.lock51
-rw-r--r--nixpkgs/pkgs/development/tools/cfn-nag/default.nix19
-rw-r--r--nixpkgs/pkgs/development/tools/cfn-nag/gemset.nix189
-rw-r--r--nixpkgs/pkgs/development/tools/changie/default.nix40
-rw-r--r--nixpkgs/pkgs/development/tools/check-jsonschema/default.nix49
-rw-r--r--nixpkgs/pkgs/development/tools/check/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/checkmake/default.nix60
-rw-r--r--nixpkgs/pkgs/development/tools/checkmate/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/chit/Cargo.lock1872
-rw-r--r--nixpkgs/pkgs/development/tools/chit/default.nix55
-rw-r--r--nixpkgs/pkgs/development/tools/circup/default.nix56
-rw-r--r--nixpkgs/pkgs/development/tools/clang-tools/default.nix54
-rwxr-xr-xnixpkgs/pkgs/development/tools/clang-tools/wrapper27
-rw-r--r--nixpkgs/pkgs/development/tools/clean-css-cli/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/click/dbus-test-runner.patch23
-rw-r--r--nixpkgs/pkgs/development/tools/click/default.nix92
-rw-r--r--nixpkgs/pkgs/development/tools/clickable/default.nix84
-rw-r--r--nixpkgs/pkgs/development/tools/clj-kondo/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/clog-cli/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/cloud-nuke/default.nix43
-rw-r--r--nixpkgs/pkgs/development/tools/cloudsmith-cli/default.nix48
-rw-r--r--nixpkgs/pkgs/development/tools/clpm/default.nix73
-rw-r--r--nixpkgs/pkgs/development/tools/cmake-format/default.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/cobra-cli/default.nix39
-rw-r--r--nixpkgs/pkgs/development/tools/cocoapods/Gemfile3
-rw-r--r--nixpkgs/pkgs/development/tools/cocoapods/Gemfile-beta5
-rw-r--r--nixpkgs/pkgs/development/tools/cocoapods/Gemfile-beta.lock107
-rw-r--r--nixpkgs/pkgs/development/tools/cocoapods/Gemfile.lock107
-rw-r--r--nixpkgs/pkgs/development/tools/cocoapods/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/cocoapods/gemset-beta.nix436
-rw-r--r--nixpkgs/pkgs/development/tools/cocoapods/gemset.nix420
-rwxr-xr-xnixpkgs/pkgs/development/tools/cocoapods/update15
-rw-r--r--nixpkgs/pkgs/development/tools/cocogitto/default.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/code-maat/default.nix45
-rw-r--r--nixpkgs/pkgs/development/tools/codeowners/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/coder/default.nix90
-rw-r--r--nixpkgs/pkgs/development/tools/codespell/default.nix55
-rw-r--r--nixpkgs/pkgs/development/tools/comby/comby.patch1076
-rw-r--r--nixpkgs/pkgs/development/tools/comby/default.nix104
-rw-r--r--nixpkgs/pkgs/development/tools/compass/Gemfile2
-rw-r--r--nixpkgs/pkgs/development/tools/compass/Gemfile.lock31
-rw-r--r--nixpkgs/pkgs/development/tools/compass/default.nix20
-rw-r--r--nixpkgs/pkgs/development/tools/compass/gemset.nix96
-rw-r--r--nixpkgs/pkgs/development/tools/compile-daemon/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/confluent-cli/default.nix54
-rw-r--r--nixpkgs/pkgs/development/tools/conftest/default.nix64
-rw-r--r--nixpkgs/pkgs/development/tools/container2wasm/default.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/agola/default.nix42
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/buildbot/default.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/buildbot/master.nix164
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/buildbot/pkg.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/buildbot/plugins.nix258
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/buildbot/skip_test_linux_distro.patch11
-rwxr-xr-xnixpkgs/pkgs/development/tools/continuous-integration/buildbot/update.sh17
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/buildbot/worker.nix66
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/buildkite-agent/default.nix65
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/buildkite-cli/default.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/buildkite-test-collector-rust/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/cirrus-cli/default.nix43
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/codeberg-pages/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/codeberg-pages/disable_httptest.patch55
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/drone-cli/0001-use-builtin-go-syscerts.patch39
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/drone-cli/default.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/drone-runner-docker/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/drone-runner-exec/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/drone-runner-ssh/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/drone/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/fly/default.nix39
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/forgejo-actions-runner/default.nix43
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/gitea-actions-runner/default.nix41
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/github-runner/default.nix328
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/github-runner/deps.nix270
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/github-runner/patches/dont-install-service.patch28
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/github-runner/patches/env-sh-use-runner-root.patch76
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/github-runner/patches/host-context-dirs.patch20
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/github-runner/patches/use-get-directory-for-diag.patch25
-rwxr-xr-xnixpkgs/pkgs/development/tools/continuous-integration/github-runner/update.sh19
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/gitlab-runner/default.nix74
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/gitlab-runner/fix-shell-path.patch25
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/gitlab-runner/remove-bash-test.patch82
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/gocd-agent/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/gocd-server/default.nix41
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/hci/default.nix39
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/hercules-ci-agent/default.nix72
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/jenkins/default.nix77
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/laminar/default.nix67
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/laminar/patches/no-network.patch39
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/woodpecker-pipeline-transform/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/woodpecker-plugin-git/default.nix42
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/woodpecker/agent.nix17
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/woodpecker/cli.nix17
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/woodpecker/common.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/woodpecker/server.nix21
-rwxr-xr-xnixpkgs/pkgs/development/tools/continuous-integration/woodpecker/update.sh34
-rw-r--r--nixpkgs/pkgs/development/tools/corundum/Gemfile3
-rw-r--r--nixpkgs/pkgs/development/tools/corundum/Gemfile.lock56
-rw-r--r--nixpkgs/pkgs/development/tools/corundum/default.nix17
-rw-r--r--nixpkgs/pkgs/development/tools/corundum/gemset.nix154
-rw-r--r--nixpkgs/pkgs/development/tools/cotton/Cargo.lock2455
-rw-r--r--nixpkgs/pkgs/development/tools/cotton/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/coursier/default.nix56
-rw-r--r--nixpkgs/pkgs/development/tools/cpm-cmake/default.nix43
-rw-r--r--nixpkgs/pkgs/development/tools/cppclean/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/crd2pulumi/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/csvq/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/ctlptl/default.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/cucumber/Gemfile2
-rw-r--r--nixpkgs/pkgs/development/tools/cucumber/Gemfile.lock43
-rw-r--r--nixpkgs/pkgs/development/tools/cucumber/default.nix19
-rw-r--r--nixpkgs/pkgs/development/tools/cucumber/gemset.nix147
-rw-r--r--nixpkgs/pkgs/development/tools/cue/default.nix52
-rw-r--r--nixpkgs/pkgs/development/tools/cue/validator.nix17
-rw-r--r--nixpkgs/pkgs/development/tools/cuelsp/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/dapper/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/dapr/cli/default.nix48
-rw-r--r--nixpkgs/pkgs/development/tools/darklua/default.nix38
-rw-r--r--nixpkgs/pkgs/development/tools/database/apgdiff/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/database/atlas/default.nix46
-rw-r--r--nixpkgs/pkgs/development/tools/database/cdb/default.nix58
-rw-r--r--nixpkgs/pkgs/development/tools/database/clickhouse-backup/default.nix40
-rw-r--r--nixpkgs/pkgs/development/tools/database/dblab/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/database/dbmate/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/database/dynein/default.nix48
-rw-r--r--nixpkgs/pkgs/development/tools/database/ephemeralpg/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/database/gobang/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/database/indradb/default.nix56
-rw-r--r--nixpkgs/pkgs/development/tools/database/liquibase/default.nix97
-rw-r--r--nixpkgs/pkgs/development/tools/database/litecli/default.nix46
-rw-r--r--nixpkgs/pkgs/development/tools/database/litefs/default.nix44
-rw-r--r--nixpkgs/pkgs/development/tools/database/litestream/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/database/mermerd/default.nix45
-rw-r--r--nixpkgs/pkgs/development/tools/database/movine/default.nix54
-rw-r--r--nixpkgs/pkgs/development/tools/database/pg_activity/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/database/pg_checksums/default.nix38
-rw-r--r--nixpkgs/pkgs/development/tools/database/pgagroal/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/database/pgagroal/do-not-search-libatomic.patch15
-rw-r--r--nixpkgs/pkgs/development/tools/database/pgsync/Gemfile2
-rw-r--r--nixpkgs/pkgs/development/tools/database/pgsync/Gemfile.lock23
-rw-r--r--nixpkgs/pkgs/development/tools/database/pgsync/default.nix16
-rw-r--r--nixpkgs/pkgs/development/tools/database/pgsync/gemset.nix64
-rw-r--r--nixpkgs/pkgs/development/tools/database/pgweb/default.nix55
-rw-r--r--nixpkgs/pkgs/development/tools/database/prisma-engines/Cargo.lock6370
-rw-r--r--nixpkgs/pkgs/development/tools/database/prisma-engines/default.nix91
-rw-r--r--nixpkgs/pkgs/development/tools/database/prqlc/default.nix59
-rw-r--r--nixpkgs/pkgs/development/tools/database/pyrseas/default.nix49
-rw-r--r--nixpkgs/pkgs/development/tools/database/replibyte/default.nix46
-rw-r--r--nixpkgs/pkgs/development/tools/database/schemaspy/default.nix66
-rw-r--r--nixpkgs/pkgs/development/tools/database/shmig/default.nix43
-rw-r--r--nixpkgs/pkgs/development/tools/database/sleek/Cargo.lock470
-rw-r--r--nixpkgs/pkgs/development/tools/database/sleek/default.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/database/sqlboiler-crdb/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/database/sqlc/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/database/sqlcheck/default.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/database/sqlcl/default.nix39
-rw-r--r--nixpkgs/pkgs/development/tools/database/sqlcmd/default.nix55
-rw-r--r--nixpkgs/pkgs/development/tools/database/sqldeveloper/default.nix84
-rw-r--r--nixpkgs/pkgs/development/tools/database/sqlfluff/default.nix71
-rw-r--r--nixpkgs/pkgs/development/tools/database/sqlite-web/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/database/sqlitebrowser/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/database/squirrel-sql/default.nix78
-rw-r--r--nixpkgs/pkgs/development/tools/database/surrealdb-migrations/Cargo.lock4251
-rw-r--r--nixpkgs/pkgs/development/tools/database/surrealdb-migrations/default.nix68
-rw-r--r--nixpkgs/pkgs/development/tools/database/termdbms/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/database/termdbms/viewer.patch12
-rw-r--r--nixpkgs/pkgs/development/tools/database/timescaledb-parallel-copy/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/database/timescaledb-tune/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/database/trino-cli/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/database/vitess/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/database/webdis/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/datree/default.nix58
-rw-r--r--nixpkgs/pkgs/development/tools/dbus-test-runner/default.nix80
-rw-r--r--nixpkgs/pkgs/development/tools/dcadec/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/ddosify/default.nix43
-rw-r--r--nixpkgs/pkgs/development/tools/deadnix/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/dec-decode/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/delve/default.nix51
-rw-r--r--nixpkgs/pkgs/development/tools/dep2nix/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/dep2nix/deps.nix129
-rw-r--r--nixpkgs/pkgs/development/tools/detekt/default.nix38
-rw-r--r--nixpkgs/pkgs/development/tools/devbox/default.nix43
-rw-r--r--nixpkgs/pkgs/development/tools/devd/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/devpi-client/default.nix82
-rw-r--r--nixpkgs/pkgs/development/tools/devpi-server/default.nix120
-rw-r--r--nixpkgs/pkgs/development/tools/devpod/Cargo.lock4518
-rw-r--r--nixpkgs/pkgs/development/tools/devpod/add-tauri-updater-feature.patch13
-rw-r--r--nixpkgs/pkgs/development/tools/devpod/default.nix186
-rw-r--r--nixpkgs/pkgs/development/tools/devpod/package.json63
-rw-r--r--nixpkgs/pkgs/development/tools/devtodo/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/diesel-cli/default.nix82
-rw-r--r--nixpkgs/pkgs/development/tools/distgen/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/dive/default.nix38
-rw-r--r--nixpkgs/pkgs/development/tools/djhtml/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/djlint/default.nix50
-rw-r--r--nixpkgs/pkgs/development/tools/doc2go/default.nix49
-rw-r--r--nixpkgs/pkgs/development/tools/dockfmt/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/dockle/default.nix50
-rw-r--r--nixpkgs/pkgs/development/tools/doctl/default.nix43
-rw-r--r--nixpkgs/pkgs/development/tools/documentation/antora/default.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/documentation/doxygen/default.nix68
-rw-r--r--nixpkgs/pkgs/development/tools/documentation/gi-docgen/default.nix59
-rw-r--r--nixpkgs/pkgs/development/tools/documentation/gnome-doc-utils/default.nix46
-rw-r--r--nixpkgs/pkgs/development/tools/documentation/gtk-doc/default.nix97
-rw-r--r--nixpkgs/pkgs/development/tools/documentation/gtk-doc/respect-xml-catalog-files-var.patch13
-rw-r--r--nixpkgs/pkgs/development/tools/documentation/mdsh/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/dprint/default.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/drip/default.nix39
-rw-r--r--nixpkgs/pkgs/development/tools/drm_info/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/dstp/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/dt-schema/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/dtools/default.nix51
-rw-r--r--nixpkgs/pkgs/development/tools/dum/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/dump_syms/default.nix66
-rw-r--r--nixpkgs/pkgs/development/tools/dyff/default.nix57
-rw-r--r--nixpkgs/pkgs/development/tools/earthly/default.nix56
-rw-r--r--nixpkgs/pkgs/development/tools/eask/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/easyjson/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/ec2-metadata-mock/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/eclint/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/eclipse-mat/default.nix117
-rw-r--r--nixpkgs/pkgs/development/tools/efm-langserver/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/ejs/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/ejson/Gemfile4
-rw-r--r--nixpkgs/pkgs/development/tools/ejson/Gemfile.lock54
-rw-r--r--nixpkgs/pkgs/development/tools/ejson/default.nix43
-rw-r--r--nixpkgs/pkgs/development/tools/ejson/gemset.nix188
-rw-r--r--nixpkgs/pkgs/development/tools/electron-fiddle/default.nix176
-rw-r--r--nixpkgs/pkgs/development/tools/electron/.gitignore1
-rw-r--r--nixpkgs/pkgs/development/tools/electron/binary/default.nix187
-rw-r--r--nixpkgs/pkgs/development/tools/electron/binary/generic.nix154
-rwxr-xr-xnixpkgs/pkgs/development/tools/electron/binary/print-hashes.sh38
-rw-r--r--nixpkgs/pkgs/development/tools/electron/common.nix212
-rw-r--r--nixpkgs/pkgs/development/tools/electron/default.nix12
-rw-r--r--nixpkgs/pkgs/development/tools/electron/info.json2630
-rwxr-xr-xnixpkgs/pkgs/development/tools/electron/update.py279
-rw-r--r--nixpkgs/pkgs/development/tools/electron/version.patch42
-rw-r--r--nixpkgs/pkgs/development/tools/electron/wrapper.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/eliot-tree/default.nix38
-rw-r--r--nixpkgs/pkgs/development/tools/elkhound/default.nix50
-rw-r--r--nixpkgs/pkgs/development/tools/eltclsh/default.nix49
-rw-r--r--nixpkgs/pkgs/development/tools/enochecker-test/default.nix69
-rw-r--r--nixpkgs/pkgs/development/tools/ent/default.nix41
-rw-r--r--nixpkgs/pkgs/development/tools/errcheck/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/esbuild/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/esbuild/netlify.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/eslint_d/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/espup/default.nix77
-rw-r--r--nixpkgs/pkgs/development/tools/evans/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/exhaustive/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/explain/default.nix48
-rw-r--r--nixpkgs/pkgs/development/tools/extism-cli/default.nix43
-rw-r--r--nixpkgs/pkgs/development/tools/f2c/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/faas-cli/default.nix65
-rw-r--r--nixpkgs/pkgs/development/tools/fable/default.nix18
-rwxr-xr-xnixpkgs/pkgs/development/tools/fable/update.sh39
-rw-r--r--nixpkgs/pkgs/development/tools/faq/default.nix48
-rw-r--r--nixpkgs/pkgs/development/tools/fastddsgen/default.nix99
-rw-r--r--nixpkgs/pkgs/development/tools/fastgron/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/fatcat/default.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/fblog/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/fdroidserver/default.nix116
-rw-r--r--nixpkgs/pkgs/development/tools/fermyon-spin/default.nix62
-rw-r--r--nixpkgs/pkgs/development/tools/firebase-tools/default.nix44
-rw-r--r--nixpkgs/pkgs/development/tools/fission/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/flamegraph/default.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/flatpak-builder/default.nix158
-rw-r--r--nixpkgs/pkgs/development/tools/flatpak-builder/fix-paths.patch151
-rw-r--r--nixpkgs/pkgs/development/tools/flatpak-builder/fix-test-paths.patch111
-rw-r--r--nixpkgs/pkgs/development/tools/flatpak-builder/respect-xml-catalog-files-var.patch13
-rw-r--r--nixpkgs/pkgs/development/tools/flawfinder/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/flip-link/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/flock/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/flootty/default.nix18
-rw-r--r--nixpkgs/pkgs/development/tools/flyway/default.nix44
-rw-r--r--nixpkgs/pkgs/development/tools/fnlfmt/default.nix42
-rw-r--r--nixpkgs/pkgs/development/tools/fnm/default.nix43
-rw-r--r--nixpkgs/pkgs/development/tools/fprettify/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/fq/default.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/frece/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/frink/default.nix65
-rw-r--r--nixpkgs/pkgs/development/tools/frugal/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/fsautocomplete/default.nix42
-rw-r--r--nixpkgs/pkgs/development/tools/fsautocomplete/deps.nix280
-rw-r--r--nixpkgs/pkgs/development/tools/functiontrace-server/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/fundoc/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/fusee-launcher/default.nix50
-rw-r--r--nixpkgs/pkgs/development/tools/fusee-nano/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/fx/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/galen/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/gamecube-tools/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/gammaray/default.nix46
-rw-r--r--nixpkgs/pkgs/development/tools/garble/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/gauge/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/gci/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/gcov2lcov/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/gdlv/default.nix38
-rw-r--r--nixpkgs/pkgs/development/tools/gdm/deps.nix12
-rw-r--r--nixpkgs/pkgs/development/tools/gdtoolkit/default.nix89
-rw-r--r--nixpkgs/pkgs/development/tools/geckodriver/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/gemstash/Gemfile2
-rw-r--r--nixpkgs/pkgs/development/tools/gemstash/Gemfile.lock106
-rw-r--r--nixpkgs/pkgs/development/tools/gemstash/default.nix19
-rw-r--r--nixpkgs/pkgs/development/tools/gemstash/gemset.nix467
-rw-r--r--nixpkgs/pkgs/development/tools/gen-license/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/gendef/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/gi-crystal/default.nix42
-rw-r--r--nixpkgs/pkgs/development/tools/gi-crystal/src.patch57
-rw-r--r--nixpkgs/pkgs/development/tools/gi-crystal/store-friendly-library-name.patch10
-rw-r--r--nixpkgs/pkgs/development/tools/ginkgo/default.nix44
-rw-r--r--nixpkgs/pkgs/development/tools/gir/Cargo.lock278
-rw-r--r--nixpkgs/pkgs/development/tools/gir/default.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/git-ps-rs/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/github-changelog-generator/Gemfile4
-rw-r--r--nixpkgs/pkgs/development/tools/github-changelog-generator/Gemfile.lock101
-rw-r--r--nixpkgs/pkgs/development/tools/github-changelog-generator/default.nix17
-rw-r--r--nixpkgs/pkgs/development/tools/github-changelog-generator/gemset.nix420
-rw-r--r--nixpkgs/pkgs/development/tools/github-commenter/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/github-copilot-intellij-agent/default.nix82
-rw-r--r--nixpkgs/pkgs/development/tools/github/bump/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/github/cligh/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/github/github-release/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/glade/default.nix85
-rwxr-xr-xnixpkgs/pkgs/development/tools/glamoroustoolkit/GlamorousToolkit-GetImage25
-rw-r--r--nixpkgs/pkgs/development/tools/glamoroustoolkit/default.nix107
-rw-r--r--nixpkgs/pkgs/development/tools/gllvm/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/global-platform-pro/default.nix71
-rw-r--r--nixpkgs/pkgs/development/tools/glock/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/glock/deps.nix21
-rw-r--r--nixpkgs/pkgs/development/tools/glpaper/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/glslviewer/default.nix60
-rw-r--r--nixpkgs/pkgs/development/tools/gnome-desktop-testing/default.nix46
-rw-r--r--nixpkgs/pkgs/development/tools/gnulib/default.nix48
-rw-r--r--nixpkgs/pkgs/development/tools/gnulib/gnulib-longdouble-redirect.patch72
-rw-r--r--nixpkgs/pkgs/development/tools/go-bindata-assetfs/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/go-bindata/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/go-callvis/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/go-containerregistry/default.nix43
-rw-r--r--nixpkgs/pkgs/development/tools/go-jet/default.nix53
-rw-r--r--nixpkgs/pkgs/development/tools/go-junit-report/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/go-migrate/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/go-minimock/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/go-mockery/default.nix67
-rw-r--r--nixpkgs/pkgs/development/tools/go-mod-graph-chart/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/go-motion/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/go-outline/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/go-protobuf/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/go-swag/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/go-swagger/default.nix38
-rw-r--r--nixpkgs/pkgs/development/tools/go-symbols/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/go-symbols/deps.nix11
-rw-r--r--nixpkgs/pkgs/development/tools/go-task/default.nix53
-rw-r--r--nixpkgs/pkgs/development/tools/go-toml/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/go-tools/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/goa/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/gocode-gomod/default.nix45
-rw-r--r--nixpkgs/pkgs/development/tools/goconst/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/goconvey/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/gocyclo/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/goda/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/godef/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/godot/3/debug-server.nix7
-rw-r--r--nixpkgs/pkgs/development/tools/godot/3/default.nix166
-rw-r--r--nixpkgs/pkgs/development/tools/godot/3/export-templates.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/godot/3/headless.nix7
-rw-r--r--nixpkgs/pkgs/development/tools/godot/3/mono/debug-server.nix7
-rw-r--r--nixpkgs/pkgs/development/tools/godot/3/mono/default.nix65
-rw-r--r--nixpkgs/pkgs/development/tools/godot/3/mono/deps.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/godot/3/mono/export-templates.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/godot/3/mono/glue.nix66
-rw-r--r--nixpkgs/pkgs/development/tools/godot/3/mono/headless.nix7
-rw-r--r--nixpkgs/pkgs/development/tools/godot/3/mono/make-deps.nix59
-rwxr-xr-xnixpkgs/pkgs/development/tools/godot/3/mono/make-deps.sh2
-rw-r--r--nixpkgs/pkgs/development/tools/godot/3/mono/patches/gen_cs_glue_version.py/hardcodeGlueVersion_3.5.2.patch22
-rw-r--r--nixpkgs/pkgs/development/tools/godot/3/mono/server.nix7
-rwxr-xr-xnixpkgs/pkgs/development/tools/godot/3/mono/update-glue-version.sh39
-rw-r--r--nixpkgs/pkgs/development/tools/godot/3/patches/SConstruct/dontClobberEnvironment.patch20
-rw-r--r--nixpkgs/pkgs/development/tools/godot/3/server.nix7
-rw-r--r--nixpkgs/pkgs/development/tools/godot/4/default.nix153
-rw-r--r--nixpkgs/pkgs/development/tools/gogetdoc/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/goimports-reviser/default.nix45
-rw-r--r--nixpkgs/pkgs/development/tools/gojq/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/gojsontoyaml/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/gokart/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/golangci-lint-langserver/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/golangci-lint/default.nix43
-rw-r--r--nixpkgs/pkgs/development/tools/golines/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/golint/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/gomacro/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/gomodifytags/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/gomplate/default.nix54
-rw-r--r--nixpkgs/pkgs/development/tools/google-app-engine-go-sdk/default.nix47
-rw-r--r--nixpkgs/pkgs/development/tools/google-clasp/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/google-java-format/default.nix47
-rw-r--r--nixpkgs/pkgs/development/tools/goperf/default.nix38
-rw-r--r--nixpkgs/pkgs/development/tools/gopkgs/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/gops/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/gore/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/goresym/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/gosec/default.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/gotags/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/gotemplate/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/gotest/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/gotestfmt/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/gotests/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/gotestsum/default.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/gotools/default.nix43
-rw-r--r--nixpkgs/pkgs/development/tools/gotools/setup-hook.sh1
-rw-r--r--nixpkgs/pkgs/development/tools/gotraceui/default.nix45
-rw-r--r--nixpkgs/pkgs/development/tools/govers/default.nix20
-rw-r--r--nixpkgs/pkgs/development/tools/gox/default.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/gpp/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/gptcommit/default.nix48
-rw-r--r--nixpkgs/pkgs/development/tools/gqlgenc/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/gqlint/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/grabserial/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/graphql-client/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/gron/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/grpc-gateway/default.nix48
-rw-r--r--nixpkgs/pkgs/development/tools/gtk-mac-bundler/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/guile/g-wrap/default.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/guile/guile-hall/default.nix44
-rw-r--r--nixpkgs/pkgs/development/tools/halfempty/default.nix48
-rw-r--r--nixpkgs/pkgs/development/tools/haskell/dconf2nix/dconf2nix.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/haskell/dconf2nix/default.nix32
-rwxr-xr-xnixpkgs/pkgs/development/tools/haskell/dconf2nix/update.sh26
-rw-r--r--nixpkgs/pkgs/development/tools/haskell/hadrian/disable-hyperlinked-source.patch12
-rw-r--r--nixpkgs/pkgs/development/tools/haskell/hadrian/ghc-platform.nix16
-rw-r--r--nixpkgs/pkgs/development/tools/haskell/hadrian/ghc-toolchain.nix19
-rw-r--r--nixpkgs/pkgs/development/tools/haskell/hadrian/hadrian.nix55
-rw-r--r--nixpkgs/pkgs/development/tools/haskell/hadrian/make-hadrian.nix59
-rw-r--r--nixpkgs/pkgs/development/tools/haskell/haskell-language-server/withWrapper.nix169
-rw-r--r--nixpkgs/pkgs/development/tools/haskell/hyper-haskell/default.nix53
-rw-r--r--nixpkgs/pkgs/development/tools/haskell/hyper-haskell/server.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/haskell/ihaskell/wrapper.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/haskell/lambdabot/custom-config.patch49
-rw-r--r--nixpkgs/pkgs/development/tools/haskell/lambdabot/default.nix41
-rw-r--r--nixpkgs/pkgs/development/tools/haskell/mueval/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/haskell/vaultenv/default.nix101
-rw-r--r--nixpkgs/pkgs/development/tools/hatch/default.nix102
-rw-r--r--nixpkgs/pkgs/development/tools/hclfmt/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/hcloud/default.nix42
-rw-r--r--nixpkgs/pkgs/development/tools/headache/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/heroku/default.nix45
-rw-r--r--nixpkgs/pkgs/development/tools/hexio/default.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/hexo-cli/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/hobbes/default.nix72
-rw-r--r--nixpkgs/pkgs/development/tools/hors/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/hostess/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/hotdoc/default.nix126
-rw-r--r--nixpkgs/pkgs/development/tools/hover/default.nix101
-rw-r--r--nixpkgs/pkgs/development/tools/hover/fix-assets-path.patch78
-rw-r--r--nixpkgs/pkgs/development/tools/hred/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/html-minifier/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/htmlhint/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/htmlq/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/htmltest/default.nix38
-rw-r--r--nixpkgs/pkgs/development/tools/iaca/2.1.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/iaca/3.0.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/icr/default.nix45
-rw-r--r--nixpkgs/pkgs/development/tools/icr/shards.nix7
-rw-r--r--nixpkgs/pkgs/development/tools/iferr/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/ijq/default.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/ilspycmd/default.nix48
-rw-r--r--nixpkgs/pkgs/development/tools/ilspycmd/deps.nix78
-rw-r--r--nixpkgs/pkgs/development/tools/img/default.nix55
-rw-r--r--nixpkgs/pkgs/development/tools/impl/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/ineffassign/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/inferno/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/infisical/default.nix87
-rw-r--r--nixpkgs/pkgs/development/tools/infisical/hashes.json6
-rwxr-xr-xnixpkgs/pkgs/development/tools/infisical/update.sh41
-rw-r--r--nixpkgs/pkgs/development/tools/initool/default.nix41
-rw-r--r--nixpkgs/pkgs/development/tools/irony-server/default.nix21
-rw-r--r--nixpkgs/pkgs/development/tools/jake/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/jaq/default.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/java/cfr/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/java/dex2jar/default.nix45
-rw-r--r--nixpkgs/pkgs/development/tools/java/fastjar/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/java/java-language-server/default.nix60
-rw-r--r--nixpkgs/pkgs/development/tools/java/jextract/default.nix96
-rw-r--r--nixpkgs/pkgs/development/tools/java/jhiccup/default.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/java/jprofiler/default.nix102
-rw-r--r--nixpkgs/pkgs/development/tools/java/sawjap/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/java/visualvm/default.nix47
-rw-r--r--nixpkgs/pkgs/development/tools/jazzy/Gemfile2
-rw-r--r--nixpkgs/pkgs/development/tools/jazzy/Gemfile.lock109
-rw-r--r--nixpkgs/pkgs/development/tools/jazzy/default.nix21
-rw-r--r--nixpkgs/pkgs/development/tools/jazzy/gemset.nix434
-rw-r--r--nixpkgs/pkgs/development/tools/jbake/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/jbang/default.nix39
-rw-r--r--nixpkgs/pkgs/development/tools/jd-diff-patch/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/jet/default.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/jf/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/jfmt/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/jid/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/jid/go-mod.patch79
-rw-r--r--nixpkgs/pkgs/development/tools/jira-cli-go/default.nix54
-rw-r--r--nixpkgs/pkgs/development/tools/jless/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/jmespath/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/jo/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/jp/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/jpexs/default.nix56
-rw-r--r--nixpkgs/pkgs/development/tools/jq/default.nix84
-rw-r--r--nixpkgs/pkgs/development/tools/jql/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/jqp/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/jsduck/Gemfile3
-rw-r--r--nixpkgs/pkgs/development/tools/jsduck/Gemfile.lock23
-rw-r--r--nixpkgs/pkgs/development/tools/jsduck/default.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/jsduck/gemset.nix51
-rw-r--r--nixpkgs/pkgs/development/tools/json2hcl/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/json2tsv/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/jsonnet-bundler/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/jtc/default.nix45
-rw-r--r--nixpkgs/pkgs/development/tools/just/default.nix86
-rw-r--r--nixpkgs/pkgs/development/tools/just/setup-hook.sh58
-rw-r--r--nixpkgs/pkgs/development/tools/k6/default.nix39
-rw-r--r--nixpkgs/pkgs/development/tools/kaf/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/kafka-delta-ingest/Cargo.lock2898
-rw-r--r--nixpkgs/pkgs/development/tools/kafka-delta-ingest/default.nix51
-rw-r--r--nixpkgs/pkgs/development/tools/kafkactl/default.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/karate/default.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/karma-runner/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/karma-runner/fix-package-lock.patch53
-rw-r--r--nixpkgs/pkgs/development/tools/kcat/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/kcli/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/kdash/default.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/kdoctor/default.nix43
-rw-r--r--nixpkgs/pkgs/development/tools/kgt/default.nix81
-rw-r--r--nixpkgs/pkgs/development/tools/kind/default.nix43
-rw-r--r--nixpkgs/pkgs/development/tools/kind/kernel-module-path.patch47
-rw-r--r--nixpkgs/pkgs/development/tools/knightos/genkfs/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/knightos/kcc/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/knightos/kimg/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/knightos/kpack/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/knightos/mkrom/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/knightos/mktiupgrade/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/knightos/patchrom/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/knightos/regenkfs/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/knightos/remkrom/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/knightos/scas/default.nix39
-rw-r--r--nixpkgs/pkgs/development/tools/knightos/z80e/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/ko/default.nix71
-rw-r--r--nixpkgs/pkgs/development/tools/konf/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/konstraint/default.nix49
-rw-r--r--nixpkgs/pkgs/development/tools/krankerl/default.nix47
-rw-r--r--nixpkgs/pkgs/development/tools/krew/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/ktlint/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/kube-linter/default.nix44
-rw-r--r--nixpkgs/pkgs/development/tools/kube-prompt/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/kubectx/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/kubedock/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/kubeprompt/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/kubepug/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/kubernetes-code-generator/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/kubernetes-controller-tools/default.nix38
-rw-r--r--nixpkgs/pkgs/development/tools/kubernetes-controller-tools/version.patch23
-rw-r--r--nixpkgs/pkgs/development/tools/kubeswitch/default.nix40
-rw-r--r--nixpkgs/pkgs/development/tools/kubie/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/kustomize/3.nix41
-rw-r--r--nixpkgs/pkgs/development/tools/kustomize/4.nix48
-rw-r--r--nixpkgs/pkgs/development/tools/kustomize/default.nix46
-rw-r--r--nixpkgs/pkgs/development/tools/kustomize/kustomize-sops.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/kythe/default.nix49
-rw-r--r--nixpkgs/pkgs/development/tools/lalrpop/default.nix46
-rw-r--r--nixpkgs/pkgs/development/tools/lalrpop/use-correct-binary-path-in-tests.patch13
-rw-r--r--nixpkgs/pkgs/development/tools/language-servers/ansible-language-server/default.nix43
-rw-r--r--nixpkgs/pkgs/development/tools/language-servers/beancount-language-server/default.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/language-servers/buf-language-server/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/language-servers/ccls/default.nix41
-rw-r--r--nixpkgs/pkgs/development/tools/language-servers/ccls/wrapper9
-rw-r--r--nixpkgs/pkgs/development/tools/language-servers/crystalline/default.nix48
-rw-r--r--nixpkgs/pkgs/development/tools/language-servers/crystalline/shards.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/language-servers/csharp-ls/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/language-servers/docker-compose-language-service/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/language-servers/dockerfile-language-server-nodejs/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/language-servers/dot-language-server/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/language-servers/emmet-language-server/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/language-servers/emmet-language-server/package-lock.json896
-rw-r--r--nixpkgs/pkgs/development/tools/language-servers/emmet-ls/default.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/language-servers/fortls/default.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/language-servers/fortran-language-server/default.nix21
-rw-r--r--nixpkgs/pkgs/development/tools/language-servers/glslls/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/language-servers/gopls/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/language-servers/helm-ls/default.nix51
-rw-r--r--nixpkgs/pkgs/development/tools/language-servers/javascript-typescript-langserver/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/language-servers/jq-lsp/default.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/language-servers/jsonnet-language-server/default.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/language-servers/kotlin-language-server/default.nix39
-rw-r--r--nixpkgs/pkgs/development/tools/language-servers/lua-language-server/default.nix92
-rw-r--r--nixpkgs/pkgs/development/tools/language-servers/metals/default.nix42
-rw-r--r--nixpkgs/pkgs/development/tools/language-servers/millet/Cargo.lock1655
-rw-r--r--nixpkgs/pkgs/development/tools/language-servers/millet/default.nix38
-rw-r--r--nixpkgs/pkgs/development/tools/language-servers/neocmakelsp/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/language-servers/nil/default.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/language-servers/nixd/default.nix92
-rw-r--r--nixpkgs/pkgs/development/tools/language-servers/openscad-lsp/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/language-servers/perlnavigator/default.nix80
-rw-r--r--nixpkgs/pkgs/development/tools/language-servers/postgres-lsp/default.nix38
-rw-r--r--nixpkgs/pkgs/development/tools/language-servers/pylyzer/default.nix70
-rw-r--r--nixpkgs/pkgs/development/tools/language-servers/rnix-lsp/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/language-servers/ruff-lsp/default.nix74
-rw-r--r--nixpkgs/pkgs/development/tools/language-servers/rune-languageserver/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/language-servers/svls/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/language-servers/typst-lsp/Cargo.lock4197
-rw-r--r--nixpkgs/pkgs/development/tools/language-servers/typst-lsp/default.nix56
-rw-r--r--nixpkgs/pkgs/development/tools/language-servers/vala-language-server/default.nix57
-rw-r--r--nixpkgs/pkgs/development/tools/language-servers/verible/default.nix97
-rw-r--r--nixpkgs/pkgs/development/tools/language-servers/vhdl-ls/default.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/language-servers/vscode-langservers-extracted/default.nix43
-rw-r--r--nixpkgs/pkgs/development/tools/language-servers/yaml-language-server/default.nix41
-rw-r--r--nixpkgs/pkgs/development/tools/language-servers/yaml-language-server/package.json108
-rw-r--r--nixpkgs/pkgs/development/tools/language-servers/zls/default.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/language-servers/zls/deps.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/lazygit/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/lc3tools/0001-mangle-configure.patch29
-rw-r--r--nixpkgs/pkgs/development/tools/lc3tools/0002-lc3os-path.patch21
-rw-r--r--nixpkgs/pkgs/development/tools/lc3tools/0003-lc3sim-tk-path.patch13
-rw-r--r--nixpkgs/pkgs/development/tools/lc3tools/0004-configure-use-cc.patch22
-rw-r--r--nixpkgs/pkgs/development/tools/lc3tools/default.nix57
-rw-r--r--nixpkgs/pkgs/development/tools/ldid-procursus/default.nix44
-rw-r--r--nixpkgs/pkgs/development/tools/ldid/default.nix67
-rw-r--r--nixpkgs/pkgs/development/tools/leaps/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/legitify/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/librarian-puppet-go/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/librarian-puppet-go/deps.nix12
-rw-r--r--nixpkgs/pkgs/development/tools/libsigrok/default.nix63
-rw-r--r--nixpkgs/pkgs/development/tools/libsigrokdecode/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/license-scanner/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/license_finder/Gemfile2
-rw-r--r--nixpkgs/pkgs/development/tools/license_finder/Gemfile.lock26
-rw-r--r--nixpkgs/pkgs/development/tools/license_finder/default.nix19
-rw-r--r--nixpkgs/pkgs/development/tools/license_finder/gemset.nix74
-rw-r--r--nixpkgs/pkgs/development/tools/lightningcss/default.nix43
-rw-r--r--nixpkgs/pkgs/development/tools/literate-programming/Literate/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/literate-programming/eweb/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/literate-programming/funnelweb/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/literate-programming/md-tangle/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/literate-programming/noweb/default.nix86
-rw-r--r--nixpkgs/pkgs/development/tools/literate-programming/noweb/no-FAQ.patch13
-rw-r--r--nixpkgs/pkgs/development/tools/literate-programming/nuweb/default.nix45
-rw-r--r--nixpkgs/pkgs/development/tools/loganalyzer/default.nix56
-rw-r--r--nixpkgs/pkgs/development/tools/ls-lint/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/luaformatter/default.nix38
-rw-r--r--nixpkgs/pkgs/development/tools/luaformatter/fix-lib-paths.patch67
-rw-r--r--nixpkgs/pkgs/development/tools/lurk/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/lv_img_conv/default.nix64
-rw-r--r--nixpkgs/pkgs/development/tools/maizzle/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/makerpm/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/maligned/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/mani/default.nix47
-rw-r--r--nixpkgs/pkgs/development/tools/manifest-tool/default.nix62
-rw-r--r--nixpkgs/pkgs/development/tools/marksman/default.nix59
-rw-r--r--nixpkgs/pkgs/development/tools/marksman/deps.nix195
-rwxr-xr-xnixpkgs/pkgs/development/tools/marksman/update.sh18
-rw-r--r--nixpkgs/pkgs/development/tools/mars-mips/default.nix50
-rw-r--r--nixpkgs/pkgs/development/tools/mask/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/mbed-cli/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/mblock-mlink/default.nix40
-rw-r--r--nixpkgs/pkgs/development/tools/mdk/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/melange/default.nix72
-rw-r--r--nixpkgs/pkgs/development/tools/memray/default.nix71
-rw-r--r--nixpkgs/pkgs/development/tools/metal-cli/default.nix53
-rw-r--r--nixpkgs/pkgs/development/tools/micronaut/default.nix40
-rw-r--r--nixpkgs/pkgs/development/tools/minizinc/default.nix46
-rw-r--r--nixpkgs/pkgs/development/tools/minizinc/gecode.msc16
-rw-r--r--nixpkgs/pkgs/development/tools/minizinc/ide.nix48
-rw-r--r--nixpkgs/pkgs/development/tools/minizinc/simple-test/aust.mzn20
-rw-r--r--nixpkgs/pkgs/development/tools/minizinc/simple-test/default.nix21
-rw-r--r--nixpkgs/pkgs/development/tools/minizinc/simple-test/loan.mzn24
-rw-r--r--nixpkgs/pkgs/development/tools/minizinc/simple-test/loan1.dzn3
-rw-r--r--nixpkgs/pkgs/development/tools/misc/abi-compliance-checker/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/misc/abi-dumper/default.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/misc/acr/default.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/misc/act/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/misc/arcanist/default.nix88
-rw-r--r--nixpkgs/pkgs/development/tools/misc/arcanist/dont-require-python3-in-path.patch26
-rw-r--r--nixpkgs/pkgs/development/tools/misc/arcanist/shellcomplete-strlen-null.patch13
-rw-r--r--nixpkgs/pkgs/development/tools/misc/argbash/default.nix50
-rw-r--r--nixpkgs/pkgs/development/tools/misc/astyle/default.nix21
-rw-r--r--nixpkgs/pkgs/development/tools/misc/autobuild/default.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/misc/autoconf-archive/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/misc/autoconf/2.13.nix41
-rw-r--r--nixpkgs/pkgs/development/tools/misc/autoconf/2.64.nix54
-rw-r--r--nixpkgs/pkgs/development/tools/misc/autoconf/2.69.nix53
-rw-r--r--nixpkgs/pkgs/development/tools/misc/autoconf/2.71-fix-race.patch36
-rw-r--r--nixpkgs/pkgs/development/tools/misc/autoconf/2.71.nix69
-rw-r--r--nixpkgs/pkgs/development/tools/misc/autoconf/default.nix64
-rw-r--r--nixpkgs/pkgs/development/tools/misc/autogen/default.nix117
-rw-r--r--nixpkgs/pkgs/development/tools/misc/automake/automake-1.11.x.nix49
-rw-r--r--nixpkgs/pkgs/development/tools/misc/automake/automake-1.15.x.nix43
-rw-r--r--nixpkgs/pkgs/development/tools/misc/automake/automake-1.16.x.nix40
-rw-r--r--nixpkgs/pkgs/development/tools/misc/automake/builder.sh48
-rw-r--r--nixpkgs/pkgs/development/tools/misc/automake/fix-perl-5.26.patch10
-rw-r--r--nixpkgs/pkgs/development/tools/misc/automake/fix-test-autoconf-2.69.patch13
-rw-r--r--nixpkgs/pkgs/development/tools/misc/automake/help2man-SOURCE_DATE_EPOCH-support.patch41
-rw-r--r--nixpkgs/pkgs/development/tools/misc/automake/setup-hook.sh5
-rw-r--r--nixpkgs/pkgs/development/tools/misc/automaticcomponenttoolkit/default.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/misc/aviator/bump-golang-x-sys.patch24
-rw-r--r--nixpkgs/pkgs/development/tools/misc/aviator/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/misc/awf/default.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/misc/babeltrace/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/misc/bashdb/default.nix42
-rw-r--r--nixpkgs/pkgs/development/tools/misc/binutils/0001-Revert-libtool.m4-fix-nm-BSD-flag-detection.patch137
-rw-r--r--nixpkgs/pkgs/development/tools/misc/binutils/0001-Revert-libtool.m4-fix-the-NM-nm-over-here-B-option-w.patch42
-rw-r--r--nixpkgs/pkgs/development/tools/misc/binutils/0001-libtool.m4-update-macos-version-detection-block.patch47
-rw-r--r--nixpkgs/pkgs/development/tools/misc/binutils/2.38/0001-Revert-libtool.m4-fix-nm-BSD-flag-detection.patch137
-rw-r--r--nixpkgs/pkgs/development/tools/misc/binutils/2.38/0001-libtool.m4-update-macos-version-detection-block.patch47
-rw-r--r--nixpkgs/pkgs/development/tools/misc/binutils/2.38/always-search-rpath.patch14
-rw-r--r--nixpkgs/pkgs/development/tools/misc/binutils/2.38/build-components-separately.patch155
-rw-r--r--nixpkgs/pkgs/development/tools/misc/binutils/2.38/default.nix228
-rw-r--r--nixpkgs/pkgs/development/tools/misc/binutils/2.38/deterministic-temp-prefixes.patch36
-rw-r--r--nixpkgs/pkgs/development/tools/misc/binutils/2.38/deterministic.patch12
-rw-r--r--nixpkgs/pkgs/development/tools/misc/binutils/2.38/libbfd.nix59
-rw-r--r--nixpkgs/pkgs/development/tools/misc/binutils/2.38/libopcodes.nix44
-rw-r--r--nixpkgs/pkgs/development/tools/misc/binutils/2.38/mips64-default-n64.patch82
-rw-r--r--nixpkgs/pkgs/development/tools/misc/binutils/2.38/ppc-make-machine-less-strict.patch51
-rw-r--r--nixpkgs/pkgs/development/tools/misc/binutils/2.38/support-ios.patch168
-rw-r--r--nixpkgs/pkgs/development/tools/misc/binutils/2.38/windres-locate-gcc.patch19
-rw-r--r--nixpkgs/pkgs/development/tools/misc/binutils/CVE-2023-1972.patch23
-rw-r--r--nixpkgs/pkgs/development/tools/misc/binutils/always-search-rpath.patch14
-rw-r--r--nixpkgs/pkgs/development/tools/misc/binutils/avr-size.patch435
-rw-r--r--nixpkgs/pkgs/development/tools/misc/binutils/default.nix281
-rw-r--r--nixpkgs/pkgs/development/tools/misc/binutils/deterministic.patch12
-rw-r--r--nixpkgs/pkgs/development/tools/misc/binutils/libbfd.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/misc/binutils/libopcodes.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/misc/binutils/mingw-abort-fix.patch30
-rw-r--r--nixpkgs/pkgs/development/tools/misc/binutils/mips64-default-n64.patch82
-rw-r--r--nixpkgs/pkgs/development/tools/misc/binutils/plugins-no-BINDIR.patch25
-rw-r--r--nixpkgs/pkgs/development/tools/misc/binutils/ppc-make-machine-less-strict.patch51
-rw-r--r--nixpkgs/pkgs/development/tools/misc/binutils/support-ios.patch168
-rw-r--r--nixpkgs/pkgs/development/tools/misc/binutils/windres-locate-gcc.patch19
-rw-r--r--nixpkgs/pkgs/development/tools/misc/blackfire/default.nix105
-rw-r--r--nixpkgs/pkgs/development/tools/misc/blackfire/php-probe.nix161
-rw-r--r--nixpkgs/pkgs/development/tools/misc/bonnmotion/default.nix54
-rw-r--r--nixpkgs/pkgs/development/tools/misc/bonnmotion/install.patch75
-rw-r--r--nixpkgs/pkgs/development/tools/misc/bsdbuild/default.nix68
-rw-r--r--nixpkgs/pkgs/development/tools/misc/c2ffi/default.nix56
-rw-r--r--nixpkgs/pkgs/development/tools/misc/catppuccin-catwalk/default.nix48
-rw-r--r--nixpkgs/pkgs/development/tools/misc/cbrowser/backslashes-quotes.diff49
-rw-r--r--nixpkgs/pkgs/development/tools/misc/cbrowser/default.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/misc/cflow/default.nix51
-rw-r--r--nixpkgs/pkgs/development/tools/misc/cgdb/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/misc/checkbashisms/default.nix39
-rw-r--r--nixpkgs/pkgs/development/tools/misc/chrpath/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/misc/chruby-fish/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/misc/chruby/default.nix44
-rw-r--r--nixpkgs/pkgs/development/tools/misc/chruby/env.patch12
-rw-r--r--nixpkgs/pkgs/development/tools/misc/circleci-cli/default.nix41
-rw-r--r--nixpkgs/pkgs/development/tools/misc/cl-launch/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/misc/cli11/default.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/misc/clojure-lsp/default.nix81
-rw-r--r--nixpkgs/pkgs/development/tools/misc/cmake-language-server/default.nix72
-rw-r--r--nixpkgs/pkgs/development/tools/misc/cmake-language-server/disable-test-timeouts.patch13
-rw-r--r--nixpkgs/pkgs/development/tools/misc/coccinelle/default.nix108
-rw-r--r--nixpkgs/pkgs/development/tools/misc/complexity/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/misc/complgen/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/misc/coreboot-toolchain/default.nix81
-rw-r--r--nixpkgs/pkgs/development/tools/misc/coreboot-toolchain/stable.nix51
-rwxr-xr-xnixpkgs/pkgs/development/tools/misc/coreboot-toolchain/update.sh38
-rw-r--r--nixpkgs/pkgs/development/tools/misc/cppi/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/misc/cproto/cproto.patch11
-rw-r--r--nixpkgs/pkgs/development/tools/misc/cproto/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/misc/creduce/default.nix75
-rw-r--r--nixpkgs/pkgs/development/tools/misc/cscope/default.nix54
-rw-r--r--nixpkgs/pkgs/development/tools/misc/csmith/default.nix49
-rw-r--r--nixpkgs/pkgs/development/tools/misc/ctags/default.nix43
-rw-r--r--nixpkgs/pkgs/development/tools/misc/ctags/unused-collision.patch246
-rw-r--r--nixpkgs/pkgs/development/tools/misc/ctags/wrapped.nix78
-rw-r--r--nixpkgs/pkgs/development/tools/misc/cvise/default.nix90
-rw-r--r--nixpkgs/pkgs/development/tools/misc/cvise/unifdef.patch8
-rw-r--r--nixpkgs/pkgs/development/tools/misc/cwebbin/default.nix59
-rw-r--r--nixpkgs/pkgs/development/tools/misc/d-feet/default.nix90
-rw-r--r--nixpkgs/pkgs/development/tools/misc/d-spy/default.nix60
-rw-r--r--nixpkgs/pkgs/development/tools/misc/dart-sass/default.nix87
-rw-r--r--nixpkgs/pkgs/development/tools/misc/dart-sass/pubspec.lock.json797
-rwxr-xr-xnixpkgs/pkgs/development/tools/misc/dart-sass/update.sh45
-rw-r--r--nixpkgs/pkgs/development/tools/misc/dbench/default.nix46
-rw-r--r--nixpkgs/pkgs/development/tools/misc/dbench/fix-missing-stdint.patch10
-rw-r--r--nixpkgs/pkgs/development/tools/misc/ddd/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/misc/ddd/gcc44.patch11
-rw-r--r--nixpkgs/pkgs/development/tools/misc/debugedit/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/misc/deheader/default.nix68
-rw-r--r--nixpkgs/pkgs/development/tools/misc/dejagnu/default.nix66
-rw-r--r--nixpkgs/pkgs/development/tools/misc/devspace/default.nix42
-rw-r--r--nixpkgs/pkgs/development/tools/misc/dfu-programmer/default.nix21
-rw-r--r--nixpkgs/pkgs/development/tools/misc/dfu-util/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/misc/direvent/default.nix21
-rw-r--r--nixpkgs/pkgs/development/tools/misc/distcc/default.nix84
-rw-r--r--nixpkgs/pkgs/development/tools/misc/distcc/masq.nix45
-rw-r--r--nixpkgs/pkgs/development/tools/misc/doclifter/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/misc/docopts/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/misc/docopts/deps.nix11
-rw-r--r--nixpkgs/pkgs/development/tools/misc/doq/default.nix44
-rw-r--r--nixpkgs/pkgs/development/tools/misc/drush/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/misc/dura/Cargo.lock.patch13
-rw-r--r--nixpkgs/pkgs/development/tools/misc/dura/default.nix45
-rw-r--r--nixpkgs/pkgs/development/tools/misc/dwz/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/misc/edb/default.nix42
-rw-r--r--nixpkgs/pkgs/development/tools/misc/editorconfig-checker/default.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/misc/editorconfig-core-c/default.nix56
-rw-r--r--nixpkgs/pkgs/development/tools/misc/eggdbus/default.nix21
-rw-r--r--nixpkgs/pkgs/development/tools/misc/elfinfo/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/misc/elfkickers/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/misc/elfutils/debug-info-from-env.patch27
-rw-r--r--nixpkgs/pkgs/development/tools/misc/elfutils/default.nix102
-rw-r--r--nixpkgs/pkgs/development/tools/misc/elfutils/musl-error_h.patch66
-rw-r--r--nixpkgs/pkgs/development/tools/misc/epm/default.nix41
-rw-r--r--nixpkgs/pkgs/development/tools/misc/ezno/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/misc/findnewest/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/misc/fsatrace/default.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/misc/fswatch/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/misc/funzzy/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/misc/fzf-make/default.nix40
-rw-r--r--nixpkgs/pkgs/development/tools/misc/gdb/darwin-target-match.patch11
-rw-r--r--nixpkgs/pkgs/development/tools/misc/gdb/debug-info-from-env.patch17
-rw-r--r--nixpkgs/pkgs/development/tools/misc/gdb/default.nix159
-rw-r--r--nixpkgs/pkgs/development/tools/misc/gdbgui/default.nix52
-rw-r--r--nixpkgs/pkgs/development/tools/misc/gede/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/misc/gef/default.nix83
-rw-r--r--nixpkgs/pkgs/development/tools/misc/gengetopt/default.nix50
-rw-r--r--nixpkgs/pkgs/development/tools/misc/gf/build-use-optional-freetype-with-pkg-config.patch13
-rw-r--r--nixpkgs/pkgs/development/tools/misc/gf/default.nix65
-rw-r--r--nixpkgs/pkgs/development/tools/misc/global/default.nix62
-rw-r--r--nixpkgs/pkgs/development/tools/misc/gnum4/default.nix57
-rw-r--r--nixpkgs/pkgs/development/tools/misc/gnum4/loong-fix-build.patch30
-rw-r--r--nixpkgs/pkgs/development/tools/misc/go-license-detector/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/misc/go-licenses/default.nix60
-rw-r--r--nixpkgs/pkgs/development/tools/misc/go-licenses/fix-go-version-error.patch65
-rw-r--r--nixpkgs/pkgs/development/tools/misc/go-md2man/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/misc/gob2/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/misc/gopatch/default.nix44
-rw-r--r--nixpkgs/pkgs/development/tools/misc/gperf/3.0.x.nix47
-rw-r--r--nixpkgs/pkgs/development/tools/misc/gperf/default.nix42
-rw-r--r--nixpkgs/pkgs/development/tools/misc/gperf/gperf-ar-fix.patch46
-rw-r--r--nixpkgs/pkgs/development/tools/misc/gperf/gperf-c++17-register-fix.patch13
-rw-r--r--nixpkgs/pkgs/development/tools/misc/gpuvis/default.nix46
-rw-r--r--nixpkgs/pkgs/development/tools/misc/grcov/default.nix38
-rw-r--r--nixpkgs/pkgs/development/tools/misc/grpc-client-cli/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/misc/grpc-tools/default.nix46
-rw-r--r--nixpkgs/pkgs/development/tools/misc/gtkdialog/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/misc/gtkperf/bench.patch60
-rw-r--r--nixpkgs/pkgs/development/tools/misc/gtkperf/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/misc/help2man/1.40.4-cygwin-nls.patch165
-rw-r--r--nixpkgs/pkgs/development/tools/misc/help2man/default.nix55
-rw-r--r--nixpkgs/pkgs/development/tools/misc/highlight-assertions/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/misc/hound/default.nix41
-rw-r--r--nixpkgs/pkgs/development/tools/misc/httpref/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/misc/husky/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/misc/hydra-cli/Cargo.lock1995
-rw-r--r--nixpkgs/pkgs/development/tools/misc/hydra-cli/default.nix48
-rw-r--r--nixpkgs/pkgs/development/tools/misc/hydra/unstable.nix253
-rw-r--r--nixpkgs/pkgs/development/tools/misc/icon-naming-utils/default.nix19
-rw-r--r--nixpkgs/pkgs/development/tools/misc/igprof/default.nix44
-rw-r--r--nixpkgs/pkgs/development/tools/misc/indent/default.nix63
-rw-r--r--nixpkgs/pkgs/development/tools/misc/inotify-tools/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/misc/intel-gpu-tools/default.nix118
-rw-r--r--nixpkgs/pkgs/development/tools/misc/intltool/default.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/misc/iozone/default.nix62
-rw-r--r--nixpkgs/pkgs/development/tools/misc/itm-tools/Cargo.lock315
-rw-r--r--nixpkgs/pkgs/development/tools/misc/itm-tools/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/misc/itstool/default.nix43
-rw-r--r--nixpkgs/pkgs/development/tools/misc/jcli/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/misc/jiq/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/misc/jscoverage/default.nix55
-rw-r--r--nixpkgs/pkgs/development/tools/misc/jscoverage/jsfalse_to_null.patch26
-rw-r--r--nixpkgs/pkgs/development/tools/misc/jsonfmt/default.nix40
-rw-r--r--nixpkgs/pkgs/development/tools/misc/k2tf/default.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/misc/kdbg/default.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/misc/kool/default.nix40
-rw-r--r--nixpkgs/pkgs/development/tools/misc/libtool/default.nix40
-rw-r--r--nixpkgs/pkgs/development/tools/misc/libtool/libtool2.nix73
-rw-r--r--nixpkgs/pkgs/development/tools/misc/libtree/default.nix48
-rw-r--r--nixpkgs/pkgs/development/tools/misc/libwhich/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/misc/licenseclassifier/default.nix38
-rw-r--r--nixpkgs/pkgs/development/tools/misc/linuxkit/darwin-os-version.patch53
-rw-r--r--nixpkgs/pkgs/development/tools/misc/linuxkit/default.nix60
-rw-r--r--nixpkgs/pkgs/development/tools/misc/linuxkit/support-apple-11-sdk.patch811
-rw-r--r--nixpkgs/pkgs/development/tools/misc/loccount/default.nix45
-rw-r--r--nixpkgs/pkgs/development/tools/misc/lsof/default.nix68
-rw-r--r--nixpkgs/pkgs/development/tools/misc/ltrace/default.nix63
-rw-r--r--nixpkgs/pkgs/development/tools/misc/ltrace/sysdeps-x86.patch328
-rw-r--r--nixpkgs/pkgs/development/tools/misc/ltrace/testsuite-newfstatat.patch13
-rw-r--r--nixpkgs/pkgs/development/tools/misc/lttng-tools/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/misc/lttng-ust/2.12.nix4
-rw-r--r--nixpkgs/pkgs/development/tools/misc/lttng-ust/default.nix4
-rw-r--r--nixpkgs/pkgs/development/tools/misc/lttng-ust/generic.nix48
-rw-r--r--nixpkgs/pkgs/development/tools/misc/lttv/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/misc/luarocks/darwin-3.7.0.patch24
-rw-r--r--nixpkgs/pkgs/development/tools/misc/luarocks/default.nix117
-rw-r--r--nixpkgs/pkgs/development/tools/misc/luarocks/luarocks-nix.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/misc/luarocks/setup-hook.sh16
-rw-r--r--nixpkgs/pkgs/development/tools/misc/macdylibbundler/default.nix39
-rw-r--r--nixpkgs/pkgs/development/tools/misc/mdctags/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/misc/mdl/Gemfile3
-rw-r--r--nixpkgs/pkgs/development/tools/misc/mdl/Gemfile.lock32
-rw-r--r--nixpkgs/pkgs/development/tools/misc/mdl/default.nix17
-rw-r--r--nixpkgs/pkgs/development/tools/misc/mdl/gemset.nix108
-rw-r--r--nixpkgs/pkgs/development/tools/misc/micronucleus/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/misc/mkcert/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/misc/msitools/default.nix72
-rw-r--r--nixpkgs/pkgs/development/tools/misc/n98-magerun/default.nix46
-rw-r--r--nixpkgs/pkgs/development/tools/misc/n98-magerun2/default.nix45
-rw-r--r--nixpkgs/pkgs/development/tools/misc/namaka/default.nix48
-rw-r--r--nixpkgs/pkgs/development/tools/misc/netcoredbg/default.nix91
-rw-r--r--nixpkgs/pkgs/development/tools/misc/netcoredbg/deps.nix122
-rw-r--r--nixpkgs/pkgs/development/tools/misc/ninka/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/misc/nix-bisect/default.nix49
-rw-r--r--nixpkgs/pkgs/development/tools/misc/nix-build-uncached/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/misc/nixbang/default.nix21
-rw-r--r--nixpkgs/pkgs/development/tools/misc/nrfutil/default.nix55
-rw-r--r--nixpkgs/pkgs/development/tools/misc/nxpmicro-mfgtools/default.nix59
-rw-r--r--nixpkgs/pkgs/development/tools/misc/objconv/default.nix39
-rw-r--r--nixpkgs/pkgs/development/tools/misc/om4/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/misc/one_gadget/Gemfile2
-rw-r--r--nixpkgs/pkgs/development/tools/misc/one_gadget/Gemfile.lock17
-rw-r--r--nixpkgs/pkgs/development/tools/misc/one_gadget/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/misc/one_gadget/gemset.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/misc/opengrok/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/misc/orogene/default.nix47
-rw-r--r--nixpkgs/pkgs/development/tools/misc/pahole/default.nix46
-rw-r--r--nixpkgs/pkgs/development/tools/misc/pahole/threading-reproducibility.patch18
-rw-r--r--nixpkgs/pkgs/development/tools/misc/patchelf/default.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/misc/patchelf/setup-hook.sh20
-rw-r--r--nixpkgs/pkgs/development/tools/misc/patchelf/unstable.nix40
-rw-r--r--nixpkgs/pkgs/development/tools/misc/patsh/default.nix51
-rw-r--r--nixpkgs/pkgs/development/tools/misc/perfect-hash/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/misc/pest-ide-tools/default.nix40
-rw-r--r--nixpkgs/pkgs/development/tools/misc/pkg-config/2.36.3-not-win32.patch324
-rw-r--r--nixpkgs/pkgs/development/tools/misc/pkg-config/default.nix57
-rw-r--r--nixpkgs/pkgs/development/tools/misc/pkg-config/requires-private.patch17
-rw-r--r--nixpkgs/pkgs/development/tools/misc/planus/default.nix38
-rw-r--r--nixpkgs/pkgs/development/tools/misc/pmccabe/default.nix48
-rw-r--r--nixpkgs/pkgs/development/tools/misc/pmccabe/getopt_on_darwin.patch15
-rw-r--r--nixpkgs/pkgs/development/tools/misc/polylith/default.nix52
-rw-r--r--nixpkgs/pkgs/development/tools/misc/prelink/default.nix46
-rw-r--r--nixpkgs/pkgs/development/tools/misc/premake/3.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/misc/premake/5.nix51
-rw-r--r--nixpkgs/pkgs/development/tools/misc/premake/default.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/misc/premake/no-curl-ca.patch36
-rw-r--r--nixpkgs/pkgs/development/tools/misc/premake/setup-hook.sh19
-rw-r--r--nixpkgs/pkgs/development/tools/misc/protox/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/misc/ptags/default.nix41
-rw-r--r--nixpkgs/pkgs/development/tools/misc/pwndbg/default.nix62
-rw-r--r--nixpkgs/pkgs/development/tools/misc/pwninit/default.nix41
-rw-r--r--nixpkgs/pkgs/development/tools/misc/python-launcher/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/misc/qtspim/default.nix55
-rw-r--r--nixpkgs/pkgs/development/tools/misc/regex-cli/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/misc/remarkable/remarkable-toolchain/default.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/misc/remarkable/remarkable2-toolchain/default.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/misc/replacement/default.nix46
-rw-r--r--nixpkgs/pkgs/development/tools/misc/reviewdog/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/misc/rhai-doc/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/misc/riff/default.nix46
-rw-r--r--nixpkgs/pkgs/development/tools/misc/rman/default.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/misc/rolespec/default.nix46
-rw-r--r--nixpkgs/pkgs/development/tools/misc/rsass/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/misc/rsonpath/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/misc/rtss/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/misc/runme/default.nix75
-rw-r--r--nixpkgs/pkgs/development/tools/misc/rustywind/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/misc/saleae-logic-2/default.nix72
-rw-r--r--nixpkgs/pkgs/development/tools/misc/saleae-logic/default.nix98
-rw-r--r--nixpkgs/pkgs/development/tools/misc/saleae-logic/preload.c341
-rw-r--r--nixpkgs/pkgs/development/tools/misc/samply/default.nix55
-rw-r--r--nixpkgs/pkgs/development/tools/misc/scc/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/misc/sccache/default.nix44
-rw-r--r--nixpkgs/pkgs/development/tools/misc/scip/default.nix47
-rw-r--r--nixpkgs/pkgs/development/tools/misc/scriptisto/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/misc/seer/default.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/misc/segger-ozone/default.nix87
-rw-r--r--nixpkgs/pkgs/development/tools/misc/semver-tool/default.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/misc/sipp/default.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/misc/slint-lsp/default.nix62
-rw-r--r--nixpkgs/pkgs/development/tools/misc/sloccount/default.nix73
-rw-r--r--nixpkgs/pkgs/development/tools/misc/spruce/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/misc/sqitch/default.nix48
-rw-r--r--nixpkgs/pkgs/development/tools/misc/src-cli/default.nix57
-rw-r--r--nixpkgs/pkgs/development/tools/misc/srecord/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/misc/stlink/default.nix54
-rw-r--r--nixpkgs/pkgs/development/tools/misc/strace-analyzer/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/misc/strace/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/misc/swig/2.x.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/misc/swig/3.x.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/misc/swig/4.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/misc/swig/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/misc/sysbench/default.nix61
-rw-r--r--nixpkgs/pkgs/development/tools/misc/tcptrack/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/misc/terracognita/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/misc/terraform-ls/default.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/misc/terraform-lsp/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/misc/terraformer/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/misc/terramate/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/misc/terser/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/misc/tet/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/misc/texi2html/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/misc/texinfo/4.13a.nix19
-rw-r--r--nixpkgs/pkgs/development/tools/misc/texinfo/5.2.nix4
-rw-r--r--nixpkgs/pkgs/development/tools/misc/texinfo/6.5.nix4
-rw-r--r--nixpkgs/pkgs/development/tools/misc/texinfo/6.7.nix4
-rw-r--r--nixpkgs/pkgs/development/tools/misc/texinfo/6.8.nix8
-rw-r--r--nixpkgs/pkgs/development/tools/misc/texinfo/7.0.nix4
-rw-r--r--nixpkgs/pkgs/development/tools/misc/texinfo/common.nix113
-rw-r--r--nixpkgs/pkgs/development/tools/misc/texinfo/cross-tools-flags.patch13
-rw-r--r--nixpkgs/pkgs/development/tools/misc/texinfo/fix-glibc-2.34.patch186
-rw-r--r--nixpkgs/pkgs/development/tools/misc/texlab/default.nix59
-rw-r--r--nixpkgs/pkgs/development/tools/misc/tie/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/misc/tockloader/default.nix41
-rw-r--r--nixpkgs/pkgs/development/tools/misc/tokei/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/misc/topiary/Cargo.lock1741
-rw-r--r--nixpkgs/pkgs/development/tools/misc/topiary/default.nix58
-rw-r--r--nixpkgs/pkgs/development/tools/misc/travis/Gemfile4
-rw-r--r--nixpkgs/pkgs/development/tools/misc/travis/Gemfile.lock71
-rw-r--r--nixpkgs/pkgs/development/tools/misc/travis/default.nix16
-rw-r--r--nixpkgs/pkgs/development/tools/misc/travis/gemset.nix269
-rw-r--r--nixpkgs/pkgs/development/tools/misc/travis/shell.nix11
-rw-r--r--nixpkgs/pkgs/development/tools/misc/ttags/default.nix44
-rw-r--r--nixpkgs/pkgs/development/tools/misc/typical/default.nix43
-rw-r--r--nixpkgs/pkgs/development/tools/misc/tyson/default.nix40
-rw-r--r--nixpkgs/pkgs/development/tools/misc/uncrustify/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/misc/unifdef/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/misc/universal-ctags/000-nixos-specific.patch14
-rw-r--r--nixpkgs/pkgs/development/tools/misc/universal-ctags/default.nix84
-rw-r--r--nixpkgs/pkgs/development/tools/misc/unixbench/common.patch108
-rw-r--r--nixpkgs/pkgs/development/tools/misc/unixbench/default.nix109
-rw-r--r--nixpkgs/pkgs/development/tools/misc/unused/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/misc/usb-modeswitch/configurable-usb-modeswitch.patch283
-rw-r--r--nixpkgs/pkgs/development/tools/misc/usb-modeswitch/data.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/misc/usb-modeswitch/default.nix46
-rw-r--r--nixpkgs/pkgs/development/tools/misc/usbsdmux/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/misc/vtable-dumper/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/misc/wasmer-pack/default.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/misc/watson-ruby/Gemfile2
-rw-r--r--nixpkgs/pkgs/development/tools/misc/watson-ruby/Gemfile.lock15
-rw-r--r--nixpkgs/pkgs/development/tools/misc/watson-ruby/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/misc/watson-ruby/gemset.nix18
-rw-r--r--nixpkgs/pkgs/development/tools/misc/whatstyle/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/misc/wishbone-tool/default.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/misc/xorg-autoconf/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/misc/xspim/default.nix58
-rw-r--r--nixpkgs/pkgs/development/tools/misc/xxdiff/default.nix51
-rw-r--r--nixpkgs/pkgs/development/tools/misc/xxgdb/default.nix54
-rw-r--r--nixpkgs/pkgs/development/tools/misc/xxgdb/xxgdb-pty.patch84
-rw-r--r--nixpkgs/pkgs/development/tools/misc/yakut/default.nix51
-rw-r--r--nixpkgs/pkgs/development/tools/misc/ycmd/default.nix92
-rw-r--r--nixpkgs/pkgs/development/tools/misc/yodl/default.nix52
-rw-r--r--nixpkgs/pkgs/development/tools/misc/ztags/default.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/mix2nix/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/mmixware/default.nix48
-rw-r--r--nixpkgs/pkgs/development/tools/mockgen/default.nix49
-rw-r--r--nixpkgs/pkgs/development/tools/mod/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/modd/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/mold/default.nix119
-rw-r--r--nixpkgs/pkgs/development/tools/mongosh/default.nix44
-rw-r--r--nixpkgs/pkgs/development/tools/mongosh/package-lock.json5109
-rw-r--r--nixpkgs/pkgs/development/tools/mongosh/source.json6
-rwxr-xr-xnixpkgs/pkgs/development/tools/mongosh/update.sh25
-rw-r--r--nixpkgs/pkgs/development/tools/moq/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/mpfshell/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/msgpack-tools/default.nix45
-rw-r--r--nixpkgs/pkgs/development/tools/mustache-go/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/mutmut/default.nix38
-rw-r--r--nixpkgs/pkgs/development/tools/mysql-shell/default.nix126
-rw-r--r--nixpkgs/pkgs/development/tools/mysql-shell/innovation.nix127
-rw-r--r--nixpkgs/pkgs/development/tools/nagelfar/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/nailgun/default.nix69
-rw-r--r--nixpkgs/pkgs/development/tools/nap/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/napi-rs-cli/default.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/nasmfmt/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/nasmfmt/go.mod3
-rw-r--r--nixpkgs/pkgs/development/tools/nc4nix/default.nix50
-rw-r--r--nixpkgs/pkgs/development/tools/neil/default.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/nemiver/default.nix88
-rw-r--r--nixpkgs/pkgs/development/tools/neoload/default.nix97
-rw-r--r--nixpkgs/pkgs/development/tools/nest-cli/default.nix41
-rw-r--r--nixpkgs/pkgs/development/tools/nodehun/default.nix64
-rw-r--r--nixpkgs/pkgs/development/tools/nodehun/update-nan.patch150
-rw-r--r--nixpkgs/pkgs/development/tools/nodenv/default.nix44
-rw-r--r--nixpkgs/pkgs/development/tools/norminette/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/npm-check/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/nsis/default.nix76
-rw-r--r--nixpkgs/pkgs/development/tools/nwjs/default.nix147
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/camlidl/default.nix55
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/camlp4/default.nix97
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/camlp5/default.nix68
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/cppo/default.nix69
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/cppo/ocamlbuild.nix20
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/crunch/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/dune-release/default.nix58
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/dune/1.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/dune/2.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/dune/3.nix44
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/findlib/default.nix80
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/findlib/install_topfind.patch13
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/findlib/ldconf.patch8
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/Makefile.conf.diff10
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/compiler.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/default.nix15
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/lwt.nix15
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/ocamlbuild.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/ppx.nix15
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/ppx_deriving_json.nix13
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/toplevel.nix11
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/tyxml.nix16
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/merlin/4.x.nix95
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/merlin/default.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/merlin/dot-merlin-reader.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/merlin/fix-paths.patch15
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/merlin/lib.nix14
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/oasis/default.nix47
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/obelisk/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/obuild/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/ocaml-recovery-parser/default.nix43
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/ocaml-top/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/ocamlbuild/default.nix41
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/ocamlify/default.nix41
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/ocamlmod/default.nix44
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/ocamlscript/Makefile.patch67
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/ocamlscript/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/ocp-build/default.nix47
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/ocp-indent/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/ocp-index/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/ocsigen-i18n/default.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/omake/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/opaline/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/opam-publish/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/opam/default.nix152
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/opam/installer.nix17
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/opam/opam-shebangs.patch131
-rwxr-xr-xnixpkgs/pkgs/development/tools/ocaml/opam/opam.nix.pl143
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/opam2json/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/utop/default.nix76
-rw-r--r--nixpkgs/pkgs/development/tools/ofono-phonesim/default.nix39
-rw-r--r--nixpkgs/pkgs/development/tools/oh-my-posh/default.nix61
-rw-r--r--nixpkgs/pkgs/development/tools/okteto/default.nix54
-rw-r--r--nixpkgs/pkgs/development/tools/ols/default.nix50
-rw-r--r--nixpkgs/pkgs/development/tools/omniorb/default.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/omnisharp-roslyn/default.nix93
-rw-r--r--nixpkgs/pkgs/development/tools/omnisharp-roslyn/deps.nix160
-rwxr-xr-xnixpkgs/pkgs/development/tools/omnisharp-roslyn/updater.sh20
-rw-r--r--nixpkgs/pkgs/development/tools/opcr-policy/default.nix48
-rw-r--r--nixpkgs/pkgs/development/tools/open-policy-agent/default.nix91
-rw-r--r--nixpkgs/pkgs/development/tools/operator-sdk/default.nix52
-rw-r--r--nixpkgs/pkgs/development/tools/oq/default.nix46
-rw-r--r--nixpkgs/pkgs/development/tools/oras/default.nix57
-rw-r--r--nixpkgs/pkgs/development/tools/oshka/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/osslsigncode/default.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/out-of-tree/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/overcommit/Gemfile2
-rw-r--r--nixpkgs/pkgs/development/tools/overcommit/Gemfile.lock19
-rw-r--r--nixpkgs/pkgs/development/tools/overcommit/default.nix19
-rw-r--r--nixpkgs/pkgs/development/tools/overcommit/gemset.nix43
-rw-r--r--nixpkgs/pkgs/development/tools/oxlint/default.nix39
-rw-r--r--nixpkgs/pkgs/development/tools/package-project-cmake/default.nix45
-rw-r--r--nixpkgs/pkgs/development/tools/packcc/default.nix68
-rw-r--r--nixpkgs/pkgs/development/tools/packer/default.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/packet-sd/default.nix43
-rw-r--r--nixpkgs/pkgs/development/tools/packet/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/packet/deps.nix156
-rw-r--r--nixpkgs/pkgs/development/tools/pactorio/default.nix42
-rw-r--r--nixpkgs/pkgs/development/tools/paging-calculator/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/pandoc/default.nix57
-rw-r--r--nixpkgs/pkgs/development/tools/parinfer-rust/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/parse-cli-bin/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/antlr/2.7.7-fixes.patch26
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/antlr/2.7.7.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/antlr/3.4.nix40
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/antlr/3.5.nix53
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/antlr/4.nix184
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/antlr/builder.sh24
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/antlr/utf8cpp.patch15
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/bison/default.nix58
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/bisonc++/default.nix55
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/byacc/default.nix48
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/flex/2.5.35.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/flex/default.nix60
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/flexc++/default.nix47
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/hammer/default.nix38
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/javacc/default.nix64
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/jikespg/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/jshon/default.nix43
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/lemon/default.nix45
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/nex/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/peg/default.nix20
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/ragel/default.nix54
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/re-flex/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/re2c/default.nix51
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/spicy/default.nix67
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/Cargo.lock1935
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/default.nix173
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammar.nix61
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/default.nix111
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-bash.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-beancount.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-bibtex.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-bitbake.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-c-sharp.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-c.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-clojure.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-cmake.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-comment.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-commonlisp.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-cpp.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-css.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-cuda.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-cue.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-dart.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-devicetree.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-dockerfile.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-dot.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-eex.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-elisp.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-elixir.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-elm.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-embedded-template.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-erlang.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-fennel.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-fish.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-fortran.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-gdscript.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-glimmer.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-glsl.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-go.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-godot-resource.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-gomod.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-gowork.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-graphql.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-haskell.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-hcl.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-heex.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-hjson.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-html.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-http.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-janet-simple.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-java.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-javascript.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-jsdoc.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-json.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-json5.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-jsonnet.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-julia.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-just.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-kotlin.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-latex.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-ledger.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-llvm.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-lua.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-make.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-markdown.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-nickel.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-nix.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-norg-meta.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-norg.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-nu.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-ocaml.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-org-nvim.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-perl.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-pgn.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-php.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-pioasm.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-prisma.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-proto.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-pug.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-python.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-ql-dbscheme.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-ql.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-query.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-r.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-razor.json10
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-regex.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-rego.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-rst.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-ruby.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-rust.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-scala.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-scheme.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-scss.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-smithy.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-solidity.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-sparql.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-sql.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-supercollider.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-surface.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-svelte.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-templ.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-tiger.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-tlaplus.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-toml.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-tsq.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-turtle.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-typescript.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-typst.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-uiua.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-verilog.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-vim.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-vue.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-wgsl.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-wing.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-yaml.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-yang.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-zig.json12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/mypy.ini11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/update.nix510
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/update_impl.py222
-rw-r--r--nixpkgs/pkgs/development/tools/patatt/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/patcher9x/default.nix47
-rw-r--r--nixpkgs/pkgs/development/tools/pax-rs/default.nix40
-rw-r--r--nixpkgs/pkgs/development/tools/perseus-cli/default.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/pet/default.nix40
-rw-r--r--nixpkgs/pkgs/development/tools/pew/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/pgformatter/default.nix53
-rw-r--r--nixpkgs/pkgs/development/tools/pgloader/default.nix38
-rw-r--r--nixpkgs/pkgs/development/tools/pgtop/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/phpactor/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/picotool/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/pifpaf/default.nix43
-rw-r--r--nixpkgs/pkgs/development/tools/pigeon/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/pip-audit/default.nix68
-rw-r--r--nixpkgs/pkgs/development/tools/pipenv/default.nix90
-rw-r--r--nixpkgs/pkgs/development/tools/poac/default.nix103
-rw-r--r--nixpkgs/pkgs/development/tools/postiats-utilities/default.nix38
-rw-r--r--nixpkgs/pkgs/development/tools/pqrs/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/prettierd/default.nix52
-rw-r--r--nixpkgs/pkgs/development/tools/prettierd/package.json45
-rw-r--r--nixpkgs/pkgs/development/tools/pretty-simple/default.nix12
-rw-r--r--nixpkgs/pkgs/development/tools/profiling/EZTrace/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/profiling/heaptrack/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/profiling/malt/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/profiling/oprofile/default.nix49
-rw-r--r--nixpkgs/pkgs/development/tools/profiling/pprof/default.nix44
-rw-r--r--nixpkgs/pkgs/development/tools/profiling/sysprof/capture.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/profiling/sysprof/default.nix86
-rw-r--r--nixpkgs/pkgs/development/tools/profiling/systemtap/default.nix55
-rw-r--r--nixpkgs/pkgs/development/tools/prospector/default.nix79
-rw-r--r--nixpkgs/pkgs/development/tools/prospector/setoptconf.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/proto-contrib/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/protoc-gen-connect-go/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/protoc-gen-dart/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/protoc-gen-dart/pubspec.lock.json496
-rw-r--r--nixpkgs/pkgs/development/tools/protoc-gen-doc/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/protoc-gen-entgrpc/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/protoc-gen-go-grpc/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/protoc-gen-go-vtproto/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/protoc-gen-go/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/protoc-gen-grpc-web/default.nix59
-rw-r--r--nixpkgs/pkgs/development/tools/protoc-gen-prost-crate/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/protoc-gen-prost-serde/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/protoc-gen-prost/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/protoc-gen-rust/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/protoc-gen-tonic/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/protoc-gen-twirp/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/protoc-gen-twirp_php/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/protoc-gen-twirp_swagger/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/protoc-gen-twirp_typescript/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/protoc-gen-validate/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/protolint/default.nix40
-rw-r--r--nixpkgs/pkgs/development/tools/protoscope/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/prototool/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/pry/Gemfile2
-rw-r--r--nixpkgs/pkgs/development/tools/pry/Gemfile.lock17
-rw-r--r--nixpkgs/pkgs/development/tools/pry/default.nix17
-rw-r--r--nixpkgs/pkgs/development/tools/pry/gemset.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/pscale/default.nix49
-rw-r--r--nixpkgs/pkgs/development/tools/pulumictl/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/pup/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/puppet/puppet-lint/Gemfile5
-rw-r--r--nixpkgs/pkgs/development/tools/puppet/puppet-lint/Gemfile.lock13
-rw-r--r--nixpkgs/pkgs/development/tools/puppet/puppet-lint/default.nix7
-rw-r--r--nixpkgs/pkgs/development/tools/puppet/puppet-lint/gemset.nix12
-rw-r--r--nixpkgs/pkgs/development/tools/pur/default.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/purescript/spago/default.nix61
-rw-r--r--nixpkgs/pkgs/development/tools/purescript/spago/spago.nix46
-rwxr-xr-xnixpkgs/pkgs/development/tools/purescript/spago/update.sh39
-rw-r--r--nixpkgs/pkgs/development/tools/pxview/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/py-spy/default.nix58
-rw-r--r--nixpkgs/pkgs/development/tools/pyenv/default.nix51
-rw-r--r--nixpkgs/pkgs/development/tools/pylint-exit/default.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/pypi-mirror/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/qc/default.nix43
-rw-r--r--nixpkgs/pkgs/development/tools/qtcreator/default.nix104
-rw-r--r--nixpkgs/pkgs/development/tools/quick-lint-js/default.nix61
-rw-r--r--nixpkgs/pkgs/development/tools/quicktemplate/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/quilt/default.nix65
-rw-r--r--nixpkgs/pkgs/development/tools/railway/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/rain/default.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/rakkess/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/rars/default.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/rbspy/default.nix62
-rw-r--r--nixpkgs/pkgs/development/tools/rcodesign/default.nix49
-rw-r--r--nixpkgs/pkgs/development/tools/rdbtools/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/rdocker/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/react-native-debugger/default.nix116
-rw-r--r--nixpkgs/pkgs/development/tools/react-static/default.nix55
-rw-r--r--nixpkgs/pkgs/development/tools/react-static/package.json154
-rw-r--r--nixpkgs/pkgs/development/tools/rebazel/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/redis-dump/.bundle/config3
-rw-r--r--nixpkgs/pkgs/development/tools/redis-dump/Gemfile3
-rw-r--r--nixpkgs/pkgs/development/tools/redis-dump/Gemfile.lock21
-rw-r--r--nixpkgs/pkgs/development/tools/redis-dump/default.nix17
-rw-r--r--nixpkgs/pkgs/development/tools/redis-dump/gemset.nix53
-rw-r--r--nixpkgs/pkgs/development/tools/redisinsight/default.nix154
-rw-r--r--nixpkgs/pkgs/development/tools/redoc-cli/default.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/refinery-cli/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/reflex/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/refmt/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/reftools/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/refurb/default.nix63
-rw-r--r--nixpkgs/pkgs/development/tools/regclient/default.nix41
-rw-r--r--nixpkgs/pkgs/development/tools/reindeer/default.nix44
-rw-r--r--nixpkgs/pkgs/development/tools/relic/default.nix40
-rw-r--r--nixpkgs/pkgs/development/tools/remodel/default.nix44
-rw-r--r--nixpkgs/pkgs/development/tools/renderdoc/default.nix100
-rw-r--r--nixpkgs/pkgs/development/tools/renderizer/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/reno/default.nix59
-rw-r--r--nixpkgs/pkgs/development/tools/rep/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/replay-io/default.nix146
-rw-r--r--nixpkgs/pkgs/development/tools/replay-io/meta.json15
-rwxr-xr-xnixpkgs/pkgs/development/tools/replay-io/update.sh32
-rw-r--r--nixpkgs/pkgs/development/tools/repository-managers/nexus/default.nix50
-rw-r--r--nixpkgs/pkgs/development/tools/repository-managers/nexus/nexus-bin.patch48
-rw-r--r--nixpkgs/pkgs/development/tools/repository-managers/nexus/nexus-vm-opts.patch14
-rw-r--r--nixpkgs/pkgs/development/tools/reshape/default.nix39
-rw-r--r--nixpkgs/pkgs/development/tools/resolve-march-native/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/revive/default.nix53
-rw-r--r--nixpkgs/pkgs/development/tools/rgp/default.nix77
-rw-r--r--nixpkgs/pkgs/development/tools/richgo/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/riot-redis/default.nix41
-rw-r--r--nixpkgs/pkgs/development/tools/rojo/default.nix55
-rw-r--r--nixpkgs/pkgs/development/tools/ronn/Gemfile3
-rw-r--r--nixpkgs/pkgs/development/tools/ronn/Gemfile.lock28
-rw-r--r--nixpkgs/pkgs/development/tools/ronn/default.nix39
-rw-r--r--nixpkgs/pkgs/development/tools/ronn/gemset.nix86
-rw-r--r--nixpkgs/pkgs/development/tools/ronn/test-reproducible-html.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/roswell/0001-get-image-from-environment.patch25
-rw-r--r--nixpkgs/pkgs/development/tools/roswell/default.nix62
-rw-r--r--nixpkgs/pkgs/development/tools/rover/default.nix54
-rwxr-xr-xnixpkgs/pkgs/development/tools/rover/update.sh51
-rw-r--r--nixpkgs/pkgs/development/tools/rq/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/rslint/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/rstfmt/default.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/rtags/default.nix43
-rw-r--r--nixpkgs/pkgs/development/tools/rubyfmt/0002-remove-dependency-on-git.patch62
-rw-r--r--nixpkgs/pkgs/development/tools/rubyfmt/default.nix83
-rw-r--r--nixpkgs/pkgs/development/tools/rucksack/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/ruff/default.nix76
-rw-r--r--nixpkgs/pkgs/development/tools/rufo/Gemfile3
-rw-r--r--nixpkgs/pkgs/development/tools/rufo/Gemfile.lock13
-rw-r--r--nixpkgs/pkgs/development/tools/rufo/default.nix17
-rw-r--r--nixpkgs/pkgs/development/tools/rufo/gemset.nix12
-rw-r--r--nixpkgs/pkgs/development/tools/run/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/rund/default.nix49
-rw-r--r--nixpkgs/pkgs/development/tools/rust-code-analysis/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/rust/bindgen/default.nix47
-rw-r--r--nixpkgs/pkgs/development/tools/rust/bindgen/unwrapped.nix50
-rwxr-xr-xnixpkgs/pkgs/development/tools/rust/bindgen/wrapper.sh36
-rw-r--r--nixpkgs/pkgs/development/tools/rust/bootimage/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-about/default.nix41
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-all-features/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-apk/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-asm/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-audit/default.nix47
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-bazel/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-benchcmp/default.nix40
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-benchcmp/fix-test-binary-path.patch30
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-binstall/default.nix64
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-binutils/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-bisect-rustc/0001-dynamically-patchelf-binaries.patch56
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-bisect-rustc/default.nix62
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-bitbake/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-bloat/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-bolero/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-bundle-licenses/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-bundle/default.nix42
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-c/default.nix60
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-cache/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-careful/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-chef/default.nix20
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-clone/default.nix41
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-codspeed/default.nix51
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-component/default.nix44
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-cranky/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-crev/default.nix46
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-criterion/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-cross/default.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-cyclonedx/default.nix51
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-deadlinks/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-deb/default.nix42
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-deny/default.nix48
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-depgraph/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-dephell/Cargo.lock2548
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-dephell/default.nix52
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-deps/default.nix20
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-diet/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-dist/default.nix63
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-docset/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-duplicates/default.nix46
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-edit/Cargo.lock2381
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-edit/default.nix44
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-espmonitor/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-expand/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-feature/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-flamegraph/default.nix38
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-fund/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-fuzz/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-geiger/default.nix59
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-generate/default.nix58
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-graph/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-guppy/default.nix38
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-hack/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-hakari/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-hf2/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-info/default.nix40
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-inspect/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-insta/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-kcov/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-lambda/Cargo.lock5588
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-lambda/default.nix76
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-leptos/Cargo.lock3480
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-leptos/default.nix48
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-license/default.nix20
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-limit/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-llvm-cov/default.nix100
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-llvm-lines/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-local-registry/default.nix57
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-lock/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-machete/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-make/default.nix47
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-mobile2/default.nix54
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-modules/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-mommy/default.nix20
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-msrv/default.nix54
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-mutants/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-ndk/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-nextest/default.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-outdated/default.nix42
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-pgrx/buildPgrxExtension.nix160
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-pgrx/default.nix38
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-pgx/0_6_1.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-pgx/0_7_1.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-pgx/0_7_4.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-pgx/buildPgxExtension.nix160
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-play/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-profiler/default.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-public-api/default.nix38
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-raze/default.nix48
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-readme/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-release/Cargo.lock2819
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-release/default.nix57
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-risczero/default.nix40
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-rr/default.nix38
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-run-bin/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-semver-checks/default.nix60
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-show-asm/default.nix47
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-show-asm/test-basic-x86_64.nix18
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-shuttle/Cargo.lock8624
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-shuttle/default.nix56
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-sort/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-spellcheck/default.nix39
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-supply-chain/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-sweep/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-sync-readme/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-tally/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-tauri/default.nix45
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-temp/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-toml-lint/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-udeps/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-ui/default.nix58
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-unused-features/default.nix44
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-update/default.nix65
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-valgrind/default.nix43
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-vet/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-wasi/default.nix38
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-watch/default.nix38
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-web/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-whatfeatures/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-wipe/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-workspaces/default.nix55
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-xbuild/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-zigbuild/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo2junit/default.nix20
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cauwugo/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cbindgen/default.nix51
-rw-r--r--nixpkgs/pkgs/development/tools/rust/crate2nix/default.nix56
-rw-r--r--nixpkgs/pkgs/development/tools/rust/critcmp/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/rust/dioxus-cli/default.nix60
-rw-r--r--nixpkgs/pkgs/development/tools/rust/duckscript/default.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/rust/genemichaels/Cargo.lock553
-rw-r--r--nixpkgs/pkgs/development/tools/rust/genemichaels/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/rust/gitlab-clippy/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/rust/humility/Cargo.lock4298
-rw-r--r--nixpkgs/pkgs/development/tools/rust/humility/default.nix52
-rw-r--r--nixpkgs/pkgs/development/tools/rust/leptosfmt/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/rust/maturin/default.nix45
-rw-r--r--nixpkgs/pkgs/development/tools/rust/maturin/pyo3-test/Cargo.lock682
-rw-r--r--nixpkgs/pkgs/development/tools/rust/maturin/pyo3-test/default.nix12
-rw-r--r--nixpkgs/pkgs/development/tools/rust/maturin/pyo3-test/generic.nix45
-rw-r--r--nixpkgs/pkgs/development/tools/rust/measureme/Cargo.lock993
-rw-r--r--nixpkgs/pkgs/development/tools/rust/measureme/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/rust/ograc/default.nix21
-rw-r--r--nixpkgs/pkgs/development/tools/rust/panamax/default.nix39
-rw-r--r--nixpkgs/pkgs/development/tools/rust/probe-rs/default.nix38
-rw-r--r--nixpkgs/pkgs/development/tools/rust/probe-run/default.nix45
-rw-r--r--nixpkgs/pkgs/development/tools/rust/ra-multiplex/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/rust/ravedude/default.nix42
-rw-r--r--nixpkgs/pkgs/development/tools/rust/rhack/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/rust/roogle/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/rust/rust-analyzer/default.nix71
-rw-r--r--nixpkgs/pkgs/development/tools/rust/rust-analyzer/test-neovim-lsp.nix49
-rw-r--r--nixpkgs/pkgs/development/tools/rust/rust-analyzer/wrapper.nix15
-rw-r--r--nixpkgs/pkgs/development/tools/rust/rust-audit-info/default.nix20
-rw-r--r--nixpkgs/pkgs/development/tools/rust/rust-script/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/rust/rustfilt/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/rust/rustup-toolchain-install-master/0001-dynamically-patchelf-binaries.patch61
-rw-r--r--nixpkgs/pkgs/development/tools/rust/rustup-toolchain-install-master/Cargo.lock1669
-rw-r--r--nixpkgs/pkgs/development/tools/rust/rustup-toolchain-install-master/default.nix65
-rw-r--r--nixpkgs/pkgs/development/tools/rust/rustup/0001-dynamically-patchelf-binaries.patch42
-rw-r--r--nixpkgs/pkgs/development/tools/rust/rustup/Cargo.lock2503
-rw-r--r--nixpkgs/pkgs/development/tools/rust/rustup/default.nix107
-rw-r--r--nixpkgs/pkgs/development/tools/rust/rusty-man/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/rust/rustycli/default.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/rust/specr-transpile/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/rust/sqlx-cli/default.nix83
-rw-r--r--nixpkgs/pkgs/development/tools/rust/svd2rust/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/rust/typeshare/default.nix38
-rw-r--r--nixpkgs/pkgs/development/tools/rye/Cargo.lock2843
-rw-r--r--nixpkgs/pkgs/development/tools/rye/default.nix66
-rw-r--r--nixpkgs/pkgs/development/tools/sass/Gemfile2
-rw-r--r--nixpkgs/pkgs/development/tools/sass/Gemfile.lock21
-rw-r--r--nixpkgs/pkgs/development/tools/sass/default.nix17
-rw-r--r--nixpkgs/pkgs/development/tools/sass/gemset.nix55
-rw-r--r--nixpkgs/pkgs/development/tools/sassc/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/sauce-connect/default.nix48
-rwxr-xr-xnixpkgs/pkgs/development/tools/sauce-connect/update.sh27
-rw-r--r--nixpkgs/pkgs/development/tools/sca2d/default.nix50
-rw-r--r--nixpkgs/pkgs/development/tools/scalafix/default.nix46
-rw-r--r--nixpkgs/pkgs/development/tools/scalafmt/default.nix47
-rw-r--r--nixpkgs/pkgs/development/tools/scenebuilder/default.nix79
-rw-r--r--nixpkgs/pkgs/development/tools/scenic-view/default.nix122
-rw-r--r--nixpkgs/pkgs/development/tools/schemacrawler/default.nix42
-rw-r--r--nixpkgs/pkgs/development/tools/scry/default.nix40
-rw-r--r--nixpkgs/pkgs/development/tools/scry/shards.nix14
-rw-r--r--nixpkgs/pkgs/development/tools/scss-lint/Gemfile2
-rw-r--r--nixpkgs/pkgs/development/tools/scss-lint/Gemfile.lock25
-rw-r--r--nixpkgs/pkgs/development/tools/scss-lint/default.nix17
-rw-r--r--nixpkgs/pkgs/development/tools/scss-lint/gemset.nix62
-rw-r--r--nixpkgs/pkgs/development/tools/sd-local/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/sea-orm-cli/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/selene/default.nix43
-rw-r--r--nixpkgs/pkgs/development/tools/selenium/chromedriver/default.nix78
-rw-r--r--nixpkgs/pkgs/development/tools/selenium/htmlunit-driver/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/selenium/selendroid/default.nix49
-rw-r--r--nixpkgs/pkgs/development/tools/selenium/server/default.nix40
-rw-r--r--nixpkgs/pkgs/development/tools/sem/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/semantic-release/default.nix41
-rw-r--r--nixpkgs/pkgs/development/tools/sentry-cli/default.nix38
-rw-r--r--nixpkgs/pkgs/development/tools/shadered/default.nix50
-rw-r--r--nixpkgs/pkgs/development/tools/shadered/install_path_fix.patch13
-rw-r--r--nixpkgs/pkgs/development/tools/shellcheck/default.nix53
-rw-r--r--nixpkgs/pkgs/development/tools/shellharden/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/sigrok-cli/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/sigrok-firmware-fx2lafw/default.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/simavr/default.nix54
-rw-r--r--nixpkgs/pkgs/development/tools/simavr/setup-hook-darwin.sh34
-rw-r--r--nixpkgs/pkgs/development/tools/skaffold/default.nix53
-rw-r--r--nixpkgs/pkgs/development/tools/skjold/default.nix81
-rw-r--r--nixpkgs/pkgs/development/tools/skopeo/default.nix78
-rw-r--r--nixpkgs/pkgs/development/tools/slimerjs/default.nix51
-rw-r--r--nixpkgs/pkgs/development/tools/smlfmt/default.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/snazy/default.nix48
-rw-r--r--nixpkgs/pkgs/development/tools/so/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/solarus-quest-editor/default.nix42
-rw-r--r--nixpkgs/pkgs/development/tools/spicy/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/spirv-tools/default.nix50
-rw-r--r--nixpkgs/pkgs/development/tools/spirv-tools/no-shared-libs.patch30
-rw-r--r--nixpkgs/pkgs/development/tools/spr/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/spring-boot-cli/default.nix63
-rw-r--r--nixpkgs/pkgs/development/tools/sq/default.nix50
-rw-r--r--nixpkgs/pkgs/development/tools/sqlboiler/default.nix42
-rw-r--r--nixpkgs/pkgs/development/tools/sqldef/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/sqlint/Gemfile2
-rw-r--r--nixpkgs/pkgs/development/tools/sqlint/Gemfile.lock17
-rw-r--r--nixpkgs/pkgs/development/tools/sqlint/default.nix18
-rw-r--r--nixpkgs/pkgs/development/tools/sqlint/gemset.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/sqsh/default.nix49
-rw-r--r--nixpkgs/pkgs/development/tools/squawk/default.nix54
-rw-r--r--nixpkgs/pkgs/development/tools/sshs/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/sslmate-agent/default.nix41
-rw-r--r--nixpkgs/pkgs/development/tools/sslmate/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/stagit/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/statik/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/steamos-devkit/default.nix135
-rw-r--r--nixpkgs/pkgs/development/tools/stylua/default.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/subxt/default.nix41
-rw-r--r--nixpkgs/pkgs/development/tools/summon/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/sunxi-tools/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/supabase-cli/default.nix57
-rw-r--r--nixpkgs/pkgs/development/tools/surge-cli/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/swc/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/swiftformat/default.nix45
-rw-r--r--nixpkgs/pkgs/development/tools/swiftpm2nix/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/swiftpm2nix/support.nix57
-rwxr-xr-xnixpkgs/pkgs/development/tools/swiftpm2nix/swiftpm2nix.sh45
-rw-r--r--nixpkgs/pkgs/development/tools/symfony-cli/default.nix60
-rw-r--r--nixpkgs/pkgs/development/tools/systemfd/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/tabnine/default.nix48
-rw-r--r--nixpkgs/pkgs/development/tools/tabnine/sources.json17
-rwxr-xr-xnixpkgs/pkgs/development/tools/tabnine/update.sh50
-rw-r--r--nixpkgs/pkgs/development/tools/tailwindcss/default.nix62
-rwxr-xr-xnixpkgs/pkgs/development/tools/tailwindcss/update.sh31
-rw-r--r--nixpkgs/pkgs/development/tools/taplo/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/tapview/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/tapview/dont_check_echo.patch44
-rw-r--r--nixpkgs/pkgs/development/tools/tarmac/Cargo.lock2212
-rw-r--r--nixpkgs/pkgs/development/tools/tarmac/default.nix52
-rw-r--r--nixpkgs/pkgs/development/tools/teller/default.nix69
-rw-r--r--nixpkgs/pkgs/development/tools/templ/default.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/textql/default.nix39
-rw-r--r--nixpkgs/pkgs/development/tools/tf2pulumi/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/the-way/default.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/thrust/default.nix47
-rw-r--r--nixpkgs/pkgs/development/tools/time-ghc-modules/default.nix54
-rw-r--r--nixpkgs/pkgs/development/tools/toast/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/tokio-console/cargo-lock.patch13
-rw-r--r--nixpkgs/pkgs/development/tools/tokio-console/default.nix41
-rw-r--r--nixpkgs/pkgs/development/tools/toluapp/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/toluapp/environ-and-linux-is-kinda-posix.patch36
-rw-r--r--nixpkgs/pkgs/development/tools/toluapp/headers.patch15
-rw-r--r--nixpkgs/pkgs/development/tools/toml2json/default.nix20
-rw-r--r--nixpkgs/pkgs/development/tools/toml2nix/Cargo.lock25
-rw-r--r--nixpkgs/pkgs/development/tools/toml2nix/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/tora/default.nix55
-rw-r--r--nixpkgs/pkgs/development/tools/toxiproxy/default.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/tracy/0001-remove-unifiedtypeidentifiers-framework13
-rw-r--r--nixpkgs/pkgs/development/tools/tracy/default.nix111
-rw-r--r--nixpkgs/pkgs/development/tools/tradcpp/aarch64.patch12
-rw-r--r--nixpkgs/pkgs/development/tools/tradcpp/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/tradcpp/tradcpp-configure.patch84
-rw-r--r--nixpkgs/pkgs/development/tools/treefmt/default.nix21
-rw-r--r--nixpkgs/pkgs/development/tools/trunk-io/default.nix28
-rwxr-xr-xnixpkgs/pkgs/development/tools/trunk-io/update.sh7
-rw-r--r--nixpkgs/pkgs/development/tools/trunk/default.nix60
-rw-r--r--nixpkgs/pkgs/development/tools/ttfb/default.nix40
-rw-r--r--nixpkgs/pkgs/development/tools/turbogit/default.nix44
-rw-r--r--nixpkgs/pkgs/development/tools/turso-cli/default.nix48
-rw-r--r--nixpkgs/pkgs/development/tools/twiggy/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/twilio-cli/default.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/twitch-cli/application-name.patch13
-rw-r--r--nixpkgs/pkgs/development/tools/twitch-cli/default.nix49
-rw-r--r--nixpkgs/pkgs/development/tools/txtpbfmt/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/typos/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/udis86/default.nix46
-rw-r--r--nixpkgs/pkgs/development/tools/uftrace/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/unconvert/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/unityhub/default.nix143
-rwxr-xr-xnixpkgs/pkgs/development/tools/unityhub/update.sh13
-rw-r--r--nixpkgs/pkgs/development/tools/upbound/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/vagrant/0001-Revert-Merge-pull-request-12225-from-chrisroberts-re.patch349
-rw-r--r--nixpkgs/pkgs/development/tools/vagrant/0004-Support-system-installed-plugins.patch93
-rw-r--r--nixpkgs/pkgs/development/tools/vagrant/default.nix112
-rw-r--r--nixpkgs/pkgs/development/tools/vagrant/gemset.nix630
-rw-r--r--nixpkgs/pkgs/development/tools/vagrant/gemset_libvirt.nix199
-rw-r--r--nixpkgs/pkgs/development/tools/vagrant/unofficial-installation-nowarn.patch16
-rw-r--r--nixpkgs/pkgs/development/tools/vagrant/use-system-bundler-version.patch13
-rw-r--r--nixpkgs/pkgs/development/tools/vagrant/vagrant-libvirt.json.in9
-rw-r--r--nixpkgs/pkgs/development/tools/vala-lint/default.nix67
-rw-r--r--nixpkgs/pkgs/development/tools/vcstool/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/vendir/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/viceroy/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/vim-vint/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/vndr/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/volta/Cargo.lock1918
-rw-r--r--nixpkgs/pkgs/development/tools/volta/default.nix58
-rw-r--r--nixpkgs/pkgs/development/tools/vsce/default.nix49
-rw-r--r--nixpkgs/pkgs/development/tools/vulkan-validation-layers/default.nix85
-rw-r--r--nixpkgs/pkgs/development/tools/vulkan-validation-layers/robin-hood-hashing.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/vultr-cli/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/vultr/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/wabt/default.nix40
-rw-r--r--nixpkgs/pkgs/development/tools/wails/default.nix74
-rw-r--r--nixpkgs/pkgs/development/tools/wally-cli/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/wambo/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/wasm-bindgen-cli/default.nix39
-rw-r--r--nixpkgs/pkgs/development/tools/wasm-pack/default.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/wasmedge/default.nix66
-rw-r--r--nixpkgs/pkgs/development/tools/wasmi/Cargo.lock1439
-rw-r--r--nixpkgs/pkgs/development/tools/wasmi/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/wasmserve/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/wasynth/Cargo.lock278
-rw-r--r--nixpkgs/pkgs/development/tools/wasynth/default.nix43
-rw-r--r--nixpkgs/pkgs/development/tools/watchman/Cargo.lock1060
-rw-r--r--nixpkgs/pkgs/development/tools/watchman/default.nix106
-rw-r--r--nixpkgs/pkgs/development/tools/web-ext/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/wgo/default.nix38
-rw-r--r--nixpkgs/pkgs/development/tools/wiggle/default.nix44
-rw-r--r--nixpkgs/pkgs/development/tools/wiiload/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/winhelpcgi/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/wire/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/wizer/default.nix44
-rw-r--r--nixpkgs/pkgs/development/tools/wlcs/default.nix72
-rw-r--r--nixpkgs/pkgs/development/tools/wllvm/default.nix19
-rw-r--r--nixpkgs/pkgs/development/tools/worker-build/Cargo.lock2415
-rw-r--r--nixpkgs/pkgs/development/tools/worker-build/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/wp4nix/default.nix40
-rw-r--r--nixpkgs/pkgs/development/tools/wrangler_1/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/wxformbuilder/default.nix68
-rw-r--r--nixpkgs/pkgs/development/tools/xc/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/xcbuild/default.nix80
-rw-r--r--nixpkgs/pkgs/development/tools/xcbuild/includes.patch10
-rw-r--r--nixpkgs/pkgs/development/tools/xcbuild/platforms.nix301
-rw-r--r--nixpkgs/pkgs/development/tools/xcbuild/sdks.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/xcbuild/setup-hook.sh29
-rw-r--r--nixpkgs/pkgs/development/tools/xcbuild/toolchains.nix73
-rw-r--r--nixpkgs/pkgs/development/tools/xcbuild/wrapper.nix167
-rw-r--r--nixpkgs/pkgs/development/tools/xcode-install/Gemfile2
-rw-r--r--nixpkgs/pkgs/development/tools/xcode-install/Gemfile.lock204
-rw-r--r--nixpkgs/pkgs/development/tools/xcode-install/default.nix17
-rw-r--r--nixpkgs/pkgs/development/tools/xcode-install/gemset.nix833
-rw-r--r--nixpkgs/pkgs/development/tools/xcodes/default.nix60
-rw-r--r--nixpkgs/pkgs/development/tools/xcodes/generated/default.nix17
-rw-r--r--nixpkgs/pkgs/development/tools/xcodes/generated/workspace-state.json194
-rw-r--r--nixpkgs/pkgs/development/tools/xcpretty/Gemfile2
-rw-r--r--nixpkgs/pkgs/development/tools/xcpretty/Gemfile.lock15
-rw-r--r--nixpkgs/pkgs/development/tools/xcpretty/default.nix21
-rw-r--r--nixpkgs/pkgs/development/tools/xcpretty/gemset.nix19
-rw-r--r--nixpkgs/pkgs/development/tools/xqilla/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/yaml2json/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/yamlfmt/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/yamlpath/default.nix54
-rw-r--r--nixpkgs/pkgs/development/tools/yarn-berry/default.nix44
-rw-r--r--nixpkgs/pkgs/development/tools/yarn/default.nix41
-rw-r--r--nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/.prettierignore1
-rw-r--r--nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/LICENSE.txt674
-rwxr-xr-xnixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/bin/yarn2nix.js90
-rw-r--r--nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/default.nix467
-rwxr-xr-xnixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/internal/fixup_bin.js53
-rwxr-xr-xnixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/internal/fixup_yarn_lock.js49
-rw-r--r--nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/lib/fixPkgAddMissingSha1.js64
-rw-r--r--nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/lib/generateNix.js179
-rw-r--r--nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/lib/mapObjIndexedReturnArray.js21
-rw-r--r--nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/lib/urlToName.js28
-rw-r--r--nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/nix/expectShFunctions.sh30
-rw-r--r--nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/package.json48
-rw-r--r--nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/yarn.lock3602
-rw-r--r--nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/yarn.nix3997
-rw-r--r--nixpkgs/pkgs/development/tools/yo/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/yq-go/default.nix40
-rw-r--r--nixpkgs/pkgs/development/tools/ytt/default.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/yuicompressor/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/zed/default.nix46
-rw-r--r--nixpkgs/pkgs/development/tools/zld/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/zprint/default.nix44
-rw-r--r--nixpkgs/pkgs/development/tools/zsv/default.nix30
2194 files changed, 229013 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/tools/aapt/default.nix b/nixpkgs/pkgs/development/tools/aapt/default.nix
new file mode 100644
index 000000000000..0d59f3ae6f8a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/aapt/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, stdenvNoCC
+, fetchzip
+, autoPatchelfHook
+, libcxx
+}:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "aapt";
+  version = "8.0.2-9289358";
+
+  src =
+    let
+      urlAndHash =
+        if stdenvNoCC.isLinux then {
+          url = "https://dl.google.com/android/maven2/com/android/tools/build/aapt2/${version}/aapt2-${version}-linux.jar";
+          hash = "sha256-P8eVIS6zaZGPh4Z7SXUiLtZaX1YIsSmGOdvF6Xb1WHI=";
+        } else if stdenvNoCC.isDarwin then {
+          url = "https://dl.google.com/android/maven2/com/android/tools/build/aapt2/${version}/aapt2-${version}-osx.jar";
+          hash = "sha256-hDfEPk3IJt+8FbRVEiHQbn24vsuOe6m36UcQsT6tGsQ=";
+        } else throw "Unsupport platform: ${stdenvNoCC.system}";
+    in
+    fetchzip (urlAndHash // {
+      extension = "zip";
+      stripRoot = false;
+    });
+
+  nativeBuildInputs = lib.optionals stdenvNoCC.isLinux [ autoPatchelfHook ];
+  buildInputs = lib.optionals stdenvNoCC.isLinux [ libcxx ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -D aapt2 $out/bin/aapt2
+
+    runHook postInstall
+  '';
+
+  meta = {
+    description = "A build tool that compiles and packages Android app's resources";
+    homepage = "https://developer.android.com/tools/aapt2";
+    license = lib.licenses.asl20;
+    maintainers = with lib.maintainers; [ linsui ];
+    platforms = lib.platforms.unix;
+    sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/development/tools/abuild/default.nix b/nixpkgs/pkgs/development/tools/abuild/default.nix
new file mode 100644
index 000000000000..dce24f0ad80d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/abuild/default.nix
@@ -0,0 +1,88 @@
+{ lib
+, stdenv
+, fetchFromGitLab
+, makeWrapper
+, pkg-config
+, file
+, scdoc
+, openssl
+, zlib
+, busybox
+, apk-tools
+, perl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "abuild";
+  version = "3.12.0";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.alpinelinux.org";
+    owner = "alpine";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-p4TohsZZTi4HxtJsyuoE5HDfkGa0pv53saGj3X9bmrI=";
+  };
+
+  buildInputs = [
+    openssl
+    zlib
+    busybox
+    # for $out/bin/apkbuild-cpan and $out/bin/apkbuild-pypi
+    (perl.withPackages (ps: with ps; [
+      LWP
+      JSON
+      ModuleBuildTiny
+      LWPProtocolHttps
+      IPCSystemSimple
+    ]))
+  ];
+
+  nativeBuildInputs = [
+    pkg-config
+    scdoc
+    makeWrapper
+    file
+  ];
+
+  patchPhase = ''
+    substituteInPlace ./Makefile \
+      --replace 'chmod 4555' '#chmod 4555'
+  '';
+
+  makeFlags = [
+    "prefix=${placeholder "out"}"
+    "CFLAGS=-Wno-error"
+  ];
+
+  installFlags = [
+    "sysconfdir=${placeholder "out"}/etc"
+  ];
+
+  postInstall = ''
+    # this script requires unpackaged 'augeas' rubygem, no reason
+    # to ship it if we can't provide the dependencies for it
+    rm -f ${placeholder "out"}/bin/apkbuild-gem-resolver
+
+    # Find all executables that are not compiled binaries and wrap
+    # them, make `apk-tools` available in their PATH and also the
+    # $out directory since many of the binaries provided call into
+    # other binaries
+    for prog in \
+      $(find ${placeholder "out"}/bin -type f -exec ${file}/bin/file -i '{}' + \
+      | grep -v x-executable | cut -d : -f1); do
+      wrapProgram $prog \
+        --prefix PATH : "${lib.makeBinPath [ apk-tools ]}" \
+        --prefix PATH : "${placeholder "out"}/bin"
+    done
+  '';
+
+  meta = with lib; {
+    description = "Alpine Linux build tools";
+    homepage = "https://gitlab.alpinelinux.org/alpine/abuild";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ onny ];
+    platforms = platforms.unix;
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/tools/agda-pkg/default.nix b/nixpkgs/pkgs/development/tools/agda-pkg/default.nix
new file mode 100644
index 000000000000..81af5e195895
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/agda-pkg/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, python3Packages
+, fetchPypi
+}:
+
+with python3Packages;
+
+buildPythonApplication rec {
+  pname = "agda-pkg";
+  version = "0.1.51";
+
+  disabled = pythonOlder "3.6";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "ee370889a1558caf45930d9f898dbe248048078e1e7e3ee17382bf574dc795f2";
+  };
+
+  # Checks need internet access, so we just check the program executes
+  # At the moment the help page needs to write to $HOME, this can
+  # be removed if https://github.com/agda/agda-pkg/issues/40 is fixed
+  checkPhase = ''
+    HOME=$NIX_BUILD_TOP $out/bin/apkg --help > /dev/null
+  '';
+
+  propagatedBuildInputs = [
+    click
+    gitpython
+    pony
+    whoosh
+    natsort
+    click-log
+    requests
+    humanize
+    distlib
+    jinja2
+    pyyaml
+    ponywhoosh
+  ];
+
+  meta = with lib; {
+    homepage = "https://agda.github.io/agda-pkg/";
+    description = "Package manager for Agda";
+    license = licenses.mit;
+    maintainers = with maintainers; [ alexarice ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/air/default.nix b/nixpkgs/pkgs/development/tools/air/default.nix
new file mode 100644
index 000000000000..ce51efafdbad
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/air/default.nix
@@ -0,0 +1,26 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "air";
+  version = "1.49.0";
+
+  src = fetchFromGitHub {
+    owner = "cosmtrek";
+    repo = "air";
+    rev = "v${version}";
+    hash = "sha256-6XQakQXGFMepX29KeiLlGM6EI8tiIfmKQuqZQXYNoto=";
+  };
+
+  vendorHash = "sha256-vyuXmQEjy5kPk9cKosHx0JZSZxstYtCNyfLIlRt2bnk=";
+
+   ldflags = [ "-s" "-w" "-X=main.airVersion=${version}" ];
+
+  subPackages = [ "." ];
+
+  meta = with lib; {
+    description = "Live reload for Go apps";
+    homepage = "https://github.com/cosmtrek/air";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ Gonzih ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/algolia-cli/default.nix b/nixpkgs/pkgs/development/tools/algolia-cli/default.nix
new file mode 100644
index 000000000000..75f69e021e1f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/algolia-cli/default.nix
@@ -0,0 +1,35 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles }:
+
+buildGoModule rec {
+  pname = "algolia-cli";
+  version = "1.5.0";
+
+  src = fetchFromGitHub {
+    owner = "algolia";
+    repo = "cli";
+    rev = "v${version}";
+    hash = "sha256-iaqr8/jPYEnOhGoiUC5lmd7l+AAOFh3iYVW+mbBV/V8=";
+  };
+
+  vendorHash = "sha256-cNuBTH7L2K4TgD0H9FZ9CjhE5AGXADaniGLD9Lhrtrk=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  subPackages = [ "cmd/algolia" ];
+
+  ldflags = [ "-s" "-w" "-X github.com/algolia/cli/pkg/version.Version=${version}" ];
+
+  postInstall = ''
+    installShellCompletion --cmd algolia \
+      --bash <($out/bin/algolia completion bash) \
+      --fish <($out/bin/algolia completion fish) \
+      --zsh <($out/bin/algolia completion zsh)
+  '';
+
+  meta = with lib; {
+    description = "Algolia’s official CLI devtool";
+    homepage = "https://algolia.com/doc/tools/cli/";
+    license = licenses.mit;
+    maintainers = [ maintainers.marsam ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/alloy/default.nix b/nixpkgs/pkgs/development/tools/alloy/default.nix
new file mode 100644
index 000000000000..37b2fd6a76c8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/alloy/default.nix
@@ -0,0 +1,69 @@
+{ lib, stdenv, fetchurl, jre, makeWrapper, makeDesktopItem }:
+
+let generic = { version, sha256 }:
+  stdenv.mkDerivation rec {
+    pname = "alloy${lib.versions.major version}";
+    inherit version;
+
+    src = fetchurl {
+      inherit sha256;
+      url = "https://github.com/AlloyTools/org.alloytools.alloy/releases/download/v${version}/org.alloytools.alloy.dist.jar";
+    };
+
+    desktopItem = makeDesktopItem rec {
+      name = pname;
+      exec = name;
+      icon = name;
+      desktopName = "Alloy ${lib.versions.major version}";
+      genericName = "Relational modelling tool";
+      comment = meta.description;
+      categories = [ "Development" "IDE" "Education" ];
+    };
+
+    nativeBuildInputs = [ makeWrapper ];
+
+    buildCommand = ''
+      jar=$out/share/alloy/${pname}.jar
+      install -Dm644 ${src} $jar
+
+      mkdir -p $out/bin
+      makeWrapper ${jre}/bin/java $out/bin/${pname} --add-flags \
+        "-jar $jar"
+
+      install -Dm644 ${./icon.png} $out/share/pixmaps/${pname}.png
+      cp -r ${desktopItem}/share/applications $out/share
+    '';
+
+    meta = with lib; {
+      description = "Language & tool for relational models";
+      longDescription = ''
+        Alloy is a language for describing structures and a tool for exploring
+        them. An Alloy model is a collection of constraints that describes a set
+        of structures, e.g. all the possible security configurations of a web
+        application, or all the possible topologies of a switching network. The
+        Alloy Analyzer is a solver that takes the constraints of a model and
+        finds structures that satisfy them. Structures are displayed graphically,
+        and their appearance can be customized for the domain at hand.
+      '';
+      homepage = "http://alloytools.org/";
+      downloadPage = "http://alloytools.org/download.html";
+      sourceProvenance = with sourceTypes; [ binaryBytecode ];
+      license = licenses.mit;
+      platforms = platforms.unix;
+      maintainers = with maintainers; [ notbandali ];
+    };
+  };
+
+in rec {
+  alloy5 = generic rec {
+    version = "5.1.0";
+    sha256 = "02k9khs4k5nc86x9pp5k3vcb0kiwdgcin46mlap4fycnr673xd53";
+  };
+
+  alloy6 = generic rec {
+    version = "6.0.0";
+    sha256 = "sha256-rA7mNxcu0DWkykMyfV4JwFmQqg0HOIcwjjD4jCRxNww=";
+  };
+
+  alloy = alloy5;
+}
diff --git a/nixpkgs/pkgs/development/tools/alloy/icon.png b/nixpkgs/pkgs/development/tools/alloy/icon.png
new file mode 100644
index 000000000000..a76bd9480474
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/alloy/icon.png
Binary files differdiff --git a/nixpkgs/pkgs/development/tools/allure/default.nix b/nixpkgs/pkgs/development/tools/allure/default.nix
new file mode 100644
index 000000000000..9580a6431fd2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/allure/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, makeWrapper, fetchurl, jre }:
+
+let
+  pname = "allure";
+  version = "2.27.0";
+in
+stdenv.mkDerivation rec {
+  inherit pname version;
+  nativeBuildInputs = [ makeWrapper ];
+
+  buildInputs = [ jre ];
+
+  src = fetchurl {
+    url = "https://github.com/allure-framework/allure2/releases/download/${version}/allure-${version}.tgz";
+    sha256 = "sha256-gasOVDCNxuZlyeDbloV6iL6DAInHPEXHAvnfUfoj+gA=";
+  };
+  dontConfigure = true;
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p "$out/share"
+    cd "$out/share"
+    tar xvzf $src
+    mkdir -p "$out/bin"
+    makeWrapper $out/share/${pname}-${version}/bin/allure $out/bin/${pname} \
+      --prefix PATH : "${jre}/bin"
+  '';
+
+  dontCheck = true;
+
+  meta = with lib; {
+    homepage = "https://docs.qameta.io/allure/";
+    description = "Allure Report is a flexible, lightweight multi-language test reporting tool.";
+    longDescription = "Allure Report is a flexible, lightweight multi-language test reporting tool. It provides clear graphical reports and allows everyone involved in the development process to extract the maximum of information from the everyday testing process";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ happysalada ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/development/tools/altair-graphql-client/default.nix b/nixpkgs/pkgs/development/tools/altair-graphql-client/default.nix
new file mode 100644
index 000000000000..e745ef3f932c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/altair-graphql-client/default.nix
@@ -0,0 +1,37 @@
+{ lib, appimageTools, makeWrapper, fetchurl }:
+
+let
+  pname = "altair";
+  version = "6.2.0";
+
+  src = fetchurl {
+    url = "https://github.com/imolorhe/altair/releases/download/v${version}/altair_${version}_x86_64_linux.AppImage";
+    sha256 = "sha256-tDku9PNPCJ3ft7eFq34l90jGOXjHMk8JZcfO8SWJras=";
+  };
+
+  appimageContents = appimageTools.extract { inherit pname version src; };
+in
+appimageTools.wrapType2 {
+  inherit src pname version;
+
+  extraInstallCommands = ''
+    mv $out/bin/${pname}-${version} $out/bin/${pname}
+
+    source "${makeWrapper}/nix-support/setup-hook"
+    wrapProgram $out/bin/${pname} \
+        --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations}}"
+
+    install -m 444 -D ${appimageContents}/${pname}.desktop -t $out/share/applications
+    substituteInPlace $out/share/applications/${pname}.desktop \
+      --replace 'Exec=AppRun' 'Exec=${pname}'
+    cp -r ${appimageContents}/usr/share/icons $out/share
+  '';
+
+  meta = with lib; {
+    description = "A feature-rich GraphQL Client IDE";
+    homepage = "https://github.com/imolorhe/altair";
+    license = licenses.mit;
+    maintainers = with maintainers; [ evalexpr ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/amazon-qldb-shell/Cargo.lock b/nixpkgs/pkgs/development/tools/amazon-qldb-shell/Cargo.lock
new file mode 100644
index 000000000000..611996e143fa
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/amazon-qldb-shell/Cargo.lock
@@ -0,0 +1,2825 @@
+# 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 = "amazon-qldb-driver"
+version = "0.1.0"
+source = "git+https://github.com/awslabs/amazon-qldb-driver-rust?branch=main#2c4951b0f8c025c7d40f0b868a32451eab16625a"
+dependencies = [
+ "amazon-qldb-driver-core",
+ "tokio",
+]
+
+[[package]]
+name = "amazon-qldb-driver-core"
+version = "0.1.0"
+source = "git+https://github.com/awslabs/amazon-qldb-driver-rust?branch=main#2c4951b0f8c025c7d40f0b868a32451eab16625a"
+dependencies = [
+ "anyhow",
+ "async-trait",
+ "aws-sdk-qldbsession",
+ "aws-smithy-client",
+ "aws-smithy-http 0.33.1",
+ "aws-types 0.6.0",
+ "bb8",
+ "bytes 1.1.0",
+ "futures",
+ "http",
+ "ion-c-sys",
+ "ion-rs 0.7.0",
+ "rand 0.8.5",
+ "sha2",
+ "thiserror",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "amazon_qldb_shell"
+version = "2.0.1"
+dependencies = [
+ "amazon-qldb-driver",
+ "anyhow",
+ "async-trait",
+ "atty",
+ "aws-config",
+ "aws-http 0.6.0",
+ "aws-sdk-qldbsession",
+ "aws-smithy-client",
+ "aws-smithy-http 0.33.1",
+ "aws-smithy-http-tower",
+ "aws-types 0.6.0",
+ "chrono",
+ "comfy-table",
+ "dirs",
+ "futures",
+ "http",
+ "ion-c-sys",
+ "ion-rs 0.8.0",
+ "itertools",
+ "rustyline",
+ "rustyline-derive",
+ "serde",
+ "smallvec",
+ "structopt",
+ "tempdir",
+ "thiserror",
+ "tokio",
+ "tower",
+ "tracing",
+ "tracing-appender",
+ "tracing-bunyan-formatter",
+ "tracing-subscriber",
+ "url",
+]
+
+[[package]]
+name = "ansi_term"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.53"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94a45b455c14666b85fc40a019e8ab9eb75e3a124e05494f5397122bc9eb06e0"
+
+[[package]]
+name = "arrayvec"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b"
+
+[[package]]
+name = "arrayvec"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6"
+
+[[package]]
+name = "async-trait"
+version = "0.1.52"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "061a7acccaa286c011ddc30970520b98fa40e00c9d644633fb26b5fc63a265e3"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[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 = "aws-config"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46634223c537ac88e5500cbb992afb0012b4533d8cbdfe337643bf512f3126b9"
+dependencies = [
+ "aws-http 0.3.0",
+ "aws-sdk-sts",
+ "aws-smithy-async 0.33.1",
+ "aws-smithy-client",
+ "aws-smithy-http 0.33.1",
+ "aws-smithy-http-tower",
+ "aws-smithy-json",
+ "aws-smithy-types 0.33.1",
+ "aws-types 0.3.0",
+ "bytes 1.1.0",
+ "http",
+ "tokio",
+ "tower",
+ "tracing",
+]
+
+[[package]]
+name = "aws-endpoint"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30594dc47241751ecd8bf15b3440a7ff27c0e947a0f3152863fd4c6a0e82ac90"
+dependencies = [
+ "aws-smithy-http 0.33.1",
+ "aws-types 0.3.0",
+ "http",
+ "regex",
+ "tracing",
+]
+
+[[package]]
+name = "aws-http"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c6f0268ebab22b6ed41ae78b3e04c35e2bf524cce555e4ce2b78c45f2048066"
+dependencies = [
+ "aws-smithy-http 0.33.1",
+ "aws-smithy-types 0.33.1",
+ "aws-types 0.3.0",
+ "http",
+ "lazy_static",
+ "tracing",
+]
+
+[[package]]
+name = "aws-http"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3049066e3282c98bbf01e90459a1772ccf6c0b96cd1483c3dd5aa34bef9b9de1"
+dependencies = [
+ "aws-smithy-http 0.36.0",
+ "aws-smithy-types 0.36.0",
+ "aws-types 0.6.0",
+ "http",
+ "lazy_static",
+ "percent-encoding",
+ "tracing",
+]
+
+[[package]]
+name = "aws-sdk-qldbsession"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "faf7a7a8e42418dfe855cda9400429b86735e33ad0469a3f6a6f2b478b3aa022"
+dependencies = [
+ "aws-endpoint",
+ "aws-http 0.3.0",
+ "aws-sig-auth",
+ "aws-smithy-async 0.33.1",
+ "aws-smithy-client",
+ "aws-smithy-http 0.33.1",
+ "aws-smithy-http-tower",
+ "aws-smithy-json",
+ "aws-smithy-types 0.33.1",
+ "aws-types 0.3.0",
+ "bytes 1.1.0",
+ "http",
+ "tower",
+]
+
+[[package]]
+name = "aws-sdk-sts"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80da5ff48de4b884a7d31138a05a5adf2db2a4b53b2457324c22019984e775d9"
+dependencies = [
+ "aws-endpoint",
+ "aws-http 0.3.0",
+ "aws-sig-auth",
+ "aws-smithy-async 0.33.1",
+ "aws-smithy-client",
+ "aws-smithy-http 0.33.1",
+ "aws-smithy-http-tower",
+ "aws-smithy-query",
+ "aws-smithy-types 0.33.1",
+ "aws-smithy-xml",
+ "aws-types 0.3.0",
+ "bytes 1.1.0",
+ "http",
+ "tower",
+]
+
+[[package]]
+name = "aws-sig-auth"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a9dffed5192181706d6702c2ddc569341b12b1011f6ce36dbd560a846fb55ac"
+dependencies = [
+ "aws-sigv4",
+ "aws-smithy-http 0.33.1",
+ "aws-types 0.3.0",
+ "http",
+ "thiserror",
+ "tracing",
+]
+
+[[package]]
+name = "aws-sigv4"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "066def5814ac312f4f4c0a3aa09af45b1fca19317247b0ffa06d4b1d1f0d815a"
+dependencies = [
+ "aws-smithy-http 0.33.1",
+ "form_urlencoded",
+ "hex",
+ "http",
+ "once_cell",
+ "percent-encoding",
+ "regex",
+ "ring",
+ "time 0.3.7",
+ "tracing",
+]
+
+[[package]]
+name = "aws-smithy-async"
+version = "0.33.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "907295d2d53d55ae31228647e3382be0f2f4706d6c43a7e8b23f5cfdbe224fb2"
+dependencies = [
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "aws-smithy-async"
+version = "0.36.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b69dad0aefb1b64e63e0d3a1310dc50191608d8c9e226f2f241f344a7173642e"
+dependencies = [
+ "futures-util",
+ "pin-project-lite",
+ "tokio",
+ "tokio-stream",
+]
+
+[[package]]
+name = "aws-smithy-client"
+version = "0.33.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "484dfc5febf1290e305479288a703120fd35e996182105e4cd97afe69e0d11a0"
+dependencies = [
+ "aws-smithy-async 0.33.1",
+ "aws-smithy-http 0.33.1",
+ "aws-smithy-http-tower",
+ "aws-smithy-types 0.33.1",
+ "bytes 1.1.0",
+ "fastrand",
+ "http",
+ "http-body",
+ "hyper",
+ "hyper-rustls",
+ "lazy_static",
+ "pin-project",
+ "pin-project-lite",
+ "tokio",
+ "tower",
+ "tracing",
+]
+
+[[package]]
+name = "aws-smithy-http"
+version = "0.33.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a4b8e568f284def4d1edfb0705e7058928f355ae264c44359b80f021e24d419"
+dependencies = [
+ "aws-smithy-types 0.33.1",
+ "bytes 1.1.0",
+ "bytes-utils",
+ "futures-core",
+ "http",
+ "http-body",
+ "hyper",
+ "percent-encoding",
+ "pin-project",
+ "tokio",
+ "tokio-util",
+ "tracing",
+]
+
+[[package]]
+name = "aws-smithy-http"
+version = "0.36.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1c8bbe92ecdc4e39a612359b09994c45d000591d4951aa7343443f44b47e6696"
+dependencies = [
+ "aws-smithy-types 0.36.0",
+ "bytes 1.1.0",
+ "bytes-utils",
+ "futures-core",
+ "http",
+ "http-body",
+ "hyper",
+ "percent-encoding",
+ "pin-project",
+ "tracing",
+]
+
+[[package]]
+name = "aws-smithy-http-tower"
+version = "0.33.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db222d9dbca42fa0d19ea803826f88153c14144c38915d5121e981b45c5f2cee"
+dependencies = [
+ "aws-smithy-http 0.33.1",
+ "bytes 1.1.0",
+ "http",
+ "http-body",
+ "pin-project",
+ "tower",
+ "tracing",
+]
+
+[[package]]
+name = "aws-smithy-json"
+version = "0.33.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acdb867f28532243d923fd2ef8b5a1d44e461b841e75a78c2c276b1918b5e842"
+dependencies = [
+ "aws-smithy-types 0.33.1",
+]
+
+[[package]]
+name = "aws-smithy-query"
+version = "0.33.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00d2169a63763651b835912aae357cfea9ad889468aa8828117b10c2329c6231"
+dependencies = [
+ "aws-smithy-types 0.33.1",
+ "urlencoding",
+]
+
+[[package]]
+name = "aws-smithy-types"
+version = "0.33.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "420eb4743434a99ce9ba270bec3ef242884d407bff0bca7d16b5b0457a7d3782"
+dependencies = [
+ "itoa 0.4.8",
+ "num-integer",
+ "ryu",
+ "time 0.3.7",
+]
+
+[[package]]
+name = "aws-smithy-types"
+version = "0.36.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cde96306a54777ec8781aa510830e242de614aa5746274713f5ecac0779f644f"
+dependencies = [
+ "itoa 1.0.1",
+ "num-integer",
+ "ryu",
+ "time 0.3.7",
+]
+
+[[package]]
+name = "aws-smithy-xml"
+version = "0.33.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25466637a7f68d24df5f25f69037179588419fa81991c6e198fd8f6e72ebfb07"
+dependencies = [
+ "thiserror",
+ "xmlparser",
+]
+
+[[package]]
+name = "aws-types"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2d8e1b6fd4081f367682b260f55eddc4c90ac4e93ee09517f373c093366fb96"
+dependencies = [
+ "aws-smithy-async 0.33.1",
+ "aws-smithy-types 0.33.1",
+ "rustc_version",
+ "tracing",
+ "zeroize",
+]
+
+[[package]]
+name = "aws-types"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "433fd128ea727e9b83b34c72c6d4db1b900f067760fa27b387694fe896633142"
+dependencies = [
+ "aws-smithy-async 0.36.0",
+ "aws-smithy-types 0.36.0",
+ "rustc_version",
+ "tracing",
+ "zeroize",
+]
+
+[[package]]
+name = "base64"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff"
+
+[[package]]
+name = "base64"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd"
+
+[[package]]
+name = "bb8"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e9f4fa9768efd269499d8fba693260cfc670891cf6de3adc935588447a77cc8"
+dependencies = [
+ "async-trait",
+ "futures-channel",
+ "futures-util",
+ "parking_lot 0.11.2",
+ "tokio",
+]
+
+[[package]]
+name = "bigdecimal"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d1e50562e37200edf7c6c43e54a08e64a5553bfb59d9c297d5572512aa517256"
+dependencies = [
+ "num-bigint",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "bindgen"
+version = "0.59.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2bd2a9a458e8f4304c52c43ebb0cfbd520289f8379a52e329a38afda99bf8eb8"
+dependencies = [
+ "bitflags",
+ "cexpr",
+ "clang-sys",
+ "clap",
+ "env_logger",
+ "lazy_static",
+ "lazycell",
+ "log",
+ "peeking_take_while",
+ "proc-macro2",
+ "quote",
+ "regex",
+ "rustc-hash",
+ "shlex",
+ "which",
+]
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bitvec"
+version = "0.19.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "55f93d0ef3363c364d5976646a38f04cf67cfe1d4c8d160cdea02cab2c116b33"
+dependencies = [
+ "funty",
+ "radium",
+ "tap",
+ "wyz",
+]
+
+[[package]]
+name = "block-buffer"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0bf7fe51849ea569fd452f37822f606a5cabb684dc918707a0193fd4664ff324"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4a45a46ab1f2412e53d3a0ade76ffad2025804294569aae387231a0cd6e0899"
+
+[[package]]
+name = "byteorder"
+version = "1.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
+
+[[package]]
+name = "bytes"
+version = "0.4.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c"
+dependencies = [
+ "byteorder",
+ "iovec",
+]
+
+[[package]]
+name = "bytes"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8"
+
+[[package]]
+name = "bytes-utils"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4e314712951c43123e5920a446464929adc667a5eade7f8fb3997776c9df6e54"
+dependencies = [
+ "bytes 1.1.0",
+ "either",
+]
+
+[[package]]
+name = "cc"
+version = "1.0.73"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11"
+
+[[package]]
+name = "cexpr"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766"
+dependencies = [
+ "nom 7.1.0",
+]
+
+[[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",
+ "time 0.1.44",
+ "winapi",
+]
+
+[[package]]
+name = "clang-sys"
+version = "1.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4cc00842eed744b858222c4c9faf7243aafc6d33f92f96935263ef4d8a41ce21"
+dependencies = [
+ "glob",
+ "libc",
+ "libloading",
+]
+
+[[package]]
+name = "clap"
+version = "2.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c"
+dependencies = [
+ "ansi_term",
+ "atty",
+ "bitflags",
+ "strsim",
+ "textwrap",
+ "unicode-width",
+ "vec_map",
+]
+
+[[package]]
+name = "clipboard-win"
+version = "4.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2f3e1238132dc01f081e1cbb9dace14e5ef4c3a51ee244bd982275fb514605db"
+dependencies = [
+ "error-code",
+ "str-buf",
+ "winapi",
+]
+
+[[package]]
+name = "cmake"
+version = "0.1.48"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e8ad8cef104ac57b68b89df3208164d228503abbdce70f6880ffa3d970e7443a"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "comfy-table"
+version = "5.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c42350b81f044f576ff88ac750419f914abb46a03831bb1747134344ee7a4e64"
+dependencies = [
+ "crossterm",
+ "strum",
+ "strum_macros",
+ "unicode-width",
+]
+
+[[package]]
+name = "core-foundation"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc"
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95059428f66df56b63431fdb4e1947ed2190586af5c5a8a8b71122bdf5a7f469"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e54ea8bc3fb1ee042f5aace6e3c6e025d3874866da222930f70ce62aceba0bfa"
+dependencies = [
+ "cfg-if",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5e5bed1f1c269533fa816a0a5492b3545209a205ca1a54842be180eb63a16a6"
+dependencies = [
+ "cfg-if",
+ "lazy_static",
+]
+
+[[package]]
+name = "crossterm"
+version = "0.22.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c85525306c4291d1b73ce93c8acf9c339f9b213aef6c1d85c3830cbf1c16325c"
+dependencies = [
+ "bitflags",
+ "crossterm_winapi",
+ "libc",
+ "mio 0.7.14",
+ "parking_lot 0.11.2",
+ "signal-hook",
+ "signal-hook-mio",
+ "winapi",
+]
+
+[[package]]
+name = "crossterm_winapi"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2ae1b35a484aa10e07fe0638d02301c5ad24de82d310ccbd2f3693da5f09bf1c"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "crypto-common"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57952ca27b5e3606ff4dd79b0020231aaf9d6aa76dc05fd30137538c50bd3ce8"
+dependencies = [
+ "generic-array",
+ "typenum",
+]
+
+[[package]]
+name = "ct-logs"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1a816186fa68d9e426e3cb4ae4dff1fcd8e4a2c34b781bf7a822574a0d0aac8"
+dependencies = [
+ "sct",
+]
+
+[[package]]
+name = "delegate"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fd733b5bf0bb5ca3c7cdea2135c91234c80b730e6e8a270851455a63b46c830"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "digest"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2fb860ca6fafa5552fb6d0e816a69c8e49f0908bf524e30a90d97c85892d506"
+dependencies = [
+ "block-buffer",
+ "crypto-common",
+]
+
+[[package]]
+name = "dirs"
+version = "4.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059"
+dependencies = [
+ "dirs-sys",
+]
+
+[[package]]
+name = "dirs-next"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1"
+dependencies = [
+ "cfg-if",
+ "dirs-sys-next",
+]
+
+[[package]]
+name = "dirs-sys"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "03d86534ed367a67548dc68113a0f5db55432fdfbb6e6f9d77704397d95d5780"
+dependencies = [
+ "libc",
+ "redox_users",
+ "winapi",
+]
+
+[[package]]
+name = "dirs-sys-next"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d"
+dependencies = [
+ "libc",
+ "redox_users",
+ "winapi",
+]
+
+[[package]]
+name = "either"
+version = "1.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457"
+
+[[package]]
+name = "endian-type"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d"
+
+[[package]]
+name = "env_logger"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b2cf0344971ee6c64c31be0d530793fba457d322dfec2810c453d0ef228f9c3"
+dependencies = [
+ "atty",
+ "humantime",
+ "log",
+ "regex",
+ "termcolor",
+]
+
+[[package]]
+name = "errno"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "errno-dragonfly"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "error-code"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64f18991e7bf11e7ffee451b5318b5c1a73c52d0d0ada6e5a3017c8c1ced6a21"
+dependencies = [
+ "libc",
+ "str-buf",
+]
+
+[[package]]
+name = "fastrand"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3fcf0cee53519c866c09b5de1f6c56ff9d647101f81c1964fa632e148896cdf"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "fd-lock"
+version = "3.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fcef756dea9cf3db5ce73759cf0467330427a786b47711b8d6c97620d718ceb9"
+dependencies = [
+ "cfg-if",
+ "rustix",
+ "windows-sys 0.30.0",
+]
+
+[[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 = "funty"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fed34cd105917e91daa4da6b3728c47b068749d6a62c59811f06ed2ac71d9da7"
+
+[[package]]
+name = "futures"
+version = "0.3.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f73fe65f54d1e12b726f517d3e2135ca3125a437b6d998caf1962961f7172d9e"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-io",
+ "futures-sink",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3083ce4b914124575708913bca19bfe887522d6e2e6d0952943f5eac4a74010"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c09fd04b7e4073ac7156a9539b57a484a8ea920f79c7c675d05d289ab6110d3"
+
+[[package]]
+name = "futures-executor"
+version = "0.3.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9420b90cfa29e327d0429f19be13e7ddb68fa1cccb09d65e5706b8c7a749b8a6"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-io"
+version = "0.3.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc4045962a5a5e935ee2fdedaa4e08284547402885ab326734432bed5d12966b"
+
+[[package]]
+name = "futures-macro"
+version = "0.3.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "33c1e13800337f4d4d7a316bf45a567dbcb6ffe087f16424852d97e97a91f512"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21163e139fa306126e6eedaf49ecdb4588f939600f0b1e770f4205ee4b7fa868"
+
+[[package]]
+name = "futures-task"
+version = "0.3.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57c66a976bf5909d801bbef33416c41372779507e7a6b3a5e25e4749c58f776a"
+
+[[package]]
+name = "futures-util"
+version = "0.3.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8b7abd5d659d9b90c8cba917f6ec750a74e2dc23902ef9cd4cc8c8b22e6036a"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-macro",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+]
+
+[[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 = "gethostname"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4addc164932852d066774c405dbbdb7914742d2b39e39e1a7ca949c856d054d1"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "418d37c8b1d42553c93648be529cb70f920d3baf8ef469b74b9638df426e0b4c"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "glob"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574"
+
+[[package]]
+name = "h2"
+version = "0.3.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9f1f717ddc7b2ba36df7e871fd88db79326551d3d6f1fc406fbfd28b582ff8e"
+dependencies = [
+ "bytes 1.1.0",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "http",
+ "indexmap",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tracing",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e"
+
+[[package]]
+name = "heck"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
+dependencies = [
+ "unicode-segmentation",
+]
+
+[[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"
+
+[[package]]
+name = "http"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31f4c6746584866f0feabcc69893c5b51beef3831656a968ed7ae254cdc4fd03"
+dependencies = [
+ "bytes 1.1.0",
+ "fnv",
+ "itoa 1.0.1",
+]
+
+[[package]]
+name = "http-body"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ff4f84919677303da5f147645dbea6b1881f368d03ac84e1dc09031ebd7b2c6"
+dependencies = [
+ "bytes 1.1.0",
+ "http",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "httparse"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9100414882e15fb7feccb4897e5f0ff0ff1ca7d1a86a23208ada4d7a18e6c6c4"
+
+[[package]]
+name = "httpdate"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421"
+
+[[package]]
+name = "humantime"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
+
+[[package]]
+name = "hyper"
+version = "0.14.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "043f0e083e9901b6cc658a77d1eb86f4fc650bbb977a4337dd63192826aa85dd"
+dependencies = [
+ "bytes 1.1.0",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "httparse",
+ "httpdate",
+ "itoa 1.0.1",
+ "pin-project-lite",
+ "socket2",
+ "tokio",
+ "tower-service",
+ "tracing",
+ "want",
+]
+
+[[package]]
+name = "hyper-rustls"
+version = "0.22.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f9f7a97316d44c0af9b0301e65010573a853a9fc97046d7331d7f6bc0fd5a64"
+dependencies = [
+ "ct-logs",
+ "futures-util",
+ "hyper",
+ "log",
+ "rustls",
+ "rustls-native-certs",
+ "tokio",
+ "tokio-rustls",
+ "webpki",
+]
+
+[[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 = "indexmap"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "282a6247722caba404c065016bbfa522806e51714c34f5dfc3e4a3a46fcb4223"
+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 = "io-lifetimes"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6ef6787e7f0faedc040f95716bdd0e62bcfcf4ba93da053b62dea2691c13864"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "ion-c-sys"
+version = "0.4.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "437af3116667611a1aa6a6b8cdbff2e6343e6b8416ceb14e10402303e8a602a9"
+dependencies = [
+ "bigdecimal",
+ "bindgen",
+ "chrono",
+ "cmake",
+ "ion-c-sys-macros",
+ "num-bigint",
+ "paste",
+]
+
+[[package]]
+name = "ion-c-sys-macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72391418bc103fb8a3dfed858d9532183aff3b3ff5748054e22434a484da04cc"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "ion-rs"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8bf75af80121752ccbbab9db0366ba35ee48ecc6167cc41fce8a634601138f8c"
+dependencies = [
+ "arrayvec 0.7.2",
+ "base64 0.12.3",
+ "bigdecimal",
+ "bytes 0.4.12",
+ "chrono",
+ "delegate",
+ "ion-c-sys",
+ "nom 6.1.2",
+ "num-bigint",
+ "num-traits",
+ "thiserror",
+]
+
+[[package]]
+name = "ion-rs"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6640b51cd262630f3d3ee3b14baf2e1b06cfbbb4f91ac016725ecf09100d3f44"
+dependencies = [
+ "arrayvec 0.7.2",
+ "base64 0.12.3",
+ "bigdecimal",
+ "bytes 0.4.12",
+ "chrono",
+ "delegate",
+ "ion-c-sys",
+ "nom 6.1.2",
+ "num-bigint",
+ "num-traits",
+ "thiserror",
+]
+
+[[package]]
+name = "iovec"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "itertools"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9a9d19fa1e79b6215ff29b9d6880b706147f16e9b1dbb1e4e5947b5b02bc5e3"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itoa"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4"
+
+[[package]]
+name = "itoa"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35"
+
+[[package]]
+name = "js-sys"
+version = "0.3.56"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a38fc24e30fd564ce974c02bf1d337caddff65be6cc4735a1f7eab22a7440f04"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "lazycell"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
+
+[[package]]
+name = "lexical-core"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6607c62aa161d23d17a9072cc5da0be67cdfc89d3afb1e8d9c842bebc2525ffe"
+dependencies = [
+ "arrayvec 0.5.2",
+ "bitflags",
+ "cfg-if",
+ "ryu",
+ "static_assertions",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.118"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "06e509672465a0504304aa87f9f176f2b2b716ed8fb105ebe5c02dc6dce96a94"
+
+[[package]]
+name = "libloading"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "efbc0f03f9a775e9f6aed295c6a1ba2253c5757a9e03d55c6caa46a681abcddd"
+dependencies = [
+ "cfg-if",
+ "winapi",
+]
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.0.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95f5690fef754d905294c56f7ac815836f2513af966aa47f2e07ac79be07827f"
+
+[[package]]
+name = "lock_api"
+version = "0.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88943dd7ef4a2e5a4bfa2753aaab3013e34ce2533d1996fb18ef591e315e2b3b"
+dependencies = [
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "matchers"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558"
+dependencies = [
+ "regex-automata",
+]
+
+[[package]]
+name = "matches"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f"
+
+[[package]]
+name = "memchr"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a"
+
+[[package]]
+name = "memoffset"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "minimal-lexical"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+
+[[package]]
+name = "mio"
+version = "0.7.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8067b404fe97c70829f082dec8bcf4f71225d7eaea1d8645349cb76fa06205cc"
+dependencies = [
+ "libc",
+ "log",
+ "miow",
+ "ntapi",
+ "winapi",
+]
+
+[[package]]
+name = "mio"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba272f85fa0b41fc91872be579b3bbe0f56b792aa361a380eb669469f68dafb2"
+dependencies = [
+ "libc",
+ "log",
+ "miow",
+ "ntapi",
+ "winapi",
+]
+
+[[package]]
+name = "miow"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "nibble_vec"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77a5d83df9f36fe23f0c3648c6bbb8b0298bb5f1939c8f2704431371f4b84d43"
+dependencies = [
+ "smallvec",
+]
+
+[[package]]
+name = "nix"
+version = "0.23.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f866317acbd3a240710c63f065ffb1e4fd466259045ccb504130b7f668f35c6"
+dependencies = [
+ "bitflags",
+ "cc",
+ "cfg-if",
+ "libc",
+ "memoffset",
+]
+
+[[package]]
+name = "nom"
+version = "6.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7413f999671bd4745a7b624bd370a569fb6bc574b23c83a3c5ed2e453f3d5e2"
+dependencies = [
+ "bitvec",
+ "funty",
+ "lexical-core",
+ "memchr",
+ "version_check",
+]
+
+[[package]]
+name = "nom"
+version = "7.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b1d11e1ef389c76fe5b81bcaf2ea32cf88b62bc494e19f493d0b30e7a930109"
+dependencies = [
+ "memchr",
+ "minimal-lexical",
+ "version_check",
+]
+
+[[package]]
+name = "ntapi"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c28774a7fd2fbb4f0babd8237ce554b73af68021b5f695a3cebd6c59bac0980f"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "num-bigint"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f6f7833f2cbf2360a6cfd58cd41a53aa7a90bd4c202f5b1c7dd2ed73c57b2c3"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-integer"
+version = "0.1.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db"
+dependencies = [
+ "autocfg",
+ "num-traits",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290"
+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 = "num_threads"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97ba99ba6393e2c3734791401b66902d981cb03bf190af674ca69949b6d5fb15"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da32515d9f6e6e489d7bc9d84c71b060db7247dc035bbe44eac88cf87486d8d5"
+
+[[package]]
+name = "openssl-probe"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
+
+[[package]]
+name = "parking_lot"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99"
+dependencies = [
+ "instant",
+ "lock_api",
+ "parking_lot_core 0.8.5",
+]
+
+[[package]]
+name = "parking_lot"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87f5ec2493a61ac0506c0f4199f99070cbe83857b0337006a30f3e6719b8ef58"
+dependencies = [
+ "lock_api",
+ "parking_lot_core 0.9.1",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216"
+dependencies = [
+ "cfg-if",
+ "instant",
+ "libc",
+ "redox_syscall",
+ "smallvec",
+ "winapi",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28141e0cc4143da2443301914478dc976a61ffdb3f043058310c70df2fed8954"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall",
+ "smallvec",
+ "windows-sys 0.32.0",
+]
+
+[[package]]
+name = "paste"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0744126afe1a6dd7f394cb50a716dbe086cb06e255e53d8d0185d82828358fb5"
+
+[[package]]
+name = "peeking_take_while"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099"
+
+[[package]]
+name = "percent-encoding"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
+
+[[package]]
+name = "pin-project"
+version = "1.0.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "58ad3879ad3baf4e44784bc6a718a8698867bb991f8ce24d1bcbe2cfb4c3a75e"
+dependencies = [
+ "pin-project-internal",
+]
+
+[[package]]
+name = "pin-project-internal"
+version = "1.0.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "744b6f092ba29c3650faf274db506afd39944f48420f6c86b17cfe0ee1cb36bb"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e280fbe77cc62c91527259e9442153f4688736748d24660126286329742b4c6c"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[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.36"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029"
+dependencies = [
+ "unicode-xid",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "864d3e96a899863136fc6e99f3d7cae289dafe43bf2c5ac19b70df7210c0a145"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "radium"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "941ba9d78d8e2f7ce474c015eea4d9c6d25b6a3327f9832ee29a4de27f91bbb8"
+
+[[package]]
+name = "radix_trie"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c069c179fcdc6a2fe24d8d18305cf085fdbd4f922c041943e203685d6a1c58fd"
+dependencies = [
+ "endian-type",
+ "nibble_vec",
+]
+
+[[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",
+ "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",
+]
+
+[[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",
+]
+
+[[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",
+]
+
+[[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",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "redox_users"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "528532f3d801c87aec9def2add9ca802fe569e44a544afe633765267840abe64"
+dependencies = [
+ "getrandom",
+ "redox_syscall",
+]
+
+[[package]]
+name = "regex"
+version = "1.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
+dependencies = [
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b"
+
+[[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 = "ring"
+version = "0.16.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc"
+dependencies = [
+ "cc",
+ "libc",
+ "once_cell",
+ "spin",
+ "untrusted",
+ "web-sys",
+ "winapi",
+]
+
+[[package]]
+name = "rustc-hash"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
+
+[[package]]
+name = "rustc_version"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
+dependencies = [
+ "semver",
+]
+
+[[package]]
+name = "rustix"
+version = "0.32.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7cee647393af53c750e15dcbf7781cdd2e550b246bde76e46c326e7ea3c73773"
+dependencies = [
+ "bitflags",
+ "errno",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys",
+ "winapi",
+]
+
+[[package]]
+name = "rustls"
+version = "0.19.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7"
+dependencies = [
+ "base64 0.13.0",
+ "log",
+ "ring",
+ "sct",
+ "webpki",
+]
+
+[[package]]
+name = "rustls-native-certs"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a07b7c1885bd8ed3831c289b7870b13ef46fe0e856d288c30d9cc17d75a2092"
+dependencies = [
+ "openssl-probe",
+ "rustls",
+ "schannel",
+ "security-framework",
+]
+
+[[package]]
+name = "rustyline"
+version = "9.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db7826789c0e25614b03e5a54a0717a86f9ff6e6e5247f92b369472869320039"
+dependencies = [
+ "bitflags",
+ "cfg-if",
+ "clipboard-win",
+ "dirs-next",
+ "fd-lock",
+ "libc",
+ "log",
+ "memchr",
+ "nix",
+ "radix_trie",
+ "scopeguard",
+ "smallvec",
+ "unicode-segmentation",
+ "unicode-width",
+ "utf8parse",
+ "winapi",
+]
+
+[[package]]
+name = "rustyline-derive"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb35a55ab810b5c0fe31606fe9b47d1354e4dc519bec0a102655f78ea2b38057"
+dependencies = [
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f"
+
+[[package]]
+name = "schannel"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f05ba609c234e60bee0d547fe94a4c7e9da733d1c962cf6e59efa4cd9c8bc75"
+dependencies = [
+ "lazy_static",
+ "winapi",
+]
+
+[[package]]
+name = "scopeguard"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+
+[[package]]
+name = "sct"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "security-framework"
+version = "2.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dc14f172faf8a0194a3aded622712b0de276821addc574fa54fc0a1167e10dc"
+dependencies = [
+ "bitflags",
+ "core-foundation",
+ "core-foundation-sys",
+ "libc",
+ "security-framework-sys",
+]
+
+[[package]]
+name = "security-framework-sys"
+version = "2.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0160a13a177a45bfb43ce71c01580998474f556ad854dcbca936dd2841a5c556"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "semver"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0486718e92ec9a68fbed73bb5ef687d71103b142595b406835649bebd33f72c7"
+
+[[package]]
+name = "serde"
+version = "1.0.136"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce31e24b01e1e524df96f1c2fdd054405f8d7376249a5110886fb4b658484789"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.136"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08597e7152fcd306f41838ed3e37be9eaeed2b61c42e2117266a554fab4662f9"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e8d9fa5c3b304765ce1fd9c4c8a3de2c8db365a5b91be52f186efc675681d95"
+dependencies = [
+ "itoa 1.0.1",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "sha2"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "99c3bd8169c58782adad9290a9af5939994036b76187f7b4f0e6de91dbbfc0ec"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "sharded-slab"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31"
+dependencies = [
+ "lazy_static",
+]
+
+[[package]]
+name = "shlex"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3"
+
+[[package]]
+name = "signal-hook"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "647c97df271007dcea485bb74ffdb57f2e683f1306c854f468a0c244badabf2d"
+dependencies = [
+ "libc",
+ "signal-hook-registry",
+]
+
+[[package]]
+name = "signal-hook-mio"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "29fd5867f1c4f2c5be079aee7a2adf1152ebb04a4bc4d341f504b7dece607ed4"
+dependencies = [
+ "libc",
+ "mio 0.7.14",
+ "signal-hook",
+]
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "slab"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9def91fd1e018fe007022791f865d0ccc9b3a0d5001e01aabb8b40e46000afb5"
+
+[[package]]
+name = "smallvec"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83"
+
+[[package]]
+name = "socket2"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "66d72b759436ae32898a2af0a14218dbf55efde3feeb170eb623637db85ee1e0"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "spin"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
+
+[[package]]
+name = "static_assertions"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+
+[[package]]
+name = "str-buf"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d44a3643b4ff9caf57abcee9c2c621d6c03d9135e0d8b589bd9afb5992cb176a"
+
+[[package]]
+name = "strsim"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
+
+[[package]]
+name = "structopt"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c6b5c64445ba8094a6ab0c3cd2ad323e07171012d9c98b0b15651daf1787a10"
+dependencies = [
+ "clap",
+ "lazy_static",
+ "structopt-derive",
+]
+
+[[package]]
+name = "structopt-derive"
+version = "0.4.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dcb5ae327f9cc13b68763b5749770cb9e048a99bd9dfdfa58d0cf05d5f64afe0"
+dependencies = [
+ "heck",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "strum"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7ac893c7d471c8a21f31cfe213ec4f6d9afeed25537c772e08ef3f005f8729e"
+
+[[package]]
+name = "strum_macros"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "339f799d8b549e3744c7ac7feb216383e4005d94bdb22561b3ab8f3b808ae9fb"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "syn"
+version = "1.0.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a65b3f4ffa0092e9887669db0eae07941f023991ab58ea44da8fe8e2d511c6b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-xid",
+]
+
+[[package]]
+name = "tap"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369"
+
+[[package]]
+name = "tempdir"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "15f2b5fb00ccdf689e0149d1b1b3c03fead81c2b37735d812fa8bddbbf41b6d8"
+dependencies = [
+ "rand 0.4.6",
+ "remove_dir_all",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dfed899f0eb03f32ee8c6a0aabdb8a7949659e3466561fc0adf54e26d88c5f4"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "854babe52e4df1653706b98fcfc05843010039b406875930a70e4d9644e5c417"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa32fd3f627f367fe16f893e2597ae3c05020f8bba2666a4e6ea73d377e5714b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[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 = "time"
+version = "0.1.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255"
+dependencies = [
+ "libc",
+ "wasi",
+ "winapi",
+]
+
+[[package]]
+name = "time"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "004cbc98f30fa233c61a38bc77e96a9106e65c88f2d3bef182ae952027e5753d"
+dependencies = [
+ "itoa 1.0.1",
+ "libc",
+ "num_threads",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c1c1d5a42b6245520c249549ec267180beaffcc0615401ac8e31853d4b6d8d2"
+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 = "tokio"
+version = "1.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2af73ac49756f3f7c01172e34a23e5d0216f6c32333757c2c61feb2bbff5a5ee"
+dependencies = [
+ "bytes 1.1.0",
+ "libc",
+ "memchr",
+ "mio 0.8.0",
+ "num_cpus",
+ "once_cell",
+ "parking_lot 0.12.0",
+ "pin-project-lite",
+ "signal-hook-registry",
+ "socket2",
+ "tokio-macros",
+ "winapi",
+]
+
+[[package]]
+name = "tokio-macros"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b557f72f448c511a979e2564e55d74e6c4432fc96ff4f6241bc6bded342643b7"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "tokio-rustls"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc6844de72e57df1980054b38be3a9f4702aba4858be64dd700181a8a6d0e1b6"
+dependencies = [
+ "rustls",
+ "tokio",
+ "webpki",
+]
+
+[[package]]
+name = "tokio-stream"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50145484efff8818b5ccd256697f36863f587da82cf8b409c53adf1e840798e3"
+dependencies = [
+ "futures-core",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.6.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e99e1983e5d376cd8eb4b66604d2e99e79f5bd988c3055891dcd8c9e2604cc0"
+dependencies = [
+ "bytes 1.1.0",
+ "futures-core",
+ "futures-sink",
+ "log",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "tower"
+version = "0.4.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a89fd63ad6adf737582df5db40d286574513c69a11dac5214dc3b5603d6713e"
+dependencies = [
+ "futures-core",
+ "futures-util",
+ "pin-project",
+ "pin-project-lite",
+ "tokio",
+ "tower-layer",
+ "tower-service",
+ "tracing",
+]
+
+[[package]]
+name = "tower-layer"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "343bc9466d3fe6b0f960ef45960509f84480bf4fd96f92901afe7ff3df9d3a62"
+
+[[package]]
+name = "tower-service"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6"
+
+[[package]]
+name = "tracing"
+version = "0.1.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d8d93354fe2a8e50d5953f5ae2e47a3fc2ef03292e7ea46e3cc38f549525fb9"
+dependencies = [
+ "cfg-if",
+ "log",
+ "pin-project-lite",
+ "tracing-attributes",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-appender"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94571df2eae3ed4353815ea5a90974a594a1792d8782ff2cbcc9392d1101f366"
+dependencies = [
+ "crossbeam-channel",
+ "time 0.3.7",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "tracing-attributes"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8276d9a4a3a558d7b7ad5303ad50b53d58264641b82914b7ada36bd762e7a716"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "tracing-bunyan-formatter"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd99ff040622c69c0fc4bd3ea5fe16630ce46400a79bd41339391b2d416ea24c"
+dependencies = [
+ "gethostname",
+ "log",
+ "serde",
+ "serde_json",
+ "time 0.3.7",
+ "tracing",
+ "tracing-core",
+ "tracing-log",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "03cfcb51380632a72d3111cb8d3447a8d908e577d31beeac006f836383d29a23"
+dependencies = [
+ "lazy_static",
+ "valuable",
+]
+
+[[package]]
+name = "tracing-log"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a6923477a48e41c1951f1999ef8bb5a3023eb723ceadafe78ffb65dc366761e3"
+dependencies = [
+ "lazy_static",
+ "log",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-subscriber"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "74786ce43333fcf51efe947aed9718fbe46d5c7328ec3f1029e818083966d9aa"
+dependencies = [
+ "ansi_term",
+ "lazy_static",
+ "matchers",
+ "regex",
+ "sharded-slab",
+ "smallvec",
+ "thread_local",
+ "tracing",
+ "tracing-core",
+ "tracing-log",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642"
+
+[[package]]
+name = "typenum"
+version = "1.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987"
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a01404663e3db436ed2746d9fefef640d868edae3cceb81c3b8d5732fda678f"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d54590932941a9e9266f0832deed84ebe1bf2e4c9e4a3554d393d18f5e854bf9"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e8820f5d777f6224dc4be3632222971ac30164d4a258d595640799554ebfd99"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973"
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3"
+
+[[package]]
+name = "untrusted"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
+
+[[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 = "urlencoding"
+version = "1.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a1f0175e03a0973cf4afd476bef05c26e228520400eb1fd473ad417b1c00ffb"
+
+[[package]]
+name = "utf8parse"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "936e4b492acfd135421d8dca4b1aa80a7bfc26e702ef3af710e0752684df5372"
+
+[[package]]
+name = "valuable"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
+
+[[package]]
+name = "vec_map"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "want"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0"
+dependencies = [
+ "log",
+ "try-lock",
+]
+
+[[package]]
+name = "wasi"
+version = "0.10.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25f1af7423d8588a3d840681122e72e6a24ddbcb3f0ec385cac0d12d24256c06"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b21c0df030f5a177f3cba22e9bc4322695ec43e7257d865302900290bcdedca"
+dependencies = [
+ "bumpalo",
+ "lazy_static",
+ "log",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2f4203d69e40a52ee523b2529a773d5ffc1dc0071801c87b3d270b471b80ed01"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa8a30d46208db204854cadbb5d4baf5fcf8071ba5bf48190c3e59937962ebc"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d958d035c4438e28c70e4321a2911302f10135ce78a9c7834c0cab4123d06a2"
+
+[[package]]
+name = "web-sys"
+version = "0.3.56"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c060b319f29dd25724f09a2ba1418f142f539b2be99fbf4d2d5a8f7330afb8eb"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "webpki"
+version = "0.21.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "which"
+version = "4.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a5a7e487e921cf220206864a94a89b6c6905bfc19f1057fa26a4cb360e5c1d2"
+dependencies = [
+ "either",
+ "lazy_static",
+ "libc",
+]
+
+[[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"
+
+[[package]]
+name = "windows-sys"
+version = "0.30.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "030b7ff91626e57a05ca64a07c481973cbb2db774e4852c9c7ca342408c6a99a"
+dependencies = [
+ "windows_aarch64_msvc 0.30.0",
+ "windows_i686_gnu 0.30.0",
+ "windows_i686_msvc 0.30.0",
+ "windows_x86_64_gnu 0.30.0",
+ "windows_x86_64_msvc 0.30.0",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.32.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3df6e476185f92a12c072be4a189a0210dcdcf512a1891d6dff9edb874deadc6"
+dependencies = [
+ "windows_aarch64_msvc 0.32.0",
+ "windows_i686_gnu 0.32.0",
+ "windows_i686_msvc 0.32.0",
+ "windows_x86_64_gnu 0.32.0",
+ "windows_x86_64_msvc 0.32.0",
+]
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.30.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "29277a4435d642f775f63c7d1faeb927adba532886ce0287bd985bffb16b6bca"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.32.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8e92753b1c443191654ec532f14c199742964a061be25d77d7a96f09db20bf5"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.30.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1145e1989da93956c68d1864f32fb97c8f561a8f89a5125f6a2b7ea75524e4b8"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.32.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a711c68811799e017b6038e0922cb27a5e2f43a2ddb609fe0b6f3eeda9de615"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.30.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4a09e3a0d4753b73019db171c1339cd4362c8c44baf1bcea336235e955954a6"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.32.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "146c11bb1a02615db74680b32a68e2d61f553cc24c4eb5b4ca10311740e44172"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.30.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ca64fcb0220d58db4c119e050e7af03c69e6f4f415ef69ec1773d9aab422d5a"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.32.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c912b12f7454c6620635bbff3450962753834be2a594819bd5e945af18ec64bc"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.30.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08cabc9f0066848fef4bc6a1c1668e6efce38b661d2aeec75d18d8617eebb5f1"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.32.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "504a2476202769977a040c6364301a3f65d0cc9e3fb08600b2bda150a0488316"
+
+[[package]]
+name = "wyz"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85e60b0d1b5f99db2556934e21937020776a5d31520bf169e851ac44e6420214"
+
+[[package]]
+name = "xmlparser"
+version = "0.13.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "114ba2b24d2167ef6d67d7d04c8cc86522b87f490025f39f0303b7db5bf5e3d8"
+
+[[package]]
+name = "zeroize"
+version = "1.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7c88870063c39ee00ec285a2f8d6a966e5b6fb2becc4e8dac77ed0d370ed6006"
diff --git a/nixpkgs/pkgs/development/tools/amazon-qldb-shell/default.nix b/nixpkgs/pkgs/development/tools/amazon-qldb-shell/default.nix
new file mode 100644
index 000000000000..351a8bf5fabc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/amazon-qldb-shell/default.nix
@@ -0,0 +1,44 @@
+{ stdenv
+, lib
+, cmake
+, fetchFromGitHub
+, rustPlatform
+, testers
+, Security
+}:
+
+let
+  pname = "amazon-qldb-shell";
+  version = "2.0.1";
+  package = rustPlatform.buildRustPackage {
+    inherit pname version;
+
+    src = fetchFromGitHub {
+      owner = "awslabs";
+      repo = pname;
+      rev = "v${version}";
+      sha256 = "sha256-aXScqJ1LijMSAy9YkS5QyXtTqxd19lLt3BbyVXlbw8o=";
+    };
+
+    nativeBuildInputs = [ cmake rustPlatform.bindgenHook ];
+    buildInputs = lib.optional stdenv.isDarwin Security;
+
+    cargoLock = {
+      lockFile = ./Cargo.lock;
+      outputHashes = {
+        "amazon-qldb-driver-0.1.0" = "sha256-az0rANBcryHHnpGWvo15TGGW4KMUULZHaj5msIHts14=";
+      };
+    };
+
+    passthru.tests.version = testers.testVersion { inherit package; };
+
+    meta = with lib; {
+      description = "An interface to send PartiQL statements to Amazon Quantum Ledger Database (QLDB)";
+      homepage = "https://github.com/awslabs/amazon-qldb-shell";
+      license = licenses.asl20;
+      maintainers = [ maintainers.terlar ];
+      mainProgram = "qldb";
+    };
+  };
+in
+package
diff --git a/nixpkgs/pkgs/development/tools/ameba/default.nix b/nixpkgs/pkgs/development/tools/ameba/default.nix
new file mode 100644
index 000000000000..ef133b6f983b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ameba/default.nix
@@ -0,0 +1,23 @@
+{ lib, fetchFromGitHub, fetchpatch, crystal }:
+
+crystal.buildCrystalPackage rec {
+  pname = "ameba";
+  version = "1.5.0";
+
+  src = fetchFromGitHub {
+    owner = "crystal-ameba";
+    repo = "ameba";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-TdyEnTloaciSpkPmnm+OM75sz9jaCaQ3VoDEepfescU=";
+  };
+
+  format = "make";
+
+  meta = with lib; {
+    description = "A static code analysis tool for Crystal";
+    homepage = "https://crystal-ameba.github.io";
+    changelog = "https://github.com/crystal-ameba/ameba/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ kimburgess ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ammonite/default.nix b/nixpkgs/pkgs/development/tools/ammonite/default.nix
new file mode 100644
index 000000000000..39f69f402b94
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ammonite/default.nix
@@ -0,0 +1,91 @@
+{ lib, stdenv, fetchurl, jre, writeScript, common-updater-scripts, git, nixfmt
+, nix, coreutils, gnused, disableRemoteLogging ? true }:
+
+let
+  repo = "git@github.com:lihaoyi/Ammonite.git";
+
+  common = { scalaVersion, sha256 }:
+    stdenv.mkDerivation rec {
+      pname = "ammonite";
+      version = "2.5.3";
+
+      src = fetchurl {
+        url =
+          "https://github.com/lihaoyi/Ammonite/releases/download/${version}/${scalaVersion}-${version}";
+        inherit sha256;
+      };
+
+      dontUnpack = true;
+
+      installPhase = ''
+        install -Dm755 $src $out/bin/amm
+        sed -i '0,/java/{s|java|${jre}/bin/java|}' $out/bin/amm
+      '' + lib.optionalString (disableRemoteLogging) ''
+        sed -i "0,/ammonite.Main/{s|ammonite.Main'|ammonite.Main' --no-remote-logging|}" $out/bin/amm
+        sed -i '1i #!/bin/sh' $out/bin/amm
+      '';
+
+      passthru = {
+
+        updateScript = writeScript "update.sh" ''
+          #!${stdenv.shell}
+          set -o errexit
+          PATH=${
+            lib.makeBinPath [
+              common-updater-scripts
+              coreutils
+              git
+              gnused
+              nix
+              nixfmt
+            ]
+          }
+          oldVersion="$(nix-instantiate --eval -E "with import ./. {}; lib.getVersion ${pname}" | tr -d '"')"
+          latestTag="$(git -c 'versionsort.suffix=-' ls-remote --exit-code --refs --sort='version:refname' --tags ${repo} '*.*.*' | tail --lines=1 | cut --delimiter='/' --fields=3)"
+          if [ "$oldVersion" != "$latestTag" ]; then
+            nixpkgs="$(git rev-parse --show-toplevel)"
+            default_nix="$nixpkgs/pkgs/development/tools/ammonite/default.nix"
+            update-source-version ${pname}_2_12 "$latestTag" --version-key=version --print-changes
+            sed -i "s|$latestTag|$oldVersion|g" "$default_nix"
+            update-source-version ${pname}_2_13 "$latestTag" --version-key=version --print-changes
+            nixfmt "$default_nix"
+          else
+            echo "${pname} is already up-to-date"
+          fi
+        '';
+      };
+
+      doInstallCheck = true;
+      installCheckPhase = ''
+        runHook preInstallCheck
+
+        $out/bin/amm -h "$PWD" -c 'val foo = 21; println(foo * 2)' | grep 42
+
+        runHook postInstallCheck
+      '';
+
+      meta = with lib; {
+        description = "Improved Scala REPL";
+        longDescription = ''
+          The Ammonite-REPL is an improved Scala REPL, re-implemented from first principles.
+          It is much more featureful than the default REPL and comes
+          with a lot of ergonomic improvements and configurability
+          that may be familiar to people coming from IDEs or other REPLs such as IPython or Zsh.
+        '';
+        homepage = "https://github.com/com-lihaoyi/Ammonite";
+        license = licenses.mit;
+        maintainers = [ maintainers.nequissimus ];
+        mainProgram = "amm";
+        platforms = platforms.all;
+      };
+    };
+in {
+  ammonite_2_12 = common {
+    scalaVersion = "2.12";
+    sha256 = "sha256-Iov55ohFjcGhur5UEng7aAZJPVua1H/JaKKW6OKS6Zg=";
+  };
+  ammonite_2_13 = common {
+    scalaVersion = "2.13";
+    sha256 = "sha256-dzUhKUQDHrYZ4WyCk4z4CTxb6vK05qfApR/WPOwhA5s=";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/amqpcat/default.nix b/nixpkgs/pkgs/development/tools/amqpcat/default.nix
new file mode 100644
index 000000000000..774af838b63a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/amqpcat/default.nix
@@ -0,0 +1,32 @@
+{ lib, fetchFromGitHub, crystal, openssl, testers, amqpcat }:
+
+crystal.buildCrystalPackage rec {
+  pname = "amqpcat";
+  version = "0.2.5";
+
+  src = fetchFromGitHub {
+    owner = "cloudamqp";
+    repo = "amqpcat";
+    rev = "v${version}";
+    hash = "sha256-AXX4aF5717lSIO0/2jNDPXXLtM/h//BlxO+cX71aWG4=";
+  };
+
+  format = "shards";
+  shardsFile = ./shards.nix;
+
+  buildInputs = [ openssl ];
+
+  # Tests require network access
+  doCheck = false;
+
+  passthru.tests.version = testers.testVersion {
+    package = amqpcat;
+  };
+
+  meta = with lib; {
+    description = "A CLI tool for publishing to and consuming from AMQP servers";
+    homepage = "https://github.com/cloudamqp/amqpcat";
+    license = licenses.mit;
+    maintainers = with maintainers; [ aaronjheng ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/amqpcat/shards.nix b/nixpkgs/pkgs/development/tools/amqpcat/shards.nix
new file mode 100644
index 000000000000..4cfa4933f11f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/amqpcat/shards.nix
@@ -0,0 +1,12 @@
+{
+  amq-protocol = {
+    url = "https://github.com/cloudamqp/amq-protocol.cr.git";
+    rev = "v1.1.4";
+    sha256 = "1x10zh371wmwi55rpdymfhf7hbh900zc94b64hkk12pp20mws55r";
+  };
+  amqp-client = {
+    url = "https://github.com/cloudamqp/amqp-client.cr.git";
+    rev = "v1.0.11";
+    sha256 = "0d08k9jjd9jw40slj71wi9p6773d1djva9zjb40pskcgg2wfirx3";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/actionlint/default.nix b/nixpkgs/pkgs/development/tools/analysis/actionlint/default.nix
new file mode 100644
index 000000000000..b953aea0bb2d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/actionlint/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+, makeWrapper
+, python3Packages
+, ronn
+, shellcheck
+}:
+
+buildGoModule rec {
+  pname = "actionlint";
+  version = "1.6.26";
+
+  subPackages = [ "cmd/actionlint" ];
+
+  src = fetchFromGitHub {
+    owner = "rhysd";
+    repo = "actionlint";
+    rev = "v${version}";
+    hash = "sha256-BCja8twbPwYI41JuQs2LHMCXlTbY5FAjHhZvn5mIlkg=";
+  };
+
+  vendorHash = "sha256-sBwI2L9tNg8Q/vIhhp0eIxetklytvJj+O1mWjrHkH24=";
+
+  nativeBuildInputs = [ makeWrapper ronn installShellFiles ];
+
+  postInstall = ''
+    ronn --roff man/actionlint.1.ronn
+    installManPage man/actionlint.1
+    wrapProgram "$out/bin/actionlint" \
+      --prefix PATH : ${lib.makeBinPath [ python3Packages.pyflakes shellcheck ]}
+  '';
+
+  ldflags = [ "-s" "-w" "-X github.com/rhysd/actionlint.version=${version}" ];
+
+  meta = with lib; {
+    homepage = "https://rhysd.github.io/actionlint/";
+    description = "Static checker for GitHub Actions workflow files";
+    changelog = "https://github.com/rhysd/actionlint/raw/v${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = [ maintainers.marsam ];
+    mainProgram = "actionlint";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/banana-vera/default.nix b/nixpkgs/pkgs/development/tools/analysis/banana-vera/default.nix
new file mode 100644
index 000000000000..03e26e5eaede
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/banana-vera/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, python310
+, tcl
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "banana-vera";
+  version = "1.3.0-fedora38";
+
+  src = fetchFromGitHub {
+    owner = "Epitech";
+    repo = "banana-vera";
+    rev = "refs/tags/v${finalAttrs.version}";
+    sha256 = "sha256-sSN3trSySJe3KVyrb/hc5HUGRS4M3c4UX9SLlzBM43c";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [
+    python310
+    python310.pkgs.boost
+    tcl
+  ];
+
+  cmakeFlags = [
+    "-DVERA_LUA=OFF"
+    "-DVERA_USE_SYSTEM_BOOST=ON"
+    "-DPANDOC=OFF"
+  ];
+
+  meta = {
+    mainProgram = "vera++";
+    description = "A fork of vera using python3.10";
+    homepage = "https://github.com/Epitech/banana-vera";
+    license = lib.licenses.boost;
+    maintainers = with lib.maintainers; [ sigmanificient ];
+    platforms = lib.platforms.linux ++ lib.platforms.darwin;
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/analysis/bingrep/default.nix b/nixpkgs/pkgs/development/tools/analysis/bingrep/default.nix
new file mode 100644
index 000000000000..f8cbc806250d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/bingrep/default.nix
@@ -0,0 +1,22 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "bingrep";
+  version = "0.11.0";
+
+  src = fetchFromGitHub {
+    owner = "m4b";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-bHu3/f25U1QtRZv1z5OQSDMayOpLU6tbNaV00K55ZY8=";
+  };
+
+  cargoHash = "sha256-n49VmAJcD98LdkrUCW6ouihSXmSCsdBDvCe9l96G0ec=";
+
+  meta = with lib; {
+    description = "Greps through binaries from various OSs and architectures, and colors them";
+    homepage = "https://github.com/m4b/bingrep";
+    license = licenses.mit;
+    maintainers = with maintainers; [ minijackson ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/binlore/default.nix b/nixpkgs/pkgs/development/tools/analysis/binlore/default.nix
new file mode 100644
index 000000000000..54ea108b7d46
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/binlore/default.nix
@@ -0,0 +1,113 @@
+{ lib
+, fetchFromGitHub
+, runCommand
+, yallback
+, yara
+}:
+
+/* TODO/CAUTION:
+
+I don't want to discourage use, but I'm not sure how stable
+the API is. Have fun, but be prepared to track changes! :)
+
+For _now_, binlore is basically a thin wrapper around
+`<invoke yara> | <postprocess with yallback>` with support
+for running it on a derivation, saving the result in the
+store, and aggregating results from a set of packages.
+
+In the longer term, I suspect there are more uses for this
+general pattern (i.e., run some analysis tool that produces
+a deterministic output and cache the result per package...).
+
+I'm not sure how that'll look and if it'll be the case that
+binlore automatically collects all of them, or if you'll be
+configuring which "kind(s)" of lore it generates. Nailing
+that down will almost certainly mean reworking the API.
+
+*/
+
+let
+  src = fetchFromGitHub {
+    owner = "abathur";
+    repo = "binlore";
+    rev = "v0.2.0";
+    hash = "sha256-bBJky7Km+mieHTqoMz3mda3KaKxr9ipYpfQqn/4w8J0=";
+  };
+  /*
+  binlore has one one more yallbacks responsible for
+  routing the appropriate lore to a named file in the
+  appropriate format. At some point I might try to do
+  something fancy with this, but for now the answer to
+  *all* questions about the lore are: the bare minimum
+  to get resholve over the next feature hump in time to
+  hopefully slip this feature in before the branch-off.
+  */
+  # TODO: feeling really uninspired on the API
+  loreDef = {
+    # YARA rule file
+    rules = (src + "/execers.yar");
+    # output filenames; "types" of lore
+    types = [ "execers" "wrappers" ];
+    # shell rule callbacks; see github.com/abathur/yallback
+    yallback = (src + "/execers.yall");
+    # TODO:
+    # - echo for debug, can be removed at some point
+    # - I really just wanted to put the bit after the pipe
+    #   in here, but I'm erring on the side of flexibility
+    #   since this form will make it easier to pilot other
+    #   uses of binlore.
+    callback = lore: drv: overrides: ''
+      if [[ -d "${drv}/bin" ]] || [[ -d "${drv}/lib" ]] || [[ -d "${drv}/libexec" ]]; then
+        echo generating binlore for $drv by running:
+        echo "${yara}/bin/yara --scan-list --recursive ${lore.rules} <(printf '%s\n' ${drv}/{bin,lib,libexec}) | ${yallback}/bin/yallback ${lore.yallback}"
+      else
+        echo "failed to generate binlore for $drv (none of ${drv}/{bin,lib,libexec} exist)"
+      fi
+    '' +
+    /*
+    Override lore for some packages. Unsure, but for now:
+    1. start with the ~name (pname-version)
+    2. remove characters from the end until we find a match
+       in overrides/
+    3. execute the override script with the list of expected
+       lore types
+    */
+    ''
+      i=''${#identifier}
+      filter=
+      while [[ $i > 0 ]] && [[ -z "$filter" ]]; do
+        if [[ -f "${overrides}/''${identifier:0:$i}" ]]; then
+          filter="${overrides}/''${identifier:0:$i}"
+          echo using "${overrides}/''${identifier:0:$i}" to generate overriden binlore for $drv
+          break
+        fi
+        ((i--)) || true # don't break build
+      done # || true # don't break build
+      if [[ -d "${drv}/bin" ]] || [[ -d "${drv}/lib" ]] || [[ -d "${drv}/libexec" ]]; then
+        ${yara}/bin/yara --scan-list --recursive ${lore.rules} <(printf '%s\n' ${drv}/{bin,lib,libexec}) | ${yallback}/bin/yallback ${lore.yallback} "$filter"
+      fi
+    '';
+  };
+  overrides = (src + "/overrides");
+
+in rec {
+  collect = { lore ? loreDef, drvs, strip ? [ ] }: (runCommand "more-binlore" { } ''
+    mkdir $out
+    for lorefile in ${toString lore.types}; do
+      cat ${lib.concatMapStrings (x: x + "/$lorefile ") (map (make lore) (map lib.getBin (builtins.filter lib.isDerivation drvs)))} > $out/$lorefile
+      substituteInPlace $out/$lorefile ${lib.concatMapStrings (x: "--replace '${x}/' '' ") strip}
+    done
+  '');
+  # TODO: echo for debug, can be removed at some point
+  make = lore: drv: runCommand "${drv.name}-binlore" {
+      identifier = drv.name;
+      drv = drv;
+    } (''
+    mkdir $out
+    touch $out/{${builtins.concatStringsSep "," lore.types}}
+
+    ${lore.callback lore drv overrides}
+
+    echo binlore for $drv written to $out
+  '');
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/brakeman/Gemfile b/nixpkgs/pkgs/development/tools/analysis/brakeman/Gemfile
new file mode 100644
index 000000000000..1ff5490b0a77
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/brakeman/Gemfile
@@ -0,0 +1,2 @@
+source "https://rubygems.org"
+gem "brakeman"
diff --git a/nixpkgs/pkgs/development/tools/analysis/brakeman/Gemfile.lock b/nixpkgs/pkgs/development/tools/analysis/brakeman/Gemfile.lock
new file mode 100644
index 000000000000..dcc9920bd534
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/brakeman/Gemfile.lock
@@ -0,0 +1,15 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    brakeman (6.1.1)
+      racc
+    racc (1.7.3)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  brakeman
+
+BUNDLED WITH
+   2.5.3
diff --git a/nixpkgs/pkgs/development/tools/analysis/brakeman/default.nix b/nixpkgs/pkgs/development/tools/analysis/brakeman/default.nix
new file mode 100644
index 000000000000..72c4b1fbc3e3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/brakeman/default.nix
@@ -0,0 +1,18 @@
+{ lib, ruby, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp rec {
+  pname = "brakeman";
+  exes = [ "brakeman" ];
+  gemdir = ./.;
+
+  passthru.updateScript = bundlerUpdateScript "brakeman";
+
+  meta = with lib; {
+    description = "Static analysis security scanner for Ruby on Rails";
+    homepage = "https://brakemanscanner.org/";
+    changelog = "https://github.com/presidentbeef/brakeman/blob/v${version}/CHANGES.md";
+    license = [ licenses.unfreeRedistributable ];
+    platforms = ruby.meta.platforms;
+    maintainers = [ maintainers.marsam ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/brakeman/gemset.nix b/nixpkgs/pkgs/development/tools/analysis/brakeman/gemset.nix
new file mode 100644
index 000000000000..fdee80a9ff75
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/brakeman/gemset.nix
@@ -0,0 +1,23 @@
+{
+  brakeman = {
+    dependencies = ["racc"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ahkss5xpdw7vwykyd5kba74cs4r987fcn7ad5qvzhzhqdariqvy";
+      type = "gem";
+    };
+    version = "6.1.1";
+  };
+  racc = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "01b9662zd2x9bp4rdjfid07h09zxj7kvn7f5fghbqhzc625ap1dp";
+      type = "gem";
+    };
+    version = "1.7.3";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/cargo-tarpaulin/default.nix b/nixpkgs/pkgs/development/tools/analysis/cargo-tarpaulin/default.nix
new file mode 100644
index 000000000000..75f6ee44bf99
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/cargo-tarpaulin/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, openssl
+, stdenv
+, curl
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-tarpaulin";
+  version = "0.27.3";
+
+  src = fetchFromGitHub {
+    owner = "xd009642";
+    repo = "tarpaulin";
+    rev = version;
+    hash = "sha256-ejrnqkeMhCBWCjLCOblhZV/fY4Aib4F1uanufHyUmfw=";
+  };
+
+  cargoHash = "sha256-YO91vSyMwRTrQxRAgWJemL+dlmnEN7VSGrwnE6z7ocI=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+  buildInputs = [ openssl ]
+    ++ lib.optionals stdenv.isDarwin [ curl Security ];
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A code coverage tool for Rust projects";
+    homepage = "https://github.com/xd009642/tarpaulin";
+    changelog = "https://github.com/xd009642/tarpaulin/blob/${src.rev}/CHANGELOG.md";
+    license = with licenses; [ mit /* or */ asl20 ];
+    maintainers = with maintainers; [ figsoda hugoreeves ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/cccc/cccc.patch b/nixpkgs/pkgs/development/tools/analysis/cccc/cccc.patch
new file mode 100644
index 000000000000..9454e3b18ad1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/cccc/cccc.patch
@@ -0,0 +1,24 @@
+diff --git a/cccc/cccc_tbl.cc b/cccc/cccc_tbl.cc
+index df98e2b..59f2572 100644
+--- a/cccc/cccc_tbl.cc
++++ b/cccc/cccc_tbl.cc
+@@ -96,7 +96,7 @@ bool CCCC_Table<T>::remove(T* old_item_ptr)
+   typename map_t::iterator value_iterator=map_t::find(old_item_ptr->key());
+   if(value_iterator!=map_t::end())
+     {
+-      erase(value_iterator);
++      map_t::erase(value_iterator);
+       retval=true;
+     }
+   return retval;
+diff --git a/makefile b/makefile
+index 23ad004..2cca469 100644
+--- a/makefile
++++ b/makefile
+@@ -20,5 +20,5 @@ test :
+ 	cd test ; make -f posix.mak
+ 
+ install : 
+-	cd install ; su root -c "make -f install.mak" 
++	cd install ; make -f install.mak
+ 
diff --git a/nixpkgs/pkgs/development/tools/analysis/cccc/default.nix b/nixpkgs/pkgs/development/tools/analysis/cccc/default.nix
new file mode 100644
index 000000000000..49c8fb140e59
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/cccc/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "cccc";
+  version = "3.1.4";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/cccc/${version}/cccc-${version}.tar.gz";
+    sha256 = "1gsdzzisrk95kajs3gfxks3bjvfd9g680fin6a9pjrism2lyrcr7";
+  };
+
+  hardeningDisable = [ "format" ];
+
+  patches = [ ./cccc.patch ];
+
+  preConfigure = ''
+    substituteInPlace install/install.mak --replace /usr/local/bin $out/bin
+    substituteInPlace install/install.mak --replace MKDIR=mkdir "MKDIR=mkdir -p"
+  '';
+  buildFlags = [ "CCC=c++" "LD=c++" ];
+
+  meta = {
+    description = "C and C++ Code Counter";
+    longDescription = ''
+      CCCC is a tool which analyzes C++ and Java files and generates a report
+      on various metrics of the code. Metrics supported include lines of code, McCabe's
+      complexity and metrics proposed by Chidamber&Kemerer and Henry&Kafura.
+    '';
+    homepage = "https://cccc.sourceforge.net/";
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.unix;
+    maintainers = [ lib.maintainers.linquize ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/checkov/default.nix b/nixpkgs/pkgs/development/tools/analysis/checkov/default.nix
new file mode 100644
index 000000000000..a60ef454284d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/checkov/default.nix
@@ -0,0 +1,164 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "checkov";
+  version = "3.2.8";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "bridgecrewio";
+    repo = "checkov";
+    rev = "refs/tags/${version}";
+    hash = "sha256-Hd1YOzIH6v8N/oP2cJRUv6OkgOv9aSe7nkvzpsCN3rc=";
+  };
+
+  patches = [
+    ./flake8-compat-5.x.patch
+  ];
+
+  pythonRelaxDeps = [
+    "bc-detect-secrets"
+    "bc-python-hcl2"
+    "dpath"
+    "igraph"
+    "license-expression"
+    "networkx"
+    "openai"
+    "pycep-parser"
+    "termcolor"
+  ];
+
+  pythonRemoveDeps = [
+    # pythonRelaxDeps doesn't work with that one
+    "pycep-parser"
+  ];
+
+  nativeBuildInputs = with python3.pkgs; [
+    pythonRelaxDepsHook
+    setuptools-scm
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    aiodns
+    aiohttp
+    aiomultiprocess
+    argcomplete
+    bc-detect-secrets
+    bc-jsonpath-ng
+    bc-python-hcl2
+    boto3
+    cachetools
+    charset-normalizer
+    cloudsplaining
+    colorama
+    configargparse
+    cyclonedx-python-lib
+    docker
+    dockerfile-parse
+    dpath
+    flake8
+    gitpython
+    igraph
+    jmespath
+    jsonschema
+    junit-xml
+    license-expression
+    networkx
+    openai
+    packaging
+    policyuniverse
+    prettytable
+    pycep-parser
+    pyyaml
+    pydantic
+    rustworkx
+    semantic-version
+    spdx-tools
+    tabulate
+    termcolor
+    tqdm
+    typing-extensions
+    update-checker
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    aioresponses
+    mock
+    pytest-asyncio
+    pytest-mock
+    pytest-xdist
+    pytestCheckHook
+    responses
+  ];
+
+  preCheck = ''
+    export HOME=$(mktemp -d);
+  '';
+
+  disabledTests = [
+    # No API key available
+    "api_key"
+    # Requires network access
+    "TestSarifReport"
+    "test_skip_mapping_default"
+    # Flake8 test
+    "test_file_with_class"
+    "test_dataclass_skip"
+    "test_typing_class_skip"
+    # Tests are comparing console output
+    "cli"
+    "console"
+    # Assertion error
+    "test_runner"
+    # AssertionError: assert ['<?xml versi...
+    "test_get_cyclonedx_report"
+  ];
+
+  disabledTestPaths = [
+    # Tests are pulling from external sources
+    # https://github.com/bridgecrewio/checkov/blob/f03a4204d291cf47e3753a02a9b8c8d805bbd1be/.github/workflows/build.yml
+    "integration_tests/"
+    "tests/ansible/"
+    "tests/arm/"
+    "tests/bicep/"
+    "tests/cloudformation/"
+    "tests/common/"
+    "tests/dockerfile/"
+    "tests/generic_json/"
+    "tests/generic_yaml/"
+    "tests/github_actions/"
+    "tests/github/"
+    "tests/kubernetes/"
+    "tests/sca_package_2"
+    "tests/terraform/"
+    "cdk_integration_tests/"
+    "sast_integration_tests"
+    # Performance tests have no value for us
+    "performance_tests/test_checkov_performance.py"
+    # No Helm
+    "dogfood_tests/test_checkov_dogfood.py"
+  ];
+
+  pythonImportsCheck = [
+    "checkov"
+  ];
+
+  postInstall = ''
+    chmod +x $out/bin/checkov
+  '';
+
+  meta = with lib; {
+    description = "Static code analysis tool for infrastructure-as-code";
+    homepage = "https://github.com/bridgecrewio/checkov";
+    changelog = "https://github.com/bridgecrewio/checkov/releases/tag/${version}";
+    longDescription = ''
+      Prevent cloud misconfigurations during build-time for Terraform, Cloudformation,
+      Kubernetes, Serverless framework and other infrastructure-as-code-languages.
+    '';
+    license = licenses.asl20;
+    maintainers = with maintainers; [ anhdle14 fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/checkov/flake8-compat-5.x.patch b/nixpkgs/pkgs/development/tools/analysis/checkov/flake8-compat-5.x.patch
new file mode 100644
index 000000000000..9bb019292536
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/checkov/flake8-compat-5.x.patch
@@ -0,0 +1,25 @@
+diff --git a/flake8_plugins/flake8_class_attributes_plugin/tests/conftest.py b/flake8_plugins/flake8_class_attributes_plugin/tests/conftest.py
+index 1ad762aed..c91078dcf 100644
+--- a/flake8_plugins/flake8_class_attributes_plugin/tests/conftest.py
++++ b/flake8_plugins/flake8_class_attributes_plugin/tests/conftest.py
+@@ -1,6 +1,7 @@
+ import ast
+ import os
+ 
++import flake8
+ from flake8.options.manager import OptionManager
+ 
+ from flake8_plugins.flake8_class_attributes_plugin.flake8_class_attributes.checker import ClassAttributesChecker
+@@ -17,7 +18,11 @@ def run_validator_for_test_file(filename, max_annotations_complexity=None,
+         raw_content = file_handler.read()
+     tree = ast.parse(raw_content)
+ 
+-    options = OptionManager('flake8_class_attributes_order', '0.1.3')
++    options = OptionManager(
++        version=flake8.__version__,
++        plugin_versions='flake8_class_attributes_order: 0.1.3',
++        parents=[],
++        )
+     options.use_class_attributes_order_strict_mode = strict_mode
+     options.class_attributes_order = attributes_order
+     ClassAttributesChecker.parse_options(options)
diff --git a/nixpkgs/pkgs/development/tools/analysis/checkstyle/default.nix b/nixpkgs/pkgs/development/tools/analysis/checkstyle/default.nix
new file mode 100644
index 000000000000..84730b829751
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/checkstyle/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenvNoCC, fetchurl, makeBinaryWrapper, jre }:
+
+stdenvNoCC.mkDerivation rec {
+  version = "10.13.0";
+  pname = "checkstyle";
+
+  src = fetchurl {
+    url = "https://github.com/checkstyle/checkstyle/releases/download/checkstyle-${version}/checkstyle-${version}-all.jar";
+    sha256 = "sha256-VhEMyn20ubXbsDMHnNS4/E2Aeeyby3U3OV29/uXEQw4=";
+  };
+
+  nativeBuildInputs = [ makeBinaryWrapper ];
+  buildInputs = [ jre ];
+
+  dontUnpack = true;
+
+  installPhase = ''
+    runHook preInstall
+    install -D $src $out/checkstyle/checkstyle-all.jar
+    makeWrapper ${jre}/bin/java $out/bin/checkstyle \
+      --add-flags "-jar $out/checkstyle/checkstyle-all.jar"
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Checks Java source against a coding standard";
+    longDescription = ''
+      checkstyle is a development tool to help programmers write Java code that
+      adheres to a coding standard. By default it supports the Sun Code
+      Conventions, but is highly configurable.
+    '';
+    homepage = "https://checkstyle.org/";
+    changelog = "https://checkstyle.org/releasenotes.html#Release_${version}";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.lgpl21;
+    maintainers = with maintainers; [ pSub ];
+    platforms = jre.meta.platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/clang-analyzer/0001-Fix-scan-build-to-use-NIX_CFLAGS_COMPILE.patch b/nixpkgs/pkgs/development/tools/analysis/clang-analyzer/0001-Fix-scan-build-to-use-NIX_CFLAGS_COMPILE.patch
new file mode 100644
index 000000000000..87d79a070cd0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/clang-analyzer/0001-Fix-scan-build-to-use-NIX_CFLAGS_COMPILE.patch
@@ -0,0 +1,35 @@
+From 99a7e55a60c8d96e160f9104a3dd31b7914d3488 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?J=C3=B6rg=20Thalheim?= <joerg@thalheim.io>
+Date: Fri, 31 Jul 2020 09:22:03 +0100
+Subject: [PATCH] Fix scan-build to use NIX_CFLAGS_COMPILE
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Jörg Thalheim <joerg@thalheim.io>
+---
+ clang/tools/scan-build/libexec/ccc-analyzer | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/clang/tools/scan-build/libexec/ccc-analyzer
+b/clang/tools/scan-build/libexec/ccc-analyzer
+index ed0d4d3d73f3..2d5113435ca5 100755
+--- a/clang/tools/scan-build/libexec/ccc-analyzer
++++ b/clang/tools/scan-build/libexec/ccc-analyzer
+@@ -249,6 +249,14 @@ sub Analyze {
+       push @Args, "-target", $AnalyzerTarget;
+     }
+ 
++    # Add Nix flags to analysis
++    if (defined $ENV{'NIX_CFLAGS_COMPILE'}) {
++      my @nixArgs = split(/\s+/, $ENV{'NIX_CFLAGS_COMPILE'});
++      foreach my $nixArg (@nixArgs) {
++        push @Args, $nixArg;
++      }
++    }
++
+     my $AnalysisArgs = GetCCArgs($HtmlDir, "--analyze", \@Args);
+     @CmdArgs = @$AnalysisArgs;
+   }
+-- 
+2.33.0
diff --git a/nixpkgs/pkgs/development/tools/analysis/clang-analyzer/default.nix b/nixpkgs/pkgs/development/tools/analysis/clang-analyzer/default.nix
new file mode 100644
index 000000000000..46e04aaf389f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/clang-analyzer/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchurl, clang, llvmPackages, perl, makeWrapper, python3 }:
+
+stdenv.mkDerivation rec {
+  pname = "clang-analyzer";
+  inherit (llvmPackages.clang-unwrapped) src version;
+
+  patches = [ ./0001-Fix-scan-build-to-use-NIX_CFLAGS_COMPILE.patch ];
+  buildInputs = [ clang llvmPackages.clang perl python3 ];
+  nativeBuildInputs = [ makeWrapper ];
+
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p $out/share/scan-view $out/bin
+    cp -R clang/tools/scan-view/share/* $out/share/scan-view
+    cp -R clang/tools/scan-view/bin/* $out/bin/scan-view
+    cp -R clang/tools/scan-build/* $out
+
+    rm $out/bin/*.bat $out/libexec/*.bat $out/CMakeLists.txt
+
+    wrapProgram $out/bin/scan-build \
+      --add-flags "--use-cc=${clang}/bin/clang" \
+      --add-flags "--use-c++=${clang}/bin/clang++" \
+      --add-flags "--use-analyzer='${llvmPackages.clang}/bin/clang'"
+  '';
+
+  meta = {
+    description = "Clang Static Analyzer";
+    longDescription = ''
+      The Clang Static Analyzer is a source code analysis tool that finds bugs
+      in C, C++, and Objective-C programs.
+    '';
+    homepage    = "https://clang-analyzer.llvm.org/";
+    license     = lib.licenses.bsd3;
+    platforms   = lib.platforms.unix;
+    maintainers = [ lib.maintainers.thoughtpolice ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/clazy/default.nix b/nixpkgs/pkgs/development/tools/analysis/clazy/default.nix
new file mode 100644
index 000000000000..10c61bf88881
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/clazy/default.nix
@@ -0,0 +1,56 @@
+{
+    lib
+  , stdenv
+  , fetchFromGitHub
+  , llvmPackages
+  , cmake
+  , makeWrapper
+}:
+
+stdenv.mkDerivation rec {
+  pname = "clazy";
+  version = "1.11";
+
+  src = fetchFromGitHub {
+    owner  = "KDE";
+    repo   = "clazy";
+    rev    = "v${version}";
+    sha256 = "sha256-kcl4dUg84fNdizKUS4kpvIKFfajtTRdz+MYUbKcMFvg=";
+  };
+
+  buildInputs = [
+    llvmPackages.llvm
+    llvmPackages.libclang
+  ];
+
+  nativeBuildInputs = [
+    cmake
+    makeWrapper
+  ];
+
+  postInstall = ''
+    wrapProgram $out/bin/clazy \
+      --suffix PATH               : "${llvmPackages.clang}/bin/"                            \
+      --suffix CPATH              : "$(<${llvmPackages.clang}/nix-support/libc-cflags)"     \
+      --suffix CPATH              : "${llvmPackages.clang}/resource-root/include"           \
+      --suffix CPLUS_INCLUDE_PATH : "$(<${llvmPackages.clang}/nix-support/libcxx-cxxflags)" \
+      --suffix CPLUS_INCLUDE_PATH : "$(<${llvmPackages.clang}/nix-support/libc-cflags)"     \
+      --suffix CPLUS_INCLUDE_PATH : "${llvmPackages.clang}/resource-root/include"
+
+    wrapProgram $out/bin/clazy-standalone \
+      --suffix CPATH              : "$(<${llvmPackages.clang}/nix-support/libc-cflags)"     \
+      --suffix CPATH              : "${llvmPackages.clang}/resource-root/include"           \
+      --suffix CPLUS_INCLUDE_PATH : "$(<${llvmPackages.clang}/nix-support/libcxx-cxxflags)" \
+      --suffix CPLUS_INCLUDE_PATH : "$(<${llvmPackages.clang}/nix-support/libc-cflags)"     \
+      --suffix CPLUS_INCLUDE_PATH : "${llvmPackages.clang}/resource-root/include"
+  '';
+
+  meta = {
+    description = "Qt-oriented static code analyzer based on the Clang framework";
+    homepage = "https://github.com/KDE/clazy";
+    license = lib.licenses.lgpl2Plus;
+    maintainers = [ lib.maintainers.cadkin ];
+    platforms = lib.platforms.linux;
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/coan/default.nix b/nixpkgs/pkgs/development/tools/analysis/coan/default.nix
new file mode 100644
index 000000000000..d88a4a8a92eb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/coan/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchurl, perl }:
+
+stdenv.mkDerivation rec {
+  version = "6.0.1";
+  pname = "coan";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/coan2/v${version}/${pname}-${version}.tar.gz";
+    sha256 = "1d041j0nd1hc0562lbj269dydjm4rbzagdgzdnmwdxr98544yw44";
+  };
+
+  nativeBuildInputs = [ perl ];
+
+  CXXFLAGS = "-std=c++11";
+
+  enableParallelBuilding = true;
+
+  postInstall = ''
+    mv -v $out/share/man/man1/coan.1.{1,gz}
+  '';
+
+  meta = with lib; {
+    description = "The C preprocessor chainsaw";
+    longDescription = ''
+      A software engineering tool for analysing preprocessor-based
+      configurations of C or C++ source code. Its principal use is to simplify
+      a body of source code by eliminating any parts that are redundant with
+      respect to a specified configuration. Dead code removal is an
+      application of this sort.
+    '';
+    homepage = "https://coan2.sourceforge.net/";
+    license = licenses.bsd3;
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/codeql/default.nix b/nixpkgs/pkgs/development/tools/analysis/codeql/default.nix
new file mode 100644
index 000000000000..10634622fe5e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/codeql/default.nix
@@ -0,0 +1,55 @@
+{ lib, stdenv, fetchzip, zlib, xorg, freetype, jdk17, curl }:
+
+stdenv.mkDerivation rec {
+  pname = "codeql";
+  version = "2.16.1";
+
+  dontConfigure = true;
+  dontBuild = true;
+  dontStrip = true;
+
+  src = fetchzip {
+    url = "https://github.com/github/codeql-cli-binaries/releases/download/v${version}/codeql.zip";
+    hash = "sha256-y9tSG/SxCeyFdWF6gKuPSBgfG5H2uB/XRmQkfMBdKQU=";
+  };
+
+  nativeBuildInputs = [
+    zlib
+    xorg.libX11
+    xorg.libXext
+    xorg.libXi
+    xorg.libXtst
+    xorg.libXrender
+    freetype
+    jdk17
+    stdenv.cc.cc.lib
+    curl
+  ];
+
+  installPhase = ''
+    # codeql directory should not be top-level, otherwise,
+    # it'll include /nix/store to resolve extractors.
+    mkdir -p $out/{codeql,bin}
+    cp -R * $out/codeql/
+
+    ln -sf $out/codeql/tools/linux64/lib64trace.so $out/codeql/tools/linux64/libtrace.so
+
+    # many of the codeql extractors use CODEQL_DIST + CODEQL_PLATFORM to
+    # resolve java home, so to be able to create databases, we want to make
+    # sure that they point somewhere sane/usable since we can not autopatch
+    # the codeql packaged java dist, but we DO want to patch the extractors
+    # as well as the builders which are ELF binaries for the most part
+    rm -rf $out/codeql/tools/linux64/java
+    ln -s ${jdk17} $out/codeql/tools/linux64/java
+
+    ln -s $out/codeql/codeql $out/bin/
+  '';
+
+  meta = with lib; {
+    description = "Semantic code analysis engine";
+    homepage = "https://codeql.github.com";
+    maintainers = [ maintainers.dump_stack ];
+    platforms = lib.platforms.linux ++ lib.platforms.darwin;
+    license = licenses.unfree;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/cov-build/default.nix b/nixpkgs/pkgs/development/tools/analysis/cov-build/default.nix
new file mode 100644
index 000000000000..61c8dda2e6da
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/cov-build/default.nix
@@ -0,0 +1,69 @@
+{ lib
+, stdenv
+, fetchurl
+
+, autoPatchelfHook
+
+, alsa-lib
+, libxcrypt-legacy
+, lttng-ust_2_12
+, xorg
+, zlib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "cov-build";
+  version = "2022.12.2";
+
+  src =
+    if stdenv.hostPlatform.system == "i686-linux"
+    then fetchurl {
+      url = "https://archive.org/download/cov-analysis-linux-${version}.tar/cov-analysis-linux-${version}.tar.gz";
+      hash = "sha256-Jr9bMUo9GRp+dgoAPqKxaTqWYWh4djGArdG9ukUK+ZY=";
+    }
+    else if stdenv.hostPlatform.system == "x86_64-linux"
+    then fetchurl {
+      url = "https://archive.org/download/cov-analysis-linux64-${version}.tar/cov-analysis-linux64-${version}.tar.gz";
+      hash = "sha256-CyNKILJXlDMOCXbZZF4r/knz0orRx32oSj+Kpq/nxXQ=";
+    }
+    else throw "Unsupported platform '${stdenv.hostPlatform.system}'";
+
+  nativeBuildInputs = [ autoPatchelfHook ];
+
+  buildInputs = [
+    alsa-lib
+    libxcrypt-legacy
+    lttng-ust_2_12
+    xorg.libXext
+    xorg.libXrender
+    xorg.libXtst
+    zlib
+  ];
+
+  dontConfigure = true;
+
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p $out/bin $out/libexec
+    mv * $out/libexec
+    for x in cov-build cov-capture cov-configure cov-emit cov-emit-java \
+      cov-export-cva cov-extract-scm cov-help cov-import-scm cov-link \
+      cov-internal-clang cov-internal-emit-clang cov-internal-nm \
+      cov-internal-emit-java-bytecode cov-internal-reduce cov-translate \
+      cov-preprocess cov-internal-pid-to-db cov-manage-emit \
+      cov-manage-history; do
+        ln -s $out/libexec/bin/$x $out/bin/$x;
+    done
+  '';
+
+  dontStrip = true;
+
+  meta = {
+    description = "Coverity Scan build tools";
+    homepage    = "https://scan.coverity.com";
+    license     = lib.licenses.unfreeRedistributable;
+    platforms   = lib.platforms.linux;
+    maintainers = [ lib.maintainers.thoughtpolice ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/coz/default.nix b/nixpkgs/pkgs/development/tools/analysis/coz/default.nix
new file mode 100644
index 000000000000..17968a466bf4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/coz/default.nix
@@ -0,0 +1,56 @@
+{ lib, stdenv
+, fetchFromGitHub
+, libelfin
+, ncurses
+, python3
+, python3Packages
+, makeWrapper
+}:
+stdenv.mkDerivation rec {
+  pname = "coz";
+  version = "0.2.1";
+
+  src = fetchFromGitHub {
+    owner = "plasma-umass";
+    repo = "coz";
+    rev = version;
+    sha256 = "0val36yw987b1558iiyk3nqg0yy5k9y5wh49v91zj3cs58mmfyhc";
+  };
+
+  postPatch = ''
+    sed -i -e '/pid_t gettid/,+2d' libcoz/ccutil/thread.h
+  '';
+
+  postConfigure = ''
+    # This is currently hard-coded. Will be fixed in the next release.
+    sed -e "s|/usr/lib/|$out/lib/|" -i ./coz
+  '';
+
+  nativeBuildInputs = [
+    ncurses
+    makeWrapper
+    python3Packages.wrapPython
+  ];
+
+  buildInputs = [
+    libelfin
+    (python3.withPackages (p: [ p.docutils ]))
+  ];
+
+  installPhase = ''
+    mkdir -p $out/share/man/man1
+    make install prefix=$out
+
+    # fix executable includes
+    chmod -x $out/include/coz.h
+
+    wrapPythonPrograms
+  '';
+
+  meta = {
+    homepage = "https://github.com/plasma-umass/coz";
+    description = "Profiler based on casual profiling";
+    license = lib.licenses.bsd2;
+    maintainers = with lib.maintainers; [ zimbatm ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/cppcheck/default.nix b/nixpkgs/pkgs/development/tools/analysis/cppcheck/default.nix
new file mode 100644
index 000000000000..0582c1d6e89a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/cppcheck/default.nix
@@ -0,0 +1,85 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+
+, docbook_xml_dtd_45
+, docbook_xsl
+, installShellFiles
+, libxslt
+, pcre
+, pkg-config
+, python3
+, which
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "cppcheck";
+  version = "2.13.3";
+
+  outputs = [ "out" "man" ];
+
+  src = fetchFromGitHub {
+    owner = "danmar";
+    repo = "cppcheck";
+    rev = finalAttrs.version;
+    hash = "sha256-JTasjK9EkdGCTGL5Qx9uU3UBFlQzVdpTJ/v1IfzXCLE=";
+  };
+
+  nativeBuildInputs = [
+    docbook_xml_dtd_45
+    docbook_xsl
+    installShellFiles
+    libxslt
+    pkg-config
+    python3
+    which
+  ];
+
+  buildInputs = [
+    pcre
+    (python3.withPackages (ps: [ ps.pygments ]))
+  ];
+
+  makeFlags = [ "PREFIX=$(out)" "MATCHCOMPILER=yes" "FILESDIR=$(out)/share/cppcheck" "HAVE_RULES=yes" ];
+
+  enableParallelBuilding = true;
+  strictDeps = true;
+
+  # test/testcondition.cpp:4949(TestCondition::alwaysTrueContainer): Assertion failed.
+  doCheck = !(stdenv.isLinux && stdenv.isAarch64);
+  doInstallCheck = true;
+
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace 'PCRE_CONFIG = $(shell which pcre-config)' 'PCRE_CONFIG = $(PKG_CONFIG) libpcre'
+  '';
+
+  postBuild = ''
+    make DB2MAN=${docbook_xsl}/xml/xsl/docbook/manpages/docbook.xsl man
+  '';
+
+  postInstall = ''
+    installManPage cppcheck.1
+  '';
+
+  installCheckPhase = ''
+    runHook preInstallCheck
+
+    echo 'int main() {}' > ./installcheck.cpp
+    $out/bin/cppcheck ./installcheck.cpp > /dev/null
+
+    runHook postInstallCheck
+  '';
+
+  meta = {
+    description = "A static analysis tool for C/C++ code";
+    homepage = "http://cppcheck.sourceforge.net";
+    license = lib.licenses.gpl3Plus;
+    longDescription = ''
+      Check C/C++ code for memory leaks, mismatching allocation-deallocation,
+      buffer overruns and more.
+    '';
+    maintainers = with lib.maintainers; [ joachifm paveloom ];
+    platforms = lib.platforms.unix;
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/analysis/cpplint/0001-Remove-pytest-runner-version-pin.patch b/nixpkgs/pkgs/development/tools/analysis/cpplint/0001-Remove-pytest-runner-version-pin.patch
new file mode 100644
index 000000000000..3b602421d100
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/cpplint/0001-Remove-pytest-runner-version-pin.patch
@@ -0,0 +1,16 @@
+diff --git a/setup.py b/setup.py
+index aef5c4e..030ea14 100755
+--- a/setup.py
++++ b/setup.py
+@@ -73,7 +73,7 @@ setup(name='cpplint',
+       long_description=open('README.rst').read(),
+       license='BSD-3-Clause',
+       setup_requires=[
+-          "pytest-runner==5.2"
++          "pytest-runner"
+       ],
+       tests_require=test_required,
+       # extras_require allow pip install .[dev]
+-- 
+2.31.1
+
diff --git a/nixpkgs/pkgs/development/tools/analysis/cpplint/default.nix b/nixpkgs/pkgs/development/tools/analysis/cpplint/default.nix
new file mode 100644
index 000000000000..87344d747bf6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/cpplint/default.nix
@@ -0,0 +1,48 @@
+{ lib, python3Packages, fetchFromGitHub, fetchpatch }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "cpplint";
+  version = "1.5.5";
+  format = "setuptools";
+
+  # Fetch from github instead of pypi, since the test cases are not in the pypi archive
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = version;
+    hash = "sha256-JXz2Ufo7JSceZVqYwCRkuAsOR08znZlIUk8GCLAyiI4=";
+  };
+
+  patches = [
+    ./0001-Remove-pytest-runner-version-pin.patch
+
+    # The patch below stops using the sre_compile module, which was deprecated
+    # in Python 3.11 and replaces it with re.compile. Upstream is unsure if it
+    # should use re.compile or re._compiler.compile, so we should monitor the
+    # thread for updates.
+    #
+    #   https://github.com/cpplint/cpplint/pull/214
+    #
+    (fetchpatch {
+      name = "python-3.11-compatibility.patch";
+      url = "https://github.com/cpplint/cpplint/commit/e84e84f53915ae2a9214e756cf89c573a73bbcd3.patch";
+      hash = "sha256-u57AFWaVmGFSsvSGq1x9gZmTsuZPqXvTC7mTfyb2164=";
+    })
+  ];
+
+  postPatch = ''
+    patchShebangs cpplint_unittest.py
+  '';
+
+  nativeCheckInputs = with python3Packages; [ pytest pytest-runner ];
+  checkPhase = ''
+    ./cpplint_unittest.py
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/cpplint/cpplint";
+    description = "Static code checker for C++";
+    maintainers = [ maintainers.bhipple ];
+    license = [ licenses.bsd3 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/cvehound/default.nix b/nixpkgs/pkgs/development/tools/analysis/cvehound/default.nix
new file mode 100644
index 000000000000..d6b08fb06153
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/cvehound/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, fetchFromGitHub
+, coccinelle
+, gnugrep
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "cvehound";
+  version = "1.1.0";
+
+  src = fetchFromGitHub {
+    owner = "evdenis";
+    repo = "cvehound";
+    rev = "refs/tags/${version}";
+    hash = "sha256-4+0Virpsq4mwOIpostS87VYTX8hsumXEL1w8FiOrNtA=";
+  };
+
+  makeWrapperArgs = [
+    "--prefix PATH : ${lib.makeBinPath [ coccinelle gnugrep ]}"
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    lxml
+    setuptools
+    sympy
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    gitpython
+    psutil
+    pytestCheckHook
+  ];
+
+  # Tries to clone the kernel sources
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Tool to check linux kernel source dump for known CVEs";
+    homepage = "https://github.com/evdenis/cvehound";
+    changelog = "https://github.com/evdenis/cvehound/blob/${src.rev}/ChangeLog";
+    # See https://github.com/evdenis/cvehound/issues/22
+    license = with licenses; [ gpl2Only gpl3Plus ];
+    maintainers = with maintainers; [ ambroisie ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/dotenv-linter/default.nix b/nixpkgs/pkgs/development/tools/analysis/dotenv-linter/default.nix
new file mode 100644
index 000000000000..fec39c962a66
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/dotenv-linter/default.nix
@@ -0,0 +1,29 @@
+{ stdenv
+, lib
+, rustPlatform
+, fetchFromGitHub
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "dotenv-linter";
+  version = "3.3.0";
+
+  src = fetchFromGitHub {
+    owner = "dotenv-linter";
+    repo = "dotenv-linter";
+    rev = "v${version}";
+    sha256 = "sha256-HCP1OUWm/17e73TbinmDxYUi18/KXxppstyUSixjlSo=";
+  };
+
+  cargoSha256 = "sha256-4r4NTq2rLnpmm/nwxJ9RoN2+JrUI6XKGfYFI78NY710=";
+
+  buildInputs = lib.optional stdenv.isDarwin Security;
+
+  meta = with lib; {
+    description = "Lightning-fast linter for .env files. Written in Rust";
+    homepage = "https://dotenv-linter.github.io";
+    license = licenses.mit;
+    maintainers = with maintainers; [ humancalico ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/egypt/default.nix b/nixpkgs/pkgs/development/tools/analysis/egypt/default.nix
new file mode 100644
index 000000000000..026650220991
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/egypt/default.nix
@@ -0,0 +1,32 @@
+{ lib, fetchurl, perlPackages }:
+
+perlPackages.buildPerlPackage rec {
+  pname = "egypt";
+  version = "1.10";
+
+  src = fetchurl {
+    sha256 = "0r0wj6v8z9fzlh9pb5617kyjdf92ppmlbzajaarrq729bbb6ln5m";
+    url = "https://www.gson.org/egypt/download/${pname}-${version}.tar.gz";
+  };
+
+  outputs = [ "out" ];
+
+  enableParallelBuilding = true;
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "Tool for making call graphs of C programmes";
+    longDescription = ''
+      Egypt is a simple tool for creating call graphs of C programs. It neither
+      analyzes source code nor lays out graphs. Instead, it leaves the source
+      code analysis to GCC and the graph layout to Graphviz, both of which are
+      better at their respective jobs than egypt itself could ever hope to be.
+      Egypt is simply a very small Perl script that glues these existing tools
+      together.
+    '';
+    homepage = "http://www.gson.org/egypt/";
+    license = with licenses; [ artistic1 gpl1Plus ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/emma/default.nix b/nixpkgs/pkgs/development/tools/analysis/emma/default.nix
new file mode 100644
index 000000000000..a1804eafd8cf
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/emma/default.nix
@@ -0,0 +1,26 @@
+{lib, stdenv, fetchurl, unzip}:
+
+stdenv.mkDerivation rec {
+  pname = "emma";
+  version = "2.0.5312";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/${pname}/${pname}-${version}.zip";
+    sha256 = "0xxy39s2lvgs56vicjzpcz936l1vjaplliwa0dm7v3iyvw6jn7vj";
+  };
+
+  nativeBuildInputs = [ unzip ];
+
+  installPhase = ''
+    mkdir -p $out/lib/jars
+    cp lib/*.jar $out/lib/jars/
+  '';
+
+  meta = {
+    homepage = "https://emma.sourceforge.net/";
+    description = "A code coverage tool for Java";
+    sourceProvenance = with lib.sourceTypes; [ binaryBytecode ];
+    platforms = lib.platforms.unix;
+    license = lib.licenses.cpl10;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/eresi/default.nix b/nixpkgs/pkgs/development/tools/analysis/eresi/default.nix
new file mode 100644
index 000000000000..3d5571ddea42
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/eresi/default.nix
@@ -0,0 +1,76 @@
+{ stdenv, lib, fetchFromGitHub, which, openssl, readline, fetchpatch }:
+
+stdenv.mkDerivation rec {
+  pname = "eresi";
+  version = "0.83-a3-phoenix";
+
+  src = fetchFromGitHub {
+    owner = "thorkill";
+    repo = "eresi";
+    rev = version;
+    sha256 = "0a5a7mh2zw9lcdrl8n1mqccrc0xcgj7743l7l4kslkh722fxv625";
+  };
+
+  patches = [
+    (fetchpatch {
+      url = "https://github.com/thorkill/eresi/commit/a79406344cc21d594d27fa5ec5922abe9f7475e7.patch";
+      sha256 = "1mjjc6hj7r06iarvai7prcdvjk9g0k5vwrmkwcm7b8ivd5xzxp2z";
+    })
+
+    # Pull patch pending upstream inclusion for -fno-common toolchains:
+    #   https://github.com/thorkill/eresi/pull/166
+    (fetchpatch {
+      url = "https://github.com/thorkill/eresi/commit/bc5b9a75c326f277e5f89e01a3b8f7f0519a99f6.patch";
+      sha256 = "0lqwrnkkhhd3vi1r8ngvziyqkk09h98h93rrs3ndqi048a898ys1";
+    })
+  ];
+
+  postPatch = ''
+    # Two occurences of fprintf() with only two arguments, which should really
+    # be fputs().
+    #
+    # Upstream pull request: https://github.com/thorkill/eresi/pull/162
+    #
+    sed -i -e 's/fprintf(\(stderr\), *\([a-z0-9]\+\))/fputs(\2, \1)/g' \
+      libe2dbg/common/common.c libe2dbg/user/threads.c
+
+    # We need to patch out a few ifs here, because it tries to create a series
+    # of configuration files in ~/.something. However, our builds are sandboxed
+    # and also don't contain a valid home, so let's NOP it out :-)
+    #
+    # The second fix we need to make is that we need to pretend being Gentoo
+    # because otherwise the build process tries to link against libtermcap,
+    # which I think is solely for historic reasons (nowadays Terminfo should
+    # have largely superseded it).
+    sed -i -e '/^if \[ ! -e/c if false; then' \
+           -e 's/^GENTOO=.*/GENTOO=1/' configure
+  '';
+
+  configureFlags = [
+    (if stdenv.is64bit then "--enable-32-64" else "--enable-32")
+    "--enable-readline"
+  ];
+
+  # The configure script is not generated by autoconf but is hand-rolled, so it
+  # has --enable-static but no --disabled-static and also doesn't support the
+  # equals sign in --prefix.
+  prefixKey = "--prefix ";
+  dontDisableStatic = true;
+
+  nativeBuildInputs = [ which ];
+  buildInputs = [ openssl readline ];
+  enableParallelBuilding = true;
+  # ln: failed to create symbolic link '...-eresi-0.83-a3-phoenix//bin/elfsh': No such file or directory
+  # make: *** [Makefile:108: install64] Error 1
+  enableParallelInstalling = false;
+
+  installTargets = lib.singleton "install"
+                ++ lib.optional stdenv.is64bit "install64";
+
+  meta = {
+    description = "The ERESI Reverse Engineering Software Interface";
+    license = lib.licenses.gpl2Only;
+    homepage = "https://github.com/thorkill/eresi"; # Formerly http://www.eresi-project.org/
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/evmdis/default.nix b/nixpkgs/pkgs/development/tools/analysis/evmdis/default.nix
new file mode 100644
index 000000000000..eb23a0aae51f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/evmdis/default.nix
@@ -0,0 +1,29 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule {
+  pname = "evmdis";
+  version = "unstable-2022-05-09";
+
+  src = fetchFromGitHub {
+    owner = "Arachnid";
+    repo = "evmdis";
+    rev = "7fad4fbee443262839ce9f88111b417801163086";
+    hash = "sha256-jfbjXoGT8RtwLlqX13kcKdiFlhrVwA7Ems6abGJVRbA=";
+  };
+
+  vendorHash = null;
+
+  preBuild = ''
+    # Add go modules support
+    cp ${./go.mod} go.mod
+  '';
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/Arachnid/evmdis";
+    description = "Ethereum EVM disassembler";
+    license = [ licenses.asl20 ];
+    maintainers = with maintainers; [ asymmetric ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/evmdis/go.mod b/nixpkgs/pkgs/development/tools/analysis/evmdis/go.mod
new file mode 100644
index 000000000000..d71cfe70845d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/evmdis/go.mod
@@ -0,0 +1,3 @@
+module github.com/Arachnid/evmdis
+
+go 1.18
diff --git a/nixpkgs/pkgs/development/tools/analysis/findbugs/default.nix b/nixpkgs/pkgs/development/tools/analysis/findbugs/default.nix
new file mode 100644
index 000000000000..63301622c1fb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/findbugs/default.nix
@@ -0,0 +1,46 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "findbugs";
+  version = "3.0.1";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "06b46fz4nid7qvm36r66zw01fr87y4jyz21ixw27b8hkqah0s3p8";
+  };
+
+  buildPhase = ''
+    substituteInPlace bin/findbugs --replace /bin/pwd pwd
+  '';
+
+  installPhase = ''
+    d=$out/libexec/findbugs
+    mkdir -p $d $out/bin $out/nix-support
+
+    cp -prd bin lib plugin doc $d/
+    rm $d/bin/*.bat
+    for i in $d/bin/*; do
+      if [ -f $i ]; then ln -s $i $out/bin/; fi
+    done
+
+    # Get rid of unnecessary JARs.
+    rm $d/lib/ant.jar
+
+    # Make some JARs findable.
+    mkdir -p $out/share/java
+    ln -s $d/lib/{findbugs.jar,findbugs-ant.jar} $out/share/java/
+
+    cat <<EOF > $out/nix-support/setup-hook
+    export FINDBUGS_HOME=$d
+    EOF
+  '';
+
+  meta = with lib; {
+    description = "A static analysis tool to find bugs in Java programs automatically";
+    homepage = "https://findbugs.sourceforge.net/";
+    maintainers = with maintainers; [ pSub ];
+    platforms = with platforms; unix;
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.lgpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/flow/default.nix b/nixpkgs/pkgs/development/tools/analysis/flow/default.nix
new file mode 100644
index 000000000000..21811bd668c7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/flow/default.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv, fetchFromGitHub, ocamlPackages, CoreServices }:
+
+stdenv.mkDerivation rec {
+  pname = "flow";
+  version = "0.228.0";
+
+  src = fetchFromGitHub {
+    owner = "facebook";
+    repo = "flow";
+    rev = "v${version}";
+    hash = "sha256-JUmDnpa9hvaGBcZR+OOD9R4P06x94zAdXW1SotXlcMc=";
+  };
+
+  postPatch = ''
+    substituteInPlace src/services/inference/check_cache.ml --replace 'Core_kernel' 'Core'
+  '';
+
+  makeFlags = [ "FLOW_RELEASE=1" ];
+
+  # Work around https://github.com/NixOS/nixpkgs/issues/166205.
+  env = lib.optionalAttrs stdenv.cc.isClang {
+    NIX_LDFLAGS = "-l${stdenv.cc.libcxx.cxxabi.libName}";
+  };
+
+  installPhase = ''
+    install -Dm755 bin/flow $out/bin/flow
+    install -Dm644 resources/shell/bash-completion $out/share/bash-completion/completions/flow
+  '';
+
+  strictDeps = true;
+
+  nativeBuildInputs = with ocamlPackages; [ ocaml dune_3 findlib ocamlbuild ];
+
+  buildInputs = lib.optionals stdenv.isDarwin [ CoreServices ]
+    ++ (with ocamlPackages; [ core_kernel dtoa fileutils lwt_log lwt_ppx ocaml_lwt ppx_deriving ppx_gen_rec ppx_let sedlex visitors wtf8 ] ++ lib.optionals stdenv.isLinux [ inotify ]);
+
+  meta = with lib; {
+    description = "A static type checker for JavaScript";
+    homepage = "https://flow.org/";
+    changelog = "https://github.com/facebook/flow/blob/v${version}/Changelog.md";
+    license = licenses.mit;
+    platforms = ocamlPackages.ocaml.meta.platforms;
+    maintainers = with maintainers; [ marsam puffnfresh ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/frama-c/default.nix b/nixpkgs/pkgs/development/tools/analysis/frama-c/default.nix
new file mode 100644
index 000000000000..1bf477cf3d16
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/frama-c/default.nix
@@ -0,0 +1,108 @@
+{ lib, stdenv, fetchurl, fetchpatch, makeWrapper, writeText
+, graphviz, doxygen
+, ocamlPackages, ltl2ba, coq, why3
+, gdk-pixbuf, wrapGAppsHook
+}:
+
+let
+  mkocamlpath = p: "${p}/lib/ocaml/${ocamlPackages.ocaml.version}/site-lib";
+  runtimeDeps = with ocamlPackages; [
+    apron.dev
+    bigarray-compat
+    biniou
+    camlzip
+    easy-format
+    menhirLib
+    mlgmpidl
+    num
+    ocamlgraph
+    ppx_deriving
+    ppx_deriving_yojson
+    ppx_import
+    stdlib-shims
+    why3.dev
+    re
+    result
+    seq
+    sexplib
+    sexplib0
+    parsexp
+    base
+    unionFind
+    yojson
+    zarith
+  ];
+  ocamlpath = lib.concatMapStringsSep ":" mkocamlpath runtimeDeps;
+in
+
+stdenv.mkDerivation rec {
+  pname = "frama-c";
+  version = "28.0";
+  slang   = "Nickel";
+
+  src = fetchurl {
+    url  = "https://frama-c.com/download/frama-c-${version}-${slang}.tar.gz";
+    hash = "sha256-KWEogjMOy27d0LTKOvwEkrcND+szeaG46JMZTG4XOYM=";
+  };
+
+  preConfigure = ''
+    substituteInPlace src/dune --replace " bytes " " "
+  '';
+
+  postConfigure = "patchShebangs src/plugins/eva/gen-api.sh";
+
+  strictDeps = true;
+
+  nativeBuildInputs = [ wrapGAppsHook ] ++ (with ocamlPackages; [ ocaml findlib dune_3 menhir ]);
+
+  buildInputs = with ocamlPackages; [
+    dune-site dune-configurator
+    ltl2ba ocamlgraph yojson menhirLib camlzip
+    lablgtk3 lablgtk3-sourceview3 coq graphviz zarith apron why3 mlgmpidl doxygen
+    ppx_deriving ppx_import ppx_deriving_yaml ppx_deriving_yojson
+    gdk-pixbuf
+    unionFind
+  ];
+
+  buildPhase = ''
+    runHook preBuild
+    dune build -j$NIX_BUILD_CORES --release @install
+    runHook postBuild
+  '';
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  preFixup = ''
+     gappsWrapperArgs+=(--prefix OCAMLPATH ':' ${ocamlpath}:$out/lib/)
+  '';
+
+  # Allow loading of external Frama-C plugins
+  setupHook = writeText "setupHook.sh" ''
+    addFramaCPath () {
+      if test -d "''$1/lib/frama-c/plugins"; then
+        export FRAMAC_PLUGIN="''${FRAMAC_PLUGIN-}''${FRAMAC_PLUGIN:+:}''$1/lib/frama-c/plugins"
+        export OCAMLPATH="''${OCAMLPATH-}''${OCAMLPATH:+:}''$1/lib/frama-c/plugins"
+      fi
+
+      if test -d "''$1/lib/frama-c"; then
+        export OCAMLPATH="''${OCAMLPATH-}''${OCAMLPATH:+:}''$1/lib/frama-c"
+      fi
+
+      if test -d "''$1/share/frama-c/"; then
+        export FRAMAC_EXTRA_SHARE="''${FRAMAC_EXTRA_SHARE-}''${FRAMAC_EXTRA_SHARE:+:}''$1/share/frama-c"
+      fi
+
+    }
+
+    addEnvHooks "$targetOffset" addFramaCPath
+  '';
+
+
+  meta = {
+    description = "An extensible and collaborative platform dedicated to source-code analysis of C software";
+    homepage    = "http://frama-c.com/";
+    license     = lib.licenses.lgpl21;
+    maintainers = with lib.maintainers; [ thoughtpolice amiddelk ];
+    platforms   = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/garcosim/tracefilegen/default.nix b/nixpkgs/pkgs/development/tools/analysis/garcosim/tracefilegen/default.nix
new file mode 100644
index 000000000000..f7f5e84c012b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/garcosim/tracefilegen/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, cmake }:
+
+stdenv.mkDerivation rec {
+
+  pname = "tracefilegen";
+  version = "unstable-2017-05-13";
+
+  src = fetchFromGitHub {
+    owner = "GarCoSim";
+    repo = "TraceFileGen";
+    rev = "0ebfd1fdb54079d4bdeaa81fc9267ecb9f016d60";
+    sha256 = "1gsx18ksgz5gwl3v62vgrmhxc0wc99i74qwhpn0h57zllk41drjc";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  patches = [ ./gcc7.patch ];
+
+  installPhase = ''
+    install -Dm755 TraceFileGen $out/bin/TraceFileGen
+    mkdir -p $out/share/doc/${pname}-${version}/
+    cp -ar $src/Documentation/html $out/share/doc/${pname}-${version}/.
+  '';
+
+  meta = with lib; {
+    description = "Automatically generate all types of basic memory management operations and write into trace files";
+    homepage = "https://github.com/GarCoSim";
+    maintainers = [ maintainers.cmcdragonkai ];
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/garcosim/tracefilegen/gcc7.patch b/nixpkgs/pkgs/development/tools/analysis/garcosim/tracefilegen/gcc7.patch
new file mode 100644
index 000000000000..48301bbf61ad
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/garcosim/tracefilegen/gcc7.patch
@@ -0,0 +1,13 @@
+diff --git a/Utils/Logger.cpp b/Utils/Logger.cpp
+index 747cd63..e3efdf1 100644
+--- a/Utils/Logger.cpp
++++ b/Utils/Logger.cpp
+@@ -29,7 +29,7 @@ Logger::Logger(char* tracepath) {
+ 	trace = fopen(tracepath, "w");

+ 

+ 	// dot file is not used, set null as default value

+-	dot = '\0';

++	dot = nullptr;

+ 	//dot = fopen("gcKons.dot", "w");

+ 	//fprintf(dot,"digraph G {\n");

+ }

diff --git a/nixpkgs/pkgs/development/tools/analysis/garcosim/tracefilesim/default.nix b/nixpkgs/pkgs/development/tools/analysis/garcosim/tracefilesim/default.nix
new file mode 100644
index 000000000000..a76b6b9239e1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/garcosim/tracefilesim/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation {
+
+  pname = "tracefilesim";
+  version = "unstable-2015-11-07";
+
+  src = fetchFromGitHub {
+    owner = "GarCoSim";
+    repo = "TraceFileSim";
+    rev = "368aa6b1d6560e7ecbd16fca47000c8f528f3da2";
+    sha256 = "156m92k38ap4bzidbr8dzl065rni8lrib71ih88myk9z5y1x5nxm";
+  };
+
+  hardeningDisable = [ "fortify" ];
+
+  installPhase = ''
+    mkdir --parents "$out/bin"
+    cp ./traceFileSim "$out/bin"
+  '';
+
+  meta = with lib; {
+    description = "Ease the analysis of existing memory management techniques, as well as the prototyping of new memory management techniques";
+    homepage = "https://github.com/GarCoSim";
+    maintainers = [ maintainers.cmcdragonkai ];
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/hopper/default.nix b/nixpkgs/pkgs/development/tools/analysis/hopper/default.nix
new file mode 100644
index 000000000000..d7b519b04c34
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/hopper/default.nix
@@ -0,0 +1,76 @@
+{ stdenv
+, fetchurl
+, lib
+, autoPatchelfHook
+, wrapQtAppsHook
+, gmpxx
+, gnustep
+, libbsd
+, libffi_3_3
+, ncurses6
+}:
+
+stdenv.mkDerivation rec {
+  pname = "hopper";
+  version = "5.5.3";
+  rev = "v4";
+
+  src = fetchurl {
+    url = "https://d2ap6ypl1xbe4k.cloudfront.net/Hopper-${rev}-${version}-Linux-demo.pkg.tar.xz";
+    hash = "sha256-xq9ZVg1leHm/tq6LYyQLa8p5dDwBd64Jt92uMoE0z58=";
+  };
+
+  sourceRoot = ".";
+
+  nativeBuildInputs = [
+    autoPatchelfHook
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    gnustep.libobjc
+    libbsd
+    libffi_3_3
+    ncurses6
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    mkdir -p $out/lib
+    mkdir -p $out/share
+
+    cp $sourceRoot/opt/hopper-${rev}/bin/Hopper $out/bin/hopper
+    cp \
+      --archive \
+      $sourceRoot/opt/hopper-${rev}/lib/libBlocksRuntime.so* \
+      $sourceRoot/opt/hopper-${rev}/lib/libdispatch.so* \
+      $sourceRoot/opt/hopper-${rev}/lib/libgnustep-base.so* \
+      $sourceRoot/opt/hopper-${rev}/lib/libHopperCore.so* \
+      $sourceRoot/opt/hopper-${rev}/lib/libkqueue.so* \
+      $sourceRoot/opt/hopper-${rev}/lib/libobjcxx.so* \
+      $sourceRoot/opt/hopper-${rev}/lib/libpthread_workqueue.so* \
+      $out/lib
+
+    cp -r $sourceRoot/usr/share $out
+
+    runHook postInstall
+  '';
+
+  postFixup = ''
+    substituteInPlace "$out/share/applications/hopper-${rev}.desktop" \
+      --replace "Exec=/opt/hopper-${rev}/bin/Hopper" "Exec=$out/bin/hopper"
+  '';
+
+  meta = with lib; {
+    homepage = "https://www.hopperapp.com/index.html";
+    description = "A macOS and Linux Disassembler";
+    license = licenses.unfree;
+    maintainers = with maintainers; [
+      luis
+      Enteee
+    ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/hotspot/default.nix b/nixpkgs/pkgs/development/tools/analysis/hotspot/default.nix
new file mode 100644
index 000000000000..bbf91ec28fb4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/hotspot/default.nix
@@ -0,0 +1,82 @@
+{ lib
+, mkDerivation
+, cmake
+, elfutils
+, extra-cmake-modules
+, fetchFromGitHub
+, kconfigwidgets
+, ki18n
+, kio
+, kitemmodels
+, kitemviews
+, kparts
+, kwindowsystem
+, libelf
+, qtbase
+, threadweaver
+, qtx11extras
+, zstd
+, kddockwidgets
+, rustc-demangle
+}:
+
+mkDerivation rec {
+  pname = "hotspot";
+  version = "1.4.1";
+
+  src = fetchFromGitHub {
+    owner = "KDAB";
+    repo = "hotspot";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-DW4R7+rnonmEMbCkNS7TGodw+3mEyHl6OlFK3kbG5HM=";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [
+    cmake
+    extra-cmake-modules
+  ];
+  buildInputs = [
+    (elfutils.override { enableDebuginfod = true; }) # perfparser needs to find debuginfod.h
+    kconfigwidgets
+    ki18n
+    kio
+    kitemmodels
+    kitemviews
+    kparts
+    kwindowsystem
+    libelf
+    qtbase
+    threadweaver
+    qtx11extras
+    zstd
+    kddockwidgets
+    rustc-demangle
+  ];
+
+  # hotspot checks for the presence of third party libraries'
+  # git directory to give a nice warning when you forgot to clone
+  # submodules; but Nix clones them and removes .git (for reproducibility).
+  # So we need to fake their existence here.
+  postPatch = ''
+    mkdir -p 3rdparty/{perfparser,PrefixTickLabels}/.git
+  '';
+
+  qtWrapperArgs = [
+    "--prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ rustc-demangle ]}"
+  ];
+
+  meta = with lib; {
+    description = "A GUI for Linux perf";
+    longDescription = ''
+      hotspot is a GUI replacement for `perf report`.
+      It takes a perf.data file, parses and evaluates its contents and
+      then displays the result in a graphical way.
+    '';
+    homepage = "https://github.com/KDAB/hotspot";
+    changelog = "https://github.com/KDAB/hotspot/releases/tag/v${version}";
+    license = with licenses; [ gpl2Only gpl3Only ];
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ nh2 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/ikos/default.nix b/nixpkgs/pkgs/development/tools/analysis/ikos/default.nix
new file mode 100644
index 000000000000..50f4f552e0ff
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/ikos/default.nix
@@ -0,0 +1,50 @@
+{ stdenv, lib, fetchFromGitHub, fetchpatch, cmake, boost, tbb
+, gmp, llvm, clang, sqlite, python3
+, ocamlPackages, mpfr, ppl, doxygen, graphviz
+}:
+
+let
+  python = python3.withPackages (ps: with ps; [
+    pygments
+  ]);
+in
+
+stdenv.mkDerivation rec {
+  pname = "ikos";
+  version = "3.1";
+
+  src = fetchFromGitHub {
+    owner = "NASA-SW-VnV";
+    repo = "ikos";
+    rev = "v${version}";
+    hash = "sha256-scaFkUhCkIi41iR6CGPbEndzXkgqTKMb3PDNvhgVbCE=";
+  };
+
+  patches = [ (fetchpatch {
+    url = "https://github.com/NASA-SW-VnV/ikos/commit/2e647432427b3f0dbb639e0371d976ab6406f290.patch";
+    hash = "sha256-ffzjlqEp4qp76Kwl5zpyQlg/xUMt8aLDSSP4XA4ndS8=";
+  })
+  # Fix build with GCC 13
+  # https://github.com/NASA-SW-VnV/ikos/pull/262
+  (fetchpatch {
+    name = "gcc-13.patch";
+    url = "https://github.com/NASA-SW-VnV/ikos/commit/73c816641fb9780f0d3b5e448510363a3cf21ce2.patch";
+    hash = "sha256-bkeSAtxrL+z+6QNiGOWSg7kN8XiZqMxlJiu5Dquhca0=";
+  })
+  ];
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ boost tbb gmp clang llvm sqlite python
+                  ocamlPackages.apron mpfr ppl doxygen graphviz ];
+
+  cmakeFlags = [ "-DAPRON_ROOT=${ocamlPackages.apron}" ];
+
+  postBuild = "make doc";
+
+  meta = with lib; {
+    homepage = "https://github.com/NASA-SW-VnV/ikos";
+    description = "Static analyzer for C/C++ based on the theory of Abstract Interpretation";
+    license = licenses.nasa13;
+    maintainers = with maintainers; [ atnnn ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/include-what-you-use/default.nix b/nixpkgs/pkgs/development/tools/analysis/include-what-you-use/default.nix
new file mode 100644
index 000000000000..7266b76a4ad6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/include-what-you-use/default.nix
@@ -0,0 +1,51 @@
+{ lib, stdenv, fetchurl, cmake, llvmPackages, python3 }:
+
+stdenv.mkDerivation rec {
+  pname = "include-what-you-use";
+  # Also bump llvmPackages in all-packages.nix to the supported version!
+  version = "0.21";
+
+  src = fetchurl {
+    url = "${meta.homepage}/downloads/${pname}-${version}.src.tar.gz";
+    hash = "sha256-ajUZGf+JvafJXIlUcmAYaNs9qrlqlYs44DYokNWHYLY=";
+  };
+
+  postPatch = ''
+    patchShebangs .
+  '';
+
+  nativeBuildInputs = with llvmPackages; [ cmake llvm.dev llvm python3 ];
+  buildInputs = with llvmPackages; [ libclang clang-unwrapped python3 ];
+
+  clang = llvmPackages.clang;
+
+  cmakeFlags = [ "-DCMAKE_PREFIX_PATH=${llvmPackages.llvm.dev}" ];
+
+  postInstall = ''
+    substituteInPlace $out/bin/iwyu_tool.py \
+      --replace "'include-what-you-use'" "'$out/bin/include-what-you-use'"
+
+
+    mv $out/bin/include-what-you-use $out/bin/.include-what-you-use-unwrapped
+    mv $out/bin/iwyu_tool.py $out/bin/.iwyu_tool.py-unwrapped
+    substituteAll ${./wrapper} $out/bin/include-what-you-use
+    ln -s $out/bin/include-what-you-use $out/bin/iwyu_tool.py
+    chmod +x $out/bin/include-what-you-use
+    patchShebangs $out/bin/include-what-you-use
+  '';
+
+  meta = with lib; {
+    description = "Analyze #includes in C/C++ source files with clang";
+    longDescription = ''
+      For every symbol (type, function variable, or macro) that you use in
+      foo.cc, either foo.cc or foo.h should #include a .h file that exports the
+      declaration of that symbol.  The main goal of include-what-you-use is to
+      remove superfluous #includes, both by figuring out what #includes are not
+      actually needed for this file (for both .cc and .h files), and by
+      replacing #includes with forward-declares when possible.
+    '';
+    homepage = "https://include-what-you-use.org";
+    license = licenses.bsd3;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/include-what-you-use/wrapper b/nixpkgs/pkgs/development/tools/analysis/include-what-you-use/wrapper
new file mode 100755
index 000000000000..3fd37902cf2d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/include-what-you-use/wrapper
@@ -0,0 +1,26 @@
+#!/bin/sh
+
+buildcpath() {
+  local path after
+  while (( $# )); do
+    case $1 in
+        -isystem)
+            shift
+            path=$path${path:+':'}$1
+            ;;
+        -idirafter)
+            shift
+            after=$after${after:+':'}$1
+            ;;
+    esac
+    shift
+  done
+  echo $path${after:+':'}$after
+}
+
+export CPATH=${CPATH}${CPATH:+':'}$(buildcpath ${NIX_CFLAGS_COMPILE} \
+                                               $(<@clang@/nix-support/libc-cflags)):@clang@/resource-root/include
+export CPLUS_INCLUDE_PATH=${CPLUS_INCLUDE_PATH}${CPLUS_INCLUDE_PATH:+':'}$(buildcpath ${NIX_CFLAGS_COMPILE} \
+                                                                                      $(<@clang@/nix-support/libcxx-cxxflags) \
+                                                                                      $(<@clang@/nix-support/libc-cflags)):@clang@/resource-root/include
+exec -a "$0" @out@/bin/.$(basename $0)-unwrapped "$@"
diff --git a/nixpkgs/pkgs/development/tools/analysis/jacoco/default.nix b/nixpkgs/pkgs/development/tools/analysis/jacoco/default.nix
new file mode 100644
index 000000000000..3bcd7b59160f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/jacoco/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, stdenv
+, fetchzip
+, makeWrapper
+, jre
+}:
+
+stdenv.mkDerivation rec {
+  pname = "jacoco";
+  version = "0.8.11";
+
+  src = fetchzip {
+    url = "https://search.maven.org/remotecontent?filepath=org/jacoco/jacoco/${version}/jacoco-${version}.zip";
+    stripRoot = false;
+    sha256 = "sha256-Sd4Kh5ts0IdHhd9vF1XZzZ2KFRb+rsnzpam6Ysxu910=";
+  };
+
+  outputs = [ "out" "doc" ];
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $doc/share/doc $out/bin
+
+    cp -r doc $doc/share/doc/jacoco
+    install -Dm444 lib/* -t $out/share/java
+
+    makeWrapper ${jre}/bin/java $out/bin/jacoco \
+      --add-flags "-jar $out/share/java/jacococli.jar"
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "A free code coverage library for Java";
+    homepage = "https://www.jacoco.org/jacoco";
+    changelog = "https://www.jacoco.org/jacoco/trunk/doc/changes.html";
+    license = licenses.epl20;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/jdepend/default.nix b/nixpkgs/pkgs/development/tools/analysis/jdepend/default.nix
new file mode 100644
index 000000000000..498a484a89f0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/jdepend/default.nix
@@ -0,0 +1,58 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, ant
+, jdk
+, makeWrapper
+, canonicalize-jars-hook
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "jdepend";
+  version = "2.10";
+
+  src = fetchFromGitHub {
+    owner = "clarkware";
+    repo = "jdepend";
+    rev = finalAttrs.version;
+    hash = "sha256-0/xGgAaJ7TTUHxShJbbcPzTODk4lDn+FOn5St5McrtM=";
+  };
+
+  nativeBuildInputs = [
+    ant
+    jdk
+    makeWrapper
+    canonicalize-jars-hook
+  ];
+
+  buildPhase = ''
+    runHook preBuild
+    ant jar
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm644 dist/jdepend-*.jar -t $out/share/jdepend
+
+    makeWrapper ${jdk.jre}/bin/java $out/bin/jdepend \
+        --add-flags "-classpath $out/share/jdepend/jdepend-*.jar"
+
+    for type in "swingui" "textui" "xmlui"; do
+      makeWrapper $out/bin/jdepend $out/bin/jdepend-$type \
+          --add-flags "jdepend.$type.JDepend"
+    done
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    changelog = "https://github.com/clarkware/jdepend/blob/${finalAttrs.src.rev}/CHANGELOG.md";
+    description = "Traverses Java class file directories and generates design quality metrics for each Java package";
+    homepage = "http://www.clarkware.com/software/JDepend.html";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ pSub ];
+    platforms = platforms.linux;
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/analysis/kcov/default.nix b/nixpkgs/pkgs/development/tools/analysis/kcov/default.nix
new file mode 100644
index 000000000000..473dc9d7a4bb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/kcov/default.nix
@@ -0,0 +1,83 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, pkg-config
+, zlib
+, curl
+, elfutils
+, python3
+, libiberty
+, libopcodes
+, runCommandCC
+, rustc
+}:
+
+let
+  self =
+    stdenv.mkDerivation rec {
+      pname = "kcov";
+      version = "42";
+
+      src = fetchFromGitHub {
+        owner = "SimonKagstrom";
+        repo = "kcov";
+        rev = "v${version}";
+        sha256 = "sha256-8/182RjuNuyFzSyCgyyximGaveDyhStwIQg29S5U/pI=";
+      };
+
+      preConfigure = "patchShebangs src/bin-to-c-source.py";
+      nativeBuildInputs = [ cmake pkg-config python3 ];
+
+      buildInputs = [ curl zlib elfutils libiberty libopcodes ];
+
+      strictDeps = true;
+
+      passthru.tests = {
+        works-on-c = runCommandCC "works-on-c" { } ''
+          set -ex
+          cat - > a.c <<EOF
+          int main() {}
+          EOF
+          $CC a.c -o a.out
+          ${self}/bin/kcov /tmp/kcov ./a.out
+          test -e /tmp/kcov/index.html
+          touch $out
+          set +x
+        '';
+
+        works-on-rust = runCommandCC "works-on-rust" { nativeBuildInputs = [ rustc ]; } ''
+          set -ex
+          cat - > a.rs <<EOF
+          fn main() {}
+          EOF
+          # Put gcc in the path so that `cc` is found
+          rustc a.rs -o a.out
+          ${self}/bin/kcov /tmp/kcov ./a.out
+          test -e /tmp/kcov/index.html
+          touch $out
+          set +x
+        '';
+      };
+
+      meta = with lib; {
+        description = "Code coverage tester for compiled programs, Python scripts and shell scripts";
+
+        longDescription = ''
+          Kcov is a code coverage tester for compiled programs, Python
+          scripts and shell scripts. It allows collecting code coverage
+          information from executables without special command-line
+          arguments, and continuosly produces output from long-running
+          applications.
+        '';
+
+        homepage = "http://simonkagstrom.github.io/kcov/index.html";
+        license = licenses.gpl2;
+        changelog = "https://github.com/SimonKagstrom/kcov/blob/master/ChangeLog";
+
+        maintainers = with maintainers; [ gal_bolle ekleog ];
+        platforms = platforms.linux;
+      };
+    };
+in
+self
diff --git a/nixpkgs/pkgs/development/tools/analysis/lcov/default.nix b/nixpkgs/pkgs/development/tools/analysis/lcov/default.nix
new file mode 100644
index 000000000000..349b44730b8a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/lcov/default.nix
@@ -0,0 +1,45 @@
+ {lib, stdenv, fetchFromGitHub, perl, perlPackages, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "lcov";
+  version = "1.16";
+
+  src = fetchFromGitHub {
+    owner = "linux-test-project";
+    repo = "lcov";
+    rev = "v${version}";
+    sha256 = "sha256-X1T5OqR6NgTNGedH1on3+XZ7369007By6tRJK8xtmbk=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ perl ];
+
+  preBuild = ''
+    patchShebangs bin/
+    makeFlagsArray=(PREFIX=$out LCOV_PERL_PATH=$(command -v perl))
+  '';
+
+  postInstall = ''
+    wrapProgram $out/bin/lcov --set PERL5LIB ${perlPackages.makeFullPerlPath [ perlPackages.PerlIOgzip perlPackages.JSON ]}
+    wrapProgram $out/bin/genpng --set PERL5LIB ${perlPackages.makeFullPerlPath [ perlPackages.GD ]}
+  '';
+
+  meta = with lib; {
+    description = "Code coverage tool that enhances GNU gcov";
+
+    longDescription =
+      '' LCOV is an extension of GCOV, a GNU tool which provides information
+         about what parts of a program are actually executed (i.e.,
+         "covered") while running a particular test case.  The extension
+         consists of a set of PERL scripts which build on the textual GCOV
+         output to implement the following enhanced functionality such as
+         HTML output.
+      '';
+
+    homepage = "https://ltp.sourceforge.net/coverage/lcov.php";
+    license = lib.licenses.gpl2Plus;
+
+    maintainers = with maintainers; [ dezgeg ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/makefile2graph/default.nix b/nixpkgs/pkgs/development/tools/analysis/makefile2graph/default.nix
new file mode 100644
index 000000000000..dea310ede42e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/makefile2graph/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, makeWrapper, bash, gnumake }:
+
+stdenv.mkDerivation rec {
+  pname = "makefile2graph";
+  version = "2021.11.06";
+
+  src = fetchFromGitHub {
+    owner = "lindenb";
+    repo = "makefile2graph";
+    rev = "refs/tags/${version}";
+    hash = "sha256-4jyftC0eCJ13X/L4uEWhT5FA5/UXUmSHSoba89GSySQ=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  makeFlags = [ "prefix=$(out)" ];
+
+  fixupPhase = ''
+    substituteInPlace $out/bin/makefile2graph \
+      --replace '/bin/sh' ${bash}/bin/bash \
+      --replace 'make2graph' "$out/bin/make2graph"
+    wrapProgram $out/bin/makefile2graph \
+      --set PATH ${lib.makeBinPath [ gnumake ]}
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/lindenb/makefile2graph";
+    description = "Creates a graph of dependencies from GNU-Make; Output is a graphiz-dot file or a Gexf-XML file";
+    maintainers = with maintainers; [ cmcdragonkai ];
+    license = licenses.mit;
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/massif-visualizer/default.nix b/nixpkgs/pkgs/development/tools/analysis/massif-visualizer/default.nix
new file mode 100644
index 000000000000..78f8bbeb683e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/massif-visualizer/default.nix
@@ -0,0 +1,30 @@
+{
+  mkDerivation, lib, fetchurl,
+  extra-cmake-modules, shared-mime-info,
+  qtsvg, qtxmlpatterns, karchive, kconfig, kcoreaddons, kparts, kio, ki18n,
+  kdiagram, kgraphviewer
+}:
+
+mkDerivation rec {
+  pname = "massif-visualizer";
+  version = "0.7.0";
+
+  src = fetchurl {
+    url = "mirror://kde/stable/massif-visualizer/${version}/src/${pname}-${version}.tar.xz";
+    sha256 = "0v8z6r9gngzckvqyxjm9kp7hilwfqibyk2f9vag9l98ar0iwr97q";
+  };
+
+  nativeBuildInputs = [ extra-cmake-modules shared-mime-info ];
+
+  buildInputs = [
+    qtsvg qtxmlpatterns karchive kconfig kcoreaddons kparts kio ki18n
+    kdiagram kgraphviewer
+  ];
+
+  meta = with lib; {
+    description = "Tool that visualizes massif data generated by valgrind";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ zraexy ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/nix-linter/default.nix b/nixpkgs/pkgs/development/tools/analysis/nix-linter/default.nix
new file mode 100644
index 000000000000..aa60f5aa757d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/nix-linter/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, mkDerivation
+, fetchFromGitHub
+, fixplate
+, tasty
+, tasty-hunit
+, tasty-th
+, streamly
+, mtl
+, path
+, pretty-terminal
+, text
+, base
+, aeson
+, path-io
+, cmdargs
+, containers
+, hnix
+, bytestring
+}:
+
+mkDerivation rec {
+  pname = "nix-linter";
+  version = "0.2.0.4";
+
+  src = fetchFromGitHub {
+    owner = "Synthetica9";
+    repo = "nix-linter";
+    rev = "ecdd50750fd3ffaff83c0637474b884a0c38f8b9";
+    sha256 = "0hm6iaamh1wlvqk8z4yfh4idgbclbsimxhlgflwz2hnv9mm12sf1";
+  };
+
+  isLibrary = false;
+  isExecutable = true;
+  libraryHaskellDepends = [ fixplate ];
+  executableHaskellDepends = [ streamly mtl path pretty-terminal text base aeson cmdargs containers hnix bytestring path-io ];
+  testHaskellDepends = [ tasty tasty-hunit tasty-th ];
+
+  description = "Linter for Nix(pkgs), based on hnix";
+  homepage = "https://github.com/Synthetica9/nix-linter";
+  license = lib.licenses.bsd3;
+  maintainers = [ lib.maintainers.marsam ];
+
+  # doesn't build on ghc92
+  hydraPlatforms = lib.platforms.none;
+  broken = true;
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/oclgrind/default.nix b/nixpkgs/pkgs/development/tools/analysis/oclgrind/default.nix
new file mode 100644
index 000000000000..74f856e23de0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/oclgrind/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub, cmake, llvmPackages_12, readline, python3 }:
+
+stdenv.mkDerivation rec {
+  pname = "oclgrind";
+  version = "21.10";
+
+  src = fetchFromGitHub {
+    owner = "jrprice";
+    repo = "oclgrind";
+    rev = "v${version}";
+    sha256 = "sha256-DGCF7X2rPV1w9guxg2bMylRirXQgez24sG7Unlct3ow=";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  nativeCheckInputs = [ python3 ];
+  buildInputs = [ llvmPackages_12.llvm llvmPackages_12.clang-unwrapped readline ];
+
+  cmakeFlags = [
+    "-DCLANG_ROOT=${llvmPackages_12.clang-unwrapped}"
+  ];
+
+  meta = with lib; {
+    description = "An OpenCL device simulator and debugger";
+    homepage = "https://github.com/jrprice/oclgrind";
+    license = licenses.bsd3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ athas ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/panopticon/default.nix b/nixpkgs/pkgs/development/tools/analysis/panopticon/default.nix
new file mode 100644
index 000000000000..4e01fba57798
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/panopticon/default.nix
@@ -0,0 +1,52 @@
+{ stdenv, lib, fetchFromGitHub, rustPlatform, qt5, git, cmake
+, pkg-config, makeWrapper }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "panopticon";
+  version = "unstable-20171202";
+
+  src = fetchFromGitHub {
+    owner = "das-labor";
+    repo = pname;
+    rev = "33ffec0d6d379d51b38d6ea00d040f54b1356ae4";
+    sha256 = "1zv87nqhrzsxx0m891df4vagzssj3kblfv9yp7j96dw0vn9950qa";
+  };
+
+  nativeBuildInputs = [ cmake pkg-config makeWrapper ];
+  propagatedBuildInputs = with qt5; [
+     qt5.qtbase
+     qtdeclarative
+     qtsvg
+     qtquickcontrols2
+     qtgraphicaleffects
+     git
+  ];
+
+  dontWrapQtApps = true;
+
+  cargoSha256 = "0vhcb3kw1zgchx3nrk8lyrz8p5071y99vsysxvi71klv7dcvn0am";
+  doCheck = false;
+
+  postInstall = ''
+    mkdir -p $out/share/${pname} $out/bin
+    cp -R qml $out/share/${pname}
+    mv $out/bin/${pname} $out/share/${pname}
+    chmod +x $out/share/${pname}
+    makeWrapper $out/share/${pname}/${pname} $out/bin/${pname}
+     '';
+
+  meta = with lib; {
+    description = "A libre cross-platform disassembler";
+    longDescription = ''
+      Panopticon is a cross platform disassembler for reverse
+      engineering written in Rust. It can disassemble AMD64,
+      x86, AVR and MOS 6502 instruction sets and open ELF files.
+      Panopticon comes with Qt GUI for browsing and annotating
+      control flow graphs.
+    '';
+    license = with licenses; [ gpl3 ];
+    maintainers = with maintainers; [ leenaars ];
+    # never built on aarch64-linux since first introduction in nixpkgs
+    broken = stdenv.isDarwin || (stdenv.isLinux && stdenv.isAarch64);
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/pev/default.nix b/nixpkgs/pkgs/development/tools/analysis/pev/default.nix
new file mode 100644
index 000000000000..a46bc067f11b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/pev/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, openssl, fetchFromGitHub }:
+
+stdenv.mkDerivation {
+  pname = "pev";
+  version = "unstable-2020-05-23";
+
+  src = fetchFromGitHub {
+    owner = "merces";
+    repo = "pev";
+    rev = "beec2b4f09585fea919ed41ce466dee06be0b6bf";
+    sha256 = "sha256-HrMbk9YbuqkoBBM7+rfXpqVEnd1rDl2rMePdcfU1WDg=";
+    fetchSubmodules = true;
+  };
+
+  buildInputs = [ openssl ];
+
+  enableParallelBuilding = true;
+
+  makeFlags = [ "prefix=$(out)" ];
+
+  installFlags = [ "prefix=$(out)" ];
+
+  meta = with lib; {
+    description = "A full-featured, open source, multiplatform command line toolkit to work with PE (Portable Executables) binaries";
+    homepage = "https://pev.sourceforge.net/";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ jeschli ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/pmd/default.nix b/nixpkgs/pkgs/development/tools/analysis/pmd/default.nix
new file mode 100644
index 000000000000..f50fb16d8bc8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/pmd/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchurl, unzip, makeWrapper, openjdk }:
+
+stdenv.mkDerivation rec {
+  pname = "pmd";
+  version = "6.55.0";
+
+  src = fetchurl {
+    url = "https://github.com/pmd/pmd/releases/download/pmd_releases/${version}/pmd-bin-${version}.zip";
+    hash = "sha256-Iaz5bUPLQNWRyszMHCCmb8eW6t32nqYYEllER7rHoR0=";
+  };
+
+  nativeBuildInputs = [ unzip makeWrapper ];
+
+  dontConfigure = true;
+  dontBuild = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 bin/run.sh $out/libexec/pmd
+    install -Dm644 lib/*.jar -t $out/lib/pmd
+
+    wrapProgram $out/libexec/pmd \
+        --prefix PATH : ${openjdk.jre}/bin \
+        --set LIB_DIR $out/lib/pmd
+
+    for app in pmd cpd cpdgui designer bgastviewer designerold ast-dump; do
+        makeWrapper $out/libexec/pmd $out/bin/$app --argv0 $app --add-flags $app
+    done
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "An extensible cross-language static code analyzer";
+    homepage = "https://pmd.github.io/";
+    changelog = "https://pmd.github.io/pmd-${version}/pmd_release_notes.html";
+    platforms = platforms.unix;
+    license = with licenses; [ bsdOriginal asl20 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/qcachegrind/default.nix b/nixpkgs/pkgs/development/tools/analysis/qcachegrind/default.nix
new file mode 100644
index 000000000000..6a463c566091
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/qcachegrind/default.nix
@@ -0,0 +1,44 @@
+{ lib, stdenv, qmake, qtbase, perl, php, kcachegrind, wrapQtAppsHook }:
+
+stdenv.mkDerivation {
+  pname = "qcachegrind";
+  version = kcachegrind.version;
+
+  src = kcachegrind.src;
+
+  buildInputs = [ qtbase perl php ];
+
+  nativeBuildInputs = [ qmake wrapQtAppsHook ];
+
+  dontWrapQtApps = true;
+
+  postInstall = ''
+     mkdir -p $out/bin
+     cp -p converters/dprof2calltree $out/bin/dprof2calltree
+     cp -p converters/memprof2calltree $out/bin/memprof2calltree
+     cp -p converters/op2calltree $out/bin/op2calltree
+     cp -p converters/pprof2calltree $out/bin/pprof2calltree
+     chmod -R +x $out/bin/
+  '' + (if stdenv.isDarwin then ''
+    mkdir -p $out/Applications
+    cp cgview/cgview.app/Contents/MacOS/cgview $out/bin
+    cp -a qcachegrind/qcachegrind.app $out/Applications
+  '' else ''
+    install qcachegrind/qcachegrind cgview/cgview -t "$out/bin"
+    install -Dm644 qcachegrind/qcachegrind.desktop -t "$out/share/applications"
+    install -Dm644 kcachegrind/32-apps-kcachegrind.png "$out/share/icons/hicolor/32x32/apps/kcachegrind.png"
+    install -Dm644 kcachegrind/48-apps-kcachegrind.png "$out/share/icons/hicolor/48x48/apps/kcachegrind.png"
+  '');
+
+  preFixup = ''
+    wrapQtApp "$out/bin/qcachegrind"
+  '';
+
+  meta = with lib; {
+    broken = stdenv.isDarwin;
+    description = "A Qt GUI to visualize profiling data";
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ periklis ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/radare2/default.nix b/nixpkgs/pkgs/development/tools/analysis/radare2/default.nix
new file mode 100644
index 000000000000..a053d40c89f1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/radare2/default.nix
@@ -0,0 +1,118 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch
+, buildPackages
+, pkg-config
+, meson
+, ninja
+, libusb-compat-0_1
+, readline
+, libewf
+, perl
+, zlib
+, openssl
+, libuv
+, file
+, libzip
+, xxHash
+, gtk2
+, vte
+, gtkdialog
+, python3
+, ruby
+, lua
+, lz4
+, capstone
+, useX11 ? false
+, rubyBindings ? false
+, luaBindings ? false
+}:
+
+let
+  # FIXME: Compare revision with
+  # https://github.com/radareorg/radare2/blob/master/libr/arch/p/arm/v35/Makefile#L26-L27
+  arm64 = fetchFromGitHub {
+    owner = "radareorg";
+    repo = "vector35-arch-arm64";
+    rev = "55d73c6bbb94448a5c615933179e73ac618cf876";
+    hash = "sha256-pZxxp5xDg8mgkGEx7LaBSoKxNPyggFYA4um9YaO20LU=";
+  };
+  armv7 = fetchFromGitHub {
+    owner = "radareorg";
+    repo = "vector35-arch-armv7";
+    rev = "f270a6cc99644cb8e76055b6fa632b25abd26024";
+    hash = "sha256-YhfgJ7M8ys53jh1clOzj0I2yfJshXQm5zP0L9kMYsmk=";
+  };
+in
+stdenv.mkDerivation rec {
+  pname = "radare2";
+  version = "5.8.8";
+
+  src = fetchFromGitHub {
+    owner = "radare";
+    repo = "radare2";
+    rev = "refs/tags/${version}";
+    hash = "sha256-JGNV5xSyrjcO2ZgOjzDqzfZyALPSCyA3DZx/D8ffmKA=";
+  };
+
+  preBuild = ''
+    pushd ../libr/arch/p/arm/v35
+    cp -r ${arm64} arch-arm64
+    chmod -R +w arch-arm64
+
+    cp -r ${armv7} arch-armv7
+    chmod -R +w arch-armv7
+    popd
+  '';
+
+  postFixup = lib.optionalString stdenv.isDarwin ''
+    install_name_tool -add_rpath $out/lib $out/lib/libr_io.${version}.dylib
+  '';
+
+  mesonFlags = [
+   "-Duse_sys_capstone=true"
+   "-Duse_sys_magic=true"
+   "-Duse_sys_zip=true"
+   "-Duse_sys_xxhash=true"
+   "-Duse_sys_lz4=true"
+   "-Dr2_gittap=${version}"
+  ];
+
+  enableParallelBuilding = true;
+  depsBuildBuild = [ buildPackages.stdenv.cc ];
+
+  strictDeps = true;
+
+  nativeBuildInputs = [ pkg-config meson ninja python3 ];
+  buildInputs = [
+    capstone
+    file
+    readline
+    libusb-compat-0_1
+    libewf
+    perl
+    zlib
+    openssl
+    libuv
+    lz4
+  ] ++ lib.optionals useX11 [ gtkdialog vte gtk2 ]
+    ++ lib.optionals rubyBindings [ ruby ]
+    ++ lib.optionals luaBindings [ lua ];
+
+  propagatedBuildInputs = [
+    # radare2 exposes r_lib which depends on these libraries
+    file # for its list of magic numbers (`libmagic`)
+    libzip
+    xxHash
+  ];
+
+  meta = with lib; {
+    description = "UNIX-like reverse engineering framework and command-line tools";
+    homepage = "https://radare.org";
+    changelog = "https://github.com/radareorg/radare2/releases/tag/${version}";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ azahi raskin makefu mic92 arkivm ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/randoop/default.nix b/nixpkgs/pkgs/development/tools/analysis/randoop/default.nix
new file mode 100644
index 000000000000..f5936704e304
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/randoop/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchurl, unzip }:
+
+stdenv.mkDerivation rec {
+  version = "4.3.2";
+  pname = "randoop";
+
+  src = fetchurl {
+    url = "https://github.com/randoop/randoop/releases/download/v${version}/${pname}-${version}.zip";
+    sha256 = "sha256-lcYI0Yns/R5VeOUG68Xe8h1BO8wlKvL1CZIqzWkgsqo=";
+  };
+
+  nativeBuildInputs = [ unzip ];
+
+  installPhase = ''
+    mkdir -p $out/lib $out/doc
+
+    cp -R *.jar $out/lib
+    cp README.txt $out/doc
+  '';
+
+  meta = with lib; {
+    description = "Automatic test generation for Java";
+    homepage = "https://randoop.github.io/randoop/";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.mit;
+    maintainers = with maintainers; [ pSub ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/retdec/default.nix b/nixpkgs/pkgs/development/tools/analysis/retdec/default.nix
new file mode 100644
index 000000000000..95e95bb34bab
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/retdec/default.nix
@@ -0,0 +1,236 @@
+{ stdenv
+, fetchFromGitHub
+, fetchpatch
+, fetchzip
+, writeText
+, lib
+, openssl
+, cmake
+, autoconf
+, automake
+, libtool
+, pkg-config
+, bison
+, flex
+, groff
+, perl
+, python3
+, ncurses
+, time
+, upx
+, gtest
+, libffi
+, libxml2
+, zlib
+, enableTests ? true
+, buildDevTools ? true
+, compileYaraPatterns ? true
+}:
+
+let
+  # all dependencies that are normally fetched during build time (the subdirectories of `deps`)
+  # all of these need to be fetched through nix and applied via their <NAME>_URL cmake variable
+  capstone = fetchFromGitHub {
+    owner = "capstone-engine";
+    repo = "capstone";
+    rev = "5.0-rc2";
+    sha256 = "sha256-nB7FcgisBa8rRDS3k31BbkYB+tdqA6Qyj9hqCnFW+ME=";
+  };
+  llvm = fetchFromGitHub {
+    owner = "avast-tl";
+    repo = "llvm";
+    rev = "2a1f3d8a97241c6e91710be8f84cf3cf80c03390";
+    sha256 = "sha256-+v1T0VI9R92ed9ViqsfYZMJtPCjPHCr4FenoYdLuFOU=";
+  };
+  yaracpp = fetchFromGitHub {
+    owner = "VirusTotal";
+    repo = "yara";
+    rev = "v4.2.0-rc1";
+    sha256 = "sha256-WcN6ClYO2d+/MdG06RHx3kN0o0WVAY876dJiG7CwJ8w=";
+  };
+  yaramod = fetchFromGitHub {
+    owner = "avast";
+    repo = "yaramod";
+    rev = "aa06dd408c492a8f4488774caf2ee105ccc23ab5";
+    sha256 = "sha256-NVDRf2U5H92EN/Ks//uxNEaeKU+sT4VL4QyyYMO+zKk=";
+  };
+  keystone = fetchFromGitHub {
+    # only for tests
+    owner = "keystone-engine";
+    repo = "keystone";
+    rev = "d7ba8e378e5284e6384fc9ecd660ed5f6532e922";
+    sha256 = "1yzw3v8xvxh1rysh97y0i8y9svzbglx2zbsqjhrfx18vngh0x58f";
+  };
+
+  retdec-support-version = "2019-03-08";
+  retdec-support =
+    { rev = retdec-support-version; } // # for checking the version against the expected version
+    fetchzip {
+      url = "https://github.com/avast-tl/retdec-support/releases/download/${retdec-support-version}/retdec-support_${retdec-support-version}.tar.xz";
+      hash = "sha256-t1tx4MfLW/lwtbO5JQ1nrFBIOeMclq+0dENuXW+ahIM=";
+      stripRoot = false;
+    };
+
+  check-dep = name: dep:
+    ''
+      context="$(grep ${name}_URL --after-context 1 cmake/deps.cmake)"
+      expected="$(echo "$context" | grep --only-matching '".*"')"
+      have="${dep.rev}"
+
+      echo "checking ${name} dependency matches deps.cmake...";
+      if ! echo "$expected" | grep -q "$have"; then
+        printf '%s\n' "${name} version does not match!"  "  nix: $have, expected: $expected"
+        false
+      fi
+    '';
+
+  deps = {
+    CAPSTONE = capstone;
+    LLVM = llvm;
+    YARA = yaracpp;
+    YARAMOD = yaramod;
+    SUPPORT_PKG = retdec-support;
+  } // lib.optionalAttrs enableTests {
+    KEYSTONE = keystone;
+    # nixpkgs googletest is used
+    # GOOGLETEST = googletest;
+  };
+
+  # overwrite install-share.py to copy instead of download.
+  # we use this so the copy happens at the right time in the build,
+  # otherwise, the build process cleans the directory.
+  install-share =
+    writeText
+      "install-share.py"
+      ''
+        import os, sys, shutil, subprocess
+
+        install_path, arch_url, sha256hash_ref, version = sys.argv[1:]
+        support_dir = os.path.join(install_path, 'share', 'retdec', 'support')
+
+        assert os.path.isdir(arch_url), "nix install-share.py expects a path for support url"
+
+        os.makedirs(support_dir, exist_ok=True)
+        shutil.copytree(arch_url, support_dir, dirs_exist_ok=True)
+        subprocess.check_call(['chmod', '-R', 'u+w', support_dir])
+      '';
+in
+stdenv.mkDerivation (self: {
+  pname = "retdec";
+
+  # If you update this you will also need to adjust the versions of the updated dependencies.
+  # I've notified upstream about this problem here:
+  # https://github.com/avast-tl/retdec/issues/412
+  #
+  # The dependencies and their sources are listed in this file:
+  # https://github.com/avast/retdec/blob/master/cmake/deps.cmake
+  version = "5.0";
+
+  src = fetchFromGitHub {
+    owner = "avast";
+    repo = "retdec";
+    rev = "refs/tags/v${self.version}";
+    sha256 = "sha256-H4e+aSgdBBbG6X6DzHGiDEIASPwBVNVsfHyeBTQLAKI=";
+  };
+
+  patches = [
+    # gcc 13 compatibility: https://github.com/avast/retdec/pull/1153
+    (fetchpatch {
+      url = "https://github.com/avast/retdec/commit/dbaab2c3d17b1eae22c581e8ab6bfefadf4ef6ae.patch";
+      hash = "sha256-YqHYPGAGWT4x6C+CpsOSsOIZ+NPM2FBQtGQFs74OUIQ=";
+    })
+  ];
+
+  nativeBuildInputs = [
+    cmake
+    autoconf
+    automake
+    libtool
+    pkg-config
+    bison
+    flex
+    groff
+    perl
+    python3
+  ];
+
+  buildInputs = [
+    openssl
+    ncurses
+    libffi
+    libxml2
+    zlib
+  ] ++ lib.optional self.doInstallCheck gtest;
+
+  cmakeFlags = [
+    (lib.cmakeBool "RETDEC_TESTS" self.doInstallCheck) # build tests
+    (lib.cmakeBool "RETDEC_DEV_TOOLS" buildDevTools) # build tools e.g. capstone2llvmir, retdectool
+    (lib.cmakeBool "RETDEC_COMPILE_YARA" compileYaraPatterns) # build and install compiled patterns
+  ] ++ lib.mapAttrsToList (k: v: lib.cmakeFeature "${k}_URL" "${v}") deps;
+
+  preConfigure =
+    lib.concatStringsSep "\n" (lib.mapAttrsToList check-dep deps)
+    +
+    ''
+      cp -v ${install-share} ./support/install-share.py
+
+      # the CMakeLists assume CMAKE_INSTALL_BINDIR, etc are path components but in Nix, they are absolute.
+      # therefore, we need to remove the unnecessary CMAKE_INSTALL_PREFIX prepend.
+      substituteInPlace ./CMakeLists.txt \
+        --replace-warn "''$"{CMAKE_INSTALL_PREFIX}/"''$"{RETDEC_INSTALL_BIN_DIR} "''$"{CMAKE_INSTALL_FULL_BINDIR} \
+        --replace-warn "''$"{CMAKE_INSTALL_PREFIX}/"''$"{RETDEC_INSTALL_LIB_DIR} "''$"{CMAKE_INSTALL_FULL_LIBDIR} \
+
+      # --replace "''$"{CMAKE_INSTALL_PREFIX}/"''$"{RETDEC_INSTALL_SUPPORT_DIR} "''$"{RETDEC_INSTALL_SUPPORT_DIR}
+      # note! Nix does not set CMAKE_INSTALL_DATADIR to an absolute path, so this replacement would be incorrect
+
+      # similarly for yaramod. here, we fix the LIBDIR to lib64. for whatever reason, only "lib64" works.
+      substituteInPlace deps/yaramod/CMakeLists.txt \
+        --replace-fail "''$"{YARAMOD_INSTALL_DIR}/"''$"{CMAKE_INSTALL_LIBDIR} "''$"{YARAMOD_INSTALL_DIR}/lib64 \
+        --replace-fail CMAKE_ARGS 'CMAKE_ARGS -DCMAKE_INSTALL_LIBDIR=lib64'
+
+      # yara needs write permissions in the generated source directory.
+      echo ${lib.escapeShellArg ''
+        ExternalProject_Add_Step(
+          yara chmod WORKING_DIRECTORY ''${YARA_DIR}
+          DEPENDEES download COMMAND chmod -R u+w .
+        )
+      ''} >> deps/yara/CMakeLists.txt
+
+      # patch gtest to use the system package
+      gtest=deps/googletest/CMakeLists.txt
+      old="$(cat $gtest)"
+      (echo 'find_package(GTest REQUIRED)'; echo "$old") > $gtest
+      sed -i 's/ExternalProject_[^(]\+[(]/ set(IGNORED /g' $gtest
+
+      substituteInPlace $gtest \
+        --replace-fail '$'{GTEST_LIB} "GTest::gtest"\
+        --replace-fail '$'{GMOCK_LIB} "GTest::gmock"\
+        --replace-fail '$'{GTEST_MAIN_LIB} "GTest::gtest_main"\
+        --replace-fail '$'{GMOCK_MAIN_LIB} "GTest::gmock_main"
+
+      # without git history, there is no chance these tests will pass.
+      substituteInPlace tests/utils/version_tests.cpp \
+        --replace-quiet VersionTests DISABLED_VersionTests
+
+      substituteInPlace scripts/retdec-utils.py \
+        --replace-warn /usr/bin/time ${time} \
+        --replace-warn /usr/local/bin/gtime ${time}
+      substituteInPlace scripts/retdec-unpacker.py \
+        --replace-warn "'upx'" "'${upx}'"
+    '';
+
+  doInstallCheck = enableTests;
+  installCheckPhase = ''
+    ${python3.interpreter} "$out/bin/retdec-tests-runner.py"
+
+    rm -rf $out/bin/__pycache__
+  '';
+
+  meta = with lib; {
+    description = "A retargetable machine-code decompiler based on LLVM";
+    homepage = "https://retdec.com";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dtzWill katrinafyi ];
+    platforms = [ "x86_64-linux" ];
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/analysis/rizin/cutter.nix b/nixpkgs/pkgs/development/tools/analysis/rizin/cutter.nix
new file mode 100644
index 000000000000..480f20f04f49
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/rizin/cutter.nix
@@ -0,0 +1,103 @@
+{ lib
+, fetchFromGitHub
+, fetchpatch
+, stdenv
+# for passthru.plugins
+, pkgs
+# nativeBuildInputs
+, cmake
+, pkg-config
+, wrapQtAppsHook
+# Qt
+, qt5compat
+, qtbase
+, qtwayland
+, qtsvg
+, qttools
+, qtwebengine
+# buildInputs
+, graphviz
+, python3
+, rizin
+}:
+
+let cutter = stdenv.mkDerivation rec {
+  pname = "cutter";
+  version = "2.3.2";
+
+  src = fetchFromGitHub {
+    owner = "rizinorg";
+    repo = "cutter";
+    rev = "v${version}";
+    hash = "sha256-88yIqFYIv7o6aC2YSJwWJ46fZJBnOmifv+SirsfS4tw=";
+    fetchSubmodules = true;
+  };
+
+  patches = [
+    # tracking: https://github.com/rizinorg/cutter/pull/3268
+    (fetchpatch {
+      name = "cutter-simplify-python-binding-include-handling.patch";
+      url = "https://github.com/rizinorg/cutter/compare/7256fbb00e92ab12a24d14a92364db482ed295cb..ca5949d9d7c907185cf3d062d9fa71c34c5960d4.diff";
+      hash = "sha256-bqV2FTA8lMNpHBDXdenNx+1cLYa7MH47XKo1YatmLV4=";
+    })
+  ];
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    python3
+    wrapQtAppsHook
+  ];
+
+  propagatedBuildInputs = [
+    python3.pkgs.pyside6
+  ];
+
+  buildInputs = [
+    graphviz
+    python3
+    qt5compat
+    qtbase
+    qtsvg
+    qttools
+    qtwebengine
+    rizin
+  ] ++ lib.optionals stdenv.isLinux [
+    qtwayland
+  ];
+
+  cmakeFlags = [
+    "-DCUTTER_USE_BUNDLED_RIZIN=OFF"
+    "-DCUTTER_ENABLE_PYTHON=ON"
+    "-DCUTTER_ENABLE_PYTHON_BINDINGS=ON"
+    "-DCUTTER_ENABLE_GRAPHVIZ=ON"
+    "-DCUTTER_QT6=ON"
+  ];
+
+  preBuild = ''
+    qtWrapperArgs+=(--prefix PYTHONPATH : "$PYTHONPATH")
+  '';
+
+  passthru = rec {
+    plugins = rizin.plugins // {
+      rz-ghidra = rizin.plugins.rz-ghidra.override {
+        inherit cutter qtbase qtsvg;
+        enableCutterPlugin = true;
+      };
+    };
+    withPlugins = filter: pkgs.callPackage ./wrapper.nix {
+      inherit rizin cutter;
+      isCutter = true;
+      plugins = filter plugins;
+    };
+  };
+
+  meta = with lib; {
+    description = "Free and Open Source Reverse Engineering Platform powered by rizin";
+    homepage = src.meta.homepage;
+    license = licenses.gpl3;
+    mainProgram = "cutter";
+    maintainers = with maintainers; [ mic92 dtzWill ];
+    inherit (rizin.meta) platforms;
+  };
+}; in cutter
diff --git a/nixpkgs/pkgs/development/tools/analysis/rizin/default.nix b/nixpkgs/pkgs/development/tools/analysis/rizin/default.nix
new file mode 100644
index 000000000000..3112e438da05
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/rizin/default.nix
@@ -0,0 +1,134 @@
+{ lib
+, pkgs # for passthru.plugins
+, stdenv
+, fetchurl
+, pkg-config
+, libusb-compat-0_1
+, readline
+, libewf
+, perl
+, zlib
+, openssl
+, file
+, libmspack
+, libzip
+, lz4
+, xxHash
+, xz
+, meson
+, python3
+, cmake
+, ninja
+, capstone
+, tree-sitter
+}:
+
+let rizin = stdenv.mkDerivation rec {
+  pname = "rizin";
+  version = "0.6.3";
+
+  src = fetchurl {
+    url = "https://github.com/rizinorg/rizin/releases/download/v${version}/rizin-src-v${version}.tar.xz";
+    hash = "sha256-lfZMarnm2qnp+lY0OY649s206/LoFNouTLlp0x9FCcI=";
+  };
+
+  mesonFlags = [
+    "-Duse_sys_capstone=enabled"
+    "-Duse_sys_magic=enabled"
+    "-Duse_sys_libzip=enabled"
+    "-Duse_sys_zlib=enabled"
+    "-Duse_sys_lz4=enabled"
+    "-Duse_sys_lzma=enabled"
+    "-Duse_sys_xxhash=enabled"
+    "-Duse_sys_openssl=enabled"
+    "-Duse_sys_libmspack=enabled"
+    "-Duse_sys_tree_sitter=enabled"
+    # this is needed for wrapping (adding plugins) to work
+    "-Dportable=true"
+  ];
+
+  # Normally, Rizin only looks for files in the install prefix. With
+  # portable=true, it instead looks for files in relation to the parent
+  # of the directory of the binary file specified in /proc/self/exe,
+  # caching it. This patch replaces the entire logic to only look at
+  # the env var NIX_RZ_PREFIX
+  patches = [ ./librz-wrapper-support.patch ];
+
+  nativeBuildInputs = [
+    pkg-config
+    meson
+    (python3.withPackages (pp: with pp; [
+      pyyaml
+    ]))
+    ninja
+    cmake
+  ];
+
+  # meson's find_library seems to not use our compiler wrapper if static parameter
+  # is either true/false... We work around by also providing LIBRARY_PATH
+  preConfigure = ''
+    LIBRARY_PATH=""
+    for b in ${toString (map lib.getLib buildInputs)}; do
+      if [[ -d "$b/lib" ]]; then
+        LIBRARY_PATH="$b/lib''${LIBRARY_PATH:+:}$LIBRARY_PATH"
+      fi
+    done
+    export LIBRARY_PATH
+  '' + lib.optionalString stdenv.isDarwin ''
+    substituteInPlace binrz/rizin/macos_sign.sh \
+      --replace 'codesign' '# codesign'
+  '';
+
+  buildInputs = [
+    file
+    libzip
+    capstone
+    readline
+    libusb-compat-0_1
+    libewf
+    perl
+    zlib
+    lz4
+    openssl
+    libmspack
+    tree-sitter
+    xxHash
+    xz
+  ];
+
+  postPatch = ''
+    # find_installation without arguments uses Meson’s Python interpreter,
+    # which does not have any extra modules.
+    # https://github.com/mesonbuild/meson/pull/9904
+    substituteInPlace meson.build \
+      --replace "import('python').find_installation()" "find_program('python3')"
+  '';
+
+  passthru = rec {
+    plugins = {
+      jsdec = pkgs.callPackage ./jsdec.nix {
+        inherit rizin openssl;
+      };
+      rz-ghidra = pkgs.qt6.callPackage ./rz-ghidra.nix {
+        inherit rizin openssl;
+        enableCutterPlugin = false;
+      };
+      # sigdb isn't a real plugin, but it's separated from the main rizin
+      # derivation so that only those who need it will download it
+      sigdb = pkgs.callPackage ./sigdb.nix { };
+    };
+    withPlugins = filter: pkgs.callPackage ./wrapper.nix {
+      inherit rizin;
+      plugins = filter plugins;
+    };
+  };
+
+  meta = {
+    description = "UNIX-like reverse engineering framework and command-line toolset.";
+    homepage = "https://rizin.re/";
+    license = lib.licenses.gpl3Plus;
+    mainProgram = "rizin";
+    maintainers = with lib.maintainers; [ raskin makefu mic92 ];
+    platforms = with lib.platforms; unix;
+  };
+}; in rizin
diff --git a/nixpkgs/pkgs/development/tools/analysis/rizin/jsdec.nix b/nixpkgs/pkgs/development/tools/analysis/rizin/jsdec.nix
new file mode 100644
index 000000000000..df291d169eb5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/rizin/jsdec.nix
@@ -0,0 +1,35 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, meson
+, pkg-config
+, ninja
+, rizin
+, openssl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "jsdec";
+  version = "0.6.0";
+
+  src = fetchFromGitHub {
+    owner = "rizinorg";
+    repo = "jsdec";
+    rev = "v${version}";
+    hash = "sha256-iVaxxPBIJRhZrmejAOL/Fb4k66mGsZOBs7UikgMj5WA=";
+  };
+
+  nativeBuildInputs = [ meson ninja pkg-config ];
+  preConfigure = ''
+    cd p
+  '';
+  mesonFlags = [ "-Djsc_folder=.." ];
+  buildInputs = [ openssl rizin ];
+
+  meta = with lib; {
+    description = "Simple decompiler for Rizin";
+    homepage = src.meta.homepage;
+    license = with licenses; [ asl20 bsd3 mit ];
+    maintainers = with maintainers; [ chayleaf ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/rizin/librz-wrapper-support.patch b/nixpkgs/pkgs/development/tools/analysis/rizin/librz-wrapper-support.patch
new file mode 100644
index 000000000000..23df0d22c69a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/rizin/librz-wrapper-support.patch
@@ -0,0 +1,13 @@
+diff --git a/librz/util/path.c b/librz/util/path.c
+index 8ea3d67..f4a8918 100644
+--- a/librz/util/path.c
++++ b/librz/util/path.c
+@@ -35,6 +35,8 @@ static void fini_portable_prefix(void) {
+ }
+ 
+ static char *set_portable_prefix(void) {
++	return rz_sys_getenv("NIX_RZ_PREFIX");
++
+ 	char *pid_to_path = rz_sys_pid_to_path(rz_sys_getpid());
+ 	if (!pid_to_path) {
+ 		return NULL;
diff --git a/nixpkgs/pkgs/development/tools/analysis/rizin/rz-ghidra.nix b/nixpkgs/pkgs/development/tools/analysis/rizin/rz-ghidra.nix
new file mode 100644
index 000000000000..d2cb95f2d962
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/rizin/rz-ghidra.nix
@@ -0,0 +1,67 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch
+, cmake
+# buildInputs
+, rizin
+, openssl
+, pugixml
+# optional buildInputs
+, enableCutterPlugin ? true
+, cutter
+, qt5compat
+, qtbase
+, qtsvg
+}:
+
+stdenv.mkDerivation rec {
+  pname = "rz-ghidra";
+  version = "0.6.0";
+
+  src = fetchFromGitHub {
+    owner = "rizinorg";
+    repo = "rz-ghidra";
+    rev = "v${version}";
+    hash = "sha256-tQAurouRr6fP1tbIkfd0a9UfeYcwiU1BpjOTcooXkT0=";
+    fetchSubmodules = true;
+  };
+
+  patches = [
+    (fetchpatch {
+      url = "https://github.com/rizinorg/rz-ghidra/pull/327/commits/eba20e2c743ed3dfc5d1be090a5018f7267baa49.patch";
+      hash = "sha256-aoXFClXZBcOnHl+6lLYrnui7sRb3cRJQhQfNDLxHtcs=";
+    })
+  ];
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [
+    openssl
+    pugixml
+    rizin
+  ] ++ lib.optionals enableCutterPlugin [
+    cutter
+    qt5compat
+    qtbase
+    qtsvg
+  ];
+
+  dontWrapQtApps = true;
+
+  cmakeFlags = [
+    "-DUSE_SYSTEM_PUGIXML=ON"
+  ] ++ lib.optionals enableCutterPlugin [
+    "-DBUILD_CUTTER_PLUGIN=ON"
+    "-DCUTTER_INSTALL_PLUGDIR=share/rizin/cutter/plugins/native"
+  ];
+
+  meta = with lib; {
+    # errors out with undefined symbols from Cutter
+    broken = enableCutterPlugin && stdenv.isDarwin;
+    description = "Deep ghidra decompiler and sleigh disassembler integration for rizin";
+    homepage = src.meta.homepage;
+    license = licenses.lgpl3;
+    maintainers = with maintainers; [ chayleaf ];
+    inherit (rizin.meta) platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/rizin/sigdb.nix b/nixpkgs/pkgs/development/tools/analysis/rizin/sigdb.nix
new file mode 100644
index 000000000000..2c4bdaebbaba
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/rizin/sigdb.nix
@@ -0,0 +1,36 @@
+{ lib
+, fetchFromGitHub
+, stdenvNoCC
+}:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "rizin-sigdb";
+  version = "unstable-2023-02-13";
+
+  src = fetchFromGitHub {
+    owner = "rizinorg";
+    # sigdb-source: source files (.pat and etc), around 2.5gb total
+    # sigdb: built and deflated .sig files, around 50mb total
+    repo = "sigdb";
+    rev = "829baf835e3515923266898fd597f7f75046ebd2";
+    hash = "sha256-zvGna2CEsDctc9P7hWTaz7kdtxAtPsXHNWOrRQ9ocdc=";
+  };
+
+  buildPhase = ''
+    mkdir installdir
+    cp -r elf pe installdir
+    .scripts/verify-sigs-install.sh
+  '';
+
+  installPhase = ''
+    mkdir -p $out/share/rizin
+    mv installdir $out/share/rizin/sigdb
+  '';
+
+  meta = with lib; {
+    description = "Rizin FLIRT Signature Database";
+    homepage = src.meta.homepage;
+    license = licenses.lgpl3;
+    maintainers = with lib.maintainers; [ chayleaf ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/rizin/wrapper.nix b/nixpkgs/pkgs/development/tools/analysis/rizin/wrapper.nix
new file mode 100644
index 000000000000..11d046c27f6d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/rizin/wrapper.nix
@@ -0,0 +1,44 @@
+{ lib
+, makeWrapper
+, symlinkJoin
+, plugins
+, rizin
+, isCutter ? false
+, cutter
+}:
+
+let
+  unwrapped = if isCutter then cutter else rizin;
+in
+symlinkJoin {
+  name = "${unwrapped.pname}-with-plugins-${unwrapped.version}";
+
+  # NIX_RZ_PREFIX only changes where *Rizin* locates files (plugins,
+  # themes, etc). But we must change it even for wrapping Cutter, because
+  # Cutter plugins often have associated Rizin plugins. This means that
+  # $out (which NIX_RZ_PREFIX will be set to) must always contain Rizin
+  # files, even if we only wrap Cutter - so for Cutter, include Rizin to
+  # symlinkJoin paths.
+  paths = [ unwrapped ] ++ lib.optional isCutter rizin ++ plugins;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  passthru = {
+    inherit unwrapped;
+  };
+
+  postBuild = ''
+    rm $out/bin/*
+    wrapperArgs=(--set NIX_RZ_PREFIX $out${
+      lib.optionalString isCutter " --prefix XDG_DATA_DIRS : $out/share"
+    })
+    for binary in $(ls ${unwrapped}/bin); do
+      makeWrapper ${unwrapped}/bin/$binary $out/bin/$binary "''${wrapperArgs[@]}"
+    done
+  '';
+
+  meta = unwrapped.meta // {
+    # prefer wrapped over unwrapped
+    priority = (unwrapped.meta.priority or 0) - 1;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/rr/default.nix b/nixpkgs/pkgs/development/tools/analysis/rr/default.nix
new file mode 100644
index 000000000000..412b62593d27
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/rr/default.nix
@@ -0,0 +1,76 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch
+, cmake, pkg-config, which, makeWrapper
+, libpfm, zlib, python3Packages, procps, gdb, capnproto
+}:
+
+stdenv.mkDerivation rec {
+  version = "5.7.0";
+  pname = "rr";
+
+  src = fetchFromGitHub {
+    owner = "mozilla";
+    repo = "rr";
+    rev = version;
+    hash = "sha256-n1Jbhr77bI0AXncY/RquNVSwwnnAXt31RmKtAa1/oHg=";
+  };
+
+  patches = [ ];
+
+  postPatch = ''
+    substituteInPlace src/Command.cc --replace '_BSD_SOURCE' '_DEFAULT_SOURCE'
+    sed '7i#include <math.h>' -i src/Scheduler.cc
+    sed '1i#include <ctime>' -i src/test-monitor/test-monitor.cc
+    patchShebangs .
+  '';
+
+  # With LTO enabled, linking fails with the following message:
+  #
+  # src/AddressSpace.cc:1666: undefined reference to `rr_syscall_addr'
+  # ld.bfd: bin/rr: hidden symbol `rr_syscall_addr' isn't defined
+  # ld.bfd: final link failed: bad value
+  # collect2: error: ld returned 1 exit status
+  #
+  # See also https://github.com/NixOS/nixpkgs/pull/110846
+  preConfigure = ''substituteInPlace CMakeLists.txt --replace "-flto" ""'';
+
+  nativeBuildInputs = [ cmake pkg-config which makeWrapper ];
+  buildInputs = [
+    libpfm zlib python3Packages.python python3Packages.pexpect procps gdb capnproto
+  ];
+  cmakeFlags = [
+    "-Ddisable32bit=ON"
+  ];
+
+  # we turn on additional warnings due to hardening
+  env.NIX_CFLAGS_COMPILE = "-Wno-error";
+
+  hardeningDisable = [ "fortify" ];
+
+  # FIXME
+  doCheck = false;
+
+  preCheck = "export HOME=$TMPDIR";
+
+  # needs GDB to replay programs at runtime
+  preFixup = ''
+    wrapProgram "$out/bin/rr" \
+      --prefix PATH ":" "${lib.makeBinPath [
+        gdb
+      ]}";
+  '';
+
+  meta = {
+    homepage = "https://rr-project.org/";
+    description = "Records nondeterministic executions and debugs them deterministically";
+    longDescription = ''
+      rr aspires to be your primary debugging tool, replacing -- well,
+      enhancing -- gdb. You record a failure once, then debug the
+      recording, deterministically, as many times as you want. Every
+      time the same execution is replayed.
+    '';
+
+    license = with lib.licenses; [ mit bsd2 ];
+    maintainers = with lib.maintainers; [ pierron thoughtpolice ];
+    platforms = [ "i686-linux" "x86_64-linux" "aarch64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/rr/zen_workaround.nix b/nixpkgs/pkgs/development/tools/analysis/rr/zen_workaround.nix
new file mode 100644
index 000000000000..3ec69aabf8d2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/rr/zen_workaround.nix
@@ -0,0 +1,45 @@
+{ stdenv, lib, fetchzip, kernel }:
+
+/* The python script shouldn't be needed for users of this kernel module.
+  https://github.com/rr-debugger/rr/blob/master/scripts/zen_workaround.py
+  The module itself is called "zen_workaround" (a bit generic unfortunately).
+*/
+stdenv.mkDerivation rec {
+  pname = "rr-zen_workaround";
+  version = "2020-09-22";
+
+  src = fetchzip {
+    url = "https://gist.github.com/glandium/01d54cefdb70561b5f6675e08f2990f2/archive/2f430f0c136a69b0886281d0c76708997d8878af.zip";
+    sha256 = "1mbmbyymgl75wparv3rgnyxnc44rd6n935jziz9anl9apy031ryi";
+  };
+
+  hardeningDisable = [ "pic" ];
+  nativeBuildInputs = kernel.moduleBuildDependencies;
+
+  makeFlags = [
+    "-C${kernel.dev}/lib/modules/${kernel.modDirVersion}/build"
+  ];
+  postConfigure = ''
+    makeFlags="$makeFlags M=$(pwd)"
+  '';
+  buildFlags = [ "modules" ];
+
+  installPhase = let
+    modDestDir = "$out/lib/modules/${kernel.modDirVersion}/kernel"; #TODO: longer path?
+  in ''
+    runHook preInstall
+    mkdir -p "${modDestDir}"
+    cp *.ko "${modDestDir}/"
+    find ${modDestDir} -name '*.ko' -exec xz -f '{}' \;
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Kernel module supporting the rr debugger on (some) AMD Zen-based CPUs";
+    homepage = "https://github.com/rr-debugger/rr/wiki/Zen#kernel-module";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.vcunat ];
+    platforms = [ "x86_64-linux" ];
+    broken = versionOlder kernel.version "4.19"; # 4.14 breaks and 4.19 works
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/smatch/default.nix b/nixpkgs/pkgs/development/tools/analysis/smatch/default.nix
new file mode 100644
index 000000000000..2100b72c9878
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/smatch/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, pkg-config
+, sqlite
+, openssl
+, buildllvmsparse ? false
+, buildc2xml ? false
+, libllvm
+, libxml2
+}:
+
+stdenv.mkDerivation rec {
+  pname = "smatch";
+  version = "1.73";
+
+  src = fetchFromGitHub {
+    owner = "error27";
+    repo = "smatch";
+    rev = version;
+    sha256 = "sha256-Pv3bd2cjnQKnhH7TrkYWfDEeaq6u/q/iK1ZErzn6bME=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ sqlite openssl ]
+    ++ lib.optionals buildllvmsparse [ libllvm ]
+    ++ lib.optionals buildc2xml [ libxml2.dev ];
+
+  makeFlags = [ "PREFIX=${placeholder "out"}" "CXX=${stdenv.cc.targetPrefix}c++" ];
+
+  meta = with lib; {
+    description = "A semantic analysis tool for C";
+    homepage = "https://sparse.docs.kernel.org/";
+    maintainers = with maintainers; [ marsam ];
+    license = licenses.gpl2Plus;
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/snowman/default.nix b/nixpkgs/pkgs/development/tools/analysis/snowman/default.nix
new file mode 100644
index 000000000000..870f084580b8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/snowman/default.nix
@@ -0,0 +1,31 @@
+{ lib, mkDerivation, fetchFromGitHub, cmake, boost, qtbase }:
+
+mkDerivation rec {
+  pname = "snowman";
+  version = "0.1.3";
+
+  src = fetchFromGitHub {
+    owner = "yegord";
+    repo = "snowman";
+    rev = "v${version}";
+    sha256 = "1mrmhj2nddi0d47c266vsg5vbapbqbcpj5ld4v1qcwnnk6z2zn0j";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  buildInputs = [ boost qtbase ];
+
+  postUnpack = ''
+    export sourceRoot=$sourceRoot/src
+  '';
+
+  meta = with lib; {
+    description = "Native code to C/C++ decompiler";
+    homepage = "http://derevenets.com/";
+
+    # https://github.com/yegord/snowman/blob/master/doc/licenses.asciidoc
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ dtzWill ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/snyk/default.nix b/nixpkgs/pkgs/development/tools/analysis/snyk/default.nix
new file mode 100644
index 000000000000..fc5db92cb161
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/snyk/default.nix
@@ -0,0 +1,36 @@
+{ buildNpmPackage, fetchFromGitHub, lib, stdenv, testers, snyk }:
+
+buildNpmPackage rec {
+  pname = "snyk";
+  version = "1.1276.0";
+
+  src = fetchFromGitHub {
+    owner = "snyk";
+    repo = "cli";
+    rev = "v${version}";
+    hash = "sha256-l5Xx6z3NbtwdtKe8MmRWTJoKaEH3AZjHKXqoLv3rHfU=";
+  };
+
+  npmDepsHash = "sha256-FJGxCEhBADH4c1khJaVFHL4e25Mq4PHrez+2NPFBx0w=";
+
+  postPatch = ''
+    substituteInPlace package.json --replace '"version": "1.0.0-monorepo"' '"version": "${version}"'
+  '';
+
+  env.NIX_CFLAGS_COMPILE =
+    # Fix error: no member named 'aligned_alloc' in the global namespace
+    lib.optionalString (stdenv.isDarwin && stdenv.isx86_64) "-D_LIBCPP_HAS_NO_LIBRARY_ALIGNED_ALLOCATION=1";
+
+  npmBuildScript = "build:prod";
+
+  passthru.tests.version = testers.testVersion {
+    package = snyk;
+  };
+
+  meta = with lib; {
+    description = "Scans and monitors projects for security vulnerabilities";
+    homepage = "https://snyk.io";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/sparse/default.nix b/nixpkgs/pkgs/development/tools/analysis/sparse/default.nix
new file mode 100644
index 000000000000..497d571cf14c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/sparse/default.nix
@@ -0,0 +1,44 @@
+{ callPackage, fetchurl, lib, stdenv, gtk3, pkg-config, libxml2, llvm, perl, sqlite }:
+
+let
+  GCC_BASE = "${stdenv.cc.cc}/lib/gcc/${stdenv.hostPlatform.uname.processor}-unknown-linux-gnu/${stdenv.cc.cc.version}";
+in stdenv.mkDerivation rec {
+  pname = "sparse";
+  version = "0.6.4";
+
+  src = fetchurl {
+    url = "mirror://kernel/software/devel/sparse/dist/${pname}-${version}.tar.xz";
+    sha256 = "sha256-arKLSZG8au29c1UCkTYKpqs99B9ZIGqb3paQIIpuOHw=";
+  };
+
+  preConfigure = ''
+    sed -i 's|"/usr/include"|"${stdenv.cc.libc.dev}/include"|' pre-process.c
+    sed -i 's|qx(\$ccom -print-file-name=)|"${GCC_BASE}"|' cgcc
+    makeFlags+=" PREFIX=$out"
+  '';
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ gtk3 libxml2 llvm perl sqlite ];
+  doCheck = true;
+  buildFlags = [ "GCC_BASE:=${GCC_BASE}" ];
+
+  # Test failures with "fortify3" on, such as:
+  # +*** buffer overflow detected ***: terminated
+  # +Aborted (core dumped)
+  # error: Actual exit value does not match the expected one.
+  # error: expected 0, got 134.
+  # error: FAIL: test 'bool-float.c' failed
+  hardeningDisable = [ "fortify3" ];
+
+  passthru.tests = {
+    simple-execution = callPackage ./tests.nix { };
+  };
+
+  meta = with lib; {
+    description = "Semantic parser for C";
+    homepage    = "https://git.kernel.org/pub/scm/devel/sparse/sparse.git/";
+    license     = licenses.mit;
+    platforms   = platforms.linux;
+    maintainers = with maintainers; [ thoughtpolice jkarlson ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/sparse/tests.nix b/nixpkgs/pkgs/development/tools/analysis/sparse/tests.nix
new file mode 100644
index 000000000000..5eba254e537a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/sparse/tests.nix
@@ -0,0 +1,24 @@
+{ runCommand, gcc, sparse, writeText }:
+let
+  src = writeText "CODE.c" ''
+    #include <stdio.h>
+    #include <stddef.h>
+    #include <stdlib.h>
+
+    int main(int argc, char *argv[]) {
+      return EXIT_SUCCESS;
+    }
+  '';
+in
+  runCommand "${sparse.pname}-tests" { buildInputs = [ gcc sparse ]; meta.timeout = 3; }
+''
+  set -eu
+  ${sparse}/bin/cgcc ${src} > output 2>&1 || ret=$?
+  if [[ -z $(<output) ]]; then
+    mv output $out
+  else
+    echo "Test build returned $ret"
+    cat output
+    exit 1
+  fi
+''
diff --git a/nixpkgs/pkgs/development/tools/analysis/spin/default.nix b/nixpkgs/pkgs/development/tools/analysis/spin/default.nix
new file mode 100644
index 000000000000..6c0f359fff5d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/spin/default.nix
@@ -0,0 +1,47 @@
+{ stdenv, lib, fetchFromGitHub, makeWrapper, bison, gcc, tk, swarm, graphviz }:
+
+let
+  binPath = lib.makeBinPath [ gcc graphviz tk swarm ];
+in
+
+stdenv.mkDerivation rec {
+  pname = "spin";
+  version = "6.5.2";
+
+  src = fetchFromGitHub {
+    owner = "nimble-code";
+    repo = "Spin";
+    rev = "version-${version}";
+    sha256 = "sha256-drvQXfDZCZRycBZt/VNngy8zs4XVJg+d1b4dQXVcyFU=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ bison ];
+
+  sourceRoot = "${src.name}/Src";
+
+  preBuild = ''
+    mkdir -p $out/bin
+    mkdir -p $out/share/man/man1
+  '';
+
+  enableParallelBuilding = true;
+  makeFlags = [ "DESTDIR=$(out)" ];
+
+  postInstall = ''
+    wrapProgram $out/bin/spin --prefix PATH : ${binPath}
+
+    mkdir -p $out/share/spin
+    cp $src/optional_gui/ispin.tcl $out/share/spin
+    makeWrapper $out/share/spin/ispin.tcl $out/bin/ispin \
+      --prefix PATH : $out/bin:${binPath}
+  '';
+
+  meta = with lib; {
+    description = "Formal verification tool for distributed software systems";
+    homepage = "https://spinroot.com/";
+    license = licenses.bsd3;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ pSub siraben ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/splint/darwin.patch b/nixpkgs/pkgs/development/tools/analysis/splint/darwin.patch
new file mode 100644
index 000000000000..8c435707571d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/splint/darwin.patch
@@ -0,0 +1,13 @@
+diff --git a/src/osd.c b/src/osd.c
+index ebe214a..4ba81d5 100644
+--- a/src/osd.c
++++ b/src/osd.c
+@@ -516,7 +516,7 @@ osd_getPid ()
+ # if defined (WIN32) || defined (OS2) && defined (__IBMC__)
+   int pid = _getpid ();
+ # else
+-  __pid_t pid = getpid ();
++  pid_t pid = getpid ();
+ # endif
+ 
+   return (int) pid;
diff --git a/nixpkgs/pkgs/development/tools/analysis/splint/default.nix b/nixpkgs/pkgs/development/tools/analysis/splint/default.nix
new file mode 100644
index 000000000000..954342550eac
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/splint/default.nix
@@ -0,0 +1,33 @@
+{ fetchurl, lib, stdenv, flex }:
+
+stdenv.mkDerivation rec {
+  pname = "splint";
+  version = "3.1.2";
+
+  src = fetchurl {
+    url = "https://www.splint.org/downloads/${pname}-${version}.src.tgz";
+    sha256 = "02pv8kscsrkrzip9r08pfs9xs98q74c52mlxzbii6cv6vx1vd3f7";
+  };
+
+  patches = [ ./tmpdir.patch ] ++ lib.optional stdenv.isDarwin ./darwin.patch;
+
+  buildInputs = [ flex ];
+
+  doCheck = true;
+
+  meta = with lib; {
+    homepage = "http://www.splint.org/";
+    description = "Annotation-assisted lightweight static analyzer for C";
+
+    longDescription = ''
+      Splint is a tool for statically checking C programs for security
+      vulnerabilities and coding mistakes.  With minimal effort, Splint
+      can be used as a better lint.  If additional effort is invested
+      adding annotations to programs, Splint can perform stronger
+      checking than can be done by any standard lint.
+    '';
+
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/splint/tmpdir.patch b/nixpkgs/pkgs/development/tools/analysis/splint/tmpdir.patch
new file mode 100644
index 000000000000..01402ce943bc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/splint/tmpdir.patch
@@ -0,0 +1,16 @@
+Have Splint honor $TMPDIR.
+
+--- splint-3.1.2/src/context.c	2004-07-31 21:04:26.000000000 +0200
++++ splint-3.1.2/src/context.c	2008-07-11 10:55:16.000000000 +0200
+@@ -801,7 +801,10 @@ context_resetAllFlags (void) 
+                 val = cstring_makeLiteral (env != NULL ? env : DEFAULT_TMPDIR);
+ 	      }
+ # else
+-	      val = cstring_makeLiteral (DEFAULT_TMPDIR);
++	      {
++		char *env = getenv ("TMPDIR");
++		val = cstring_makeLiteral (env != NULL ? env : DEFAULT_TMPDIR);
++	      }
+ # endif /* !defined(OS2) && !defined(MSDOS) */
+ 
+ 	      break;
diff --git a/nixpkgs/pkgs/development/tools/analysis/stylelint/default.nix b/nixpkgs/pkgs/development/tools/analysis/stylelint/default.nix
new file mode 100644
index 000000000000..23afd1aff86e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/stylelint/default.nix
@@ -0,0 +1,24 @@
+{ buildNpmPackage, fetchFromGitHub, lib }:
+
+buildNpmPackage rec {
+  pname = "stylelint";
+  version = "16.2.1";
+
+  src = fetchFromGitHub {
+    owner = "stylelint";
+    repo = "stylelint";
+    rev = version;
+    hash = "sha256-ncJ5oCXe23+an2nFOafMEypFUkwRVW3hZf5pWCKkBNE=";
+  };
+
+  npmDepsHash = "sha256-0+jrfXoM6yqkd43lot3JPB+HBTz3XXzqAulGketRsxU=";
+
+  dontNpmBuild = true;
+
+  meta = with lib; {
+    description = "Mighty CSS linter that helps you avoid errors and enforce conventions";
+    homepage = "https://stylelint.io";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/svlint/default.nix b/nixpkgs/pkgs/development/tools/analysis/svlint/default.nix
new file mode 100644
index 000000000000..a879e0a81153
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/svlint/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, rustPlatform
+, fetchCrate
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "svlint";
+  version = "0.9.2";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-5fPra4kgvykeQnvRtO3enbMIzbh5+nDJ2x0aHYMGiww=";
+  };
+
+  cargoHash = "sha256-R7jqFgMj4YjUbEObdRxxvataYMXe9wq8B8k+t7+Dv30=";
+
+  cargoBuildFlags = [ "--bin" "svlint" ];
+
+  meta = with lib; {
+    description = "SystemVerilog linter";
+    homepage = "https://github.com/dalance/svlint";
+    changelog = "https://github.com/dalance/svlint/blob/v${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ trepetti ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/swarm/default.nix b/nixpkgs/pkgs/development/tools/analysis/swarm/default.nix
new file mode 100644
index 000000000000..cc67ce8123c8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/swarm/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "swarm";
+  version = "unstable-2019-03-11";
+
+  src = fetchFromGitHub {
+    owner = "nimble-code";
+    repo = "swarm";
+    rev = "4b36ed83c8fbb074f2dc5777fe1c0ab4d73cc7d9";
+    sha256 = "18zwlwsiiksivjpg6agmbmg0zsw2fl9475ss66b6pgcsya2q4afs";
+  };
+
+  installPhase = ''
+    install -Dm755 Src/swarm $out/bin/swarm
+    install -Dm644 Doc/swarm.1 $out/share/man/man1/swarm.1
+  '';
+
+  meta = with lib; {
+    description = "Verification script generator for Spin";
+    homepage = "http://spinroot.com/";
+    license = licenses.free;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ abbradar ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/tartan/default.nix b/nixpkgs/pkgs/development/tools/analysis/tartan/default.nix
new file mode 100644
index 000000000000..1106d017cba1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/tartan/default.nix
@@ -0,0 +1,53 @@
+{ stdenv
+, lib
+, fetchFromGitLab
+, meson
+, ninja
+, pkg-config
+, llvmPackages
+, gobject-introspection
+, glib
+, unstableGitUpdater
+}:
+
+stdenv.mkDerivation rec {
+  pname = "tartan";
+  version = "unstable-2021-12-23";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.freedesktop.org";
+    owner = "tartan";
+    repo = "tartan";
+    rev = "bd4ea95d8b3ce1258491e9fac7fcc37d2b241a16";
+    sha256 = "l3duPt8Kh/JljzOV+Dm26XbS7gZ+mmFfYUYofWSJRyo=";
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+  ];
+
+  buildInputs = [
+    gobject-introspection
+    glib
+    llvmPackages.libclang
+    llvmPackages.libllvm
+  ];
+
+  passthru = {
+    updateScript = unstableGitUpdater {
+      # The updater tries src.url by default, which does not exist for fetchFromGitLab (fetchurl).
+      url = "https://gitlab.freedesktop.org/tartan/tartan.git";
+    };
+  };
+
+  meta = with lib; {
+    broken = stdenv.isDarwin;
+    description = "Tools and Clang plugins for developing code with GLib";
+    homepage = "https://freedesktop.org/wiki/Software/tartan";
+    license = licenses.gpl3Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ jtojnar ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/tflint-plugins/default.nix b/nixpkgs/pkgs/development/tools/analysis/tflint-plugins/default.nix
new file mode 100644
index 000000000000..1f4d50a90d10
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/tflint-plugins/default.nix
@@ -0,0 +1,4 @@
+{ callPackage, ... }: {
+  tflint-ruleset-aws = callPackage ./tflint-ruleset-aws.nix { };
+  tflint-ruleset-google = callPackage ./tflint-ruleset-google.nix { };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/tflint-plugins/tflint-ruleset-aws.nix b/nixpkgs/pkgs/development/tools/analysis/tflint-plugins/tflint-ruleset-aws.nix
new file mode 100644
index 000000000000..5aa610fafa85
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/tflint-plugins/tflint-ruleset-aws.nix
@@ -0,0 +1,38 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "tflint-ruleset-aws";
+  version = "0.29.0";
+
+  src = fetchFromGitHub {
+    owner = "terraform-linters";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-tqHlvJyLRhREKnuMUP479xuD0PjdCZfIMj4L44skiSE=";
+  };
+
+  vendorHash = "sha256-vEkrDwsetW4HtbcgkhcaK42v/CKfRlIoHgYzjoTavqk=";
+
+  # upstream Makefile also does a  go test $(go list ./... | grep -v integration)
+  preCheck = ''
+    rm integration/integration_test.go
+  '';
+
+  postInstall = ''
+    mkdir -p $out/github.com/terraform-linters/${pname}/${version}
+    mv $out/bin/${pname} $out/github.com/terraform-linters/${pname}/${version}/
+    # remove other binaries from bin
+    rm -R $out/bin
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/terraform-linters/tflint-ruleset-aws";
+    changelog = "https://github.com/terraform-linters/tflint-ruleset-aws/blob/v${version}/CHANGELOG.md";
+    description = "TFLint ruleset plugin for Terraform AWS Provider";
+    maintainers = with maintainers; [ flokli ];
+    license = with licenses; [ mpl20 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/tflint-plugins/tflint-ruleset-google.nix b/nixpkgs/pkgs/development/tools/analysis/tflint-plugins/tflint-ruleset-google.nix
new file mode 100644
index 000000000000..646cb81d102d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/tflint-plugins/tflint-ruleset-google.nix
@@ -0,0 +1,38 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "tflint-ruleset-google";
+  version = "0.26.0";
+
+  src = fetchFromGitHub {
+    owner = "terraform-linters";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-VQm7pvZCfkZR54UeaPuKogEqhQOy5BAV7WkfwCW3C7c=";
+  };
+
+  vendorHash = "sha256-C52b11cJE2Bu785SNlTsbgNR6Wt/YeY8l1U/9anXrMo=";
+
+  # upstream Makefile also does a go test $(go list ./... | grep -v integration)
+  preCheck = ''
+    rm integration/integration_test.go
+  '';
+
+  subPackages = [ "." ];
+
+  postInstall = ''
+    mkdir -p $out/github.com/terraform-linters/${pname}/${version}
+    mv $out/bin/${pname} $out/github.com/terraform-linters/${pname}/${version}/
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/terraform-linters/tflint-ruleset-google";
+    description = "TFLint ruleset plugin for Terraform Google Provider";
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ john-rodewald ];
+    license = with licenses; [ mpl20 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/tflint/default.nix b/nixpkgs/pkgs/development/tools/analysis/tflint/default.nix
new file mode 100644
index 000000000000..e59d0ad11d0f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/tflint/default.nix
@@ -0,0 +1,53 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, runCommand
+, makeWrapper
+, tflint
+, tflint-plugins
+, symlinkJoin
+}:
+
+buildGoModule rec {
+  pname = "tflint";
+  version = "0.50.3";
+
+  src = fetchFromGitHub {
+    owner = "terraform-linters";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-PfPynSPuMhiyQW9f6HY2WDNlmtltU4xOo0A88I/bCuI=";
+  };
+
+  vendorHash = "sha256-HjvEbEfPVeqAVmVKCJHYPSZjZc19DV1HDaz/HcBJAUg=";
+
+  doCheck = false;
+
+  subPackages = [ "." ];
+
+  ldflags = [ "-s" "-w" ];
+
+  passthru.withPlugins = plugins:
+    let
+      actualPlugins = plugins tflint-plugins;
+      pluginDir = symlinkJoin {
+        name = "tflint-plugin-dir";
+        paths = [ actualPlugins ];
+      };
+    in
+    runCommand "tflint-with-plugins"
+      {
+        nativeBuildInputs = [ makeWrapper ];
+      } ''
+      makeWrapper ${tflint}/bin/tflint $out/bin/tflint \
+        --set TFLINT_PLUGIN_DIR "${pluginDir}"
+    '';
+
+  meta = with lib; {
+    description = "Terraform linter focused on possible errors, best practices, and so on";
+    homepage = "https://github.com/terraform-linters/tflint";
+    changelog = "https://github.com/terraform-linters/tflint/blob/v${version}/CHANGELOG.md";
+    license = licenses.mpl20;
+    maintainers = [ maintainers.marsam ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/tfsec/default.nix b/nixpkgs/pkgs/development/tools/analysis/tfsec/default.nix
new file mode 100644
index 000000000000..28a780a24101
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/tfsec/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "tfsec";
+  version = "1.28.5";
+
+  src = fetchFromGitHub {
+    owner = "aquasecurity";
+    repo = "tfsec";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-zMOAXuMOuWzV5uqzNvw+2DiEA9o/80v7DW5KDhoT/fg=";
+  };
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=github.com/aquasecurity/tfsec/version.Version=v${version}"
+    ## not sure if this is needed (https://github.com/aquasecurity/tfsec/blob/master/.goreleaser.yml#L6)
+    # "-extldflags '-fno-PIC -static'"
+  ];
+
+  vendorHash = "sha256-nBjlsDFjkqwFBwNnGk8WC+XM5xBuopyrloPlQyOReuY=";
+
+  subPackages = [
+    "cmd/tfsec"
+    "cmd/tfsec-docs"
+    "cmd/tfsec-checkgen"
+  ];
+
+  meta = with lib; {
+    description = "Static analysis powered security scanner for terraform code";
+    homepage = "https://github.com/aquasecurity/tfsec";
+    changelog = "https://github.com/aquasecurity/tfsec/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab marsam peterromfeldhk ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/uefi-firmware-parser/default.nix b/nixpkgs/pkgs/development/tools/analysis/uefi-firmware-parser/default.nix
new file mode 100644
index 000000000000..b879a6ef2374
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/uefi-firmware-parser/default.nix
@@ -0,0 +1,30 @@
+{ lib, python3, fetchFromGitHub }:
+
+with python3.pkgs;
+
+buildPythonApplication rec {
+  pname = "uefi-firmware-parser";
+  version = "1.8";
+
+  # Version 1.8 is not published on pypi
+  src = fetchFromGitHub {
+    owner = "theopolis";
+    repo = "uefi-firmware-parser";
+    rev = "v${version}";
+    sha256 = "1yn9vi91j1yxkn0icdnjhgl0qrqqkzyhccj39af4f19q1gdw995l";
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/theopolis/uefi-firmware-parser/";
+    description = "Parse BIOS/Intel ME/UEFI firmware related structures: Volumes, FileSystems, Files, etc";
+    # MIT + license headers in some files
+    license = with licenses; [
+      mit
+      zlib         # uefi_firmware/me.py
+      bsd2         # uefi_firmware/compression/Tiano/**/*
+      publicDomain # uefi_firmware/compression/LZMA/SDK/C/*
+    ];
+    platforms = [ "x86_64-linux" "aarch64-linux" ];
+    maintainers = [ maintainers.samueldr ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/valgrind/default.nix b/nixpkgs/pkgs/development/tools/analysis/valgrind/default.nix
new file mode 100644
index 000000000000..c8046b68cd96
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/valgrind/default.nix
@@ -0,0 +1,137 @@
+{ lib, stdenv, fetchurl, fetchpatch
+, autoreconfHook, perl
+, gdb, cctools, xnu, bootstrap_cmds
+, writeScript
+}:
+
+stdenv.mkDerivation rec {
+  pname = "valgrind";
+  version = "3.22.0";
+
+  src = fetchurl {
+    url = "https://sourceware.org/pub/${pname}/${pname}-${version}.tar.bz2";
+    hash = "sha256-yBHbWt0sX3KZRMr0fE56Zdyqu5Rh5HK1eHZd179tLUw=";
+  };
+
+  patches = [
+    # Fix build on ELFv2 powerpc64
+    # https://bugs.kde.org/show_bug.cgi?id=398883
+    (fetchurl {
+      url = "https://github.com/void-linux/void-packages/raw/3e16b4606235885463fc9ab45b4c120f1a51aa28/srcpkgs/valgrind/patches/elfv2-ppc64-be.patch";
+      sha256 = "NV/F+5aqFZz7+OF5oN5MUTpThv4H5PEY9sBgnnWohQY=";
+    })
+    # Fix checks on Musl.
+    # https://bugs.kde.org/show_bug.cgi?id=453929
+    (fetchpatch {
+      url = "https://bugsfiles.kde.org/attachment.cgi?id=148912";
+      sha256 = "Za+7K93pgnuEUQ+jDItEzWlN0izhbynX2crSOXBBY/I=";
+    })
+    # Fix build on armv7l.
+    # https://bugs.kde.org/show_bug.cgi?id=454346
+    (fetchpatch {
+      url = "https://bugsfiles.kde.org/attachment.cgi?id=149172";
+      sha256 = "sha256-4MASLsEK8wcshboR4YOc6mIt7AvAgDPvqIZyHqlvTEs=";
+    })
+    (fetchpatch {
+      url = "https://bugsfiles.kde.org/attachment.cgi?id=149173";
+      sha256 = "sha256-jX9hD4utWRebbXMJYZ5mu9jecvdrNP05E5J+PnKRTyQ=";
+    })
+    (fetchpatch {
+      url = "https://bugsfiles.kde.org/attachment.cgi?id=149174";
+      sha256 = "sha256-f1YIFIhWhXYVw3/UNEWewDak2mvbAd3aGzK4B+wTlys=";
+    })
+  ];
+
+  outputs = [ "out" "dev" "man" "doc" ];
+
+  hardeningDisable = [ "pie" "stackprotector" ];
+
+  # GDB is needed to provide a sane default for `--db-command'.
+  # Perl is needed for `callgrind_{annotate,control}'.
+  buildInputs = [ gdb perl ]  ++ lib.optionals (stdenv.isDarwin) [ bootstrap_cmds xnu ];
+
+  # Perl is also a native build input.
+  nativeBuildInputs = [ autoreconfHook perl ];
+
+  enableParallelBuilding = true;
+  separateDebugInfo = stdenv.isLinux;
+
+  preConfigure = lib.optionalString stdenv.isFreeBSD ''
+    substituteInPlace configure --replace '`uname -r`' \
+        ${toString stdenv.hostPlatform.parsed.kernel.version}.0-
+  '' + lib.optionalString stdenv.isDarwin (
+    let OSRELEASE = ''
+      $(awk -F '"' '/#define OSRELEASE/{ print $2 }' \
+      <${xnu}/Library/Frameworks/Kernel.framework/Headers/libkern/version.h)'';
+    in ''
+      echo "Don't derive our xnu version using uname -r."
+      substituteInPlace configure --replace "uname -r" "echo ${OSRELEASE}"
+
+      # Apple's GCC doesn't recognize `-arch' (as of version 4.2.1, build 5666).
+      echo "getting rid of the \`-arch' GCC option..."
+      find -name Makefile\* -exec \
+        sed -i {} -e's/DARWIN\(.*\)-arch [^ ]\+/DARWIN\1/g' \;
+
+      sed -i coregrind/link_tool_exe_darwin.in \
+          -e 's/^my \$archstr = .*/my $archstr = "x86_64";/g'
+
+      substituteInPlace coregrind/m_debuginfo/readmacho.c \
+         --replace /usr/bin/dsymutil ${stdenv.cc.bintools.bintools}/bin/dsymutil
+
+      echo "substitute hardcoded /usr/bin/ld with ${cctools}/bin/ld"
+      substituteInPlace coregrind/link_tool_exe_darwin.in \
+        --replace /usr/bin/ld ${cctools}/bin/ld
+    '');
+
+  configureFlags =
+    lib.optional stdenv.hostPlatform.isx86_64 "--enable-only64bit"
+    ++ lib.optional stdenv.hostPlatform.isDarwin "--with-xcodedir=${xnu}/include";
+
+  doCheck = true;
+
+  postInstall = ''
+    for i in $out/libexec/valgrind/*.supp; do
+      substituteInPlace $i \
+        --replace 'obj:/lib' 'obj:*/lib' \
+        --replace 'obj:/usr/X11R6/lib' 'obj:*/lib' \
+        --replace 'obj:/usr/lib' 'obj:*/lib'
+    done
+  '';
+
+  passthru = {
+    updateScript = writeScript "update-valgrind" ''
+      #!/usr/bin/env nix-shell
+      #!nix-shell -i bash -p curl pcre common-updater-scripts
+
+      set -eu -o pipefail
+
+      # Expect the text in format of:
+      #  'Current release: <a href="/downloads/current.html#current">valgrind-3.19.0</a>'
+      new_version="$(curl -s https://valgrind.org/ |
+          pcregrep -o1 'Current release: .*>valgrind-([0-9.]+)</a>')"
+      update-source-version ${pname} "$new_version"
+    '';
+  };
+
+  meta = {
+    homepage = "http://www.valgrind.org/";
+    description = "Debugging and profiling tool suite";
+
+    longDescription = ''
+      Valgrind is an award-winning instrumentation framework for
+      building dynamic analysis tools.  There are Valgrind tools that
+      can automatically detect many memory management and threading
+      bugs, and profile your programs in detail.  You can also use
+      Valgrind to build new tools.
+    '';
+
+    license = lib.licenses.gpl2Plus;
+
+    maintainers = [ lib.maintainers.eelco ];
+    platforms = with lib.platforms; lib.intersectLists
+      (x86 ++ power ++ s390x ++ armv7 ++ aarch64 ++ mips)
+      (darwin ++ freebsd ++ illumos ++ linux);
+    badPlatforms = [ lib.systems.inspect.platformPatterns.isStatic ];
+    broken = stdenv.isDarwin; # https://hydra.nixos.org/build/128521440/nixlog/2
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/yallback/default.nix b/nixpkgs/pkgs/development/tools/analysis/yallback/default.nix
new file mode 100644
index 000000000000..4e62ff5b9ed8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/yallback/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, makeWrapper
+, coreutils
+, bashInteractive
+}:
+
+stdenv.mkDerivation rec {
+  version = "0.2.0";
+  pname = "yallback";
+  src = fetchFromGitHub {
+    owner = "abathur";
+    repo = "yallback";
+    rev = "v${version}";
+    hash = "sha256-t+fdnDJMFiFqN23dSY3TnsZsIDcravtwdNKJ5MiZosE=";
+  };
+
+  buildInputs = [ coreutils bashInteractive ];
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    install -Dv yallback $out/bin/yallback
+    wrapProgram $out/bin/yallback --prefix PATH : ${lib.makeBinPath [ coreutils ]}
+  '';
+
+  meta = with lib; {
+    description = "Callbacks for YARA rule matches";
+    homepage = "https://github.com/abathur/yallback";
+    license = licenses.mit;
+    maintainers = with maintainers; [ abathur ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ansi/default.nix b/nixpkgs/pkgs/development/tools/ansi/default.nix
new file mode 100644
index 000000000000..77ddf81a269a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ansi/default.nix
@@ -0,0 +1,25 @@
+{ fetchCrate, lib, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "ansi-escape-sequences-cli";
+  version = "0.1.4";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-KGPlNXkF16VdoOb3tg3nsQRdtgU83z7ibPy965bvvDk=";
+  };
+
+  cargoHash = "sha256-Q46VKBrOsjqUeSruuK/Bur2L69JAGr3c+ianfPlfzi0=";
+
+  meta = {
+    description = "Quickly get ANSI escape sequences";
+    longDescription = ''
+      CLI utility called "ansi" to quickly get ANSI escape sequences. Supports
+      the colors and styles, such as bold or italic.
+    '';
+    homepage = "https://github.com/phip1611/ansi-escape-sequences-cli";
+    license = with lib.licenses; [ mit ];
+    maintainers = with lib.maintainers; [ phip1611 ];
+    mainProgram = "ansi";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/api-linter/default.nix b/nixpkgs/pkgs/development/tools/api-linter/default.nix
new file mode 100644
index 000000000000..97bda5410596
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/api-linter/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "api-linter";
+  version = "1.63.3";
+
+  src = fetchFromGitHub {
+    owner = "googleapis";
+    repo = "api-linter";
+    rev = "v${version}";
+    hash = "sha256-mcmp3M9KhZp3j18jh+3v5fwPPLRs2hkrRUN3RM/zCmo=";
+  };
+
+  vendorHash = "sha256-/z2FqMyZnn2A5aajimTS2zw3A1v5v0uYZY81acuQOnw=";
+
+  subPackages = [ "cmd/api-linter" ];
+
+  ldflags = [
+    "-s"
+    "-w"
+  ];
+
+  meta = with lib; {
+    description = "Linter for APIs defined in protocol buffers";
+    homepage = "https://github.com/googleapis/api-linter/";
+    changelog = "https://github.com/googleapis/api-linter/releases/tag/${src.rev}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ xrelkd ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/apkid/default.nix b/nixpkgs/pkgs/development/tools/apkid/default.nix
new file mode 100644
index 000000000000..b4c02c8eac19
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/apkid/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "apkid";
+  version = "2.1.5";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "rednaga";
+    repo = "APKiD";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-yO3k2kT043/KkiCjDnNUlqxX86kQqMZ+CghD+yon3r4=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    yara-python
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    pytestCheckHook
+  ];
+
+  preBuild = ''
+    # Prepare the YARA rules
+    ${python3.interpreter} prep-release.py
+  '';
+
+  postPatch = ''
+    # We have dex support enabled in yara-python
+    substituteInPlace setup.py \
+      --replace "yara-python-dex>=1.0.1" "yara-python"
+  '';
+
+  pythonImportsCheck = [
+    "apkid"
+  ];
+
+  meta = with lib; {
+    description = "Android Application Identifier";
+    homepage = "https://github.com/rednaga/APKiD";
+    license = with licenses; [ gpl3Only ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/apko/default.nix b/nixpkgs/pkgs/development/tools/apko/default.nix
new file mode 100644
index 000000000000..ca056a7f4d94
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/apko/default.nix
@@ -0,0 +1,76 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+}:
+
+buildGoModule rec {
+  pname = "apko";
+  version = "0.10.0";
+
+  src = fetchFromGitHub {
+    owner = "chainguard-dev";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-Dyu/cPoYI8dm/p/91oL5g8ilz9ksw4i0opsPT6rGztc=";
+    # populate values that require us to use git. By doing this in postFetch we
+    # can delete .git afterwards and maintain better reproducibility of the src.
+    leaveDotGit = true;
+    postFetch = ''
+      cd "$out"
+      git rev-parse HEAD > $out/COMMIT
+      # '0000-00-00T00:00:00Z'
+      date -u -d "@$(git log -1 --pretty=%ct)" "+'%Y-%m-%dT%H:%M:%SZ'" > $out/SOURCE_DATE_EPOCH
+      find "$out" -name .git -print0 | xargs -0 rm -rf
+    '';
+  };
+  vendorHash = "sha256-Jsp4rGIltszpQe05S3W+UFzPxhb6N5lCzUaZWBkXNWY=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X sigs.k8s.io/release-utils/version.gitVersion=v${version}"
+    "-X sigs.k8s.io/release-utils/version.gitTreeState=clean"
+  ];
+
+  # ldflags based on metadata from git and source
+  preBuild = ''
+    ldflags+=" -X sigs.k8s.io/release-utils/version.gitCommit=$(cat COMMIT)"
+    ldflags+=" -X sigs.k8s.io/release-utils/version.buildDate=$(cat SOURCE_DATE_EPOCH)"
+  '';
+
+  checkFlags = [
+    # networking required to fetch alpine-keys
+    # pulled out into a separate library next release
+    "-skip=TestInitDB"
+    # fails to build image on read-only filesystem
+    "-skip=TestPublish"
+  ];
+
+  postInstall = ''
+    installShellCompletion --cmd apko \
+      --bash <($out/bin/apko completion bash) \
+      --fish <($out/bin/apko completion fish) \
+      --zsh <($out/bin/apko completion zsh)
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+
+    $out/bin/apko --help
+    $out/bin/apko version 2>&1 | grep "v${version}"
+
+    runHook postInstallCheck
+  '';
+
+  meta = with lib; {
+    homepage = "https://apko.dev/";
+    changelog = "https://github.com/chainguard-dev/apko/blob/main/NEWS.md";
+    description = "Build OCI images using APK directly without Dockerfile";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ jk developer-guy ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/apksigcopier/default.nix b/nixpkgs/pkgs/development/tools/apksigcopier/default.nix
new file mode 100644
index 000000000000..13cb0300d7f8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/apksigcopier/default.nix
@@ -0,0 +1,75 @@
+{ lib
+, apksigner
+, bash
+, fetchFromGitHub
+, installShellFiles
+, pandoc
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "apksigcopier";
+  version = "1.1.1";
+
+  src = fetchFromGitHub {
+    owner = "obfusk";
+    repo = "apksigcopier";
+    rev = "refs/tags/v${version}";
+    sha256 = "sha256-VuwSaoTv5qq1jKwgBTKd1y9RKUzz89n86Z4UBv7Q51o=";
+  };
+
+  nativeBuildInputs = [
+    installShellFiles
+    pandoc
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    click
+  ];
+
+  makeWrapperArgs = [
+    "--prefix"
+    "PATH"
+    ":"
+    "${lib.makeBinPath [ apksigner ]}"
+  ];
+
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace /bin/bash ${bash}/bin/bash
+  '';
+
+  postBuild = ''
+    make ${pname}.1
+  '';
+
+  postInstall = ''
+    installManPage ${pname}.1
+  '';
+
+  doInstallCheck = true;
+
+  installCheckPhase = ''
+    runHook preInstallCheck
+    $out/bin/apksigcopier --version | grep "${version}"
+    runHook postInstallCheck
+  '';
+
+  meta = with lib; {
+    description = "Copy/extract/patch android apk signatures & compare APKs";
+    longDescription = ''
+      apksigcopier is a tool for copying android APK signatures from a signed
+      APK to an unsigned one (in order to verify reproducible builds).
+      It can also be used to compare two APKs with different signatures.
+      Its command-line tool offers four operations:
+
+      * copy signatures directly from a signed to an unsigned APK
+      * extract signatures from a signed APK to a directory
+      * patch previously extracted signatures onto an unsigned APK
+      * compare two APKs with different signatures (requires apksigner)
+    '';
+    homepage = "https://github.com/obfusk/apksigcopier";
+    license = with licenses; [ gpl3Plus ];
+    maintainers = with maintainers; [ obfusk ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/apksigner/default.nix b/nixpkgs/pkgs/development/tools/apksigner/default.nix
new file mode 100644
index 000000000000..95656dd20303
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/apksigner/default.nix
@@ -0,0 +1,94 @@
+{ lib
+, stdenv
+, fetchgit
+, openjdk17_headless
+, gradle_7
+, perl
+, makeWrapper
+}:
+let
+  gradle = gradle_7;
+in
+stdenv.mkDerivation rec {
+  pname = "apksigner";
+  version = "33.0.1";
+
+  src = fetchgit {
+    # use pname here because the final jar uses this as the filename
+    name = pname;
+    url = "https://android.googlesource.com/platform/tools/apksig";
+    rev = "platform-tools-${version}";
+    hash = "sha256-CKvwB9Bb12QvkL/HBOwT6DhA1PI45+QnTNfwnvReGUQ=";
+  };
+
+  postPatch = ''
+    cat >> build.gradle <<EOF
+
+    apply plugin: 'application'
+    mainClassName = "com.android.apksigner.ApkSignerTool"
+    sourceSets.main.java.srcDirs = [ 'src/apksigner/java', 'src/main/java' ]
+    jar {
+        manifest { attributes "Main-Class": "com.android.apksigner.ApkSignerTool" }
+        from { (configurations.runtimeClasspath).collect { it.isDirectory() ? it : zipTree(it) } } {
+            exclude 'META-INF/*.RSA', 'META-INF/*.SF', 'META-INF/*.DSA', 'META-INF/native/*.dll'
+        }
+        from('src/apksigner/java') {
+            include 'com/android/apksigner/*.txt'
+        }
+    }
+    EOF
+    sed -i -e '/conscrypt/s/testImplementation/implementation/' build.gradle
+  '';
+
+  # fake build to pre-download deps into fixed-output derivation
+  deps = stdenv.mkDerivation {
+    pname = "${pname}-deps";
+    inherit src version postPatch;
+    nativeBuildInputs = [ gradle perl ];
+    buildPhase = ''
+      export GRADLE_USER_HOME=$(mktemp -d)
+      gradle --no-daemon build
+    '';
+    # perl code mavenizes pathes (com.squareup.okio/okio/1.13.0/a9283170b7305c8d92d25aff02a6ab7e45d06cbe/okio-1.13.0.jar -> com/squareup/okio/okio/1.13.0/okio-1.13.0.jar)
+    installPhase = ''
+      find $GRADLE_USER_HOME/caches/modules-2 -type f -regex '.*\.\(jar\|pom\)' \
+        | perl -pe 's#(.*/([^/]+)/([^/]+)/([^/]+)/[0-9a-f]{30,40}/([^/\s]+))$# ($x = $2) =~ tr|\.|/|; "install -Dm444 $1 \$out/$x/$3/$4/''${\($5 =~ s/okio-jvm/okio/r)}" #e' \
+        | sh
+    '';
+    # Don't move info to share/
+    forceShare = [ "dummy" ];
+    outputHashMode = "recursive";
+    # Downloaded jars differ by platform
+    outputHash = "sha256-cs95YI0SpvzCo5x5trMXlVUGepNKIH9oZ95AfLErKIU=";
+  };
+
+  preBuild = ''
+    # Use the local packages from -deps
+    sed -i -e '/repositories {/a maven { url uri("${deps}") }' build.gradle
+  '';
+
+  buildPhase = ''
+    runHook preBuild
+
+    export GRADLE_USER_HOME=$(mktemp -d)
+    gradle --offline --no-daemon build
+
+    runHook postBuild
+  '';
+
+  nativeBuildInputs = [ gradle makeWrapper ];
+
+  installPhase = ''
+    install -Dm444 build/libs/apksigner.jar -t $out/lib
+    makeWrapper "${openjdk17_headless}/bin/java" "$out/bin/apksigner" \
+      --add-flags "-jar $out/lib/apksigner.jar"
+  '';
+
+  meta = with lib; {
+    description = "Command line tool to sign and verify Android APKs";
+    homepage = "https://developer.android.com/studio/command-line/apksigner";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ linsui ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/apktool/default.nix b/nixpkgs/pkgs/development/tools/apktool/default.nix
new file mode 100644
index 000000000000..f475fb54d1cb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/apktool/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, stdenv
+, fetchurl
+, makeWrapper
+, jdk_headless
+, aapt
+}:
+
+stdenv.mkDerivation rec {
+  pname = "apktool";
+  version = "2.9.3";
+
+  src = fetchurl {
+    urls = [
+      "https://bitbucket.org/iBotPeaches/apktool/downloads/apktool_${version}.jar"
+      "https://github.com/iBotPeaches/Apktool/releases/download/v${version}/apktool_${version}.jar"
+    ];
+    hash = "sha256-eVbrBBlDAM4NCoStGHce68lLifuNHdzOjqTAVoGGRvQ=";
+  };
+
+  dontUnpack = true;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  sourceRoot = ".";
+
+  installPhase =
+    ''
+      install -D ${src} "$out/libexec/apktool/apktool.jar"
+      mkdir -p "$out/bin"
+      makeWrapper "${jdk_headless}/bin/java" "$out/bin/apktool" \
+          --add-flags "-jar $out/libexec/apktool/apktool.jar" \
+          --prefix PATH : ${lib.getBin aapt}
+    '';
+
+  meta = with lib; {
+    description = "A tool for reverse engineering Android apk files";
+    homepage = "https://ibotpeaches.github.io/Apktool/";
+    changelog = "https://github.com/iBotPeaches/Apktool/releases/tag/v${version}";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.asl20;
+    maintainers = with maintainers; [ offline ];
+    platforms = with platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/appthreat-depscan/default.nix b/nixpkgs/pkgs/development/tools/appthreat-depscan/default.nix
new file mode 100644
index 000000000000..f9bed90f8ba4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/appthreat-depscan/default.nix
@@ -0,0 +1,53 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "appthreat-depscan";
+  version = "3.6.0";
+
+  src = fetchFromGitHub {
+    owner = "AppThreat";
+    repo = "dep-scan";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-U8vHwdL1O54X0jPhcjTN/J1U7dKQgFEMfc6lbXe2Ff0=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    appthreat-vulnerability-db
+    defusedxml
+    pyyaml
+    rich
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    pytestCheckHook
+  ];
+
+  postPatch = ''
+    substituteInPlace pytest.ini \
+      --replace " --cov-append --cov-report term --cov depscan" ""
+  '';
+
+  preCheck = ''
+    export HOME=$(mktemp -d);
+  '';
+
+  disabledTests = [
+    # Assertion Error
+    "test_query_metadata2"
+  ];
+
+  pythonImportsCheck = [
+    "depscan"
+  ];
+
+  meta = with lib; {
+    description = "Tool to audit dependencies based on known vulnerabilities and advisories";
+    homepage = "https://github.com/AppThreat/dep-scan";
+    changelog = "https://github.com/AppThreat/dep-scan/releases/tag/v${version}";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/argc/default.nix b/nixpkgs/pkgs/development/tools/argc/default.nix
new file mode 100644
index 000000000000..43e9076110d9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/argc/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, installShellFiles
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "argc";
+  version = "1.14.0";
+
+  src = fetchFromGitHub {
+    owner = "sigoden";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-Li/K5/SLG6JuoRJDz2DQoj1Oi9LQgZWHNvtZ1HVbj88=";
+  };
+
+  cargoHash = "sha256-D1T9FWTvwKtAYoqFlR2OmLRLGWhPJ9D8J7lq/QKcBoM=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    installShellCompletion --cmd argc \
+      --bash <($out/bin/argc --argc-completions bash) \
+      --fish <($out/bin/argc --argc-completions fish) \
+      --zsh <($out/bin/argc --argc-completions zsh)
+  '';
+
+  meta = with lib; {
+    description = "A command-line options, arguments and sub-commands parser for bash";
+    homepage = "https://github.com/sigoden/argc";
+    changelog = "https://github.com/sigoden/argc/releases/tag/v${version}";
+    license = with licenses; [ mit /* or */ asl20 ];
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ashpd-demo/default.nix b/nixpkgs/pkgs/development/tools/ashpd-demo/default.nix
new file mode 100644
index 000000000000..a6122e106092
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ashpd-demo/default.nix
@@ -0,0 +1,75 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, nix-update-script
+, cargo
+, meson
+, ninja
+, rustPlatform
+, rustc
+, pkg-config
+, glib
+, libshumate
+, gst_all_1
+, gtk4
+, libadwaita
+, llvmPackages
+, glibc
+, pipewire
+, wayland
+, wrapGAppsHook4
+, desktop-file-utils
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "ashpd-demo";
+  version = "0.4.1";
+
+  src = fetchFromGitHub {
+    owner = "bilelmoussaoui";
+    repo = "ashpd";
+    rev = "${finalAttrs.version}-demo";
+    hash = "sha256-fIyJEUcyTcjTbBycjuJb99wALQelMT7Zq6PHKcL2F80=";
+  };
+
+  cargoDeps = rustPlatform.fetchCargoTarball {
+    src = "${finalAttrs.src}/ashpd-demo";
+    hash = "sha256-ldflCBErM9w3eO2DwWfYTrdO7lowZtqfj7Fft6Crl1w=";
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    cargo
+    rustPlatform.cargoSetupHook
+    rustc
+    wrapGAppsHook4
+    rustPlatform.bindgenHook
+    desktop-file-utils
+    glib # for glib-compile-schemas
+  ];
+
+  buildInputs = [
+    glib
+    gtk4
+    gst_all_1.gstreamer
+    gst_all_1.gst-plugins-base
+    libadwaita
+    pipewire
+    wayland
+    libshumate
+  ];
+
+  postPatch = ''
+    cd ashpd-demo
+  '';
+
+  meta = with lib; {
+    description = "Tool for playing with XDG desktop portals";
+    homepage = "https://github.com/bilelmoussaoui/ashpd/tree/master/ashpd-demo";
+    license = licenses.mit;
+    maintainers = with maintainers; [ jtojnar ];
+    platforms = platforms.linux;
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/asmfmt/default.nix b/nixpkgs/pkgs/development/tools/asmfmt/default.nix
new file mode 100644
index 000000000000..a6f15c15c0b5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/asmfmt/default.nix
@@ -0,0 +1,39 @@
+{ buildGoModule
+, lib
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "asmfmt";
+  version = "1.3.2";
+
+  src = fetchFromGitHub {
+    owner = "klauspost";
+    repo = "asmfmt";
+    rev = "v${version}";
+    sha256 = "sha256-YxIVqPGsqxvOY0Qz4Jw5FuO9IbplCICjChosnHrSCgc=";
+  };
+
+  vendorHash = null;
+
+  # This package comes with its own version of goimports, gofmt and goreturns
+  # but these binaries are outdated and are offered by other packages.
+  subPackages = [ "cmd/asmfmt" ];
+
+  ldflags = [ "-s" "-w" ];
+
+  # There are no tests.
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Go assembler formatter";
+    longDescription = ''
+      This will format your assembler code in a similar way that gofmt formats
+      your Go code.
+    '';
+    homepage = "https://github.com/klauspost/asmfmt";
+    changelog = "https://github.com/klauspost/asmfmt/releases/tag/${src.rev}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ kalbasit ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/asn2quickder/default.nix b/nixpkgs/pkgs/development/tools/asn2quickder/default.nix
new file mode 100644
index 000000000000..6a1bd5396fdc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/asn2quickder/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, buildPythonApplication
+, fetchFromGitLab
+, makeWrapper
+, cmake
+, six
+, pyparsing
+, asn1ate
+, colored
+}:
+
+buildPythonApplication rec {
+  pname = "asn2quickder";
+  version = "1.7.1";
+
+  src = fetchFromGitLab {
+    owner = "arpa2";
+    repo = "quick-der";
+    rev = "v${version}";
+    sha256 = "sha256-f+ph5PL+uWRkswpOLDwZFWjh938wxoJ6xocJZ2WZLEk=";
+  };
+
+  postPatch = ''
+    patchShebangs ./python/scripts/*
+
+    # Unpin pyparsing 3.0.0. Issue resolved in latest version.
+    substituteInPlace setup.py --replace 'pyparsing==3.0.0' 'pyparsing'
+  '';
+
+  dontUseCmakeConfigure = true;
+
+  nativeBuildInputs = [ makeWrapper cmake ];
+
+  propagatedBuildInputs = [ pyparsing asn1ate six colored ];
+
+  doCheck = false; # Flaky tests
+
+  meta = with lib; {
+    description = "An ASN.1 compiler with a backend for Quick DER";
+    homepage = "https://gitlab.com/arpa2/quick-der";
+    license = licenses.bsd3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ leenaars ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/async-profiler/default.nix b/nixpkgs/pkgs/development/tools/async-profiler/default.nix
new file mode 100644
index 000000000000..57bb70c1dff1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/async-profiler/default.nix
@@ -0,0 +1,44 @@
+{ lib, stdenv, fetchFromGitHub, jdk, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "async-profiler";
+  version = "2.9";
+
+  src = fetchFromGitHub {
+    owner = "jvm-profiling-tools";
+    repo = "async-profiler";
+    rev = "v${version}";
+    sha256 = "sha256-ngLUg6Fq6Ay06klGa/y8lod8W6rYMqhMhXFn5OBCSpk=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  buildInputs = [ jdk ];
+
+  installPhase = ''
+    runHook preInstall
+    install -D "$src/profiler.sh" "$out/bin/async-profiler"
+    install -D build/jattach "$out/bin/jattach"
+    install -D build/libasyncProfiler.so "$out/lib/libasyncProfiler.so"
+    install -D -t "$out/share/java/" build/*.jar
+    runHook postInstall
+  '';
+
+  fixupPhase = ''
+    substituteInPlace $out/bin/async-profiler \
+      --replace 'JATTACH=$SCRIPT_DIR/build/jattach' \
+                'JATTACH=${placeholder "out"}/bin/jattach' \
+      --replace 'PROFILER=$SCRIPT_DIR/build/libasyncProfiler.so' \
+                'PROFILER=${placeholder "out"}/lib/libasyncProfiler.so'
+
+    wrapProgram $out/bin/async-profiler --prefix PATH : ${lib.makeBinPath [ jdk ]}
+  '';
+
+  meta = with lib; {
+    description = "A low overhead sampling profiler for Java that does not suffer from Safepoint bias problem";
+    homepage    = "https://github.com/jvm-profiling-tools/async-profiler";
+    license     = licenses.asl20;
+    maintainers = with maintainers; [ mschuwalow ];
+    platforms   = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/async/default.nix b/nixpkgs/pkgs/development/tools/async/default.nix
new file mode 100644
index 000000000000..ffff8af8b661
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/async/default.nix
@@ -0,0 +1,28 @@
+{ lib, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "async";
+  version = "0.1.1";
+
+  src = fetchFromGitHub {
+    owner = "ctbur";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "19ypflbayi5l0mb8yw7w0a4bq9a3w8nl9jsxapp9m3xggzmsvrxx";
+  };
+
+  cargoSha256 = "0y2q46i838gha58p95vcv5r5i14il1kv86k35s30ncfibijgp0lc";
+
+  meta = with lib; {
+    description = "A tool to parallelize shell commands";
+    longDescription = ''
+      `async` is a tool to run shell commands in parallel and is designed to be
+      able to quickly parallelize shell scripts with minimal changes. It was
+      inspired by GNU Parallel, with the main difference being that async
+      retains state between commands by running a server in the background.
+      '';
+    homepage = "https://github.com/ctbur/async";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ minijackson ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ats-acc/default.nix b/nixpkgs/pkgs/development/tools/ats-acc/default.nix
new file mode 100644
index 000000000000..b8eef344f20d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ats-acc/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub, ats2 }:
+
+stdenv.mkDerivation rec {
+  pname = "ats-acc";
+  version = "unstable-2018-10-21";
+
+  src = fetchFromGitHub {
+    owner = "sparverius";
+    repo = pname;
+    rev = "2d49f4e76d0fe1f857ceb70deba4aed13c306dcb";
+    sha256 = "sha256-Wp39488YNL40GKp4KaJwhi75PsYP+gMtrZqAvs4Q/sw=";
+  };
+
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace "mv acc \''$(PATSHOME)/bin/" "install -Dm755 acc ${placeholder "out"}/bin/"
+  '';
+
+  nativeBuildInputs = [ ats2 ];
+
+  meta = with lib; {
+    description = "Pretty-print error messages of the ATS Compiler";
+    homepage = "https://github.com/sparverius/ats-acc";
+    maintainers = with maintainers; [ moni ];
+    license = licenses.unfree; # Upstream has no license
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/avro-tools/default.nix b/nixpkgs/pkgs/development/tools/avro-tools/default.nix
new file mode 100644
index 000000000000..0868ab8e7f8c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/avro-tools/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchurl, makeWrapper, jre, lib }:
+
+stdenv.mkDerivation rec {
+  pname = "avro-tools";
+  version = "1.11.3";
+
+  src = fetchurl {
+    url =
+    "mirror://maven/org/apache/avro/avro-tools/${version}/${pname}-${version}.jar";
+    sha256 = "sha256-dPaV1rZxxE+G/gB7hEDyiMI7ZbzkTpNEtexp/Y6hrPI=";
+  };
+
+  dontUnpack = true;
+
+  buildInputs = [ jre ];
+  nativeBuildInputs = [ makeWrapper ];
+  sourceRoot = ".";
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mkdir -p $out/libexec/avro-tools
+    cp $src $out/libexec/avro-tools/${pname}.jar
+
+    makeWrapper ${jre}/bin/java $out/bin/avro-tools \
+    --add-flags "-jar $out/libexec/avro-tools/${pname}.jar"
+  '';
+
+  meta = with lib; {
+    homepage    = "https://avro.apache.org/";
+    description = "Avro command-line tools and utilities";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license     = lib.licenses.asl20;
+    maintainers = with lib.maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/aws-sam-cli/default.nix b/nixpkgs/pkgs/development/tools/aws-sam-cli/default.nix
new file mode 100644
index 000000000000..093c5a1ab9e0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/aws-sam-cli/default.nix
@@ -0,0 +1,148 @@
+{ lib
+, python3
+, fetchFromGitHub
+, git
+, testers
+, aws-sam-cli
+, nix-update-script
+, enableTelemetry ? false
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "aws-sam-cli";
+  version = "1.103.0";
+  format = "pyproject";
+
+  disabled = python3.pythonOlder "3.8";
+
+  src = fetchFromGitHub {
+    owner = "aws";
+    repo = "aws-sam-cli";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-oy0+dAA6x8Jl1nZ1wjsR9xvpR9biemTtqL9B1awz4BM=";
+  };
+
+  nativeBuildInputs = with python3.pkgs; [
+    pythonRelaxDepsHook
+    setuptools
+  ];
+
+  pythonRelaxDeps = [
+    "aws-sam-translator"
+    "boto3-stubs"
+    "tzlocal"
+    "cookiecutter"
+    "docker"
+    "aws-lambda-builders"
+    "tomlkit"
+    "rich"
+    "jsonschema"
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    aws-lambda-builders
+    aws-sam-translator
+    boto3
+    boto3-stubs
+    cfn-lint
+    chevron
+    click
+    cookiecutter
+    dateparser
+    docker
+    flask
+    jsonschema
+    pyopenssl
+    pyyaml
+    requests
+    rich
+    ruamel-yaml
+    tomlkit
+    typing-extensions
+    tzlocal
+    watchdog
+  ] ++ (with python3.pkgs.boto3-stubs.optional-dependencies; [
+    apigateway
+    cloudformation
+    ecr
+    iam
+    kinesis
+    lambda
+    s3
+    schemas
+    secretsmanager
+    signer
+    sqs
+    stepfunctions
+    sts
+    xray
+  ]);
+
+  postFixup = ''
+    # Disable telemetry: https://github.com/aws/aws-sam-cli/issues/1272
+    wrapProgram $out/bin/sam \
+      --set SAM_CLI_TELEMETRY ${if enableTelemetry then "1" else "0"} \
+      --prefix PATH : $out/bin:${lib.makeBinPath [ git ]}
+  '';
+
+  doCheck = true;
+
+  nativeCheckInputs = with python3.pkgs; [
+    filelock
+    flaky
+    parameterized
+    psutil
+    pytest-xdist
+    pytestCheckHook
+  ];
+
+  preCheck = ''
+    export HOME=$(mktemp -d)
+    export PATH="$PATH:$out/bin:${lib.makeBinPath [ git ]}"
+  '';
+
+  pytestFlagsArray = [
+    "tests"
+
+    # Disable tests that requires networking or complex setup
+    "--ignore=tests/end_to_end"
+    "--ignore=tests/integration"
+    "--ignore=tests/regression"
+    "--ignore=tests/smoke"
+    "--ignore=tests/unit/lib/telemetry"
+
+    # Disable flaky tests
+    "--ignore=tests/unit/lib/samconfig/test_samconfig.py"
+    "--deselect=tests/unit/lib/sync/flows/test_rest_api_sync_flow.py::TestRestApiSyncFlow::test_update_stage"
+    "--deselect=tests/unit/lib/sync/flows/test_rest_api_sync_flow.py::TestRestApiSyncFlow::test_delete_deployment"
+    "--deselect=tests/unit/local/lambda_service/test_local_lambda_invoke_service.py::TestValidateRequestHandling::test_request_with_no_data"
+
+    # Disable warnings
+    "-W ignore::DeprecationWarning"
+  ];
+
+  pythonImportsCheck = [
+    "samcli"
+  ];
+
+  passthru = {
+    tests.version = testers.testVersion {
+      package = aws-sam-cli;
+      command = "sam --version";
+    };
+    updateScript = nix-update-script {
+      extraArgs = [ "--version-regex" "^v([0-9.]+)$" ];
+    };
+  };
+
+  __darwinAllowLocalNetworking = true;
+
+  meta = with lib; {
+    description = "CLI tool for local development and testing of Serverless applications";
+    homepage = "https://github.com/aws/aws-sam-cli";
+    changelog = "https://github.com/aws/aws-sam-cli/releases/tag/v${version}";
+    license = licenses.asl20;
+    mainProgram = "sam";
+    maintainers = with maintainers; [ lo1tuma anthonyroussel ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/azcopy/default.nix b/nixpkgs/pkgs/development/tools/azcopy/default.nix
new file mode 100644
index 000000000000..ed7db536bd83
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/azcopy/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, buildGoModule
+}:
+
+buildGoModule rec {
+  pname = "azure-storage-azcopy";
+  version = "10.23.0";
+
+  src = fetchFromGitHub {
+    owner = "Azure";
+    repo = "azure-storage-azcopy";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-Df45DHGA7EM4hx3iAmYNNUHjrUrkW6QniJkHaN7wNZM=";
+  };
+
+  subPackages = [ "." ];
+
+  vendorHash = "sha256-afqDnrmbTR6yZHT7NysysORci4b0Oh0sjpftgAXJ5Uk=";
+
+  doCheck = false;
+
+  postInstall = ''
+    ln -rs "$out/bin/azure-storage-azcopy" "$out/bin/azcopy"
+  '';
+
+  meta = with lib; {
+    description = "The new Azure Storage data transfer utility - AzCopy v10";
+    homepage = "https://github.com/Azure/azure-storage-azcopy";
+    changelog = "https://github.com/Azure/azure-storage-azcopy/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ colemickens kashw2 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/azure-functions-core-tools/default.nix b/nixpkgs/pkgs/development/tools/azure-functions-core-tools/default.nix
new file mode 100644
index 000000000000..288bcecd3b8d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/azure-functions-core-tools/default.nix
@@ -0,0 +1,50 @@
+{ lib,
+  stdenv,
+  callPackage,
+  fetchFromGitHub,
+  buildDotnetModule,
+  buildGoModule,
+  dotnetCorePackages,
+}:
+let
+  version = "4.0.5455";
+  src = fetchFromGitHub {
+    owner = "Azure";
+    repo = "azure-functions-core-tools";
+    rev = version;
+    sha256 = "sha256-Ip1m0/l0YWFosYfp8UeREg9DP5pnvRnXyAaAuch7Op4=";
+  };
+  gozip = buildGoModule {
+    pname = "gozip";
+    inherit version;
+    src = src + "/tools/go/gozip";
+    vendorHash = null;
+  };
+in
+buildDotnetModule rec {
+  pname = "azure-functions-core-tools";
+  inherit src version;
+
+  dotnet-runtime = dotnetCorePackages.sdk_6_0;
+  nugetDeps = ./deps.nix;
+  useDotnetFromEnv = true;
+  executables = [ "func" ];
+
+  postPatch = ''
+    substituteInPlace src/Azure.Functions.Cli/Common/CommandChecker.cs \
+      --replace "CheckExitCode(\"/bin/bash" "CheckExitCode(\"${stdenv.shell}"
+  '';
+
+  postInstall = ''
+    mkdir -p $out/bin
+    ln -s ${gozip}/bin/gozip $out/bin/gozip
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/Azure/azure-functions-core-tools";
+    description = "Command line tools for Azure Functions";
+    license = licenses.mit;
+    maintainers = with maintainers; [ mdarocha detegr ];
+    platforms = ["x86_64-linux" "aarch64-darwin" "x86_64-darwin"];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/azure-functions-core-tools/deps.nix b/nixpkgs/pkgs/development/tools/azure-functions-core-tools/deps.nix
new file mode 100644
index 000000000000..e9e53a5716bf
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/azure-functions-core-tools/deps.nix
@@ -0,0 +1,673 @@
+# This file was automatically generated by passthru.fetch-deps.
+# Please dont edit it manually, your changes might get overwritten!
+
+{ fetchNuGet }: [
+  (fetchNuGet { pname = "AccentedCommandLineParser"; version = "2.0.0"; sha256 = "0s215i49ffbs2jdrfrs045yffp0kcx5cm16nf67xiqp4rs1n51jv"; })
+  (fetchNuGet { pname = "Autofac"; version = "4.6.2"; sha256 = "00046qyg8qljhk6krcifyqj6n9xfgpxnwv3rcni5iahbj5xz4kvq"; })
+  (fetchNuGet { pname = "Azure.Core"; version = "1.15.0"; sha256 = "0hf7z1nqsw62pxp8iy4nnfz4q9askymj9669iqac8szpzlvwn71l"; })
+  (fetchNuGet { pname = "Azure.Core"; version = "1.19.0"; sha256 = "08l7d6cq1gl1g2qvlrc80z754f9amwnmgf33vnr7dywsbrx6qic5"; })
+  (fetchNuGet { pname = "Azure.Core"; version = "1.34.0"; sha256 = "1rvzg508kkadkpamkjry4xzid9d7hi8af5ydsc0vnidksm1ppv6x"; })
+  (fetchNuGet { pname = "Azure.Identity"; version = "1.10.0"; sha256 = "0lrw7l88y1vqc23y0j2dsn2qbn9h50212c04jn74g4xkq7g2siac"; })
+  (fetchNuGet { pname = "Azure.Security.KeyVault.Secrets"; version = "4.2.0"; sha256 = "1l9jjlymccglbngkl9kd18zx70sz5n4d11zbmx6pwadh5nihcmnc"; })
+  (fetchNuGet { pname = "Azure.Storage.Blobs"; version = "12.13.0"; sha256 = "0cpzvn0j8nwndh580rpakp29835mm0fx3yli8wb23wvkaq8y4glh"; })
+  (fetchNuGet { pname = "Azure.Storage.Blobs"; version = "12.9.0"; sha256 = "15f4wwg3dvhpkx323rg3nfyjn7xn01p2aqs0isrgkgyq0hggal9i"; })
+  (fetchNuGet { pname = "Azure.Storage.Common"; version = "12.12.0"; sha256 = "1n29vfldnali71jawb2bwwkv3dvflw6zhkgpq96zk9ic6s23zm44"; })
+  (fetchNuGet { pname = "Azure.Storage.Common"; version = "12.8.0"; sha256 = "0a1k8xrsqr22fihqqzv289g8rycj6v8kha3ry06b2lvl4pr4vd9l"; })
+  (fetchNuGet { pname = "Castle.Core"; version = "4.2.0"; sha256 = "098vn490ivggchn13w23s8bfp9w2f0gp9pc4xjp0p16lxqp44vh7"; })
+  (fetchNuGet { pname = "Castle.Core"; version = "4.2.1"; sha256 = "18qbjsaah23jg9r24wjcy4jlggbz1dq6sw621d8314jhyhjxvw0l"; })
+  (fetchNuGet { pname = "Colors.Net"; version = "1.1.0"; sha256 = "1jw7iijz9djih518fiiagdnqjppzgivgv4g49pq61v3sh2l0zl87"; })
+  (fetchNuGet { pname = "DotNetZip"; version = "1.13.3"; sha256 = "1a62pyalgzvvy5xrqbvif1ia2v3swj1z2m2pijxm6yn3h8dhnlg6"; })
+  (fetchNuGet { pname = "Dynamitey"; version = "2.0.9.136"; sha256 = "1wzd4g58bgvlxj2wkx71jgv6yxaikgm2q9b8cvicr2hndr6wl6y1"; })
+  (fetchNuGet { pname = "FluentAssertions"; version = "5.2.0"; sha256 = "14bjayrmh5zsipg9m0v8vjvi8ma945nhw7ysfc96d501f5kkcnab"; })
+  (fetchNuGet { pname = "FSharp.Core"; version = "3.1.2.5"; sha256 = "0pfvjimrgrffb5rj612gsid044lfpk8g2cxyh9792dc1n8ck5hih"; })
+  (fetchNuGet { pname = "Google.Protobuf"; version = "3.23.1"; sha256 = "0kma0srl4qwmlrkkfi2viqf7a7vr70ifx1b8asvhx22j3vf42r8w"; })
+  (fetchNuGet { pname = "Grpc.AspNetCore"; version = "2.55.0"; sha256 = "12nrpwf364nvlnkz9f9mjq0j3w3an2ijbfzd4v5bd335c2x1mv99"; })
+  (fetchNuGet { pname = "Grpc.AspNetCore.Server"; version = "2.55.0"; sha256 = "1y4xgszrw885nm8xmq6i2i61liihp96a3x4n14306iwki8rd3r3i"; })
+  (fetchNuGet { pname = "Grpc.AspNetCore.Server.ClientFactory"; version = "2.55.0"; sha256 = "0ns4f7k5jq0lcgfn3h9g5bxv5cyqjvfb438m5dihmdgqm7lmh4qz"; })
+  (fetchNuGet { pname = "Grpc.Core.Api"; version = "2.55.0"; sha256 = "03k2z8s0l39fq7rs7fg6ldn4mnna11hfkb1iswdrcir4ia2djlbi"; })
+  (fetchNuGet { pname = "Grpc.Net.Client"; version = "2.55.0"; sha256 = "1q1fhaff80zfchk5f4sflhpgi3sklh81nzdzcdg0r48kiygxsky4"; })
+  (fetchNuGet { pname = "Grpc.Net.ClientFactory"; version = "2.55.0"; sha256 = "0bpqs9c144v47l7xp9207mpfs9fga7mw95yig16h393qrm7af0y7"; })
+  (fetchNuGet { pname = "Grpc.Net.Common"; version = "2.55.0"; sha256 = "1xc6pf55dnfjaqlx5iz4df2dbpkdlsz478wmnzrvrjblvy3ycisi"; })
+  (fetchNuGet { pname = "Grpc.Tools"; version = "2.55.1"; sha256 = "11vx30w0hkkwzd7fd8spyb1iairv5nbicvzpbqpvyg0a2hm2lgfa"; })
+  (fetchNuGet { pname = "ImpromptuInterface"; version = "7.0.1"; sha256 = "1kyjp5skhsajvmabz438abcvddaz1w8s3d3csybw3znngpj9hlpb"; })
+  (fetchNuGet { pname = "Microsoft.ApplicationInsights"; version = "2.21.0"; sha256 = "1q034jbqkxb8lddkd0ijp0wp0ymnnf3bg2mjpay027zv7jswnc4x"; })
+  (fetchNuGet { pname = "Microsoft.ApplicationInsights.AspNetCore"; version = "2.21.0"; sha256 = "0dpcik1jlzdp6prwknb3brx4inb8z2qrdvbxvp5am9s799p25611"; })
+  (fetchNuGet { pname = "Microsoft.ApplicationInsights.DependencyCollector"; version = "2.21.0"; sha256 = "1dacz9g5w1f5wx6wdylv1k9h2y3pqqiq75i03jdb4n8df3h02g66"; })
+  (fetchNuGet { pname = "Microsoft.ApplicationInsights.EventCounterCollector"; version = "2.21.0"; sha256 = "0y42jhyh8jzqkdqdkb8a22ca4ay6323f6d71ychybb785d94p8sg"; })
+  (fetchNuGet { pname = "Microsoft.ApplicationInsights.PerfCounterCollector"; version = "2.21.0"; sha256 = "03v8zib3ank49qcxkd31kvi788sh180mplg6q9i2nwsr3yskpic5"; })
+  (fetchNuGet { pname = "Microsoft.ApplicationInsights.SnapshotCollector"; version = "1.4.3"; sha256 = "1mpyjni63i7d22j4qr77nb8kxa2rbjkn0k1hfcz35lr23qgjki2k"; })
+  (fetchNuGet { pname = "Microsoft.ApplicationInsights.WindowsServer"; version = "2.21.0"; sha256 = "0093dpkcijc6j95lcha4d0yyh2zb1ajq4jvs6pdsx1319nvcjqwc"; })
+  (fetchNuGet { pname = "Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel"; version = "2.21.0"; sha256 = "15zw2lajm8lx6zz7zi3kd1rjdfjcs6a7xgvsx41s5i7v2ly4ilcr"; })
+  (fetchNuGet { pname = "Microsoft.AspNet.WebApi.Client"; version = "5.2.8"; sha256 = "1dbwdbxr6npyc82zwl0g9bhifkpcqfzyhx1ihd8rzcmzprw70yfj"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Antiforgery"; version = "2.1.0"; sha256 = "00fayhhlrh382a618yb25camxp0k13s7w2gh7bxcq4rjcgs981j6"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Authentication.Abstractions"; version = "2.1.0"; sha256 = "09f99hficsvg15j4xpd1mjvrx5l3j4pc2vikkmsn26h8lk1v716p"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Authentication.Abstractions"; version = "2.2.0"; sha256 = "0vj7fhpk0d95nkkxz4q0rma6pb4ym96mx6nms4603y0l19h0k5yh"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Authentication.Core"; version = "2.1.0"; sha256 = "146q9zf8xmapxjpa3a84dy8r6b0k3vhm3bl13phnv6snww9hrff5"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Authentication.Core"; version = "2.2.0"; sha256 = "1wgn45fmdi7dk9cl4cdhzgqc9mdxhfw7zg8zwns3j7qgrhlv6k8h"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Authentication.JwtBearer"; version = "6.0.0"; sha256 = "14hrgi8mmxgxlggmx52gjvfw0ml2danspv6zbjazrjx1g9wyxx8v"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Authorization"; version = "2.1.0"; sha256 = "0jw5g3c7q8jffnalvmknwrx1h0d68hx359qk8rfcfdzwag8q1p2f"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Authorization"; version = "2.2.0"; sha256 = "1mpq8pmxlxfa625k2ghv6xcyy2wdpwv56xzya9mvmlnh50h1i8rx"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Authorization.Policy"; version = "2.1.0"; sha256 = "1inz9b8y4hn9gsfdp1zmqln4ms5zap44mwb6difvr2skwa78z59v"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Authorization.Policy"; version = "2.2.0"; sha256 = "1d1zh65kfjf81j21ssmhr465vx08bra8424vgnrb22gdx03mhwd2"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Cors"; version = "2.1.0"; sha256 = "1kfdf4rhrnsclpyk7n87mvl5xszb9i2bixns4v7qmvy41pa74sbc"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Cryptography.Internal"; version = "2.2.0"; sha256 = "01lg2fx85b47ldgdrhs6clsivj35x54xwc9r5xk3f1v8rr3gycsv"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.DataProtection"; version = "2.2.0"; sha256 = "09lzbp084xxy1xxfbxpqdff8phv2pzd1n5v30xfm03hhl7a038gx"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.DataProtection.Abstractions"; version = "2.2.0"; sha256 = "1gi4hpssmrrdf5lm6idkhvqbfy12bx14976y4gbhmx9z8lxaqcfz"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Diagnostics.Abstractions"; version = "2.1.0"; sha256 = "18k6a6ppsbsljrsnwhmyvmzzby6pp9cgbzqcr2c9kmv3z09pc745"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Hosting"; version = "2.1.1"; sha256 = "1prlc9qgwqvs0w3sjrbk9q8fhaq0l0pnvwyxa6gqcb0x82vmlhsl"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Hosting.Abstractions"; version = "2.1.0"; sha256 = "0sdzvjf6bz0krr2bm77zdyxpjcddadq2fqd3b4yybd6my3b5f7j2"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Hosting.Abstractions"; version = "2.1.1"; sha256 = "1wnlcnaqfv3xpmhi5rpkn1r6bfrpv3pb8rvfz9dk5l87mllpi5mm"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Hosting.Abstractions"; version = "2.2.0"; sha256 = "043k651vbfshh3s997x42ymj8nb32419m7q3sjw5q2c27anrhfhv"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Hosting.Server.Abstractions"; version = "2.1.0"; sha256 = "1xm8913slkx0cvk7gcbk1sf9518xmrajjjp3z8qhr5xdhdx1b879"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Hosting.Server.Abstractions"; version = "2.1.1"; sha256 = "0zldzvhh7xraps3gg47anva3dm3gssynw3k3gazjvqwb4gblsw6p"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Hosting.Server.Abstractions"; version = "2.2.0"; sha256 = "0nz73bwrvhc1n7gd7xxm3p5ww2wx9qr9m9i43y20gh0c54adkygh"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Html.Abstractions"; version = "2.1.0"; sha256 = "03pf5k7dm1js14jjn17bddiicjl75bb4jynimy5n5cpx7j56dpsp"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Http"; version = "2.1.0"; sha256 = "1nrhbsr58fh6hpzxq75qvrimh0lk6pdwghs3cbv0f1zk90rar1cq"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Http"; version = "2.1.22"; sha256 = "09hn5j38n9w0b9qz4ka10mkbzrcbkpqc3mcwf7793lh579vw3axg"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Http"; version = "2.2.0"; sha256 = "1fcrafpa57sab3as18idqknzlxkx49n4sxzlzik3sj6pcji5j17q"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Http"; version = "2.2.2"; sha256 = "09mgjvpqdyylz9dbngql9arx46lfkiczjdf7aqr9asd5vjqlv2c8"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Http.Abstractions"; version = "2.1.0"; sha256 = "0jz5w1y661cxbh1sakyjh0813sqrc456mj53w3482ilb5xh5zhbf"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Http.Abstractions"; version = "2.1.1"; sha256 = "02jsghkbfjz0rvrnfz5pakv8dpyfcc3wjxmj4rpp0fc2mmpibkys"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Http.Abstractions"; version = "2.2.0"; sha256 = "13s8cm6jdpydxmr0rgmzrmnp1v2r7i3rs7v9fhabk5spixdgfy6b"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Http.Extensions"; version = "2.1.0"; sha256 = "14f1sg4p7zg1p4qj1xs0sjs5xwqidin843xdj9wlzy76sxy3066r"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Http.Extensions"; version = "2.1.1"; sha256 = "01nbz8gl12bjcrw52z5w61khlzn02wngdkc68fsy7pl74vrzj69v"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Http.Extensions"; version = "2.2.0"; sha256 = "118gp1mfb8ymcvw87fzgjqwlc1d1b0l0sbfki291ydg414cz3dfn"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Http.Features"; version = "2.1.0"; sha256 = "1mwpvbq0z982f9r5ik6k15h18qviy735i55hld9vfk8694k9zwcj"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Http.Features"; version = "2.1.1"; sha256 = "0vifha5wfynpgg4kvdmbqcgn6ngkxkkdmx1qnvlphmjx0iw7sw3d"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Http.Features"; version = "2.2.0"; sha256 = "0xrlq8i61vzhzzy25n80m7wh2kn593rfaii3aqnxdsxsg6sfgnx1"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.JsonPatch"; version = "2.1.0"; sha256 = "0jcvihh5nbpkg51bj7rb4svgxcdsn4nzklscqm0qcyvxnk3xy0pf"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.JsonPatch"; version = "2.2.0"; sha256 = "07cihb5sqkavg42nvircdwjp0b67mhrla97jgx285zdjphplg4h2"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.JsonPatch"; version = "6.0.0"; sha256 = "1hczz9kq3wwhpa8xi1xcalqjf03lhhnlvir2cmhxa51h2f1afx89"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Localization"; version = "2.1.0"; sha256 = "1xwdm6z2fnrbca4r76mj6g8ggrjy5n9frhn2159mhracl0gd1d66"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Mvc"; version = "2.1.0"; sha256 = "0yp24572mnvdq1814wrl29rb9zl2903igdch8sm4y6c6sw3bf4n9"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Mvc.Abstractions"; version = "2.1.0"; sha256 = "0p50d8bly48pv8kwsraw9aklppl9cav0lp1d6xjfpddr7jy2w2w8"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Mvc.Abstractions"; version = "2.2.0"; sha256 = "09p447ipd19517vy8xx9ykvspn6b4fgbm2rskpmzyw41x9wz4k0b"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Mvc.ApiExplorer"; version = "2.1.0"; sha256 = "0rvvaa5gsw4q67phayw0k16lhildi8g8qld09rwkyg8521hv6arc"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Mvc.Core"; version = "2.1.0"; sha256 = "1gfaxk6d1k0cqaymv5vx26ifvcrxsizxzl8s1rzw16v47vvyqyxp"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Mvc.Core"; version = "2.2.0"; sha256 = "1k6lkgk9zak5sczvyjbwgqnfcwcg9ks74wznqfzck8c6hns1by0m"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Mvc.Cors"; version = "2.1.0"; sha256 = "0z8z11wppy1bwfz0wkigsp80gbq2n38yzg9p5p1mbrkf2dapaaz7"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Mvc.DataAnnotations"; version = "2.1.0"; sha256 = "0gpwyg1ap5pm5yji3wyga1h1kcya6jd0k533jkyl8yx1ijm7l6hg"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Mvc.Formatters.Json"; version = "2.1.0"; sha256 = "0jrfwmw4rqg2m4dqrlpf4j9lc48qw6ymxwcw78bx5lam2qibky58"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Mvc.Formatters.Json"; version = "2.2.0"; sha256 = "0421fcf2z8a6z81ql123ili32wbr3x25zpq17xjf4s9fmsr0069a"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Mvc.Localization"; version = "2.1.0"; sha256 = "1z6511nj5r0gpx2y4d61bcp98y5c833zb2kmvhzpv39cd1axmggk"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Mvc.NewtonsoftJson"; version = "6.0.0"; sha256 = "1zxzy4xb0jnnx7pri8pxkc1kwgpz58daxqy9ypyhf3wx1jdqy3w3"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Mvc.Razor"; version = "2.1.0"; sha256 = "0mvizjv8qvdkb4ycvcvccal1j3yfkhqaxi71hw6j73ylba8va8f2"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Mvc.Razor.Extensions"; version = "2.1.0"; sha256 = "18dr08g27hgmijzp277avzq42004gipnp3h7pacpnyanh2psgp43"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Mvc.RazorPages"; version = "2.1.0"; sha256 = "0if759kacp95bmhskmsjq4vb74d9638f4b212ziqnq0fyl67bv8w"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Mvc.TagHelpers"; version = "2.1.0"; sha256 = "0vj8yqf29jfpb8kj8djxcfmxfn21ixk1987rjgzcwi1zal1wln1q"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Mvc.ViewFeatures"; version = "2.1.0"; sha256 = "0zynjyakzgdmyrcmgk2ahs91nhqavc7kvc804xcbkfl5ai2ypmwp"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Mvc.WebApiCompatShim"; version = "2.2.0"; sha256 = "1mdj7k58sb9b9gx010dhpavnsfymwxk7izvyqc4vnclqznakfxw8"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Razor"; version = "2.1.0"; sha256 = "1yxq7vipswqa01xpw9jl22ngpifqm8ywzqg843mxwwf15kmf27bi"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Razor.Design"; version = "2.1.0"; sha256 = "06is3ch4g0bdr1pnlil5fq2wpwva2yxbf3iyl7xcd99rw1wfpiga"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Razor.Language"; version = "2.1.0"; sha256 = "12b3jp0crshvcwckvk8gd4w72ngd7125qz8zlpgczjv6vyb28wqs"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Razor.Runtime"; version = "2.1.0"; sha256 = "0mf19civk8s85yhb3hnpr0gfa4nkxypylwcq2sj15zwx4qpsm8l7"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.ResponseCaching.Abstractions"; version = "2.1.0"; sha256 = "097mxkx8sdj35yndwi8q4r4q5g8ds6hwrx7if1694zn9fmzqd424"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.ResponseCaching.Abstractions"; version = "2.2.0"; sha256 = "01sp2i2bgcn6blw1mcvg5nrlc97c9czyawwvgfi6ydzdvs6ang37"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Routing"; version = "2.1.0"; sha256 = "0xs89qbw2whzl46r7b549ys5bs6vrp2qf248cphfhwvjw1lv4bhs"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Routing"; version = "2.2.0"; sha256 = "12kv602j2rxp43l1v3618yz3pdd7hqc3r98ya0bqz6y2ppvhbyws"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Routing"; version = "2.2.2"; sha256 = "1s225v52i2l3496i97jc7jjlrmb4m3vz9q696g88yq5xhcy4d37x"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Routing.Abstractions"; version = "2.1.0"; sha256 = "1f8xixbg749nhv10vaf3jmdv9zjdw822hw7ikwa97h70767d8xz5"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Routing.Abstractions"; version = "2.2.0"; sha256 = "0d9wwz1rsh1fslbv1y72jpkvqv2v9n28rl3vslcg0x74lp2678ly"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.WebUtilities"; version = "2.1.0"; sha256 = "148snpiq4rhm44gzx8wn9ljfb286h7vd1axc9by4r4fxp0gix0kf"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.WebUtilities"; version = "2.1.1"; sha256 = "1744g3c04bz27lafx0q90cg0i17rahymgckbhggn1147pxs3lgpv"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.WebUtilities"; version = "2.2.0"; sha256 = "0cs1g4ing4alfbwyngxzgvkrv7z964isv1j9dzflafda4p0wxmsi"; })
+  (fetchNuGet { pname = "Microsoft.Azure.AppService.Middleware"; version = "1.5.4"; sha256 = "08bannmsijcz9zbcvykq6gc116q11mgilyg7zcnxi62jh21ip235"; url = "https://azfunc.pkgs.visualstudio.com/e6a70c92-4128-439f-8012-382fe78d6396/_packaging/21e57804-e42a-44f4-a801-493faaf56251/nuget/v3/flat2/microsoft.azure.appservice.middleware/1.5.4/microsoft.azure.appservice.middleware.1.5.4.nupkg"; })
+  (fetchNuGet { pname = "Microsoft.Azure.AppService.Middleware.Functions"; version = "1.5.4"; sha256 = "1765lv13nd1wp7ycli1wfx5glp0qryc432awfrv5s1x1wxgl0dc7"; url = "https://azfunc.pkgs.visualstudio.com/e6a70c92-4128-439f-8012-382fe78d6396/_packaging/21e57804-e42a-44f4-a801-493faaf56251/nuget/v3/flat2/microsoft.azure.appservice.middleware.functions/1.5.4/microsoft.azure.appservice.middleware.functions.1.5.4.nupkg"; })
+  (fetchNuGet { pname = "Microsoft.Azure.AppService.Middleware.Modules"; version = "1.5.4"; sha256 = "17idpdivdr03j8dqfqim0d2948xm87x6nk1wnzpraj22pa964j3f"; url = "https://azfunc.pkgs.visualstudio.com/e6a70c92-4128-439f-8012-382fe78d6396/_packaging/21e57804-e42a-44f4-a801-493faaf56251/nuget/v3/flat2/microsoft.azure.appservice.middleware.modules/1.5.4/microsoft.azure.appservice.middleware.modules.1.5.4.nupkg"; })
+  (fetchNuGet { pname = "Microsoft.Azure.AppService.Middleware.NetCore"; version = "1.5.4"; sha256 = "0k5pn7qi874bhlhcmm813k15kmsd7zc45mgk0ym8qzvvk1s8j7cv"; url = "https://azfunc.pkgs.visualstudio.com/e6a70c92-4128-439f-8012-382fe78d6396/_packaging/21e57804-e42a-44f4-a801-493faaf56251/nuget/v3/flat2/microsoft.azure.appservice.middleware.netcore/1.5.4/microsoft.azure.appservice.middleware.netcore.1.5.4.nupkg"; })
+  (fetchNuGet { pname = "Microsoft.Azure.AppService.Proxy.Client"; version = "2.2.20220831.41"; sha256 = "0qqghqfm8v6zdgkgzr76lwfi88nn5zpbrza318mc2h3xnz3fvf3s"; url = "https://azfunc.pkgs.visualstudio.com/e6a70c92-4128-439f-8012-382fe78d6396/_packaging/1e0b47db-42dd-4931-a098-8cb031234dcc/nuget/v3/flat2/microsoft.azure.appservice.proxy.client/2.2.20220831.41/microsoft.azure.appservice.proxy.client.2.2.20220831.41.nupkg"; })
+  (fetchNuGet { pname = "Microsoft.Azure.AppService.Proxy.Common"; version = "2.2.20220831.41"; sha256 = "1rns26wapv8h5sfwbv09cbz1ixzzgqsa95y4q7ikb77arwqcgha3"; url = "https://azfunc.pkgs.visualstudio.com/e6a70c92-4128-439f-8012-382fe78d6396/_packaging/1e0b47db-42dd-4931-a098-8cb031234dcc/nuget/v3/flat2/microsoft.azure.appservice.proxy.common/2.2.20220831.41/microsoft.azure.appservice.proxy.common.2.2.20220831.41.nupkg"; })
+  (fetchNuGet { pname = "Microsoft.Azure.AppService.Proxy.Runtime"; version = "2.2.20220831.41"; sha256 = "157ijskdxdc7fmja8rlsizd85bf4znm0yarfjs5wfkyg5227lgm4"; url = "https://azfunc.pkgs.visualstudio.com/e6a70c92-4128-439f-8012-382fe78d6396/_packaging/1e0b47db-42dd-4931-a098-8cb031234dcc/nuget/v3/flat2/microsoft.azure.appservice.proxy.runtime/2.2.20220831.41/microsoft.azure.appservice.proxy.runtime.2.2.20220831.41.nupkg"; })
+  (fetchNuGet { pname = "Microsoft.Azure.Cosmos.Table"; version = "1.0.8"; sha256 = "1x590xzsi4dqr210b2cj30c7adxmlzv2fanmqzwghffk29r4paz9"; })
+  (fetchNuGet { pname = "Microsoft.Azure.DocumentDB.Core"; version = "2.11.2"; sha256 = "0gwksfc5g2vxkxw662lzg7azmsflpahn677944z7vjrhnlnyizg9"; })
+  (fetchNuGet { pname = "Microsoft.Azure.DurableTask.AzureStorage.Internal"; version = "1.4.0"; sha256 = "0pqy7k1lslz0n74qbgp1b5la45qhd68bk02wgsxlabqdhrmbvvvc"; url = "https://azfunc.pkgs.visualstudio.com/e6a70c92-4128-439f-8012-382fe78d6396/_packaging/1e0b47db-42dd-4931-a098-8cb031234dcc/nuget/v3/flat2/microsoft.azure.durabletask.azurestorage.internal/1.4.0/microsoft.azure.durabletask.azurestorage.internal.1.4.0.nupkg"; })
+  (fetchNuGet { pname = "Microsoft.Azure.DurableTask.Core.Internal"; version = "2.0.11"; sha256 = "1f6alhfp8pq0m8n0rxzzwx933iw672k0rw38r91kdddg8m28ly37"; url = "https://azfunc.pkgs.visualstudio.com/e6a70c92-4128-439f-8012-382fe78d6396/_packaging/1e0b47db-42dd-4931-a098-8cb031234dcc/nuget/v3/flat2/microsoft.azure.durabletask.core.internal/2.0.11/microsoft.azure.durabletask.core.internal.2.0.11.nupkg"; })
+  (fetchNuGet { pname = "Microsoft.Azure.Functions.DotNetIsolatedNativeHost"; version = "1.0.2"; sha256 = "0r4cjbrdfb1fy5gz42gpvcsxxc8l4xxd550426z2i2k7s4vm94i0"; url = "https://azfunc.pkgs.visualstudio.com/e6a70c92-4128-439f-8012-382fe78d6396/_packaging/eb652719-f36a-4e78-8541-e13a3cd655f9/nuget/v3/flat2/microsoft.azure.functions.dotnetisolatednativehost/1.0.2/microsoft.azure.functions.dotnetisolatednativehost.1.0.2.nupkg"; })
+  (fetchNuGet { pname = "Microsoft.Azure.Functions.JavaWorker"; version = "2.13.0"; sha256 = "08lm6m86fm2ymd67i55rmllxjvi9biz5gdrnlzf6bzvcls6gv66z"; url = "https://azfunc.pkgs.visualstudio.com/e6a70c92-4128-439f-8012-382fe78d6396/_packaging/eb652719-f36a-4e78-8541-e13a3cd655f9/nuget/v3/flat2/microsoft.azure.functions.javaworker/2.13.0/microsoft.azure.functions.javaworker.2.13.0.nupkg"; })
+  (fetchNuGet { pname = "Microsoft.Azure.Functions.NodeJsWorker"; version = "3.8.1"; sha256 = "0kc1dxi774jlmfvy0a8valhin4yvar4ib7ppa8iliq1lzynr3pqn"; url = "https://azfunc.pkgs.visualstudio.com/e6a70c92-4128-439f-8012-382fe78d6396/_packaging/f37f760c-aebd-443e-9714-ce725cd427df/nuget/v3/flat2/microsoft.azure.functions.nodejsworker/3.8.1/microsoft.azure.functions.nodejsworker.3.8.1.nupkg"; })
+  (fetchNuGet { pname = "Microsoft.Azure.Functions.PowerShellWorker.PS7.0"; version = "4.0.2973"; sha256 = "16is04gbrjsayjiv2vnqnw9j3cdn03xi2zsp2406wz4knbi2w2g8"; url = "https://azfunc.pkgs.visualstudio.com/e6a70c92-4128-439f-8012-382fe78d6396/_packaging/c0493cce-bc63-4e11-9fc9-e7c45291f151/nuget/v3/flat2/microsoft.azure.functions.powershellworker.ps7.0/4.0.2973/microsoft.azure.functions.powershellworker.ps7.0.4.0.2973.nupkg"; })
+  (fetchNuGet { pname = "Microsoft.Azure.Functions.PowerShellWorker.PS7.2"; version = "4.0.2974"; sha256 = "0ahqvx31ll2y86c6a2dsh6i1y4jlgsivn71zxq7vs8kkb28ab7xx"; url = "https://azfunc.pkgs.visualstudio.com/e6a70c92-4128-439f-8012-382fe78d6396/_packaging/c0493cce-bc63-4e11-9fc9-e7c45291f151/nuget/v3/flat2/microsoft.azure.functions.powershellworker.ps7.2/4.0.2974/microsoft.azure.functions.powershellworker.ps7.2.4.0.2974.nupkg"; })
+  (fetchNuGet { pname = "Microsoft.Azure.Functions.PowerShellWorker.PS7.4"; version = "4.0.2975"; sha256 = "1ga4ma5mja1iz1szcsry9m40mms1yfjz81z8s8czs6mngq2f7gj2"; url = "https://azfunc.pkgs.visualstudio.com/e6a70c92-4128-439f-8012-382fe78d6396/_packaging/c0493cce-bc63-4e11-9fc9-e7c45291f151/nuget/v3/flat2/microsoft.azure.functions.powershellworker.ps7.4/4.0.2975/microsoft.azure.functions.powershellworker.ps7.4.4.0.2975.nupkg"; })
+  (fetchNuGet { pname = "Microsoft.Azure.Functions.PythonWorker"; version = "4.20.0"; sha256 = "055n0004g6s995ymlb2bhj6i6zl24j5lfpndjfxg61cfb7g4kzyz"; url = "https://azfunc.pkgs.visualstudio.com/e6a70c92-4128-439f-8012-382fe78d6396/_packaging/eb652719-f36a-4e78-8541-e13a3cd655f9/nuget/v3/flat2/microsoft.azure.functions.pythonworker/4.20.0/microsoft.azure.functions.pythonworker.4.20.0.nupkg"; })
+  (fetchNuGet { pname = "Microsoft.Azure.KeyVault.Core"; version = "2.0.4"; sha256 = "0rv7z989zxk5myqd4n2a9ccxx9jr4jb3fslc6b4w3p0570af60hn"; })
+  (fetchNuGet { pname = "Microsoft.Azure.Storage.Common"; version = "11.1.7"; sha256 = "0pi31nqz858fir9bw1yv41wc7m2icwvx4pll6wq5r66i1hndw98s"; })
+  (fetchNuGet { pname = "Microsoft.Azure.Storage.File"; version = "11.1.7"; sha256 = "11lnxiv2vbfczffa8czr6gaw648mamgsgdh5dikbydlc8m8nhbx4"; })
+  (fetchNuGet { pname = "Microsoft.Azure.WebJobs"; version = "3.0.39"; sha256 = "1yyn3ipls8vvhhy06h9kd1sr2ay93vy1f3byn03m413qa7rsdp1m"; })
+  (fetchNuGet { pname = "Microsoft.Azure.WebJobs.Core"; version = "3.0.39"; sha256 = "08ngapfblvgfj8b5x4wi0ghvwnq6yg2d3190ghnygrlli4f8bia7"; })
+  (fetchNuGet { pname = "Microsoft.Azure.WebJobs.Extensions"; version = "5.0.0-beta.2-10879"; sha256 = "09zawvx47x5pv3w81wsl6izf90xkk0hswf318xngnd2bskli4wi1"; url = "https://azfunc.pkgs.visualstudio.com/e6a70c92-4128-439f-8012-382fe78d6396/_packaging/1e0b47db-42dd-4931-a098-8cb031234dcc/nuget/v3/flat2/microsoft.azure.webjobs.extensions/5.0.0-beta.2-10879/microsoft.azure.webjobs.extensions.5.0.0-beta.2-10879.nupkg"; })
+  (fetchNuGet { pname = "Microsoft.Azure.WebJobs.Extensions.Http"; version = "3.2.0"; sha256 = "0w2006vrvb7b97q3dg8rgldvmpxcnjz939hqhv7vy73xy3dbdp60"; })
+  (fetchNuGet { pname = "Microsoft.Azure.WebJobs.Extensions.Timers.Storage"; version = "1.0.0-beta.1"; sha256 = "03yv9k6ii6chwqhibazqxv1g4y6cjpzi3qz1c0c6z0f4lgmb6qzp"; })
+  (fetchNuGet { pname = "Microsoft.Azure.WebJobs.Host.Storage"; version = "5.0.0-beta.2-11957"; sha256 = "0i0q40v62rlxq58jh0icdwnxiymgmvs6rk9smizml3s7lnsg0dks"; url = "https://azfunc.pkgs.visualstudio.com/e6a70c92-4128-439f-8012-382fe78d6396/_packaging/1e0b47db-42dd-4931-a098-8cb031234dcc/nuget/v3/flat2/microsoft.azure.webjobs.host.storage/5.0.0-beta.2-11957/microsoft.azure.webjobs.host.storage.5.0.0-beta.2-11957.nupkg"; })
+  (fetchNuGet { pname = "Microsoft.Azure.WebJobs.Logging.ApplicationInsights"; version = "3.0.37"; sha256 = "0mlqz64krpy5w9wilc8nd8qigwhikhm9im8xb9jdzm725naghbhz"; url = "https://azfunc.pkgs.visualstudio.com/e6a70c92-4128-439f-8012-382fe78d6396/_packaging/21e57804-e42a-44f4-a801-493faaf56251/nuget/v3/flat2/microsoft.azure.webjobs.logging.applicationinsights/3.0.37/microsoft.azure.webjobs.logging.applicationinsights.3.0.37.nupkg"; })
+  (fetchNuGet { pname = "Microsoft.Azure.WebJobs.Rpc.Core"; version = "3.0.37"; sha256 = "1idsghkya7rghlri3pf8y9drh4qq414gvwx2v0ssisqganc3wy31"; })
+  (fetchNuGet { pname = "Microsoft.Azure.WebJobs.Script"; version = "4.27.5"; sha256 = "08mhii9h4z1a6hf556bkxyhll28j8wyd7h058974j4fq17kl5bdj"; url = "https://azfunc.pkgs.visualstudio.com/e6a70c92-4128-439f-8012-382fe78d6396/_packaging/eb652719-f36a-4e78-8541-e13a3cd655f9/nuget/v3/flat2/microsoft.azure.webjobs.script/4.27.5/microsoft.azure.webjobs.script.4.27.5.nupkg"; })
+  (fetchNuGet { pname = "Microsoft.Azure.WebJobs.Script.Abstractions"; version = "1.0.4-preview"; sha256 = "16k6h7xrg1y272s4rb7mhx16y7aq0s4isvilvgaq8vj3dsiv8blg"; url = "https://azfunc.pkgs.visualstudio.com/e6a70c92-4128-439f-8012-382fe78d6396/_packaging/f37f760c-aebd-443e-9714-ce725cd427df/nuget/v3/flat2/microsoft.azure.webjobs.script.abstractions/1.0.4-preview/microsoft.azure.webjobs.script.abstractions.1.0.4-preview.nupkg"; })
+  (fetchNuGet { pname = "Microsoft.Azure.WebJobs.Script.Grpc"; version = "4.27.5"; sha256 = "0z9b6g20szfxvpkxh8gfhyb5ngx0zdbzwgizyjbqfwkkha6wd12d"; url = "https://azfunc.pkgs.visualstudio.com/e6a70c92-4128-439f-8012-382fe78d6396/_packaging/eb652719-f36a-4e78-8541-e13a3cd655f9/nuget/v3/flat2/microsoft.azure.webjobs.script.grpc/4.27.5/microsoft.azure.webjobs.script.grpc.4.27.5.nupkg"; })
+  (fetchNuGet { pname = "Microsoft.Azure.WebJobs.Script.WebHost"; version = "4.27.5"; sha256 = "0a7z1i0ydaq8z78ym8whgjcw55ijdw4kab4pwckqb104amh750fh"; url = "https://azfunc.pkgs.visualstudio.com/e6a70c92-4128-439f-8012-382fe78d6396/_packaging/eb652719-f36a-4e78-8541-e13a3cd655f9/nuget/v3/flat2/microsoft.azure.webjobs.script.webhost/4.27.5/microsoft.azure.webjobs.script.webhost.4.27.5.nupkg"; })
+  (fetchNuGet { pname = "Microsoft.Azure.WebSites.DataProtection"; version = "2.1.91-alpha"; sha256 = "0x7dabqqwajkrpbjb2psxv7rsk2rnd9w1bln2jadb89jg0qld7y3"; url = "https://azfunc.pkgs.visualstudio.com/e6a70c92-4128-439f-8012-382fe78d6396/_packaging/1e0b47db-42dd-4931-a098-8cb031234dcc/nuget/v3/flat2/microsoft.azure.websites.dataprotection/2.1.91-alpha/microsoft.azure.websites.dataprotection.2.1.91-alpha.nupkg"; })
+  (fetchNuGet { pname = "Microsoft.Bcl.AsyncInterfaces"; version = "1.0.0"; sha256 = "00dx5armvkqjxvkldz3invdlck9nj7w21dlsr2aqp1rqbyrbsbbh"; })
+  (fetchNuGet { pname = "Microsoft.Bcl.AsyncInterfaces"; version = "1.1.1"; sha256 = "0a1ahssqds2ympr7s4xcxv5y8jgxs7ahd6ah6fbgglj4rki1f1vw"; })
+  (fetchNuGet { pname = "Microsoft.Build"; version = "17.0.0"; sha256 = "166brl88y8xn9llc0hmn911k6y74gapmk1mrnfxbv73qj77jxsn1"; })
+  (fetchNuGet { pname = "Microsoft.Build.Framework"; version = "17.0.0"; sha256 = "08c257dmfa6n41lq4fxb34khi8jbwlqfy1168x7h7zsbh3wss7yq"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.Analyzers"; version = "1.1.0"; sha256 = "08r667hj2259wbim1p3al5qxkshydykmb7nd9ygbjlg4mmydkapc"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.Analyzers"; version = "2.9.4"; sha256 = "1h3n680d3a2m6dcqvzwwipx6gjjcnzxk05dv1jxvxfn62bckq7mv"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.Common"; version = "2.8.0"; sha256 = "0g4h41fs0r8lqh9pk9s4mc1090kdpa6sbxq4rc866s8hnq9s1h4j"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.Common"; version = "3.3.1"; sha256 = "1badvp024rwwipy99csx56k8ah192wngq4gb690pz8j0qfvsg9mr"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.CSharp"; version = "2.8.0"; sha256 = "0p1xvw1h2fmnxywv1j4x6p3rgarpc8mfwfgn0vflk5xfnc961f6w"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.CSharp"; version = "3.3.1"; sha256 = "05fgbs0fny6n338zihzlvvldm2jzc8sril0ndj1iqvgzdc75wplk"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.CSharp.Scripting"; version = "3.3.1"; sha256 = "1xkrfg5lplpi9q183f7hc3s7lscali07sz2p8y57pj1md251r6if"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.Razor"; version = "2.1.0"; sha256 = "1d5nk0x2bnb0zzdi1ixs2fd53ih4bm91av0g4xvjj3ca17baz65m"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.Scripting.Common"; version = "3.3.1"; sha256 = "0l047bcdzfpggr329i2ky2iy1zbrb5jw4w95fzj2lbz9wfaxf0xf"; })
+  (fetchNuGet { pname = "Microsoft.CodeCoverage"; version = "1.0.3"; sha256 = "0jgxcnaaabmvgdjwxb4ldfm90xbj1mcsjww5ngp8fdchzlk07vdw"; })
+  (fetchNuGet { pname = "Microsoft.CSharp"; version = "4.3.0"; sha256 = "0gw297dgkh0al1zxvgvncqs0j15lsna9l1wpqas4rflmys440xvb"; })
+  (fetchNuGet { pname = "Microsoft.CSharp"; version = "4.4.1"; sha256 = "0z6d1i6xcf0c00z6rs75rgw4ncs9q2m8amasf6mmbf40fm02ry7g"; })
+  (fetchNuGet { pname = "Microsoft.CSharp"; version = "4.5.0"; sha256 = "01i28nvzccxbqmiz217fxs6hnjwmd5fafs37rd49a6qp53y6623l"; })
+  (fetchNuGet { pname = "Microsoft.CSharp"; version = "4.7.0"; sha256 = "0gd67zlw554j098kabg887b5a6pq9kzavpa3jjy5w53ccjzjfy8j"; })
+  (fetchNuGet { pname = "Microsoft.DotNet.PlatformAbstractions"; version = "1.0.3"; sha256 = "1nayc88w80jrmnf3mkq0fk2bjhpgnk59m9yl40d9qfj06bzvckxl"; })
+  (fetchNuGet { pname = "Microsoft.DotNet.PlatformAbstractions"; version = "2.1.0"; sha256 = "1qydvyyinj3b5mraazjal3n2k7jqhn05b6n1a2f3qjkqkxi63dmy"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Azure"; version = "1.1.1"; sha256 = "0g3nixm0j1clyfij3s3c22k3b6xv8am1cgzz590r2xmsqrvd9kqm"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Azure"; version = "1.7.0"; sha256 = "09ibdbxsvym182aglhiz5vqc6h0zhw3717dyg7rwf0wi5zsc27f8"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Caching.Abstractions"; version = "1.0.0"; sha256 = "0j2wjgmcpjilvccjq4481x7g8zd2sga29wx902sqfi0ymqacj9jd"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Caching.Abstractions"; version = "2.1.0"; sha256 = "009vnlnrvkjki2s45pq3gwp25grkyr9dwsyi87mn4iimfii5c6ck"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Caching.Abstractions"; version = "5.0.0"; sha256 = "0j83zapqhgqb4v5f6kn891km095pfhvsqha357a86ccclmv2czvb"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Caching.Memory"; version = "1.0.0"; sha256 = "0y69cxadbhpv2xabds9ri06hic85ri1mq0qrdmih9inbgx2cwar3"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Caching.Memory"; version = "2.1.0"; sha256 = "020xm0vhhg9wr133pacjff5qy6dql4dwvj3r4rzyqck2kkdr7xzx"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Caching.Memory"; version = "5.0.0"; sha256 = "0l8spndl3kvccjlay202msm31iy5iig0i9ddbsdy92wbcjr97lca"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Configuration"; version = "2.0.0"; sha256 = "0yssxq9di5h6xw2cayp5hj3l9b2p0jw9wcjz73rwk4586spac9s9"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Configuration"; version = "2.1.0"; sha256 = "04rjl38wlr1jjjpbzgf64jp0ql6sbzbil0brwq9mgr3hdgwd7vx2"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Configuration"; version = "2.1.1"; sha256 = "0244czr3jflvzcj6axq61j10dkl0f16ad34rw81ryg57v4cvlwx6"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Configuration"; version = "3.0.3"; sha256 = "0fiwv35628rzkpixpbqcj8ln4c0hnwhr3is8ha38a9pdzlrs6zx8"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Configuration"; version = "3.1.0"; sha256 = "1rszgz0rd5kvib5fscz6ss3pkxyjwqy0xpd4f2ypgzf5z5g5d398"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Configuration"; version = "5.0.0"; sha256 = "01m9vzlq0vg0lhckj2dimwq42niwny8g3lm13c9a401hlyg90z1p"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Configuration"; version = "6.0.0"; sha256 = "1zdyai2rzngmsp3706d12qrdk315c1s3ja218fzb3nc3wd1vz0s8"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Configuration.Abstractions"; version = "2.0.0"; sha256 = "1ilz2yrgg9rbjyhn6a5zh9pr51nmh11z7sixb4p7vivgydj9gxwf"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Configuration.Abstractions"; version = "2.1.0"; sha256 = "03gzlr3z9j1xnr1k6y91zgxpz3pj27i3zsvjwj7i8jqnlqmk7pxd"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Configuration.Abstractions"; version = "2.1.1"; sha256 = "0b4bn0cf39c6jlc8xnpi1d8f3pz0qhf8ng440yb95y5jv5q4fdyw"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Configuration.Abstractions"; version = "2.2.0"; sha256 = "1fv5277hyhfqmc0gqszyqb1ilwnijm8kc9606yia6hwr8pxyg674"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Configuration.Abstractions"; version = "3.0.3"; sha256 = "18l6ys6z7j07vf5pa3g0d018dfgk5vb9hf3393cmmh448rpjq41m"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Configuration.Abstractions"; version = "3.1.0"; sha256 = "1f7h52kamljglx5k08ccryilvk6d6cvr9c26lcb6b2c091znzk0q"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Configuration.Abstractions"; version = "5.0.0"; sha256 = "0fqxkc9pjxkqylsdf26s9q21ciyk56h1w33pz3v1v4wcv8yv1v6k"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Configuration.Abstractions"; version = "6.0.0"; sha256 = "0w6wwxv12nbc3sghvr68847wc9skkdgsicrz3fx4chgng1i3xy0j"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Configuration.Binder"; version = "2.1.0"; sha256 = "0x1888w5ypavvszfmpja9krgc64527prs75vm8xbf9fv3rgsplql"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Configuration.Binder"; version = "2.1.1"; sha256 = "0n91s6cjfv8plf5swhr307s849jmq2pa3i1rbpb0cb0grxml0mqm"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Configuration.Binder"; version = "3.0.3"; sha256 = "0zy90kvlvxinwqz38cwj1jmp06a8gar1crdbycjk5wy8d6w5m0br"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Configuration.Binder"; version = "6.0.0"; sha256 = "15hb2rbzgri1fq8wpj4ll7czm3rxqzszs02phnhjnncp90m5rmpc"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Configuration.EnvironmentVariables"; version = "2.1.0"; sha256 = "0xx3idb1l5y1da5zynlys5gyarijmw5pc9hgci8xdxbrcv6rzbjb"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Configuration.EnvironmentVariables"; version = "2.1.1"; sha256 = "0b7f3fjdnfdm7qzqnbym344rbv8fh9qmngqnz5q1c2rapm9s6si8"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Configuration.FileExtensions"; version = "2.1.0"; sha256 = "1lz2xwm63clbh9dfhmygbqvcp4dsrwh5jihv82dmqd5h7lqngl40"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Configuration.FileExtensions"; version = "2.1.1"; sha256 = "0nfydlxvgs7bxqamj0jww1wwxbipzm30ygxabk29zx9q1r0qbnx5"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Configuration.FileExtensions"; version = "3.1.0"; sha256 = "1bg73szp1kyinvfq9ws40w1dsyci66y16av16fr22cpf8113064n"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Configuration.Json"; version = "2.1.0"; sha256 = "1hpb6c3hqkb9xx1c0psknja4g0zj9290q3rwmsm5qk7iv525zqk4"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Configuration.Json"; version = "3.1.0"; sha256 = "0pg4q2wbhiwd3nan419xwmzgzx9n29bblyxdf6s7rjjx5g9q19pj"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.DependencyInjection"; version = "2.0.0"; sha256 = "018izzgykaqcliwarijapgki9kp2c560qv8qsxdjywr7byws5apq"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.DependencyInjection"; version = "2.1.0"; sha256 = "1h30yw0fbjkb42jb5n291f3jns1f5g1asjaf9mjlgpy3k6x96gln"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.DependencyInjection"; version = "2.1.1"; sha256 = "1ll7kmp8csngy27azxh0vcli2w4sgvamqh11c9z5d4spjh6jzxcp"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.DependencyInjection"; version = "2.2.0"; sha256 = "0lvv45rvq1xbf47lz818rjydc776zk8mf7svpzh1dml4qwlx9zck"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.DependencyInjection"; version = "3.0.3"; sha256 = "0nd36n0zfqv5l4w4jlbs2smaw0x7lw49aw1wgk3wsyv69s74p3gj"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.DependencyInjection"; version = "5.0.0"; sha256 = "15sdwcyzz0qlybwbdq854bn3jk6kx7awx28gs864c4shhbqkppj4"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.DependencyInjection"; version = "6.0.0"; sha256 = "1wlhb2vygzfdjbdzy7waxblmrx0q3pdcqvpapnpmq9fcx5m8r6w1"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.DependencyInjection.Abstractions"; version = "1.0.0"; sha256 = "0c4zjjpzvngd06kpy5dmws5ljzwf23g3bklrfxaxbkkvy027svqi"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.DependencyInjection.Abstractions"; version = "2.0.0"; sha256 = "1pwrfh9b72k9rq6mb2jab5qhhi225d5rjalzkapiayggmygc8nhz"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.DependencyInjection.Abstractions"; version = "2.1.0"; sha256 = "0c0cx8r5xkjpxmcfp51959jnp55qjvq28d9vaslk08avvi1by12s"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.DependencyInjection.Abstractions"; version = "2.1.1"; sha256 = "0rn0925aqm1fsbaf0n8jy6ng2fm1cy97lp7yikvx31m6178k9i84"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.DependencyInjection.Abstractions"; version = "2.2.0"; sha256 = "1jyzfdr9651h3x6pxwhpfbb9mysfh8f8z1jvy4g117h9790r9zx5"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.DependencyInjection.Abstractions"; version = "3.0.3"; sha256 = "1hyilp5gr19xz7zcyar6h8jpfksqbn5s9kz0qrfqwvqhq2p7sm5g"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.DependencyInjection.Abstractions"; version = "5.0.0"; sha256 = "17cz6s80va0ch0a6nqa1wbbbp3p8sqxb96lj4qcw67ivkp2yxiyj"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.DependencyInjection.Abstractions"; version = "6.0.0"; sha256 = "1vi67fw7q99gj7jd64gnnfr4d2c0ijpva7g9prps48ja6g91x6a9"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.DependencyModel"; version = "1.0.3"; sha256 = "1vclzbn8aq3wnvib34kr8g86gi37r6hn1ax9nc1sllid3h026irl"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.DependencyModel"; version = "2.1.0"; sha256 = "0dl4qhjgifm6v3jsfzvzkvddyic77ggp9fq49ah661v45gk6ilgd"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.FileProviders.Abstractions"; version = "2.1.0"; sha256 = "1sxls5f5cgb0wr8cwb05skqmz074683hrhmd3hhq6m5dasnzb8n3"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.FileProviders.Abstractions"; version = "2.1.1"; sha256 = "1shldpcczkc7rkxq0xd4zxm1r047bswy8nj1vx27aisni6nyqxys"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.FileProviders.Abstractions"; version = "2.2.0"; sha256 = "1f83ffb4xjwljg8dgzdsa3pa0582q6b4zm0si467fgkybqzk3c54"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.FileProviders.Abstractions"; version = "3.1.0"; sha256 = "16bpzq9mcy4p80yzp2kd9ijrvhmxbrm5x7aljk46n7fpg666g59b"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.FileProviders.Abstractions"; version = "6.0.0"; sha256 = "1fbqmfapxdz77drcv1ndyj2ybvd2rv4c9i9pgiykcpl4fa6dc65q"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.FileProviders.Composite"; version = "2.1.0"; sha256 = "1yyiqjiz5gb13gr1wfmdg2xvd301zmzf6pj5bg8y9ns0m4pfwixj"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.FileProviders.Physical"; version = "2.1.0"; sha256 = "1firpsl5bk219i9gdfgiqw1zm68146h1dzx9hvawfpw9slfaa56w"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.FileProviders.Physical"; version = "2.1.1"; sha256 = "13rharvsycfk0056fbcx55npp9py7ng3hgcsasz1inva3q9lcngj"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.FileProviders.Physical"; version = "3.1.0"; sha256 = "0msas2gvpyz43d76pbdlzm40nw2n15xzixjyhapbv08hvb3l4nds"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.FileSystemGlobbing"; version = "2.1.0"; sha256 = "1d2622qp22x1cnlwycnzjbc3sgi9jria26fk78zwzsa08npa3avv"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.FileSystemGlobbing"; version = "2.1.1"; sha256 = "039w2gfvapdy5a1gl1bkajr6glngp29j895cgysy8132vg80jgwb"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.FileSystemGlobbing"; version = "3.1.0"; sha256 = "1qvifck5rr6xqnjzqh2gm9vzprsmwp068gkmk44ib65236p1pg6x"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Hosting"; version = "2.1.0"; sha256 = "17dvhs4fbmp3ch6i9ph4yg0b4rq69ax1g4rv946wvwy91wqy7x7k"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Hosting.Abstractions"; version = "2.1.0"; sha256 = "04vm9mdjjzg3lpp2rzpgkpn8h5bzdl3bwcr22lshd3kp602ws4k9"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Hosting.Abstractions"; version = "2.1.1"; sha256 = "1vgiby2slglmwg4kjxyn6cmb3xksps6i6c9z11za6s8d2czjl90l"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Hosting.Abstractions"; version = "2.2.0"; sha256 = "1xc7xr1nq7akfahyl5in9iyxrygap2xi9nxh39rfm37sf8lk55v1"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Hosting.Abstractions"; version = "6.0.0"; sha256 = "1mwjx6li4a82nb589763whpnhf5hfy1bpv1dzqqvczb1lhxhzhlj"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Http"; version = "3.0.3"; sha256 = "0glfid82amr4mxjqpq2ar6vhq6wv88sp463yvhg4pravkcrd0611"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Localization"; version = "2.1.0"; sha256 = "1xffy6cfl1apf2fhwzbaf770fiqpnpimv9l8cwg01r6wv6rg4sj2"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Localization.Abstractions"; version = "2.1.0"; sha256 = "077yw87idwrvm80ycyx118w1nby9agvb6pws5spq7gpky54s1zpb"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Logging"; version = "2.0.0"; sha256 = "1jkwjcq1ld9znz1haazk8ili2g4pzfdp6i7r7rki4hg3jcadn386"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Logging"; version = "2.1.1"; sha256 = "12pag6rf01xfa8x1h30mf4czfhlhg2kgi5q712jicy3h12c02w8y"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Logging"; version = "3.0.3"; sha256 = "0kyh6bk9iywbdvn29zm1770fwmag58y7c8rfpx886anxs6p9rh61"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Logging"; version = "5.0.0"; sha256 = "1qa1l18q2jh9azya8gv1p8anzcdirjzd9dxxisb4911i9m1648i3"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Logging"; version = "6.0.0"; sha256 = "0fd9jii3y3irfcwlsiww1y9npjgabzarh33rn566wpcz24lijszi"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Logging.Abstractions"; version = "2.0.0"; sha256 = "1x5isi71z02khikzvm7vaschb006pqqrsv86ky1x08a4hir4s43h"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Logging.Abstractions"; version = "2.1.0"; sha256 = "1gvgif1wcx4k6pv7gc00qv1hid945jdywy1s50s33q0hfd91hbnj"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Logging.Abstractions"; version = "2.1.1"; sha256 = "1sgpwj0sa0ac7m5fnkb482mnch8fsv8hfbvk53c6lyh47s1xhdjg"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Logging.Abstractions"; version = "2.2.0"; sha256 = "02w7hp6jicr7cl5p456k2cmrjvvhm6spg5kxnlncw3b72358m5wl"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Logging.Abstractions"; version = "3.0.3"; sha256 = "1wj871vl1azasbn2lrzzycvzkk72rvaxywnj193xwv11420b0mjh"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Logging.Abstractions"; version = "5.0.0"; sha256 = "1yza38675dbv1qqnnhqm23alv2bbaqxp0pb7zinjmw8j2mr5r6wc"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Logging.Abstractions"; version = "6.0.0"; sha256 = "0b75fmins171zi6bfdcq1kcvyrirs8n91mknjnxy4c3ygi1rrnj0"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Logging.ApplicationInsights"; version = "2.21.0"; sha256 = "0f8kz1sc66dmh443zcxkjvf0p5c9w755h0i13m9mvvwz56k6j8d6"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Logging.Configuration"; version = "2.1.0"; sha256 = "1ia9nw7p5kx81n1x4l2n3jhwl55c1i12zm8245191d5g3b19f405"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Logging.Configuration"; version = "6.0.0"; sha256 = "0plx785hk61arjxf0m3ywy9hl5nii25raj4523n3ql7mmv6hxqr1"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Logging.Console"; version = "2.0.0"; sha256 = "0kdl5vh0fpizh48plj7zhmqv15wh74ij4rgi8hpzfk4y5b8nhgh1"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Logging.Console"; version = "6.0.0"; sha256 = "1383b0r33dzz0hrch9cqzzxr9vxr21qq0a5vnrpkfq71m2fky31d"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.ObjectPool"; version = "2.1.0"; sha256 = "0i0vmfc3ch7xa3awmbw3byylprfl2d6dp7lgm8k8f215kxzl1wdn"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.ObjectPool"; version = "2.1.1"; sha256 = "1rc1f9pqjljgqp670i3a4v8y4bsydcbm6mpmhw2dq753cg90gx4a"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.ObjectPool"; version = "2.2.0"; sha256 = "0n1q9lvc24ii1shzy575xldgmz7imnk4dswwwcgmzz93klri9r1z"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Options"; version = "1.0.0"; sha256 = "0gi3rj7hdkk5cq63biil8245mpcjf31l0d8cbl2gv7813h16ckmx"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Options"; version = "2.0.0"; sha256 = "0g4zadlg73f507krilhaaa7h0jdga216syrzjlyf5fdk25gxmjqh"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Options"; version = "2.1.0"; sha256 = "0w9644sryd1c6r3n4lq2cgd5pn6jl3k5m38a05m7vjffa4m2spd2"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Options"; version = "2.1.1"; sha256 = "0wgpsi874gzzjj099xbdmmsifslkbdjkxd5xrzpc5xdglpkw08vl"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Options"; version = "2.2.0"; sha256 = "1b20yh03fg4nmmi3vlf6gf13vrdkmklshfzl3ijygcs4c2hly6v0"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Options"; version = "3.0.3"; sha256 = "0lq433x3z3dhf4w10vrxnqami6xsr6mwasla3qhmfx7yfybgz7y0"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Options"; version = "5.0.0"; sha256 = "1rdmgpg770x8qwaaa6ryc27zh93p697fcyvn5vkxp0wimlhqkbay"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Options"; version = "6.0.0"; sha256 = "008pnk2p50i594ahz308v81a41mbjz9mwcarqhmrjpl2d20c868g"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Options.ConfigurationExtensions"; version = "2.1.0"; sha256 = "19zvypljvd74q50xl75xy1n869kha98slff4q012q7jpl9lfyf57"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Options.ConfigurationExtensions"; version = "6.0.0"; sha256 = "1k6q91vrhq1r74l4skibn7wzxzww9l74ibxb2i8gg4q6fzbiivba"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Primitives"; version = "1.0.0"; sha256 = "0gmcvilj80xf5j06icjsg75qn65bdg9qca5a86sg8cs2licbxss1"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Primitives"; version = "2.0.0"; sha256 = "1xppr5jbny04slyjgngxjdm0maxdh47vq481ps944d7jrfs0p3mb"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Primitives"; version = "2.1.0"; sha256 = "1r9gzwdfmb8ysnc4nzmyz5cyar1lw0qmizsvrsh252nhlyg06nmb"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Primitives"; version = "2.1.1"; sha256 = "033rkqdffybq5prhc7nn6v68zij393n00s5a82yf2n86whwvdfwx"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Primitives"; version = "2.2.0"; sha256 = "0znah6arbcqari49ymigg3wiy2hgdifz8zsq8vdc3ynnf45r7h0c"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Primitives"; version = "3.0.3"; sha256 = "08zlr6kl92znj9v2cs1wsjw6s98nxbkwnxk8pccbv0b4c7xhb3pf"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Primitives"; version = "3.1.0"; sha256 = "1w1y22njywwysi8qjnj4m83qhbq0jr4mmjib0hfawz6cwamh7xrb"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Primitives"; version = "5.0.0"; sha256 = "0swqcknyh87ns82w539z1mvy804pfwhgzs97cr3nwqk6g5s42gd6"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Primitives"; version = "6.0.0"; sha256 = "1kjiw6s4yfz9gm7mx3wkhp06ghnbs95icj9hi505shz9rjrg42q2"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.WebEncoders"; version = "2.1.0"; sha256 = "04dby8szfzmrry3b7vfysbis3yg8q1fbqk82ck8z6zdxga1nv2dj"; })
+  (fetchNuGet { pname = "Microsoft.Identity.Client"; version = "4.54.1"; sha256 = "1g7bgklz71vwamr4w2rw3k07h6vzwkl0jqlz0cxnp98pfi8k9c17"; })
+  (fetchNuGet { pname = "Microsoft.Identity.Client.Extensions.Msal"; version = "2.31.0"; sha256 = "1x9xbcm1dq7y1mmldqd1ga7ayczz7ydjj1bfbmx65bi46z63am5r"; })
+  (fetchNuGet { pname = "Microsoft.IdentityModel.Abstractions"; version = "6.22.0"; sha256 = "06495i2i9cabys4s0dkaz0rby8k47gy627v9ivp7aa3k6xmypviz"; })
+  (fetchNuGet { pname = "Microsoft.IdentityModel.Abstractions"; version = "6.32.0"; sha256 = "01b6kyhk8kv1ys9ynkmlaaif4q4i0hpgrjqfmqg04lbh5g0rl6f4"; })
+  (fetchNuGet { pname = "Microsoft.IdentityModel.JsonWebTokens"; version = "6.32.0"; sha256 = "1q4qfr4i9jbdsbrbjhxpgj0ikf6xcn5msvq0ms1vxv01ah83r522"; })
+  (fetchNuGet { pname = "Microsoft.IdentityModel.Logging"; version = "6.32.0"; sha256 = "1wn6rylcagvz4sjr8mi707r6c91f931cqyy5ghgn1l6da2hi1d5n"; })
+  (fetchNuGet { pname = "Microsoft.IdentityModel.Protocols"; version = "6.32.0"; sha256 = "0bziphc91qdqnv4wkzdz9mr9m4sc02qqsjj1m6ak25pg4kp563pm"; })
+  (fetchNuGet { pname = "Microsoft.IdentityModel.Protocols.OpenIdConnect"; version = "6.32.0"; sha256 = "1c35a1y9lzvygb0v1z73cngw5gr0qshbn2jvrnnx3961g52c17lb"; })
+  (fetchNuGet { pname = "Microsoft.IdentityModel.Tokens"; version = "6.32.0"; sha256 = "125c8drkknrbbmy40r5a7n1mnx6chrjlw6m0d2n0gks9qyr30prr"; })
+  (fetchNuGet { pname = "Microsoft.IdentityModel.Validators"; version = "6.32.0"; sha256 = "1h6rpn8pxlbzdwj7sfmgjq0sbz255dg1is62gyg2y8mp9pizwm1n"; })
+  (fetchNuGet { pname = "Microsoft.Net.Http.Headers"; version = "2.1.0"; sha256 = "1a02bll0flsin9grd3jxbi76ycl42qamynalbp7qbqcsprabw3ai"; })
+  (fetchNuGet { pname = "Microsoft.Net.Http.Headers"; version = "2.1.1"; sha256 = "06q4xmxj25ry7gkl51zi7vh2957k9s49vdrlgfy03w9rqk81vnld"; })
+  (fetchNuGet { pname = "Microsoft.Net.Http.Headers"; version = "2.2.0"; sha256 = "0w6lrk9z67bcirq2cj2ldfhnizc6id77ba6i30hjzgqjlyhh1gx5"; })
+  (fetchNuGet { pname = "Microsoft.NET.StringTools"; version = "1.0.0"; sha256 = "06yakiyzgss399giivfx6xdrnfxqfsvy5fzm90scjanvandv0sdj"; })
+  (fetchNuGet { pname = "Microsoft.NET.Test.Sdk"; version = "15.6.2"; sha256 = "10ii20xm855kj4klvx9rf6q566ay473ip7a8y0cp68z3idq72n32"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "1.0.1"; sha256 = "01al6cfxp68dscl15z7rxfw9zvhm64dncsw09a1vmdkacsa2v6lr"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "1.1.0"; sha256 = "08vh1r12g6ykjygq5d3vq09zylgb84l63k49jc4v8faw9g93iqqm"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "1.1.1"; sha256 = "164wycgng4mi9zqi2pnsf1pq6gccbqvw6ib916mqizgjmd8f44pj"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "2.0.0"; sha256 = "1fk2fk2639i7nzy58m9dvpdnzql4vb8yl8vr19r2fp8lmj9w2jr0"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "2.1.2"; sha256 = "1507hnpr9my3z4w1r6xk5n0s1j3y6a2c2cnynj76za7cphxi1141"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "3.1.0"; sha256 = "1gc1x8f95wk8yhgznkwsg80adk1lc65v9n5rx4yaa4bc5dva0z3j"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "3.1.9"; sha256 = "1h5cvi2f8p3khgsidrrlgqyc52vjfrxivakfnpr89b838x2hrii2"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "5.0.0"; sha256 = "0mwpwdflidzgzfx2dlpkvvnkgkr2ayaf0s80737h4wa35gaj11rc"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Targets"; version = "1.0.1"; sha256 = "0ppdkwy6s9p7x9jix3v4402wb171cdiibq7js7i13nxpdky7074p"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Targets"; version = "1.1.0"; sha256 = "193xwf33fbm0ni3idxzbr5fdq3i2dlfgihsac9jj7whj0gd902nh"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Targets"; version = "1.1.3"; sha256 = "05smkcyxir59rgrmp7d6327vvrlacdgldfxhmyr1azclvga1zfsq"; })
+  (fetchNuGet { pname = "Microsoft.OData.Core"; version = "7.6.4"; sha256 = "1m85s9zxr84slwxs1xw22ys6yvhrd4qmn31z23q94dhvrqlxdvqa"; })
+  (fetchNuGet { pname = "Microsoft.OData.Edm"; version = "7.6.4"; sha256 = "1i7cxijnkpyj612fy58mzk18sxjd81my49hwrhnp2j218lj2303h"; })
+  (fetchNuGet { pname = "Microsoft.Security.Utilities"; version = "1.3.0"; sha256 = "188l55zrdcgpc1n46mkiclkg8wi4sf3ksj9i1d514fipmvnl0wpn"; })
+  (fetchNuGet { pname = "Microsoft.Spatial"; version = "7.6.4"; sha256 = "1qi03p8ws48hi4lf9vvvxsjisxc3p7i8289jf2q4i611ap3gkczd"; })
+  (fetchNuGet { pname = "Microsoft.TestPlatform.ObjectModel"; version = "15.6.2"; sha256 = "1ym6rrnah0mia5v04k1dbhg12sd63vrfn7c1sk243dag213lk09v"; })
+  (fetchNuGet { pname = "Microsoft.TestPlatform.TestHost"; version = "15.6.2"; sha256 = "1q7snd0smkn1ck1zhczmmly3mg0pdndxq6qv8bmg4qimril2wfv9"; })
+  (fetchNuGet { pname = "Microsoft.Win32.Primitives"; version = "4.0.1"; sha256 = "1n8ap0cmljbqskxpf8fjzn7kh1vvlndsa75k01qig26mbw97k2q7"; })
+  (fetchNuGet { pname = "Microsoft.Win32.Primitives"; version = "4.3.0"; sha256 = "0j0c1wj4ndj21zsgivsc24whiya605603kxrbiw6wkfdync464wq"; })
+  (fetchNuGet { pname = "Microsoft.Win32.Registry"; version = "4.0.0"; sha256 = "1spf4m9pikkc19544p29a47qnhcd885klncahz133hbnyqbkmz9k"; })
+  (fetchNuGet { pname = "Microsoft.Win32.Registry"; version = "4.3.0"; sha256 = "1gxyzxam8163vk1kb6xzxjj4iwspjsz9zhgn1w9rjzciphaz0ig7"; })
+  (fetchNuGet { pname = "Microsoft.Win32.Registry"; version = "4.5.0"; sha256 = "1zapbz161ji8h82xiajgriq6zgzmb1f3ar517p2h63plhsq5gh2q"; })
+  (fetchNuGet { pname = "Microsoft.Win32.Registry"; version = "4.7.0"; sha256 = "0bx21jjbs7l5ydyw4p6cn07chryxpmchq2nl5pirzz4l3b0q4dgs"; })
+  (fetchNuGet { pname = "Microsoft.Win32.SystemEvents"; version = "4.7.0"; sha256 = "0pjll2a62hc576hd4wgyasva0lp733yllmk54n37svz5ac7nfz0q"; })
+  (fetchNuGet { pname = "Mono.Posix.NETStandard"; version = "1.0.0"; sha256 = "0xlja36hwpjm837haq15mjh2prcf68lyrmn72nvgpz8qnf9vappw"; })
+  (fetchNuGet { pname = "Moq"; version = "4.8.2"; sha256 = "081qp2rk8qgvpvybspjqlgvs933hmlry7bhql076d7iqx5x4klbq"; })
+  (fetchNuGet { pname = "NCrontab.Signed"; version = "3.3.2"; sha256 = "1rjlrcbgpbvsiaxavpykxjsmfhazr5338pfawzq5c9f7i3hydl2a"; })
+  (fetchNuGet { pname = "NETStandard.Library"; version = "1.6.0"; sha256 = "0nmmv4yw7gw04ik8ialj3ak0j6pxa9spih67hnn1h2c38ba8h58k"; })
+  (fetchNuGet { pname = "NETStandard.Library"; version = "1.6.1"; sha256 = "1z70wvsx2d847a2cjfii7b83pjfs34q05gb037fdjikv5kbagml8"; })
+  (fetchNuGet { pname = "NETStandard.Library"; version = "2.0.1"; sha256 = "0d44wjxphs1ck838v7dapm0ag0b91zpiy33cr5vflsrwrqgj51dk"; })
+  (fetchNuGet { pname = "Newtonsoft.Json"; version = "13.0.2"; sha256 = "1p9splg1min274dpz7xdfgzrwkyfd3xlkygwpr1xgjvvyjvs6b0i"; })
+  (fetchNuGet { pname = "Newtonsoft.Json.Bson"; version = "1.0.1"; sha256 = "1r1hvj5gjl466bya2bfl5aaj8rbwyf5x1msg710wf3k2llbci1xa"; })
+  (fetchNuGet { pname = "Newtonsoft.Json.Bson"; version = "1.0.2"; sha256 = "0c27bhy9x3c2n26inq32kmp6drpm71n6mqnmcr19wrlcaihglj35"; })
+  (fetchNuGet { pname = "NSubstitute"; version = "3.1.0"; sha256 = "12cqhkxizsx00hdpagyg9aha9sp3f56447kbb7gf8z7s3armvvk8"; })
+  (fetchNuGet { pname = "NuGet.Common"; version = "5.11.5"; sha256 = "0rrkxq114q6gl5biacq15xd7w4cczsry5da2q449i8ahbxw1q6cb"; })
+  (fetchNuGet { pname = "NuGet.Configuration"; version = "5.11.5"; sha256 = "02zffklhk4dzib2wphkpcikh6j758v167759d3pl2b49kivhasib"; })
+  (fetchNuGet { pname = "NuGet.DependencyResolver.Core"; version = "5.11.5"; sha256 = "09206r7j2i17mik4vwx3wmpd1mcl769f83brzjl2kk347yd2f6lp"; })
+  (fetchNuGet { pname = "NuGet.Frameworks"; version = "5.11.5"; sha256 = "1bzgwanmw8gkd9n9v6fnr4k88fg7rl3qjy832ip69qxf921anla5"; })
+  (fetchNuGet { pname = "NuGet.LibraryModel"; version = "5.11.5"; sha256 = "127jds09jvn9q1nhbidxas3fzqsr3cxjh4qb2x3yn4z204q07ack"; })
+  (fetchNuGet { pname = "NuGet.Packaging"; version = "5.11.5"; sha256 = "0w53zl8km3slxp2r44brbrs1nzsgpvqyzjwl1k8bq643ppgs0g6w"; })
+  (fetchNuGet { pname = "NuGet.ProjectModel"; version = "5.11.5"; sha256 = "16r6n6pjya6bx6kdskz3gdn57xb69nb5xsg60rzpj9ff41scsi5i"; })
+  (fetchNuGet { pname = "NuGet.Protocol"; version = "5.11.5"; sha256 = "1s0xfnq23lhr9h71naqkmiqxik9w1bwgiwjvdc7pgsqyn38s0rii"; })
+  (fetchNuGet { pname = "NuGet.Versioning"; version = "5.11.5"; sha256 = "17lc6rv9gmmrsnalq4wr71alj5zdvfzfy0kdd0gpckkb6gxfh8al"; })
+  (fetchNuGet { pname = "Octokit"; version = "0.29.0"; sha256 = "1q62w95cj95kff0il9lcjaidgpj3xvh9a6mjy4prrb4j4gm694jb"; })
+  (fetchNuGet { pname = "protobuf-net"; version = "2.3.3"; sha256 = "0h0fl5wrsjr0i5bpz6cq3fcpzfb8g4a239m69pk8l8hn2cnbksi5"; })
+  (fetchNuGet { pname = "RichardSzalay.MockHttp"; version = "5.0.0"; sha256 = "13gvp56xl8vv2wxm0ygld9n2m255la3szgympfh2yx27xx0m80cg"; })
+  (fetchNuGet { pname = "runtime.any.System.Collections"; version = "4.3.0"; sha256 = "0bv5qgm6vr47ynxqbnkc7i797fdi8gbjjxii173syrx14nmrkwg0"; })
+  (fetchNuGet { pname = "runtime.any.System.Diagnostics.Tools"; version = "4.3.0"; sha256 = "1wl76vk12zhdh66vmagni66h5xbhgqq7zkdpgw21jhxhvlbcl8pk"; })
+  (fetchNuGet { pname = "runtime.any.System.Diagnostics.Tracing"; version = "4.3.0"; sha256 = "00j6nv2xgmd3bi347k00m7wr542wjlig53rmj28pmw7ddcn97jbn"; })
+  (fetchNuGet { pname = "runtime.any.System.Globalization"; version = "4.3.0"; sha256 = "1daqf33hssad94lamzg01y49xwndy2q97i2lrb7mgn28656qia1x"; })
+  (fetchNuGet { pname = "runtime.any.System.Globalization.Calendars"; version = "4.3.0"; sha256 = "1ghhhk5psqxcg6w88sxkqrc35bxcz27zbqm2y5p5298pv3v7g201"; })
+  (fetchNuGet { pname = "runtime.any.System.IO"; version = "4.3.0"; sha256 = "0l8xz8zn46w4d10bcn3l4yyn4vhb3lrj2zw8llvz7jk14k4zps5x"; })
+  (fetchNuGet { pname = "runtime.any.System.Reflection"; version = "4.3.0"; sha256 = "02c9h3y35pylc0zfq3wcsvc5nqci95nrkq0mszifc0sjx7xrzkly"; })
+  (fetchNuGet { pname = "runtime.any.System.Reflection.Extensions"; version = "4.3.0"; sha256 = "0zyri97dfc5vyaz9ba65hjj1zbcrzaffhsdlpxc9bh09wy22fq33"; })
+  (fetchNuGet { pname = "runtime.any.System.Reflection.Primitives"; version = "4.3.0"; sha256 = "0x1mm8c6iy8rlxm8w9vqw7gb7s1ljadrn049fmf70cyh42vdfhrf"; })
+  (fetchNuGet { pname = "runtime.any.System.Resources.ResourceManager"; version = "4.3.0"; sha256 = "03kickal0iiby82wa5flar18kyv82s9s6d4xhk5h4bi5kfcyfjzl"; })
+  (fetchNuGet { pname = "runtime.any.System.Runtime"; version = "4.3.0"; sha256 = "1cqh1sv3h5j7ixyb7axxbdkqx6cxy00p4np4j91kpm492rf4s25b"; })
+  (fetchNuGet { pname = "runtime.any.System.Runtime.Handles"; version = "4.3.0"; sha256 = "0bh5bi25nk9w9xi8z23ws45q5yia6k7dg3i4axhfqlnj145l011x"; })
+  (fetchNuGet { pname = "runtime.any.System.Runtime.InteropServices"; version = "4.3.0"; sha256 = "0c3g3g3jmhlhw4klrc86ka9fjbl7i59ds1fadsb2l8nqf8z3kb19"; })
+  (fetchNuGet { pname = "runtime.any.System.Text.Encoding"; version = "4.3.0"; sha256 = "0aqqi1v4wx51h51mk956y783wzags13wa7mgqyclacmsmpv02ps3"; })
+  (fetchNuGet { pname = "runtime.any.System.Text.Encoding.Extensions"; version = "4.3.0"; sha256 = "0lqhgqi0i8194ryqq6v2gqx0fb86db2gqknbm0aq31wb378j7ip8"; })
+  (fetchNuGet { pname = "runtime.any.System.Threading.Tasks"; version = "4.3.0"; sha256 = "03mnvkhskbzxddz4hm113zsch1jyzh2cs450dk3rgfjp8crlw1va"; })
+  (fetchNuGet { pname = "runtime.any.System.Threading.Timer"; version = "4.3.0"; sha256 = "0aw4phrhwqz9m61r79vyfl5la64bjxj8l34qnrcwb28v49fg2086"; })
+  (fetchNuGet { pname = "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "16rnxzpk5dpbbl1x354yrlsbvwylrq456xzpsha1n9y3glnhyx9d"; })
+  (fetchNuGet { pname = "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "0rwpqngkqiapqc5c2cpkj7idhngrgss5qpnqg0yh40mbyflcxf8i"; })
+  (fetchNuGet { pname = "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0hkg03sgm2wyq8nqk6dbm9jh5vcq57ry42lkqdmfklrw89lsmr59"; })
+  (fetchNuGet { pname = "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "1n06gxwlinhs0w7s8a94r1q3lwqzvynxwd3mp10ws9bg6gck8n4r"; })
+  (fetchNuGet { pname = "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0c2p354hjx58xhhz7wv6div8xpi90sc6ibdm40qin21bvi7ymcaa"; })
+  (fetchNuGet { pname = "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "0404wqrc7f2yc0wxv71y3nnybvqx8v4j9d47hlscxy759a525mc3"; })
+  (fetchNuGet { pname = "runtime.native.System"; version = "4.0.0"; sha256 = "1ppk69xk59ggacj9n7g6fyxvzmk1g5p4fkijm0d7xqfkig98qrkf"; })
+  (fetchNuGet { pname = "runtime.native.System"; version = "4.3.0"; sha256 = "15hgf6zaq9b8br2wi1i3x0zvmk410nlmsmva9p0bbg73v6hml5k4"; })
+  (fetchNuGet { pname = "runtime.native.System.IO.Compression"; version = "4.1.0"; sha256 = "0d720z4lzyfcabmmnvh0bnj76ll7djhji2hmfh3h44sdkjnlkknk"; })
+  (fetchNuGet { pname = "runtime.native.System.IO.Compression"; version = "4.3.0"; sha256 = "1vvivbqsk6y4hzcid27pqpm5bsi6sc50hvqwbcx8aap5ifrxfs8d"; })
+  (fetchNuGet { pname = "runtime.native.System.Net.Http"; version = "4.0.1"; sha256 = "1hgv2bmbaskx77v8glh7waxws973jn4ah35zysnkxmf0196sfxg6"; })
+  (fetchNuGet { pname = "runtime.native.System.Net.Http"; version = "4.3.0"; sha256 = "1n6rgz5132lcibbch1qlf0g9jk60r0kqv087hxc0lisy50zpm7kk"; })
+  (fetchNuGet { pname = "runtime.native.System.Net.Security"; version = "4.3.0"; sha256 = "0dnqjhw445ay3chpia9p6vy4w2j6s9vy3hxszqvdanpvvyaxijr3"; })
+  (fetchNuGet { pname = "runtime.native.System.Security.Cryptography"; version = "4.0.0"; sha256 = "0k57aa2c3b10wl3hfqbgrl7xq7g8hh3a3ir44b31dn5p61iiw3z9"; })
+  (fetchNuGet { pname = "runtime.native.System.Security.Cryptography.Apple"; version = "4.3.0"; sha256 = "1b61p6gw1m02cc1ry996fl49liiwky6181dzr873g9ds92zl326q"; })
+  (fetchNuGet { pname = "runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "18pzfdlwsg2nb1jjjjzyb5qlgy6xjxzmhnfaijq5s2jw3cm3ab97"; })
+  (fetchNuGet { pname = "runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "0zy5r25jppz48i2bkg8b9lfig24xixg6nm3xyr1379zdnqnpm8f6"; })
+  (fetchNuGet { pname = "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0qyynf9nz5i7pc26cwhgi8j62ps27sqmf78ijcfgzab50z9g8ay3"; })
+  (fetchNuGet { pname = "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "096ch4n4s8k82xga80lfmpimpzahd2ip1mgwdqgar0ywbbl6x438"; })
+  (fetchNuGet { pname = "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "1klrs545awhayryma6l7g2pvnp9xy4z0r1i40r80zb45q3i9nbyf"; })
+  (fetchNuGet { pname = "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "1dm8fifl7rf1gy7lnwln78ch4rw54g0pl5g1c189vawavll7p6rj"; })
+  (fetchNuGet { pname = "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple"; version = "4.3.0"; sha256 = "10yc8jdrwgcl44b4g93f1ds76b176bajd3zqi2faf5rvh1vy9smi"; })
+  (fetchNuGet { pname = "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0zcxjv5pckplvkg0r6mw3asggm7aqzbdjimhvsasb0cgm59x09l3"; })
+  (fetchNuGet { pname = "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "1m9z1k9kzva9n9kwinqxl97x2vgl79qhqjlv17k9s2ymcyv2bwr6"; })
+  (fetchNuGet { pname = "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0vhynn79ih7hw7cwjazn87rm9z9fj0rvxgzlab36jybgcpcgphsn"; })
+  (fetchNuGet { pname = "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "1cpx56mcfxz7cpn57wvj18sjisvzq8b5vd9rw16ihd2i6mcp3wa1"; })
+  (fetchNuGet { pname = "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "160p68l2c7cqmyqjwxydcvgw7lvl1cr0znkw8fp24d1by9mqc8p3"; })
+  (fetchNuGet { pname = "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "15gsm1a8jdmgmf8j5v1slfz8ks124nfdhk2vxs2rw3asrxalg8hi"; })
+  (fetchNuGet { pname = "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "15zrc8fgd8zx28hdghcj5f5i34wf3l6bq5177075m2bc2j34jrqy"; })
+  (fetchNuGet { pname = "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "0q0n5q1r1wnqmr5i5idsrd9ywl33k0js4pngkwq9p368mbxp8x1w"; })
+  (fetchNuGet { pname = "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "1p4dgxax6p7rlgj4q73k73rslcnz4wdcv8q2flg1s8ygwcm58ld5"; })
+  (fetchNuGet { pname = "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "1x0g58pbpjrmj2x2qw17rdwwnrcl0wvim2hdwz48lixvwvp22n9c"; })
+  (fetchNuGet { pname = "runtime.unix.Microsoft.Win32.Primitives"; version = "4.3.0"; sha256 = "0y61k9zbxhdi0glg154v30kkq7f8646nif8lnnxbvkjpakggd5id"; })
+  (fetchNuGet { pname = "runtime.unix.System.Console"; version = "4.3.1"; sha256 = "15kfi3761mk2i29zg135ipsvavm50nwm4334cy5m5q7iagzsf73p"; })
+  (fetchNuGet { pname = "runtime.unix.System.Diagnostics.Debug"; version = "4.3.0"; sha256 = "1lps7fbnw34bnh3lm31gs5c0g0dh7548wfmb8zz62v0zqz71msj5"; })
+  (fetchNuGet { pname = "runtime.unix.System.IO.FileSystem"; version = "4.3.0"; sha256 = "14nbkhvs7sji5r1saj2x8daz82rnf9kx28d3v2qss34qbr32dzix"; })
+  (fetchNuGet { pname = "runtime.unix.System.Net.Primitives"; version = "4.3.0"; sha256 = "0bdnglg59pzx9394sy4ic66kmxhqp8q8bvmykdxcbs5mm0ipwwm4"; })
+  (fetchNuGet { pname = "runtime.unix.System.Net.Sockets"; version = "4.3.0"; sha256 = "03npdxzy8gfv035bv1b9rz7c7hv0rxl5904wjz51if491mw0xy12"; })
+  (fetchNuGet { pname = "runtime.unix.System.Private.Uri"; version = "4.3.0"; sha256 = "1jx02q6kiwlvfksq1q9qr17fj78y5v6mwsszav4qcz9z25d5g6vk"; })
+  (fetchNuGet { pname = "runtime.unix.System.Runtime.Extensions"; version = "4.3.0"; sha256 = "0pnxxmm8whx38dp6yvwgmh22smknxmqs5n513fc7m4wxvs1bvi4p"; })
+  (fetchNuGet { pname = "Suave"; version = "1.1.3"; sha256 = "1a46gknr70p86rcnmm5z9x1gv3wkb67pf926yskp4i76f1mz9gfg"; })
+  (fetchNuGet { pname = "SuaveServerWrapper"; version = "0.0.3"; sha256 = "0vpp919irg3vs69jymwrh8y8x0dn3s00mcf4a1dqk8ajnnbndsfz"; })
+  (fetchNuGet { pname = "System.AppContext"; version = "4.1.0"; sha256 = "0fv3cma1jp4vgj7a8hqc9n7hr1f1kjp541s6z0q1r6nazb4iz9mz"; })
+  (fetchNuGet { pname = "System.AppContext"; version = "4.3.0"; sha256 = "1649qvy3dar900z3g817h17nl8jp4ka5vcfmsr05kh0fshn7j3ya"; })
+  (fetchNuGet { pname = "System.Buffers"; version = "4.0.0"; sha256 = "13s659bcmg9nwb6z78971z1lr6bmh2wghxi1ayqyzl4jijd351gr"; })
+  (fetchNuGet { pname = "System.Buffers"; version = "4.3.0"; sha256 = "0fgns20ispwrfqll4q1zc1waqcmylb3zc50ys9x8zlwxh9pmd9jy"; })
+  (fetchNuGet { pname = "System.Buffers"; version = "4.5.0"; sha256 = "1ywfqn4md6g3iilpxjn5dsr0f5lx6z0yvhqp4pgjcamygg73cz2c"; })
+  (fetchNuGet { pname = "System.Buffers"; version = "4.5.1"; sha256 = "04kb1mdrlcixj9zh1xdi5as0k0qi8byr5mi3p3jcxx72qz93s2y3"; })
+  (fetchNuGet { pname = "System.Collections"; version = "4.0.11"; sha256 = "1ga40f5lrwldiyw6vy67d0sg7jd7ww6kgwbksm19wrvq9hr0bsm6"; })
+  (fetchNuGet { pname = "System.Collections"; version = "4.3.0"; sha256 = "19r4y64dqyrq6k4706dnyhhw7fs24kpp3awak7whzss39dakpxk9"; })
+  (fetchNuGet { pname = "System.Collections.Concurrent"; version = "4.0.12"; sha256 = "07y08kvrzpak873pmyxs129g1ch8l27zmg51pcyj2jvq03n0r0fc"; })
+  (fetchNuGet { pname = "System.Collections.Concurrent"; version = "4.3.0"; sha256 = "0wi10md9aq33jrkh2c24wr2n9hrpyamsdhsxdcnf43b7y86kkii8"; })
+  (fetchNuGet { pname = "System.Collections.Immutable"; version = "1.2.0"; sha256 = "1jm4pc666yiy7af1mcf7766v710gp0h40p228ghj6bavx7xfa38m"; })
+  (fetchNuGet { pname = "System.Collections.Immutable"; version = "1.3.0"; sha256 = "1fym59ia85x3bjyv59vvjpnd8579alsf790k3i8lfsn0703ny1pq"; })
+  (fetchNuGet { pname = "System.Collections.Immutable"; version = "1.3.1"; sha256 = "17615br2x5riyx8ivf1dcqwj6q3ipq1bi5hqhw54yfyxmx38ddva"; })
+  (fetchNuGet { pname = "System.Collections.Immutable"; version = "1.5.0"; sha256 = "1d5gjn5afnrf461jlxzawcvihz195gayqpcfbv6dd7pxa9ialn06"; })
+  (fetchNuGet { pname = "System.Collections.Immutable"; version = "5.0.0"; sha256 = "1kvcllagxz2q92g81zkz81djkn2lid25ayjfgjalncyc68i15p0r"; })
+  (fetchNuGet { pname = "System.Collections.NonGeneric"; version = "4.0.1"; sha256 = "19994r5y5bpdhj7di6w047apvil8lh06lh2c2yv9zc4fc5g9bl4d"; })
+  (fetchNuGet { pname = "System.Collections.NonGeneric"; version = "4.3.0"; sha256 = "07q3k0hf3mrcjzwj8fwk6gv3n51cb513w4mgkfxzm3i37sc9kz7k"; })
+  (fetchNuGet { pname = "System.Collections.Specialized"; version = "4.0.1"; sha256 = "1wbv7y686p5x169rnaim7sln67ivmv6r57falrnx8aap9y33mam9"; })
+  (fetchNuGet { pname = "System.Collections.Specialized"; version = "4.3.0"; sha256 = "1sdwkma4f6j85m3dpb53v9vcgd0zyc9jb33f8g63byvijcj39n20"; })
+  (fetchNuGet { pname = "System.ComponentModel"; version = "4.0.1"; sha256 = "0v4qpmqlzyfad2kswxxj2frnaqqhz9201c3yn8fmmarx5vlzg52z"; })
+  (fetchNuGet { pname = "System.ComponentModel"; version = "4.3.0"; sha256 = "0986b10ww3nshy30x9sjyzm0jx339dkjxjj3401r3q0f6fx2wkcb"; })
+  (fetchNuGet { pname = "System.ComponentModel.Annotations"; version = "4.4.0"; sha256 = "1c91pgj8vwjf4v0ss90bq63vmw2yr64qinria7blif3ml5c368lf"; })
+  (fetchNuGet { pname = "System.ComponentModel.Annotations"; version = "4.5.0"; sha256 = "1jj6f6g87k0iwsgmg3xmnn67a14mq88np0l1ys5zkxhkvbc8976p"; })
+  (fetchNuGet { pname = "System.ComponentModel.EventBasedAsync"; version = "4.0.11"; sha256 = "07r5i7xwban347nsfw28hhjwpr78ywksjyhywvhj1yr0s7sr00wh"; })
+  (fetchNuGet { pname = "System.ComponentModel.Primitives"; version = "4.1.0"; sha256 = "0wb5mnaag0w4fnyc40x19j8v2vshxp266razw64bcqfyj1whb1q0"; })
+  (fetchNuGet { pname = "System.ComponentModel.Primitives"; version = "4.3.0"; sha256 = "1svfmcmgs0w0z9xdw2f2ps05rdxmkxxhf0l17xk9l1l8xfahkqr0"; })
+  (fetchNuGet { pname = "System.ComponentModel.TypeConverter"; version = "4.1.0"; sha256 = "178cva9p1cs043h5n2fry5xkzr3wc9n0hwbxa8m3ymld9m6wcv0y"; })
+  (fetchNuGet { pname = "System.ComponentModel.TypeConverter"; version = "4.3.0"; sha256 = "17ng0p7v3nbrg3kycz10aqrrlw4lz9hzhws09pfh8gkwicyy481x"; })
+  (fetchNuGet { pname = "System.Configuration.ConfigurationManager"; version = "4.4.0"; sha256 = "1hjgmz47v5229cbzd2pwz2h0dkq78lb2wp9grx8qr72pb5i0dk7v"; })
+  (fetchNuGet { pname = "System.Configuration.ConfigurationManager"; version = "4.5.0"; sha256 = "1frpy24mn6q7hgwayj98kkx89z861f5dmia4j6zc0a2ydgx8x02c"; })
+  (fetchNuGet { pname = "System.Configuration.ConfigurationManager"; version = "4.7.0"; sha256 = "0pav0n21ghf2ax6fiwjbng29f27wkb4a2ddma0cqx04s97yyk25d"; })
+  (fetchNuGet { pname = "System.Console"; version = "4.0.0"; sha256 = "0ynxqbc3z1nwbrc11hkkpw9skw116z4y9wjzn7id49p9yi7mzmlf"; })
+  (fetchNuGet { pname = "System.Console"; version = "4.3.0"; sha256 = "1flr7a9x920mr5cjsqmsy9wgnv3lvd0h1g521pdr1lkb2qycy7ay"; })
+  (fetchNuGet { pname = "System.Diagnostics.Contracts"; version = "4.0.1"; sha256 = "0y6dkd9n5k98vzhc3w14r2pbhf10qjn2axpghpmfr6rlxx9qrb9j"; })
+  (fetchNuGet { pname = "System.Diagnostics.Debug"; version = "4.0.11"; sha256 = "0gmjghrqmlgzxivd2xl50ncbglb7ljzb66rlx8ws6dv8jm0d5siz"; })
+  (fetchNuGet { pname = "System.Diagnostics.Debug"; version = "4.3.0"; sha256 = "00yjlf19wjydyr6cfviaph3vsjzg3d5nvnya26i2fvfg53sknh3y"; })
+  (fetchNuGet { pname = "System.Diagnostics.DiagnosticSource"; version = "4.0.0"; sha256 = "1n6c3fbz7v8d3pn77h4v5wvsfrfg7v1c57lg3nff3cjyh597v23m"; })
+  (fetchNuGet { pname = "System.Diagnostics.DiagnosticSource"; version = "4.3.0"; sha256 = "0z6m3pbiy0qw6rn3n209rrzf9x1k4002zh90vwcrsym09ipm2liq"; })
+  (fetchNuGet { pname = "System.Diagnostics.DiagnosticSource"; version = "4.5.0"; sha256 = "1y8m0p3127nak5yspapfnz25qc9x53gqpvwr3hdpsvrcd2r1pgyj"; })
+  (fetchNuGet { pname = "System.Diagnostics.DiagnosticSource"; version = "4.6.0"; sha256 = "07pff0y96hj0k0izgmqlxydnx8cpsvfymicwi4m3dix979sdly09"; })
+  (fetchNuGet { pname = "System.Diagnostics.DiagnosticSource"; version = "5.0.0"; sha256 = "0phd2qizshjvglhzws1jd0cq4m54gscz4ychzr3x6wbgl4vvfrga"; })
+  (fetchNuGet { pname = "System.Diagnostics.DiagnosticSource"; version = "6.0.0"; sha256 = "0rrihs9lnb1h6x4h0hn6kgfnh58qq7hx8qq99gh6fayx4dcnx3s5"; })
+  (fetchNuGet { pname = "System.Diagnostics.DiagnosticSource"; version = "6.0.1"; sha256 = "17h8bkcv0vf9a7gp9ajkd107zid98wql5kzlzwrjm5nm92nk0bsy"; })
+  (fetchNuGet { pname = "System.Diagnostics.FileVersionInfo"; version = "4.3.0"; sha256 = "094hx249lb3vb336q7dg3v257hbxvz2jnalj695l7cg5kxzqwai7"; })
+  (fetchNuGet { pname = "System.Diagnostics.PerformanceCounter"; version = "4.5.0"; sha256 = "17gh1ijbjvbq4qk4g3k7izwn0h3xsdbbvgih01id68jxach9f7nb"; })
+  (fetchNuGet { pname = "System.Diagnostics.PerformanceCounter"; version = "4.7.0"; sha256 = "1m00cf40rmfphd5l19wis571yygwbwgyxnhp4ya4bv1130lagil1"; })
+  (fetchNuGet { pname = "System.Diagnostics.Process"; version = "4.1.0"; sha256 = "061lrcs7xribrmq7kab908lww6kn2xn1w3rdc41q189y0jibl19s"; })
+  (fetchNuGet { pname = "System.Diagnostics.StackTrace"; version = "4.3.0"; sha256 = "0ash4h9k0m7xsm0yl79r0ixrdz369h7y922wipp5gladmlbvpyjd"; })
+  (fetchNuGet { pname = "System.Diagnostics.TextWriterTraceListener"; version = "4.0.0"; sha256 = "1xigiwkwyxak0dhm0p8i2zb7a9syly9cdb5s9zkr9rbad4f2fqhs"; })
+  (fetchNuGet { pname = "System.Diagnostics.Tools"; version = "4.0.1"; sha256 = "19cknvg07yhakcvpxg3cxa0bwadplin6kyxd8mpjjpwnp56nl85x"; })
+  (fetchNuGet { pname = "System.Diagnostics.Tools"; version = "4.3.0"; sha256 = "0in3pic3s2ddyibi8cvgl102zmvp9r9mchh82ns9f0ms4basylw1"; })
+  (fetchNuGet { pname = "System.Diagnostics.TraceSource"; version = "4.0.0"; sha256 = "1mc7r72xznczzf6mz62dm8xhdi14if1h8qgx353xvhz89qyxsa3h"; })
+  (fetchNuGet { pname = "System.Diagnostics.TraceSource"; version = "4.3.0"; sha256 = "1kyw4d7dpjczhw6634nrmg7yyyzq72k75x38y0l0nwhigdlp1766"; })
+  (fetchNuGet { pname = "System.Diagnostics.Tracing"; version = "4.1.0"; sha256 = "1d2r76v1x610x61ahfpigda89gd13qydz6vbwzhpqlyvq8jj6394"; })
+  (fetchNuGet { pname = "System.Diagnostics.Tracing"; version = "4.3.0"; sha256 = "1m3bx6c2s958qligl67q7grkwfz3w53hpy7nc97mh6f7j5k168c4"; })
+  (fetchNuGet { pname = "System.Drawing.Common"; version = "4.7.0"; sha256 = "0yfw7cpl54mgfcylvlpvrl0c8r1b0zca6p7r3rcwkvqy23xqcyhg"; })
+  (fetchNuGet { pname = "System.Drawing.Common"; version = "4.7.3"; sha256 = "1dcqbm35yx52c7x7sgnnfl6f5nfrj484sgaapnr8dw9x160w64qp"; })
+  (fetchNuGet { pname = "System.Dynamic.Runtime"; version = "4.0.11"; sha256 = "1pla2dx8gkidf7xkciig6nifdsb494axjvzvann8g2lp3dbqasm9"; })
+  (fetchNuGet { pname = "System.Dynamic.Runtime"; version = "4.3.0"; sha256 = "1d951hrvrpndk7insiag80qxjbf2y0y39y8h5hnq9612ws661glk"; })
+  (fetchNuGet { pname = "System.Formats.Asn1"; version = "5.0.0"; sha256 = "1axc8z0839yvqi2cb63l73l6d9j6wd20lsbdymwddz9hvrsgfwpn"; })
+  (fetchNuGet { pname = "System.Globalization"; version = "4.0.11"; sha256 = "070c5jbas2v7smm660zaf1gh0489xanjqymkvafcs4f8cdrs1d5d"; })
+  (fetchNuGet { pname = "System.Globalization"; version = "4.3.0"; sha256 = "1cp68vv683n6ic2zqh2s1fn4c2sd87g5hpp6l4d4nj4536jz98ki"; })
+  (fetchNuGet { pname = "System.Globalization.Calendars"; version = "4.0.1"; sha256 = "0bv0alrm2ck2zk3rz25lfyk9h42f3ywq77mx1syl6vvyncnpg4qh"; })
+  (fetchNuGet { pname = "System.Globalization.Calendars"; version = "4.3.0"; sha256 = "1xwl230bkakzzkrggy1l1lxmm3xlhk4bq2pkv790j5lm8g887lxq"; })
+  (fetchNuGet { pname = "System.Globalization.Extensions"; version = "4.0.1"; sha256 = "0hjhdb5ri8z9l93bw04s7ynwrjrhx2n0p34sf33a9hl9phz69fyc"; })
+  (fetchNuGet { pname = "System.Globalization.Extensions"; version = "4.3.0"; sha256 = "02a5zfxavhv3jd437bsncbhd2fp1zv4gxzakp1an9l6kdq1mcqls"; })
+  (fetchNuGet { pname = "System.IdentityModel.Tokens.Jwt"; version = "6.32.0"; sha256 = "1xv95ipxp9n3j3bdky9pw7pgkb20zzxbjdnldzxd4x4nsqfsnw1c"; })
+  (fetchNuGet { pname = "System.IO"; version = "4.1.0"; sha256 = "1g0yb8p11vfd0kbkyzlfsbsp5z44lwsvyc0h3dpw6vqnbi035ajp"; })
+  (fetchNuGet { pname = "System.IO"; version = "4.3.0"; sha256 = "05l9qdrzhm4s5dixmx68kxwif4l99ll5gqmh7rqgw554fx0agv5f"; })
+  (fetchNuGet { pname = "System.IO.Abstractions"; version = "2.1.0.227"; sha256 = "1dhdv07a06s7b34lpzx3c0n50zzqkhiia9rgi09cbibsbwzpm6b3"; })
+  (fetchNuGet { pname = "System.IO.Compression"; version = "4.1.0"; sha256 = "0iym7s3jkl8n0vzm3jd6xqg9zjjjqni05x45dwxyjr2dy88hlgji"; })
+  (fetchNuGet { pname = "System.IO.Compression"; version = "4.3.0"; sha256 = "084zc82yi6yllgda0zkgl2ys48sypiswbiwrv7irb3r0ai1fp4vz"; })
+  (fetchNuGet { pname = "System.IO.Compression.ZipFile"; version = "4.0.1"; sha256 = "0h72znbagmgvswzr46mihn7xm7chfk2fhrp5krzkjf29pz0i6z82"; })
+  (fetchNuGet { pname = "System.IO.Compression.ZipFile"; version = "4.3.0"; sha256 = "1yxy5pq4dnsm9hlkg9ysh5f6bf3fahqqb6p8668ndy5c0lk7w2ar"; })
+  (fetchNuGet { pname = "System.IO.FileSystem"; version = "4.0.1"; sha256 = "0kgfpw6w4djqra3w5crrg8xivbanh1w9dh3qapb28q060wb9flp1"; })
+  (fetchNuGet { pname = "System.IO.FileSystem"; version = "4.3.0"; sha256 = "0z2dfrbra9i6y16mm9v1v6k47f0fm617vlb7s5iybjjsz6g1ilmw"; })
+  (fetchNuGet { pname = "System.IO.FileSystem.AccessControl"; version = "4.5.0"; sha256 = "1gq4s8w7ds1sp8f9wqzf8nrzal40q5cd2w4pkf4fscrl2ih3hkkj"; })
+  (fetchNuGet { pname = "System.IO.FileSystem.AccessControl"; version = "4.7.0"; sha256 = "0k0lyhk5dmnpljgw9jr3lgbq4q0h5wmzybllglldbaz7jmm7jazi"; })
+  (fetchNuGet { pname = "System.IO.FileSystem.AccessControl"; version = "5.0.0"; sha256 = "0ixl68plva0fsj3byv76bai7vkin86s6wyzr8vcav3szl862blvk"; })
+  (fetchNuGet { pname = "System.IO.FileSystem.Primitives"; version = "4.0.1"; sha256 = "1s0mniajj3lvbyf7vfb5shp4ink5yibsx945k6lvxa96r8la1612"; })
+  (fetchNuGet { pname = "System.IO.FileSystem.Primitives"; version = "4.3.0"; sha256 = "0j6ndgglcf4brg2lz4wzsh1av1gh8xrzdsn9f0yznskhqn1xzj9c"; })
+  (fetchNuGet { pname = "System.IO.Hashing"; version = "6.0.0"; sha256 = "0lga30s3cllg2jkwldgabwrb0jg3dzj859bwj95xhnm3zcklnb41"; })
+  (fetchNuGet { pname = "System.IO.Hashing"; version = "7.0.0"; sha256 = "0vilmb817wnw8w13kkps831p05zzc41dldigpbr3wqi0hsrf8ad9"; })
+  (fetchNuGet { pname = "System.Linq"; version = "4.1.0"; sha256 = "1ppg83svb39hj4hpp5k7kcryzrf3sfnm08vxd5sm2drrijsla2k5"; })
+  (fetchNuGet { pname = "System.Linq"; version = "4.3.0"; sha256 = "1w0gmba695rbr80l1k2h4mrwzbzsyfl2z4klmpbsvsg5pm4a56s7"; })
+  (fetchNuGet { pname = "System.Linq.Expressions"; version = "4.1.0"; sha256 = "1gpdxl6ip06cnab7n3zlcg6mqp7kknf73s8wjinzi4p0apw82fpg"; })
+  (fetchNuGet { pname = "System.Linq.Expressions"; version = "4.3.0"; sha256 = "0ky2nrcvh70rqq88m9a5yqabsl4fyd17bpr63iy2mbivjs2nyypv"; })
+  (fetchNuGet { pname = "System.Linq.Queryable"; version = "4.0.1"; sha256 = "11jn9k34g245yyf260gr3ldzvaqa9477w2c5nhb1p8vjx4xm3qaw"; })
+  (fetchNuGet { pname = "System.Linq.Queryable"; version = "4.3.0"; sha256 = "0vidv9cjwy8scabxd33mm4zl5vql695rz56ydc42m9b731xi2ahj"; })
+  (fetchNuGet { pname = "System.Memory"; version = "4.5.0"; sha256 = "1layqpcx1q4l805fdnj2dfqp6ncx2z42ca06rgsr6ikq4jjgbv30"; })
+  (fetchNuGet { pname = "System.Memory"; version = "4.5.1"; sha256 = "0f07d7hny38lq9w69wx4lxkn4wszrqf9m9js6fh9is645csm167c"; })
+  (fetchNuGet { pname = "System.Memory"; version = "4.5.3"; sha256 = "0naqahm3wljxb5a911d37mwjqjdxv9l0b49p5dmfyijvni2ppy8a"; })
+  (fetchNuGet { pname = "System.Memory"; version = "4.5.4"; sha256 = "14gbbs22mcxwggn0fcfs1b062521azb9fbb7c113x0mq6dzq9h6y"; })
+  (fetchNuGet { pname = "System.Memory.Data"; version = "1.0.2"; sha256 = "1p8qdg0gzxhjvabryc3xws2629pj8w5zz2iqh86kw8sh0rann9ay"; })
+  (fetchNuGet { pname = "System.Net.Http"; version = "4.1.0"; sha256 = "1i5rqij1icg05j8rrkw4gd4pgia1978mqhjzhsjg69lvwcdfg8yb"; })
+  (fetchNuGet { pname = "System.Net.Http"; version = "4.3.0"; sha256 = "1i4gc757xqrzflbk7kc5ksn20kwwfjhw9w7pgdkn19y3cgnl302j"; })
+  (fetchNuGet { pname = "System.Net.Http"; version = "4.3.4"; sha256 = "0kdp31b8819v88l719j6my0yas6myv9d1viql3qz5577mv819jhl"; })
+  (fetchNuGet { pname = "System.Net.NameResolution"; version = "4.3.0"; sha256 = "15r75pwc0rm3vvwsn8rvm2krf929mjfwliv0mpicjnii24470rkq"; })
+  (fetchNuGet { pname = "System.Net.NetworkInformation"; version = "4.1.0"; sha256 = "17ia8gyr0aq76z9cv37yjmpna7nx30xfppw0lifvi9s2q3yjspd2"; })
+  (fetchNuGet { pname = "System.Net.Primitives"; version = "4.0.11"; sha256 = "10xzzaynkzkakp7jai1ik3r805zrqjxiz7vcagchyxs2v26a516r"; })
+  (fetchNuGet { pname = "System.Net.Primitives"; version = "4.3.0"; sha256 = "0c87k50rmdgmxx7df2khd9qj7q35j9rzdmm2572cc55dygmdk3ii"; })
+  (fetchNuGet { pname = "System.Net.Requests"; version = "4.0.11"; sha256 = "13mka55sa6dg6nw4zdrih44gnp8hnj5azynz47ljsh2791lz3d9h"; })
+  (fetchNuGet { pname = "System.Net.Security"; version = "4.3.2"; sha256 = "1aw1ca1vssqrillrh4qkarx0lxwc8wcaqdkfdima8376wb98j2q8"; })
+  (fetchNuGet { pname = "System.Net.Sockets"; version = "4.1.0"; sha256 = "1385fvh8h29da5hh58jm1v78fzi9fi5vj93vhlm2kvqpfahvpqls"; })
+  (fetchNuGet { pname = "System.Net.Sockets"; version = "4.3.0"; sha256 = "1ssa65k6chcgi6mfmzrznvqaxk8jp0gvl77xhf1hbzakjnpxspla"; })
+  (fetchNuGet { pname = "System.Net.WebHeaderCollection"; version = "4.0.1"; sha256 = "10bxpxj80c4z00z3ksrfswspq9qqsw8jwxcbzvymzycb97m9b55q"; })
+  (fetchNuGet { pname = "System.Numerics.Vectors"; version = "4.5.0"; sha256 = "1kzrj37yzawf1b19jq0253rcs8hsq1l2q8g69d7ipnhzb0h97m59"; })
+  (fetchNuGet { pname = "System.ObjectModel"; version = "4.0.12"; sha256 = "1sybkfi60a4588xn34nd9a58png36i0xr4y4v4kqpg8wlvy5krrj"; })
+  (fetchNuGet { pname = "System.ObjectModel"; version = "4.3.0"; sha256 = "191p63zy5rpqx7dnrb3h7prvgixmk168fhvvkkvhlazncf8r3nc2"; })
+  (fetchNuGet { pname = "System.Private.DataContractSerialization"; version = "4.1.1"; sha256 = "1xk9wvgzipssp1393nsg4n16zbr5481k03nkdlj954hzq5jkx89r"; })
+  (fetchNuGet { pname = "System.Private.Uri"; version = "4.3.0"; sha256 = "04r1lkdnsznin0fj4ya1zikxiqr0h6r6a1ww2dsm60gqhdrf0mvx"; })
+  (fetchNuGet { pname = "System.Private.Uri"; version = "4.3.2"; sha256 = "019s7jz73d236p23mnpfaxxwib019i0v1fbwbkys0hskgddvw7cc"; })
+  (fetchNuGet { pname = "System.Reactive"; version = "5.0.0"; sha256 = "1lafmpnadhiwxyd543kraxa3jfdpm6ipblxrjlibym9b1ykpr5ik"; })
+  (fetchNuGet { pname = "System.Reactive.Core"; version = "3.1.1"; sha256 = "15nlyzsccfah5ihrhklr1fjl2mphv4rqbmbvlfbgvijava0czkn9"; })
+  (fetchNuGet { pname = "System.Reactive.Core"; version = "5.0.0"; sha256 = "1dx853anp24awwgpw9j91qkgm2ww3n76jxnmg6qkn79vnfnjg0g7"; })
+  (fetchNuGet { pname = "System.Reactive.Interfaces"; version = "3.1.1"; sha256 = "1i4zq94cwnk3d5bvkds3garm0gg348yxlpvcybq0jpj4m46nd4ak"; })
+  (fetchNuGet { pname = "System.Reactive.Linq"; version = "3.1.1"; sha256 = "1l4844pqbpg2s6cddc5k8a0ff9pc5l7qz9q7zlnk5h0gpjy00wvi"; })
+  (fetchNuGet { pname = "System.Reactive.Linq"; version = "5.0.0"; sha256 = "07p05v13yixbxhs84231k5l8jw3nji0j3zcqc6nsbcmh54jpjsrb"; })
+  (fetchNuGet { pname = "System.Reflection"; version = "4.1.0"; sha256 = "1js89429pfw79mxvbzp8p3q93il6rdff332hddhzi5wqglc4gml9"; })
+  (fetchNuGet { pname = "System.Reflection"; version = "4.3.0"; sha256 = "0xl55k0mw8cd8ra6dxzh974nxif58s3k1rjv1vbd7gjbjr39j11m"; })
+  (fetchNuGet { pname = "System.Reflection.Emit"; version = "4.0.1"; sha256 = "0ydqcsvh6smi41gyaakglnv252625hf29f7kywy2c70nhii2ylqp"; })
+  (fetchNuGet { pname = "System.Reflection.Emit"; version = "4.3.0"; sha256 = "11f8y3qfysfcrscjpjym9msk7lsfxkk4fmz9qq95kn3jd0769f74"; })
+  (fetchNuGet { pname = "System.Reflection.Emit.ILGeneration"; version = "4.0.1"; sha256 = "1pcd2ig6bg144y10w7yxgc9d22r7c7ww7qn1frdfwgxr24j9wvv0"; })
+  (fetchNuGet { pname = "System.Reflection.Emit.ILGeneration"; version = "4.3.0"; sha256 = "0w1n67glpv8241vnpz1kl14sy7zlnw414aqwj4hcx5nd86f6994q"; })
+  (fetchNuGet { pname = "System.Reflection.Emit.Lightweight"; version = "4.0.1"; sha256 = "1s4b043zdbx9k39lfhvsk68msv1nxbidhkq6nbm27q7sf8xcsnxr"; })
+  (fetchNuGet { pname = "System.Reflection.Emit.Lightweight"; version = "4.3.0"; sha256 = "0ql7lcakycrvzgi9kxz1b3lljd990az1x6c4jsiwcacrvimpib5c"; })
+  (fetchNuGet { pname = "System.Reflection.Extensions"; version = "4.0.1"; sha256 = "0m7wqwq0zqq9gbpiqvgk3sr92cbrw7cp3xn53xvw7zj6rz6fdirn"; })
+  (fetchNuGet { pname = "System.Reflection.Extensions"; version = "4.3.0"; sha256 = "02bly8bdc98gs22lqsfx9xicblszr2yan7v2mmw3g7hy6miq5hwq"; })
+  (fetchNuGet { pname = "System.Reflection.Metadata"; version = "1.3.0"; sha256 = "1y5m6kryhjpqqm2g3h3b6bzig13wkiw954x3b7icqjm6xypm1x3b"; })
+  (fetchNuGet { pname = "System.Reflection.Metadata"; version = "1.4.2"; sha256 = "08b7b43vczlliv8k7q43jinjfrxwpljsglw7sxmc6sd7d54pd1vi"; })
+  (fetchNuGet { pname = "System.Reflection.Metadata"; version = "1.6.0"; sha256 = "1wdbavrrkajy7qbdblpbpbalbdl48q3h34cchz24gvdgyrlf15r4"; })
+  (fetchNuGet { pname = "System.Reflection.Primitives"; version = "4.0.1"; sha256 = "1bangaabhsl4k9fg8khn83wm6yial8ik1sza7401621jc6jrym28"; })
+  (fetchNuGet { pname = "System.Reflection.Primitives"; version = "4.3.0"; sha256 = "04xqa33bld78yv5r93a8n76shvc8wwcdgr1qvvjh959g3rc31276"; })
+  (fetchNuGet { pname = "System.Reflection.TypeExtensions"; version = "4.1.0"; sha256 = "1bjli8a7sc7jlxqgcagl9nh8axzfl11f4ld3rjqsyxc516iijij7"; })
+  (fetchNuGet { pname = "System.Reflection.TypeExtensions"; version = "4.3.0"; sha256 = "0y2ssg08d817p0vdag98vn238gyrrynjdj4181hdg780sif3ykp1"; })
+  (fetchNuGet { pname = "System.Resources.ResourceManager"; version = "4.0.1"; sha256 = "0b4i7mncaf8cnai85jv3wnw6hps140cxz8vylv2bik6wyzgvz7bi"; })
+  (fetchNuGet { pname = "System.Resources.ResourceManager"; version = "4.3.0"; sha256 = "0sjqlzsryb0mg4y4xzf35xi523s4is4hz9q4qgdvlvgivl7qxn49"; })
+  (fetchNuGet { pname = "System.Runtime"; version = "4.1.0"; sha256 = "02hdkgk13rvsd6r9yafbwzss8kr55wnj8d5c7xjnp8gqrwc8sn0m"; })
+  (fetchNuGet { pname = "System.Runtime"; version = "4.3.0"; sha256 = "066ixvgbf2c929kgknshcxqj6539ax7b9m570cp8n179cpfkapz7"; })
+  (fetchNuGet { pname = "System.Runtime"; version = "4.3.1"; sha256 = "03ch4d2acf6q037a4njxpll2kkx3dwzlg07yxr4z5m6j1kqgmm27"; })
+  (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "4.4.0"; sha256 = "0a6ahgi5b148sl5qyfpyw383p3cb4yrkm802k29fsi4mxkiwir29"; })
+  (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "4.5.0"; sha256 = "17labczwqk3jng3kkky73m0jhi8wc21vbl7cz5c0hj2p1dswin43"; })
+  (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "4.5.1"; sha256 = "1xcrjx5fwg284qdnxyi2d0lzdm5q4frlpkp0nf6vvkx1kdz2prrf"; })
+  (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "4.5.2"; sha256 = "1vz4275fjij8inf31np78hw50al8nqkngk04p3xv5n4fcmf1grgi"; })
+  (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "5.0.0"; sha256 = "02k25ivn50dmqx5jn8hawwmz24yf0454fjd823qk6lygj9513q4x"; })
+  (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "6.0.0"; sha256 = "0qm741kh4rh57wky16sq4m0v05fxmkjjr87krycf5vp9f0zbahbc"; })
+  (fetchNuGet { pname = "System.Runtime.Extensions"; version = "4.1.0"; sha256 = "0rw4rm4vsm3h3szxp9iijc3ksyviwsv6f63dng3vhqyg4vjdkc2z"; })
+  (fetchNuGet { pname = "System.Runtime.Extensions"; version = "4.3.0"; sha256 = "1ykp3dnhwvm48nap8q23893hagf665k0kn3cbgsqpwzbijdcgc60"; })
+  (fetchNuGet { pname = "System.Runtime.Handles"; version = "4.0.1"; sha256 = "1g0zrdi5508v49pfm3iii2hn6nm00bgvfpjq1zxknfjrxxa20r4g"; })
+  (fetchNuGet { pname = "System.Runtime.Handles"; version = "4.3.0"; sha256 = "0sw2gfj2xr7sw9qjn0j3l9yw07x73lcs97p8xfc9w1x9h5g5m7i8"; })
+  (fetchNuGet { pname = "System.Runtime.InteropServices"; version = "4.1.0"; sha256 = "01kxqppx3dr3b6b286xafqilv4s2n0gqvfgzfd4z943ga9i81is1"; })
+  (fetchNuGet { pname = "System.Runtime.InteropServices"; version = "4.3.0"; sha256 = "00hywrn4g7hva1b2qri2s6rabzwgxnbpw9zfxmz28z09cpwwgh7j"; })
+  (fetchNuGet { pname = "System.Runtime.InteropServices.RuntimeInformation"; version = "4.0.0"; sha256 = "0glmvarf3jz5xh22iy3w9v3wyragcm4hfdr17v90vs7vcrm7fgp6"; })
+  (fetchNuGet { pname = "System.Runtime.InteropServices.RuntimeInformation"; version = "4.3.0"; sha256 = "0q18r1sh4vn7bvqgd6dmqlw5v28flbpj349mkdish2vjyvmnb2ii"; })
+  (fetchNuGet { pname = "System.Runtime.InteropServices.WindowsRuntime"; version = "4.0.1"; sha256 = "0r43c2jggyd0bvaal64gfv6iw49xj0378r1zb3ycwb53ff4rdn26"; })
+  (fetchNuGet { pname = "System.Runtime.Loader"; version = "4.0.0"; sha256 = "0lpfi3psqcp6zxsjk2qyahal7zaawviimc8lhrlswhip2mx7ykl0"; })
+  (fetchNuGet { pname = "System.Runtime.Loader"; version = "4.3.0"; sha256 = "07fgipa93g1xxgf7193a6vw677mpzgr0z0cfswbvqqb364cva8dk"; })
+  (fetchNuGet { pname = "System.Runtime.Numerics"; version = "4.0.1"; sha256 = "1y308zfvy0l5nrn46mqqr4wb4z1xk758pkk8svbz8b5ij7jnv4nn"; })
+  (fetchNuGet { pname = "System.Runtime.Numerics"; version = "4.3.0"; sha256 = "19rav39sr5dky7afygh309qamqqmi9kcwvz3i0c5700v0c5cg61z"; })
+  (fetchNuGet { pname = "System.Runtime.Serialization.Json"; version = "4.0.2"; sha256 = "08ypbzs0sb302ga04ds5b2wxa2gg0q50zpa0nvc87ipjhs0v66dn"; })
+  (fetchNuGet { pname = "System.Runtime.Serialization.Primitives"; version = "4.1.1"; sha256 = "042rfjixknlr6r10vx2pgf56yming8lkjikamg3g4v29ikk78h7k"; })
+  (fetchNuGet { pname = "System.Runtime.Serialization.Primitives"; version = "4.3.0"; sha256 = "01vv2p8h4hsz217xxs0rixvb7f2xzbh6wv1gzbfykcbfrza6dvnf"; })
+  (fetchNuGet { pname = "System.Security.AccessControl"; version = "4.5.0"; sha256 = "1wvwanz33fzzbnd2jalar0p0z3x0ba53vzx1kazlskp7pwyhlnq0"; })
+  (fetchNuGet { pname = "System.Security.AccessControl"; version = "4.7.0"; sha256 = "0n0k0w44flkd8j0xw7g3g3vhw7dijfm51f75xkm1qxnbh4y45mpz"; })
+  (fetchNuGet { pname = "System.Security.AccessControl"; version = "5.0.0"; sha256 = "17n3lrrl6vahkqmhlpn3w20afgz09n7i6rv0r3qypngwi7wqdr5r"; })
+  (fetchNuGet { pname = "System.Security.Claims"; version = "4.0.1"; sha256 = "03dw0ls49bvsrffgwycyifjgz0qzr9r85skqhdyhfd51fqf398n6"; })
+  (fetchNuGet { pname = "System.Security.Claims"; version = "4.3.0"; sha256 = "0jvfn7j22l3mm28qjy3rcw287y9h65ha4m940waaxah07jnbzrhn"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Algorithms"; version = "4.2.0"; sha256 = "148s9g5dgm33ri7dnh19s4lgnlxbpwvrw2jnzllq2kijj4i4vs85"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Algorithms"; version = "4.3.0"; sha256 = "03sq183pfl5kp7gkvq77myv7kbpdnq3y0xj7vi4q1kaw54sny0ml"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Cng"; version = "4.2.0"; sha256 = "118jijz446kix20blxip0f0q8mhsh9bz118mwc2ch1p6g7facpzc"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Cng"; version = "4.3.0"; sha256 = "1k468aswafdgf56ab6yrn7649kfqx2wm9aslywjam1hdmk5yypmv"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Cng"; version = "4.5.0"; sha256 = "1pm4ykbcz48f1hdmwpia432ha6qbb9kbrxrrp7cg3m8q8xn52ngn"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Cng"; version = "4.7.0"; sha256 = "00797sqbba8lys486ifxblz9j52m29kidclvmqpk531820k55x9j"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Cng"; version = "5.0.0"; sha256 = "06hkx2za8jifpslkh491dfwzm5dxrsyxzj5lsc0achb6yzg4zqlw"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Csp"; version = "4.0.0"; sha256 = "1cwv8lqj8r15q81d2pz2jwzzbaji0l28xfrpw29kdpsaypm92z2q"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Csp"; version = "4.3.0"; sha256 = "1x5wcrddf2s3hb8j78cry7yalca4lb5vfnkrysagbn6r9x6xvrx1"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Encoding"; version = "4.0.0"; sha256 = "0a8y1a5wkmpawc787gfmnrnbzdgxmx1a14ax43jf3rj9gxmy3vk4"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Encoding"; version = "4.3.0"; sha256 = "1jr6w70igqn07k5zs1ph6xja97hxnb3mqbspdrff6cvssgrixs32"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.OpenSsl"; version = "4.0.0"; sha256 = "16sx3cig3d0ilvzl8xxgffmxbiqx87zdi8fc73i3i7zjih1a7f4q"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0givpvvj8yc7gv4lhb6s1prq6p2c4147204a0wib89inqzd87gqc"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Pkcs"; version = "4.5.0"; sha256 = "16dhiz2qypk289dxiqa9rb7jmslnami6bykalv5dvbd8j91zikpy"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Pkcs"; version = "4.7.0"; sha256 = "1mwvzl5ask8kk0vdgchhqr90nl61kagg47warb7dxrb03cxjd4wm"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Pkcs"; version = "5.0.0"; sha256 = "0hb2mndac3xrw3786bsjxjfh19bwnr991qib54k6wsqjhjyyvbwj"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Primitives"; version = "4.0.0"; sha256 = "0i7cfnwph9a10bm26m538h5xcr8b36jscp9sy1zhgifksxz4yixh"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Primitives"; version = "4.3.0"; sha256 = "0pyzncsv48zwly3lw4f2dayqswcfvdwq2nz0dgwmi7fj3pn64wby"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.ProtectedData"; version = "4.4.0"; sha256 = "1q8ljvqhasyynp94a1d7jknk946m20lkwy2c3wa8zw2pc517fbj6"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.ProtectedData"; version = "4.5.0"; sha256 = "11qlc8q6b7xlspayv07718ibzvlj6ddqqxkvcbxv5b24d5kzbrb7"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.ProtectedData"; version = "4.7.0"; sha256 = "1s1sh8k10s0apa09c5m2lkavi3ys90y657whg2smb3y8mpkfr5vm"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.X509Certificates"; version = "4.1.0"; sha256 = "0clg1bv55mfv5dq00m19cp634zx6inm31kf8ppbq1jgyjf2185dh"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.X509Certificates"; version = "4.3.0"; sha256 = "0valjcz5wksbvijylxijjxb1mp38mdhv03r533vnx1q3ikzdav9h"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.X509Certificates"; version = "4.3.1"; sha256 = "06fp9a8zh0qk4g80q1g9m2q90q287nwywxlgfa4wi0v3lybnr9hp"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Xml"; version = "4.5.0"; sha256 = "1rk40x0msf9k7sxnjyizagjns1z25dh3cf22bx6hsx6vhf0sk08l"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Xml"; version = "4.7.1"; sha256 = "0smi8lv8q59ciba63bf6snxcs0i09awwasbnf5hc26ih7snqvd03"; })
+  (fetchNuGet { pname = "System.Security.Permissions"; version = "4.5.0"; sha256 = "192ww5rm3c9mirxgl1nzyrwd18am3izqls0hzm0fvcdjl5grvbhm"; })
+  (fetchNuGet { pname = "System.Security.Permissions"; version = "4.7.0"; sha256 = "13f366sj36jwbvld957gk2q64k2xbj48r8b0k9avrri2nlq1fs04"; })
+  (fetchNuGet { pname = "System.Security.Principal"; version = "4.0.1"; sha256 = "1nbzdfqvzzbgsfdd5qsh94d7dbg2v4sw0yx6himyn52zf8z6007p"; })
+  (fetchNuGet { pname = "System.Security.Principal"; version = "4.3.0"; sha256 = "12cm2zws06z4lfc4dn31iqv7072zyi4m910d4r6wm8yx85arsfxf"; })
+  (fetchNuGet { pname = "System.Security.Principal.Windows"; version = "4.0.0"; sha256 = "1d3vc8i0zss9z8p4qprls4gbh7q4218l9845kclx7wvw41809k6z"; })
+  (fetchNuGet { pname = "System.Security.Principal.Windows"; version = "4.3.0"; sha256 = "00a0a7c40i3v4cb20s2cmh9csb5jv2l0frvnlzyfxh848xalpdwr"; })
+  (fetchNuGet { pname = "System.Security.Principal.Windows"; version = "4.5.0"; sha256 = "0rmj89wsl5yzwh0kqjgx45vzf694v9p92r4x4q6yxldk1cv1hi86"; })
+  (fetchNuGet { pname = "System.Security.Principal.Windows"; version = "4.7.0"; sha256 = "1a56ls5a9sr3ya0nr086sdpa9qv0abv31dd6fp27maqa9zclqq5d"; })
+  (fetchNuGet { pname = "System.Security.Principal.Windows"; version = "5.0.0"; sha256 = "1mpk7xj76lxgz97a5yg93wi8lj0l8p157a5d50mmjy3gbz1904q8"; })
+  (fetchNuGet { pname = "System.Security.SecureString"; version = "4.0.0"; sha256 = "026q5f46585hgisz4svhnjc7q0ljprz43v15rybqizlyli5585jz"; })
+  (fetchNuGet { pname = "System.Text.Encoding"; version = "4.0.11"; sha256 = "1dyqv0hijg265dwxg6l7aiv74102d6xjiwplh2ar1ly6xfaa4iiw"; })
+  (fetchNuGet { pname = "System.Text.Encoding"; version = "4.3.0"; sha256 = "1f04lkir4iladpp51sdgmis9dj4y8v08cka0mbmsy0frc9a4gjqr"; })
+  (fetchNuGet { pname = "System.Text.Encoding.CodePages"; version = "4.0.1"; sha256 = "00wpm3b9y0k996rm9whxprngm8l500ajmzgy2ip9pgwk0icp06y3"; })
+  (fetchNuGet { pname = "System.Text.Encoding.CodePages"; version = "4.3.0"; sha256 = "0lgxg1gn7pg7j0f942pfdc9q7wamzxsgq3ng248ikdasxz0iadkv"; })
+  (fetchNuGet { pname = "System.Text.Encoding.CodePages"; version = "4.5.0"; sha256 = "19x38911pawq4mrxrm04l2bnxwxxlzq8v8rj4cbxnfjj8pnd3vj3"; })
+  (fetchNuGet { pname = "System.Text.Encoding.CodePages"; version = "4.5.1"; sha256 = "1z21qyfs6sg76rp68qdx0c9iy57naan89pg7p6i3qpj8kyzn921w"; })
+  (fetchNuGet { pname = "System.Text.Encoding.Extensions"; version = "4.0.11"; sha256 = "08nsfrpiwsg9x5ml4xyl3zyvjfdi4mvbqf93kjdh11j4fwkznizs"; })
+  (fetchNuGet { pname = "System.Text.Encoding.Extensions"; version = "4.3.0"; sha256 = "11q1y8hh5hrp5a3kw25cb6l00v5l5dvirkz8jr3sq00h1xgcgrxy"; })
+  (fetchNuGet { pname = "System.Text.Encodings.Web"; version = "4.5.0"; sha256 = "0srd5bva52n92i90wd88pzrqjsxnfgka3ilybwh7s6sf469y5s53"; })
+  (fetchNuGet { pname = "System.Text.Encodings.Web"; version = "4.7.2"; sha256 = "0ap286ykazrl42if59bxhzv81safdfrrmfqr3112siwyajx4wih9"; })
+  (fetchNuGet { pname = "System.Text.Encodings.Web"; version = "6.0.0"; sha256 = "06n9ql3fmhpjl32g3492sj181zjml5dlcc5l76xq2h38c4f87sai"; })
+  (fetchNuGet { pname = "System.Text.Json"; version = "4.6.0"; sha256 = "0ism236hwi0k6axssfq58s1d8lihplwiz058pdvl8al71hagri39"; })
+  (fetchNuGet { pname = "System.Text.Json"; version = "4.7.2"; sha256 = "10xj1pw2dgd42anikvj9qm23ccssrcp7dpznpj4j7xjp1ikhy3y4"; })
+  (fetchNuGet { pname = "System.Text.Json"; version = "5.0.2"; sha256 = "0vd0wd29cdhgcjngl9sw391sn2s8xm974y15zvym0whsdgjwiqfx"; })
+  (fetchNuGet { pname = "System.Text.Json"; version = "6.0.0"; sha256 = "1si2my1g0q0qv1hiqnji4xh9wd05qavxnzj9dwgs23iqvgjky0gl"; })
+  (fetchNuGet { pname = "System.Text.RegularExpressions"; version = "4.1.0"; sha256 = "1mw7vfkkyd04yn2fbhm38msk7dz2xwvib14ygjsb8dq2lcvr18y7"; })
+  (fetchNuGet { pname = "System.Text.RegularExpressions"; version = "4.3.0"; sha256 = "1bgq51k7fwld0njylfn7qc5fmwrk2137gdq7djqdsw347paa9c2l"; })
+  (fetchNuGet { pname = "System.Text.RegularExpressions"; version = "4.3.1"; sha256 = "1hr4qqzrij3y2ayi8jj70yfg0i9imf6fpdam1gr8qgp795kh86qg"; })
+  (fetchNuGet { pname = "System.Threading"; version = "4.0.11"; sha256 = "19x946h926bzvbsgj28csn46gak2crv2skpwsx80hbgazmkgb1ls"; })
+  (fetchNuGet { pname = "System.Threading"; version = "4.3.0"; sha256 = "0rw9wfamvhayp5zh3j7p1yfmx9b5khbf4q50d8k5rk993rskfd34"; })
+  (fetchNuGet { pname = "System.Threading.Channels"; version = "6.0.0"; sha256 = "1qbyi7yymqc56frqy7awvcqc1m7x3xrpx87a37dgb3mbrjg9hlcj"; })
+  (fetchNuGet { pname = "System.Threading.Overlapped"; version = "4.0.1"; sha256 = "0fi79az3vmqdp9mv3wh2phblfjls89zlj6p9nc3i9f6wmfarj188"; })
+  (fetchNuGet { pname = "System.Threading.Tasks"; version = "4.0.11"; sha256 = "0nr1r41rak82qfa5m0lhk9mp0k93bvfd7bbd9sdzwx9mb36g28p5"; })
+  (fetchNuGet { pname = "System.Threading.Tasks"; version = "4.3.0"; sha256 = "134z3v9abw3a6jsw17xl3f6hqjpak5l682k2vz39spj4kmydg6k7"; })
+  (fetchNuGet { pname = "System.Threading.Tasks.Dataflow"; version = "4.8.0"; sha256 = "1hdd808x1fliv2j9jjk9hyjadlfl4sdc31vh1bafnz6y614r7m4r"; })
+  (fetchNuGet { pname = "System.Threading.Tasks.Dataflow"; version = "4.9.0"; sha256 = "1g6s9pjg4z8iy98df60y9a01imdqy59zd767vz74rrng78jl2dk5"; })
+  (fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.0.0"; sha256 = "1cb51z062mvc2i8blpzmpn9d9mm4y307xrwi65di8ri18cz5r1zr"; })
+  (fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.3.0"; sha256 = "1xxcx2xh8jin360yjwm4x4cf5y3a2bwpn2ygkfkwkicz7zk50s2z"; })
+  (fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.5.0"; sha256 = "05mpkdc7aigwadlcc9q3ash88hygkyz5pmkj360jj6c6ffhm91s8"; })
+  (fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.5.1"; sha256 = "1ikrplvw4m6pzjbq3bfbpr572n4i9mni577zvmrkaygvx85q3myw"; })
+  (fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.5.2"; sha256 = "1sh63dz0dymqcwmprp0nadm77b83vmm7lyllpv578c397bslb8hj"; })
+  (fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.5.3"; sha256 = "0g7r6hm572ax8v28axrdxz1gnsblg6kszq17g51pj14a5rn2af7i"; })
+  (fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.5.4"; sha256 = "0y6ncasgfcgnjrhynaf0lwpkpkmv4a07sswwkwbwb5h7riisj153"; })
+  (fetchNuGet { pname = "System.Threading.Tasks.Parallel"; version = "4.3.0"; sha256 = "1rr3qa4hxwyj531s4nb3bwrxnxxwz617i0n9gh6x7nr7dd3ayzgh"; })
+  (fetchNuGet { pname = "System.Threading.Thread"; version = "4.0.0"; sha256 = "1gxxm5fl36pjjpnx1k688dcw8m9l7nmf802nxis6swdaw8k54jzc"; })
+  (fetchNuGet { pname = "System.Threading.Thread"; version = "4.3.0"; sha256 = "0y2xiwdfcph7znm2ysxanrhbqqss6a3shi1z3c779pj2s523mjx4"; })
+  (fetchNuGet { pname = "System.Threading.ThreadPool"; version = "4.0.10"; sha256 = "0fdr61yjcxh5imvyf93n2m3n5g9pp54bnw2l1d2rdl9z6dd31ypx"; })
+  (fetchNuGet { pname = "System.Threading.ThreadPool"; version = "4.3.0"; sha256 = "027s1f4sbx0y1xqw2irqn6x161lzj8qwvnh2gn78ciiczdv10vf1"; })
+  (fetchNuGet { pname = "System.Threading.Timer"; version = "4.0.1"; sha256 = "15n54f1f8nn3mjcjrlzdg6q3520571y012mx7v991x2fvp73lmg6"; })
+  (fetchNuGet { pname = "System.Threading.Timer"; version = "4.3.0"; sha256 = "1nx773nsx6z5whv8kaa1wjh037id2f1cxhb69pvgv12hd2b6qs56"; })
+  (fetchNuGet { pname = "System.ValueTuple"; version = "4.3.0"; sha256 = "1227k7fxbxapq7dms4lvwwjdf3pr1jcsmhy2nzzhj6g6hs530hxn"; })
+  (fetchNuGet { pname = "System.ValueTuple"; version = "4.4.0"; sha256 = "1wydfgszs00yxga57sam66vzv9fshk2pw7gim57saplsnkfliaif"; })
+  (fetchNuGet { pname = "System.Windows.Extensions"; version = "4.7.0"; sha256 = "11dmyx3j0jafjx5r9mkj1v4w2a4rzrdn8fgwm2d1g7fs1ayqcvy9"; })
+  (fetchNuGet { pname = "System.Xml.ReaderWriter"; version = "4.0.11"; sha256 = "0c6ky1jk5ada9m94wcadih98l6k1fvf6vi7vhn1msjixaha419l5"; })
+  (fetchNuGet { pname = "System.Xml.ReaderWriter"; version = "4.3.0"; sha256 = "0c47yllxifzmh8gq6rq6l36zzvw4kjvlszkqa9wq3fr59n0hl3s1"; })
+  (fetchNuGet { pname = "System.Xml.XDocument"; version = "4.0.11"; sha256 = "0n4lvpqzy9kc7qy1a4acwwd7b7pnvygv895az5640idl2y9zbz18"; })
+  (fetchNuGet { pname = "System.Xml.XDocument"; version = "4.3.0"; sha256 = "08h8fm4l77n0nd4i4fk2386y809bfbwqb7ih9d7564ifcxr5ssxd"; })
+  (fetchNuGet { pname = "System.Xml.XmlDocument"; version = "4.0.1"; sha256 = "0ihsnkvyc76r4dcky7v3ansnbyqjzkbyyia0ir5zvqirzan0bnl1"; })
+  (fetchNuGet { pname = "System.Xml.XmlDocument"; version = "4.3.0"; sha256 = "0bmz1l06dihx52jxjr22dyv5mxv6pj4852lx68grjm7bivhrbfwi"; })
+  (fetchNuGet { pname = "System.Xml.XmlSerializer"; version = "4.0.11"; sha256 = "01nzc3gdslw90qfykq4qzr2mdnqxjl4sj0wp3fixiwdmlmvpib5z"; })
+  (fetchNuGet { pname = "System.Xml.XmlSerializer"; version = "4.3.0"; sha256 = "07pa4sx196vxkgl3csvdmw94nydlsm9ir38xxcs84qjn8cycd912"; })
+  (fetchNuGet { pname = "System.Xml.XPath"; version = "4.0.1"; sha256 = "0fjqgb6y66d72d5n8qq1h213d9nv2vi8mpv8p28j3m9rccmsh04m"; })
+  (fetchNuGet { pname = "System.Xml.XPath"; version = "4.3.0"; sha256 = "1cv2m0p70774a0sd1zxc8fm8jk3i5zk2bla3riqvi8gsm0r4kpci"; })
+  (fetchNuGet { pname = "System.Xml.XPath.XDocument"; version = "4.3.0"; sha256 = "1wxckyb7n1pi433xzz0qcwcbl1swpra64065mbwwi8dhdc4kiabn"; })
+  (fetchNuGet { pname = "System.Xml.XPath.XmlDocument"; version = "4.0.1"; sha256 = "0l7yljgif41iv5g56l3nxy97hzzgck2a7rhnfnljhx9b0ry41bvc"; })
+  (fetchNuGet { pname = "Validation"; version = "2.4.15"; sha256 = "1wy60zv97q7w5rnrs1c12q4gazjj3a86dn856c8qy3xj9rlgx52j"; })
+  (fetchNuGet { pname = "WindowsAzure.Storage"; version = "9.3.1"; sha256 = "1zwkzh2pprqn46bc6rkl1chb2dbpyrnzk0jirsbw29fqafmwdmdl"; })
+  (fetchNuGet { pname = "xunit"; version = "2.4.0"; sha256 = "1fqya6mr6864x4kc0bqxzz0i61bl1vz6b4c79ica5vmwxdz50765"; })
+  (fetchNuGet { pname = "xunit.abstractions"; version = "2.0.1"; sha256 = "0c7zkf3i8n1mhc457q859klk067bw1xbf31lyxlwc5hlx9aqz65z"; })
+  (fetchNuGet { pname = "xunit.abstractions"; version = "2.0.2"; sha256 = "1cfpdhzrmqywsg8w899w9x5bxbhszipsm4791il1gf7cdq4hz463"; })
+  (fetchNuGet { pname = "xunit.analyzers"; version = "0.10.0"; sha256 = "15n02q3akyqbvkp8nq75a8rd66d4ax0rx8fhdcn8j78pi235jm7j"; })
+  (fetchNuGet { pname = "xunit.assert"; version = "2.4.0"; sha256 = "1p96zl0czhsh3im2c39nlc63869nwqia3kllfp5wn0jlaacpr82s"; })
+  (fetchNuGet { pname = "xunit.core"; version = "2.4.0"; sha256 = "1lcy8k62pnmsf15pppr7y940289rygxc0ipif1dsk9k3h5m7vpkn"; })
+  (fetchNuGet { pname = "xunit.extensibility.core"; version = "2.2.0"; sha256 = "0l9fl09l709dq671r5yvmcrk9vhxgszmxf3ny1h9ja2sp9xx5pbs"; })
+  (fetchNuGet { pname = "xunit.extensibility.core"; version = "2.4.0"; sha256 = "0qd834mv1017j13bjz7g0byiiqzpflnnqhm15zvnk309q48rgfrd"; })
+  (fetchNuGet { pname = "xunit.extensibility.execution"; version = "2.2.0"; sha256 = "14ia58y98qhswsx61fp046mpfx0kxcq5alhixf3k3vjar6p7naq4"; })
+  (fetchNuGet { pname = "xunit.extensibility.execution"; version = "2.4.0"; sha256 = "0bpy9iw4dkx884ld10dlijlyfp13afxrb3akhprdvazhmh8lj53j"; })
+  (fetchNuGet { pname = "xunit.runner.visualstudio"; version = "2.4.0"; sha256 = "1qgj8rbwd51cparf5kkqvf0zp0w68giz3ryf7265lmv4n14nwd5a"; })
+  (fetchNuGet { pname = "Xunit.SkippableFact"; version = "1.3.6"; sha256 = "1g4lwzdv594ldwp4bfj01q2n74wa483z70gms4742v9nsf8119qq"; })
+  (fetchNuGet { pname = "YamlDotNet"; version = "6.0.0"; sha256 = "15p23jw0cw7y9lij8n6iiyh85rl2plr2z4clnxjgdh2iz7783v51"; })
+  (fetchNuGet { pname = "Yarp.ReverseProxy"; version = "2.0.1"; sha256 = "1bgf4wxn4q64byxs0nwzafan8lj342ffma19gpsxj4yzarad5h8x"; })
+]
diff --git a/nixpkgs/pkgs/development/tools/azure-static-sites-client/default.nix b/nixpkgs/pkgs/development/tools/azure-static-sites-client/default.nix
new file mode 100644
index 000000000000..441496ed4352
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/azure-static-sites-client/default.nix
@@ -0,0 +1,97 @@
+{ lib
+, stdenv
+, fetchurl
+, autoPatchelfHook
+, curl
+, icu70
+, libkrb5
+, lttng-ust
+, openssl
+, zlib
+, azure-static-sites-client
+  # "latest", "stable" or "backup"
+, versionFlavor ? "stable"
+}:
+let
+  versions = lib.importJSON ./versions.json;
+  flavor = with lib; head (filter (x: x.version == versionFlavor) versions);
+  fetchBinary = runtimeId: fetchurl {
+    url = flavor.files.${runtimeId}.url;
+    sha256 = flavor.files.${runtimeId}.sha;
+  };
+  sources = {
+    "x86_64-linux" = fetchBinary "linux-x64";
+    "x86_64-darwin" = fetchBinary "macOS";
+  };
+in
+stdenv.mkDerivation {
+  pname = "StaticSitesClient-${versionFlavor}";
+  version = flavor.buildId;
+
+  src = sources.${stdenv.hostPlatform.system} or (throw "Unsupported platform");
+
+  nativeBuildInputs = [
+    autoPatchelfHook
+  ];
+
+  buildInputs = [
+    curl
+    icu70
+    libkrb5
+    lttng-ust
+    openssl
+    stdenv.cc.cc.lib
+    zlib
+  ];
+
+  dontUnpack = true;
+  dontBuild = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    install -m755 "$src" -D "$out/bin/StaticSitesClient"
+
+    for icu_lib in 'icui18n' 'icuuc' 'icudata'; do
+      patchelf --add-needed "lib''${icu_lib}.so.${with lib; head (splitVersion (getVersion icu70.name))}" "$out/bin/StaticSitesClient"
+    done
+
+    patchelf --add-needed 'libgssapi_krb5.so' \
+             --add-needed 'liblttng-ust.so'   \
+             --add-needed 'libssl.so.3'     \
+             "$out/bin/StaticSitesClient"
+
+    runHook postInstall
+  '';
+
+  # Stripping kills the binary
+  dontStrip = true;
+
+  # Just make sure the binary executes successfully
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+
+    $out/bin/StaticSitesClient version
+
+    runHook postInstallCheck
+  '';
+
+  passthru = {
+    # Create tests for all flavors
+    tests = with lib; genAttrs (map (x: x.version) versions) (versionFlavor:
+      azure-static-sites-client.override { inherit versionFlavor; }
+    );
+    updateScript = ./update.sh;
+  };
+
+  meta = with lib; {
+    description = "Azure static sites client";
+    homepage = "https://github.com/Azure/static-web-apps-cli";
+    sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    mainProgram = "StaticSitesClient";
+    maintainers = with maintainers; [ veehaitch ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/azure-static-sites-client/update.sh b/nixpkgs/pkgs/development/tools/azure-static-sites-client/update.sh
new file mode 100755
index 000000000000..156771e7f12b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/azure-static-sites-client/update.sh
@@ -0,0 +1,9 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p curl
+
+set -euo pipefail
+
+dirname="$(dirname "$0")"
+
+curl -O --silent --output-dir "$dirname" 'https://swalocaldeploy.azureedge.net/downloads/versions.json'
+echo "" >> "$dirname/versions.json"
diff --git a/nixpkgs/pkgs/development/tools/azure-static-sites-client/versions.json b/nixpkgs/pkgs/development/tools/azure-static-sites-client/versions.json
new file mode 100644
index 000000000000..535157f6a506
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/azure-static-sites-client/versions.json
@@ -0,0 +1,59 @@
+[
+  {
+    "version": "latest",
+    "buildId": "1.0.025891",
+    "publishDate": "2024-02-02T19:23:37.1915908Z",
+    "files": {
+      "linux-x64": {
+        "url": "https://swalocaldeploy.azureedge.net/downloads/1.0.025891/linux/StaticSitesClient",
+        "sha": "798b4032d1b6cd3f7057a6b7510c502dd69fa8cb4d27d47433542e8e80e9f87c"
+      },
+      "win-x64": {
+        "url": "https://swalocaldeploy.azureedge.net/downloads/1.0.025891/windows/StaticSitesClient.exe",
+        "sha": "097f9633c12b55e85e4ea9c053576a94b4f5847ce3a5a7671112c881878cfc4b"
+      },
+      "osx-x64": {
+        "url": "https://swalocaldeploy.azureedge.net/downloads/1.0.025891/macOS/StaticSitesClient",
+        "sha": "142310370774f91526c5d08ebde2f0b224b4f7f88bb6e514d25c1ef6f04fd8c8"
+      }
+    }
+  },
+  {
+    "version": "stable",
+    "buildId": "1.0.025891",
+    "publishDate": "2024-02-02T19:23:37.1915908Z",
+    "files": {
+      "linux-x64": {
+        "url": "https://swalocaldeploy.azureedge.net/downloads/1.0.025891/linux/StaticSitesClient",
+        "sha": "798b4032d1b6cd3f7057a6b7510c502dd69fa8cb4d27d47433542e8e80e9f87c"
+      },
+      "win-x64": {
+        "url": "https://swalocaldeploy.azureedge.net/downloads/1.0.025891/windows/StaticSitesClient.exe",
+        "sha": "097f9633c12b55e85e4ea9c053576a94b4f5847ce3a5a7671112c881878cfc4b"
+      },
+      "osx-x64": {
+        "url": "https://swalocaldeploy.azureedge.net/downloads/1.0.025891/macOS/StaticSitesClient",
+        "sha": "142310370774f91526c5d08ebde2f0b224b4f7f88bb6e514d25c1ef6f04fd8c8"
+      }
+    }
+  },
+  {
+    "version": "backup",
+    "buildId": "1.0.025241",
+    "publishDate": "2023-11-30T02:51:40.8356813Z",
+    "files": {
+      "linux-x64": {
+        "url": "https://swalocaldeploy.azureedge.net/downloads/1.0.025241/linux/StaticSitesClient",
+        "sha": "e4ccb44c516e03e6dcc2a26a35ffd4c84a61dfea581990dd5c0edb7c12662db0"
+      },
+      "win-x64": {
+        "url": "https://swalocaldeploy.azureedge.net/downloads/1.0.025241/windows/StaticSitesClient.exe",
+        "sha": "4146ac01a488910d6ea066e1c46505048b0c9af2e74ef273c4236b387796712d"
+      },
+      "osx-x64": {
+        "url": "https://swalocaldeploy.azureedge.net/downloads/1.0.025241/macOS/StaticSitesClient",
+        "sha": "05b213d7861454368d2c9801b0ccc75cfd13cb48f8e121fffaa2ab7e9b5671cd"
+      }
+    }
+  }
+]
diff --git a/nixpkgs/pkgs/development/tools/b4/default.nix b/nixpkgs/pkgs/development/tools/b4/default.nix
new file mode 100644
index 000000000000..8999d3f4b62a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/b4/default.nix
@@ -0,0 +1,30 @@
+{ lib, python3Packages, fetchPypi, patatt }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "b4";
+  version = "0.12.4";
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-n3mLtthtTN1uAmsmM6dX+Nc7iEo5KzzHiH8iAJmV/Q0=";
+  };
+
+  # tests make dns requests and fails
+  doCheck = false;
+
+  propagatedBuildInputs = with python3Packages; [
+    requests
+    dnspython
+    dkimpy
+    patatt
+    git-filter-repo
+  ];
+
+  meta = with lib; {
+    homepage = "https://git.kernel.org/pub/scm/utils/b4/b4.git/about";
+    license = licenses.gpl2Only;
+    description = "A helper utility to work with patches made available via a public-inbox archive";
+    mainProgram = "b4";
+    maintainers = with maintainers; [ jb55 qyliss mfrw ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/backblaze-b2/default.nix b/nixpkgs/pkgs/development/tools/backblaze-b2/default.nix
new file mode 100644
index 000000000000..e82c32940891
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/backblaze-b2/default.nix
@@ -0,0 +1,99 @@
+{ lib, python3Packages, fetchPypi, installShellFiles, testers, backblaze-b2
+# executable is renamed to backblaze-b2 by default, to avoid collision with boost's 'b2'
+, execName ? "backblaze-b2"
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "backblaze-b2";
+  version = "3.15.0";
+  format = "setuptools";
+
+  src = fetchPypi {
+    inherit version;
+    pname = "b2";
+    hash = "sha256-10c2zddALy7+CGxhjUC6tMLQcZ3WmLeRY1bNKWunAys=";
+  };
+
+  postPatch = ''
+    substituteInPlace requirements.txt \
+      --replace 'phx-class-registry==4.0.5' 'phx-class-registry'
+    substituteInPlace requirements.txt \
+      --replace 'tabulate==0.8.10' 'tabulate'
+    substituteInPlace setup.py \
+      --replace 'setuptools_scm<6.0' 'setuptools_scm'
+  '';
+
+  nativeBuildInputs = [
+    installShellFiles
+    python3Packages.setuptools-scm
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    argcomplete
+    arrow
+    b2sdk
+    phx-class-registry
+    docutils
+    rst2ansi
+    tabulate
+    tqdm
+    platformdirs
+    packaging
+    setuptools
+  ];
+
+  nativeCheckInputs = with python3Packages; [
+    backoff
+    more-itertools
+    pexpect
+    pytestCheckHook
+  ];
+
+  preCheck = ''
+    export HOME=$(mktemp -d)
+  '';
+
+  disabledTests = [
+    # require network
+    "test_files_headers"
+    "test_integration"
+
+    # fixed by https://github.com/Backblaze/B2_Command_Line_Tool/pull/915
+    "TestRmConsoleTool"
+  ];
+
+  disabledTestPaths = [
+    # requires network
+    "test/integration/test_b2_command_line.py"
+
+    # it's hard to make it work on nix
+    "test/integration/test_autocomplete.py"
+    "test/unit/console_tool"
+  ];
+
+  postInstall = lib.optionalString (execName != "b2") ''
+    mv "$out/bin/b2" "$out/bin/${execName}"
+  ''
+  + ''
+    installShellCompletion --cmd ${execName} \
+      --bash <(${python3Packages.argcomplete}/bin/register-python-argcomplete ${execName}) \
+      --zsh <(${python3Packages.argcomplete}/bin/register-python-argcomplete ${execName})
+  '';
+
+  passthru.tests.version = (testers.testVersion {
+    package = backblaze-b2;
+    command = "${execName} version --short";
+  }).overrideAttrs (old: {
+    # workaround the error: Permission denied: '/homeless-shelter'
+    # backblaze-b2 fails to create a 'b2' directory under the XDG config path
+    HOME = "$(mktemp -d)";
+  });
+
+  meta = with lib; {
+    description = "Command-line tool for accessing the Backblaze B2 storage service";
+    homepage = "https://github.com/Backblaze/B2_Command_Line_Tool";
+    changelog = "https://github.com/Backblaze/B2_Command_Line_Tool/blob/v${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ hrdinka kevincox tomhoule ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/bacon/default.nix b/nixpkgs/pkgs/development/tools/bacon/default.nix
new file mode 100644
index 000000000000..89e90a8589f5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/bacon/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+, CoreServices
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "bacon";
+  version = "2.14.2";
+
+  src = fetchFromGitHub {
+    owner = "Canop";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-hwzj5RUUj3mYN2XUS5Dt2cbQYJ3oKNj4CZabO6qDt74=";
+  };
+
+  cargoHash = "sha256-gUkh9YpmT+FNv30iOhPRcOAhpaqvd1PavSfoycNox7k=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    CoreServices
+  ];
+
+  meta = with lib; {
+    description = "Background rust code checker";
+    homepage = "https://github.com/Canop/bacon";
+    changelog = "https://github.com/Canop/bacon/blob/v${version}/CHANGELOG.md";
+    license = licenses.agpl3Only;
+    maintainers = with maintainers; [ FlorianFranzen ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/bashate/default.nix b/nixpkgs/pkgs/development/tools/bashate/default.nix
new file mode 100644
index 000000000000..f46e9667cbef
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/bashate/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, babel
+, buildPythonApplication
+, fetchPypi
+, fixtures
+, mock
+, pbr
+, pytestCheckHook
+, pythonOlder
+, setuptools
+, testtools
+}:
+
+buildPythonApplication rec {
+  pname = "bashate";
+  version = "2.1.1";
+  disabled = pythonOlder "3.5";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-S6tul3+DBacgU1+Pk/H7QsUh/LxKbCs9PXZx9C8iH0w=";
+  };
+
+  propagatedBuildInputs = [
+    babel
+    pbr
+    setuptools
+  ];
+
+  nativeCheckInputs = [
+    fixtures
+    mock
+    pytestCheckHook
+    testtools
+  ];
+
+  pythonImportsCheck = [ "bashate" ];
+
+  meta = with lib; {
+    description = "Style enforcement for bash programs";
+    homepage = "https://opendev.org/openstack/bashate";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/bazel-gazelle/default.nix b/nixpkgs/pkgs/development/tools/bazel-gazelle/default.nix
new file mode 100644
index 000000000000..a30d1380e612
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/bazel-gazelle/default.nix
@@ -0,0 +1,34 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+}:
+
+buildGoModule rec {
+  pname = "bazel-gazelle";
+  version = "0.35.0";
+
+  src = fetchFromGitHub {
+    owner = "bazelbuild";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-9oWsVazmLPPptWW03H6nLTiqNBNgkzsWtYNIm5V8FdA=";
+  };
+
+  vendorHash = null;
+
+  doCheck = false;
+
+  subPackages = [ "cmd/gazelle" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/bazelbuild/bazel-gazelle";
+    description = ''
+      Gazelle is a Bazel build file generator for Bazel projects. It natively
+      supports Go and protobuf, and it may be extended to support new languages
+      and custom rule sets.
+    '';
+    license = licenses.asl20;
+    maintainers = with maintainers; [ kalbasit ];
+    mainProgram = "gazelle";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/bazel-kazel/default.nix b/nixpkgs/pkgs/development/tools/bazel-kazel/default.nix
new file mode 100644
index 000000000000..8d7ceb04f0eb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/bazel-kazel/default.nix
@@ -0,0 +1,27 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+buildGoModule rec {
+  pname = "bazel-kazel";
+  version = "0.2.5";
+
+  src = fetchFromGitHub {
+    owner = "kubernetes";
+    repo = "repo-infra";
+    rev = "v${version}";
+    sha256 = "sha256-Y9VOlFrFmJQCQuwf3UztHGuJqmq/lSibTbI3oGjtNuE=";
+  };
+
+  vendorHash = "sha256-1+7Mx1Zh1WolqTpWNe560PRzRYaWVUVLvNvUOysaW5I=";
+
+  doCheck = false;
+
+  subPackages = [ "cmd/kazel" ];
+
+  meta = with lib; {
+    description = "kazel - a BUILD file generator for go and bazel";
+    homepage = "https://github.com/kubernetes/repo-infra";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ kalbasit ];
+    mainProgram = "kazel";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/bazel-watcher/default.nix b/nixpkgs/pkgs/development/tools/bazel-watcher/default.nix
new file mode 100644
index 000000000000..23d2c904022d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/bazel-watcher/default.nix
@@ -0,0 +1,110 @@
+{ buildBazelPackage
+, bazel_5
+, fetchFromGitHub
+, git
+, go
+, python3
+, lib, stdenv
+}:
+
+let
+  patches = [
+    ./use-go-in-path.patch
+  ];
+
+  # Patch the protoc alias so that it always builds from source.
+  rulesProto = fetchFromGitHub {
+    owner = "bazelbuild";
+    repo = "rules_proto";
+    rev = "4.0.0";
+    hash = "sha256-WVPZx14thneAC4PdiDhBibnPwlCKEF9c93CHR0t1Efo=";
+    postFetch = ''
+      sed -i 's|name = "protoc"|name = "_protoc_original"|' $out/proto/private/BUILD.release
+      cat <<EOF >>$out/proto/private/BUILD.release
+      alias(name = "protoc", actual = "@com_github_protocolbuffers_protobuf//:protoc", visibility = ["//visibility:public"])
+      EOF
+    '';
+  };
+
+in
+buildBazelPackage rec {
+  pname = "bazel-watcher";
+  version = "0.24.0";
+
+  src = fetchFromGitHub {
+    owner = "bazelbuild";
+    repo = "bazel-watcher";
+    rev = "v${version}";
+    hash = "sha256-ebNHAYKyE3226KiCc2/VSz1OSITuPwuYlAIS3JrWzj0=";
+  };
+
+  nativeBuildInputs = [ go git python3 ];
+  removeRulesCC = false;
+
+  bazel = bazel_5;
+  bazelFlags = [ "--override_repository=rules_proto=${rulesProto}" ];
+  bazelBuildFlags = lib.optionals stdenv.cc.isClang [ "--cxxopt=-x" "--cxxopt=c++" "--host_cxxopt=-x" "--host_cxxopt=c++" ];
+  bazelTargets = [ "//cmd/ibazel" ];
+
+  fetchConfigured = false; # we want to fetch all dependencies, regardless of the current system
+  fetchAttrs = {
+    inherit patches;
+
+    preBuild = ''
+      patchShebangs .
+
+      echo ${bazel_5.version} > .bazelversion
+    '';
+
+    preInstall = ''
+      # Remove the go_sdk (it's just a copy of the go derivation) and all
+      # references to it from the marker files. Bazel does not need to download
+      # this sdk because we have patched the WORKSPACE file to point to the one
+      # currently present in PATH. Without removing the go_sdk from the marker
+      # file, the hash of it will change anytime the Go derivation changes and
+      # that would lead to impurities in the marker files which would result in
+      # a different hash for the fetch phase.
+      rm -rf $bazelOut/external/{go_sdk,\@go_sdk.marker}
+      sed -e '/^FILE:@go_sdk.*/d' -i $bazelOut/external/\@*.marker
+
+      # Retains go build input markers
+      chmod -R 755 $bazelOut/external/{bazel_gazelle_go_repository_cache,@\bazel_gazelle_go_repository_cache.marker}
+      rm -rf $bazelOut/external/{bazel_gazelle_go_repository_cache,@\bazel_gazelle_go_repository_cache.marker}
+
+      # Remove the gazelle tools, they contain go binaries that are built
+      # non-deterministically. As long as the gazelle version matches the tools
+      # should be equivalent.
+      rm -rf $bazelOut/external/{bazel_gazelle_go_repository_tools,\@bazel_gazelle_go_repository_tools.marker}
+      sed -e '/^FILE:@bazel_gazelle_go_repository_tools.*/d' -i $bazelOut/external/\@*.marker
+
+      # remove com_google_protobuf because it had files with different permissions on linux and darwin
+      rm -rf $bazelOut/external/com_google_protobuf
+    '';
+
+    sha256 = "sha256-B2KVD/FmkAa7MNhLaH286gF3uA20qjN3CoA83KRB9E8=";
+  };
+
+  buildAttrs = {
+    inherit patches;
+
+    preBuild = ''
+      patchShebangs .
+
+      substituteInPlace cmd/ibazel/BUILD.bazel --replace '{STABLE_GIT_VERSION}' ${version}
+      echo ${bazel_5.version} > .bazelversion
+    '';
+
+    installPhase = ''
+      install -Dm755 bazel-bin/cmd/ibazel/ibazel_/ibazel $out/bin/ibazel
+    '';
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/bazelbuild/bazel-watcher";
+    description = "Tools for building Bazel targets when source files change";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ kalbasit ];
+    mainProgram = "ibazel";
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/bazel-watcher/use-go-in-path.patch b/nixpkgs/pkgs/development/tools/bazel-watcher/use-go-in-path.patch
new file mode 100644
index 000000000000..5ce4f81ff3ae
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/bazel-watcher/use-go-in-path.patch
@@ -0,0 +1,13 @@
+diff --git a/WORKSPACE b/WORKSPACE
+index 51273b6..fcf9ffb 100644
+--- a/WORKSPACE
++++ b/WORKSPACE
+@@ -61,7 +61,7 @@ load("@io_bazel_rules_go//go:deps.bzl", "go_register_toolchains", "go_rules_depe
+ 
+ go_rules_dependencies()
+ 
+-go_register_toolchains(version = "1.19.4")
++go_register_toolchains(go_version = "host")
+ 
+ load("@bazel_gazelle//:deps.bzl", "gazelle_dependencies")
+ 
diff --git a/nixpkgs/pkgs/development/tools/bazelisk/default.nix b/nixpkgs/pkgs/development/tools/bazelisk/default.nix
new file mode 100644
index 000000000000..be59f6686d5b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/bazelisk/default.nix
@@ -0,0 +1,30 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "bazelisk";
+  version = "1.19.0";
+
+  src = fetchFromGitHub {
+    owner = "bazelbuild";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-no1+sQ+8Ead1diCYytC3MXVA68SuWWxt40OFVrGWYdQ=";
+  };
+
+  vendorHash = "sha256-hjV7Pc3DFExSCsA0jKVxb1GxoXQ7LRFGuot3V0IHG58=";
+
+  doCheck = false;
+
+  ldflags = [ "-s" "-w" "-X main.BazeliskVersion=${version}" ];
+
+  meta = with lib; {
+    description = "A user-friendly launcher for Bazel";
+    longDescription = ''
+      BEWARE: This package does not work on NixOS.
+    '';
+    homepage = "https://github.com/bazelbuild/bazelisk";
+    changelog = "https://github.com/bazelbuild/bazelisk/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ elasticdog ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/bbin/default.nix b/nixpkgs/pkgs/development/tools/bbin/default.nix
new file mode 100644
index 000000000000..ab8638e5033c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/bbin/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, stdenvNoCC
+, fetchFromGitHub
+, gitUpdater
+, makeWrapper
+, babashka-unwrapped
+}:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "bbin";
+  version = "0.2.1";
+
+  src = fetchFromGitHub {
+    owner = "babashka";
+    repo = "bbin";
+    rev = "v${version}";
+    sha256 = "sha256-mF8+Fm1vwLUw5l2PqV+vFFlr6y2JpKBwc+J3PdKQ6Fo=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  dontConfigure = true;
+  dontBuild = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    install -D bbin $out/bin/bbin
+    mkdir -p $out/share
+    cp -r docs $out/share/docs
+    wrapProgram $out/bin/bbin \
+      --prefix PATH : "${lib.makeBinPath [ babashka-unwrapped babashka-unwrapped.graalvmDrv ]}"
+
+    runHook postInstall
+  '';
+
+  passthru = {
+    updateScript = gitUpdater { rev-prefix = "v"; };
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/babashka/bbin";
+    description = "Install any Babashka script or project with one command";
+    license = licenses.mit;
+    inherit (babashka-unwrapped.meta) platforms;
+    maintainers = with maintainers; [ sohalt ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/bearer/default.nix b/nixpkgs/pkgs/development/tools/bearer/default.nix
new file mode 100644
index 000000000000..bc7412c1d72c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/bearer/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, testers
+, bearer
+}:
+
+buildGoModule rec {
+  pname = "bearer";
+  version = "1.37.0";
+
+  src = fetchFromGitHub {
+    owner = "bearer";
+    repo = "bearer";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-b4EQAAPYMoL1MP5sVr3Fu0/znWxlVzpeGbghommCpUg=";
+  };
+
+  vendorHash = "sha256-jE1DUANd1PgSWbwz/PV1pIMgzvRm0ApaJaLCljMw4ig=";
+
+  subPackages = [
+    "cmd/bearer"
+  ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=github.com/bearer/bearer/cmd/bearer/build.Version=${version}"
+  ];
+
+  passthru.tests = {
+    version = testers.testVersion {
+      package = bearer;
+      command = "bearer version";
+    };
+  };
+
+  meta = with lib; {
+    description = "Code security scanning tool (SAST) to discover, filter and prioritize security and privacy risks";
+    homepage = "https://github.com/bearer/bearer";
+    changelog = "https://github.com/Bearer/bearer/releases/tag/v${version}";
+    license = with licenses; [ elastic20 ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/benthos/default.nix b/nixpkgs/pkgs/development/tools/benthos/default.nix
new file mode 100644
index 000000000000..57541ceb1760
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/benthos/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "benthos";
+  version = "4.24.0";
+
+  src = fetchFromGitHub {
+    owner = "benthosdev";
+    repo = "benthos";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-cZhx/a6bTOMP7JKM7ZnMzUEe5R79TIrVpv+6y/9qR0U=";
+  };
+
+  vendorHash = "sha256-6JEFToCBdfdS9MluApkEOcktWU66PpAD07Y9BKSzGx4=";
+
+  doCheck = false;
+
+  subPackages = [
+    "cmd/benthos"
+  ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/benthosdev/benthos/v4/internal/cli.Version=${version}"
+  ];
+
+  meta = with lib; {
+    description = "Fancy stream processing made operationally mundane";
+    homepage = "https://www.benthos.dev";
+    changelog = "https://github.com/benthosdev/benthos/blob/v${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ sagikazarmark ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/bin2c/default.nix b/nixpkgs/pkgs/development/tools/bin2c/default.nix
new file mode 100644
index 000000000000..02039caf457c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/bin2c/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, util-linux
+}:
+
+stdenv.mkDerivation {
+  pname = "bin2c";
+  version = "unstable-2020-05-30";
+
+  src = fetchFromGitHub {
+    owner = "adobe";
+    repo = "bin2c";
+    rev = "4300880a350679a808dc05bdc2840368f5c24d9a";
+    sha256 = "sha256-PLo5kkN2k3KutVGumoXEB2x9MdxDUtpwAQZLwm4dDvw=";
+  };
+
+  makeFlags = [ "prefix=$(out)" ];
+
+  doCheck = !stdenv.isDarwin;
+  checkTarget = "test";
+  checkInputs = [ util-linux ]; # uuidgen
+
+  meta = with lib; {
+    description = "Embed binary & text files inside C binaries";
+    homepage = "https://github.com/adobe/bin2c";
+    license = licenses.asl20;
+    maintainers = [ maintainers.shadowrz ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/bingo/default.nix b/nixpkgs/pkgs/development/tools/bingo/default.nix
new file mode 100644
index 000000000000..f12f0709ac7c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/bingo/default.nix
@@ -0,0 +1,30 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "bingo";
+  version = "0.9.0";
+
+  src = fetchFromGitHub {
+    owner = "bwplotka";
+    repo = "bingo";
+    rev = "v${version}";
+    hash = "sha256-bzh6P+J8EoewjOofwWXMgtSXAhESetD3y9EiqLNOT54=";
+  };
+
+  vendorHash = "sha256-cDeeRkTwuwEKNTqK/6ZEKANrjTIUTeR3o5oClkJQ4AE=";
+
+  postPatch = ''
+    rm get_e2e_test.go get_e2e_utils_test.go
+  '';
+
+  CGO_ENABLED = 0;
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "Like `go get` but for Go tools! CI Automating versioning of Go binaries in a nested, isolated Go modules.";
+    homepage = "https://github.com/bwplotka/bingo";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ aaronjheng ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/biodiff/default.nix b/nixpkgs/pkgs/development/tools/biodiff/default.nix
new file mode 100644
index 000000000000..819cccf95c61
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/biodiff/default.nix
@@ -0,0 +1,23 @@
+{ lib, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "biodiff";
+  version = "1.1.0";
+
+  src = fetchFromGitHub {
+    owner = "8051Enthusiast";
+    repo = "biodiff";
+    rev = "v${version}";
+    hash = "sha256-IrIRBozW2nNqt3/643jQ9sHT/YIpYhWeG749bTR4+60=";
+  };
+
+  cargoHash = "sha256-EkvZk5l2Jw/6Ejrz4gYFWz9IZLjz0Op/1z3BGBV07dA=";
+
+  meta = with lib; {
+    description = "Hex diff viewer using alignment algorithms from biology";
+    homepage = "https://github.com/8051Enthusiast/biodiff";
+    changelog = "https://github.com/8051Enthusiast/biodiff/blob/v${version}/CHANGELOG";
+    license = licenses.mit;
+    maintainers = with maintainers; [ newam ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/biome/default.nix b/nixpkgs/pkgs/development/tools/biome/default.nix
new file mode 100644
index 000000000000..8ad3611ccb09
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/biome/default.nix
@@ -0,0 +1,65 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, libgit2_1_6
+, rust-jemalloc-sys
+, zlib
+, stdenv
+, darwin
+, git
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "biome";
+  version = "1.4.1";
+
+  src = fetchFromGitHub {
+    owner = "biomejs";
+    repo = "biome";
+    rev = "cli/v${version}";
+    hash = "sha256-lzY1Eh1jZixsKi+ObQlhzV4KSV7ZSGPBJtaO9ZiJjEk=";
+  };
+
+  cargoHash = "sha256-Hy5UH2VwqboRD+akl1FxBZoXr2+SmVH5Jx0lSAB/P7w=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    libgit2_1_6
+    rust-jemalloc-sys
+    zlib
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  nativeCheckInputs = [
+    git
+  ];
+
+  cargoBuildFlags = [ "-p=biome_cli" ];
+  cargoTestFlags = cargoBuildFlags;
+
+  env = {
+    BIOME_VERSION = version;
+  };
+
+  preCheck = ''
+    # tests assume git repository
+    git init
+
+    # tests assume $BIOME_VERSION is unset
+    unset BIOME_VERSION
+  '';
+
+  meta = with lib; {
+    description = "Toolchain of the web";
+    homepage = "https://biomejs.dev/";
+    changelog = "https://github.com/biomejs/biome/blob/${src.rev}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "biome";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/bloaty/default.nix b/nixpkgs/pkgs/development/tools/bloaty/default.nix
new file mode 100644
index 000000000000..96a6d28e9787
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/bloaty/default.nix
@@ -0,0 +1,64 @@
+{ lib, stdenv, cmake, zlib, fetchFromGitHub, re2, abseil-cpp, protobuf, capstone, gtest, pkg-config, lit, llvmPackages_16 }:
+
+stdenv.mkDerivation rec {
+  pname = "bloaty";
+  version = "1.1-unstable-2023-11-06";
+
+  src = fetchFromGitHub {
+    owner = "google";
+    repo = "bloaty";
+    rev = "16f9fe54d9cd0e9abe1d25fc1a9b44c214cfaa9f";
+    hash = "sha256-mIVlNMKtJMfH2QdYZ6+oV7619oYzvKkq3fHY6uofqlM=";
+  };
+
+  # Old vendored package which has no other use than here, so not packaged in nixpkgs.
+  demumble = fetchFromGitHub {
+    owner = "nico";
+    repo = "demumble";
+    rev = "01098eab821b33bd31b9778aea38565cd796aa85";
+    hash = "sha256-605SsXd7TSdm3BH854ChHIZbOXcHI/n8RN+pFMz4Ex4=";
+  };
+
+  cmakeFlags = [
+    "-DLIT_EXECUTABLE=${lit}/bin/lit"
+    "-DFILECHECK_EXECUTABLE=${llvmPackages_16.libllvm}/bin/FileCheck"
+    "-DYAML2OBJ_EXECUTABLE=${llvmPackages_16.libllvm}/bin/yaml2obj"
+  ];
+
+  postPatch = ''
+    # Build system relies on some of those source files
+    rm -rf third_party/googletest third_party/abseil-cpp third_party/demumble
+    ln -s ${gtest.src} third_party/googletest
+    ln -s ${abseil-cpp.src} third_party/abseil-cpp
+    ln -s ${demumble} third_party/demumble
+    substituteInPlace CMakeLists.txt \
+      --replace "find_package(Python COMPONENTS Interpreter)" "" \
+      --replace "if(Python_FOUND AND LIT_EXECUTABLE" "if(LIT_EXECUTABLE" \
+      --replace "COMMAND \''\${Python_EXECUTABLE} \''\${LIT_EXECUTABLE}" "COMMAND \''\${LIT_EXECUTABLE}"
+    # wasm test fail. Possibly due to LLVM version < 17. See https://github.com/google/bloaty/pull/354
+    rm -rf tests/wasm
+  '';
+
+  nativeBuildInputs = [ cmake pkg-config ];
+
+  buildInputs = [ zlib re2 abseil-cpp protobuf capstone gtest lit llvmPackages_16.libllvm ];
+
+  doCheck = true;
+
+  postCheck = ''
+    # These lit tests need to be build seperatly.
+    # See https://github.com/google/bloaty/blob/main/tests/README.md
+    cmake --build . --target check-bloaty
+  '';
+  installPhase = ''
+    install -Dm755 {.,$out/bin}/bloaty
+  '';
+
+  meta = with lib; {
+    description = "a size profiler for binaries";
+    homepage = "https://github.com/google/bloaty";
+    license = licenses.asl20;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ dtzWill ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/bloom/default.nix b/nixpkgs/pkgs/development/tools/bloom/default.nix
new file mode 100644
index 000000000000..dc0a35d06542
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/bloom/default.nix
@@ -0,0 +1,55 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, yaml-cpp
+, qtbase
+, qtsvg
+, wrapQtAppsHook
+, qttools
+, libusb1
+, php
+, hidapi
+, procps
+}:
+
+stdenv.mkDerivation rec {
+  pname = "bloom";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "bloombloombloom";
+    repo = "Bloom";
+    rev = "v${version}";
+    hash = "sha256-ZZfclZwxsCgApUII79bJVyT5V/dF9jm7l8ynRWCh0UU=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    php
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    hidapi
+    libusb1
+    procps
+    qtbase
+    qtsvg
+    qttools
+    yaml-cpp
+  ];
+
+  postPatch = ''
+    sed -i 's|/usr|${placeholder "out"}|' cmake/Installing.cmake
+  '';
+
+  meta = {
+    description = "Debug interface for AVR-based embedded systems development on GNU/Linux";
+    homepage = "https://bloom.oscillate.io/";
+    license = lib.licenses.lgpl3Only;
+    maintainers = with lib.maintainers; [ eclairevoyant ];
+    mainProgram = "bloom";
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/bodyclose/default.nix b/nixpkgs/pkgs/development/tools/bodyclose/default.nix
new file mode 100644
index 000000000000..e252223b883f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/bodyclose/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "bodyclose";
+  version = "2023-04-21";
+
+  src = fetchFromGitHub {
+    owner = "timakin";
+    repo = "bodyclose";
+    rev = "574207250966ef48b7c65325648b17ff2c3a900a";
+    hash = "sha256-qUt8uOk1vgj2rtzTevGh9c4McxbFKgEw83pq7IAlRdg=";
+  };
+
+  vendorHash = "sha256-TSYaY7Rg0ZoXdIN1sTNmgjC4PcVcgwSTuE43FYbzlAs=";
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "Golang linter to check whether HTTP response body is closed and a re-use of TCP connection is not blocked";
+    homepage = "https://github.com/timakin/bodyclose";
+    license = licenses.mit;
+    maintainers = with maintainers; [ meain ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/bomber-go/default.nix b/nixpkgs/pkgs/development/tools/bomber-go/default.nix
new file mode 100644
index 000000000000..7857dff0302a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/bomber-go/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "bomber-go";
+  version = "0.4.7";
+
+  src = fetchFromGitHub {
+    owner = "devops-kung-fu";
+    repo = "bomber";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-q3x3duXc2++BvVul2a5fBTcPHWrOHpPOGHBUXL08syg=";
+  };
+
+  vendorHash = "sha256-jVdrvc48/Vt240EYk5PtZCjNGipX7M1qF8OJdpu/qI4=";
+
+  ldflags = [
+    "-w"
+    "-s"
+  ];
+
+  checkFlags = [
+    "-skip=TestEnrich" # Requires network access
+  ];
+
+  meta = with lib; {
+    description = "Tool to scans Software Bill of Materials (SBOMs) for vulnerabilities";
+    homepage = "https://github.com/devops-kung-fu/bomber";
+    changelog = "https://github.com/devops-kung-fu/bomber/releases/tag/v${version}";
+    license = licenses.mpl20;
+    mainProgram = "bomber";
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/boomerang/default.nix b/nixpkgs/pkgs/development/tools/boomerang/default.nix
new file mode 100644
index 000000000000..0e67ab90c523
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/boomerang/default.nix
@@ -0,0 +1,38 @@
+{ mkDerivation, lib, fetchFromGitHub, fetchpatch, cmake, qtbase, capstone, bison, flex }:
+
+mkDerivation rec {
+  pname = "boomerang";
+  version = "0.5.2";
+  # NOTE: When bumping version beyond 0.5.2, you likely need to remove
+  #       the cstdint.patch below. The patch does a fix that has already
+  #       been done upstream but is not yet part of a release
+
+  src = fetchFromGitHub {
+    owner = "BoomerangDecompiler";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0xncdp0z8ry4lkzmvbj5d7hlzikivghpwicgywlv47spgh8ny0ix";
+  };
+
+  # Boomerang usually compiles with -Werror but has not been updated for newer
+  # compilers. Disable -Werror for now. Consider trying to remove this when
+  # updating this derivation.
+  NIX_CFLAGS_COMPILE = "-Wno-error";
+
+  nativeBuildInputs = [ cmake bison flex ];
+  buildInputs = [ qtbase capstone ];
+  patches = [
+    (fetchpatch {
+      name = "include-missing-cstdint.patch";
+      url = "https://github.com/BoomerangDecompiler/boomerang/commit/3342b0eac6b7617d9913226c06c1470820593e74.patch";
+      sha256 = "sha256-941IydcV3mqj7AWvXTM6GePW5VgawEcL0wrBCXqeWvc=";
+    })
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/BoomerangDecompiler/boomerang";
+    license = licenses.bsd3;
+    description = "A general, open source, retargetable decompiler";
+    maintainers = with maintainers; [ dtzWill ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/boost-build/default.nix b/nixpkgs/pkgs/development/tools/boost-build/default.nix
new file mode 100644
index 000000000000..6b485b80ea1c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/boost-build/default.nix
@@ -0,0 +1,74 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, bison
+# boost derivation to use for the src and version.
+# This is used by the boost derivation to build
+# a b2 matching their version (by overriding this
+# argument). Infinite recursion is not an issue
+# since we only look at src and version of boost.
+, useBoost ? {}
+}:
+
+let
+  defaultVersion = "4.4.1";
+in
+
+stdenv.mkDerivation {
+  pname = "boost-build";
+  version =
+    if useBoost ? version
+    then "boost-${useBoost.version}"
+    else defaultVersion;
+
+  src = useBoost.src or (fetchFromGitHub {
+    owner = "boostorg";
+    repo = "build";
+    rev = defaultVersion;
+    sha256 = "1r4rwlq87ydmsdqrik4ly5iai796qalvw7603mridg2nwcbbnf54";
+  });
+
+  # b2 is in a subdirectory of boost source tarballs
+  postUnpack = lib.optionalString (useBoost ? src) ''
+    sourceRoot="$sourceRoot/tools/build"
+  '';
+
+  patches = useBoost.boostBuildPatches or [];
+
+  # Upstream defaults to gcc on darwin, but we use clang.
+  postPatch = ''
+    substituteInPlace src/build-system.jam \
+    --replace "default-toolset = darwin" "default-toolset = clang-darwin"
+  '' + lib.optionalString (useBoost ? version && lib.versionAtLeast useBoost.version "1.82") ''
+    patchShebangs --build src/engine/build.sh
+  '';
+
+  nativeBuildInputs = [
+    bison
+  ];
+
+  buildPhase = ''
+    runHook preBuild
+    ./bootstrap.sh
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    ./b2 install --prefix="$out"
+
+    # older versions of b2 created this symlink,
+    # which we want to support building via useBoost.
+    test -e "$out/bin/bjam" || ln -s b2 "$out/bin/bjam"
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://www.boost.org/build/";
+    license = lib.licenses.boost;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ ivan-tkatchev ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/bpf-linker/default.nix b/nixpkgs/pkgs/development/tools/bpf-linker/default.nix
new file mode 100644
index 000000000000..8c5cb8863e3d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/bpf-linker/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+, llvmPackages_15
+, zlib
+, ncurses
+, libxml2
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "bpf-linker";
+  version = "0.9.5";
+
+  src = fetchFromGitHub {
+    owner = "aya-rs";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-LEZ2to1bzJ/H/XYytuh/7NT7+04aI8chpKIFxxVzM+4=";
+  };
+
+  cargoHash = "sha256-s8cW7lXtvgemuQueTtAywewnDVJ/WDcz8SBqsC/tO80=";
+
+  buildNoDefaultFeatures = true;
+  buildFeatures = [ "system-llvm" ];
+
+  nativeBuildInputs = [ llvmPackages_15.llvm ];
+  buildInputs = [ zlib ncurses libxml2 ];
+
+  # fails with: couldn't find crate `core` with expected target triple bpfel-unknown-none
+  # rust-src and `-Z build-std=core` are required to properly run the tests
+  doCheck = false;
+
+  # Work around https://github.com/NixOS/nixpkgs/issues/166205.
+  env = lib.optionalAttrs stdenv.cc.isClang {
+    NIX_LDFLAGS = "-l${stdenv.cc.libcxx.cxxabi.libName}";
+  };
+
+  meta = with lib; {
+    description = "Simple BPF static linker";
+    homepage = "https://github.com/aya-rs/bpf-linker";
+    license = with licenses; [ asl20 mit ];
+    maintainers = with maintainers; [ nickcao ];
+    # llvm-sys crate locates llvm by calling llvm-config
+    # which is not available when cross compiling
+    broken = stdenv.buildPlatform != stdenv.hostPlatform;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/buf/default.nix b/nixpkgs/pkgs/development/tools/buf/default.nix
new file mode 100644
index 000000000000..85ad114c93df
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/buf/default.nix
@@ -0,0 +1,78 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, protobuf
+, git
+, testers
+, buf
+, installShellFiles
+}:
+
+buildGoModule rec {
+  pname = "buf";
+  version = "1.29.0";
+
+  src = fetchFromGitHub {
+    owner = "bufbuild";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-X3/t+hMcZXR3X+XtbW2eItTgeP1NIuqrkMT4bX5VJog=";
+  };
+
+  vendorHash = "sha256-0wW938eU9my92dpwHEJ0Obt4XSIK5vuDa1P27nbhzao=";
+
+  patches = [
+    # Skip a test that requires networking to be available to work,
+    # and a test which requires the source checkout to be part of a git repository
+    ./skip_broken_tests.patch
+  ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  ldflags = [ "-s" "-w" ];
+
+  nativeCheckInputs = [
+    git # Required for TestGitCloner
+    protobuf # Required for buftesting.GetProtocFilePaths
+  ];
+
+  preCheck = ''
+    # The tests need access to some of the built utilities
+    export PATH="$PATH:$GOPATH/bin"
+  '';
+
+  # Allow tests that bind or connect to localhost on macOS.
+  __darwinAllowLocalNetworking = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    # Binaries
+    # Only install required binaries, don't install testing binaries
+    for FILE in buf protoc-gen-buf-breaking protoc-gen-buf-lint; do
+      install -D -m 555 -t $out/bin $GOPATH/bin/$FILE
+    done
+
+    # Completions
+    installShellCompletion --cmd buf \
+      --bash <($GOPATH/bin/buf completion bash) \
+      --fish <($GOPATH/bin/buf completion fish) \
+      --zsh <($GOPATH/bin/buf completion zsh)
+
+    # Man Pages
+    mkdir man && $GOPATH/bin/buf manpages man
+    installManPage man/*
+
+    runHook postInstall
+  '';
+
+  passthru.tests.version = testers.testVersion { package = buf; };
+
+  meta = with lib; {
+    homepage = "https://buf.build";
+    changelog = "https://github.com/bufbuild/buf/releases/tag/v${version}";
+    description = "Create consistent Protobuf APIs that preserve compatibility and comply with design best-practices";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ jk lrewega ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/buf/skip_broken_tests.patch b/nixpkgs/pkgs/development/tools/buf/skip_broken_tests.patch
new file mode 100644
index 000000000000..c25f8c8c9304
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/buf/skip_broken_tests.patch
@@ -0,0 +1,28 @@
+diff --git a/private/buf/cmd/buf/workspace_unix_test.go b/private/buf/cmd/buf/workspace_unix_test.go
+index 22c84385..22548555 100644
+--- a/private/buf/cmd/buf/workspace_unix_test.go
++++ b/private/buf/cmd/buf/workspace_unix_test.go
+@@ -93,6 +93,8 @@ func TestWorkspaceAbsoluteFail(t *testing.T) {
+ // Workflow run: https://github.com/bufbuild/buf/actions/runs/6510804063/job/17685247791.
+ // Potential fix: https://stackoverflow.com/questions/22575662/filename-too-long-in-git-for-windows.
+ func TestWorkspaceGit(t *testing.T) {
++	// Fails because the source checkout is not part of a git repository while building with nix
++	t.Skip()
+ 	// Directory paths specified as a git reference within a workspace.
+ 	t.Parallel()
+ 	testRunStdout(
+diff --git a/private/bufpkg/buftesting/buftesting.go b/private/bufpkg/buftesting/buftesting.go
+index d9e1fdc6..6e08c439 100644
+--- a/private/bufpkg/buftesting/buftesting.go
++++ b/private/bufpkg/buftesting/buftesting.go
+@@ -104,6 +104,10 @@ func RunActualProtoc(
+ 
+ // GetGoogleapisDirPath gets the path to a clone of googleapis.
+ func GetGoogleapisDirPath(t *testing.T, buftestingDirPath string) string {
++	// Requires network access, which is not available during
++	// the nixpkgs sandboxed build
++	t.Skip()
++
+ 	googleapisDirPath := filepath.Join(buftestingDirPath, testGoogleapisDirPath)
+ 	require.NoError(
+ 		t,
diff --git a/nixpkgs/pkgs/development/tools/build-managers/alibuild/default.nix b/nixpkgs/pkgs/development/tools/build-managers/alibuild/default.nix
new file mode 100644
index 000000000000..93709454c7b5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/alibuild/default.nix
@@ -0,0 +1,27 @@
+{ lib, python, fetchPypi }:
+
+python.pkgs.buildPythonApplication rec {
+  pname = "alibuild";
+  version = "1.11.2";
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-wq2H2inUf2CjPD45krCNdjw2s4FXsEDlfOHqW8VaVKg=";
+  };
+
+  doCheck = false;
+  propagatedBuildInputs = with python.pkgs; [
+    requests
+    pyyaml
+    boto3
+    jinja2
+    distro
+  ];
+
+  meta = with lib; {
+    homepage = "https://alisw.github.io/alibuild/";
+    description = "Build tool for ALICE experiment software";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ ktf ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/alire/default.nix b/nixpkgs/pkgs/development/tools/build-managers/alire/default.nix
new file mode 100644
index 000000000000..eaa87d573f8c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/alire/default.nix
@@ -0,0 +1,51 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, gprbuild
+, gnat
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "alire";
+  version = "1.2.2";
+
+  src = fetchFromGitHub {
+    owner = "alire-project";
+    repo = "alire";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-rwNiSXOIIQR1I8wwp1ROVOfEChT6SCa5c6XnTRqekDc=";
+
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [ gprbuild gnat ];
+
+  # on HEAD (roughly 2c4e5a3), alire provides a dev/build.sh script. for now,
+  # just use gprbuild.
+  buildPhase = ''
+    runHook preBuild
+
+    gprbuild -j$NIX_BUILD_CORES -P alr_env
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out
+    cp -r ./bin $out
+
+    runHook postInstall
+  '';
+
+  meta = {
+    description = "A source-based package manager for the Ada and SPARK programming languages";
+    homepage = "https://alire.ada.dev";
+    changelog = "https://github.com/alire-project/alire/releases/tag/v${finalAttrs.version}";
+    license = lib.licenses.gpl3Only;
+    maintainers = with lib.maintainers; [ atalii ];
+    platforms = lib.platforms.unix;
+    mainProgram = "alr";
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/build-managers/apache-ant/default.nix b/nixpkgs/pkgs/development/tools/build-managers/apache-ant/default.nix
new file mode 100644
index 000000000000..3cf880499944
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/apache-ant/default.nix
@@ -0,0 +1,111 @@
+{ fetchurl, lib, stdenv, coreutils, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "ant";
+  version = "1.10.11";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  src = fetchurl {
+    url = "mirror://apache/ant/binaries/apache-ant-${version}-bin.tar.bz2";
+    sha256 = "19m8xb7h6xm4jykzb79kakbx1pa4awaglw6z31pbfg8m5pmwkipz";
+  };
+
+  contrib = fetchurl {
+    url = "mirror://sourceforge/ant-contrib/ant-contrib-1.0b3-bin.tar.bz2";
+    sha256 = "1l8say86bz9gxp4yy777z7nm4j6m905pg342li1aphc14p5grvwn";
+  };
+
+  installPhase =
+    ''
+      mkdir -p $out/bin $out/lib/ant
+      mv * $out/lib/ant/
+
+      # Get rid of the manual (35 MiB).  Maybe we should put this in a
+      # separate output.  Keep the antRun script since it's vanilla sh
+      # and needed for the <exec/> task (but since we set ANT_HOME to
+      # a weird value, we have to move antRun to a weird location).
+      # Get rid of the other Ant scripts since we provide our own.
+      mv $out/lib/ant/bin/antRun $out/bin/
+      rm -rf $out/lib/ant/{manual,bin,WHATSNEW}
+      mkdir $out/lib/ant/bin
+      mv $out/bin/antRun $out/lib/ant/bin/
+
+      # Install ant-contrib.
+      unpackFile $contrib
+      cp -p ant-contrib/ant-contrib-*.jar $out/lib/ant/lib/
+
+      cat >> $out/bin/ant <<EOF
+      #! ${stdenv.shell} -e
+
+      ANT_HOME=$out/lib/ant
+
+      # Find the JDK by looking for javac.  As a fall-back, find the
+      # JRE by looking for java.  The latter allows just the JRE to be
+      # used with (say) ECJ as the compiler.  Finally, allow the GNU
+      # JVM.
+      if [ -z "\''${JAVA_HOME-}" ]; then
+          for i in javac java gij; do
+              if p="\$(type -p \$i)"; then
+                  export JAVA_HOME="\$(${coreutils}/bin/dirname \$(${coreutils}/bin/dirname \$(${coreutils}/bin/readlink -f \$p)))"
+                  break
+              fi
+          done
+          if [ -z "\''${JAVA_HOME-}" ]; then
+              echo "\$0: cannot find the JDK or JRE" >&2
+              exit 1
+          fi
+      fi
+
+      if [ -z \$NIX_JVM ]; then
+          if [ -e \$JAVA_HOME/bin/java ]; then
+              NIX_JVM=\$JAVA_HOME/bin/java
+          elif [ -e \$JAVA_HOME/bin/gij ]; then
+              NIX_JVM=\$JAVA_HOME/bin/gij
+          else
+              NIX_JVM=java
+          fi
+      fi
+
+      LOCALCLASSPATH="\$ANT_HOME/lib/ant-launcher.jar\''${LOCALCLASSPATH:+:}\$LOCALCLASSPATH"
+
+      exec \$NIX_JVM \$NIX_ANT_OPTS \$ANT_OPTS -classpath "\$LOCALCLASSPATH" \
+          -Dant.home=\$ANT_HOME -Dant.library.dir="\$ANT_LIB" \
+          org.apache.tools.ant.launch.Launcher \$NIX_ANT_ARGS \$ANT_ARGS \
+          -cp "\$CLASSPATH" "\$@"
+      EOF
+
+      chmod +x $out/bin/ant
+    ''; # */
+
+  meta = {
+    homepage = "https://ant.apache.org/";
+    description = "A Java-based build tool";
+
+    longDescription = ''
+      Apache Ant is a Java-based build tool.  In theory, it is kind of like
+      Make, but without Make's wrinkles.
+
+      Why another build tool when there is already make, gnumake, nmake, jam,
+      and others? Because all those tools have limitations that Ant's
+      original author couldn't live with when developing software across
+      multiple platforms.  Make-like tools are inherently shell-based -- they
+      evaluate a set of dependencies, then execute commands not unlike what
+      you would issue in a shell.  This means that you can easily extend
+      these tools by using or writing any program for the OS that you are
+      working on.  However, this also means that you limit yourself to the
+      OS, or at least the OS type such as Unix, that you are working on.
+
+      Ant is different.  Instead of a model where it is extended with
+      shell-based commands, Ant is extended using Java classes.  Instead of
+      writing shell commands, the configuration files are XML-based, calling
+      out a target tree where various tasks get executed.  Each task is run
+      by an object that implements a particular Task interface.
+    '';
+
+    sourceProvenance = with lib.sourceTypes; [ binaryBytecode ];
+    license = lib.licenses.asl20;
+    maintainers = [ lib.maintainers.eelco ];
+    platforms = lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/apache-maven/build-package.nix b/nixpkgs/pkgs/development/tools/build-managers/apache-maven/build-package.nix
new file mode 100644
index 000000000000..49c217dbc91c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/apache-maven/build-package.nix
@@ -0,0 +1,87 @@
+{ lib
+, stdenv
+, maven
+}:
+
+{ src
+, sourceRoot ? null
+, buildOffline ? false
+, patches ? [ ]
+, pname
+, version
+, mvnHash ? ""
+, mvnFetchExtraArgs ? { }
+, mvnDepsParameters ? ""
+, manualMvnArtifacts ? [ ]
+, mvnParameters ? ""
+, ...
+} @args:
+
+# originally extracted from dbeaver
+# created to allow using maven packages in the same style as rust
+
+let
+  fetchedMavenDeps = stdenv.mkDerivation ({
+    name = "${pname}-${version}-maven-deps";
+    inherit src sourceRoot patches;
+
+    nativeBuildInputs = [
+      maven
+    ];
+
+    buildPhase = ''
+      runHook preBuild
+    '' + lib.optionalString buildOffline ''
+      mvn de.qaware.maven:go-offline-maven-plugin:1.2.8:resolve-dependencies -Dmaven.repo.local=$out/.m2 ${mvnDepsParameters}
+
+      for artifactId in ${builtins.toString manualMvnArtifacts}
+      do
+        echo "downloading manual $artifactId"
+        mvn dependency:get -Dartifact="$artifactId" -Dmaven.repo.local=$out/.m2
+      done
+    '' + lib.optionalString (!buildOffline) ''
+      mvn package -Dmaven.repo.local=$out/.m2 ${mvnParameters}
+    '' + ''
+      runHook postBuild
+    '';
+
+    # keep only *.{pom,jar,sha1,nbm} and delete all ephemeral files with lastModified timestamps inside
+    installPhase = ''
+      runHook preInstall
+
+      find $out -type f \( \
+        -name \*.lastUpdated \
+        -o -name resolver-status.properties \
+        -o -name _remote.repositories \) \
+        -delete
+
+      runHook postInstall
+    '';
+
+    # don't do any fixup
+    dontFixup = true;
+    outputHashAlgo = if mvnHash != "" then null else "sha256";
+    outputHashMode = "recursive";
+    outputHash = mvnHash;
+  } // mvnFetchExtraArgs);
+in
+stdenv.mkDerivation (builtins.removeAttrs args [ "mvnFetchExtraArgs" ] // {
+  inherit fetchedMavenDeps;
+
+  nativeBuildInputs = args.nativeBuildInputs or [ ] ++ [
+    maven
+  ];
+
+  buildPhase = ''
+    runHook preBuild
+
+    mvnDeps=$(cp -dpR ${fetchedMavenDeps}/.m2 ./ && chmod +w -R .m2 && pwd)
+    mvn package -o -nsu "-Dmaven.repo.local=$mvnDeps/.m2" ${mvnParameters}
+
+    runHook postBuild
+  '';
+
+  meta = args.meta or { } // {
+    platforms = args.meta.platforms or maven.meta.platforms;
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/build-managers/apache-maven/default.nix b/nixpkgs/pkgs/development/tools/build-managers/apache-maven/default.nix
new file mode 100644
index 000000000000..c8b5fdaa04a9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/apache-maven/default.nix
@@ -0,0 +1,50 @@
+{ lib
+, stdenvNoCC
+, fetchurl
+, jdk
+, makeWrapper
+, callPackage
+}:
+
+assert jdk != null;
+
+stdenvNoCC.mkDerivation (finalAttrs: {
+  pname = "apache-maven";
+  version = "3.9.6";
+
+  src = fetchurl {
+    url = "mirror://apache/maven/maven-3/${finalAttrs.version}/binaries/${finalAttrs.pname}-${finalAttrs.version}-bin.tar.gz";
+    hash = "sha256-bu3SyuNibWrTpcnuMkvSZYU9ZCl/B/AzQwdVvQ4MOks=";
+  };
+
+  sourceRoot = ".";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/maven
+    cp -r ${finalAttrs.pname}-${finalAttrs.version}/* $out/maven
+
+    makeWrapper $out/maven/bin/mvn $out/bin/mvn \
+      --set-default JAVA_HOME "${jdk}"
+    makeWrapper $out/maven/bin/mvnDebug $out/bin/mvnDebug \
+      --set-default JAVA_HOME "${jdk}"
+
+    runHook postInstall
+  '';
+
+  passthru.buildMavenPackage = callPackage ./build-package.nix {
+    maven = finalAttrs.finalPackage;
+  };
+
+  meta = with lib; {
+    mainProgram = "mvn";
+    description = "Build automation tool (used primarily for Java projects)";
+    homepage = "https://maven.apache.org/";
+    license = licenses.asl20;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ cko ];
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/build-managers/arpa2cm/default.nix b/nixpkgs/pkgs/development/tools/build-managers/arpa2cm/default.nix
new file mode 100644
index 000000000000..47b1d502842b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/arpa2cm/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitLab, cmake }:
+
+stdenv.mkDerivation rec {
+  pname = "arpa2cm";
+  version = "1.0.4";
+
+  src = fetchFromGitLab {
+    owner = "arpa2";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-2vb/7UL+uWGrQNh8yOZ3gih5G1/eOp064hF78SDsPGk=";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  meta = with lib; {
+    description = "CMake Module library for the ARPA2 project";
+    longDescription = ''
+      The CMake module library for the ARPA2 project, including the LillyDAP,
+      TLSPool and IdentityHub software stacks. Like the KDE Extra CMake Modules (ECM)
+      which is a large-ish collection of curated CMake modules of particular
+      interest to Qt-based and KDE Frameworks-based applications, the ARPA2
+      CMake Modules (ARPA2CM) is a collection of modules for the software
+      stack from the ARPA2 project. This is largely oriented towards
+      TLS, SSL, X509, DER and LDAP technologies. The ARPA2 CMake Modules
+      also include modules used for product release and deployment of
+      the ARPA2 software stack.
+    '';
+    homepage = "https://gitlab.com/arpa2/arpa2cm";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ leenaars fufexan ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bam/default.nix b/nixpkgs/pkgs/development/tools/build-managers/bam/default.nix
new file mode 100644
index 000000000000..556725cca6c4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bam/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, fetchFromGitHub, lua5_3, python3 }:
+
+stdenv.mkDerivation rec {
+  pname = "bam";
+  version = "0.5.1";
+
+  src = fetchFromGitHub {
+    owner = "matricks";
+    repo = "bam";
+    rev = "v${version}";
+    sha256 = "13br735ig7lygvzyfd15fc2rdygrqm503j6xj5xkrl1r7w2wipq6";
+  };
+
+  nativeBuildInputs = [ lua5_3 python3 ];
+
+  buildPhase = "${stdenv.shell} make_unix.sh";
+
+  checkPhase = "${python3.interpreter} scripts/test.py";
+
+  strictDeps = true;
+
+  installPhase = ''
+    mkdir -p "$out/share/bam"
+    cp -r docs examples tests  "$out/share/bam"
+    mkdir -p "$out/bin"
+    cp bam "$out/bin"
+  '';
+
+  meta = with lib; {
+    description = "Yet another build manager";
+    maintainers = with maintainers;
+    [
+      raskin
+    ];
+    platforms = platforms.linux;
+    license = licenses.zlib;
+    downloadPage = "http://matricks.github.com/bam/";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/README.md b/nixpkgs/pkgs/development/tools/build-managers/bazel/README.md
new file mode 100644
index 000000000000..69ec0e30e157
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/README.md
@@ -0,0 +1,7 @@
+# The Bazel build tool
+
+https://bazel.build/
+
+The bazel tool requires regular maintenance, especially under darwin, so we created a maintainers team.
+
+Please ping @NixOS/bazel in your github PR/issue to increase your chance of a quick turnaround, thanks!
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bash-tools-test.nix b/nixpkgs/pkgs/development/tools/build-managers/bazel/bash-tools-test.nix
new file mode 100644
index 000000000000..b7bfd8b81bd5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bash-tools-test.nix
@@ -0,0 +1,44 @@
+{ writeText, bazel, runLocal, bazelTest, distDir, extraBazelArgs ? ""}:
+
+# Tests that certain executables are available in bazel-executed bash shells.
+
+let
+  WORKSPACE = writeText "WORKSPACE" ''
+    workspace(name = "our_workspace")
+  '';
+
+  fileIn = writeText "input.txt" ''
+  one
+  two
+  three
+  '';
+
+  fileBUILD = writeText "BUILD" ''
+    genrule(
+      name = "tool_usage",
+      srcs = [ ":input.txt" ],
+      outs = [ "output.txt" ],
+      cmd = "cat $(location :input.txt) | gzip - | gunzip - | awk '/t/' > $@",
+    )
+  '';
+
+  workspaceDir = runLocal "our_workspace" {} ''
+    mkdir $out
+    cp ${WORKSPACE} $out/WORKSPACE
+    cp ${fileIn} $out/input.txt
+    cp ${fileBUILD} $out/BUILD
+  '';
+
+  testBazel = bazelTest {
+    name = "bazel-test-bash-tools";
+    bazelPkg = bazel;
+    inherit workspaceDir;
+
+    bazelScript = ''
+      ${bazel}/bin/bazel build :tool_usage --distdir=${distDir} ${extraBazelArgs}
+      cp bazel-bin/output.txt $out
+      echo "Testing content" && [ "$(cat $out | wc -l)" == "2" ] && echo "OK"
+    '';
+  };
+
+in testBazel
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel-remote/default.nix b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel-remote/default.nix
new file mode 100644
index 000000000000..1692058dcac8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel-remote/default.nix
@@ -0,0 +1,33 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+}:
+
+buildGoModule rec {
+  pname = "bazel-remote";
+  version = "2.4.3";
+
+  src = fetchFromGitHub {
+    owner = "buchgr";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-yvdsRc5KZAwzekktSu9tR9R2vvAMi+4JVkvy+ANFkQ8=";
+  };
+
+  vendorHash = "sha256-0rmqsUMwk5ytAZc94JzvZTuh0WAmQwBEWSE96yNALE0=";
+
+  subPackages = [ "." ];
+
+  doCheck = false;
+
+  ldflags = [ "-s" "-w" "-X main.gitCommit=${version}" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/buchgr/bazel-remote";
+    description = "A remote HTTP/1.1 cache for Bazel";
+    changelog = "https://github.com/buchgr/bazel-remote/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = lib.teams.bazel.members;
+    platforms = platforms.darwin ++ platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_4/actions_path.patch b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_4/actions_path.patch
new file mode 100644
index 000000000000..1fa1e5748333
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_4/actions_path.patch
@@ -0,0 +1,41 @@
+diff --git a/src/main/java/com/google/devtools/build/lib/exec/local/PosixLocalEnvProvider.java b/src/main/java/com/google/devtools/build/lib/exec/local/PosixLocalEnvProvider.java
+index 6fff2af..7e2877e 100644
+--- a/src/main/java/com/google/devtools/build/lib/exec/local/PosixLocalEnvProvider.java
++++ b/src/main/java/com/google/devtools/build/lib/exec/local/PosixLocalEnvProvider.java
+@@ -47,6 +47,16 @@ public final class PosixLocalEnvProvider implements LocalEnvProvider {
+       Map<String, String> env, BinTools binTools, String fallbackTmpDir) {
+     ImmutableMap.Builder<String, String> result = ImmutableMap.builder();
+     result.putAll(Maps.filterKeys(env, k -> !k.equals("TMPDIR")));
++
++    // In case we are running on NixOS.
++    // If bash is called with an unset PATH on this platform,
++    // it will set it to /no-such-path and default tools will be missings.
++    // See, https://github.com/NixOS/nixpkgs/issues/94222
++    // So we ensure that minimal dependencies are present.
++    if (!env.containsKey("PATH")){
++        result.put("PATH", "@actionsPathPatch@");
++    }
++ 
+     String p = clientEnv.get("TMPDIR");
+     if (Strings.isNullOrEmpty(p)) {
+       // Do not use `fallbackTmpDir`, use `/tmp` instead. This way if the user didn't export TMPDIR
+index 95642767c6..39d3c62461 100644
+--- a/src/main/java/com/google/devtools/build/lib/exec/local/XcodeLocalEnvProvider.java
++++ b/src/main/java/com/google/devtools/build/lib/exec/local/XcodeLocalEnvProvider.java
+@@ -74,6 +74,16 @@ public final class XcodeLocalEnvProvider implements LocalEnvProvider {
+
+     ImmutableMap.Builder<String, String> newEnvBuilder = ImmutableMap.builder();
+     newEnvBuilder.putAll(Maps.filterKeys(env, k -> !k.equals("TMPDIR")));
++
++    // In case we are running on NixOS.
++    // If bash is called with an unset PATH on this platform,
++    // it will set it to /no-such-path and default tools will be missings.
++    // See, https://github.com/NixOS/nixpkgs/issues/94222
++    // So we ensure that minimal dependencies are present.
++    if (!env.containsKey("PATH")){
++      newEnvBuilder.put("PATH", "@actionsPathPatch@");
++    }
++
+     String p = clientEnv.get("TMPDIR");
+     if (Strings.isNullOrEmpty(p)) {
+       // Do not use `fallbackTmpDir`, use `/tmp` instead. This way if the user didn't export TMPDIR
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_4/default.nix b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_4/default.nix
new file mode 100644
index 000000000000..f4fee72f6bf3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_4/default.nix
@@ -0,0 +1,662 @@
+{ stdenv, callPackage, lib, fetchurl, fetchpatch, fetchFromGitHub, installShellFiles
+, runCommand, runCommandCC, makeWrapper, recurseIntoAttrs
+# this package (through the fixpoint glass)
+, bazel_self
+, lr, xe, zip, unzip, bash, writeCBin, coreutils
+, which, gawk, gnused, gnutar, gnugrep, gzip, findutils
+# updater
+, python3, writeScript
+# Apple dependencies
+, cctools, libcxx, CoreFoundation, CoreServices, Foundation
+# Allow to independently override the jdks used to build and run respectively
+, buildJdk, runJdk
+, buildJdkName
+, runtimeShell
+# Always assume all markers valid (this is needed because we remove markers; they are non-deterministic).
+# Also, don't clean up environment variables (so that NIX_ environment variables are passed to compilers).
+, enableNixHacks ? false
+, gcc-unwrapped
+, autoPatchelfHook
+, file
+, substituteAll
+, writeTextFile
+}:
+
+let
+  version = "4.2.2";
+  sourceRoot = ".";
+
+  src = fetchurl {
+    url = "https://github.com/bazelbuild/bazel/releases/download/${version}/bazel-${version}-dist.zip";
+    sha256 = "mYHQ1To1bE6HlihHdQqXyegFTkYIVHSABsgPDX4rLTM=";
+  };
+
+  # Update with `eval $(nix-build -A bazel.updater)`,
+  # then add new dependencies from the dict in ./src-deps.json as required.
+  srcDeps = lib.attrsets.attrValues srcDepsSet;
+  srcDepsSet =
+    let
+      srcs = lib.importJSON ./src-deps.json;
+      toFetchurl = d: lib.attrsets.nameValuePair d.name (fetchurl {
+        urls = d.urls;
+        sha256 = d.sha256;
+        });
+        in builtins.listToAttrs (map toFetchurl [
+      srcs.desugar_jdk_libs
+      srcs.io_bazel_skydoc
+      srcs.bazel_skylib
+      srcs.io_bazel_rules_sass
+      srcs.platforms
+      (if stdenv.hostPlatform.isDarwin
+       then srcs."java_tools_javac11_darwin-v10.6.zip"
+       else srcs."java_tools_javac11_linux-v10.6.zip")
+      srcs."coverage_output_generator-v2.5.zip"
+      srcs.build_bazel_rules_nodejs
+      srcs."android_tools_pkg-0.23.0.tar.gz"
+      srcs.bazel_toolchains
+      srcs.com_github_grpc_grpc
+      srcs.upb
+      srcs.com_google_protobuf
+      srcs.rules_pkg
+      srcs.rules_cc
+      srcs.rules_java
+      srcs.rules_proto
+      srcs.com_google_absl
+      srcs.com_github_google_re2
+      srcs.com_github_cares_cares
+      ]);
+
+  distDir = runCommand "bazel-deps" {} ''
+    mkdir -p $out
+    for i in ${builtins.toString srcDeps}; do cp $i $out/$(stripHash $i); done
+  '';
+
+  defaultShellUtils =
+    # Keep this list conservative. For more exotic tools, prefer to use
+    # @rules_nixpkgs to pull in tools from the nix repository. Example:
+    #
+    # WORKSPACE:
+    #
+    #     nixpkgs_git_repository(
+    #         name = "nixpkgs",
+    #         revision = "def5124ec8367efdba95a99523dd06d918cb0ae8",
+    #     )
+    #
+    #     # This defines an external Bazel workspace.
+    #     nixpkgs_package(
+    #         name = "bison",
+    #         repositories = { "nixpkgs": "@nixpkgs//:default.nix" },
+    #     )
+    #
+    # some/BUILD.bazel:
+    #
+    #     genrule(
+    #        ...
+    #        cmd = "$(location @bison//:bin/bison) -other -args",
+    #        tools = [
+    #            ...
+    #            "@bison//:bin/bison",
+    #        ],
+    #     )
+    [
+      bash
+      coreutils
+      file
+      findutils
+      gawk
+      gnugrep
+      gnused
+      gnutar
+      gzip
+      python3
+      unzip
+      which
+      zip
+    ];
+
+  defaultShellPath = lib.makeBinPath defaultShellUtils;
+
+  # Java toolchain used for the build and tests
+  javaToolchain = "@bazel_tools//tools/jdk:toolchain_${buildJdkName}";
+
+  platforms = lib.platforms.linux ++ lib.platforms.darwin;
+
+  # This repository is fetched by bazel at runtime
+  # however it contains prebuilt java binaries, with wrong interpreter
+  # and libraries path.
+  # We prefetch it, patch it, and override it in a global bazelrc.
+  system = if stdenv.hostPlatform.isDarwin then "darwin" else "linux";
+
+  # on aarch64 Darwin, `uname -m` returns "arm64"
+  arch = with stdenv.hostPlatform; if isDarwin && isAarch64 then "arm64" else parsed.cpu.name;
+
+  remote_java_tools = stdenv.mkDerivation {
+    name = "remote_java_tools_${system}";
+
+    src = srcDepsSet."java_tools_javac11_${system}-v10.6.zip";
+
+    nativeBuildInputs = [ unzip ]
+      ++ lib.optional stdenv.isLinux autoPatchelfHook;
+    buildInputs = [ gcc-unwrapped ];
+
+    sourceRoot = ".";
+
+    buildPhase = ''
+      runHook preBuild
+
+      mkdir $out;
+
+      runHook postBuild
+    '';
+
+    installPhase = ''
+      runHook preInstall
+
+      cp -Ra * $out/
+      touch $out/WORKSPACE
+
+      runHook postInstall
+    '';
+  };
+
+  bazelRC = writeTextFile {
+    name = "bazel-rc";
+    text = ''
+      startup --server_javabase=${runJdk}
+
+      # Can't use 'common'; https://github.com/bazelbuild/bazel/issues/3054
+      # Most commands inherit from 'build' anyway.
+      build --distdir=${distDir}
+      fetch --distdir=${distDir}
+      query --distdir=${distDir}
+
+      build --override_repository=${remote_java_tools.name}=${remote_java_tools}
+      fetch --override_repository=${remote_java_tools.name}=${remote_java_tools}
+      query --override_repository=${remote_java_tools.name}=${remote_java_tools}
+
+      # Provide a default java toolchain, this will be the same as ${runJdk}
+      build --host_javabase='@local_jdk//:jdk'
+
+      # load default location for the system wide configuration
+      try-import /etc/bazel.bazelrc
+    '';
+  };
+
+in
+stdenv.mkDerivation rec {
+  pname = "bazel";
+  inherit version;
+
+  meta = with lib; {
+    homepage = "https://github.com/bazelbuild/bazel/";
+    description = "Build tool that builds code quickly and reliably";
+    sourceProvenance = with sourceTypes; [
+      fromSource
+      binaryBytecode  # source bundles dependencies as jars
+    ];
+    license = licenses.asl20;
+    maintainers = lib.teams.bazel.members;
+    inherit platforms;
+  };
+
+  inherit src;
+  inherit sourceRoot;
+  patches = [
+    ./upb-clang16.patch
+
+    # On Darwin, the last argument to gcc is coming up as an empty string. i.e: ''
+    # This is breaking the build of any C target. This patch removes the last
+    # argument if it's found to be an empty string.
+    ../trim-last-argument-to-gcc-if-empty.patch
+
+    # On Darwin, using clang 6 to build fails because of a linker error (see #105573),
+    # but using clang 7 fails because libarclite_macosx.a cannot be found when linking
+    # the xcode_locator tool.
+    # This patch removes using the -fobjc-arc compiler option and makes the code
+    # compile without automatic reference counting. Caveat: this leaks memory, but
+    # we accept this fact because xcode_locator is only a short-lived process used during the build.
+    ./no-arc.patch
+
+    # --experimental_strict_action_env (which may one day become the default
+    # see bazelbuild/bazel#2574) hardcodes the default
+    # action environment to a non hermetic value (e.g. "/usr/local/bin").
+    # This is non hermetic on non-nixos systems. On NixOS, bazel cannot find the required binaries.
+    # So we are replacing this bazel paths by defaultShellPath,
+    # improving hermeticity and making it work in nixos.
+    (substituteAll {
+      src = ../strict_action_env.patch;
+      strictActionEnvPatch = defaultShellPath;
+    })
+
+    (substituteAll {
+      src = ./actions_path.patch;
+      actionsPathPatch = defaultShellPath;
+    })
+
+    # bazel reads its system bazelrc in /etc
+    # override this path to a builtin one
+    (substituteAll {
+      src = ../bazel_rc.patch;
+      bazelSystemBazelRCPath = bazelRC;
+    })
+
+    # disable suspend detection during a build inside Nix as this is
+    # not available inside the darwin sandbox
+    ../bazel_darwin_sandbox.patch
+  ] ++ lib.optional enableNixHacks ../nix-hacks.patch;
+
+
+  # Additional tests that check bazel’s functionality. Execute
+  #
+  #     nix-build . -A bazel.tests
+  #
+  # in the nixpkgs checkout root to exercise them locally.
+  passthru.tests =
+    let
+      runLocal = name: attrs: script:
+      let
+        attrs' = removeAttrs attrs [ "buildInputs" ];
+        buildInputs = attrs.buildInputs or [];
+      in
+      runCommandCC name ({
+        inherit buildInputs;
+        preferLocalBuild = true;
+        meta.platforms = platforms;
+      } // attrs') script;
+
+      # bazel wants to extract itself into $install_dir/install every time it runs,
+      # so let’s do that only once.
+      extracted = bazelPkg:
+        let install_dir =
+          # `install_base` field printed by `bazel info`, minus the hash.
+          # yes, this path is kinda magic. Sorry.
+          "$HOME/.cache/bazel/_bazel_nixbld";
+        in runLocal "bazel-extracted-homedir" { passthru.install_dir = install_dir; } ''
+            export HOME=$(mktemp -d)
+            touch WORKSPACE # yeah, everything sucks
+            install_base="$(${bazelPkg}/bin/bazel info | grep install_base)"
+            # assert it’s actually below install_dir
+            [[ "$install_base" =~ ${install_dir} ]] \
+              || (echo "oh no! $install_base but we are \
+            trying to copy ${install_dir} to $out instead!"; exit 1)
+            cp -R ${install_dir} $out
+          '';
+
+      bazelTest = { name, bazelScript, workspaceDir, bazelPkg, buildInputs ? [] }:
+        let
+          be = extracted bazelPkg;
+        in runLocal name { inherit buildInputs; } (
+          # skip extraction caching on Darwin, because nobody knows how Darwin works
+          (lib.optionalString (!stdenv.hostPlatform.isDarwin) ''
+            # set up home with pre-unpacked bazel
+            export HOME=$(mktemp -d)
+            mkdir -p ${be.install_dir}
+            cp -R ${be}/install ${be.install_dir}
+
+            # https://stackoverflow.com/questions/47775668/bazel-how-to-skip-corrupt-installation-on-centos6
+            # Bazel checks whether the mtime of the install dir files
+            # is >9 years in the future, otherwise it extracts itself again.
+            # see PosixFileMTime::IsUntampered in src/main/cpp/util
+            # What the hell bazel.
+            ${lr}/bin/lr -0 -U ${be.install_dir} | ${xe}/bin/xe -N0 -0 touch --date="9 years 6 months" {}
+          '')
+          +
+          ''
+            # Note https://github.com/bazelbuild/bazel/issues/5763#issuecomment-456374609
+            # about why to create a subdir for the workspace.
+            cp -r ${workspaceDir} wd && chmod u+w wd && cd wd
+
+            ${bazelScript}
+
+            touch $out
+          '');
+
+      bazelWithNixHacks = bazel_self.override { enableNixHacks = true; };
+
+      bazel-examples = fetchFromGitHub {
+        owner = "bazelbuild";
+        repo = "examples";
+        rev = "4183fc709c26a00366665e2d60d70521dc0b405d";
+        sha256 = "1mm4awx6sa0myiz9j4hwp71rpr7yh8vihf3zm15n2ii6xb82r31k";
+      };
+
+    in (lib.optionalAttrs (!stdenv.hostPlatform.isDarwin) {
+      # `extracted` doesn’t work on darwin
+      shebang = callPackage ../shebang-test.nix { inherit runLocal extracted bazelTest distDir; bazel = bazel_self; };
+    }) // {
+      bashTools = callPackage ../bash-tools-test.nix { inherit runLocal bazelTest distDir; bazel = bazel_self; };
+      cpp = callPackage ../cpp-test.nix { inherit runLocal bazelTest bazel-examples distDir; bazel = bazel_self; };
+      java = callPackage ../java-test.nix { inherit runLocal bazelTest bazel-examples distDir; bazel = bazel_self; };
+      protobuf = callPackage ../protobuf-test.nix { inherit runLocal bazelTest distDir; bazel = bazel_self; };
+      pythonBinPath = callPackage ../python-bin-path-test.nix { inherit runLocal bazelTest distDir; bazel = bazel_self; };
+
+      bashToolsWithNixHacks = callPackage ../bash-tools-test.nix { inherit runLocal bazelTest distDir; bazel = bazelWithNixHacks; };
+
+      cppWithNixHacks = callPackage ../cpp-test.nix { inherit runLocal bazelTest bazel-examples distDir; bazel = bazelWithNixHacks; };
+      javaWithNixHacks = callPackage ../java-test.nix { inherit runLocal bazelTest bazel-examples distDir; bazel = bazelWithNixHacks; };
+      protobufWithNixHacks = callPackage ../protobuf-test.nix { inherit runLocal bazelTest distDir; bazel = bazelWithNixHacks; };
+      pythonBinPathWithNixHacks = callPackage ../python-bin-path-test.nix { inherit runLocal bazelTest distDir; bazel = bazelWithNixHacks; };
+    };
+
+  src_for_updater = stdenv.mkDerivation rec {
+    name = "updater-sources";
+    inherit src;
+    nativeBuildInputs = [ unzip ];
+    inherit sourceRoot;
+    installPhase = ''
+      runHook preInstall
+
+      cp -r . "$out"
+
+      runHook postInstall
+    '';
+  };
+  # update the list of workspace dependencies
+  passthru.updater = writeScript "update-bazel-deps.sh" ''
+    #!${runtimeShell}
+    (cd "${src_for_updater}" &&
+        BAZEL_USE_CPP_ONLY_TOOLCHAIN=1 \
+        "${bazel_self}"/bin/bazel \
+            query 'kind(http_archive, //external:all) + kind(http_file, //external:all) + kind(distdir_tar, //external:all) + kind(git_repository, //external:all)' \
+            --loading_phase_threads=1 \
+            --output build) \
+    | "${python3}"/bin/python3 "${./update-srcDeps.py}" \
+      "${builtins.toString ./src-deps.json}"
+  '';
+
+  # Necessary for the tests to pass on Darwin with sandbox enabled.
+  # Bazel starts a local server and needs to bind a local address.
+  __darwinAllowLocalNetworking = true;
+
+  postPatch = let
+
+    darwinPatches = ''
+      bazelLinkFlags () {
+        eval set -- "$NIX_LDFLAGS"
+        local flag
+        for flag in "$@"; do
+          printf ' -Wl,%s' "$flag"
+        done
+      }
+
+      # Disable Bazel's Xcode toolchain detection which would configure compilers
+      # and linkers from Xcode instead of from PATH
+      export BAZEL_USE_CPP_ONLY_TOOLCHAIN=1
+
+      # Explicitly configure gcov since we don't have it on Darwin, so autodetection fails
+      export GCOV=${coreutils}/bin/false
+
+      # Framework search paths aren't added by bintools hook
+      # https://github.com/NixOS/nixpkgs/pull/41914
+      export NIX_LDFLAGS+=" -F${CoreFoundation}/Library/Frameworks -F${CoreServices}/Library/Frameworks -F${Foundation}/Library/Frameworks"
+
+      # libcxx includes aren't added by libcxx hook
+      # https://github.com/NixOS/nixpkgs/pull/41589
+      export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -isystem ${lib.getDev libcxx}/include/c++/v1"
+      # for CLang 16 compatibility in third_party/{zlib}, external/{upb} dependencies
+      export NIX_CFLAGS_COMPILE+=" -Wno-implicit-function-declaration -Wno-gnu-offsetof-extensions"
+
+      # don't use system installed Xcode to run clang, use Nix clang instead
+      sed -i -E "s;/usr/bin/xcrun (--sdk macosx )?clang;${stdenv.cc}/bin/clang $NIX_CFLAGS_COMPILE $(bazelLinkFlags) -framework CoreFoundation;g" \
+        scripts/bootstrap/compile.sh \
+        src/tools/xcode/realpath/BUILD \
+        src/tools/xcode/stdredirect/BUILD \
+        tools/osx/BUILD
+
+      substituteInPlace scripts/bootstrap/compile.sh --replace ' -mmacosx-version-min=10.9' ""
+
+      # nixpkgs's libSystem cannot use pthread headers directly, must import GCD headers instead
+      sed -i -e "/#include <pthread\/spawn.h>/i #include <dispatch/dispatch.h>" src/main/cpp/blaze_util_darwin.cc
+
+      # clang installed from Xcode has a compatibility wrapper that forwards
+      # invocations of gcc to clang, but vanilla clang doesn't
+      sed -i -e 's;_find_generic(repository_ctx, "gcc", "CC", overriden_tools);_find_generic(repository_ctx, "clang", "CC", overriden_tools);g' tools/cpp/unix_cc_configure.bzl
+
+      sed -i -e 's;/usr/bin/libtool;${cctools}/bin/libtool;g' tools/cpp/unix_cc_configure.bzl
+      wrappers=( tools/cpp/osx_cc_wrapper.sh tools/cpp/osx_cc_wrapper.sh.tpl )
+      for wrapper in "''${wrappers[@]}"; do
+        sed -i -e "s,/usr/bin/install_name_tool,${cctools}/bin/install_name_tool,g" $wrapper
+      done
+    '';
+
+    genericPatches = ''
+      # Substitute j2objc and objc wrapper's python shebang to plain python path.
+      substituteInPlace tools/j2objc/j2objc_header_map.py --replace "$!/usr/bin/python2.7" "#!${python3.interpreter}"
+      substituteInPlace tools/j2objc/j2objc_wrapper.py --replace "$!/usr/bin/python2.7" "#!${python3.interpreter}"
+      substituteInPlace tools/objc/j2objc_dead_code_pruner.py --replace "$!/usr/bin/python2.7" "#!${python3.interpreter}"
+
+      # md5sum is part of coreutils
+      sed -i 's|/sbin/md5|md5sum|g' \
+        src/BUILD third_party/ijar/test/testenv.sh tools/objc/libtool.sh
+
+      # replace initial value of pythonShebang variable in BazelPythonSemantics.java
+      substituteInPlace src/main/java/com/google/devtools/build/lib/bazel/rules/python/BazelPythonSemantics.java \
+        --replace '"#!/usr/bin/env " + pythonExecutableName' "\"#!${python3}/bin/python\""
+
+      # substituteInPlace is rather slow, so prefilter the files with grep
+      grep -rlZ /bin/ src/main/java/com/google/devtools | while IFS="" read -r -d "" path; do
+        # If you add more replacements here, you must change the grep above!
+        # Only files containing /bin are taken into account.
+        substituteInPlace "$path" \
+          --replace /bin/bash ${bash}/bin/bash \
+          --replace "/usr/bin/env bash" ${bash}/bin/bash \
+          --replace "/usr/bin/env python" ${python3}/bin/python \
+          --replace /usr/bin/env ${coreutils}/bin/env \
+          --replace /bin/true ${coreutils}/bin/true
+      done
+
+      # bazel test runner include references to /bin/bash
+      substituteInPlace tools/build_rules/test_rules.bzl \
+        --replace /bin/bash ${bash}/bin/bash
+
+      for i in $(find tools/cpp/ -type f)
+      do
+        substituteInPlace $i \
+          --replace /bin/bash ${bash}/bin/bash
+      done
+
+      # Fixup scripts that generate scripts. Not fixed up by patchShebangs below.
+      substituteInPlace scripts/bootstrap/compile.sh \
+          --replace /bin/bash ${bash}/bin/bash
+
+      # add nix environment vars to .bazelrc
+      cat >> .bazelrc <<EOF
+      # Limit the resources Bazel is allowed to use during the build to 1/2 the
+      # available RAM and 3/4 the available CPU cores. This should help avoid
+      # overwhelming the build machine.
+      build --local_ram_resources=HOST_RAM*.5
+      build --local_cpu_resources=HOST_CPUS*.75
+
+      build --distdir=${distDir}
+      fetch --distdir=${distDir}
+      build --copt="$(echo $NIX_CFLAGS_COMPILE | sed -e 's/ /" --copt="/g')"
+      build --host_copt="$(echo $NIX_CFLAGS_COMPILE | sed -e 's/ /" --host_copt="/g')"
+      build --linkopt="$(echo $(< ${stdenv.cc}/nix-support/libcxx-ldflags) | sed -e 's/ /" --linkopt="/g')"
+      build --host_linkopt="$(echo $(< ${stdenv.cc}/nix-support/libcxx-ldflags) | sed -e 's/ /" --host_linkopt="/g')"
+      build --linkopt="-Wl,$(echo $NIX_LDFLAGS | sed -e 's/ /" --linkopt="-Wl,/g')"
+      build --host_linkopt="-Wl,$(echo $NIX_LDFLAGS | sed -e 's/ /" --host_linkopt="-Wl,/g')"
+      build --host_javabase='@local_jdk//:jdk'
+      build --host_java_toolchain='${javaToolchain}'
+      build --verbose_failures
+      build --curses=no
+      EOF
+
+      # add the same environment vars to compile.sh
+      sed -e "/\$command \\\\$/a --copt=\"$(echo $NIX_CFLAGS_COMPILE | sed -e 's/ /" --copt=\"/g')\" \\\\" \
+          -e "/\$command \\\\$/a --host_copt=\"$(echo $NIX_CFLAGS_COMPILE | sed -e 's/ /" --host_copt=\"/g')\" \\\\" \
+          -e "/\$command \\\\$/a --linkopt=\"$(echo $(< ${stdenv.cc}/nix-support/libcxx-ldflags) | sed -e 's/ /" --linkopt=\"/g')\" \\\\" \
+          -e "/\$command \\\\$/a --host_linkopt=\"$(echo $(< ${stdenv.cc}/nix-support/libcxx-ldflags) | sed -e 's/ /" --host_linkopt=\"/g')\" \\\\" \
+          -e "/\$command \\\\$/a --linkopt=\"-Wl,$(echo $NIX_LDFLAGS | sed -e 's/ /" --linkopt=\"-Wl,/g')\" \\\\" \
+          -e "/\$command \\\\$/a --host_linkopt=\"-Wl,$(echo $NIX_LDFLAGS | sed -e 's/ /" --host_linkopt=\"-Wl,/g')\" \\\\" \
+          -e "/\$command \\\\$/a --host_javabase='@local_jdk//:jdk' \\\\" \
+          -e "/\$command \\\\$/a --host_java_toolchain='${javaToolchain}' \\\\" \
+          -e "/\$command \\\\$/a --verbose_failures \\\\" \
+          -e "/\$command \\\\$/a --curses=no \\\\" \
+          -i scripts/bootstrap/compile.sh
+
+      # This is necessary to avoid:
+      # "error: no visible @interface for 'NSDictionary' declares the selector
+      # 'initWithContentsOfURL:error:'"
+      # This can be removed when the apple_sdk is upgraded beyond 10.13+
+      sed -i '/initWithContentsOfURL:versionPlistUrl/ {
+        N
+        s/error:nil\];/\];/
+      }' tools/osx/xcode_locator.m
+
+      # append the PATH with defaultShellPath in tools/bash/runfiles/runfiles.bash
+      echo "PATH=\$PATH:${defaultShellPath}" >> runfiles.bash.tmp
+      cat tools/bash/runfiles/runfiles.bash >> runfiles.bash.tmp
+      mv runfiles.bash.tmp tools/bash/runfiles/runfiles.bash
+
+      patchShebangs .
+    '';
+    in lib.optionalString stdenv.hostPlatform.isDarwin darwinPatches
+     + genericPatches;
+
+  buildInputs = [buildJdk] ++ defaultShellUtils;
+
+  # when a command can’t be found in a bazel build, you might also
+  # need to add it to `defaultShellPath`.
+  nativeBuildInputs = [
+    installShellFiles
+    makeWrapper
+    python3
+    unzip
+    which
+    zip
+    python3.pkgs.absl-py   # Needed to build fish completion
+  ] ++ lib.optionals (stdenv.isDarwin) [ cctools libcxx CoreFoundation CoreServices Foundation ];
+
+  # Bazel makes extensive use of symlinks in the WORKSPACE.
+  # This causes problems with infinite symlinks if the build output is in the same location as the
+  # Bazel WORKSPACE. This is why before executing the build, the source code is moved into a
+  # subdirectory.
+  # Failing to do this causes "infinite symlink expansion detected"
+  preBuildPhases = ["preBuildPhase"];
+  preBuildPhase = ''
+    mkdir bazel_src
+    shopt -s dotglob extglob
+    mv !(bazel_src) bazel_src
+  '';
+  buildPhase = ''
+    runHook preBuild
+
+    # Increasing memory during compilation might be necessary.
+    # export BAZEL_JAVAC_OPTS="-J-Xmx2g -J-Xms200m"
+
+    # If EMBED_LABEL isn't set, it'd be auto-detected from CHANGELOG.md
+    # and `git rev-parse --short HEAD` which would result in
+    # "3.7.0- (@non-git)" due to non-git build and incomplete changelog.
+    # Actual bazel releases use scripts/release/common.sh which is based
+    # on branch/tag information which we don't have with tarball releases.
+    # Note that .bazelversion is always correct and is based on bazel-*
+    # executable name, version checks should work fine
+    export EMBED_LABEL="${version}- (@non-git)"
+    ${bash}/bin/bash ./bazel_src/compile.sh
+    ./bazel_src/scripts/generate_bash_completion.sh \
+        --bazel=./bazel_src/output/bazel \
+        --output=./bazel_src/output/bazel-complete.bash \
+        --prepend=./bazel_src/scripts/bazel-complete-header.bash \
+        --prepend=./bazel_src/scripts/bazel-complete-template.bash
+    ${python3}/bin/python3 ./bazel_src/scripts/generate_fish_completion.py \
+        --bazel=./bazel_src/output/bazel \
+        --output=./bazel_src/output/bazel-complete.fish
+
+    # need to change directory for bazel to find the workspace
+    cd ./bazel_src
+    # build execlog tooling
+    export HOME=$(mktemp -d)
+    ./output/bazel build  src/tools/execlog:parser_deploy.jar
+    cd -
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+
+    # official wrapper scripts that searches for $WORKSPACE_ROOT/tools/bazel
+    # if it can’t find something in tools, it calls $out/bin/bazel-{version}-{os_arch}
+    # The binary _must_ exist with this naming if your project contains a .bazelversion
+    # file.
+    cp ./bazel_src/scripts/packages/bazel.sh $out/bin/bazel
+    wrapProgram $out/bin/bazel $wrapperfile --suffix PATH : ${defaultShellPath}
+    mv ./bazel_src/output/bazel $out/bin/bazel-${version}-${system}-${arch}
+
+    mkdir $out/share
+    cp ./bazel_src/bazel-bin/src/tools/execlog/parser_deploy.jar $out/share/parser_deploy.jar
+    cat <<EOF > $out/bin/bazel-execlog
+    #!${runtimeShell} -e
+    ${runJdk}/bin/java -jar $out/share/parser_deploy.jar \$@
+    EOF
+    chmod +x $out/bin/bazel-execlog
+
+    # shell completion files
+    installShellCompletion --bash \
+      --name bazel.bash \
+      ./bazel_src/output/bazel-complete.bash
+    installShellCompletion --zsh \
+      --name _bazel \
+      ./bazel_src/scripts/zsh_completion/_bazel
+    installShellCompletion --fish \
+      --name bazel.fish \
+      ./bazel_src/output/bazel-complete.fish
+  '';
+
+  # Install check fails on `aarch64-darwin`
+  # https://github.com/NixOS/nixpkgs/issues/145587
+  doInstallCheck = stdenv.hostPlatform.system != "aarch64-darwin";
+  installCheckPhase = ''
+    export TEST_TMPDIR=$(pwd)
+
+    hello_test () {
+      $out/bin/bazel test \
+        --test_output=errors \
+        --java_toolchain='${javaToolchain}' \
+        examples/cpp:hello-success_test \
+        examples/java-native/src/test/java/com/example/myproject:hello
+    }
+
+    cd ./bazel_src
+
+    # test whether $WORKSPACE_ROOT/tools/bazel works
+
+    mkdir -p tools
+    cat > tools/bazel <<"EOF"
+    #!${runtimeShell} -e
+    exit 1
+    EOF
+    chmod +x tools/bazel
+
+    # first call should fail if tools/bazel is used
+    ! hello_test
+
+    cat > tools/bazel <<"EOF"
+    #!${runtimeShell} -e
+    exec "$BAZEL_REAL" "$@"
+    EOF
+
+    # second call succeeds because it defers to $out/bin/bazel-{version}-{os_arch}
+    hello_test
+
+    runHook postInstall
+  '';
+
+  # Save paths to hardcoded dependencies so Nix can detect them.
+  # This is needed because the templates get tar’d up into a .jar.
+  postFixup = ''
+    mkdir -p $out/nix-support
+    echo "${defaultShellPath}" >> $out/nix-support/depends
+    # The string literal specifying the path to the bazel-rc file is sometimes
+    # stored non-contiguously in the binary due to gcc optimisations, which leads
+    # Nix to miss the hash when scanning for dependencies
+    echo "${bazelRC}" >> $out/nix-support/depends
+  '' + lib.optionalString stdenv.isDarwin ''
+    echo "${cctools}" >> $out/nix-support/depends
+  '';
+
+  dontStrip = true;
+  dontPatchELF = true;
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_4/no-arc.patch b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_4/no-arc.patch
new file mode 100644
index 000000000000..012e613c2f19
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_4/no-arc.patch
@@ -0,0 +1,34 @@
+--- a/tools/osx/xcode_locator.m	2020-12-10 13:27:29.000000000 +0100
++++ b/tools/osx/xcode_locator.m	2021-02-01 09:09:32.159557051 +0100
+@@ -21,10 +21,6 @@
+ // 6,6.4,6.4.1 = 6.4.1
+ // 6.3,6.3.0 = 6.3
+ 
+-#if !defined(__has_feature) || !__has_feature(objc_arc)
+-#error "This file requires ARC support."
+-#endif
+-
+ #import <CoreServices/CoreServices.h>
+ #import <Foundation/Foundation.h>
+ 
+--- a/tools/osx/xcode_configure.bzl	1980-01-01 01:00:00.000000000 +0100
++++ b/tools/osx/xcode_configure.bzl	2021-02-01 09:36:57.773418444 +0100
+@@ -123,7 +123,6 @@
+         "macosx",
+         "clang",
+         "-mmacosx-version-min=10.9",
+-        "-fobjc-arc",
+         "-framework",
+         "CoreServices",
+         "-framework",
+--- a/tools/osx/BUILD	2021-02-01 11:01:02.191659553 +0100
++++ b/tools/osx/BUILD	2021-02-01 11:04:29.735071019 +0100
+@@ -27,7 +27,7 @@
+ ])
+ 
+ DARWIN_XCODE_LOCATOR_COMPILE_COMMAND = """
+-  /usr/bin/xcrun --sdk macosx clang -mmacosx-version-min=10.9 -fobjc-arc -framework CoreServices \
++  /usr/bin/xcrun --sdk macosx clang -mmacosx-version-min=10.9 -framework CoreServices \
+       -framework Foundation -o $@ $<
+ """
+ 
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_4/src-deps.json b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_4/src-deps.json
new file mode 100644
index 000000000000..4496343ec691
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_4/src-deps.json
@@ -0,0 +1,1585 @@
+{
+    "1.25.0.zip": {
+        "name": "1.25.0.zip",
+        "sha256": "c78be58f5e0a29a04686b628cf54faaee0094322ae0ac99da5a8a8afca59a647",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_sass/archive/1.25.0.zip",
+            "https://github.com/bazelbuild/rules_sass/archive/1.25.0.zip"
+        ]
+    },
+    "1ef781ced3b1443dca3ed05dec1989eca1a4e1cd.tar.gz": {
+        "name": "1ef781ced3b1443dca3ed05dec1989eca1a4e1cd.tar.gz",
+        "sha256": "5a725b777976b77aa122b707d1b6f0f39b6020f66cd427bb111a585599c857b1",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/stardoc/archive/1ef781ced3b1443dca3ed05dec1989eca1a4e1cd.tar.gz",
+            "https://github.com/bazelbuild/stardoc/archive/1ef781ced3b1443dca3ed05dec1989eca1a4e1cd.tar.gz"
+        ]
+    },
+    "382d5afc60e05470c23e8de19b19fc5ad231e732.tar.gz": {
+        "name": "382d5afc60e05470c23e8de19b19fc5ad231e732.tar.gz",
+        "sha256": "7992217989f3156f8109931c1fc6db3434b7414957cb82371552377beaeb9d6c",
+        "urls": [
+            "https://mirror.bazel.build/github.com/protocolbuffers/upb/archive/382d5afc60e05470c23e8de19b19fc5ad231e732.tar.gz",
+            "https://github.com/protocolbuffers/upb/archive/382d5afc60e05470c23e8de19b19fc5ad231e732.tar.gz"
+        ]
+    },
+    "7cf3cefd652008d0a64a419c34c13bdca6c8f178.zip": {
+        "name": "7cf3cefd652008d0a64a419c34c13bdca6c8f178.zip",
+        "sha256": "bc81f1ba47ef5cc68ad32225c3d0e70b8c6f6077663835438da8d5733f917598",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_java/archive/7cf3cefd652008d0a64a419c34c13bdca6c8f178.zip",
+            "https://github.com/bazelbuild/rules_java/archive/7cf3cefd652008d0a64a419c34c13bdca6c8f178.zip"
+        ]
+    },
+    "7e4afce6fe62dbff0a4a03450143146f9f2d7488.tar.gz": {
+        "name": "7e4afce6fe62dbff0a4a03450143146f9f2d7488.tar.gz",
+        "sha256": "8e7d59a5b12b233be5652e3d29f42fba01c7cbab09f6b3a8d0a57ed6d1e9a0da",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_proto/archive/7e4afce6fe62dbff0a4a03450143146f9f2d7488.tar.gz",
+            "https://github.com/bazelbuild/rules_proto/archive/7e4afce6fe62dbff0a4a03450143146f9f2d7488.tar.gz"
+        ]
+    },
+    "aecba11114cf1fac5497aeb844b6966106de3eb6.tar.gz": {
+        "name": "aecba11114cf1fac5497aeb844b6966106de3eb6.tar.gz",
+        "sha256": "9f385e146410a8150b6f4cb1a57eab7ec806ced48d427554b1e754877ff26c3e",
+        "urls": [
+            "https://mirror.bazel.build/github.com/google/re2/archive/aecba11114cf1fac5497aeb844b6966106de3eb6.tar.gz",
+            "https://github.com/google/re2/archive/aecba11114cf1fac5497aeb844b6966106de3eb6.tar.gz"
+        ]
+    },
+    "android_tools": {
+        "name": "android_tools",
+        "sha256": "ea5c0589a01e2a9f43c20e5c145d3530e3b3bdbe7322789bc5da38d0ca49b837",
+        "url": "https://mirror.bazel.build/bazel_android_tools/android_tools_pkg-0.19.0rc3.tar.gz"
+    },
+    "android_tools_for_testing": {
+        "name": "android_tools_for_testing",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "ed5290594244c2eeab41f0104519bcef51e27c699ff4b379fcbd25215270513e",
+        "url": "https://mirror.bazel.build/bazel_android_tools/android_tools_pkg-0.23.0.tar.gz"
+    },
+    "android_tools_pkg-0.23.0.tar.gz": {
+        "name": "android_tools_pkg-0.23.0.tar.gz",
+        "sha256": "ed5290594244c2eeab41f0104519bcef51e27c699ff4b379fcbd25215270513e",
+        "urls": [
+            "https://mirror.bazel.build/bazel_android_tools/android_tools_pkg-0.23.0.tar.gz"
+        ]
+    },
+    "b1c40e1de81913a3c40e5948f78719c28152486d.zip": {
+        "name": "b1c40e1de81913a3c40e5948f78719c28152486d.zip",
+        "sha256": "d0c573b94a6ef20ef6ff20154a23d0efcb409fb0e1ff0979cec318dfe42f0cdd",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_cc/archive/b1c40e1de81913a3c40e5948f78719c28152486d.zip",
+            "https://github.com/bazelbuild/rules_cc/archive/b1c40e1de81913a3c40e5948f78719c28152486d.zip"
+        ]
+    },
+    "bazel-skylib-1.0.3.tar.gz": {
+        "name": "bazel-skylib-1.0.3.tar.gz",
+        "sha256": "1c531376ac7e5a180e0237938a2536de0c54d93f5c278634818e0efc952dd56c",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/releases/download/1.0.3/bazel-skylib-1.0.3.tar.gz",
+            "https://github.com/bazelbuild/bazel-skylib/releases/download/1.0.3/bazel-skylib-1.0.3.tar.gz"
+        ]
+    },
+    "bazel-toolchains-3.1.0.tar.gz": {
+        "name": "bazel-toolchains-3.1.0.tar.gz",
+        "sha256": "726b5423e1c7a3866a3a6d68e7123b4a955e9fcbe912a51e0f737e6dab1d0af2",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/bazel-toolchains/releases/download/3.1.0/bazel-toolchains-3.1.0.tar.gz",
+            "https://github.com/bazelbuild/bazel-toolchains/releases/download/3.1.0/bazel-toolchains-3.1.0.tar.gz"
+        ]
+    },
+    "bazel_j2objc": {
+        "name": "bazel_j2objc",
+        "sha256": "8d3403b5b7db57e347c943d214577f6879e5b175c2b59b7e075c0b6453330e9b",
+        "strip_prefix": "j2objc-2.5",
+        "urls": [
+            "https://mirror.bazel.build/github.com/google/j2objc/releases/download/2.5/j2objc-2.5.zip",
+            "https://github.com/google/j2objc/releases/download/2.5/j2objc-2.5.zip"
+        ]
+    },
+    "bazel_skylib": {
+        "name": "bazel_skylib",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "1c531376ac7e5a180e0237938a2536de0c54d93f5c278634818e0efc952dd56c",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/releases/download/1.0.3/bazel-skylib-1.0.3.tar.gz",
+            "https://github.com/bazelbuild/bazel-skylib/releases/download/1.0.3/bazel-skylib-1.0.3.tar.gz"
+        ]
+    },
+    "bazel_toolchains": {
+        "name": "bazel_toolchains",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "726b5423e1c7a3866a3a6d68e7123b4a955e9fcbe912a51e0f737e6dab1d0af2",
+        "strip_prefix": "bazel-toolchains-3.1.0",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/bazel-toolchains/releases/download/3.1.0/bazel-toolchains-3.1.0.tar.gz",
+            "https://github.com/bazelbuild/bazel-toolchains/releases/download/3.1.0/bazel-toolchains-3.1.0.tar.gz"
+        ]
+    },
+    "bazel_website": {
+        "build_file_content": "\nexports_files([\"_sass/style.scss\"])\n",
+        "name": "bazel_website",
+        "sha256": "a5f531dd1d62e6947dcfc279656ffc2fdf6f447c163914c5eabf7961b4cb6eb4",
+        "strip_prefix": "bazel-website-c174fa288aa079b68416d2ce2cc97268fa172f42",
+        "urls": [
+            "https://github.com/bazelbuild/bazel-website/archive/c174fa288aa079b68416d2ce2cc97268fa172f42.tar.gz"
+        ]
+    },
+    "boringssl": {
+        "generator_function": "grpc_deps",
+        "generator_name": "boringssl",
+        "name": "boringssl",
+        "sha256": "cb0fd3eda612d4ae4be21108938800a19b015717a7627ea7f530e3469d207707",
+        "strip_prefix": "boringssl-88aeb757f1a415c71fb4cbf5af936ecae4bc8179",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/google/boringssl/archive/88aeb757f1a415c71fb4cbf5af936ecae4bc8179.tar.gz",
+            "https://github.com/google/boringssl/archive/88aeb757f1a415c71fb4cbf5af936ecae4bc8179.tar.gz"
+        ]
+    },
+    "build_bazel_apple_support": {
+        "generator_function": "grpc_deps",
+        "generator_name": "build_bazel_apple_support",
+        "name": "build_bazel_apple_support",
+        "sha256": "122ebf7fe7d1c8e938af6aeaee0efe788a3a2449ece5a8d6a428cb18d6f88033",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/bazelbuild/apple_support/releases/download/0.7.1/apple_support.0.7.1.tar.gz",
+            "https://github.com/bazelbuild/apple_support/releases/download/0.7.1/apple_support.0.7.1.tar.gz"
+        ]
+    },
+    "build_bazel_rules_apple": {
+        "generator_function": "grpc_deps",
+        "generator_name": "build_bazel_rules_apple",
+        "name": "build_bazel_rules_apple",
+        "sha256": "bdc8e66e70b8a75da23b79f1f8c6207356df07d041d96d2189add7ee0780cf4e",
+        "strip_prefix": "rules_apple-b869b0d3868d78a1d4ffd866ccb304fb68aa12c3",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/bazelbuild/rules_apple/archive/b869b0d3868d78a1d4ffd866ccb304fb68aa12c3.tar.gz",
+            "https://github.com/bazelbuild/rules_apple/archive/b869b0d3868d78a1d4ffd866ccb304fb68aa12c3.tar.gz"
+        ]
+    },
+    "build_bazel_rules_nodejs": {
+        "name": "build_bazel_rules_nodejs",
+        "sha256": "f2194102720e662dbf193546585d705e645314319554c6ce7e47d8b59f459e9c",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_nodejs/releases/download/2.2.2/rules_nodejs-2.2.2.tar.gz",
+            "https://github.com/bazelbuild/rules_nodejs/releases/download/2.2.2/rules_nodejs-2.2.2.tar.gz"
+        ]
+    },
+    "com_github_cares_cares": {
+        "build_file": "@com_github_grpc_grpc//third_party:cares/cares.BUILD",
+        "generator_function": "grpc_deps",
+        "generator_name": "com_github_cares_cares",
+        "name": "com_github_cares_cares",
+        "sha256": "e8c2751ddc70fed9dc6f999acd92e232d5846f009ee1674f8aee81f19b2b915a",
+        "strip_prefix": "c-ares-e982924acee7f7313b4baa4ee5ec000c5e373c30",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/c-ares/c-ares/archive/e982924acee7f7313b4baa4ee5ec000c5e373c30.tar.gz",
+            "https://github.com/c-ares/c-ares/archive/e982924acee7f7313b4baa4ee5ec000c5e373c30.tar.gz"
+        ]
+    },
+    "com_github_gflags_gflags": {
+        "generator_function": "grpc_deps",
+        "generator_name": "com_github_gflags_gflags",
+        "name": "com_github_gflags_gflags",
+        "sha256": "63ae70ea3e05780f7547d03503a53de3a7d2d83ad1caaa443a31cb20aea28654",
+        "strip_prefix": "gflags-28f50e0fed19872e0fd50dd23ce2ee8cd759338e",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/gflags/gflags/archive/28f50e0fed19872e0fd50dd23ce2ee8cd759338e.tar.gz",
+            "https://github.com/gflags/gflags/archive/28f50e0fed19872e0fd50dd23ce2ee8cd759338e.tar.gz"
+        ]
+    },
+    "com_github_google_benchmark": {
+        "generator_function": "grpc_deps",
+        "generator_name": "com_github_google_benchmark",
+        "name": "com_github_google_benchmark",
+        "sha256": "f68aec93154d010324c05bcd8c5cc53468b87af88d87acb5ddcfaa1bba044837",
+        "strip_prefix": "benchmark-090faecb454fbd6e6e17a75ef8146acb037118d4",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/google/benchmark/archive/090faecb454fbd6e6e17a75ef8146acb037118d4.tar.gz",
+            "https://github.com/google/benchmark/archive/090faecb454fbd6e6e17a75ef8146acb037118d4.tar.gz"
+        ]
+    },
+    "com_github_google_re2": {
+        "generator_function": "grpc_deps",
+        "generator_name": "com_github_google_re2",
+        "name": "com_github_google_re2",
+        "sha256": "9f385e146410a8150b6f4cb1a57eab7ec806ced48d427554b1e754877ff26c3e",
+        "strip_prefix": "re2-aecba11114cf1fac5497aeb844b6966106de3eb6",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/google/re2/archive/aecba11114cf1fac5497aeb844b6966106de3eb6.tar.gz",
+            "https://github.com/google/re2/archive/aecba11114cf1fac5497aeb844b6966106de3eb6.tar.gz"
+        ]
+    },
+    "com_github_grpc_grpc": {
+        "name": "com_github_grpc_grpc",
+        "patch_args": [
+            "-p1"
+        ],
+        "patches": [
+            "//third_party/grpc:grpc_1.33.1.patch"
+        ],
+        "sha256": "58eaee5c0f1bd0b92ebe1fa0606ec8f14798500620e7444726afcaf65041cb63",
+        "strip_prefix": "grpc-1.33.1",
+        "urls": [
+            "https://mirror.bazel.build/github.com/grpc/grpc/archive/v1.33.1.tar.gz",
+            "https://github.com/grpc/grpc/archive/v1.33.1.tar.gz"
+        ]
+    },
+    "com_google_absl": {
+        "generator_function": "grpc_deps",
+        "generator_name": "com_google_absl",
+        "name": "com_google_absl",
+        "sha256": "f368a8476f4e2e0eccf8a7318b98dafbe30b2600f4e3cf52636e5eb145aba06a",
+        "strip_prefix": "abseil-cpp-df3ea785d8c30a9503321a3d35ee7d35808f190d",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/abseil/abseil-cpp/archive/df3ea785d8c30a9503321a3d35ee7d35808f190d.tar.gz",
+            "https://github.com/abseil/abseil-cpp/archive/df3ea785d8c30a9503321a3d35ee7d35808f190d.tar.gz"
+        ]
+    },
+    "com_google_googletest": {
+        "name": "com_google_googletest",
+        "sha256": "9dc9157a9a1551ec7a7e43daea9a694a0bb5fb8bec81235d8a1e6ef64c716dcb",
+        "strip_prefix": "googletest-release-1.10.0",
+        "urls": [
+            "https://mirror.bazel.build/github.com/google/googletest/archive/release-1.10.0.tar.gz",
+            "https://github.com/google/googletest/archive/release-1.10.0.tar.gz"
+        ]
+    },
+    "com_google_protobuf": {
+        "name": "com_google_protobuf",
+        "patch_args": [
+            "-p1"
+        ],
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "patches": [
+            "//third_party/protobuf:3.13.0.patch"
+        ],
+        "sha256": "9b4ee22c250fe31b16f1a24d61467e40780a3fbb9b91c3b65be2a376ed913a1a",
+        "strip_prefix": "protobuf-3.13.0",
+        "urls": [
+            "https://mirror.bazel.build/github.com/protocolbuffers/protobuf/archive/v3.13.0.tar.gz",
+            "https://github.com/protocolbuffers/protobuf/archive/v3.13.0.tar.gz"
+        ]
+    },
+    "coverage_output_generator-v2.5.zip": {
+        "name": "coverage_output_generator-v2.5.zip",
+        "sha256": "cd14f1cb4559e4723e63b7e7b06d09fcc3bd7ba58d03f354cdff1439bd936a7d",
+        "urls": [
+            "https://mirror.bazel.build/bazel_coverage_output_generator/releases/coverage_output_generator-v2.5.zip"
+        ]
+    },
+    "cython": {
+        "build_file": "@com_github_grpc_grpc//third_party:cython.BUILD",
+        "generator_function": "grpc_deps",
+        "generator_name": "cython",
+        "name": "cython",
+        "sha256": "d68138a2381afbdd0876c3cb2a22389043fa01c4badede1228ee073032b07a27",
+        "strip_prefix": "cython-c2b80d87658a8525ce091cbe146cb7eaa29fed5c",
+        "urls": [
+            "https://github.com/cython/cython/archive/c2b80d87658a8525ce091cbe146cb7eaa29fed5c.tar.gz"
+        ]
+    },
+    "desugar_jdk_libs": {
+        "name": "desugar_jdk_libs",
+        "sha256": "fe2e04f91ce8c59d49d91b8102edc6627c6fa2906c1b0e7346f01419ec4f419d",
+        "strip_prefix": "desugar_jdk_libs-e0b0291b2c51fbe5a7cfa14473a1ae850f94f021",
+        "urls": [
+            "https://mirror.bazel.build/github.com/google/desugar_jdk_libs/archive/e0b0291b2c51fbe5a7cfa14473a1ae850f94f021.zip",
+            "https://github.com/google/desugar_jdk_libs/archive/e0b0291b2c51fbe5a7cfa14473a1ae850f94f021.zip"
+        ]
+    },
+    "df3ea785d8c30a9503321a3d35ee7d35808f190d.tar.gz": {
+        "name": "df3ea785d8c30a9503321a3d35ee7d35808f190d.tar.gz",
+        "sha256": "f368a8476f4e2e0eccf8a7318b98dafbe30b2600f4e3cf52636e5eb145aba06a",
+        "urls": [
+            "https://mirror.bazel.build/github.com/abseil/abseil-cpp/archive/df3ea785d8c30a9503321a3d35ee7d35808f190d.tar.gz",
+            "https://github.com/abseil/abseil-cpp/archive/df3ea785d8c30a9503321a3d35ee7d35808f190d.tar.gz"
+        ]
+    },
+    "e0b0291b2c51fbe5a7cfa14473a1ae850f94f021.zip": {
+        "name": "e0b0291b2c51fbe5a7cfa14473a1ae850f94f021.zip",
+        "sha256": "fe2e04f91ce8c59d49d91b8102edc6627c6fa2906c1b0e7346f01419ec4f419d",
+        "urls": [
+            "https://mirror.bazel.build/github.com/google/desugar_jdk_libs/archive/e0b0291b2c51fbe5a7cfa14473a1ae850f94f021.zip",
+            "https://github.com/google/desugar_jdk_libs/archive/e0b0291b2c51fbe5a7cfa14473a1ae850f94f021.zip"
+        ]
+    },
+    "e982924acee7f7313b4baa4ee5ec000c5e373c30.tar.gz": {
+        "name": "e982924acee7f7313b4baa4ee5ec000c5e373c30.tar.gz",
+        "sha256": "e8c2751ddc70fed9dc6f999acd92e232d5846f009ee1674f8aee81f19b2b915a",
+        "urls": [
+            "https://mirror.bazel.build/github.com/c-ares/c-ares/archive/e982924acee7f7313b4baa4ee5ec000c5e373c30.tar.gz",
+            "https://github.com/c-ares/c-ares/archive/e982924acee7f7313b4baa4ee5ec000c5e373c30.tar.gz"
+        ]
+    },
+    "enum34": {
+        "build_file": "@com_github_grpc_grpc//third_party:enum34.BUILD",
+        "generator_function": "grpc_deps",
+        "generator_name": "enum34",
+        "name": "enum34",
+        "sha256": "8ad8c4783bf61ded74527bffb48ed9b54166685e4230386a9ed9b1279e2df5b1",
+        "strip_prefix": "enum34-1.1.6",
+        "urls": [
+            "https://files.pythonhosted.org/packages/bf/3e/31d502c25302814a7c2f1d3959d2a3b3f78e509002ba91aea64993936876/enum34-1.1.6.tar.gz"
+        ]
+    },
+    "envoy_api": {
+        "generator_function": "grpc_deps",
+        "generator_name": "envoy_api",
+        "name": "envoy_api",
+        "sha256": "466585f253471259ce17641348149f458270316e81ec6702fdd8bf0b1b681256",
+        "strip_prefix": "data-plane-api-9997e1137cdb59e622af13e57ca915a2f3c9f84f",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/envoyproxy/data-plane-api/archive/9997e1137cdb59e622af13e57ca915a2f3c9f84f.tar.gz",
+            "https://github.com/envoyproxy/data-plane-api/archive/9997e1137cdb59e622af13e57ca915a2f3c9f84f.tar.gz"
+        ]
+    },
+    "futures": {
+        "build_file": "@com_github_grpc_grpc//third_party:futures.BUILD",
+        "generator_function": "grpc_deps",
+        "generator_name": "futures",
+        "name": "futures",
+        "sha256": "7e033af76a5e35f58e56da7a91e687706faf4e7bdfb2cbc3f2cca6b9bcda9794",
+        "strip_prefix": "futures-3.3.0",
+        "urls": [
+            "https://files.pythonhosted.org/packages/47/04/5fc6c74ad114032cd2c544c575bffc17582295e9cd6a851d6026ab4b2c00/futures-3.3.0.tar.gz"
+        ]
+    },
+    "io_bazel_rules_go": {
+        "generator_function": "grpc_deps",
+        "generator_name": "io_bazel_rules_go",
+        "name": "io_bazel_rules_go",
+        "sha256": "a82a352bffae6bee4e95f68a8d80a70e87f42c4741e6a448bec11998fcc82329",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/bazelbuild/rules_go/releases/download/0.18.5/rules_go-0.18.5.tar.gz",
+            "https://github.com/bazelbuild/rules_go/releases/download/0.18.5/rules_go-0.18.5.tar.gz"
+        ]
+    },
+    "io_bazel_rules_python": {
+        "generator_function": "grpc_deps",
+        "generator_name": "io_bazel_rules_python",
+        "name": "io_bazel_rules_python",
+        "sha256": "aa96a691d3a8177f3215b14b0edc9641787abaaa30363a080165d06ab65e1161",
+        "url": "https://github.com/bazelbuild/rules_python/releases/download/0.0.1/rules_python-0.0.1.tar.gz"
+    },
+    "io_bazel_rules_sass": {
+        "name": "io_bazel_rules_sass",
+        "sha256": "c78be58f5e0a29a04686b628cf54faaee0094322ae0ac99da5a8a8afca59a647",
+        "strip_prefix": "rules_sass-1.25.0",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_sass/archive/1.25.0.zip",
+            "https://github.com/bazelbuild/rules_sass/archive/1.25.0.zip"
+        ]
+    },
+    "io_bazel_skydoc": {
+        "name": "io_bazel_skydoc",
+        "sha256": "5a725b777976b77aa122b707d1b6f0f39b6020f66cd427bb111a585599c857b1",
+        "strip_prefix": "stardoc-1ef781ced3b1443dca3ed05dec1989eca1a4e1cd",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/stardoc/archive/1ef781ced3b1443dca3ed05dec1989eca1a4e1cd.tar.gz",
+            "https://github.com/bazelbuild/stardoc/archive/1ef781ced3b1443dca3ed05dec1989eca1a4e1cd.tar.gz"
+        ]
+    },
+    "io_opencensus_cpp": {
+        "generator_function": "grpc_deps",
+        "generator_name": "io_opencensus_cpp",
+        "name": "io_opencensus_cpp",
+        "sha256": "90d6fafa8b1a2ea613bf662731d3086e1c2ed286f458a95c81744df2dbae41b1",
+        "strip_prefix": "opencensus-cpp-c9a4da319bc669a772928ffc55af4a61be1a1176",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/census-instrumentation/opencensus-cpp/archive/c9a4da319bc669a772928ffc55af4a61be1a1176.tar.gz",
+            "https://github.com/census-instrumentation/opencensus-cpp/archive/c9a4da319bc669a772928ffc55af4a61be1a1176.tar.gz"
+        ]
+    },
+    "java_tools_javac11_darwin-v10.6.zip": {
+        "name": "java_tools_javac11_darwin-v10.6.zip",
+        "sha256": "d15b05d2061382748f779dc566537ea567a46bcba6fa34b56d7cb6e6d668adab",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/javac11/v10.6/java_tools_javac11_darwin-v10.6.zip"
+        ]
+    },
+    "java_tools_javac11_linux-v10.6.zip": {
+        "name": "java_tools_javac11_linux-v10.6.zip",
+        "sha256": "085c0ba53ba764e81d4c195524f3c596085cbf9cdc01dd8e6d2ae677e726af35",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/javac11/v10.6/java_tools_javac11_linux-v10.6.zip"
+        ]
+    },
+    "java_tools_javac11_windows-v10.6.zip": {
+        "name": "java_tools_javac11_windows-v10.6.zip",
+        "sha256": "873f1e53d1fa9c8e46b717673816cd822bb7acc474a194a18ff849fd8fa6ff00",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/javac11/v10.6/java_tools_javac11_windows-v10.6.zip"
+        ]
+    },
+    "java_tools_langtools_javac11": {
+        "name": "java_tools_langtools_javac11",
+        "sha256": "cf0814fa002ef3d794582bb086516d8c9ed0958f83f19799cdb08949019fe4c7",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/jdk_langtools/langtools_jdk11_v2.zip"
+        ]
+    },
+    "jekyll_tree_0_17_1": {
+        "name": "jekyll_tree_0_17_1",
+        "sha256": "02256ddd20eeaf70cf8fcfe9b2cdddd7be87aedd5848d549474fb0358e0031d3",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-0.17.1.tar"
+        ]
+    },
+    "jekyll_tree_0_17_2": {
+        "name": "jekyll_tree_0_17_2",
+        "sha256": "13b35dd309a0d52f0a2518a1193f42729c75255f5fae40cea68e4d4224bfaa2e",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-0.17.2.tar"
+        ]
+    },
+    "jekyll_tree_0_18_1": {
+        "name": "jekyll_tree_0_18_1",
+        "sha256": "98b77f48e37a50fc6f83100bf53f661e10732bb3ddbc226e02d0225cb7a9a7d8",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-0.18.1.tar"
+        ]
+    },
+    "jekyll_tree_0_19_1": {
+        "name": "jekyll_tree_0_19_1",
+        "sha256": "ec892c59ba18bb8de1f9ae2bde937db144e45f28d6d1c32a2cee847ee81b134d",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-0.19.1.tar"
+        ]
+    },
+    "jekyll_tree_0_19_2": {
+        "name": "jekyll_tree_0_19_2",
+        "sha256": "3c2d9f21ec2fd1c0b8a310f6eb6043027c838810cdfc2457d4346a0e5cdcaa7a",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-0.19.2.tar"
+        ]
+    },
+    "jekyll_tree_0_20_0": {
+        "name": "jekyll_tree_0_20_0",
+        "sha256": "bb79a63810bf1b0aa1f89bd3bbbeb4a547a30ab9af70c9be656cc6866f4b015b",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-0.20.0.tar"
+        ]
+    },
+    "jekyll_tree_0_21_0": {
+        "name": "jekyll_tree_0_21_0",
+        "sha256": "23ec39c0138d358c544151e5c81586716d5d1c6124f10a742bead70516e6eb93",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-0.21.0.tar"
+        ]
+    },
+    "jekyll_tree_0_22_0": {
+        "name": "jekyll_tree_0_22_0",
+        "sha256": "bec5cfaa5560e082e41e33bde276cf93f0f7bcfd2914a3e868f921df8b3ab725",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-0.22.0.tar"
+        ]
+    },
+    "jekyll_tree_0_23_0": {
+        "name": "jekyll_tree_0_23_0",
+        "sha256": "56c80fcf49dc606fab8ed5e737a7409e9a486585b7b98673be69b5a4984dd774",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-0.23.0.tar"
+        ]
+    },
+    "jekyll_tree_0_24_0": {
+        "name": "jekyll_tree_0_24_0",
+        "sha256": "988fa567906a73e50d3669909285187ef88c76ecd4aa277f4d1f355fc06a90c8",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-0.24.0.tar"
+        ]
+    },
+    "jekyll_tree_0_25_0": {
+        "name": "jekyll_tree_0_25_0",
+        "sha256": "e8ab61c047225e808982a564ecd692fd63bd243dccc88a8768ed069a5362a685",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-0.25.0.tar"
+        ]
+    },
+    "jekyll_tree_0_26_0": {
+        "name": "jekyll_tree_0_26_0",
+        "sha256": "3907dfc6fb27d246e67877e553e8951fac239bb49f2dec7e06b6b09cb0b98b8d",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-0.26.0.tar"
+        ]
+    },
+    "jekyll_tree_0_27_0": {
+        "name": "jekyll_tree_0_27_0",
+        "sha256": "97e2633fefee389daade775da43907aa68699b32212f4e48cb095abe18aa7e65",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-0.27.0.tar"
+        ]
+    },
+    "jekyll_tree_0_28_0": {
+        "name": "jekyll_tree_0_28_0",
+        "sha256": "64b3fc267fb1f4c56345d96f0ad9f07a2efe43bd15361f818368849cf941b3b7",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-0.28.0.tar"
+        ]
+    },
+    "jekyll_tree_0_29_0": {
+        "name": "jekyll_tree_0_29_0",
+        "sha256": "99d7a6bf9ef0145c59c54b4319fb31cb855681782080a5490909c4a5463c7215",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-0.29.0.tar"
+        ]
+    },
+    "jekyll_tree_0_29_1": {
+        "name": "jekyll_tree_0_29_1",
+        "sha256": "cf0a517f1660a7c4fd26a7ef6f3594bbefcf2b670bc0ed610bf3bb6ec3a9fdc3",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-0.29.1.tar"
+        ]
+    },
+    "jekyll_tree_1_0_0": {
+        "name": "jekyll_tree_1_0_0",
+        "sha256": "61ef65c738a8cd65059f58f2ee5f7eef493136ac4d5e5c3464787d17043febdf",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-1.0.0.tar"
+        ]
+    },
+    "jekyll_tree_1_1_0": {
+        "name": "jekyll_tree_1_1_0",
+        "sha256": "46d82c9249896903ee6be2295fc52a1346a9ee82f61f89b8a2181232c3bd999b",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-1.1.0.tar"
+        ]
+    },
+    "jekyll_tree_1_2_0": {
+        "name": "jekyll_tree_1_2_0",
+        "sha256": "d402a8391ca2624673f124ff42ba8d0d40d4139e5d23111f3995dc6c5f70f63d",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-1.2.0.tar"
+        ]
+    },
+    "jekyll_tree_2_0_0": {
+        "name": "jekyll_tree_2_0_0",
+        "sha256": "7d7c424ede503856c61b645d8fdc2513ec6ea8600d76c5e87c45a9a45c16de3e",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-2.0.0.tar"
+        ]
+    },
+    "jekyll_tree_2_1_0": {
+        "name": "jekyll_tree_2_1_0",
+        "sha256": "b0fd257b1d6b1b05705742d55a13b9a20d3e99f49c89334750c872d620e5b88f",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-2.1.0.tar"
+        ]
+    },
+    "jekyll_tree_2_2_0": {
+        "name": "jekyll_tree_2_2_0",
+        "sha256": "4c1506786ab98df8039ec7354b82da7b586b2ae4ab7f7e7d08f3caf74ff28e3d",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-2.2.0.tar"
+        ]
+    },
+    "jekyll_tree_3_0_0": {
+        "name": "jekyll_tree_3_0_0",
+        "sha256": "bd1096ad609c253fa7b1473edf4a3aa51f36243e188dbb62c68d8ed4aca2419d",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-3.0.0.tar"
+        ]
+    },
+    "jekyll_tree_3_1_0": {
+        "name": "jekyll_tree_3_1_0",
+        "sha256": "f9d2e22e24af426d6c9de163d91abe6d8af7eb1eabb1d7ff5e9cf4bededf465a",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-3.1.0-807b377.tar"
+        ]
+    },
+    "jekyll_tree_3_2_0": {
+        "name": "jekyll_tree_3_2_0",
+        "sha256": "6cff8654e739a0c3062183a5a6cc82fcf9a77323051f8c007866d7f4101052a6",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-3.2.0.tar"
+        ]
+    },
+    "jekyll_tree_3_3_0": {
+        "name": "jekyll_tree_3_3_0",
+        "sha256": "36b81e8ddf4f3caccf41acc82d9e49f000c1be9e92c9cc82793d60ff70636176",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-3.3.0.tar"
+        ]
+    },
+    "jekyll_tree_3_4_0": {
+        "name": "jekyll_tree_3_4_0",
+        "sha256": "af82e775d911135bcff76e500bb003c4a9fccb949f8ddf4d93c58eca195bf5e8",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-3.4.0.tar"
+        ]
+    },
+    "jekyll_tree_3_5_0": {
+        "name": "jekyll_tree_3_5_0",
+        "sha256": "aa96cbad14cfab0b422d1d17eac3107a75eb05854d40ab4f1379a6fc87b2e1f8",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-3.5.0.tar"
+        ]
+    },
+    "jekyll_tree_3_5_1": {
+        "name": "jekyll_tree_3_5_1",
+        "sha256": "1c949ba8da353c93c74a70638e5cb321ea1cd5582eda1b6ad88c6d2d0b569f2f",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-3.5.1.tar"
+        ]
+    },
+    "jekyll_tree_3_6_0": {
+        "name": "jekyll_tree_3_6_0",
+        "sha256": "1b7a16a2098ca0c290c208a11db886e950d6c523b2cac2d0a0cba4a04aa832f3",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-3.6.0.tar"
+        ]
+    },
+    "jekyll_tree_3_7_0": {
+        "name": "jekyll_tree_3_7_0",
+        "sha256": "a534d37ef3867c92fae8692852f92820a34f63a5f9092bbbec6505c0f69d8094",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-3.7.0.tar"
+        ]
+    },
+    "openjdk11_darwin_aarch64_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "name": "openjdk11_darwin_aarch64_archive",
+        "sha256": "3dcc636e64ae58b922269c2dc9f20f6f967bee90e3f6847d643c4a566f1e8d8a",
+        "strip_prefix": "zulu11.45.27-ca-jdk11.0.10-macosx_aarch64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu11.45.27-ca-jdk11.0.10-macosx_aarch64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu11.45.27-ca-jdk11.0.10-macosx_aarch64.tar.gz"
+        ]
+    },
+    "openjdk11_darwin_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "name": "openjdk11_darwin_archive",
+        "sha256": "e1fe56769f32e2aaac95e0a8f86b5a323da5af3a3b4bba73f3086391a6cc056f",
+        "strip_prefix": "zulu11.37.17-ca-jdk11.0.6-macosx_x64",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-macosx_x64.tar.gz"
+        ]
+    },
+    "openjdk11_linux_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "name": "openjdk11_linux_archive",
+        "sha256": "360626cc19063bc411bfed2914301b908a8f77a7919aaea007a977fa8fb3cde1",
+        "strip_prefix": "zulu11.37.17-ca-jdk11.0.6-linux_x64",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-linux_x64.tar.gz"
+        ]
+    },
+    "openjdk11_windows_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "name": "openjdk11_windows_archive",
+        "sha256": "a9695617b8374bfa171f166951214965b1d1d08f43218db9a2a780b71c665c18",
+        "strip_prefix": "zulu11.37.17-ca-jdk11.0.6-win_x64",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-win_x64.zip"
+        ]
+    },
+    "openjdk14_darwin_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "name": "openjdk14_darwin_archive",
+        "sha256": "088bd4d0890acc9f032b738283bf0f26b2a55c50b02d1c8a12c451d8ddf080dd",
+        "strip_prefix": "zulu14.28.21-ca-jdk14.0.1-macosx_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu14.28.21-ca-jdk14.0.1-macosx_x64.tar.gz"
+        ]
+    },
+    "openjdk14_linux_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "name": "openjdk14_linux_archive",
+        "sha256": "48bb8947034cd079ad1ef83335e7634db4b12a26743a0dc314b6b861480777aa",
+        "strip_prefix": "zulu14.28.21-ca-jdk14.0.1-linux_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu14.28.21-ca-jdk14.0.1-linux_x64.tar.gz"
+        ]
+    },
+    "openjdk14_windows_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "name": "openjdk14_windows_archive",
+        "sha256": "9cb078b5026a900d61239c866161f0d9558ec759aa15c5b4c7e905370e868284",
+        "strip_prefix": "zulu14.28.21-ca-jdk14.0.1-win_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu14.28.21-ca-jdk14.0.1-win_x64.zip"
+        ]
+    },
+    "openjdk15_darwin_aarch64_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "name": "openjdk15_darwin_aarch64_archive",
+        "sha256": "2613c3f15eef6b6ecd0fd102da92282b985e4573905dc902f1783d8059c1efc5",
+        "strip_prefix": "zulu15.29.15-ca-jdk15.0.2-macosx_aarch64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu15.29.15-ca-jdk15.0.2-macosx_aarch64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu15.29.15-ca-jdk15.0.2-macosx_aarch64.tar.gz"
+        ]
+    },
+    "openjdk15_darwin_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "name": "openjdk15_darwin_archive",
+        "sha256": "f80b2e0512d9d8a92be24497334c974bfecc8c898fc215ce0e76594f00437482",
+        "strip_prefix": "zulu15.27.17-ca-jdk15.0.0-macosx_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu15.27.17-ca-jdk15.0.0-macosx_x64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu15.27.17-ca-jdk15.0.0-macosx_x64.tar.gz"
+        ]
+    },
+    "openjdk15_linux_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "name": "openjdk15_linux_archive",
+        "sha256": "0a38f1138c15a4f243b75eb82f8ef40855afcc402e3c2a6de97ce8235011b1ad",
+        "strip_prefix": "zulu15.27.17-ca-jdk15.0.0-linux_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu15.27.17-ca-jdk15.0.0-linux_x64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu15.27.17-ca-jdk15.0.0-linux_x64.tar.gz"
+        ]
+    },
+    "openjdk15_windows_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "name": "openjdk15_windows_archive",
+        "sha256": "f535a530151e6c20de8a3078057e332b08887cb3ba1a4735717357e72765cad6",
+        "strip_prefix": "zulu15.27.17-ca-jdk15.0.0-win_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu15.27.17-ca-jdk15.0.0-win_x64.zip",
+            "https://cdn.azul.com/zulu/bin/zulu15.27.17-ca-jdk15.0.0-win_x64.zip"
+        ]
+    },
+    "openjdk_linux": {
+        "downloaded_file_path": "zulu-linux.tar.gz",
+        "name": "openjdk_linux",
+        "sha256": "65bfe4e0ffa74a680ee4410db46b17e30cd9397b664a92a886599fe1f3530969",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-linux_x64-linux_x64-allmodules-b23d4e05466f2aa1fdcd72d3d3a8e962206b64bf-1581689070.tar.gz"
+        ]
+    },
+    "openjdk_linux_aarch64": {
+        "downloaded_file_path": "zulu-linux-aarch64.tar.gz",
+        "name": "openjdk_linux_aarch64",
+        "sha256": "6b245793087300db3ee82ab0d165614f193a73a60f2f011e347756c1e6ca5bac",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.48-ca-jdk11.0.6/zulu11.37.48-ca-jdk11.0.6-linux_aarch64-allmodules-b23d4e05466f2aa1fdcd72d3d3a8e962206b64bf-1581690750.tar.gz"
+        ]
+    },
+    "openjdk_linux_aarch64_minimal": {
+        "downloaded_file_path": "zulu-linux-aarch64-minimal.tar.gz",
+        "name": "openjdk_linux_aarch64_minimal",
+        "sha256": "06f6520a877704c77614bcfc4f846cc7cbcbf5eaad149bf7f19f4f16e285c9de",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.48-ca-jdk11.0.6/zulu11.37.48-ca-jdk11.0.6-linux_aarch64-minimal-b23d4e05466f2aa1fdcd72d3d3a8e962206b64bf-1581690750.tar.gz"
+        ]
+    },
+    "openjdk_linux_aarch64_vanilla": {
+        "downloaded_file_path": "zulu-linux-aarch64-vanilla.tar.gz",
+        "name": "openjdk_linux_aarch64_vanilla",
+        "sha256": "a452f1b9682d9f83c1c14e54d1446e1c51b5173a3a05dcb013d380f9508562e4",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.48-ca-jdk11.0.6/zulu11.37.48-ca-jdk11.0.6-linux_aarch64.tar.gz"
+        ]
+    },
+    "openjdk_linux_minimal": {
+        "downloaded_file_path": "zulu-linux-minimal.tar.gz",
+        "name": "openjdk_linux_minimal",
+        "sha256": "91f7d52f695c681d4e21499b4319d548aadef249a6b3053e306308992e1e29ae",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-linux_x64-minimal-b23d4e05466f2aa1fdcd72d3d3a8e962206b64bf-1581689068.tar.gz"
+        ]
+    },
+    "openjdk_linux_ppc64le_vanilla": {
+        "downloaded_file_path": "adoptopenjdk-ppc64le-vanilla.tar.gz",
+        "name": "openjdk_linux_ppc64le_vanilla",
+        "sha256": "a417db0295b1f4b538ecbaf7c774f3a177fab9657a665940170936c0eca4e71a",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.7+10/OpenJDK11U-jdk_ppc64le_linux_hotspot_11.0.7_10.tar.gz",
+            "https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.7+10/OpenJDK11U-jdk_ppc64le_linux_hotspot_11.0.7_10.tar.gz"
+        ]
+    },
+    "openjdk_linux_s390x_vanilla": {
+        "downloaded_file_path": "adoptopenjdk-s390x-vanilla.tar.gz",
+        "name": "openjdk_linux_s390x_vanilla",
+        "sha256": "d9b72e87a1d3ebc0c9552f72ae5eb150fffc0298a7cb841f1ce7bfc70dcd1059",
+        "urls": [
+            "https://mirror.bazel.build/github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.7+10/OpenJDK11U-jdk_s390x_linux_hotspot_11.0.7_10.tar.gz",
+            "https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.7+10/OpenJDK11U-jdk_s390x_linux_hotspot_11.0.7_10.tar.gz"
+        ]
+    },
+    "openjdk_linux_vanilla": {
+        "downloaded_file_path": "zulu-linux-vanilla.tar.gz",
+        "name": "openjdk_linux_vanilla",
+        "sha256": "360626cc19063bc411bfed2914301b908a8f77a7919aaea007a977fa8fb3cde1",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-linux_x64.tar.gz"
+        ]
+    },
+    "openjdk_macos_aarch64": {
+        "downloaded_file_path": "zulu-macos-aarch64.tar.gz",
+        "name": "openjdk_macos_aarch64",
+        "sha256": "a900ef793cb34b03ac5d93ea2f67291b6842e99d500934e19393a8d8f9bfa6ff",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.45.27-ca-jdk11.0.10/zulu11.45.27-ca-jdk11.0.10-macosx_aarch64-allmodules-1611665569.tar.gz"
+        ]
+    },
+    "openjdk_macos_aarch64_minimal": {
+        "downloaded_file_path": "zulu-macos-aarch64-minimal.tar.gz",
+        "name": "openjdk_macos_aarch64_minimal",
+        "sha256": "f4f606926e6deeaa8b8397e299313d9df87642fe464b0ccf1ed0432aeb00640b",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.45.27-ca-jdk11.0.10/zulu11.45.27-ca-jdk11.0.10-macosx_aarch64-minimal-1611665562.tar.gz"
+        ]
+    },
+    "openjdk_macos_aarch64_vanilla": {
+        "downloaded_file_path": "zulu-macos-aarch64-vanilla.tar.gz",
+        "name": "openjdk_macos_aarch64_vanilla",
+        "sha256": "3dcc636e64ae58b922269c2dc9f20f6f967bee90e3f6847d643c4a566f1e8d8a",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu11.45.27-ca-jdk11.0.10-macosx_aarch64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu11.45.27-ca-jdk11.0.10-macosx_aarch64.tar.gz"
+        ]
+    },
+    "openjdk_macos_x86_64": {
+        "downloaded_file_path": "zulu-macos.tar.gz",
+        "name": "openjdk_macos_x86_64",
+        "sha256": "8e283cfd23c7555be8e17295ed76eb8f00324c88ab904b8de37bbe08f90e569b",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-macosx_x64-allmodules-b23d4e05466f2aa1fdcd72d3d3a8e962206b64bf-1581689066.tar.gz"
+        ]
+    },
+    "openjdk_macos_x86_64_minimal": {
+        "downloaded_file_path": "zulu-macos-minimal.tar.gz",
+        "name": "openjdk_macos_x86_64_minimal",
+        "sha256": "1bacb1c07035d4066d79f0b65b4ea0ebd1954f3662bdfe3618da382ac8fd23a6",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-macosx_x64-minimal-b23d4e05466f2aa1fdcd72d3d3a8e962206b64bf-1581689063.tar.gz"
+        ]
+    },
+    "openjdk_macos_x86_64_vanilla": {
+        "downloaded_file_path": "zulu-macos-vanilla.tar.gz",
+        "name": "openjdk_macos_x86_64_vanilla",
+        "sha256": "e1fe56769f32e2aaac95e0a8f86b5a323da5af3a3b4bba73f3086391a6cc056f",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-macosx_x64.tar.gz"
+        ]
+    },
+    "openjdk_win": {
+        "downloaded_file_path": "zulu-win.zip",
+        "name": "openjdk_win",
+        "sha256": "8e1604b3a27dcf639bc6d1a73103f1211848139e4cceb081d0a74a99e1e6f995",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-win_x64-allmodules-b23d4e05466f2aa1fdcd72d3d3a8e962206b64bf-1581689080.zip"
+        ]
+    },
+    "openjdk_win_minimal": {
+        "downloaded_file_path": "zulu-win-minimal.zip",
+        "name": "openjdk_win_minimal",
+        "sha256": "b90a713c9c2d9ea23cad44d2c2dfcc9af22faba9bde55dedc1c3bb9f556ac1ae",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-win_x64-minimal-b23d4e05466f2aa1fdcd72d3d3a8e962206b64bf-1581689080.zip"
+        ]
+    },
+    "openjdk_win_vanilla": {
+        "downloaded_file_path": "zulu-win-vanilla.zip",
+        "name": "openjdk_win_vanilla",
+        "sha256": "a9695617b8374bfa171f166951214965b1d1d08f43218db9a2a780b71c665c18",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-win_x64.zip"
+        ]
+    },
+    "platforms": {
+        "name": "platforms",
+        "sha256": "079945598e4b6cc075846f7fd6a9d0857c33a7afc0de868c2ccb96405225135d",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/platforms/releases/download/0.0.4/platforms-0.0.4.tar.gz",
+            "https://github.com/bazelbuild/platforms/releases/download/0.0.4/platforms-0.0.4.tar.gz"
+        ]
+    },
+    "platforms-0.0.4.tar.gz": {
+        "name": "platforms-0.0.4.tar.gz",
+        "sha256": "079945598e4b6cc075846f7fd6a9d0857c33a7afc0de868c2ccb96405225135d",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/platforms/releases/download/0.0.4/platforms-0.0.4.tar.gz",
+            "https://github.com/bazelbuild/platforms/releases/download/0.0.4/platforms-0.0.4.tar.gz"
+        ]
+    },
+    "remote_coverage_tools": {
+        "name": "remote_coverage_tools",
+        "sha256": "cd14f1cb4559e4723e63b7e7b06d09fcc3bd7ba58d03f354cdff1439bd936a7d",
+        "urls": [
+            "https://mirror.bazel.build/bazel_coverage_output_generator/releases/coverage_output_generator-v2.5.zip"
+        ]
+    },
+    "remote_coverage_tools_for_testing": {
+        "name": "remote_coverage_tools_for_testing",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "cd14f1cb4559e4723e63b7e7b06d09fcc3bd7ba58d03f354cdff1439bd936a7d",
+        "urls": [
+            "https://mirror.bazel.build/bazel_coverage_output_generator/releases/coverage_output_generator-v2.5.zip"
+        ]
+    },
+    "remote_java_tools_darwin": {
+        "generator_function": "maybe",
+        "generator_name": "remote_java_tools_darwin",
+        "name": "remote_java_tools_darwin",
+        "sha256": "64e5de2175dfccb96831573946b80d106edf3801d9db38b564514bf3581d466b",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/javac11/v10.0/java_tools_javac11_darwin-v10.0.zip",
+            "https://github.com/bazelbuild/java_tools/releases/download/javac11_v10.0/java_tools_javac11_darwin-v10.0.zip"
+        ]
+    },
+    "remote_java_tools_darwin_for_testing": {
+        "name": "remote_java_tools_darwin_for_testing",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "d15b05d2061382748f779dc566537ea567a46bcba6fa34b56d7cb6e6d668adab",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/javac11/v10.6/java_tools_javac11_darwin-v10.6.zip",
+            "https://github.com/bazelbuild/java_tools/releases/download/javac11_v10.6/java_tools_javac11_darwin-v10.6.zip"
+        ]
+    },
+    "remote_java_tools_javac11_test_darwin": {
+        "name": "remote_java_tools_javac11_test_darwin",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "d15b05d2061382748f779dc566537ea567a46bcba6fa34b56d7cb6e6d668adab",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/javac11/v10.6/java_tools_javac11_darwin-v10.6.zip"
+        ]
+    },
+    "remote_java_tools_javac11_test_linux": {
+        "name": "remote_java_tools_javac11_test_linux",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "085c0ba53ba764e81d4c195524f3c596085cbf9cdc01dd8e6d2ae677e726af35",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/javac11/v10.6/java_tools_javac11_linux-v10.6.zip"
+        ]
+    },
+    "remote_java_tools_javac11_test_windows": {
+        "name": "remote_java_tools_javac11_test_windows",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "873f1e53d1fa9c8e46b717673816cd822bb7acc474a194a18ff849fd8fa6ff00",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/javac11/v10.6/java_tools_javac11_windows-v10.6.zip"
+        ]
+    },
+    "remote_java_tools_linux": {
+        "generator_function": "maybe",
+        "generator_name": "remote_java_tools_linux",
+        "name": "remote_java_tools_linux",
+        "sha256": "69e65353c2cd65780abcbcce4daae973599298273b0f8b4d469eed822cb220d1",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/javac11/v10.0/java_tools_javac11_linux-v10.0.zip",
+            "https://github.com/bazelbuild/java_tools/releases/download/javac11_v10.0/java_tools_javac11_linux-v10.0.zip"
+        ]
+    },
+    "remote_java_tools_linux_for_testing": {
+        "name": "remote_java_tools_linux_for_testing",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "085c0ba53ba764e81d4c195524f3c596085cbf9cdc01dd8e6d2ae677e726af35",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/javac11/v10.6/java_tools_javac11_linux-v10.6.zip",
+            "https://github.com/bazelbuild/java_tools/releases/download/javac11_v10.6/java_tools_javac11_linux-v10.6.zip"
+        ]
+    },
+    "remote_java_tools_windows": {
+        "generator_function": "maybe",
+        "generator_name": "remote_java_tools_windows",
+        "name": "remote_java_tools_windows",
+        "sha256": "d2f62af8daa0a3d55789b605f6582e37038329c64843337c71e64515468e55c4",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/javac11/v10.0/java_tools_javac11_windows-v10.0.zip",
+            "https://github.com/bazelbuild/java_tools/releases/download/javac11_v10.0/java_tools_javac11_windows-v10.0.zip"
+        ]
+    },
+    "remote_java_tools_windows_for_testing": {
+        "name": "remote_java_tools_windows_for_testing",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "873f1e53d1fa9c8e46b717673816cd822bb7acc474a194a18ff849fd8fa6ff00",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/javac11/v10.6/java_tools_javac11_windows-v10.6.zip",
+            "https://github.com/bazelbuild/java_tools/releases/download/javac11_v10.6/java_tools_javac11_windows-v10.6.zip"
+        ]
+    },
+    "remotejdk11_linux": {
+        "build_file": "@bazel_tools//tools/jdk:jdk.BUILD",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk11_linux",
+        "name": "remotejdk11_linux",
+        "sha256": "360626cc19063bc411bfed2914301b908a8f77a7919aaea007a977fa8fb3cde1",
+        "strip_prefix": "zulu11.37.17-ca-jdk11.0.6-linux_x64",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-linux_x64.tar.gz"
+        ]
+    },
+    "remotejdk11_linux_aarch64": {
+        "build_file": "@bazel_tools//tools/jdk:jdk.BUILD",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk11_linux_aarch64",
+        "name": "remotejdk11_linux_aarch64",
+        "sha256": "a452f1b9682d9f83c1c14e54d1446e1c51b5173a3a05dcb013d380f9508562e4",
+        "strip_prefix": "zulu11.37.48-ca-jdk11.0.6-linux_aarch64",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.48-ca-jdk11.0.6/zulu11.37.48-ca-jdk11.0.6-linux_aarch64.tar.gz"
+        ]
+    },
+    "remotejdk11_linux_aarch64_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk11_linux_aarch64_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "a452f1b9682d9f83c1c14e54d1446e1c51b5173a3a05dcb013d380f9508562e4",
+        "strip_prefix": "zulu11.37.48-ca-jdk11.0.6-linux_aarch64",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.48-ca-jdk11.0.6/zulu11.37.48-ca-jdk11.0.6-linux_aarch64.tar.gz"
+        ]
+    },
+    "remotejdk11_linux_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk11_linux_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "360626cc19063bc411bfed2914301b908a8f77a7919aaea007a977fa8fb3cde1",
+        "strip_prefix": "zulu11.37.17-ca-jdk11.0.6-linux_x64",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-linux_x64.tar.gz"
+        ]
+    },
+    "remotejdk11_linux_ppc64le": {
+        "build_file": "@bazel_tools//tools/jdk:jdk.BUILD",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk11_linux_ppc64le",
+        "name": "remotejdk11_linux_ppc64le",
+        "sha256": "a417db0295b1f4b538ecbaf7c774f3a177fab9657a665940170936c0eca4e71a",
+        "strip_prefix": "jdk-11.0.7+10",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.7+10/OpenJDK11U-jdk_ppc64le_linux_hotspot_11.0.7_10.tar.gz",
+            "https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.7+10/OpenJDK11U-jdk_ppc64le_linux_hotspot_11.0.7_10.tar.gz"
+        ]
+    },
+    "remotejdk11_linux_ppc64le_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk11_linux_ppc64le_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "a417db0295b1f4b538ecbaf7c774f3a177fab9657a665940170936c0eca4e71a",
+        "strip_prefix": "jdk-11.0.7+10",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.7+10/OpenJDK11U-jdk_ppc64le_linux_hotspot_11.0.7_10.tar.gz",
+            "https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.7+10/OpenJDK11U-jdk_ppc64le_linux_hotspot_11.0.7_10.tar.gz"
+        ]
+    },
+    "remotejdk11_linux_s390x": {
+        "build_file": "@bazel_tools//tools/jdk:jdk.BUILD",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk11_linux_s390x",
+        "name": "remotejdk11_linux_s390x",
+        "sha256": "d9b72e87a1d3ebc0c9552f72ae5eb150fffc0298a7cb841f1ce7bfc70dcd1059",
+        "strip_prefix": "jdk-11.0.7+10",
+        "urls": [
+            "https://mirror.bazel.build/github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.7+10/OpenJDK11U-jdk_s390x_linux_hotspot_11.0.7_10.tar.gz",
+            "https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.7+10/OpenJDK11U-jdk_s390x_linux_hotspot_11.0.7_10.tar.gz"
+        ]
+    },
+    "remotejdk11_linux_s390x_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk11_linux_s390x_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "d9b72e87a1d3ebc0c9552f72ae5eb150fffc0298a7cb841f1ce7bfc70dcd1059",
+        "strip_prefix": "jdk-11.0.7+10",
+        "urls": [
+            "https://mirror.bazel.build/github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.7+10/OpenJDK11U-jdk_s390x_linux_hotspot_11.0.7_10.tar.gz",
+            "https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.7+10/OpenJDK11U-jdk_s390x_linux_hotspot_11.0.7_10.tar.gz"
+        ]
+    },
+    "remotejdk11_macos": {
+        "build_file": "@bazel_tools//tools/jdk:jdk.BUILD",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk11_macos",
+        "name": "remotejdk11_macos",
+        "sha256": "e1fe56769f32e2aaac95e0a8f86b5a323da5af3a3b4bba73f3086391a6cc056f",
+        "strip_prefix": "zulu11.37.17-ca-jdk11.0.6-macosx_x64",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-macosx_x64.tar.gz"
+        ]
+    },
+    "remotejdk11_macos_aarch64_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk11_macos_aarch64_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "3dcc636e64ae58b922269c2dc9f20f6f967bee90e3f6847d643c4a566f1e8d8a",
+        "strip_prefix": "zulu11.45.27-ca-jdk11.0.10-macosx_aarch64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu11.45.27-ca-jdk11.0.10-macosx_aarch64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu11.45.27-ca-jdk11.0.10-macosx_aarch64.tar.gz"
+        ]
+    },
+    "remotejdk11_macos_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk11_macos_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "e1fe56769f32e2aaac95e0a8f86b5a323da5af3a3b4bba73f3086391a6cc056f",
+        "strip_prefix": "zulu11.37.17-ca-jdk11.0.6-macosx_x64",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-macosx_x64.tar.gz"
+        ]
+    },
+    "remotejdk11_win": {
+        "build_file": "@bazel_tools//tools/jdk:jdk.BUILD",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk11_win",
+        "name": "remotejdk11_win",
+        "sha256": "a9695617b8374bfa171f166951214965b1d1d08f43218db9a2a780b71c665c18",
+        "strip_prefix": "zulu11.37.17-ca-jdk11.0.6-win_x64",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-win_x64.zip"
+        ]
+    },
+    "remotejdk11_win_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk11_win_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "a9695617b8374bfa171f166951214965b1d1d08f43218db9a2a780b71c665c18",
+        "strip_prefix": "zulu11.37.17-ca-jdk11.0.6-win_x64",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-win_x64.zip"
+        ]
+    },
+    "remotejdk14_linux": {
+        "build_file": "@bazel_tools//tools/jdk:jdk.BUILD",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk14_linux",
+        "name": "remotejdk14_linux",
+        "sha256": "48bb8947034cd079ad1ef83335e7634db4b12a26743a0dc314b6b861480777aa",
+        "strip_prefix": "zulu14.28.21-ca-jdk14.0.1-linux_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu14.28.21-ca-jdk14.0.1-linux_x64.tar.gz"
+        ]
+    },
+    "remotejdk14_linux_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk14_linux_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "48bb8947034cd079ad1ef83335e7634db4b12a26743a0dc314b6b861480777aa",
+        "strip_prefix": "zulu14.28.21-ca-jdk14.0.1-linux_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu14.28.21-ca-jdk14.0.1-linux_x64.tar.gz"
+        ]
+    },
+    "remotejdk14_macos": {
+        "build_file": "@bazel_tools//tools/jdk:jdk.BUILD",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk14_macos",
+        "name": "remotejdk14_macos",
+        "sha256": "088bd4d0890acc9f032b738283bf0f26b2a55c50b02d1c8a12c451d8ddf080dd",
+        "strip_prefix": "zulu14.28.21-ca-jdk14.0.1-macosx_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu14.28.21-ca-jdk14.0.1-macosx_x64.tar.gz"
+        ]
+    },
+    "remotejdk14_macos_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk14_macos_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "088bd4d0890acc9f032b738283bf0f26b2a55c50b02d1c8a12c451d8ddf080dd",
+        "strip_prefix": "zulu14.28.21-ca-jdk14.0.1-macosx_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu14.28.21-ca-jdk14.0.1-macosx_x64.tar.gz"
+        ]
+    },
+    "remotejdk14_win": {
+        "build_file": "@bazel_tools//tools/jdk:jdk.BUILD",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk14_win",
+        "name": "remotejdk14_win",
+        "sha256": "9cb078b5026a900d61239c866161f0d9558ec759aa15c5b4c7e905370e868284",
+        "strip_prefix": "zulu14.28.21-ca-jdk14.0.1-win_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu14.28.21-ca-jdk14.0.1-win_x64.zip"
+        ]
+    },
+    "remotejdk14_win_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk14_win_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "9cb078b5026a900d61239c866161f0d9558ec759aa15c5b4c7e905370e868284",
+        "strip_prefix": "zulu14.28.21-ca-jdk14.0.1-win_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu14.28.21-ca-jdk14.0.1-win_x64.zip"
+        ]
+    },
+    "remotejdk15_linux_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk15_linux_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "0a38f1138c15a4f243b75eb82f8ef40855afcc402e3c2a6de97ce8235011b1ad",
+        "strip_prefix": "zulu15.27.17-ca-jdk15.0.0-linux_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu15.27.17-ca-jdk15.0.0-linux_x64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu15.27.17-ca-jdk15.0.0-linux_x64.tar.gz"
+        ]
+    },
+    "remotejdk15_macos_aarch64_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk15_macos_aarch64_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "2613c3f15eef6b6ecd0fd102da92282b985e4573905dc902f1783d8059c1efc5",
+        "strip_prefix": "zulu15.29.15-ca-jdk15.0.2-macosx_aarch64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu15.29.15-ca-jdk15.0.2-macosx_aarch64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu15.29.15-ca-jdk15.0.2-macosx_aarch64.tar.gz"
+        ]
+    },
+    "remotejdk15_macos_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk15_macos_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "f80b2e0512d9d8a92be24497334c974bfecc8c898fc215ce0e76594f00437482",
+        "strip_prefix": "zulu15.27.17-ca-jdk15.0.0-macosx_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu15.27.17-ca-jdk15.0.0-macosx_x64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu15.27.17-ca-jdk15.0.0-macosx_x64.tar.gz"
+        ]
+    },
+    "remotejdk15_win_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk15_win_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "f535a530151e6c20de8a3078057e332b08887cb3ba1a4735717357e72765cad6",
+        "strip_prefix": "zulu15.27.17-ca-jdk15.0.0-win_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu15.27.17-ca-jdk15.0.0-win_x64.zip",
+            "https://cdn.azul.com/zulu/bin/zulu15.27.17-ca-jdk15.0.0-win_x64.zip"
+        ]
+    },
+    "rules_cc": {
+        "name": "rules_cc",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "d0c573b94a6ef20ef6ff20154a23d0efcb409fb0e1ff0979cec318dfe42f0cdd",
+        "strip_prefix": "rules_cc-b1c40e1de81913a3c40e5948f78719c28152486d",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_cc/archive/b1c40e1de81913a3c40e5948f78719c28152486d.zip",
+            "https://github.com/bazelbuild/rules_cc/archive/b1c40e1de81913a3c40e5948f78719c28152486d.zip"
+        ]
+    },
+    "rules_java": {
+        "name": "rules_java",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "bc81f1ba47ef5cc68ad32225c3d0e70b8c6f6077663835438da8d5733f917598",
+        "strip_prefix": "rules_java-7cf3cefd652008d0a64a419c34c13bdca6c8f178",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_java/archive/7cf3cefd652008d0a64a419c34c13bdca6c8f178.zip",
+            "https://github.com/bazelbuild/rules_java/archive/7cf3cefd652008d0a64a419c34c13bdca6c8f178.zip"
+        ]
+    },
+    "rules_nodejs-2.2.2.tar.gz": {
+        "name": "rules_nodejs-2.2.2.tar.gz",
+        "sha256": "f2194102720e662dbf193546585d705e645314319554c6ce7e47d8b59f459e9c",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_nodejs/releases/download/2.2.2/rules_nodejs-2.2.2.tar.gz",
+            "https://github.com/bazelbuild/rules_nodejs/releases/download/2.2.2/rules_nodejs-2.2.2.tar.gz"
+        ]
+    },
+    "rules_pkg": {
+        "name": "rules_pkg",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "4ba8f4ab0ff85f2484287ab06c0d871dcb31cc54d439457d28fd4ae14b18450a",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_pkg/releases/download/0.2.4/rules_pkg-0.2.4.tar.gz",
+            "https://github.com/bazelbuild/rules_pkg/releases/download/0.2.4/rules_pkg-0.2.4.tar.gz"
+        ]
+    },
+    "rules_pkg-0.2.4.tar.gz": {
+        "name": "rules_pkg-0.2.4.tar.gz",
+        "sha256": "4ba8f4ab0ff85f2484287ab06c0d871dcb31cc54d439457d28fd4ae14b18450a",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_pkg/releases/download/0.2.4/rules_pkg-0.2.4.tar.gz",
+            "https://github.com/bazelbuild/rules_pkg/releases/download/0.2.4/rules_pkg-0.2.4.tar.gz"
+        ]
+    },
+    "rules_proto": {
+        "name": "rules_proto",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "8e7d59a5b12b233be5652e3d29f42fba01c7cbab09f6b3a8d0a57ed6d1e9a0da",
+        "strip_prefix": "rules_proto-7e4afce6fe62dbff0a4a03450143146f9f2d7488",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_proto/archive/7e4afce6fe62dbff0a4a03450143146f9f2d7488.tar.gz",
+            "https://github.com/bazelbuild/rules_proto/archive/7e4afce6fe62dbff0a4a03450143146f9f2d7488.tar.gz"
+        ]
+    },
+    "six": {
+        "build_file": "@com_github_grpc_grpc//third_party:six.BUILD",
+        "generator_function": "grpc_deps",
+        "generator_name": "six",
+        "name": "six",
+        "sha256": "d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73",
+        "urls": [
+            "https://files.pythonhosted.org/packages/dd/bf/4138e7bfb757de47d1f4b6994648ec67a51efe58fa907c1e11e350cddfca/six-1.12.0.tar.gz"
+        ]
+    },
+    "upb": {
+        "generator_function": "grpc_deps",
+        "generator_name": "upb",
+        "name": "upb",
+        "sha256": "7992217989f3156f8109931c1fc6db3434b7414957cb82371552377beaeb9d6c",
+        "strip_prefix": "upb-382d5afc60e05470c23e8de19b19fc5ad231e732",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/protocolbuffers/upb/archive/382d5afc60e05470c23e8de19b19fc5ad231e732.tar.gz",
+            "https://github.com/protocolbuffers/upb/archive/382d5afc60e05470c23e8de19b19fc5ad231e732.tar.gz"
+        ]
+    },
+    "v1.33.1.tar.gz": {
+        "name": "v1.33.1.tar.gz",
+        "sha256": "58eaee5c0f1bd0b92ebe1fa0606ec8f14798500620e7444726afcaf65041cb63",
+        "urls": [
+            "https://mirror.bazel.build/github.com/grpc/grpc/archive/v1.33.1.tar.gz",
+            "https://github.com/grpc/grpc/archive/v1.33.1.tar.gz"
+        ]
+    },
+    "v3.13.0.tar.gz": {
+        "name": "v3.13.0.tar.gz",
+        "sha256": "9b4ee22c250fe31b16f1a24d61467e40780a3fbb9b91c3b65be2a376ed913a1a",
+        "urls": [
+            "https://mirror.bazel.build/github.com/protocolbuffers/protobuf/archive/v3.13.0.tar.gz",
+            "https://github.com/protocolbuffers/protobuf/archive/v3.13.0.tar.gz"
+        ]
+    },
+    "zlib": {
+        "build_file": "@com_github_grpc_grpc//third_party:zlib.BUILD",
+        "generator_function": "grpc_deps",
+        "generator_name": "zlib",
+        "name": "zlib",
+        "sha256": "6d4d6640ca3121620995ee255945161821218752b551a1a180f4215f7d124d45",
+        "strip_prefix": "zlib-cacf7f1d4e3d44d871b605da3b647f07d718623f",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/madler/zlib/archive/cacf7f1d4e3d44d871b605da3b647f07d718623f.tar.gz",
+            "https://github.com/madler/zlib/archive/cacf7f1d4e3d44d871b605da3b647f07d718623f.tar.gz"
+        ]
+    },
+    "zulu11.37.17-ca-jdk11.0.6-linux_x64.tar.gz": {
+        "name": "zulu11.37.17-ca-jdk11.0.6-linux_x64.tar.gz",
+        "sha256": "360626cc19063bc411bfed2914301b908a8f77a7919aaea007a977fa8fb3cde1",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-linux_x64.tar.gz"
+        ]
+    },
+    "zulu11.37.17-ca-jdk11.0.6-macosx_x64.tar.gz": {
+        "name": "zulu11.37.17-ca-jdk11.0.6-macosx_x64.tar.gz",
+        "sha256": "e1fe56769f32e2aaac95e0a8f86b5a323da5af3a3b4bba73f3086391a6cc056f",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-macosx_x64.tar.gz"
+        ]
+    },
+    "zulu11.37.17-ca-jdk11.0.6-win_x64.zip": {
+        "name": "zulu11.37.17-ca-jdk11.0.6-win_x64.zip",
+        "sha256": "a9695617b8374bfa171f166951214965b1d1d08f43218db9a2a780b71c665c18",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-win_x64.zip"
+        ]
+    },
+    "zulu11.37.48-ca-jdk11.0.6-linux_aarch64.tar.gz": {
+        "name": "zulu11.37.48-ca-jdk11.0.6-linux_aarch64.tar.gz",
+        "sha256": "a452f1b9682d9f83c1c14e54d1446e1c51b5173a3a05dcb013d380f9508562e4",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.48-ca-jdk11.0.6/zulu11.37.48-ca-jdk11.0.6-linux_aarch64.tar.gz"
+        ]
+    },
+    "zulu11.45.27-ca-jdk11.0.10-macosx_aarch64.tar.gz": {
+        "name": "zulu11.45.27-ca-jdk11.0.10-macosx_aarch64.tar.gz",
+        "sha256": "3dcc636e64ae58b922269c2dc9f20f6f967bee90e3f6847d643c4a566f1e8d8a",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu11.45.27-ca-jdk11.0.10-macosx_aarch64.tar.gz"
+        ]
+    }
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_4/upb-clang16.patch b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_4/upb-clang16.patch
new file mode 100644
index 000000000000..34bb71747b17
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_4/upb-clang16.patch
@@ -0,0 +1,57 @@
+diff --git a/WORKSPACE b/WORKSPACE
+index 2d995f095e..55fddef663 100644
+--- a/WORKSPACE
++++ b/WORKSPACE
+@@ -1232,7 +1232,7 @@ register_toolchains("//src/main/res:empty_rc_toolchain")
+ http_archive(
+     name = "com_github_grpc_grpc",
+     patch_args = ["-p1"],
+-    patches = ["//third_party/grpc:grpc_1.33.1.patch"],
++    patches = ["//third_party/grpc:grpc_1.33.1.patch", "//:grpc-upb-clang16.patch"],
+     sha256 = "58eaee5c0f1bd0b92ebe1fa0606ec8f14798500620e7444726afcaf65041cb63",
+     strip_prefix = "grpc-1.33.1",
+     urls = [
+diff --git a/grpc-upb-clang16.patch b/grpc-upb-clang16.patch
+new file mode 100644
+index 0000000000..ae6a7ad0e0
+--- /dev/null
++++ b/grpc-upb-clang16.patch
+@@ -0,0 +1,13 @@
++diff -r -u a/bazel/grpc_deps.bzl b/bazel/grpc_deps.bzl
++--- a/bazel/grpc_deps.bzl
+++++ b/bazel/grpc_deps.bzl
++@@ -285,6 +285,8 @@
++             name = "upb",
++             sha256 = "7992217989f3156f8109931c1fc6db3434b7414957cb82371552377beaeb9d6c",
++             strip_prefix = "upb-382d5afc60e05470c23e8de19b19fc5ad231e732",
+++            patches = ["//:upb-clang16.patch"],
+++            patch_args = ["-p1"],
++             urls = [
++                 "https://storage.googleapis.com/grpc-bazel-mirror/github.com/protocolbuffers/upb/archive/382d5afc60e05470c23e8de19b19fc5ad231e732.tar.gz",
++                 "https://github.com/protocolbuffers/upb/archive/382d5afc60e05470c23e8de19b19fc5ad231e732.tar.gz",
++
+diff --git a/upb-clang16.patch b/upb-clang16.patch
+new file mode 100644
+index 0000000000..b799737fac
+--- /dev/null
++++ b/upb-clang16.patch
+@@ -0,0 +1,18 @@
++--- a/BUILD
+++++ b/BUILD
++@@ -34,6 +34,7 @@
++     "-Wextra",
++     # "-Wshorten-64-to-32",  # not in GCC (and my Kokoro images doesn't have Clang)
++     "-Werror",
+++    "-Wno-gnu-offsetof-extensions",
++     "-Wno-long-long",
++     # copybara:strip_end
++ ]
++@@ -42,6 +43,7 @@
++     # copybara:strip_for_google3_begin
++     "-pedantic",
++     "-Werror=pedantic",
+++    "-Wno-gnu-offsetof-extensions",
++     "-Wstrict-prototypes",
++     # copybara:strip_end
++ ]
+
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_4/update-srcDeps.py b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_4/update-srcDeps.py
new file mode 100755
index 000000000000..9e998e05875e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_4/update-srcDeps.py
@@ -0,0 +1,54 @@
+#!/usr/bin/env python3
+import sys
+import json
+
+if len(sys.argv) != 2:
+    print("usage: ./this-script src-deps.json < WORKSPACE", file=sys.stderr)
+    print("Takes the bazel WORKSPACE file and reads all archives into a json dict (by evaling it as python code)", file=sys.stderr)
+    print("Hail Eris.", file=sys.stderr)
+    sys.exit(1)
+
+http_archives = []
+
+# just the kw args are the dict { name, sha256, urls … }
+def http_archive(**kw):
+    http_archives.append(kw)
+# like http_file
+def http_file(**kw):
+    http_archives.append(kw)
+
+# this is inverted from http_archive/http_file and bundles multiple archives
+def distdir_tar(**kw):
+    for archive_name in kw['archives']:
+        http_archives.append({
+            "name": archive_name,
+            "sha256": kw['sha256'][archive_name],
+            "urls": kw['urls'][archive_name]
+        })
+
+# TODO?
+def git_repository(**kw):
+    print(json.dumps(kw, sort_keys=True, indent=4), file=sys.stderr)
+    sys.exit(1)
+
+# execute the WORKSPACE like it was python code in this module,
+# using all the function stubs from above.
+exec(sys.stdin.read())
+
+# transform to a dict with the names as keys
+d = { el['name']: el for el in http_archives }
+
+def has_urls(el):
+    return ('url' in el and el['url']) or ('urls' in el and el['urls'])
+def has_sha256(el):
+    return 'sha256' in el and el['sha256']
+bad_archives = list(filter(lambda el: not has_urls(el) or not has_sha256(el), d.values()))
+if bad_archives:
+    print('Following bazel dependencies are missing url or sha256', file=sys.stderr)
+    print('Check bazel sources for master or non-checksummed dependencies', file=sys.stderr)
+    for el in bad_archives:
+        print(json.dumps(el, sort_keys=True, indent=4), file=sys.stderr)
+    sys.exit(1)
+
+with open(sys.argv[1], "w") as f:
+    print(json.dumps(d, sort_keys=True, indent=4), file=f)
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_5/actions_path.patch b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_5/actions_path.patch
new file mode 100644
index 000000000000..1fa1e5748333
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_5/actions_path.patch
@@ -0,0 +1,41 @@
+diff --git a/src/main/java/com/google/devtools/build/lib/exec/local/PosixLocalEnvProvider.java b/src/main/java/com/google/devtools/build/lib/exec/local/PosixLocalEnvProvider.java
+index 6fff2af..7e2877e 100644
+--- a/src/main/java/com/google/devtools/build/lib/exec/local/PosixLocalEnvProvider.java
++++ b/src/main/java/com/google/devtools/build/lib/exec/local/PosixLocalEnvProvider.java
+@@ -47,6 +47,16 @@ public final class PosixLocalEnvProvider implements LocalEnvProvider {
+       Map<String, String> env, BinTools binTools, String fallbackTmpDir) {
+     ImmutableMap.Builder<String, String> result = ImmutableMap.builder();
+     result.putAll(Maps.filterKeys(env, k -> !k.equals("TMPDIR")));
++
++    // In case we are running on NixOS.
++    // If bash is called with an unset PATH on this platform,
++    // it will set it to /no-such-path and default tools will be missings.
++    // See, https://github.com/NixOS/nixpkgs/issues/94222
++    // So we ensure that minimal dependencies are present.
++    if (!env.containsKey("PATH")){
++        result.put("PATH", "@actionsPathPatch@");
++    }
++ 
+     String p = clientEnv.get("TMPDIR");
+     if (Strings.isNullOrEmpty(p)) {
+       // Do not use `fallbackTmpDir`, use `/tmp` instead. This way if the user didn't export TMPDIR
+index 95642767c6..39d3c62461 100644
+--- a/src/main/java/com/google/devtools/build/lib/exec/local/XcodeLocalEnvProvider.java
++++ b/src/main/java/com/google/devtools/build/lib/exec/local/XcodeLocalEnvProvider.java
+@@ -74,6 +74,16 @@ public final class XcodeLocalEnvProvider implements LocalEnvProvider {
+
+     ImmutableMap.Builder<String, String> newEnvBuilder = ImmutableMap.builder();
+     newEnvBuilder.putAll(Maps.filterKeys(env, k -> !k.equals("TMPDIR")));
++
++    // In case we are running on NixOS.
++    // If bash is called with an unset PATH on this platform,
++    // it will set it to /no-such-path and default tools will be missings.
++    // See, https://github.com/NixOS/nixpkgs/issues/94222
++    // So we ensure that minimal dependencies are present.
++    if (!env.containsKey("PATH")){
++      newEnvBuilder.put("PATH", "@actionsPathPatch@");
++    }
++
+     String p = clientEnv.get("TMPDIR");
+     if (Strings.isNullOrEmpty(p)) {
+       // Do not use `fallbackTmpDir`, use `/tmp` instead. This way if the user didn't export TMPDIR
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_5/bazel_darwin_sandbox.patch b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_5/bazel_darwin_sandbox.patch
new file mode 100644
index 000000000000..725b901f893e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_5/bazel_darwin_sandbox.patch
@@ -0,0 +1,11 @@
+diff -ru a/src/main/native/unix_jni_darwin.cc b/src/main/native/unix_jni_darwin.cc
+--- a/src/main/native/unix_jni_darwin.cc	1980-01-01 00:00:00.000000000 -0500
++++ b/src/main/native/unix_jni_darwin.cc	2021-11-27 20:35:29.000000000 -0500
+@@ -270,6 +270,7 @@
+ }
+ 
+ void portable_start_suspend_monitoring() {
++  if (getenv("NIX_BUILD_TOP")) return;
+   static dispatch_once_t once_token;
+   static SuspendState suspend_state;
+   dispatch_once(&once_token, ^{
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_5/default.nix b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_5/default.nix
new file mode 100644
index 000000000000..5ef2a183fa0a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_5/default.nix
@@ -0,0 +1,661 @@
+{ stdenv, callPackage, lib, fetchurl, fetchpatch, fetchFromGitHub, installShellFiles
+, runCommand, runCommandCC, makeWrapper, recurseIntoAttrs
+# this package (through the fixpoint glass)
+, bazel_self
+, lr, xe, zip, unzip, bash, writeCBin, coreutils
+, which, gawk, gnused, gnutar, gnugrep, gzip, findutils
+# updater
+, python3, writeScript
+# Apple dependencies
+, cctools, libcxx, sigtool, CoreFoundation, CoreServices, Foundation
+# Allow to independently override the jdks used to build and run respectively
+, buildJdk, runJdk
+, runtimeShell
+# Always assume all markers valid (this is needed because we remove markers; they are non-deterministic).
+# Also, don't clean up environment variables (so that NIX_ environment variables are passed to compilers).
+, enableNixHacks ? false
+, gcc-unwrapped
+, autoPatchelfHook
+, file
+, substituteAll
+, writeTextFile
+}:
+
+let
+  version = "5.4.1";
+  sourceRoot = ".";
+
+  src = fetchurl {
+    url = "https://github.com/bazelbuild/bazel/releases/download/${version}/bazel-${version}-dist.zip";
+    hash = "sha256-3P9pNXVqp6yk/Fabsr0m4VN/Cx9tG9pfKyAPqDXMUH8=";
+  };
+
+  # Update with
+  # 1. export BAZEL_SELF=$(nix-build -A bazel_5)
+  # 2. update version and hash for sources above
+  # 3. `eval $(nix-build -A bazel_5.updater)`
+  # 4. add new dependencies from the dict in ./src-deps.json if required by failing build
+  srcDeps = lib.attrsets.attrValues srcDepsSet;
+  srcDepsSet =
+    let
+      srcs = lib.importJSON ./src-deps.json;
+      toFetchurl = d: lib.attrsets.nameValuePair d.name (fetchurl {
+        urls = d.urls;
+        sha256 = d.sha256;
+        });
+        in builtins.listToAttrs (map toFetchurl [
+      srcs.desugar_jdk_libs
+      srcs.io_bazel_skydoc
+      srcs.bazel_skylib
+      srcs.bazelci_rules
+      srcs.io_bazel_rules_sass
+      srcs.platforms
+      srcs."remote_java_tools_for_testing"
+      srcs."coverage_output_generator-v2.5.zip"
+      srcs.build_bazel_rules_nodejs
+      srcs."android_tools_pkg-0.23.0.tar.gz"
+      srcs.bazel_toolchains
+      srcs.com_github_grpc_grpc
+      srcs.upb
+      srcs.com_google_protobuf
+      srcs.rules_pkg
+      srcs.rules_cc
+      srcs.rules_java
+      srcs.rules_proto
+      srcs.com_google_absl
+      srcs.com_googlesource_code_re2
+      srcs.com_github_cares_cares
+      ]);
+
+  distDir = runCommand "bazel-deps" {} ''
+    mkdir -p $out
+    for i in ${builtins.toString srcDeps}; do cp $i $out/$(stripHash $i); done
+  '';
+
+  defaultShellUtils =
+    # Keep this list conservative. For more exotic tools, prefer to use
+    # @rules_nixpkgs to pull in tools from the nix repository. Example:
+    #
+    # WORKSPACE:
+    #
+    #     nixpkgs_git_repository(
+    #         name = "nixpkgs",
+    #         revision = "def5124ec8367efdba95a99523dd06d918cb0ae8",
+    #     )
+    #
+    #     # This defines an external Bazel workspace.
+    #     nixpkgs_package(
+    #         name = "bison",
+    #         repositories = { "nixpkgs": "@nixpkgs//:default.nix" },
+    #     )
+    #
+    # some/BUILD.bazel:
+    #
+    #     genrule(
+    #        ...
+    #        cmd = "$(location @bison//:bin/bison) -other -args",
+    #        tools = [
+    #            ...
+    #            "@bison//:bin/bison",
+    #        ],
+    #     )
+    [
+      bash
+      coreutils
+      file
+      findutils
+      gawk
+      gnugrep
+      gnused
+      gnutar
+      gzip
+      python3
+      unzip
+      which
+      zip
+    ];
+
+  defaultShellPath = lib.makeBinPath defaultShellUtils;
+
+  platforms = lib.platforms.linux ++ lib.platforms.darwin;
+
+  system = if stdenv.hostPlatform.isDarwin then "darwin" else "linux";
+
+  # on aarch64 Darwin, `uname -m` returns "arm64"
+  arch = with stdenv.hostPlatform; if isDarwin && isAarch64 then "arm64" else parsed.cpu.name;
+
+  bazelRC = writeTextFile {
+    name = "bazel-rc";
+    text = ''
+      startup --server_javabase=${runJdk}
+
+      # Can't use 'common'; https://github.com/bazelbuild/bazel/issues/3054
+      # Most commands inherit from 'build' anyway.
+      build --distdir=${distDir}
+      fetch --distdir=${distDir}
+      query --distdir=${distDir}
+
+      build --extra_toolchains=@bazel_tools//tools/jdk:nonprebuilt_toolchain_definition
+      build --tool_java_runtime_version=local_jdk_11
+      build --java_runtime_version=local_jdk_11
+
+      # load default location for the system wide configuration
+      try-import /etc/bazel.bazelrc
+    '';
+  };
+
+in
+stdenv.mkDerivation rec {
+  pname = "bazel";
+  inherit version;
+
+  meta = with lib; {
+    homepage = "https://github.com/bazelbuild/bazel/";
+    description = "Build tool that builds code quickly and reliably";
+    sourceProvenance = with sourceTypes; [
+      fromSource
+      binaryBytecode  # source bundles dependencies as jars
+    ];
+    license = licenses.asl20;
+    maintainers = lib.teams.bazel.members;
+    inherit platforms;
+  };
+
+  inherit src;
+  inherit sourceRoot;
+  patches = [
+    ./upb-clang16.patch
+
+    # On Darwin, the last argument to gcc is coming up as an empty string. i.e: ''
+    # This is breaking the build of any C target. This patch removes the last
+    # argument if it's found to be an empty string.
+    ../trim-last-argument-to-gcc-if-empty.patch
+
+    # On Darwin, using clang 6 to build fails because of a linker error (see #105573),
+    # but using clang 7 fails because libarclite_macosx.a cannot be found when linking
+    # the xcode_locator tool.
+    # This patch removes using the -fobjc-arc compiler option and makes the code
+    # compile without automatic reference counting. Caveat: this leaks memory, but
+    # we accept this fact because xcode_locator is only a short-lived process used during the build.
+    (substituteAll {
+      src = ./no-arc.patch;
+      multiBinPatch = if stdenv.hostPlatform.system == "aarch64-darwin" then "arm64" else "x86_64";
+    })
+
+    # --experimental_strict_action_env (which may one day become the default
+    # see bazelbuild/bazel#2574) hardcodes the default
+    # action environment to a non hermetic value (e.g. "/usr/local/bin").
+    # This is non hermetic on non-nixos systems. On NixOS, bazel cannot find the required binaries.
+    # So we are replacing this bazel paths by defaultShellPath,
+    # improving hermeticity and making it work in nixos.
+    (substituteAll {
+      src = ../strict_action_env.patch;
+      strictActionEnvPatch = defaultShellPath;
+    })
+
+    (substituteAll {
+      src = ./actions_path.patch;
+      actionsPathPatch = defaultShellPath;
+    })
+
+    # bazel reads its system bazelrc in /etc
+    # override this path to a builtin one
+    (substituteAll {
+      src = ../bazel_rc.patch;
+      bazelSystemBazelRCPath = bazelRC;
+    })
+
+    # disable suspend detection during a build inside Nix as this is
+    # not available inside the darwin sandbox
+    ./bazel_darwin_sandbox.patch
+  ] ++ lib.optional enableNixHacks ../nix-hacks.patch;
+
+
+  # Additional tests that check bazel’s functionality. Execute
+  #
+  #     nix-build . -A bazel_5.tests
+  #
+  # in the nixpkgs checkout root to exercise them locally.
+  passthru.tests =
+    let
+      runLocal = name: attrs: script:
+      let
+        attrs' = removeAttrs attrs [ "buildInputs" ];
+        buildInputs = attrs.buildInputs or [];
+      in
+      runCommandCC name ({
+        inherit buildInputs;
+        preferLocalBuild = true;
+        meta.platforms = platforms;
+      } // attrs') script;
+
+      # bazel wants to extract itself into $install_dir/install every time it runs,
+      # so let’s do that only once.
+      extracted = bazelPkg:
+        let install_dir =
+          # `install_base` field printed by `bazel info`, minus the hash.
+          # yes, this path is kinda magic. Sorry.
+          "$HOME/.cache/bazel/_bazel_nixbld";
+        in runLocal "bazel-extracted-homedir" { passthru.install_dir = install_dir; } ''
+            export HOME=$(mktemp -d)
+            touch WORKSPACE # yeah, everything sucks
+            install_base="$(${bazelPkg}/bin/bazel info | grep install_base)"
+            # assert it’s actually below install_dir
+            [[ "$install_base" =~ ${install_dir} ]] \
+              || (echo "oh no! $install_base but we are \
+            trying to copy ${install_dir} to $out instead!"; exit 1)
+            cp -R ${install_dir} $out
+          '';
+
+      bazelTest = { name, bazelScript, workspaceDir, bazelPkg, buildInputs ? [] }:
+        let
+          be = extracted bazelPkg;
+        in runLocal name { inherit buildInputs; } (
+          # skip extraction caching on Darwin, because nobody knows how Darwin works
+          (lib.optionalString (!stdenv.hostPlatform.isDarwin) ''
+            # set up home with pre-unpacked bazel
+            export HOME=$(mktemp -d)
+            mkdir -p ${be.install_dir}
+            cp -R ${be}/install ${be.install_dir}
+
+            # https://stackoverflow.com/questions/47775668/bazel-how-to-skip-corrupt-installation-on-centos6
+            # Bazel checks whether the mtime of the install dir files
+            # is >9 years in the future, otherwise it extracts itself again.
+            # see PosixFileMTime::IsUntampered in src/main/cpp/util
+            # What the hell bazel.
+            ${lr}/bin/lr -0 -U ${be.install_dir} | ${xe}/bin/xe -N0 -0 touch --date="9 years 6 months" {}
+          '')
+          +
+          ''
+            # Note https://github.com/bazelbuild/bazel/issues/5763#issuecomment-456374609
+            # about why to create a subdir for the workspace.
+            cp -r ${workspaceDir} wd && chmod u+w wd && cd wd
+
+            ${bazelScript}
+
+            touch $out
+          '');
+
+      bazelWithNixHacks = bazel_self.override { enableNixHacks = true; };
+
+      bazel-examples = fetchFromGitHub {
+        owner = "bazelbuild";
+        repo = "examples";
+        rev = "4183fc709c26a00366665e2d60d70521dc0b405d";
+        sha256 = "1mm4awx6sa0myiz9j4hwp71rpr7yh8vihf3zm15n2ii6xb82r31k";
+      };
+
+    in (lib.optionalAttrs (!stdenv.hostPlatform.isDarwin) {
+      # `extracted` doesn’t work on darwin
+      shebang = callPackage ../shebang-test.nix { inherit runLocal extracted bazelTest distDir; bazel = bazel_self;};
+    }) // {
+      bashTools = callPackage ../bash-tools-test.nix { inherit runLocal bazelTest distDir; bazel = bazel_self;};
+      cpp = callPackage ../cpp-test.nix { inherit runLocal bazelTest bazel-examples distDir; bazel = bazel_self;};
+      java = callPackage ../java-test.nix { inherit runLocal bazelTest bazel-examples distDir; bazel = bazel_self;};
+      protobuf = callPackage ../protobuf-test.nix { inherit runLocal bazelTest distDir; bazel = bazel_self; };
+      pythonBinPath = callPackage ../python-bin-path-test.nix { inherit runLocal bazelTest distDir; bazel = bazel_self;};
+
+      bashToolsWithNixHacks = callPackage ../bash-tools-test.nix { inherit runLocal bazelTest distDir; bazel = bazelWithNixHacks; };
+
+      cppWithNixHacks = callPackage ../cpp-test.nix { inherit runLocal bazelTest bazel-examples distDir; bazel = bazelWithNixHacks; };
+      javaWithNixHacks = callPackage ../java-test.nix { inherit runLocal bazelTest bazel-examples distDir; bazel = bazelWithNixHacks; };
+      protobufWithNixHacks = callPackage ../protobuf-test.nix { inherit runLocal bazelTest distDir; bazel = bazelWithNixHacks; };
+      pythonBinPathWithNixHacks = callPackage ../python-bin-path-test.nix { inherit runLocal bazelTest distDir; bazel = bazelWithNixHacks; };
+    };
+
+  src_for_updater = stdenv.mkDerivation rec {
+    name = "updater-sources";
+    inherit src;
+    nativeBuildInputs = [ unzip ];
+    inherit sourceRoot;
+    installPhase = ''
+      runHook preInstall
+
+      cp -r . "$out"
+
+      runHook postInstall
+    '';
+  };
+  # update the list of workspace dependencies
+  passthru.updater = writeScript "update-bazel-deps.sh" ''
+    #!${runtimeShell}
+    (cd "${src_for_updater}" &&
+        BAZEL_USE_CPP_ONLY_TOOLCHAIN=1 \
+        "$BAZEL_SELF"/bin/bazel \
+            query 'kind(http_archive, //external:*) + kind(http_file, //external:*) + kind(distdir_tar, //external:*) + kind(git_repository, //external:*)' \
+            --loading_phase_threads=1 \
+            --output build) \
+    | "${python3}"/bin/python3 "${./update-srcDeps.py}" \
+      "${builtins.toString ./src-deps.json}"
+  '';
+
+  # Necessary for the tests to pass on Darwin with sandbox enabled.
+  # Bazel starts a local server and needs to bind a local address.
+  __darwinAllowLocalNetworking = true;
+
+  postPatch = let
+
+    darwinPatches = ''
+      bazelLinkFlags () {
+        eval set -- "$NIX_LDFLAGS"
+        local flag
+        for flag in "$@"; do
+          printf ' -Wl,%s' "$flag"
+        done
+      }
+
+      # Disable Bazel's Xcode toolchain detection which would configure compilers
+      # and linkers from Xcode instead of from PATH
+      export BAZEL_USE_CPP_ONLY_TOOLCHAIN=1
+
+      # Explicitly configure gcov since we don't have it on Darwin, so autodetection fails
+      export GCOV=${coreutils}/bin/false
+
+      # Framework search paths aren't added by bintools hook
+      # https://github.com/NixOS/nixpkgs/pull/41914
+      export NIX_LDFLAGS+=" -F${CoreFoundation}/Library/Frameworks -F${CoreServices}/Library/Frameworks -F${Foundation}/Library/Frameworks"
+
+      # libcxx includes aren't added by libcxx hook
+      # https://github.com/NixOS/nixpkgs/pull/41589
+      export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -isystem ${lib.getDev libcxx}/include/c++/v1"
+      # for CLang 16 compatibility in external/{absl,upb} dependencies and in execlog
+      export NIX_CFLAGS_COMPILE+=" -Wno-deprecated-builtins -Wno-gnu-offsetof-extensions -Wno-implicit-function-declaration"
+
+      # don't use system installed Xcode to run clang, use Nix clang instead
+      sed -i -E "s;/usr/bin/xcrun (--sdk macosx )?clang;${stdenv.cc}/bin/clang $NIX_CFLAGS_COMPILE $(bazelLinkFlags) -framework CoreFoundation;g" \
+        scripts/bootstrap/compile.sh \
+        tools/osx/BUILD
+
+      substituteInPlace scripts/bootstrap/compile.sh --replace ' -mmacosx-version-min=10.9' ""
+
+      # nixpkgs's libSystem cannot use pthread headers directly, must import GCD headers instead
+      sed -i -e "/#include <pthread\/spawn.h>/i #include <dispatch/dispatch.h>" src/main/cpp/blaze_util_darwin.cc
+
+      # clang installed from Xcode has a compatibility wrapper that forwards
+      # invocations of gcc to clang, but vanilla clang doesn't
+      sed -i -e 's;_find_generic(repository_ctx, "gcc", "CC", overriden_tools);_find_generic(repository_ctx, "clang", "CC", overriden_tools);g' tools/cpp/unix_cc_configure.bzl
+      sed -i -e 's;env -i codesign --identifier $@ --force --sign;env -i CODESIGN_ALLOCATE=${cctools}/bin/${cctools.targetPrefix}codesign_allocate ${sigtool}/bin/codesign --identifier $@ --force -s;g' tools/osx/BUILD
+      sed -i -e 's;"/usr/bin/libtool";_find_generic(repository_ctx, "libtool", "LIBTOOL", overriden_tools);g' tools/cpp/unix_cc_configure.bzl
+      wrappers=( tools/cpp/osx_cc_wrapper.sh tools/cpp/osx_cc_wrapper.sh.tpl )
+      for wrapper in "''${wrappers[@]}"; do
+        sed -i -e "s,/usr/bin/gcc,${stdenv.cc}/bin/clang,g" $wrapper
+        sed -i -e "s,/usr/bin/install_name_tool,${cctools}/bin/install_name_tool,g" $wrapper
+      done
+    '';
+
+    genericPatches = ''
+      # Substitute j2objc and objc wrapper's python shebang to plain python path.
+      substituteInPlace tools/j2objc/j2objc_header_map.py --replace "$!/usr/bin/python2.7" "#!${python3.interpreter}"
+      substituteInPlace tools/j2objc/j2objc_wrapper.py --replace "$!/usr/bin/python2.7" "#!${python3.interpreter}"
+      substituteInPlace tools/objc/j2objc_dead_code_pruner.py --replace "$!/usr/bin/python2.7" "#!${python3.interpreter}"
+
+      # md5sum is part of coreutils
+      sed -i 's|/sbin/md5|md5sum|g' \
+        src/BUILD third_party/ijar/test/testenv.sh tools/objc/libtool.sh
+
+      # replace initial value of pythonShebang variable in BazelPythonSemantics.java
+      substituteInPlace src/main/java/com/google/devtools/build/lib/bazel/rules/python/BazelPythonSemantics.java \
+        --replace '"#!/usr/bin/env " + pythonExecutableName' "\"#!${python3}/bin/python\""
+
+      substituteInPlace src/main/java/com/google/devtools/build/lib/starlarkbuildapi/python/PyRuntimeInfoApi.java \
+        --replace '"#!/usr/bin/env python3"' "\"#!${python3}/bin/python\""
+
+      # substituteInPlace is rather slow, so prefilter the files with grep
+      grep -rlZ /bin/ src/main/java/com/google/devtools | while IFS="" read -r -d "" path; do
+        # If you add more replacements here, you must change the grep above!
+        # Only files containing /bin are taken into account.
+        substituteInPlace "$path" \
+          --replace /bin/bash ${bash}/bin/bash \
+          --replace "/usr/bin/env bash" ${bash}/bin/bash \
+          --replace "/usr/bin/env python" ${python3}/bin/python \
+          --replace /usr/bin/env ${coreutils}/bin/env \
+          --replace /bin/true ${coreutils}/bin/true
+      done
+
+      grep -rlZ /bin/ tools/python | while IFS="" read -r -d "" path; do
+        substituteInPlace "$path" \
+          --replace "/usr/bin/env python2" ${python3.interpreter} \
+          --replace "/usr/bin/env python3" ${python3}/bin/python \
+          --replace /usr/bin/env ${coreutils}/bin/env
+      done
+
+      # bazel test runner include references to /bin/bash
+      substituteInPlace tools/build_rules/test_rules.bzl \
+        --replace /bin/bash ${bash}/bin/bash
+
+      for i in $(find tools/cpp/ -type f)
+      do
+        substituteInPlace $i \
+          --replace /bin/bash ${bash}/bin/bash
+      done
+
+      # Fixup scripts that generate scripts. Not fixed up by patchShebangs below.
+      substituteInPlace scripts/bootstrap/compile.sh \
+          --replace /bin/bash ${bash}/bin/bash
+
+      # add nix environment vars to .bazelrc
+      cat >> .bazelrc <<EOF
+      # Limit the resources Bazel is allowed to use during the build to 1/2 the
+      # available RAM and 3/4 the available CPU cores. This should help avoid
+      # overwhelming the build machine.
+      build --local_ram_resources=HOST_RAM*.5
+      build --local_cpu_resources=HOST_CPUS*.75
+
+      build --distdir=${distDir}
+      fetch --distdir=${distDir}
+      build --copt="$(echo $NIX_CFLAGS_COMPILE | sed -e 's/ /" --copt="/g')"
+      build --host_copt="$(echo $NIX_CFLAGS_COMPILE | sed -e 's/ /" --host_copt="/g')"
+      build --linkopt="$(echo $(< ${stdenv.cc}/nix-support/libcxx-ldflags) | sed -e 's/ /" --linkopt="/g')"
+      build --host_linkopt="$(echo $(< ${stdenv.cc}/nix-support/libcxx-ldflags) | sed -e 's/ /" --host_linkopt="/g')"
+      build --linkopt="-Wl,$(echo $NIX_LDFLAGS | sed -e 's/ /" --linkopt="-Wl,/g')"
+      build --host_linkopt="-Wl,$(echo $NIX_LDFLAGS | sed -e 's/ /" --host_linkopt="-Wl,/g')"
+      build --extra_toolchains=@bazel_tools//tools/jdk:nonprebuilt_toolchain_definition
+      build --verbose_failures
+      build --curses=no
+      build --features=-layering_check
+      EOF
+
+      cat >> tools/jdk/BUILD.tools <<EOF
+      load("@bazel_tools//tools/jdk:default_java_toolchain.bzl", "default_java_toolchain", "NONPREBUILT_TOOLCHAIN_CONFIGURATION")
+      default_java_toolchain(
+        name = "nonprebuilt_toolchain",
+        configuration = NONPREBUILT_TOOLCHAIN_CONFIGURATION,
+        java_runtime = "@local_jdk//:jdk",
+      )
+      EOF
+
+      cat >> third_party/grpc/bazel_1.41.0.patch <<EOF
+      diff --git a/third_party/grpc/BUILD b/third_party/grpc/BUILD
+      index 39ee9f97c6..9128d20c85 100644
+      --- a/third_party/grpc/BUILD
+      +++ b/third_party/grpc/BUILD
+      @@ -28,7 +28,6 @@ licenses(["notice"])
+       package(
+           default_visibility = ["//visibility:public"],
+           features = [
+      -        "layering_check",
+               "-parse_headers",
+           ],
+       )
+      EOF
+
+      # add the same environment vars to compile.sh
+      sed -e "/\$command \\\\$/a --copt=\"$(echo $NIX_CFLAGS_COMPILE | sed -e 's/ /" --copt=\"/g')\" \\\\" \
+          -e "/\$command \\\\$/a --host_copt=\"$(echo $NIX_CFLAGS_COMPILE | sed -e 's/ /" --host_copt=\"/g')\" \\\\" \
+          -e "/\$command \\\\$/a --linkopt=\"$(echo $(< ${stdenv.cc}/nix-support/libcxx-ldflags) | sed -e 's/ /" --linkopt=\"/g')\" \\\\" \
+          -e "/\$command \\\\$/a --host_linkopt=\"$(echo $(< ${stdenv.cc}/nix-support/libcxx-ldflags) | sed -e 's/ /" --host_linkopt=\"/g')\" \\\\" \
+          -e "/\$command \\\\$/a --linkopt=\"-Wl,$(echo $NIX_LDFLAGS | sed -e 's/ /" --linkopt=\"-Wl,/g')\" \\\\" \
+          -e "/\$command \\\\$/a --host_linkopt=\"-Wl,$(echo $NIX_LDFLAGS | sed -e 's/ /" --host_linkopt=\"-Wl,/g')\" \\\\" \
+          -e "/\$command \\\\$/a --tool_java_runtime_version=local_jdk_11 \\\\" \
+          -e "/\$command \\\\$/a --java_runtime_version=local_jdk_11 \\\\" \
+          -e "/\$command \\\\$/a --verbose_failures \\\\" \
+          -e "/\$command \\\\$/a --curses=no \\\\" \
+          -e "/\$command \\\\$/a --features=-layering_check \\\\" \
+          -i scripts/bootstrap/compile.sh
+
+      # This is necessary to avoid:
+      # "error: no visible @interface for 'NSDictionary' declares the selector
+      # 'initWithContentsOfURL:error:'"
+      # This can be removed when the apple_sdk is upgraded beyond 10.13+
+      sed -i '/initWithContentsOfURL:versionPlistUrl/ {
+        N
+        s/error:nil\];/\];/
+      }' tools/osx/xcode_locator.m
+
+      # append the PATH with defaultShellPath in tools/bash/runfiles/runfiles.bash
+      echo "PATH=\$PATH:${defaultShellPath}" >> runfiles.bash.tmp
+      cat tools/bash/runfiles/runfiles.bash >> runfiles.bash.tmp
+      mv runfiles.bash.tmp tools/bash/runfiles/runfiles.bash
+
+      patchShebangs .
+    '';
+    in lib.optionalString stdenv.hostPlatform.isDarwin darwinPatches
+     + genericPatches;
+
+  buildInputs = [buildJdk] ++ defaultShellUtils;
+
+  # when a command can’t be found in a bazel build, you might also
+  # need to add it to `defaultShellPath`.
+  nativeBuildInputs = [
+    installShellFiles
+    makeWrapper
+    python3
+    unzip
+    which
+    zip
+    python3.pkgs.absl-py   # Needed to build fish completion
+  ] ++ lib.optionals (stdenv.isDarwin) [ cctools libcxx CoreFoundation CoreServices Foundation ];
+
+  # Bazel makes extensive use of symlinks in the WORKSPACE.
+  # This causes problems with infinite symlinks if the build output is in the same location as the
+  # Bazel WORKSPACE. This is why before executing the build, the source code is moved into a
+  # subdirectory.
+  # Failing to do this causes "infinite symlink expansion detected"
+  preBuildPhases = ["preBuildPhase"];
+  preBuildPhase = ''
+    mkdir bazel_src
+    shopt -s dotglob extglob
+    mv !(bazel_src) bazel_src
+  '';
+  buildPhase = ''
+    runHook preBuild
+
+    # Increasing memory during compilation might be necessary.
+    # export BAZEL_JAVAC_OPTS="-J-Xmx2g -J-Xms200m"
+
+    # If EMBED_LABEL isn't set, it'd be auto-detected from CHANGELOG.md
+    # and `git rev-parse --short HEAD` which would result in
+    # "3.7.0- (@non-git)" due to non-git build and incomplete changelog.
+    # Actual bazel releases use scripts/release/common.sh which is based
+    # on branch/tag information which we don't have with tarball releases.
+    # Note that .bazelversion is always correct and is based on bazel-*
+    # executable name, version checks should work fine
+    export EMBED_LABEL="${version}- (@non-git)"
+    ${bash}/bin/bash ./bazel_src/compile.sh
+    ./bazel_src/scripts/generate_bash_completion.sh \
+        --bazel=./bazel_src/output/bazel \
+        --output=./bazel_src/output/bazel-complete.bash \
+        --prepend=./bazel_src/scripts/bazel-complete-header.bash \
+        --prepend=./bazel_src/scripts/bazel-complete-template.bash
+    ${python3}/bin/python3 ./bazel_src/scripts/generate_fish_completion.py \
+        --bazel=./bazel_src/output/bazel \
+        --output=./bazel_src/output/bazel-complete.fish
+
+    # need to change directory for bazel to find the workspace
+    cd ./bazel_src
+    # build execlog tooling
+    export HOME=$(mktemp -d)
+    ./output/bazel build  src/tools/execlog:parser_deploy.jar
+    cd -
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+
+    # official wrapper scripts that searches for $WORKSPACE_ROOT/tools/bazel
+    # if it can’t find something in tools, it calls $out/bin/bazel-{version}-{os_arch}
+    # The binary _must_ exist with this naming if your project contains a .bazelversion
+    # file.
+    cp ./bazel_src/scripts/packages/bazel.sh $out/bin/bazel
+    wrapProgram $out/bin/bazel $wrapperfile --suffix PATH : ${defaultShellPath}
+    mv ./bazel_src/output/bazel $out/bin/bazel-${version}-${system}-${arch}
+
+    mkdir $out/share
+    cp ./bazel_src/bazel-bin/src/tools/execlog/parser_deploy.jar $out/share/parser_deploy.jar
+    cat <<EOF > $out/bin/bazel-execlog
+    #!${runtimeShell} -e
+    ${runJdk}/bin/java -jar $out/share/parser_deploy.jar \$@
+    EOF
+    chmod +x $out/bin/bazel-execlog
+
+    # shell completion files
+    installShellCompletion --bash \
+      --name bazel.bash \
+      ./bazel_src/output/bazel-complete.bash
+    installShellCompletion --zsh \
+      --name _bazel \
+      ./bazel_src/scripts/zsh_completion/_bazel
+    installShellCompletion --fish \
+      --name bazel.fish \
+      ./bazel_src/output/bazel-complete.fish
+  '';
+
+  # Install check fails on `aarch64-darwin`
+  # https://github.com/NixOS/nixpkgs/issues/145587
+  doInstallCheck = stdenv.hostPlatform.system != "aarch64-darwin";
+  installCheckPhase = ''
+    export TEST_TMPDIR=$(pwd)
+
+    hello_test () {
+      $out/bin/bazel test \
+        --test_output=errors \
+        examples/cpp:hello-success_test \
+        examples/java-native/src/test/java/com/example/myproject:hello
+    }
+
+    cd ./bazel_src
+    rm .bazelversion # this doesn't necessarily match the version we built
+
+    # test whether $WORKSPACE_ROOT/tools/bazel works
+
+    mkdir -p tools
+    cat > tools/bazel <<"EOF"
+    #!${runtimeShell} -e
+    exit 1
+    EOF
+    chmod +x tools/bazel
+
+    # first call should fail if tools/bazel is used
+    ! hello_test
+
+    cat > tools/bazel <<"EOF"
+    #!${runtimeShell} -e
+    exec "$BAZEL_REAL" "$@"
+    EOF
+
+    # second call succeeds because it defers to $out/bin/bazel-{version}-{os_arch}
+    hello_test
+
+    runHook postInstall
+  '';
+
+  # Save paths to hardcoded dependencies so Nix can detect them.
+  # This is needed because the templates get tar’d up into a .jar.
+  postFixup = ''
+    mkdir -p $out/nix-support
+    echo "${defaultShellPath}" >> $out/nix-support/depends
+    # The string literal specifying the path to the bazel-rc file is sometimes
+    # stored non-contiguously in the binary due to gcc optimisations, which leads
+    # Nix to miss the hash when scanning for dependencies
+    echo "${bazelRC}" >> $out/nix-support/depends
+  '' + lib.optionalString stdenv.isDarwin ''
+    echo "${cctools}" >> $out/nix-support/depends
+  '';
+
+  dontStrip = true;
+  dontPatchELF = true;
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_5/no-arc.patch b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_5/no-arc.patch
new file mode 100644
index 000000000000..e7a4498839dc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_5/no-arc.patch
@@ -0,0 +1,42 @@
+diff --git a/tools/osx/BUILD b/tools/osx/BUILD
+index 990afe3e8c..cd5b7b1b7a 100644
+--- a/tools/osx/BUILD
++++ b/tools/osx/BUILD
+@@ -28,8 +28,8 @@ exports_files([
+ ])
+ 
+ DARWIN_XCODE_LOCATOR_COMPILE_COMMAND = """
+-  /usr/bin/xcrun --sdk macosx clang -mmacosx-version-min=10.13 -fobjc-arc -framework CoreServices \
+-      -framework Foundation -arch arm64 -arch x86_64 -Wl,-no_adhoc_codesign -Wl,-no_uuid -o $@ $< && \
++  /usr/bin/xcrun --sdk macosx clang -mmacosx-version-min=10.13 -framework CoreServices \
++      -framework Foundation -arch @multiBinPatch@ -Wl,-no_uuid -o $@ $< && \
+   env -i codesign --identifier $@ --force --sign - $@
+ """
+ 
+diff --git a/tools/osx/xcode_configure.bzl b/tools/osx/xcode_configure.bzl
+index 2b819f07ec..a98ce37673 100644
+--- a/tools/osx/xcode_configure.bzl
++++ b/tools/osx/xcode_configure.bzl
+@@ -127,7 +127,6 @@ def run_xcode_locator(repository_ctx, xcode_locator_src_label):
+         "macosx",
+         "clang",
+         "-mmacosx-version-min=10.13",
+-        "-fobjc-arc",
+         "-framework",
+         "CoreServices",
+         "-framework",
+diff --git a/tools/osx/xcode_locator.m b/tools/osx/xcode_locator.m
+index ed2ef87453..e0ce6dbdd1 100644
+--- a/tools/osx/xcode_locator.m
++++ b/tools/osx/xcode_locator.m
+@@ -21,10 +21,6 @@
+ // 6,6.4,6.4.1 = 6.4.1
+ // 6.3,6.3.0 = 6.3
+ 
+-#if !defined(__has_feature) || !__has_feature(objc_arc)
+-#error "This file requires ARC support."
+-#endif
+-
+ #import <CoreServices/CoreServices.h>
+ #import <Foundation/Foundation.h>
+ 
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_5/src-deps.json b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_5/src-deps.json
new file mode 100644
index 000000000000..042c06ed74d7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_5/src-deps.json
@@ -0,0 +1,2160 @@
+{
+    "1.25.0.zip": {
+        "name": "1.25.0.zip",
+        "sha256": "c78be58f5e0a29a04686b628cf54faaee0094322ae0ac99da5a8a8afca59a647",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_sass/archive/1.25.0.zip",
+            "https://github.com/bazelbuild/rules_sass/archive/1.25.0.zip"
+        ]
+    },
+    "1ef781ced3b1443dca3ed05dec1989eca1a4e1cd.tar.gz": {
+        "name": "1ef781ced3b1443dca3ed05dec1989eca1a4e1cd.tar.gz",
+        "sha256": "5a725b777976b77aa122b707d1b6f0f39b6020f66cd427bb111a585599c857b1",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/stardoc/archive/1ef781ced3b1443dca3ed05dec1989eca1a4e1cd.tar.gz",
+            "https://github.com/bazelbuild/stardoc/archive/1ef781ced3b1443dca3ed05dec1989eca1a4e1cd.tar.gz"
+        ]
+    },
+    "20211102.0.tar.gz": {
+        "name": "20211102.0.tar.gz",
+        "sha256": "dcf71b9cba8dc0ca9940c4b316a0c796be8fab42b070bb6b7cab62b48f0e66c4",
+        "urls": [
+            "https://mirror.bazel.build/github.com/abseil/abseil-cpp/archive/refs/tags/20211102.0.tar.gz",
+            "https://github.com/abseil/abseil-cpp/archive/refs/tags/20211102.0.tar.gz"
+        ]
+    },
+    "2de300726a1ba2de9a468468dc5ff9ed17a3215f.tar.gz": {
+        "name": "2de300726a1ba2de9a468468dc5ff9ed17a3215f.tar.gz",
+        "sha256": "6a5f67874af66b239b709c572ac1a5a00fdb1b29beaf13c3e6f79b1ba10dc7c4",
+        "urls": [
+            "https://mirror.bazel.build/github.com/protocolbuffers/upb/archive/2de300726a1ba2de9a468468dc5ff9ed17a3215f.tar.gz",
+            "https://github.com/protocolbuffers/upb/archive/2de300726a1ba2de9a468468dc5ff9ed17a3215f.tar.gz"
+        ]
+    },
+    "5847d6a06302136d95a14b4cbd4b55a9c9f1436e.zip": {
+        "name": "5847d6a06302136d95a14b4cbd4b55a9c9f1436e.zip",
+        "sha256": "299452e6f4a4981b2e6d22357f7332713382a63e4c137f5fd6b89579f6d610cb",
+        "urls": [
+            "https://mirror.bazel.build/github.com/google/desugar_jdk_libs/archive/5847d6a06302136d95a14b4cbd4b55a9c9f1436e.zip",
+            "https://github.com/google/desugar_jdk_libs/archive/5847d6a06302136d95a14b4cbd4b55a9c9f1436e.zip"
+        ]
+    },
+    "7cf3cefd652008d0a64a419c34c13bdca6c8f178.zip": {
+        "name": "7cf3cefd652008d0a64a419c34c13bdca6c8f178.zip",
+        "sha256": "bc81f1ba47ef5cc68ad32225c3d0e70b8c6f6077663835438da8d5733f917598",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_java/archive/7cf3cefd652008d0a64a419c34c13bdca6c8f178.zip",
+            "https://github.com/bazelbuild/rules_java/archive/7cf3cefd652008d0a64a419c34c13bdca6c8f178.zip"
+        ]
+    },
+    "7e4afce6fe62dbff0a4a03450143146f9f2d7488.tar.gz": {
+        "name": "7e4afce6fe62dbff0a4a03450143146f9f2d7488.tar.gz",
+        "sha256": "8e7d59a5b12b233be5652e3d29f42fba01c7cbab09f6b3a8d0a57ed6d1e9a0da",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_proto/archive/7e4afce6fe62dbff0a4a03450143146f9f2d7488.tar.gz",
+            "https://github.com/bazelbuild/rules_proto/archive/7e4afce6fe62dbff0a4a03450143146f9f2d7488.tar.gz"
+        ]
+    },
+    "aecba11114cf1fac5497aeb844b6966106de3eb6.tar.gz": {
+        "name": "aecba11114cf1fac5497aeb844b6966106de3eb6.tar.gz",
+        "sha256": "9f385e146410a8150b6f4cb1a57eab7ec806ced48d427554b1e754877ff26c3e",
+        "urls": [
+            "https://mirror.bazel.build/github.com/google/re2/archive/aecba11114cf1fac5497aeb844b6966106de3eb6.tar.gz",
+            "https://github.com/google/re2/archive/aecba11114cf1fac5497aeb844b6966106de3eb6.tar.gz"
+        ]
+    },
+    "android_tools": {
+        "name": "android_tools",
+        "sha256": "ed5290594244c2eeab41f0104519bcef51e27c699ff4b379fcbd25215270513e",
+        "url": "https://mirror.bazel.build/bazel_android_tools/android_tools_pkg-0.23.0.tar.gz"
+    },
+    "android_tools_for_testing": {
+        "name": "android_tools_for_testing",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "ed5290594244c2eeab41f0104519bcef51e27c699ff4b379fcbd25215270513e",
+        "url": "https://mirror.bazel.build/bazel_android_tools/android_tools_pkg-0.23.0.tar.gz"
+    },
+    "android_tools_pkg-0.23.0.tar.gz": {
+        "name": "android_tools_pkg-0.23.0.tar.gz",
+        "sha256": "ed5290594244c2eeab41f0104519bcef51e27c699ff4b379fcbd25215270513e",
+        "urls": [
+            "https://mirror.bazel.build/bazel_android_tools/android_tools_pkg-0.23.0.tar.gz"
+        ]
+    },
+    "b1c40e1de81913a3c40e5948f78719c28152486d.zip": {
+        "name": "b1c40e1de81913a3c40e5948f78719c28152486d.zip",
+        "sha256": "d0c573b94a6ef20ef6ff20154a23d0efcb409fb0e1ff0979cec318dfe42f0cdd",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_cc/archive/b1c40e1de81913a3c40e5948f78719c28152486d.zip",
+            "https://github.com/bazelbuild/rules_cc/archive/b1c40e1de81913a3c40e5948f78719c28152486d.zip"
+        ]
+    },
+    "bazel-skylib-1.0.3.tar.gz": {
+        "name": "bazel-skylib-1.0.3.tar.gz",
+        "sha256": "1c531376ac7e5a180e0237938a2536de0c54d93f5c278634818e0efc952dd56c",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/releases/download/1.0.3/bazel-skylib-1.0.3.tar.gz",
+            "https://github.com/bazelbuild/bazel-skylib/releases/download/1.0.3/bazel-skylib-1.0.3.tar.gz"
+        ]
+    },
+    "bazel_compdb": {
+        "generator_function": "grpc_deps",
+        "generator_name": "bazel_compdb",
+        "name": "bazel_compdb",
+        "sha256": "bcecfd622c4ef272fd4ba42726a52e140b961c4eac23025f18b346c968a8cfb4",
+        "strip_prefix": "bazel-compilation-database-0.4.5",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/grailbio/bazel-compilation-database/archive/0.4.5.tar.gz",
+            "https://github.com/grailbio/bazel-compilation-database/archive/0.4.5.tar.gz"
+        ]
+    },
+    "bazel_gazelle": {
+        "generator_function": "grpc_deps",
+        "generator_name": "bazel_gazelle",
+        "name": "bazel_gazelle",
+        "sha256": "d987004a72697334a095bbaa18d615804a28280201a50ed6c234c40ccc41e493",
+        "strip_prefix": "bazel-gazelle-0.19.1",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/bazelbuild/bazel-gazelle/archive/v0.19.1.tar.gz",
+            "https://github.com/bazelbuild/bazel-gazelle/archive/v0.19.1.tar.gz"
+        ]
+    },
+    "bazel_j2objc": {
+        "name": "bazel_j2objc",
+        "sha256": "8d3403b5b7db57e347c943d214577f6879e5b175c2b59b7e075c0b6453330e9b",
+        "strip_prefix": "j2objc-2.5",
+        "urls": [
+            "https://mirror.bazel.build/github.com/google/j2objc/releases/download/2.5/j2objc-2.5.zip",
+            "https://github.com/google/j2objc/releases/download/2.5/j2objc-2.5.zip"
+        ]
+    },
+    "bazel_skylib": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "bazel_skylib",
+        "name": "bazel_skylib",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "1c531376ac7e5a180e0237938a2536de0c54d93f5c278634818e0efc952dd56c",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/releases/download/1.0.3/bazel-skylib-1.0.3.tar.gz",
+            "https://github.com/bazelbuild/bazel-skylib/releases/download/1.0.3/bazel-skylib-1.0.3.tar.gz"
+        ]
+    },
+    "bazel_toolchains": {
+        "generator_function": "grpc_deps",
+        "generator_name": "bazel_toolchains",
+        "name": "bazel_toolchains",
+        "sha256": "0b36eef8a66f39c8dbae88e522d5bbbef49d5e66e834a982402c79962281be10",
+        "strip_prefix": "bazel-toolchains-1.0.1",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/bazel-toolchains/archive/1.0.1.tar.gz",
+            "https://github.com/bazelbuild/bazel-toolchains/releases/download/1.0.1/bazel-toolchains-1.0.1.tar.gz"
+        ]
+    },
+    "bazel_website": {
+        "build_file_content": "\nexports_files([\"_sass/style.scss\"])\n",
+        "name": "bazel_website",
+        "sha256": "a5f531dd1d62e6947dcfc279656ffc2fdf6f447c163914c5eabf7961b4cb6eb4",
+        "strip_prefix": "bazel-website-c174fa288aa079b68416d2ce2cc97268fa172f42",
+        "urls": [
+            "https://github.com/bazelbuild/bazel-website/archive/c174fa288aa079b68416d2ce2cc97268fa172f42.tar.gz"
+        ]
+    },
+    "bazelci_rules": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "bazelci_rules",
+        "name": "bazelci_rules",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "eca21884e6f66a88c358e580fd67a6b148d30ab57b1680f62a96c00f9bc6a07e",
+        "strip_prefix": "bazelci_rules-1.0.0",
+        "urls": [
+            "https://github.com/bazelbuild/continuous-integration/releases/download/rules-1.0.0/bazelci_rules-1.0.0.tar.gz"
+        ]
+    },
+    "bazelci_rules-1.0.0.tar.gz": {
+        "name": "bazelci_rules-1.0.0.tar.gz",
+        "sha256": "eca21884e6f66a88c358e580fd67a6b148d30ab57b1680f62a96c00f9bc6a07e",
+        "urls": [
+            "https://github.com/bazelbuild/continuous-integration/releases/download/rules-1.0.0/bazelci_rules-1.0.0.tar.gz"
+        ]
+    },
+    "boringssl": {
+        "generator_function": "grpc_deps",
+        "generator_name": "boringssl",
+        "name": "boringssl",
+        "sha256": "6f640262999cd1fb33cf705922e453e835d2d20f3f06fe0d77f6426c19257308",
+        "strip_prefix": "boringssl-fc44652a42b396e1645d5e72aba053349992136a",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/google/boringssl/archive/fc44652a42b396e1645d5e72aba053349992136a.tar.gz",
+            "https://github.com/google/boringssl/archive/fc44652a42b396e1645d5e72aba053349992136a.tar.gz"
+        ]
+    },
+    "build_bazel_apple_support": {
+        "generator_function": "grpc_deps",
+        "generator_name": "build_bazel_apple_support",
+        "name": "build_bazel_apple_support",
+        "sha256": "122ebf7fe7d1c8e938af6aeaee0efe788a3a2449ece5a8d6a428cb18d6f88033",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/bazelbuild/apple_support/releases/download/0.7.1/apple_support.0.7.1.tar.gz",
+            "https://github.com/bazelbuild/apple_support/releases/download/0.7.1/apple_support.0.7.1.tar.gz"
+        ]
+    },
+    "build_bazel_rules_apple": {
+        "generator_function": "grpc_deps",
+        "generator_name": "build_bazel_rules_apple",
+        "name": "build_bazel_rules_apple",
+        "sha256": "bdc8e66e70b8a75da23b79f1f8c6207356df07d041d96d2189add7ee0780cf4e",
+        "strip_prefix": "rules_apple-b869b0d3868d78a1d4ffd866ccb304fb68aa12c3",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/bazelbuild/rules_apple/archive/b869b0d3868d78a1d4ffd866ccb304fb68aa12c3.tar.gz",
+            "https://github.com/bazelbuild/rules_apple/archive/b869b0d3868d78a1d4ffd866ccb304fb68aa12c3.tar.gz"
+        ]
+    },
+    "build_bazel_rules_nodejs": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "build_bazel_rules_nodejs",
+        "name": "build_bazel_rules_nodejs",
+        "sha256": "f2194102720e662dbf193546585d705e645314319554c6ce7e47d8b59f459e9c",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_nodejs/releases/download/2.2.2/rules_nodejs-2.2.2.tar.gz",
+            "https://github.com/bazelbuild/rules_nodejs/releases/download/2.2.2/rules_nodejs-2.2.2.tar.gz"
+        ]
+    },
+    "com_envoyproxy_protoc_gen_validate": {
+        "generator_function": "grpc_deps",
+        "generator_name": "com_envoyproxy_protoc_gen_validate",
+        "name": "com_envoyproxy_protoc_gen_validate",
+        "sha256": "dd4962e4a9e8388a4fbc5c33e64d73bdb222f103e4bad40ca5535f81c2c606c2",
+        "strip_prefix": "protoc-gen-validate-59da36e59fef2267fc2b1849a05159e3ecdf24f3",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/envoyproxy/protoc-gen-validate/archive/59da36e59fef2267fc2b1849a05159e3ecdf24f3.tar.gz",
+            "https://github.com/envoyproxy/protoc-gen-validate/archive/59da36e59fef2267fc2b1849a05159e3ecdf24f3.tar.gz"
+        ]
+    },
+    "com_github_cares_cares": {
+        "build_file": "@com_github_grpc_grpc//third_party:cares/cares.BUILD",
+        "generator_function": "grpc_deps",
+        "generator_name": "com_github_cares_cares",
+        "name": "com_github_cares_cares",
+        "sha256": "e8c2751ddc70fed9dc6f999acd92e232d5846f009ee1674f8aee81f19b2b915a",
+        "strip_prefix": "c-ares-e982924acee7f7313b4baa4ee5ec000c5e373c30",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/c-ares/c-ares/archive/e982924acee7f7313b4baa4ee5ec000c5e373c30.tar.gz",
+            "https://github.com/c-ares/c-ares/archive/e982924acee7f7313b4baa4ee5ec000c5e373c30.tar.gz"
+        ]
+    },
+    "com_github_google_benchmark": {
+        "generator_function": "grpc_deps",
+        "generator_name": "com_github_google_benchmark",
+        "name": "com_github_google_benchmark",
+        "sha256": "daa4a97e0547d76de300e325a49177b199f3689ce5a35e25d47696f7cb050f86",
+        "strip_prefix": "benchmark-73d4d5e8d6d449fc8663765a42aa8aeeee844489",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/google/benchmark/archive/73d4d5e8d6d449fc8663765a42aa8aeeee844489.tar.gz",
+            "https://github.com/google/benchmark/archive/73d4d5e8d6d449fc8663765a42aa8aeeee844489.tar.gz"
+        ]
+    },
+    "com_github_grpc_grpc": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "com_github_grpc_grpc",
+        "name": "com_github_grpc_grpc",
+        "patch_args": [
+            "-p1"
+        ],
+        "patches": [
+            "//third_party/grpc:grpc_1.41.0.patch",
+            "//third_party/grpc:grpc_1.41.0.win_arm64.patch"
+        ],
+        "sha256": "e5fb30aae1fa1cffa4ce00aa0bbfab908c0b899fcf0bbc30e268367d660d8656",
+        "strip_prefix": "grpc-1.41.0",
+        "urls": [
+            "https://mirror.bazel.build/github.com/grpc/grpc/archive/v1.41.0.tar.gz",
+            "https://github.com/grpc/grpc/archive/v1.41.0.tar.gz"
+        ]
+    },
+    "com_google_absl": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "com_google_absl",
+        "name": "com_google_absl",
+        "sha256": "dcf71b9cba8dc0ca9940c4b316a0c796be8fab42b070bb6b7cab62b48f0e66c4",
+        "strip_prefix": "abseil-cpp-20211102.0",
+        "urls": [
+            "https://mirror.bazel.build/github.com/abseil/abseil-cpp/archive/refs/tags/20211102.0.tar.gz",
+            "https://github.com/abseil/abseil-cpp/archive/refs/tags/20211102.0.tar.gz"
+        ]
+    },
+    "com_google_googleapis": {
+        "generator_function": "grpc_deps",
+        "generator_name": "com_google_googleapis",
+        "name": "com_google_googleapis",
+        "sha256": "5bb6b0253ccf64b53d6c7249625a7e3f6c3bc6402abd52d3778bfa48258703a0",
+        "strip_prefix": "googleapis-2f9af297c84c55c8b871ba4495e01ade42476c92",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/googleapis/googleapis/archive/2f9af297c84c55c8b871ba4495e01ade42476c92.tar.gz",
+            "https://github.com/googleapis/googleapis/archive/2f9af297c84c55c8b871ba4495e01ade42476c92.tar.gz"
+        ]
+    },
+    "com_google_googletest": {
+        "name": "com_google_googletest",
+        "sha256": "9dc9157a9a1551ec7a7e43daea9a694a0bb5fb8bec81235d8a1e6ef64c716dcb",
+        "strip_prefix": "googletest-release-1.10.0",
+        "urls": [
+            "https://mirror.bazel.build/github.com/google/googletest/archive/release-1.10.0.tar.gz",
+            "https://github.com/google/googletest/archive/release-1.10.0.tar.gz"
+        ]
+    },
+    "com_google_protobuf": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "com_google_protobuf",
+        "name": "com_google_protobuf",
+        "patch_args": [
+            "-p1"
+        ],
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "patches": [
+            "//third_party/protobuf:3.13.0.patch"
+        ],
+        "sha256": "9b4ee22c250fe31b16f1a24d61467e40780a3fbb9b91c3b65be2a376ed913a1a",
+        "strip_prefix": "protobuf-3.13.0",
+        "urls": [
+            "https://mirror.bazel.build/github.com/protocolbuffers/protobuf/archive/v3.13.0.tar.gz",
+            "https://github.com/protocolbuffers/protobuf/archive/v3.13.0.tar.gz"
+        ]
+    },
+    "com_google_testparameterinjector": {
+        "build_file_content": "\njava_library(\n    name = \"testparameterinjector\",\n    testonly = True,\n    srcs = glob([\"src/main/**/*.java\"]),\n    deps = [\n      \"@org_snakeyaml//:snakeyaml\",\n      \"@//third_party:auto_value\",\n      \"@//third_party:guava\",\n      \"@//third_party:junit4\",\n      \"@//third_party/protobuf:protobuf_java\",\n    ],\n    visibility = [\"//visibility:public\"],\n)\n",
+        "name": "com_google_testparameterinjector",
+        "sha256": "562a0e87eb413a7dcad29ebc8d578f6f97503473943585b051c1398a58189b06",
+        "strip_prefix": "TestParameterInjector-1.0",
+        "urls": [
+            "https://mirror.bazel.build/github.com/google/TestParameterInjector/archive/v1.0.tar.gz",
+            "https://github.com/google/TestParameterInjector/archive/v1.0.tar.gz"
+        ]
+    },
+    "com_googlesource_code_re2": {
+        "generator_function": "grpc_deps",
+        "generator_name": "com_googlesource_code_re2",
+        "name": "com_googlesource_code_re2",
+        "sha256": "9f385e146410a8150b6f4cb1a57eab7ec806ced48d427554b1e754877ff26c3e",
+        "strip_prefix": "re2-aecba11114cf1fac5497aeb844b6966106de3eb6",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/google/re2/archive/aecba11114cf1fac5497aeb844b6966106de3eb6.tar.gz",
+            "https://github.com/google/re2/archive/aecba11114cf1fac5497aeb844b6966106de3eb6.tar.gz"
+        ]
+    },
+    "coverage_output_generator-v2.5.zip": {
+        "name": "coverage_output_generator-v2.5.zip",
+        "sha256": "cd14f1cb4559e4723e63b7e7b06d09fcc3bd7ba58d03f354cdff1439bd936a7d",
+        "urls": [
+            "https://mirror.bazel.build/bazel_coverage_output_generator/releases/coverage_output_generator-v2.5.zip"
+        ]
+    },
+    "cython": {
+        "build_file": "@com_github_grpc_grpc//third_party:cython.BUILD",
+        "generator_function": "grpc_deps",
+        "generator_name": "cython",
+        "name": "cython",
+        "sha256": "e2e38e1f0572ca54d6085df3dec8b607d20e81515fb80215aed19c81e8fe2079",
+        "strip_prefix": "cython-0.29.21",
+        "urls": [
+            "https://github.com/cython/cython/archive/0.29.21.tar.gz"
+        ]
+    },
+    "desugar_jdk_libs": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "desugar_jdk_libs",
+        "name": "desugar_jdk_libs",
+        "sha256": "299452e6f4a4981b2e6d22357f7332713382a63e4c137f5fd6b89579f6d610cb",
+        "strip_prefix": "desugar_jdk_libs-5847d6a06302136d95a14b4cbd4b55a9c9f1436e",
+        "urls": [
+            "https://mirror.bazel.build/github.com/google/desugar_jdk_libs/archive/5847d6a06302136d95a14b4cbd4b55a9c9f1436e.zip",
+            "https://github.com/google/desugar_jdk_libs/archive/5847d6a06302136d95a14b4cbd4b55a9c9f1436e.zip"
+        ]
+    },
+    "e982924acee7f7313b4baa4ee5ec000c5e373c30.tar.gz": {
+        "name": "e982924acee7f7313b4baa4ee5ec000c5e373c30.tar.gz",
+        "sha256": "e8c2751ddc70fed9dc6f999acd92e232d5846f009ee1674f8aee81f19b2b915a",
+        "urls": [
+            "https://mirror.bazel.build/github.com/c-ares/c-ares/archive/e982924acee7f7313b4baa4ee5ec000c5e373c30.tar.gz",
+            "https://github.com/c-ares/c-ares/archive/e982924acee7f7313b4baa4ee5ec000c5e373c30.tar.gz"
+        ]
+    },
+    "enum34": {
+        "build_file": "@com_github_grpc_grpc//third_party:enum34.BUILD",
+        "generator_function": "grpc_deps",
+        "generator_name": "enum34",
+        "name": "enum34",
+        "sha256": "8ad8c4783bf61ded74527bffb48ed9b54166685e4230386a9ed9b1279e2df5b1",
+        "strip_prefix": "enum34-1.1.6",
+        "urls": [
+            "https://files.pythonhosted.org/packages/bf/3e/31d502c25302814a7c2f1d3959d2a3b3f78e509002ba91aea64993936876/enum34-1.1.6.tar.gz"
+        ]
+    },
+    "envoy_api": {
+        "generator_function": "grpc_deps",
+        "generator_name": "envoy_api",
+        "name": "envoy_api",
+        "sha256": "330f2f9c938fc038b7ab438919b692d30cdfba3cf596e7824410f88da16c30b5",
+        "strip_prefix": "data-plane-api-2f0d081fab0b0823f088c6e368f40e1992f46fcd",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/envoyproxy/data-plane-api/archive/2f0d081fab0b0823f088c6e368f40e1992f46fcd.tar.gz",
+            "https://github.com/envoyproxy/data-plane-api/archive/2f0d081fab0b0823f088c6e368f40e1992f46fcd.tar.gz"
+        ]
+    },
+    "futures": {
+        "build_file": "@com_github_grpc_grpc//third_party:futures.BUILD",
+        "generator_function": "grpc_deps",
+        "generator_name": "futures",
+        "name": "futures",
+        "sha256": "7e033af76a5e35f58e56da7a91e687706faf4e7bdfb2cbc3f2cca6b9bcda9794",
+        "strip_prefix": "futures-3.3.0",
+        "urls": [
+            "https://files.pythonhosted.org/packages/47/04/5fc6c74ad114032cd2c544c575bffc17582295e9cd6a851d6026ab4b2c00/futures-3.3.0.tar.gz"
+        ]
+    },
+    "io_bazel_rules_go": {
+        "generator_function": "grpc_deps",
+        "generator_name": "io_bazel_rules_go",
+        "name": "io_bazel_rules_go",
+        "sha256": "dbf5a9ef855684f84cac2e7ae7886c5a001d4f66ae23f6904da0faaaef0d61fc",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_go/releases/download/v0.24.11/rules_go-v0.24.11.tar.gz",
+            "https://github.com/bazelbuild/rules_go/releases/download/v0.24.11/rules_go-v0.24.11.tar.gz"
+        ]
+    },
+    "io_bazel_rules_python": {
+        "generator_function": "grpc_deps",
+        "generator_name": "io_bazel_rules_python",
+        "name": "io_bazel_rules_python",
+        "sha256": "aa96a691d3a8177f3215b14b0edc9641787abaaa30363a080165d06ab65e1161",
+        "url": "https://github.com/bazelbuild/rules_python/releases/download/0.0.1/rules_python-0.0.1.tar.gz"
+    },
+    "io_bazel_rules_sass": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "io_bazel_rules_sass",
+        "name": "io_bazel_rules_sass",
+        "sha256": "c78be58f5e0a29a04686b628cf54faaee0094322ae0ac99da5a8a8afca59a647",
+        "strip_prefix": "rules_sass-1.25.0",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_sass/archive/1.25.0.zip",
+            "https://github.com/bazelbuild/rules_sass/archive/1.25.0.zip"
+        ]
+    },
+    "io_bazel_skydoc": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "io_bazel_skydoc",
+        "name": "io_bazel_skydoc",
+        "sha256": "5a725b777976b77aa122b707d1b6f0f39b6020f66cd427bb111a585599c857b1",
+        "strip_prefix": "stardoc-1ef781ced3b1443dca3ed05dec1989eca1a4e1cd",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/stardoc/archive/1ef781ced3b1443dca3ed05dec1989eca1a4e1cd.tar.gz",
+            "https://github.com/bazelbuild/stardoc/archive/1ef781ced3b1443dca3ed05dec1989eca1a4e1cd.tar.gz"
+        ]
+    },
+    "io_opencensus_cpp": {
+        "generator_function": "grpc_deps",
+        "generator_name": "io_opencensus_cpp",
+        "name": "io_opencensus_cpp",
+        "sha256": "90d6fafa8b1a2ea613bf662731d3086e1c2ed286f458a95c81744df2dbae41b1",
+        "strip_prefix": "opencensus-cpp-c9a4da319bc669a772928ffc55af4a61be1a1176",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/census-instrumentation/opencensus-cpp/archive/c9a4da319bc669a772928ffc55af4a61be1a1176.tar.gz",
+            "https://github.com/census-instrumentation/opencensus-cpp/archive/c9a4da319bc669a772928ffc55af4a61be1a1176.tar.gz"
+        ]
+    },
+    "java_tools-v11.7.1.zip": {
+        "name": "java_tools-v11.7.1.zip",
+        "sha256": "2eede49b2d80135e0ea22180f63df26db2ed4b795c1c041b25cc653d6019fbec",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/java/v11.7.1/java_tools-v11.7.1.zip",
+            "https://github.com/bazelbuild/java_tools/releases/download/java_v11.7.1/java_tools-v11.7.1.zip"
+        ]
+    },
+    "java_tools_darwin-v11.7.1.zip": {
+        "name": "java_tools_darwin-v11.7.1.zip",
+        "sha256": "4d6d388b54ad3b9aa35b30dd67af8d71c4c240df8cfb5000bbec67bdd5c53a73",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/java/v11.7.1/java_tools_darwin-v11.7.1.zip",
+            "https://github.com/bazelbuild/java_tools/releases/download/java_v11.7.1/java_tools_darwin-v11.7.1.zip"
+        ]
+    },
+    "java_tools_langtools_javac11": {
+        "name": "java_tools_langtools_javac11",
+        "sha256": "cf0814fa002ef3d794582bb086516d8c9ed0958f83f19799cdb08949019fe4c7",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/jdk_langtools/langtools_jdk11_v2.zip"
+        ]
+    },
+    "java_tools_linux-v11.7.1.zip": {
+        "name": "java_tools_linux-v11.7.1.zip",
+        "sha256": "f78077f0c043d0d13c82de0ee4a99753e66bb18ec46e3601fa2a10e7f26798a8",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/java/v11.7.1/java_tools_linux-v11.7.1.zip",
+            "https://github.com/bazelbuild/java_tools/releases/download/java_v11.7.1/java_tools_linux-v11.7.1.zip"
+        ]
+    },
+    "java_tools_windows-v11.7.1.zip": {
+        "name": "java_tools_windows-v11.7.1.zip",
+        "sha256": "a7086734866505292ee4c206328c73c6af127e69bd51b98c9c186ae4b9b6d2db",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/java/v11.7.1/java_tools_windows-v11.7.1.zip",
+            "https://github.com/bazelbuild/java_tools/releases/download/java_v11.7.1/java_tools_windows-v11.7.1.zip"
+        ]
+    },
+    "jekyll_tree_0_17_1": {
+        "name": "jekyll_tree_0_17_1",
+        "sha256": "02256ddd20eeaf70cf8fcfe9b2cdddd7be87aedd5848d549474fb0358e0031d3",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-0.17.1.tar"
+        ]
+    },
+    "jekyll_tree_0_17_2": {
+        "name": "jekyll_tree_0_17_2",
+        "sha256": "13b35dd309a0d52f0a2518a1193f42729c75255f5fae40cea68e4d4224bfaa2e",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-0.17.2.tar"
+        ]
+    },
+    "jekyll_tree_0_18_1": {
+        "name": "jekyll_tree_0_18_1",
+        "sha256": "98b77f48e37a50fc6f83100bf53f661e10732bb3ddbc226e02d0225cb7a9a7d8",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-0.18.1.tar"
+        ]
+    },
+    "jekyll_tree_0_19_1": {
+        "name": "jekyll_tree_0_19_1",
+        "sha256": "ec892c59ba18bb8de1f9ae2bde937db144e45f28d6d1c32a2cee847ee81b134d",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-0.19.1.tar"
+        ]
+    },
+    "jekyll_tree_0_19_2": {
+        "name": "jekyll_tree_0_19_2",
+        "sha256": "3c2d9f21ec2fd1c0b8a310f6eb6043027c838810cdfc2457d4346a0e5cdcaa7a",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-0.19.2.tar"
+        ]
+    },
+    "jekyll_tree_0_20_0": {
+        "name": "jekyll_tree_0_20_0",
+        "sha256": "bb79a63810bf1b0aa1f89bd3bbbeb4a547a30ab9af70c9be656cc6866f4b015b",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-0.20.0.tar"
+        ]
+    },
+    "jekyll_tree_0_21_0": {
+        "name": "jekyll_tree_0_21_0",
+        "sha256": "23ec39c0138d358c544151e5c81586716d5d1c6124f10a742bead70516e6eb93",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-0.21.0.tar"
+        ]
+    },
+    "jekyll_tree_0_22_0": {
+        "name": "jekyll_tree_0_22_0",
+        "sha256": "bec5cfaa5560e082e41e33bde276cf93f0f7bcfd2914a3e868f921df8b3ab725",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-0.22.0.tar"
+        ]
+    },
+    "jekyll_tree_0_23_0": {
+        "name": "jekyll_tree_0_23_0",
+        "sha256": "56c80fcf49dc606fab8ed5e737a7409e9a486585b7b98673be69b5a4984dd774",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-0.23.0.tar"
+        ]
+    },
+    "jekyll_tree_0_24_0": {
+        "name": "jekyll_tree_0_24_0",
+        "sha256": "988fa567906a73e50d3669909285187ef88c76ecd4aa277f4d1f355fc06a90c8",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-0.24.0.tar"
+        ]
+    },
+    "jekyll_tree_0_25_0": {
+        "name": "jekyll_tree_0_25_0",
+        "sha256": "e8ab61c047225e808982a564ecd692fd63bd243dccc88a8768ed069a5362a685",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-0.25.0.tar"
+        ]
+    },
+    "jekyll_tree_0_26_0": {
+        "name": "jekyll_tree_0_26_0",
+        "sha256": "3907dfc6fb27d246e67877e553e8951fac239bb49f2dec7e06b6b09cb0b98b8d",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-0.26.0.tar"
+        ]
+    },
+    "jekyll_tree_0_27_0": {
+        "name": "jekyll_tree_0_27_0",
+        "sha256": "97e2633fefee389daade775da43907aa68699b32212f4e48cb095abe18aa7e65",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-0.27.0.tar"
+        ]
+    },
+    "jekyll_tree_0_28_0": {
+        "name": "jekyll_tree_0_28_0",
+        "sha256": "64b3fc267fb1f4c56345d96f0ad9f07a2efe43bd15361f818368849cf941b3b7",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-0.28.0.tar"
+        ]
+    },
+    "jekyll_tree_0_29_0": {
+        "name": "jekyll_tree_0_29_0",
+        "sha256": "99d7a6bf9ef0145c59c54b4319fb31cb855681782080a5490909c4a5463c7215",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-0.29.0.tar"
+        ]
+    },
+    "jekyll_tree_0_29_1": {
+        "name": "jekyll_tree_0_29_1",
+        "sha256": "cf0a517f1660a7c4fd26a7ef6f3594bbefcf2b670bc0ed610bf3bb6ec3a9fdc3",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-0.29.1.tar"
+        ]
+    },
+    "jekyll_tree_1_0_0": {
+        "name": "jekyll_tree_1_0_0",
+        "sha256": "61ef65c738a8cd65059f58f2ee5f7eef493136ac4d5e5c3464787d17043febdf",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-1.0.0.tar"
+        ]
+    },
+    "jekyll_tree_1_1_0": {
+        "name": "jekyll_tree_1_1_0",
+        "sha256": "46d82c9249896903ee6be2295fc52a1346a9ee82f61f89b8a2181232c3bd999b",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-1.1.0.tar"
+        ]
+    },
+    "jekyll_tree_1_2_0": {
+        "name": "jekyll_tree_1_2_0",
+        "sha256": "d402a8391ca2624673f124ff42ba8d0d40d4139e5d23111f3995dc6c5f70f63d",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-1.2.0.tar"
+        ]
+    },
+    "jekyll_tree_2_0_0": {
+        "name": "jekyll_tree_2_0_0",
+        "sha256": "7d7c424ede503856c61b645d8fdc2513ec6ea8600d76c5e87c45a9a45c16de3e",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-2.0.0.tar"
+        ]
+    },
+    "jekyll_tree_2_1_0": {
+        "name": "jekyll_tree_2_1_0",
+        "sha256": "b0fd257b1d6b1b05705742d55a13b9a20d3e99f49c89334750c872d620e5b88f",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-2.1.0.tar"
+        ]
+    },
+    "jekyll_tree_2_2_0": {
+        "name": "jekyll_tree_2_2_0",
+        "sha256": "4c1506786ab98df8039ec7354b82da7b586b2ae4ab7f7e7d08f3caf74ff28e3d",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-2.2.0.tar"
+        ]
+    },
+    "jekyll_tree_3_0_0": {
+        "name": "jekyll_tree_3_0_0",
+        "sha256": "bd1096ad609c253fa7b1473edf4a3aa51f36243e188dbb62c68d8ed4aca2419d",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-3.0.0.tar"
+        ]
+    },
+    "jekyll_tree_3_1_0": {
+        "name": "jekyll_tree_3_1_0",
+        "sha256": "f9d2e22e24af426d6c9de163d91abe6d8af7eb1eabb1d7ff5e9cf4bededf465a",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-3.1.0-807b377.tar"
+        ]
+    },
+    "jekyll_tree_3_2_0": {
+        "name": "jekyll_tree_3_2_0",
+        "sha256": "6cff8654e739a0c3062183a5a6cc82fcf9a77323051f8c007866d7f4101052a6",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-3.2.0.tar"
+        ]
+    },
+    "jekyll_tree_3_3_0": {
+        "name": "jekyll_tree_3_3_0",
+        "sha256": "36b81e8ddf4f3caccf41acc82d9e49f000c1be9e92c9cc82793d60ff70636176",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-3.3.0.tar"
+        ]
+    },
+    "jekyll_tree_3_4_0": {
+        "name": "jekyll_tree_3_4_0",
+        "sha256": "af82e775d911135bcff76e500bb003c4a9fccb949f8ddf4d93c58eca195bf5e8",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-3.4.0.tar"
+        ]
+    },
+    "jekyll_tree_3_5_0": {
+        "name": "jekyll_tree_3_5_0",
+        "sha256": "aa96cbad14cfab0b422d1d17eac3107a75eb05854d40ab4f1379a6fc87b2e1f8",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-3.5.0.tar"
+        ]
+    },
+    "jekyll_tree_3_5_1": {
+        "name": "jekyll_tree_3_5_1",
+        "sha256": "1c949ba8da353c93c74a70638e5cb321ea1cd5582eda1b6ad88c6d2d0b569f2f",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-3.5.1.tar"
+        ]
+    },
+    "jekyll_tree_3_6_0": {
+        "name": "jekyll_tree_3_6_0",
+        "sha256": "1b7a16a2098ca0c290c208a11db886e950d6c523b2cac2d0a0cba4a04aa832f3",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-3.6.0.tar"
+        ]
+    },
+    "jekyll_tree_3_7_0": {
+        "name": "jekyll_tree_3_7_0",
+        "sha256": "a534d37ef3867c92fae8692852f92820a34f63a5f9092bbbec6505c0f69d8094",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-3.7.0.tar"
+        ]
+    },
+    "jekyll_tree_4_0_0": {
+        "name": "jekyll_tree_4_0_0",
+        "sha256": "9d8e350a17b85624d8d78291d440e05f6ba8af493c1ccb846d0493579dade1b6",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-4.0.0.tar"
+        ]
+    },
+    "jekyll_tree_4_1_0": {
+        "name": "jekyll_tree_4_1_0",
+        "sha256": "9ed45a322906029d161f5514371841fbec214c63b9517fccb225c8670ebb482a",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-4.1.0.tar"
+        ]
+    },
+    "jekyll_tree_4_2_0": {
+        "name": "jekyll_tree_4_2_0",
+        "sha256": "1188fc6c3354f85741bacbb2bc7dab6bbfd1d2f44475846293ff232fb01709b8",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-4.2.0.tar"
+        ]
+    },
+    "jekyll_tree_4_2_1": {
+        "name": "jekyll_tree_4_2_1",
+        "sha256": "b767b7aa949f96b602257587add3be38acbead03bf919fe871397bc80d97f8b2",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-4.2.1.tar"
+        ]
+    },
+    "microsoft-jdk-11.0.13.8.1-windows-aarch64.zip": {
+        "name": "microsoft-jdk-11.0.13.8.1-windows-aarch64.zip",
+        "sha256": "b8a28e6e767d90acf793ea6f5bed0bb595ba0ba5ebdf8b99f395266161e53ec2",
+        "urls": [
+            "https://mirror.bazel.build/aka.ms/download-jdk/microsoft-jdk-11.0.13.8.1-windows-aarch64.zip"
+        ]
+    },
+    "opencensus_proto": {
+        "generator_function": "grpc_deps",
+        "generator_name": "opencensus_proto",
+        "name": "opencensus_proto",
+        "sha256": "b7e13f0b4259e80c3070b583c2f39e53153085a6918718b1c710caf7037572b0",
+        "strip_prefix": "opencensus-proto-0.3.0/src",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/census-instrumentation/opencensus-proto/archive/v0.3.0.tar.gz",
+            "https://github.com/census-instrumentation/opencensus-proto/archive/v0.3.0.tar.gz"
+        ]
+    },
+    "openjdk11_darwin_aarch64_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "name": "openjdk11_darwin_aarch64_archive",
+        "sha256": "e908a0b4c0da08d41c3e19230f819b364ff2e5f1dafd62d2cf991a85a34d3a17",
+        "strip_prefix": "zulu11.50.19-ca-jdk11.0.12-macosx_aarch64",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.50.19-ca-jdk11.0.12/zulu11.50.19-ca-jdk11.0.12-macosx_aarch64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu11.50.19-ca-jdk11.0.12-macosx_aarch64.tar.gz"
+        ]
+    },
+    "openjdk11_darwin_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "name": "openjdk11_darwin_archive",
+        "sha256": "0b8c8b7cf89c7c55b7e2239b47201d704e8d2170884875b00f3103cf0662d6d7",
+        "strip_prefix": "zulu11.50.19-ca-jdk11.0.12-macosx_x64",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.50.19-ca-jdk11.0.12/zulu11.50.19-ca-jdk11.0.12-macosx_x64.tar.gz"
+        ]
+    },
+    "openjdk11_linux_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "name": "openjdk11_linux_archive",
+        "sha256": "b8e8a63b79bc312aa90f3558edbea59e71495ef1a9c340e38900dd28a1c579f3",
+        "strip_prefix": "zulu11.50.19-ca-jdk11.0.12-linux_x64",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.50.19-ca-jdk11.0.12/zulu11.50.19-ca-jdk11.0.12-linux_x64.tar.gz"
+        ]
+    },
+    "openjdk11_windows_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "name": "openjdk11_windows_archive",
+        "sha256": "42ae65e75d615a3f06a674978e1fa85fdf078cad94e553fee3e779b2b42bb015",
+        "strip_prefix": "zulu11.50.19-ca-jdk11.0.12-win_x64",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.50.19-ca-jdk11.0.12/zulu11.50.19-ca-jdk11.0.12-win_x64.zip"
+        ]
+    },
+    "openjdk11_windows_arm64_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "name": "openjdk11_windows_arm64_archive",
+        "sha256": "b8a28e6e767d90acf793ea6f5bed0bb595ba0ba5ebdf8b99f395266161e53ec2",
+        "strip_prefix": "jdk-11.0.13+8",
+        "urls": [
+            "https://mirror.bazel.build/aka.ms/download-jdk/microsoft-jdk-11.0.13.8.1-windows-aarch64.zip"
+        ]
+    },
+    "openjdk15_darwin_aarch64_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "name": "openjdk15_darwin_aarch64_archive",
+        "sha256": "2613c3f15eef6b6ecd0fd102da92282b985e4573905dc902f1783d8059c1efc5",
+        "strip_prefix": "zulu15.29.15-ca-jdk15.0.2-macosx_aarch64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu15.29.15-ca-jdk15.0.2-macosx_aarch64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu15.29.15-ca-jdk15.0.2-macosx_aarch64.tar.gz"
+        ]
+    },
+    "openjdk15_darwin_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "name": "openjdk15_darwin_archive",
+        "sha256": "f80b2e0512d9d8a92be24497334c974bfecc8c898fc215ce0e76594f00437482",
+        "strip_prefix": "zulu15.27.17-ca-jdk15.0.0-macosx_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu15.27.17-ca-jdk15.0.0-macosx_x64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu15.27.17-ca-jdk15.0.0-macosx_x64.tar.gz"
+        ]
+    },
+    "openjdk15_linux_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "name": "openjdk15_linux_archive",
+        "sha256": "0a38f1138c15a4f243b75eb82f8ef40855afcc402e3c2a6de97ce8235011b1ad",
+        "strip_prefix": "zulu15.27.17-ca-jdk15.0.0-linux_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu15.27.17-ca-jdk15.0.0-linux_x64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu15.27.17-ca-jdk15.0.0-linux_x64.tar.gz"
+        ]
+    },
+    "openjdk15_windows_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "name": "openjdk15_windows_archive",
+        "sha256": "f535a530151e6c20de8a3078057e332b08887cb3ba1a4735717357e72765cad6",
+        "strip_prefix": "zulu15.27.17-ca-jdk15.0.0-win_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu15.27.17-ca-jdk15.0.0-win_x64.zip",
+            "https://cdn.azul.com/zulu/bin/zulu15.27.17-ca-jdk15.0.0-win_x64.zip"
+        ]
+    },
+    "openjdk16_darwin_aarch64_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "name": "openjdk16_darwin_aarch64_archive",
+        "sha256": "c92131e83bc71474850e667bc4e05fca33662b8feb009a0547aa14e76b40e890",
+        "strip_prefix": "zulu16.28.11-ca-jdk16.0.0-macosx_aarch64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu16.28.11-ca-jdk16.0.0-macosx_aarch64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu16.28.11-ca-jdk16.0.0-macosx_aarch64.tar.gz"
+        ]
+    },
+    "openjdk16_darwin_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "name": "openjdk16_darwin_archive",
+        "sha256": "6d47ef22dc56ce1f5a102ed39e21d9a97320f0bb786818e2c686393109d79bc5",
+        "strip_prefix": "zulu16.28.11-ca-jdk16.0.0-macosx_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu16.28.11-ca-jdk16.0.0-macosx_x64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu16.28.11-ca-jdk16.0.0-macosx_x64.tar.gz"
+        ]
+    },
+    "openjdk16_linux_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "name": "openjdk16_linux_archive",
+        "sha256": "236b5ea97aff3cb312e743848d7efa77faf305170e41371a732ca93c1b797665",
+        "strip_prefix": "zulu16.28.11-ca-jdk16.0.0-linux_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu16.28.11-ca-jdk16.0.0-linux_x64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu16.28.11-ca-jdk16.0.0-linux_x64.tar.gz"
+        ]
+    },
+    "openjdk16_windows_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "name": "openjdk16_windows_archive",
+        "sha256": "6cbf98ada27476526a5f6dff79fd5f2c15e2f671818e503bdf741eb6c8fed3d4",
+        "strip_prefix": "zulu16.28.11-ca-jdk16.0.0-win_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu16.28.11-ca-jdk16.0.0-win_x64.zip",
+            "https://cdn.azul.com/zulu/bin/zulu16.28.11-ca-jdk16.0.0-win_x64.zip"
+        ]
+    },
+    "openjdk17_darwin_aarch64_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "name": "openjdk17_darwin_aarch64_archive",
+        "sha256": "6b17f01f767ee7abf4704149ca4d86423aab9b16b68697b7d36e9b616846a8b0",
+        "strip_prefix": "zulu17.28.13-ca-jdk17.0.0-macosx_aarch64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.28.13-ca-jdk17.0.0-macosx_aarch64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu17.28.13-ca-jdk17.0.0-macosx_aarch64.tar.gz"
+        ]
+    },
+    "openjdk17_darwin_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "name": "openjdk17_darwin_archive",
+        "sha256": "6029b1fe6853cecad22ab99ac0b3bb4fb8c903dd2edefa91c3abc89755bbd47d",
+        "strip_prefix": "zulu17.28.13-ca-jdk17.0.0-macosx_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.28.13-ca-jdk17.0.0-macosx_x64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu17.28.13-ca-jdk17.0.0-macosx_x64.tar.gz"
+        ]
+    },
+    "openjdk17_linux_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "name": "openjdk17_linux_archive",
+        "sha256": "37c4f8e48536cceae8c6c20250d6c385e176972532fd35759fa7d6015c965f56",
+        "strip_prefix": "zulu17.28.13-ca-jdk17.0.0-linux_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.28.13-ca-jdk17.0.0-linux_x64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu17.28.13-ca-jdk17.0.0-linux_x64.tar.gz"
+        ]
+    },
+    "openjdk17_windows_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "name": "openjdk17_windows_archive",
+        "sha256": "f4437011239f3f0031c794bb91c02a6350bc941d4196bdd19c9f157b491815a3",
+        "strip_prefix": "zulu17.28.13-ca-jdk17.0.0-win_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.28.13-ca-jdk17.0.0-win_x64.zip",
+            "https://cdn.azul.com/zulu/bin/zulu17.28.13-ca-jdk17.0.0-win_x64.zip"
+        ]
+    },
+    "openjdk17_windows_arm64_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "generator_function": "dist_http_archive",
+        "generator_name": "openjdk17_windows_arm64_archive",
+        "name": "openjdk17_windows_arm64_archive",
+        "sha256": "811d7e7591bac4f081dfb00ba6bd15b6fc5969e1f89f0f327ef75147027c3877",
+        "strip_prefix": "zulu17.30.15-ca-jdk17.0.1-win_aarch64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.30.15-ca-jdk17.0.1-win_aarch64.zip",
+            "https://cdn.azul.com/zulu/bin/zulu17.30.15-ca-jdk17.0.1-win_aarch64.zip"
+        ]
+    },
+    "openjdk_linux": {
+        "downloaded_file_path": "zulu-linux.tar.gz",
+        "name": "openjdk_linux",
+        "sha256": "65bfe4e0ffa74a680ee4410db46b17e30cd9397b664a92a886599fe1f3530969",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-linux_x64-linux_x64-allmodules-b23d4e05466f2aa1fdcd72d3d3a8e962206b64bf-1581689070.tar.gz"
+        ]
+    },
+    "openjdk_linux_aarch64": {
+        "downloaded_file_path": "zulu-linux-aarch64.tar.gz",
+        "name": "openjdk_linux_aarch64",
+        "sha256": "6b245793087300db3ee82ab0d165614f193a73a60f2f011e347756c1e6ca5bac",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.48-ca-jdk11.0.6/zulu11.37.48-ca-jdk11.0.6-linux_aarch64-allmodules-b23d4e05466f2aa1fdcd72d3d3a8e962206b64bf-1581690750.tar.gz"
+        ]
+    },
+    "openjdk_linux_aarch64_minimal": {
+        "downloaded_file_path": "zulu-linux-aarch64-minimal.tar.gz",
+        "name": "openjdk_linux_aarch64_minimal",
+        "sha256": "06f6520a877704c77614bcfc4f846cc7cbcbf5eaad149bf7f19f4f16e285c9de",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.48-ca-jdk11.0.6/zulu11.37.48-ca-jdk11.0.6-linux_aarch64-minimal-b23d4e05466f2aa1fdcd72d3d3a8e962206b64bf-1581690750.tar.gz"
+        ]
+    },
+    "openjdk_linux_aarch64_vanilla": {
+        "downloaded_file_path": "zulu-linux-aarch64-vanilla.tar.gz",
+        "name": "openjdk_linux_aarch64_vanilla",
+        "sha256": "a452f1b9682d9f83c1c14e54d1446e1c51b5173a3a05dcb013d380f9508562e4",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.48-ca-jdk11.0.6/zulu11.37.48-ca-jdk11.0.6-linux_aarch64.tar.gz"
+        ]
+    },
+    "openjdk_linux_minimal": {
+        "downloaded_file_path": "zulu-linux-minimal.tar.gz",
+        "name": "openjdk_linux_minimal",
+        "sha256": "91f7d52f695c681d4e21499b4319d548aadef249a6b3053e306308992e1e29ae",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-linux_x64-minimal-b23d4e05466f2aa1fdcd72d3d3a8e962206b64bf-1581689068.tar.gz"
+        ]
+    },
+    "openjdk_linux_ppc64le_vanilla": {
+        "downloaded_file_path": "adoptopenjdk-ppc64le-vanilla.tar.gz",
+        "name": "openjdk_linux_ppc64le_vanilla",
+        "sha256": "a417db0295b1f4b538ecbaf7c774f3a177fab9657a665940170936c0eca4e71a",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.7+10/OpenJDK11U-jdk_ppc64le_linux_hotspot_11.0.7_10.tar.gz",
+            "https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.7+10/OpenJDK11U-jdk_ppc64le_linux_hotspot_11.0.7_10.tar.gz"
+        ]
+    },
+    "openjdk_linux_s390x_vanilla": {
+        "downloaded_file_path": "adoptopenjdk-s390x-vanilla.tar.gz",
+        "name": "openjdk_linux_s390x_vanilla",
+        "sha256": "d9b72e87a1d3ebc0c9552f72ae5eb150fffc0298a7cb841f1ce7bfc70dcd1059",
+        "urls": [
+            "https://mirror.bazel.build/github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.7+10/OpenJDK11U-jdk_s390x_linux_hotspot_11.0.7_10.tar.gz",
+            "https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.7+10/OpenJDK11U-jdk_s390x_linux_hotspot_11.0.7_10.tar.gz"
+        ]
+    },
+    "openjdk_linux_vanilla": {
+        "downloaded_file_path": "zulu-linux-vanilla.tar.gz",
+        "name": "openjdk_linux_vanilla",
+        "sha256": "360626cc19063bc411bfed2914301b908a8f77a7919aaea007a977fa8fb3cde1",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-linux_x64.tar.gz"
+        ]
+    },
+    "openjdk_macos_aarch64": {
+        "downloaded_file_path": "zulu-macos-aarch64.tar.gz",
+        "name": "openjdk_macos_aarch64",
+        "sha256": "a900ef793cb34b03ac5d93ea2f67291b6842e99d500934e19393a8d8f9bfa6ff",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.45.27-ca-jdk11.0.10/zulu11.45.27-ca-jdk11.0.10-macosx_aarch64-allmodules-1611665569.tar.gz"
+        ]
+    },
+    "openjdk_macos_aarch64_minimal": {
+        "downloaded_file_path": "zulu-macos-aarch64-minimal.tar.gz",
+        "name": "openjdk_macos_aarch64_minimal",
+        "sha256": "f4f606926e6deeaa8b8397e299313d9df87642fe464b0ccf1ed0432aeb00640b",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.45.27-ca-jdk11.0.10/zulu11.45.27-ca-jdk11.0.10-macosx_aarch64-minimal-1611665562.tar.gz"
+        ]
+    },
+    "openjdk_macos_aarch64_vanilla": {
+        "downloaded_file_path": "zulu-macos-aarch64-vanilla.tar.gz",
+        "name": "openjdk_macos_aarch64_vanilla",
+        "sha256": "3dcc636e64ae58b922269c2dc9f20f6f967bee90e3f6847d643c4a566f1e8d8a",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu11.45.27-ca-jdk11.0.10-macosx_aarch64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu11.45.27-ca-jdk11.0.10-macosx_aarch64.tar.gz"
+        ]
+    },
+    "openjdk_macos_x86_64": {
+        "downloaded_file_path": "zulu-macos.tar.gz",
+        "name": "openjdk_macos_x86_64",
+        "sha256": "8e283cfd23c7555be8e17295ed76eb8f00324c88ab904b8de37bbe08f90e569b",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-macosx_x64-allmodules-b23d4e05466f2aa1fdcd72d3d3a8e962206b64bf-1581689066.tar.gz"
+        ]
+    },
+    "openjdk_macos_x86_64_minimal": {
+        "downloaded_file_path": "zulu-macos-minimal.tar.gz",
+        "name": "openjdk_macos_x86_64_minimal",
+        "sha256": "1bacb1c07035d4066d79f0b65b4ea0ebd1954f3662bdfe3618da382ac8fd23a6",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-macosx_x64-minimal-b23d4e05466f2aa1fdcd72d3d3a8e962206b64bf-1581689063.tar.gz"
+        ]
+    },
+    "openjdk_macos_x86_64_vanilla": {
+        "downloaded_file_path": "zulu-macos-vanilla.tar.gz",
+        "name": "openjdk_macos_x86_64_vanilla",
+        "sha256": "e1fe56769f32e2aaac95e0a8f86b5a323da5af3a3b4bba73f3086391a6cc056f",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-macosx_x64.tar.gz"
+        ]
+    },
+    "openjdk_win": {
+        "downloaded_file_path": "zulu-win.zip",
+        "name": "openjdk_win",
+        "sha256": "8e1604b3a27dcf639bc6d1a73103f1211848139e4cceb081d0a74a99e1e6f995",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-win_x64-allmodules-b23d4e05466f2aa1fdcd72d3d3a8e962206b64bf-1581689080.zip"
+        ]
+    },
+    "openjdk_win_arm64_vanilla": {
+        "downloaded_file_path": "zulu-win-arm64.zip",
+        "name": "openjdk_win_arm64_vanilla",
+        "sha256": "811d7e7591bac4f081dfb00ba6bd15b6fc5969e1f89f0f327ef75147027c3877",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.30.15-ca-jdk17.0.1-win_aarch64.zip"
+        ]
+    },
+    "openjdk_win_minimal": {
+        "downloaded_file_path": "zulu-win-minimal.zip",
+        "name": "openjdk_win_minimal",
+        "sha256": "b90a713c9c2d9ea23cad44d2c2dfcc9af22faba9bde55dedc1c3bb9f556ac1ae",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-win_x64-minimal-b23d4e05466f2aa1fdcd72d3d3a8e962206b64bf-1581689080.zip"
+        ]
+    },
+    "openjdk_win_vanilla": {
+        "downloaded_file_path": "zulu-win-vanilla.zip",
+        "name": "openjdk_win_vanilla",
+        "sha256": "a9695617b8374bfa171f166951214965b1d1d08f43218db9a2a780b71c665c18",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-win_x64.zip"
+        ]
+    },
+    "org_snakeyaml": {
+        "build_file_content": "\njava_library(\n    name = \"snakeyaml\",\n    testonly = True,\n    srcs = glob([\"src/main/**/*.java\"]),\n    visibility = [\"@com_google_testparameterinjector//:__pkg__\"],\n)\n",
+        "name": "org_snakeyaml",
+        "sha256": "fd0e0cc6c5974fc8f08be3a15fb4a59954c7dd958b5b68186a803de6420b6e40",
+        "strip_prefix": "asomov-snakeyaml-b28f0b4d87c6",
+        "urls": [
+            "https://mirror.bazel.build/bitbucket.org/asomov/snakeyaml/get/snakeyaml-1.28.tar.gz"
+        ]
+    },
+    "platforms": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "platforms",
+        "name": "platforms",
+        "sha256": "379113459b0feaf6bfbb584a91874c065078aa673222846ac765f86661c27407",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/platforms/releases/download/0.0.5/platforms-0.0.5.tar.gz",
+            "https://github.com/bazelbuild/platforms/releases/download/0.0.5/platforms-0.0.5.tar.gz"
+        ]
+    },
+    "platforms-0.0.5.tar.gz": {
+        "name": "platforms-0.0.5.tar.gz",
+        "sha256": "379113459b0feaf6bfbb584a91874c065078aa673222846ac765f86661c27407",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/platforms/releases/download/0.0.5/platforms-0.0.5.tar.gz",
+            "https://github.com/bazelbuild/platforms/releases/download/0.0.5/platforms-0.0.5.tar.gz"
+        ]
+    },
+    "remote_coverage_tools": {
+        "name": "remote_coverage_tools",
+        "sha256": "cd14f1cb4559e4723e63b7e7b06d09fcc3bd7ba58d03f354cdff1439bd936a7d",
+        "urls": [
+            "https://mirror.bazel.build/bazel_coverage_output_generator/releases/coverage_output_generator-v2.5.zip"
+        ]
+    },
+    "remote_java_tools": {
+        "generator_function": "maybe",
+        "generator_name": "remote_java_tools",
+        "name": "remote_java_tools",
+        "sha256": "2eede49b2d80135e0ea22180f63df26db2ed4b795c1c041b25cc653d6019fbec",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/java/v11.7.1/java_tools-v11.7.1.zip",
+            "https://github.com/bazelbuild/java_tools/releases/download/java_v11.7.1/java_tools-v11.7.1.zip"
+        ]
+    },
+    "remote_java_tools_darwin": {
+        "generator_function": "maybe",
+        "generator_name": "remote_java_tools_darwin",
+        "name": "remote_java_tools_darwin",
+        "sha256": "4d6d388b54ad3b9aa35b30dd67af8d71c4c240df8cfb5000bbec67bdd5c53a73",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/java/v11.7.1/java_tools_darwin-v11.7.1.zip",
+            "https://github.com/bazelbuild/java_tools/releases/download/java_v11.7.1/java_tools_darwin-v11.7.1.zip"
+        ]
+    },
+    "remote_java_tools_darwin_for_testing": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "remote_java_tools_darwin_for_testing",
+        "name": "remote_java_tools_darwin_for_testing",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "4d6d388b54ad3b9aa35b30dd67af8d71c4c240df8cfb5000bbec67bdd5c53a73",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/java/v11.7.1/java_tools_darwin-v11.7.1.zip",
+            "https://github.com/bazelbuild/java_tools/releases/download/java_v11.7.1/java_tools_darwin-v11.7.1.zip"
+        ]
+    },
+    "remote_java_tools_for_testing": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "remote_java_tools_for_testing",
+        "name": "remote_java_tools_for_testing",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "2eede49b2d80135e0ea22180f63df26db2ed4b795c1c041b25cc653d6019fbec",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/java/v11.7.1/java_tools-v11.7.1.zip",
+            "https://github.com/bazelbuild/java_tools/releases/download/java_v11.7.1/java_tools-v11.7.1.zip"
+        ]
+    },
+    "remote_java_tools_linux": {
+        "generator_function": "maybe",
+        "generator_name": "remote_java_tools_linux",
+        "name": "remote_java_tools_linux",
+        "sha256": "f78077f0c043d0d13c82de0ee4a99753e66bb18ec46e3601fa2a10e7f26798a8",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/java/v11.7.1/java_tools_linux-v11.7.1.zip",
+            "https://github.com/bazelbuild/java_tools/releases/download/java_v11.7.1/java_tools_linux-v11.7.1.zip"
+        ]
+    },
+    "remote_java_tools_linux_for_testing": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "remote_java_tools_linux_for_testing",
+        "name": "remote_java_tools_linux_for_testing",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "f78077f0c043d0d13c82de0ee4a99753e66bb18ec46e3601fa2a10e7f26798a8",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/java/v11.7.1/java_tools_linux-v11.7.1.zip",
+            "https://github.com/bazelbuild/java_tools/releases/download/java_v11.7.1/java_tools_linux-v11.7.1.zip"
+        ]
+    },
+    "remote_java_tools_test": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "remote_java_tools_test",
+        "name": "remote_java_tools_test",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "2eede49b2d80135e0ea22180f63df26db2ed4b795c1c041b25cc653d6019fbec",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/java/v11.7.1/java_tools-v11.7.1.zip",
+            "https://github.com/bazelbuild/java_tools/releases/download/java_v11.7.1/java_tools-v11.7.1.zip"
+        ]
+    },
+    "remote_java_tools_test_darwin": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "remote_java_tools_test_darwin",
+        "name": "remote_java_tools_test_darwin",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "4d6d388b54ad3b9aa35b30dd67af8d71c4c240df8cfb5000bbec67bdd5c53a73",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/java/v11.7.1/java_tools_darwin-v11.7.1.zip",
+            "https://github.com/bazelbuild/java_tools/releases/download/java_v11.7.1/java_tools_darwin-v11.7.1.zip"
+        ]
+    },
+    "remote_java_tools_test_linux": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "remote_java_tools_test_linux",
+        "name": "remote_java_tools_test_linux",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "f78077f0c043d0d13c82de0ee4a99753e66bb18ec46e3601fa2a10e7f26798a8",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/java/v11.7.1/java_tools_linux-v11.7.1.zip",
+            "https://github.com/bazelbuild/java_tools/releases/download/java_v11.7.1/java_tools_linux-v11.7.1.zip"
+        ]
+    },
+    "remote_java_tools_test_windows": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "remote_java_tools_test_windows",
+        "name": "remote_java_tools_test_windows",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "a7086734866505292ee4c206328c73c6af127e69bd51b98c9c186ae4b9b6d2db",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/java/v11.7.1/java_tools_windows-v11.7.1.zip",
+            "https://github.com/bazelbuild/java_tools/releases/download/java_v11.7.1/java_tools_windows-v11.7.1.zip"
+        ]
+    },
+    "remote_java_tools_windows": {
+        "generator_function": "maybe",
+        "generator_name": "remote_java_tools_windows",
+        "name": "remote_java_tools_windows",
+        "sha256": "a7086734866505292ee4c206328c73c6af127e69bd51b98c9c186ae4b9b6d2db",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/java/v11.7.1/java_tools_windows-v11.7.1.zip",
+            "https://github.com/bazelbuild/java_tools/releases/download/java_v11.7.1/java_tools_windows-v11.7.1.zip"
+        ]
+    },
+    "remote_java_tools_windows_for_testing": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "remote_java_tools_windows_for_testing",
+        "name": "remote_java_tools_windows_for_testing",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "a7086734866505292ee4c206328c73c6af127e69bd51b98c9c186ae4b9b6d2db",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/java/v11.7.1/java_tools_windows-v11.7.1.zip",
+            "https://github.com/bazelbuild/java_tools/releases/download/java_v11.7.1/java_tools_windows-v11.7.1.zip"
+        ]
+    },
+    "remotejdk11_linux": {
+        "build_file": "@bazel_tools//tools/jdk:jdk.BUILD",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk11_linux",
+        "name": "remotejdk11_linux",
+        "sha256": "b8e8a63b79bc312aa90f3558edbea59e71495ef1a9c340e38900dd28a1c579f3",
+        "strip_prefix": "zulu11.50.19-ca-jdk11.0.12-linux_x64",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.50.19-ca-jdk11.0.12/zulu11.50.19-ca-jdk11.0.12-linux_x64.tar.gz"
+        ]
+    },
+    "remotejdk11_linux_aarch64": {
+        "build_file": "@bazel_tools//tools/jdk:jdk.BUILD",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk11_linux_aarch64",
+        "name": "remotejdk11_linux_aarch64",
+        "sha256": "61254688067454d3ccf0ef25993b5dcab7b56c8129e53b73566c28a8dd4d48fb",
+        "strip_prefix": "zulu11.50.19-ca-jdk11.0.12-linux_aarch64",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.50.19-ca-jdk11.0.12/zulu11.50.19-ca-jdk11.0.12-linux_aarch64.tar.gz"
+        ]
+    },
+    "remotejdk11_linux_aarch64_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk11_linux_aarch64_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "61254688067454d3ccf0ef25993b5dcab7b56c8129e53b73566c28a8dd4d48fb",
+        "strip_prefix": "zulu11.50.19-ca-jdk11.0.12-linux_aarch64",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.50.19-ca-jdk11.0.12/zulu11.50.19-ca-jdk11.0.12-linux_aarch64.tar.gz"
+        ]
+    },
+    "remotejdk11_linux_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk11_linux_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "b8e8a63b79bc312aa90f3558edbea59e71495ef1a9c340e38900dd28a1c579f3",
+        "strip_prefix": "zulu11.50.19-ca-jdk11.0.12-linux_x64",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.50.19-ca-jdk11.0.12/zulu11.50.19-ca-jdk11.0.12-linux_x64.tar.gz"
+        ]
+    },
+    "remotejdk11_linux_ppc64le": {
+        "build_file": "@bazel_tools//tools/jdk:jdk.BUILD",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk11_linux_ppc64le",
+        "name": "remotejdk11_linux_ppc64le",
+        "sha256": "a417db0295b1f4b538ecbaf7c774f3a177fab9657a665940170936c0eca4e71a",
+        "strip_prefix": "jdk-11.0.7+10",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.7+10/OpenJDK11U-jdk_ppc64le_linux_hotspot_11.0.7_10.tar.gz",
+            "https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.7+10/OpenJDK11U-jdk_ppc64le_linux_hotspot_11.0.7_10.tar.gz"
+        ]
+    },
+    "remotejdk11_linux_ppc64le_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk11_linux_ppc64le_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "a417db0295b1f4b538ecbaf7c774f3a177fab9657a665940170936c0eca4e71a",
+        "strip_prefix": "jdk-11.0.7+10",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.7+10/OpenJDK11U-jdk_ppc64le_linux_hotspot_11.0.7_10.tar.gz",
+            "https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.7+10/OpenJDK11U-jdk_ppc64le_linux_hotspot_11.0.7_10.tar.gz"
+        ]
+    },
+    "remotejdk11_linux_s390x": {
+        "build_file": "@bazel_tools//tools/jdk:jdk.BUILD",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk11_linux_s390x",
+        "name": "remotejdk11_linux_s390x",
+        "sha256": "d9b72e87a1d3ebc0c9552f72ae5eb150fffc0298a7cb841f1ce7bfc70dcd1059",
+        "strip_prefix": "jdk-11.0.7+10",
+        "urls": [
+            "https://mirror.bazel.build/github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.7+10/OpenJDK11U-jdk_s390x_linux_hotspot_11.0.7_10.tar.gz",
+            "https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.7+10/OpenJDK11U-jdk_s390x_linux_hotspot_11.0.7_10.tar.gz"
+        ]
+    },
+    "remotejdk11_linux_s390x_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk11_linux_s390x_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "d9b72e87a1d3ebc0c9552f72ae5eb150fffc0298a7cb841f1ce7bfc70dcd1059",
+        "strip_prefix": "jdk-11.0.7+10",
+        "urls": [
+            "https://mirror.bazel.build/github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.7+10/OpenJDK11U-jdk_s390x_linux_hotspot_11.0.7_10.tar.gz",
+            "https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.7+10/OpenJDK11U-jdk_s390x_linux_hotspot_11.0.7_10.tar.gz"
+        ]
+    },
+    "remotejdk11_macos": {
+        "build_file": "@bazel_tools//tools/jdk:jdk.BUILD",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk11_macos",
+        "name": "remotejdk11_macos",
+        "sha256": "0b8c8b7cf89c7c55b7e2239b47201d704e8d2170884875b00f3103cf0662d6d7",
+        "strip_prefix": "zulu11.50.19-ca-jdk11.0.12-macosx_x64",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.50.19-ca-jdk11.0.12/zulu11.50.19-ca-jdk11.0.12-macosx_x64.tar.gz"
+        ]
+    },
+    "remotejdk11_macos_aarch64": {
+        "build_file": "@bazel_tools//tools/jdk:jdk.BUILD",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk11_macos_aarch64",
+        "name": "remotejdk11_macos_aarch64",
+        "sha256": "e908a0b4c0da08d41c3e19230f819b364ff2e5f1dafd62d2cf991a85a34d3a17",
+        "strip_prefix": "zulu11.50.19-ca-jdk11.0.12-macosx_aarch64",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.50.19-ca-jdk11.0.12/zulu11.50.19-ca-jdk11.0.12-macosx_aarch64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu11.50.19-ca-jdk11.0.12-macosx_aarch64.tar.gz"
+        ]
+    },
+    "remotejdk11_macos_aarch64_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk11_macos_aarch64_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "e908a0b4c0da08d41c3e19230f819b364ff2e5f1dafd62d2cf991a85a34d3a17",
+        "strip_prefix": "zulu11.50.19-ca-jdk11.0.12-macosx_aarch64",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.50.19-ca-jdk11.0.12/zulu11.50.19-ca-jdk11.0.12-macosx_aarch64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu11.50.19-ca-jdk11.0.12-macosx_aarch64.tar.gz"
+        ]
+    },
+    "remotejdk11_macos_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk11_macos_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "0b8c8b7cf89c7c55b7e2239b47201d704e8d2170884875b00f3103cf0662d6d7",
+        "strip_prefix": "zulu11.50.19-ca-jdk11.0.12-macosx_x64",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.50.19-ca-jdk11.0.12/zulu11.50.19-ca-jdk11.0.12-macosx_x64.tar.gz"
+        ]
+    },
+    "remotejdk11_win": {
+        "build_file": "@bazel_tools//tools/jdk:jdk.BUILD",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk11_win",
+        "name": "remotejdk11_win",
+        "sha256": "42ae65e75d615a3f06a674978e1fa85fdf078cad94e553fee3e779b2b42bb015",
+        "strip_prefix": "zulu11.50.19-ca-jdk11.0.12-win_x64",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.50.19-ca-jdk11.0.12/zulu11.50.19-ca-jdk11.0.12-win_x64.zip"
+        ]
+    },
+    "remotejdk11_win_arm64": {
+        "build_file": "@bazel_tools//tools/jdk:jdk.BUILD",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk11_win_arm64",
+        "name": "remotejdk11_win_arm64",
+        "sha256": "b8a28e6e767d90acf793ea6f5bed0bb595ba0ba5ebdf8b99f395266161e53ec2",
+        "strip_prefix": "jdk-11.0.13+8",
+        "urls": [
+            "https://mirror.bazel.build/aka.ms/download-jdk/microsoft-jdk-11.0.13.8.1-windows-aarch64.zip"
+        ]
+    },
+    "remotejdk11_win_arm64_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "generator_function": "dist_http_archive",
+        "generator_name": "remotejdk11_win_arm64_for_testing",
+        "name": "remotejdk11_win_arm64_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "b8a28e6e767d90acf793ea6f5bed0bb595ba0ba5ebdf8b99f395266161e53ec2",
+        "strip_prefix": "jdk-11.0.13+8",
+        "urls": [
+            "https://mirror.bazel.build/aka.ms/download-jdk/microsoft-jdk-11.0.13.8.1-windows-aarch64.zip"
+        ]
+    },
+    "remotejdk11_win_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk11_win_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "42ae65e75d615a3f06a674978e1fa85fdf078cad94e553fee3e779b2b42bb015",
+        "strip_prefix": "zulu11.50.19-ca-jdk11.0.12-win_x64",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.50.19-ca-jdk11.0.12/zulu11.50.19-ca-jdk11.0.12-win_x64.zip"
+        ]
+    },
+    "remotejdk15_linux": {
+        "build_file": "@bazel_tools//tools/jdk:jdk.BUILD",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk15_linux",
+        "name": "remotejdk15_linux",
+        "sha256": "0a38f1138c15a4f243b75eb82f8ef40855afcc402e3c2a6de97ce8235011b1ad",
+        "strip_prefix": "zulu15.27.17-ca-jdk15.0.0-linux_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu15.27.17-ca-jdk15.0.0-linux_x64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu15.27.17-ca-jdk15.0.0-linux_x64.tar.gz"
+        ]
+    },
+    "remotejdk15_linux_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk15_linux_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "0a38f1138c15a4f243b75eb82f8ef40855afcc402e3c2a6de97ce8235011b1ad",
+        "strip_prefix": "zulu15.27.17-ca-jdk15.0.0-linux_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu15.27.17-ca-jdk15.0.0-linux_x64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu15.27.17-ca-jdk15.0.0-linux_x64.tar.gz"
+        ]
+    },
+    "remotejdk15_macos": {
+        "build_file": "@bazel_tools//tools/jdk:jdk.BUILD",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk15_macos",
+        "name": "remotejdk15_macos",
+        "sha256": "f80b2e0512d9d8a92be24497334c974bfecc8c898fc215ce0e76594f00437482",
+        "strip_prefix": "zulu15.27.17-ca-jdk15.0.0-macosx_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu15.27.17-ca-jdk15.0.0-macosx_x64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu15.27.17-ca-jdk15.0.0-macosx_x64.tar.gz"
+        ]
+    },
+    "remotejdk15_macos_aarch64": {
+        "build_file": "@bazel_tools//tools/jdk:jdk.BUILD",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk15_macos_aarch64",
+        "name": "remotejdk15_macos_aarch64",
+        "sha256": "2613c3f15eef6b6ecd0fd102da92282b985e4573905dc902f1783d8059c1efc5",
+        "strip_prefix": "zulu15.29.15-ca-jdk15.0.2-macosx_aarch64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu15.29.15-ca-jdk15.0.2-macosx_aarch64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu15.29.15-ca-jdk15.0.2-macosx_aarch64.tar.gz"
+        ]
+    },
+    "remotejdk15_macos_aarch64_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk15_macos_aarch64_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "2613c3f15eef6b6ecd0fd102da92282b985e4573905dc902f1783d8059c1efc5",
+        "strip_prefix": "zulu15.29.15-ca-jdk15.0.2-macosx_aarch64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu15.29.15-ca-jdk15.0.2-macosx_aarch64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu15.29.15-ca-jdk15.0.2-macosx_aarch64.tar.gz"
+        ]
+    },
+    "remotejdk15_macos_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk15_macos_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "f80b2e0512d9d8a92be24497334c974bfecc8c898fc215ce0e76594f00437482",
+        "strip_prefix": "zulu15.27.17-ca-jdk15.0.0-macosx_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu15.27.17-ca-jdk15.0.0-macosx_x64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu15.27.17-ca-jdk15.0.0-macosx_x64.tar.gz"
+        ]
+    },
+    "remotejdk15_win": {
+        "build_file": "@bazel_tools//tools/jdk:jdk.BUILD",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk15_win",
+        "name": "remotejdk15_win",
+        "sha256": "f535a530151e6c20de8a3078057e332b08887cb3ba1a4735717357e72765cad6",
+        "strip_prefix": "zulu15.27.17-ca-jdk15.0.0-win_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu15.27.17-ca-jdk15.0.0-win_x64.zip",
+            "https://cdn.azul.com/zulu/bin/zulu15.27.17-ca-jdk15.0.0-win_x64.zip"
+        ]
+    },
+    "remotejdk15_win_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk15_win_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "f535a530151e6c20de8a3078057e332b08887cb3ba1a4735717357e72765cad6",
+        "strip_prefix": "zulu15.27.17-ca-jdk15.0.0-win_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu15.27.17-ca-jdk15.0.0-win_x64.zip",
+            "https://cdn.azul.com/zulu/bin/zulu15.27.17-ca-jdk15.0.0-win_x64.zip"
+        ]
+    },
+    "remotejdk16_linux": {
+        "build_file": "@bazel_tools//tools/jdk:jdk.BUILD",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk16_linux",
+        "name": "remotejdk16_linux",
+        "sha256": "236b5ea97aff3cb312e743848d7efa77faf305170e41371a732ca93c1b797665",
+        "strip_prefix": "zulu16.28.11-ca-jdk16.0.0-linux_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu16.28.11-ca-jdk16.0.0-linux_x64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu16.28.11-ca-jdk16.0.0-linux_x64.tar.gz"
+        ]
+    },
+    "remotejdk16_linux_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk16_linux_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "236b5ea97aff3cb312e743848d7efa77faf305170e41371a732ca93c1b797665",
+        "strip_prefix": "zulu16.28.11-ca-jdk16.0.0-linux_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu16.28.11-ca-jdk16.0.0-linux_x64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu16.28.11-ca-jdk16.0.0-linux_x64.tar.gz"
+        ]
+    },
+    "remotejdk16_macos": {
+        "build_file": "@bazel_tools//tools/jdk:jdk.BUILD",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk16_macos",
+        "name": "remotejdk16_macos",
+        "sha256": "6d47ef22dc56ce1f5a102ed39e21d9a97320f0bb786818e2c686393109d79bc5",
+        "strip_prefix": "zulu16.28.11-ca-jdk16.0.0-macosx_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu16.28.11-ca-jdk16.0.0-macosx_x64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu16.28.11-ca-jdk16.0.0-macosx_x64.tar.gz"
+        ]
+    },
+    "remotejdk16_macos_aarch64": {
+        "build_file": "@bazel_tools//tools/jdk:jdk.BUILD",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk16_macos_aarch64",
+        "name": "remotejdk16_macos_aarch64",
+        "sha256": "c92131e83bc71474850e667bc4e05fca33662b8feb009a0547aa14e76b40e890",
+        "strip_prefix": "zulu16.28.11-ca-jdk16.0.0-macosx_aarch64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu16.28.11-ca-jdk16.0.0-macosx_aarch64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu16.28.11-ca-jdk16.0.0-macosx_aarch64.tar.gz"
+        ]
+    },
+    "remotejdk16_macos_aarch64_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk16_macos_aarch64_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "c92131e83bc71474850e667bc4e05fca33662b8feb009a0547aa14e76b40e890",
+        "strip_prefix": "zulu16.28.11-ca-jdk16.0.0-macosx_aarch64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu16.28.11-ca-jdk16.0.0-macosx_aarch64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu16.28.11-ca-jdk16.0.0-macosx_aarch64.tar.gz"
+        ]
+    },
+    "remotejdk16_macos_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk16_macos_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "6d47ef22dc56ce1f5a102ed39e21d9a97320f0bb786818e2c686393109d79bc5",
+        "strip_prefix": "zulu16.28.11-ca-jdk16.0.0-macosx_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu16.28.11-ca-jdk16.0.0-macosx_x64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu16.28.11-ca-jdk16.0.0-macosx_x64.tar.gz"
+        ]
+    },
+    "remotejdk16_win": {
+        "build_file": "@bazel_tools//tools/jdk:jdk.BUILD",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk16_win",
+        "name": "remotejdk16_win",
+        "sha256": "6cbf98ada27476526a5f6dff79fd5f2c15e2f671818e503bdf741eb6c8fed3d4",
+        "strip_prefix": "zulu16.28.11-ca-jdk16.0.0-win_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu16.28.11-ca-jdk16.0.0-win_x64.zip",
+            "https://cdn.azul.com/zulu/bin/zulu16.28.11-ca-jdk16.0.0-win_x64.zip"
+        ]
+    },
+    "remotejdk16_win_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk16_win_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "6cbf98ada27476526a5f6dff79fd5f2c15e2f671818e503bdf741eb6c8fed3d4",
+        "strip_prefix": "zulu16.28.11-ca-jdk16.0.0-win_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu16.28.11-ca-jdk16.0.0-win_x64.zip",
+            "https://cdn.azul.com/zulu/bin/zulu16.28.11-ca-jdk16.0.0-win_x64.zip"
+        ]
+    },
+    "remotejdk17_linux": {
+        "build_file": "@bazel_tools//tools/jdk:jdk.BUILD",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk17_linux",
+        "name": "remotejdk17_linux",
+        "sha256": "37c4f8e48536cceae8c6c20250d6c385e176972532fd35759fa7d6015c965f56",
+        "strip_prefix": "zulu17.28.13-ca-jdk17.0.0-linux_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.28.13-ca-jdk17.0.0-linux_x64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu17.28.13-ca-jdk17.0.0-linux_x64.tar.gz"
+        ]
+    },
+    "remotejdk17_linux_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk17_linux_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "37c4f8e48536cceae8c6c20250d6c385e176972532fd35759fa7d6015c965f56",
+        "strip_prefix": "zulu17.28.13-ca-jdk17.0.0-linux_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.28.13-ca-jdk17.0.0-linux_x64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu17.28.13-ca-jdk17.0.0-linux_x64.tar.gz"
+        ]
+    },
+    "remotejdk17_macos": {
+        "build_file": "@bazel_tools//tools/jdk:jdk.BUILD",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk17_macos",
+        "name": "remotejdk17_macos",
+        "sha256": "6029b1fe6853cecad22ab99ac0b3bb4fb8c903dd2edefa91c3abc89755bbd47d",
+        "strip_prefix": "zulu17.28.13-ca-jdk17.0.0-macosx_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.28.13-ca-jdk17.0.0-macosx_x64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu17.28.13-ca-jdk17.0.0-macosx_x64.tar.gz"
+        ]
+    },
+    "remotejdk17_macos_aarch64": {
+        "build_file": "@bazel_tools//tools/jdk:jdk.BUILD",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk17_macos_aarch64",
+        "name": "remotejdk17_macos_aarch64",
+        "sha256": "6b17f01f767ee7abf4704149ca4d86423aab9b16b68697b7d36e9b616846a8b0",
+        "strip_prefix": "zulu17.28.13-ca-jdk17.0.0-macosx_aarch64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.28.13-ca-jdk17.0.0-macosx_aarch64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu17.28.13-ca-jdk17.0.0-macosx_aarch64.tar.gz"
+        ]
+    },
+    "remotejdk17_macos_aarch64_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk17_macos_aarch64_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "6b17f01f767ee7abf4704149ca4d86423aab9b16b68697b7d36e9b616846a8b0",
+        "strip_prefix": "zulu17.28.13-ca-jdk17.0.0-macosx_aarch64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.28.13-ca-jdk17.0.0-macosx_aarch64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu17.28.13-ca-jdk17.0.0-macosx_aarch64.tar.gz"
+        ]
+    },
+    "remotejdk17_macos_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk17_macos_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "6029b1fe6853cecad22ab99ac0b3bb4fb8c903dd2edefa91c3abc89755bbd47d",
+        "strip_prefix": "zulu17.28.13-ca-jdk17.0.0-macosx_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.28.13-ca-jdk17.0.0-macosx_x64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu17.28.13-ca-jdk17.0.0-macosx_x64.tar.gz"
+        ]
+    },
+    "remotejdk17_win": {
+        "build_file": "@bazel_tools//tools/jdk:jdk.BUILD",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk17_win",
+        "name": "remotejdk17_win",
+        "sha256": "f4437011239f3f0031c794bb91c02a6350bc941d4196bdd19c9f157b491815a3",
+        "strip_prefix": "zulu17.28.13-ca-jdk17.0.0-win_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.28.13-ca-jdk17.0.0-win_x64.zip",
+            "https://cdn.azul.com/zulu/bin/zulu17.28.13-ca-jdk17.0.0-win_x64.zip"
+        ]
+    },
+    "remotejdk17_win_arm64": {
+        "build_file": "@bazel_tools//tools/jdk:jdk.BUILD",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk17_win_arm64",
+        "name": "remotejdk17_win_arm64",
+        "sha256": "811d7e7591bac4f081dfb00ba6bd15b6fc5969e1f89f0f327ef75147027c3877",
+        "strip_prefix": "zulu17.30.15-ca-jdk17.0.1-win_aarch64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.30.15-ca-jdk17.0.1-win_aarch64.zip",
+            "https://cdn.azul.com/zulu/bin/zulu17.30.15-ca-jdk17.0.1-win_aarch64.zip"
+        ]
+    },
+    "remotejdk17_win_arm64_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "generator_function": "dist_http_archive",
+        "generator_name": "remotejdk17_win_arm64_for_testing",
+        "name": "remotejdk17_win_arm64_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "811d7e7591bac4f081dfb00ba6bd15b6fc5969e1f89f0f327ef75147027c3877",
+        "strip_prefix": "zulu17.30.15-ca-jdk17.0.1-win_aarch64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.30.15-ca-jdk17.0.1-win_aarch64.zip",
+            "https://cdn.azul.com/zulu/bin/zulu17.30.15-ca-jdk17.0.1-win_aarch64.zip"
+        ]
+    },
+    "remotejdk17_win_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk17_win_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "f4437011239f3f0031c794bb91c02a6350bc941d4196bdd19c9f157b491815a3",
+        "strip_prefix": "zulu17.28.13-ca-jdk17.0.0-win_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.28.13-ca-jdk17.0.0-win_x64.zip",
+            "https://cdn.azul.com/zulu/bin/zulu17.28.13-ca-jdk17.0.0-win_x64.zip"
+        ]
+    },
+    "rules_cc": {
+        "name": "rules_cc",
+        "sha256": "d0c573b94a6ef20ef6ff20154a23d0efcb409fb0e1ff0979cec318dfe42f0cdd",
+        "strip_prefix": "rules_cc-b1c40e1de81913a3c40e5948f78719c28152486d",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_cc/archive/b1c40e1de81913a3c40e5948f78719c28152486d.zip",
+            "https://github.com/bazelbuild/rules_cc/archive/b1c40e1de81913a3c40e5948f78719c28152486d.zip"
+        ]
+    },
+    "rules_java": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "rules_java",
+        "name": "rules_java",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "bc81f1ba47ef5cc68ad32225c3d0e70b8c6f6077663835438da8d5733f917598",
+        "strip_prefix": "rules_java-7cf3cefd652008d0a64a419c34c13bdca6c8f178",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_java/archive/7cf3cefd652008d0a64a419c34c13bdca6c8f178.zip",
+            "https://github.com/bazelbuild/rules_java/archive/7cf3cefd652008d0a64a419c34c13bdca6c8f178.zip"
+        ]
+    },
+    "rules_nodejs-2.2.2.tar.gz": {
+        "name": "rules_nodejs-2.2.2.tar.gz",
+        "sha256": "f2194102720e662dbf193546585d705e645314319554c6ce7e47d8b59f459e9c",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_nodejs/releases/download/2.2.2/rules_nodejs-2.2.2.tar.gz",
+            "https://github.com/bazelbuild/rules_nodejs/releases/download/2.2.2/rules_nodejs-2.2.2.tar.gz"
+        ]
+    },
+    "rules_pkg": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "rules_pkg",
+        "name": "rules_pkg",
+        "sha256": "038f1caa773a7e35b3663865ffb003169c6a71dc995e39bf4815792f385d837d",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_pkg/releases/download/0.4.0/rules_pkg-0.4.0.tar.gz",
+            "https://github.com/bazelbuild/rules_pkg/releases/download/0.4.0/rules_pkg-0.4.0.tar.gz"
+        ]
+    },
+    "rules_pkg-0.4.0.tar.gz": {
+        "name": "rules_pkg-0.4.0.tar.gz",
+        "sha256": "038f1caa773a7e35b3663865ffb003169c6a71dc995e39bf4815792f385d837d",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_pkg/releases/download/0.4.0/rules_pkg-0.4.0.tar.gz",
+            "https://github.com/bazelbuild/rules_pkg/releases/download/0.4.0/rules_pkg-0.4.0.tar.gz"
+        ]
+    },
+    "rules_proto": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "rules_proto",
+        "name": "rules_proto",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "8e7d59a5b12b233be5652e3d29f42fba01c7cbab09f6b3a8d0a57ed6d1e9a0da",
+        "strip_prefix": "rules_proto-7e4afce6fe62dbff0a4a03450143146f9f2d7488",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_proto/archive/7e4afce6fe62dbff0a4a03450143146f9f2d7488.tar.gz",
+            "https://github.com/bazelbuild/rules_proto/archive/7e4afce6fe62dbff0a4a03450143146f9f2d7488.tar.gz"
+        ]
+    },
+    "six": {
+        "build_file": "@com_github_grpc_grpc//third_party:six.BUILD",
+        "generator_function": "grpc_deps",
+        "generator_name": "six",
+        "name": "six",
+        "sha256": "1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926",
+        "urls": [
+            "https://files.pythonhosted.org/packages/71/39/171f1c67cd00715f190ba0b100d606d440a28c93c7714febeca8b79af85e/six-1.16.0.tar.gz"
+        ]
+    },
+    "upb": {
+        "generator_function": "grpc_deps",
+        "generator_name": "upb",
+        "name": "upb",
+        "sha256": "6a5f67874af66b239b709c572ac1a5a00fdb1b29beaf13c3e6f79b1ba10dc7c4",
+        "strip_prefix": "upb-2de300726a1ba2de9a468468dc5ff9ed17a3215f",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/protocolbuffers/upb/archive/2de300726a1ba2de9a468468dc5ff9ed17a3215f.tar.gz",
+            "https://github.com/protocolbuffers/upb/archive/2de300726a1ba2de9a468468dc5ff9ed17a3215f.tar.gz"
+        ]
+    },
+    "v1.41.0.tar.gz": {
+        "name": "v1.41.0.tar.gz",
+        "sha256": "e5fb30aae1fa1cffa4ce00aa0bbfab908c0b899fcf0bbc30e268367d660d8656",
+        "urls": [
+            "https://mirror.bazel.build/github.com/grpc/grpc/archive/v1.41.0.tar.gz",
+            "https://github.com/grpc/grpc/archive/v1.41.0.tar.gz"
+        ]
+    },
+    "v1.5.0-4.zip": {
+        "name": "v1.5.0-4.zip",
+        "sha256": "d320d59b89a163c5efccbe4915ae6a49883ce653cdc670643dfa21c6063108e4",
+        "urls": [
+            "https://mirror.bazel.build/github.com/luben/zstd-jni/archive/v1.5.0-4.zip",
+            "https://github.com/luben/zstd-jni/archive/v1.5.0-4.zip"
+        ]
+    },
+    "v3.13.0.tar.gz": {
+        "name": "v3.13.0.tar.gz",
+        "sha256": "9b4ee22c250fe31b16f1a24d61467e40780a3fbb9b91c3b65be2a376ed913a1a",
+        "urls": [
+            "https://mirror.bazel.build/github.com/protocolbuffers/protobuf/archive/v3.13.0.tar.gz",
+            "https://github.com/protocolbuffers/protobuf/archive/v3.13.0.tar.gz"
+        ]
+    },
+    "zlib": {
+        "build_file": "@com_github_grpc_grpc//third_party:zlib.BUILD",
+        "generator_function": "grpc_deps",
+        "generator_name": "zlib",
+        "name": "zlib",
+        "sha256": "6d4d6640ca3121620995ee255945161821218752b551a1a180f4215f7d124d45",
+        "strip_prefix": "zlib-cacf7f1d4e3d44d871b605da3b647f07d718623f",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/madler/zlib/archive/cacf7f1d4e3d44d871b605da3b647f07d718623f.tar.gz",
+            "https://github.com/madler/zlib/archive/cacf7f1d4e3d44d871b605da3b647f07d718623f.tar.gz"
+        ]
+    },
+    "zstd-jni": {
+        "build_file": "//third_party:zstd-jni/zstd-jni.BUILD",
+        "generator_function": "dist_http_archive",
+        "generator_name": "zstd-jni",
+        "name": "zstd-jni",
+        "patch_args": [
+            "-p1"
+        ],
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "patches": [
+            "//third_party:zstd-jni/Native.java.patch"
+        ],
+        "sha256": "d320d59b89a163c5efccbe4915ae6a49883ce653cdc670643dfa21c6063108e4",
+        "strip_prefix": "zstd-jni-1.5.0-4",
+        "urls": [
+            "https://mirror.bazel.build/github.com/luben/zstd-jni/archive/v1.5.0-4.zip",
+            "https://github.com/luben/zstd-jni/archive/v1.5.0-4.zip"
+        ]
+    },
+    "zulu11.50.19-ca-jdk11.0.12-linux_aarch64.tar.gz": {
+        "name": "zulu11.50.19-ca-jdk11.0.12-linux_aarch64.tar.gz",
+        "sha256": "61254688067454d3ccf0ef25993b5dcab7b56c8129e53b73566c28a8dd4d48fb",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.50.19-ca-jdk11.0.12/zulu11.50.19-ca-jdk11.0.12-linux_aarch64.tar.gz"
+        ]
+    },
+    "zulu11.50.19-ca-jdk11.0.12-linux_x64.tar.gz": {
+        "name": "zulu11.50.19-ca-jdk11.0.12-linux_x64.tar.gz",
+        "sha256": "b8e8a63b79bc312aa90f3558edbea59e71495ef1a9c340e38900dd28a1c579f3",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.50.19-ca-jdk11.0.12/zulu11.50.19-ca-jdk11.0.12-linux_x64.tar.gz"
+        ]
+    },
+    "zulu11.50.19-ca-jdk11.0.12-macosx_aarch64.tar.gz": {
+        "name": "zulu11.50.19-ca-jdk11.0.12-macosx_aarch64.tar.gz",
+        "sha256": "e908a0b4c0da08d41c3e19230f819b364ff2e5f1dafd62d2cf991a85a34d3a17",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.50.19-ca-jdk11.0.12/zulu11.50.19-ca-jdk11.0.12-macosx_aarch64.tar.gz"
+        ]
+    },
+    "zulu11.50.19-ca-jdk11.0.12-macosx_x64.tar.gz": {
+        "name": "zulu11.50.19-ca-jdk11.0.12-macosx_x64.tar.gz",
+        "sha256": "0b8c8b7cf89c7c55b7e2239b47201d704e8d2170884875b00f3103cf0662d6d7",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.50.19-ca-jdk11.0.12/zulu11.50.19-ca-jdk11.0.12-macosx_x64.tar.gz"
+        ]
+    },
+    "zulu11.50.19-ca-jdk11.0.12-win_x64.tar.gz": {
+        "name": "zulu11.50.19-ca-jdk11.0.12-win_x64.tar.gz",
+        "sha256": "42ae65e75d615a3f06a674978e1fa85fdf078cad94e553fee3e779b2b42bb015",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.50.19-ca-jdk11.0.12/zulu11.50.19-ca-jdk11.0.12-win_x64.zip"
+        ]
+    },
+    "zulu17.30.15-ca-jdk17.0.1-win_aarch64.zip": {
+        "name": "zulu17.30.15-ca-jdk17.0.1-win_aarch64.zip",
+        "sha256": "811d7e7591bac4f081dfb00ba6bd15b6fc5969e1f89f0f327ef75147027c3877",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.30.15-ca-jdk17.0.1-win_aarch64.zip",
+            "https://cdn.azul.com/zulu/bin/zulu17.30.15-ca-jdk17.0.1-win_aarch64.zip"
+        ]
+    }
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_5/upb-clang16.patch b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_5/upb-clang16.patch
new file mode 100644
index 000000000000..6280082e52a5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_5/upb-clang16.patch
@@ -0,0 +1,83 @@
+diff --git a/distdir_deps.bzl b/distdir_deps.bzl
+index 9068f50537..b3f45e8653 100644
+--- a/distdir_deps.bzl
++++ b/distdir_deps.bzl
+@@ -110,6 +110,8 @@ DIST_DEPS = {
+     "protocolbuffers": {
+         "archive": "2de300726a1ba2de9a468468dc5ff9ed17a3215f.tar.gz",
+         "sha256": "6a5f67874af66b239b709c572ac1a5a00fdb1b29beaf13c3e6f79b1ba10dc7c4",
++        "patches": ["//:upb-clang16.patch"],
++        "patch_args": ["-p1"],
+         "urls": [
+             "https://mirror.bazel.build/github.com/protocolbuffers/upb/archive/2de300726a1ba2de9a468468dc5ff9ed17a3215f.tar.gz",
+             "https://github.com/protocolbuffers/upb/archive/2de300726a1ba2de9a468468dc5ff9ed17a3215f.tar.gz",
+@@ -131,6 +133,7 @@ DIST_DEPS = {
+         "patches": [
+             "//third_party/grpc:grpc_1.41.0.patch",
+             "//third_party/grpc:grpc_1.41.0.win_arm64.patch",
++            "//:grpc-upb-clang16.patch",
+         ],
+         "used_in": [
+             "additional_distfiles",
+diff --git a/grpc-upb-clang16.patch b/grpc-upb-clang16.patch
+new file mode 100644
+index 0000000000..69194099db
+--- /dev/null
++++ b/grpc-upb-clang16.patch
+@@ -0,0 +1,13 @@
++diff -r -u a/bazel/grpc_deps.bzl b/bazel/grpc_deps.bzl
++--- a/bazel/grpc_deps.bzl
+++++ b/bazel/grpc_deps.bzl
++@@ -340,6 +340,8 @@
++             name = "upb",
++             sha256 = "6a5f67874af66b239b709c572ac1a5a00fdb1b29beaf13c3e6f79b1ba10dc7c4",
++             strip_prefix = "upb-2de300726a1ba2de9a468468dc5ff9ed17a3215f",
+++            patches = ["//:upb-clang16.patch"],
+++            patch_args = ["-p1"],
++             urls = [
++                 "https://storage.googleapis.com/grpc-bazel-mirror/github.com/protocolbuffers/upb/archive/2de300726a1ba2de9a468468dc5ff9ed17a3215f.tar.gz",
++                 "https://github.com/protocolbuffers/upb/archive/2de300726a1ba2de9a468468dc5ff9ed17a3215f.tar.gz",
++
++diff -r -u a/third_party/upb/bazel/build_defs.bzl b/third_party/upb/bazel/build_defs.bzl
++--- a/third_party/upb/bazel/build_defs.bzl	2021-09-25 04:33:41.000000000 +0200
+++++ b/third_party/upb/bazel/build_defs.bzl	2023-11-22 22:27:39.421459688 +0100
++@@ -34,6 +34,7 @@
++         "-Wextra",
++         # "-Wshorten-64-to-32",  # not in GCC (and my Kokoro images doesn't have Clang)
++         "-Werror",
+++        "-Wno-gnu-offsetof-extensions",
++         "-Wno-long-long",
++         # copybara:strip_end
++     ],
++@@ -48,6 +49,7 @@
++         "-pedantic",
++         "-Werror=pedantic",
++         "-Wall",
+++        "-Wno-gnu-offsetof-extensions",
++         "-Wstrict-prototypes",
++         # GCC (at least) emits spurious warnings for this that cannot be fixed
++         # without introducing redundant initialization (with runtime cost):
+diff --git a/upb-clang16.patch b/upb-clang16.patch
+new file mode 100644
+index 0000000000..f81855181f
+--- /dev/null
++++ upb-clang16.patch
+@@ -0,0 +1,18 @@
++--- a/bazel/build_defs.bzl
+++++ b/bazel/build_defs.bzl
++@@ -34,6 +34,7 @@
++         "-Wextra",
++         # "-Wshorten-64-to-32",  # not in GCC (and my Kokoro images doesn't have Clang)
++         "-Werror",
+++        "-Wno-gnu-offsetof-extensions",
++         "-Wno-long-long",
++         # copybara:strip_end
++     ],
++@@ -48,6 +49,7 @@
++         "-pedantic",
++         "-Werror=pedantic",
++         "-Wall",
+++        "-Wno-gnu-offsetof-extensions",
++         "-Wstrict-prototypes",
++         # GCC (at least) emits spurious warnings for this that cannot be fixed
++         # without introducing redundant initialization (with runtime cost):
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_5/update-srcDeps.py b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_5/update-srcDeps.py
new file mode 100755
index 000000000000..d409a32e1389
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_5/update-srcDeps.py
@@ -0,0 +1,54 @@
+#!/usr/bin/env python3
+import sys
+import json
+
+if len(sys.argv) != 2:
+    print("usage: ./this-script src-deps.json < WORKSPACE", file=sys.stderr)
+    print("Takes the bazel WORKSPACE file and reads all archives into a json dict (by evaling it as python code)", file=sys.stderr)
+    print("Hail Eris.", file=sys.stderr)
+    sys.exit(1)
+
+http_archives = []
+
+# just the kw args are the dict { name, sha256, urls … }
+def http_archive(**kw):
+    http_archives.append(kw)
+# like http_file
+def http_file(**kw):
+    http_archives.append(kw)
+
+# this is inverted from http_archive/http_file and bundles multiple archives
+def _distdir_tar(**kw):
+    for archive_name in kw['archives']:
+        http_archives.append({
+            "name": archive_name,
+            "sha256": kw['sha256'][archive_name],
+            "urls": kw['urls'][archive_name]
+        })
+
+# TODO?
+def git_repository(**kw):
+    print(json.dumps(kw, sort_keys=True, indent=4), file=sys.stderr)
+    sys.exit(1)
+
+# execute the WORKSPACE like it was python code in this module,
+# using all the function stubs from above.
+exec(sys.stdin.read())
+
+# transform to a dict with the names as keys
+d = { el['name']: el for el in http_archives }
+
+def has_urls(el):
+    return ('url' in el and el['url']) or ('urls' in el and el['urls'])
+def has_sha256(el):
+    return 'sha256' in el and el['sha256']
+bad_archives = list(filter(lambda el: not has_urls(el) or not has_sha256(el), d.values()))
+if bad_archives:
+    print('Following bazel dependencies are missing url or sha256', file=sys.stderr)
+    print('Check bazel sources for master or non-checksummed dependencies', file=sys.stderr)
+    for el in bad_archives:
+        print(json.dumps(el, sort_keys=True, indent=4), file=sys.stderr)
+    sys.exit(1)
+
+with open(sys.argv[1], "w") as f:
+    print(json.dumps(d, sort_keys=True, indent=4), file=f)
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_6/actions_path.patch b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_6/actions_path.patch
new file mode 100644
index 000000000000..1fa1e5748333
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_6/actions_path.patch
@@ -0,0 +1,41 @@
+diff --git a/src/main/java/com/google/devtools/build/lib/exec/local/PosixLocalEnvProvider.java b/src/main/java/com/google/devtools/build/lib/exec/local/PosixLocalEnvProvider.java
+index 6fff2af..7e2877e 100644
+--- a/src/main/java/com/google/devtools/build/lib/exec/local/PosixLocalEnvProvider.java
++++ b/src/main/java/com/google/devtools/build/lib/exec/local/PosixLocalEnvProvider.java
+@@ -47,6 +47,16 @@ public final class PosixLocalEnvProvider implements LocalEnvProvider {
+       Map<String, String> env, BinTools binTools, String fallbackTmpDir) {
+     ImmutableMap.Builder<String, String> result = ImmutableMap.builder();
+     result.putAll(Maps.filterKeys(env, k -> !k.equals("TMPDIR")));
++
++    // In case we are running on NixOS.
++    // If bash is called with an unset PATH on this platform,
++    // it will set it to /no-such-path and default tools will be missings.
++    // See, https://github.com/NixOS/nixpkgs/issues/94222
++    // So we ensure that minimal dependencies are present.
++    if (!env.containsKey("PATH")){
++        result.put("PATH", "@actionsPathPatch@");
++    }
++ 
+     String p = clientEnv.get("TMPDIR");
+     if (Strings.isNullOrEmpty(p)) {
+       // Do not use `fallbackTmpDir`, use `/tmp` instead. This way if the user didn't export TMPDIR
+index 95642767c6..39d3c62461 100644
+--- a/src/main/java/com/google/devtools/build/lib/exec/local/XcodeLocalEnvProvider.java
++++ b/src/main/java/com/google/devtools/build/lib/exec/local/XcodeLocalEnvProvider.java
+@@ -74,6 +74,16 @@ public final class XcodeLocalEnvProvider implements LocalEnvProvider {
+
+     ImmutableMap.Builder<String, String> newEnvBuilder = ImmutableMap.builder();
+     newEnvBuilder.putAll(Maps.filterKeys(env, k -> !k.equals("TMPDIR")));
++
++    // In case we are running on NixOS.
++    // If bash is called with an unset PATH on this platform,
++    // it will set it to /no-such-path and default tools will be missings.
++    // See, https://github.com/NixOS/nixpkgs/issues/94222
++    // So we ensure that minimal dependencies are present.
++    if (!env.containsKey("PATH")){
++      newEnvBuilder.put("PATH", "@actionsPathPatch@");
++    }
++
+     String p = clientEnv.get("TMPDIR");
+     if (Strings.isNullOrEmpty(p)) {
+       // Do not use `fallbackTmpDir`, use `/tmp` instead. This way if the user didn't export TMPDIR
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_6/default.nix b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_6/default.nix
new file mode 100644
index 000000000000..75c014040e52
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_6/default.nix
@@ -0,0 +1,699 @@
+{ stdenv, callPackage, lib, fetchurl, fetchpatch, fetchFromGitHub, installShellFiles
+, runCommand, runCommandCC, makeWrapper, recurseIntoAttrs
+# this package (through the fixpoint glass)
+, bazel_self
+, lr, xe, zip, unzip, bash, writeCBin, coreutils
+, which, gawk, gnused, gnutar, gnugrep, gzip, findutils
+, diffutils, gnupatch
+# updater
+, python3, writeScript
+# Apple dependencies
+, cctools, libcxx, CoreFoundation, CoreServices, Foundation
+# Allow to independently override the jdks used to build and run respectively
+, buildJdk, runJdk
+, runtimeShell
+# Always assume all markers valid (this is needed because we remove markers; they are non-deterministic).
+# Also, don't clean up environment variables (so that NIX_ environment variables are passed to compilers).
+, enableNixHacks ? false
+, gcc-unwrapped
+, autoPatchelfHook
+, file
+, substituteAll
+, writeTextFile
+, writeShellApplication
+, makeBinaryWrapper
+}:
+
+let
+  version = "6.4.0";
+  sourceRoot = ".";
+
+  src = fetchurl {
+    url = "https://github.com/bazelbuild/bazel/releases/download/${version}/bazel-${version}-dist.zip";
+    hash = "sha256-vYj/YCyLuynugroqaxKtCS1R7GaMZXf5Yo8Y5I/05R4=";
+  };
+
+  # Update with
+  # 1. export BAZEL_SELF=$(nix-build -A bazel_6)
+  # 2. update version and hash for sources above
+  # 3. `eval $(nix-build -A bazel_6.updater)`
+  # 4. add new dependencies from the dict in ./src-deps.json if required by failing build
+  srcDeps = lib.attrsets.attrValues srcDepsSet;
+  srcDepsSet =
+    let
+      srcs = lib.importJSON ./src-deps.json;
+      toFetchurl = d: lib.attrsets.nameValuePair d.name (fetchurl {
+        urls = d.urls or [d.url];
+        sha256 = d.sha256;
+      });
+    in builtins.listToAttrs (map toFetchurl [
+      srcs.desugar_jdk_libs
+      srcs.io_bazel_skydoc
+      srcs.bazel_skylib
+      srcs.bazelci_rules
+      srcs.io_bazel_rules_sass
+      srcs.platforms
+      srcs.remote_java_tools_for_testing
+      srcs."coverage_output_generator-v2.6.zip"
+      srcs.build_bazel_rules_nodejs
+      srcs.android_tools_for_testing
+      srcs.openjdk_linux_vanilla
+      srcs.bazel_toolchains
+      srcs.com_github_grpc_grpc
+      srcs.upb
+      srcs.com_google_protobuf
+      srcs.rules_pkg
+      srcs.rules_cc
+      srcs.rules_java
+      srcs.rules_proto
+      srcs.rules_nodejs
+      srcs.rules_license
+      srcs.com_google_absl
+      srcs.com_googlesource_code_re2
+      srcs.com_github_cares_cares
+      srcs.com_envoyproxy_protoc_gen_validate
+      srcs.com_google_googleapis
+      srcs.bazel_gazelle
+    ]);
+
+  distDir = runCommand "bazel-deps" {} ''
+    mkdir -p $out
+    for i in ${builtins.toString srcDeps}; do cp $i $out/$(stripHash $i); done
+  '';
+
+  defaultShellUtils =
+    # Keep this list conservative. For more exotic tools, prefer to use
+    # @rules_nixpkgs to pull in tools from the nix repository. Example:
+    #
+    # WORKSPACE:
+    #
+    #     nixpkgs_git_repository(
+    #         name = "nixpkgs",
+    #         revision = "def5124ec8367efdba95a99523dd06d918cb0ae8",
+    #     )
+    #
+    #     # This defines an external Bazel workspace.
+    #     nixpkgs_package(
+    #         name = "bison",
+    #         repositories = { "nixpkgs": "@nixpkgs//:default.nix" },
+    #     )
+    #
+    # some/BUILD.bazel:
+    #
+    #     genrule(
+    #        ...
+    #        cmd = "$(location @bison//:bin/bison) -other -args",
+    #        tools = [
+    #            ...
+    #            "@bison//:bin/bison",
+    #        ],
+    #     )
+    [
+      bash
+      coreutils
+      diffutils
+      file
+      findutils
+      gawk
+      gnugrep
+      gnupatch
+      gnused
+      gnutar
+      gzip
+      python3
+      unzip
+      which
+      zip
+    ];
+
+  defaultShellPath = lib.makeBinPath defaultShellUtils;
+
+  bashWithDefaultShellUtilsSh = writeShellApplication {
+    name = "bash";
+    runtimeInputs = defaultShellUtils;
+    text = ''
+      if [[ "$PATH" == "/no-such-path" ]]; then
+        export PATH=${defaultShellPath}
+      fi
+      exec ${bash}/bin/bash "$@"
+    '';
+  };
+
+  # Script-based interpreters in shebangs aren't guaranteed to work,
+  # especially on MacOS. So let's produce a binary
+  bashWithDefaultShellUtils = stdenv.mkDerivation {
+    name = "bash";
+    src = bashWithDefaultShellUtilsSh;
+    nativeBuildInputs = [ makeBinaryWrapper ];
+    buildPhase = ''
+      makeWrapper ${bashWithDefaultShellUtilsSh}/bin/bash $out/bin/bash
+    '';
+  };
+
+  platforms = lib.platforms.linux ++ lib.platforms.darwin;
+
+  system = if stdenv.hostPlatform.isDarwin then "darwin" else "linux";
+
+  # on aarch64 Darwin, `uname -m` returns "arm64"
+  arch = with stdenv.hostPlatform; if isDarwin && isAarch64 then "arm64" else parsed.cpu.name;
+
+  bazelRC = writeTextFile {
+    name = "bazel-rc";
+    text = ''
+      startup --server_javabase=${runJdk}
+
+      # Can't use 'common'; https://github.com/bazelbuild/bazel/issues/3054
+      # Most commands inherit from 'build' anyway.
+      build --distdir=${distDir}
+      fetch --distdir=${distDir}
+      query --distdir=${distDir}
+
+      build --extra_toolchains=@bazel_tools//tools/jdk:nonprebuilt_toolchain_definition
+      build --tool_java_runtime_version=local_jdk_11
+      build --java_runtime_version=local_jdk_11
+
+      # load default location for the system wide configuration
+      try-import /etc/bazel.bazelrc
+    '';
+  };
+
+in
+stdenv.mkDerivation rec {
+  pname = "bazel";
+  inherit version;
+
+  meta = with lib; {
+    homepage = "https://github.com/bazelbuild/bazel/";
+    description = "Build tool that builds code quickly and reliably";
+    sourceProvenance = with sourceTypes; [
+      fromSource
+      binaryBytecode  # source bundles dependencies as jars
+    ];
+    license = licenses.asl20;
+    maintainers = lib.teams.bazel.members;
+    inherit platforms;
+  };
+
+  inherit src;
+  inherit sourceRoot;
+  patches = [
+    # upb definition inside bazel sets its own copts that take precedence
+    # over flags we set externally, so need to patch them at the source
+    ./upb-clang16.patch
+
+    # Force usage of the _non_ prebuilt java toolchain.
+    # the prebuilt one does not work in nix world.
+    ./java_toolchain.patch
+
+    # On Darwin, the last argument to gcc is coming up as an empty string. i.e: ''
+    # This is breaking the build of any C target. This patch removes the last
+    # argument if it's found to be an empty string.
+    ../trim-last-argument-to-gcc-if-empty.patch
+
+    # `java_proto_library` ignores `strict_proto_deps`
+    # https://github.com/bazelbuild/bazel/pull/16146
+    ./strict_proto_deps.patch
+
+    # On Darwin, using clang 6 to build fails because of a linker error (see #105573),
+    # but using clang 7 fails because libarclite_macosx.a cannot be found when linking
+    # the xcode_locator tool.
+    # This patch removes using the -fobjc-arc compiler option and makes the code
+    # compile without automatic reference counting. Caveat: this leaks memory, but
+    # we accept this fact because xcode_locator is only a short-lived process used during the build.
+    (substituteAll {
+      src = ./no-arc.patch;
+      multiBinPatch = if stdenv.hostPlatform.system == "aarch64-darwin" then "arm64" else "x86_64";
+    })
+
+    # --experimental_strict_action_env (which may one day become the default
+    # see bazelbuild/bazel#2574) hardcodes the default
+    # action environment to a non hermetic value (e.g. "/usr/local/bin").
+    # This is non hermetic on non-nixos systems. On NixOS, bazel cannot find the required binaries.
+    # So we are replacing this bazel paths by defaultShellPath,
+    # improving hermeticity and making it work in nixos.
+    (substituteAll {
+      src = ../strict_action_env.patch;
+      strictActionEnvPatch = defaultShellPath;
+    })
+
+    (substituteAll {
+      src = ./actions_path.patch;
+      actionsPathPatch = defaultShellPath;
+    })
+
+    # bazel reads its system bazelrc in /etc
+    # override this path to a builtin one
+    (substituteAll {
+      src = ../bazel_rc.patch;
+      bazelSystemBazelRCPath = bazelRC;
+    })
+  ] ++ lib.optional enableNixHacks ./nix-hacks.patch;
+
+
+  # Additional tests that check bazel’s functionality. Execute
+  #
+  #     nix-build . -A bazel_6.tests
+  #
+  # in the nixpkgs checkout root to exercise them locally.
+  passthru.tests =
+    let
+      runLocal = name: attrs: script:
+      let
+        attrs' = removeAttrs attrs [ "buildInputs" ];
+        buildInputs = attrs.buildInputs or [];
+      in
+      runCommandCC name ({
+        inherit buildInputs;
+        preferLocalBuild = true;
+        meta.platforms = platforms;
+      } // attrs') script;
+
+      # bazel wants to extract itself into $install_dir/install every time it runs,
+      # so let’s do that only once.
+      extracted = bazelPkg:
+        let install_dir =
+          # `install_base` field printed by `bazel info`, minus the hash.
+          # yes, this path is kinda magic. Sorry.
+          "$HOME/.cache/bazel/_bazel_nixbld";
+        in runLocal "bazel-extracted-homedir" { passthru.install_dir = install_dir; } ''
+            export HOME=$(mktemp -d)
+            touch WORKSPACE # yeah, everything sucks
+            install_base="$(${bazelPkg}/bin/bazel info | grep install_base)"
+            # assert it’s actually below install_dir
+            [[ "$install_base" =~ ${install_dir} ]] \
+              || (echo "oh no! $install_base but we are \
+            trying to copy ${install_dir} to $out instead!"; exit 1)
+            cp -R ${install_dir} $out
+          '';
+
+      bazelTest = { name, bazelScript, workspaceDir, bazelPkg, buildInputs ? [] }:
+        let
+          be = extracted bazelPkg;
+        in runLocal name { inherit buildInputs; } (
+          # skip extraction caching on Darwin, because nobody knows how Darwin works
+          (lib.optionalString (!stdenv.hostPlatform.isDarwin) ''
+            # set up home with pre-unpacked bazel
+            export HOME=$(mktemp -d)
+            mkdir -p ${be.install_dir}
+            cp -R ${be}/install ${be.install_dir}
+
+            # https://stackoverflow.com/questions/47775668/bazel-how-to-skip-corrupt-installation-on-centos6
+            # Bazel checks whether the mtime of the install dir files
+            # is >9 years in the future, otherwise it extracts itself again.
+            # see PosixFileMTime::IsUntampered in src/main/cpp/util
+            # What the hell bazel.
+            ${lr}/bin/lr -0 -U ${be.install_dir} | ${xe}/bin/xe -N0 -0 touch --date="9 years 6 months" {}
+          '')
+          +
+          ''
+            # Note https://github.com/bazelbuild/bazel/issues/5763#issuecomment-456374609
+            # about why to create a subdir for the workspace.
+            cp -r ${workspaceDir} wd && chmod u+w wd && cd wd
+
+            ${bazelScript}
+
+            touch $out
+          '');
+
+      bazelWithNixHacks = bazel_self.override { enableNixHacks = true; };
+
+      bazel-examples = fetchFromGitHub {
+        owner = "bazelbuild";
+        repo = "examples";
+        rev = "4183fc709c26a00366665e2d60d70521dc0b405d";
+        sha256 = "1mm4awx6sa0myiz9j4hwp71rpr7yh8vihf3zm15n2ii6xb82r31k";
+      };
+
+    in (lib.optionalAttrs (!stdenv.hostPlatform.isDarwin) {
+      # `extracted` doesn’t work on darwin
+      shebang = callPackage ../shebang-test.nix { inherit runLocal extracted bazelTest distDir; bazel = bazel_self;};
+    }) // {
+      bashTools = callPackage ../bash-tools-test.nix { inherit runLocal bazelTest distDir; bazel = bazel_self;};
+      cpp = callPackage ../cpp-test.nix { inherit runLocal bazelTest bazel-examples distDir; bazel = bazel_self;};
+      java = callPackage ../java-test.nix { inherit runLocal bazelTest bazel-examples distDir; bazel = bazel_self;};
+      protobuf = callPackage ../protobuf-test.nix { inherit runLocal bazelTest distDir; bazel = bazel_self; };
+      pythonBinPath = callPackage ../python-bin-path-test.nix { inherit runLocal bazelTest distDir; bazel = bazel_self;};
+
+      bashToolsWithNixHacks = callPackage ../bash-tools-test.nix { inherit runLocal bazelTest distDir; bazel = bazelWithNixHacks; };
+
+      cppWithNixHacks = callPackage ../cpp-test.nix { inherit runLocal bazelTest bazel-examples distDir; bazel = bazelWithNixHacks; };
+      javaWithNixHacks = callPackage ../java-test.nix { inherit runLocal bazelTest bazel-examples distDir; bazel = bazelWithNixHacks; };
+      protobufWithNixHacks = callPackage ../protobuf-test.nix { inherit runLocal bazelTest distDir; bazel = bazelWithNixHacks; };
+      pythonBinPathWithNixHacks = callPackage ../python-bin-path-test.nix { inherit runLocal bazelTest distDir; bazel = bazelWithNixHacks; };
+    };
+
+  src_for_updater = stdenv.mkDerivation rec {
+    name = "updater-sources";
+    inherit src;
+    nativeBuildInputs = [ unzip ];
+    inherit sourceRoot;
+    installPhase = ''
+      runHook preInstall
+
+      # prevent bazel version check failing in the updater
+      rm .bazelversion
+      cp -r . "$out"
+
+      runHook postInstall
+    '';
+  };
+  # update the list of workspace dependencies
+  passthru.updater = writeScript "update-bazel-deps.sh" ''
+    #!${runtimeShell}
+    (cd "${src_for_updater}" &&
+        BAZEL_USE_CPP_ONLY_TOOLCHAIN=1 \
+        "$BAZEL_SELF"/bin/bazel \
+            query 'kind(http_archive, //external:*) + kind(http_file, //external:*) + kind(distdir_tar, //external:*) + kind(git_repository, //external:*)' \
+            --loading_phase_threads=1 \
+            --output build) \
+    | "${python3}"/bin/python3 "${./update-srcDeps.py}" \
+      "${builtins.toString ./src-deps.json}"
+  '';
+
+  # Necessary for the tests to pass on Darwin with sandbox enabled.
+  # Bazel starts a local server and needs to bind a local address.
+  __darwinAllowLocalNetworking = true;
+
+  postPatch = let
+
+    darwinPatches = ''
+      bazelLinkFlags () {
+        eval set -- "$NIX_LDFLAGS"
+        local flag
+        for flag in "$@"; do
+          printf ' -Wl,%s' "$flag"
+        done
+      }
+
+      # Disable Bazel's Xcode toolchain detection which would configure compilers
+      # and linkers from Xcode instead of from PATH
+      export BAZEL_USE_CPP_ONLY_TOOLCHAIN=1
+
+      # Explicitly configure gcov since we don't have it on Darwin, so autodetection fails
+      export GCOV=${coreutils}/bin/false
+
+      # Framework search paths aren't added by bintools hook
+      # https://github.com/NixOS/nixpkgs/pull/41914
+      export NIX_LDFLAGS+=" -F${CoreFoundation}/Library/Frameworks -F${CoreServices}/Library/Frameworks -F${Foundation}/Library/Frameworks"
+
+      # libcxx includes aren't added by libcxx hook
+      # https://github.com/NixOS/nixpkgs/pull/41589
+      export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -isystem ${lib.getDev libcxx}/include/c++/v1"
+      # for CLang 16 compatibility in external/{absl,upb} dependencies
+      export NIX_CFLAGS_COMPILE+=" -Wno-deprecated-builtins -Wno-gnu-offsetof-extensions"
+
+      # don't use system installed Xcode to run clang, use Nix clang instead
+      sed -i -E "s;/usr/bin/xcrun (--sdk macosx )?clang;${stdenv.cc}/bin/clang $NIX_CFLAGS_COMPILE $(bazelLinkFlags) -framework CoreFoundation;g" \
+        scripts/bootstrap/compile.sh \
+        tools/osx/BUILD
+
+      substituteInPlace scripts/bootstrap/compile.sh --replace ' -mmacosx-version-min=10.9' ""
+
+      # nixpkgs's libSystem cannot use pthread headers directly, must import GCD headers instead
+      sed -i -e "/#include <pthread\/spawn.h>/i #include <dispatch/dispatch.h>" src/main/cpp/blaze_util_darwin.cc
+
+      # clang installed from Xcode has a compatibility wrapper that forwards
+      # invocations of gcc to clang, but vanilla clang doesn't
+      sed -i -e 's;_find_generic(repository_ctx, "gcc", "CC", overriden_tools);_find_generic(repository_ctx, "clang", "CC", overriden_tools);g' tools/cpp/unix_cc_configure.bzl
+
+      sed -i -e 's;"/usr/bin/libtool";_find_generic(repository_ctx, "libtool", "LIBTOOL", overriden_tools);g' tools/cpp/unix_cc_configure.bzl
+      wrappers=( tools/cpp/osx_cc_wrapper.sh.tpl )
+      for wrapper in "''${wrappers[@]}"; do
+        sed -i -e "s,/usr/bin/gcc,${stdenv.cc}/bin/clang,g" $wrapper
+        sed -i -e "s,/usr/bin/install_name_tool,${cctools}/bin/install_name_tool,g" $wrapper
+        sed -i -e "s,/usr/bin/xcrun install_name_tool,${cctools}/bin/install_name_tool,g" $wrapper
+      done
+    '';
+
+    genericPatches = ''
+      # md5sum is part of coreutils
+      sed -i 's|/sbin/md5|md5sum|g' \
+        src/BUILD third_party/ijar/test/testenv.sh tools/objc/libtool.sh
+
+      # replace initial value of pythonShebang variable in BazelPythonSemantics.java
+      substituteInPlace src/main/java/com/google/devtools/build/lib/bazel/rules/python/BazelPythonSemantics.java \
+        --replace '"#!/usr/bin/env " + pythonExecutableName' "\"#!${python3}/bin/python\""
+
+      substituteInPlace src/main/java/com/google/devtools/build/lib/starlarkbuildapi/python/PyRuntimeInfoApi.java \
+        --replace '"#!/usr/bin/env python3"' "\"#!${python3}/bin/python\""
+
+      # substituteInPlace is rather slow, so prefilter the files with grep
+      grep -rlZ /bin/ src/main/java/com/google/devtools | while IFS="" read -r -d "" path; do
+        # If you add more replacements here, you must change the grep above!
+        # Only files containing /bin are taken into account.
+        substituteInPlace "$path" \
+          --replace /bin/bash ${bashWithDefaultShellUtils}/bin/bash \
+          --replace "/usr/bin/env bash" ${bashWithDefaultShellUtils}/bin/bash \
+          --replace "/usr/bin/env python" ${python3}/bin/python \
+          --replace /usr/bin/env ${coreutils}/bin/env \
+          --replace /bin/true ${coreutils}/bin/true
+      done
+
+      grep -rlZ /bin/ tools/python | while IFS="" read -r -d "" path; do
+        substituteInPlace "$path" \
+          --replace "/usr/bin/env python2" ${python3.interpreter} \
+          --replace "/usr/bin/env python3" ${python3}/bin/python \
+          --replace /usr/bin/env ${coreutils}/bin/env
+      done
+
+      # bazel test runner include references to /bin/bash
+      substituteInPlace tools/build_rules/test_rules.bzl \
+        --replace /bin/bash ${bashWithDefaultShellUtils}/bin/bash
+
+      for i in $(find tools/cpp/ -type f)
+      do
+        substituteInPlace $i \
+          --replace /bin/bash ${bashWithDefaultShellUtils}/bin/bash
+      done
+
+      # Fixup scripts that generate scripts. Not fixed up by patchShebangs below.
+      substituteInPlace scripts/bootstrap/compile.sh \
+          --replace /bin/bash ${bashWithDefaultShellUtils}/bin/bash
+
+      # add nix environment vars to .bazelrc
+      cat >> .bazelrc <<EOF
+      # Limit the resources Bazel is allowed to use during the build to 1/2 the
+      # available RAM and 3/4 the available CPU cores. This should help avoid
+      # overwhelming the build machine.
+      build --toolchain_resolution_debug=".*"
+      build --local_ram_resources=HOST_RAM*.5
+      build --local_cpu_resources=HOST_CPUS*.75
+
+      build --distdir=${distDir}
+      fetch --distdir=${distDir}
+      build --copt="$(echo $NIX_CFLAGS_COMPILE | sed -e 's/ /" --copt="/g')"
+      build --host_copt="$(echo $NIX_CFLAGS_COMPILE | sed -e 's/ /" --host_copt="/g')"
+      build --linkopt="$(echo $(< ${stdenv.cc}/nix-support/libcxx-ldflags) | sed -e 's/ /" --linkopt="/g')"
+      build --host_linkopt="$(echo $(< ${stdenv.cc}/nix-support/libcxx-ldflags) | sed -e 's/ /" --host_linkopt="/g')"
+      build --linkopt="-Wl,$(echo $NIX_LDFLAGS | sed -e 's/ /" --linkopt="-Wl,/g')"
+      build --host_linkopt="-Wl,$(echo $NIX_LDFLAGS | sed -e 's/ /" --host_linkopt="-Wl,/g')"
+      build --extra_toolchains=@bazel_tools//tools/jdk:nonprebuilt_toolchain_definition
+      build --verbose_failures
+      build --curses=no
+      build --features=-layering_check
+      build --experimental_strict_java_deps=off
+      build --strict_proto_deps=off
+      EOF
+
+      cat >> third_party/grpc/bazel_1.41.0.patch <<EOF
+      diff --git a/third_party/grpc/BUILD b/third_party/grpc/BUILD
+      index 39ee9f97c6..9128d20c85 100644
+      --- a/third_party/grpc/BUILD
+      +++ b/third_party/grpc/BUILD
+      @@ -28,7 +28,6 @@ licenses(["notice"])
+       package(
+           default_visibility = ["//visibility:public"],
+           features = [
+      -        "layering_check",
+               "-parse_headers",
+           ],
+       )
+      EOF
+
+      # add the same environment vars to compile.sh
+      sed -e "/\$command \\\\$/a --copt=\"$(echo $NIX_CFLAGS_COMPILE | sed -e 's/ /" --copt=\"/g')\" \\\\" \
+          -e "/\$command \\\\$/a --host_copt=\"$(echo $NIX_CFLAGS_COMPILE | sed -e 's/ /" --host_copt=\"/g')\" \\\\" \
+          -e "/\$command \\\\$/a --linkopt=\"$(echo $(< ${stdenv.cc}/nix-support/libcxx-ldflags) | sed -e 's/ /" --linkopt=\"/g')\" \\\\" \
+          -e "/\$command \\\\$/a --host_linkopt=\"$(echo $(< ${stdenv.cc}/nix-support/libcxx-ldflags) | sed -e 's/ /" --host_linkopt=\"/g')\" \\\\" \
+          -e "/\$command \\\\$/a --linkopt=\"-Wl,$(echo $NIX_LDFLAGS | sed -e 's/ /" --linkopt=\"-Wl,/g')\" \\\\" \
+          -e "/\$command \\\\$/a --host_linkopt=\"-Wl,$(echo $NIX_LDFLAGS | sed -e 's/ /" --host_linkopt=\"-Wl,/g')\" \\\\" \
+          -e "/\$command \\\\$/a --tool_java_runtime_version=local_jdk_11 \\\\" \
+          -e "/\$command \\\\$/a --java_runtime_version=local_jdk_11 \\\\" \
+          -e "/\$command \\\\$/a --verbose_failures \\\\" \
+          -e "/\$command \\\\$/a --curses=no \\\\" \
+          -e "/\$command \\\\$/a --features=-layering_check \\\\" \
+          -e "/\$command \\\\$/a --experimental_strict_java_deps=off \\\\" \
+          -e "/\$command \\\\$/a --strict_proto_deps=off \\\\" \
+          -i scripts/bootstrap/compile.sh
+
+      # This is necessary to avoid:
+      # "error: no visible @interface for 'NSDictionary' declares the selector
+      # 'initWithContentsOfURL:error:'"
+      # This can be removed when the apple_sdk is upgraded beyond 10.13+
+      sed -i '/initWithContentsOfURL:versionPlistUrl/ {
+        N
+        s/error:nil\];/\];/
+      }' tools/osx/xcode_locator.m
+
+      # append the PATH with defaultShellPath in tools/bash/runfiles/runfiles.bash
+      echo "PATH=\$PATH:${defaultShellPath}" >> runfiles.bash.tmp
+      cat tools/bash/runfiles/runfiles.bash >> runfiles.bash.tmp
+      mv runfiles.bash.tmp tools/bash/runfiles/runfiles.bash
+
+      patchShebangs .
+    '';
+    in lib.optionalString stdenv.hostPlatform.isDarwin darwinPatches
+     + genericPatches;
+
+  buildInputs = [buildJdk bashWithDefaultShellUtils] ++ defaultShellUtils;
+
+  # when a command can’t be found in a bazel build, you might also
+  # need to add it to `defaultShellPath`.
+  nativeBuildInputs = [
+    installShellFiles
+    makeWrapper
+    python3
+    unzip
+    which
+    zip
+    python3.pkgs.absl-py   # Needed to build fish completion
+  ] ++ lib.optionals (stdenv.isDarwin) [ cctools libcxx CoreFoundation CoreServices Foundation ];
+
+  # Bazel makes extensive use of symlinks in the WORKSPACE.
+  # This causes problems with infinite symlinks if the build output is in the same location as the
+  # Bazel WORKSPACE. This is why before executing the build, the source code is moved into a
+  # subdirectory.
+  # Failing to do this causes "infinite symlink expansion detected"
+  preBuildPhases = ["preBuildPhase"];
+  preBuildPhase = ''
+    mkdir bazel_src
+    shopt -s dotglob extglob
+    mv !(bazel_src) bazel_src
+  '';
+  buildPhase = ''
+    runHook preBuild
+
+    # Increasing memory during compilation might be necessary.
+    # export BAZEL_JAVAC_OPTS="-J-Xmx2g -J-Xms200m"
+
+    # If EMBED_LABEL isn't set, it'd be auto-detected from CHANGELOG.md
+    # and `git rev-parse --short HEAD` which would result in
+    # "3.7.0- (@non-git)" due to non-git build and incomplete changelog.
+    # Actual bazel releases use scripts/release/common.sh which is based
+    # on branch/tag information which we don't have with tarball releases.
+    # Note that .bazelversion is always correct and is based on bazel-*
+    # executable name, version checks should work fine
+    export EMBED_LABEL="${version}- (@non-git)"
+    ${bash}/bin/bash ./bazel_src/compile.sh
+    ./bazel_src/scripts/generate_bash_completion.sh \
+        --bazel=./bazel_src/output/bazel \
+        --output=./bazel_src/output/bazel-complete.bash \
+        --prepend=./bazel_src/scripts/bazel-complete-header.bash \
+        --prepend=./bazel_src/scripts/bazel-complete-template.bash
+    ${python3}/bin/python3 ./bazel_src/scripts/generate_fish_completion.py \
+        --bazel=./bazel_src/output/bazel \
+        --output=./bazel_src/output/bazel-complete.fish
+
+    # need to change directory for bazel to find the workspace
+    cd ./bazel_src
+    # build execlog tooling
+    export HOME=$(mktemp -d)
+    ./output/bazel build src/tools/execlog:parser_deploy.jar
+    cd -
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+
+    # official wrapper scripts that searches for $WORKSPACE_ROOT/tools/bazel
+    # if it can’t find something in tools, it calls $out/bin/bazel-{version}-{os_arch}
+    # The binary _must_ exist with this naming if your project contains a .bazelversion
+    # file.
+    cp ./bazel_src/scripts/packages/bazel.sh $out/bin/bazel
+    wrapProgram $out/bin/bazel $wrapperfile --suffix PATH : ${defaultShellPath}
+    mv ./bazel_src/output/bazel $out/bin/bazel-${version}-${system}-${arch}
+
+    mkdir $out/share
+    cp ./bazel_src/bazel-bin/src/tools/execlog/parser_deploy.jar $out/share/parser_deploy.jar
+    cat <<EOF > $out/bin/bazel-execlog
+    #!${runtimeShell} -e
+    ${runJdk}/bin/java -jar $out/share/parser_deploy.jar \$@
+    EOF
+    chmod +x $out/bin/bazel-execlog
+
+    # shell completion files
+    installShellCompletion --bash \
+      --name bazel.bash \
+      ./bazel_src/output/bazel-complete.bash
+    installShellCompletion --zsh \
+      --name _bazel \
+      ./bazel_src/scripts/zsh_completion/_bazel
+    installShellCompletion --fish \
+      --name bazel.fish \
+      ./bazel_src/output/bazel-complete.fish
+  '';
+
+  # Install check fails on `aarch64-darwin`
+  # https://github.com/NixOS/nixpkgs/issues/145587
+  doInstallCheck = stdenv.hostPlatform.system != "aarch64-darwin";
+  installCheckPhase = ''
+    export TEST_TMPDIR=$(pwd)
+
+    hello_test () {
+      $out/bin/bazel test \
+        --test_output=errors \
+        examples/cpp:hello-success_test \
+        examples/java-native/src/test/java/com/example/myproject:hello
+    }
+
+    cd ./bazel_src
+
+    # If .bazelversion file is present in dist files and doesn't match `bazel` version
+    # running `bazel` command within bazel_src will fail.
+    # Let's remove .bazelversion within the test, if present it is meant to indicate bazel version
+    # to compile bazel with, not version of bazel to be built and tested.
+    rm -f .bazelversion
+
+    # test whether $WORKSPACE_ROOT/tools/bazel works
+
+    mkdir -p tools
+    cat > tools/bazel <<"EOF"
+    #!${runtimeShell} -e
+    exit 1
+    EOF
+    chmod +x tools/bazel
+
+    # first call should fail if tools/bazel is used
+    ! hello_test
+
+    cat > tools/bazel <<"EOF"
+    #!${runtimeShell} -e
+    exec "$BAZEL_REAL" "$@"
+    EOF
+
+    # second call succeeds because it defers to $out/bin/bazel-{version}-{os_arch}
+    hello_test
+
+    runHook postInstall
+  '';
+
+  # Save paths to hardcoded dependencies so Nix can detect them.
+  # This is needed because the templates get tar’d up into a .jar.
+  postFixup = ''
+    mkdir -p $out/nix-support
+    echo "${defaultShellPath}" >> $out/nix-support/depends
+    # The string literal specifying the path to the bazel-rc file is sometimes
+    # stored non-contiguously in the binary due to gcc optimisations, which leads
+    # Nix to miss the hash when scanning for dependencies
+    echo "${bazelRC}" >> $out/nix-support/depends
+  '' + lib.optionalString stdenv.isDarwin ''
+    echo "${cctools}" >> $out/nix-support/depends
+  '';
+
+  dontStrip = true;
+  dontPatchELF = true;
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_6/java_toolchain.patch b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_6/java_toolchain.patch
new file mode 100644
index 000000000000..219f4e0b7035
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_6/java_toolchain.patch
@@ -0,0 +1,33 @@
+diff --git a/tools/jdk/BUILD.tools b/tools/jdk/BUILD.tools
+--- a/tools/jdk/BUILD.tools
++++ b/tools/jdk/BUILD.tools
+@@ -3,6 +3,7 @@ load(
+     "DEFAULT_TOOLCHAIN_CONFIGURATION",
+     "PREBUILT_TOOLCHAIN_CONFIGURATION",
+     "VANILLA_TOOLCHAIN_CONFIGURATION",
++    "NONPREBUILT_TOOLCHAIN_CONFIGURATION",
+     "bootclasspath",
+     "default_java_toolchain",
+     "java_runtime_files",
+@@ -321,6 +322,21 @@ alias(
+     actual = ":toolchain",
+ )
+ 
++default_java_toolchain(
++  name = "nonprebuilt_toolchain",
++  configuration = NONPREBUILT_TOOLCHAIN_CONFIGURATION,
++  java_runtime = "@local_jdk//:jdk",
++)
++
++default_java_toolchain(
++  name = "nonprebuilt_toolchain_java11",
++  configuration = NONPREBUILT_TOOLCHAIN_CONFIGURATION,
++  java_runtime = "@local_jdk//:jdk",
++  source_version = "11",
++  target_version = "11",
++)
++
++
+ RELEASES = (8, 9, 10, 11)
+ 
+ [
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_6/nix-hacks.patch b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_6/nix-hacks.patch
new file mode 100644
index 000000000000..acae500d522c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_6/nix-hacks.patch
@@ -0,0 +1,40 @@
+diff --git a/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorFunction.java b/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorFunction.java
+index 25fbdcac9d..49616d37df 100644
+--- a/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorFunction.java
++++ b/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorFunction.java
+@@ -568,22 +568,7 @@ public final class RepositoryDelegatorFunction implements SkyFunction {
+       String content;
+       try {
+         content = FileSystemUtils.readContent(markerPath, StandardCharsets.UTF_8);
+-        String markerRuleKey = readMarkerFile(content, markerData);
+-        boolean verified = false;
+-        if (Preconditions.checkNotNull(ruleKey).equals(markerRuleKey)) {
+-          verified = handler.verifyMarkerData(rule, markerData, env);
+-          if (env.valuesMissing()) {
+-            return null;
+-          }
+-        }
+-
+-        if (verified) {
+-          return new Fingerprint().addString(content).digestAndReset();
+-        } else {
+-          // So that we are in a consistent state if something happens while fetching the repository
+-          markerPath.delete();
+-          return null;
+-        }
++        return new Fingerprint().addString(content).digestAndReset();
+       } catch (IOException e) {
+         throw new RepositoryFunctionException(e, Transience.TRANSIENT);
+       }
+diff --git a/src/main/java/com/google/devtools/build/lib/shell/JavaSubprocessFactory.java b/src/main/java/com/google/devtools/build/lib/shell/JavaSubprocessFactory.java
+index 1a45b8a3a2..a6b73213f6 100644
+--- a/src/main/java/com/google/devtools/build/lib/shell/JavaSubprocessFactory.java
++++ b/src/main/java/com/google/devtools/build/lib/shell/JavaSubprocessFactory.java
+@@ -152,7 +152,6 @@ public class JavaSubprocessFactory implements SubprocessFactory {
+     ProcessBuilder builder = new ProcessBuilder();
+     builder.command(params.getArgv());
+     if (params.getEnv() != null) {
+-      builder.environment().clear();
+       builder.environment().putAll(params.getEnv());
+     }
+ 
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_6/no-arc.patch b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_6/no-arc.patch
new file mode 100644
index 000000000000..e7a4498839dc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_6/no-arc.patch
@@ -0,0 +1,42 @@
+diff --git a/tools/osx/BUILD b/tools/osx/BUILD
+index 990afe3e8c..cd5b7b1b7a 100644
+--- a/tools/osx/BUILD
++++ b/tools/osx/BUILD
+@@ -28,8 +28,8 @@ exports_files([
+ ])
+ 
+ DARWIN_XCODE_LOCATOR_COMPILE_COMMAND = """
+-  /usr/bin/xcrun --sdk macosx clang -mmacosx-version-min=10.13 -fobjc-arc -framework CoreServices \
+-      -framework Foundation -arch arm64 -arch x86_64 -Wl,-no_adhoc_codesign -Wl,-no_uuid -o $@ $< && \
++  /usr/bin/xcrun --sdk macosx clang -mmacosx-version-min=10.13 -framework CoreServices \
++      -framework Foundation -arch @multiBinPatch@ -Wl,-no_uuid -o $@ $< && \
+   env -i codesign --identifier $@ --force --sign - $@
+ """
+ 
+diff --git a/tools/osx/xcode_configure.bzl b/tools/osx/xcode_configure.bzl
+index 2b819f07ec..a98ce37673 100644
+--- a/tools/osx/xcode_configure.bzl
++++ b/tools/osx/xcode_configure.bzl
+@@ -127,7 +127,6 @@ def run_xcode_locator(repository_ctx, xcode_locator_src_label):
+         "macosx",
+         "clang",
+         "-mmacosx-version-min=10.13",
+-        "-fobjc-arc",
+         "-framework",
+         "CoreServices",
+         "-framework",
+diff --git a/tools/osx/xcode_locator.m b/tools/osx/xcode_locator.m
+index ed2ef87453..e0ce6dbdd1 100644
+--- a/tools/osx/xcode_locator.m
++++ b/tools/osx/xcode_locator.m
+@@ -21,10 +21,6 @@
+ // 6,6.4,6.4.1 = 6.4.1
+ // 6.3,6.3.0 = 6.3
+ 
+-#if !defined(__has_feature) || !__has_feature(objc_arc)
+-#error "This file requires ARC support."
+-#endif
+-
+ #import <CoreServices/CoreServices.h>
+ #import <Foundation/Foundation.h>
+ 
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_6/src-deps.json b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_6/src-deps.json
new file mode 100644
index 000000000000..c294c1f22419
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_6/src-deps.json
@@ -0,0 +1,2271 @@
+{
+    "1.25.0.zip": {
+        "name": "1.25.0.zip",
+        "sha256": "c78be58f5e0a29a04686b628cf54faaee0094322ae0ac99da5a8a8afca59a647",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_sass/archive/1.25.0.zip",
+            "https://github.com/bazelbuild/rules_sass/archive/1.25.0.zip"
+        ]
+    },
+    "1.3.3.zip": {
+        "name": "1.3.3.zip",
+        "sha256": "bb529ba133c0256df49139bd403c17835edbf60d2ecd6463549c6a5fe279364d",
+        "urls": [
+            "https://github.com/BLAKE3-team/BLAKE3/archive/refs/tags/1.3.3.zip"
+        ]
+    },
+    "1ef781ced3b1443dca3ed05dec1989eca1a4e1cd.tar.gz": {
+        "name": "1ef781ced3b1443dca3ed05dec1989eca1a4e1cd.tar.gz",
+        "sha256": "5a725b777976b77aa122b707d1b6f0f39b6020f66cd427bb111a585599c857b1",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/stardoc/archive/1ef781ced3b1443dca3ed05dec1989eca1a4e1cd.tar.gz",
+            "https://github.com/bazelbuild/stardoc/archive/1ef781ced3b1443dca3ed05dec1989eca1a4e1cd.tar.gz"
+        ]
+    },
+    "20211102.0.tar.gz": {
+        "name": "20211102.0.tar.gz",
+        "sha256": "dcf71b9cba8dc0ca9940c4b316a0c796be8fab42b070bb6b7cab62b48f0e66c4",
+        "urls": [
+            "https://mirror.bazel.build/github.com/abseil/abseil-cpp/archive/refs/tags/20211102.0.tar.gz",
+            "https://github.com/abseil/abseil-cpp/archive/refs/tags/20211102.0.tar.gz"
+        ]
+    },
+    "2f9af297c84c55c8b871ba4495e01ade42476c92.tar.gz": {
+        "name": "2f9af297c84c55c8b871ba4495e01ade42476c92.tar.gz",
+        "sha256": "5bb6b0253ccf64b53d6c7249625a7e3f6c3bc6402abd52d3778bfa48258703a0",
+        "urls": [
+            "https://mirror.bazel.build/github.com/googleapis/googleapis/archive/2f9af297c84c55c8b871ba4495e01ade42476c92.tar.gz",
+            "https://github.com/googleapis/googleapis/archive/2f9af297c84c55c8b871ba4495e01ade42476c92.tar.gz"
+        ]
+    },
+    "4694024279bdac52b77e22dc87808bd0fd732b69.tar.gz": {
+        "name": "4694024279bdac52b77e22dc87808bd0fd732b69.tar.gz",
+        "sha256": "1e490b98005664d149b379a9529a6aa05932b8a11b76b4cd86f3d22d76346f47",
+        "urls": [
+            "https://mirror.bazel.build/github.com/envoyproxy/protoc-gen-validate/archive/4694024279bdac52b77e22dc87808bd0fd732b69.tar.gz",
+            "https://github.com/envoyproxy/protoc-gen-validate/archive/4694024279bdac52b77e22dc87808bd0fd732b69.tar.gz"
+        ]
+    },
+    "5847d6a06302136d95a14b4cbd4b55a9c9f1436e.zip": {
+        "name": "5847d6a06302136d95a14b4cbd4b55a9c9f1436e.zip",
+        "sha256": "299452e6f4a4981b2e6d22357f7332713382a63e4c137f5fd6b89579f6d610cb",
+        "urls": [
+            "https://mirror.bazel.build/github.com/google/desugar_jdk_libs/archive/5847d6a06302136d95a14b4cbd4b55a9c9f1436e.zip",
+            "https://github.com/google/desugar_jdk_libs/archive/5847d6a06302136d95a14b4cbd4b55a9c9f1436e.zip"
+        ]
+    },
+    "6654436a307a5a686b008c1d4c93b0085da6e6d8.tar.gz": {
+        "name": "6654436a307a5a686b008c1d4c93b0085da6e6d8.tar.gz",
+        "sha256": "ec76c5e79db59762776bece58b69507d095856c37b81fd35bfb0958e74b61d93",
+        "urls": [
+            "https://mirror.bazel.build/github.com/c-ares/c-ares/archive/6654436a307a5a686b008c1d4c93b0085da6e6d8.tar.gz",
+            "https://github.com/c-ares/c-ares/archive/6654436a307a5a686b008c1d4c93b0085da6e6d8.tar.gz"
+        ]
+    },
+    "7e4afce6fe62dbff0a4a03450143146f9f2d7488.tar.gz": {
+        "name": "7e4afce6fe62dbff0a4a03450143146f9f2d7488.tar.gz",
+        "sha256": "8e7d59a5b12b233be5652e3d29f42fba01c7cbab09f6b3a8d0a57ed6d1e9a0da",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_proto/archive/7e4afce6fe62dbff0a4a03450143146f9f2d7488.tar.gz",
+            "https://github.com/bazelbuild/rules_proto/archive/7e4afce6fe62dbff0a4a03450143146f9f2d7488.tar.gz"
+        ]
+    },
+    "a5477045acaa34586420942098f5fecd3570f577.tar.gz": {
+        "name": "a5477045acaa34586420942098f5fecd3570f577.tar.gz",
+        "sha256": "cf7f71eaff90b24c1a28b49645a9ff03a9a6c1e7134291ce70901cb63e7364b5",
+        "urls": [
+            "https://mirror.bazel.build/github.com/protocolbuffers/upb/archive/a5477045acaa34586420942098f5fecd3570f577.tar.gz",
+            "https://github.com/protocolbuffers/upb/archive/a5477045acaa34586420942098f5fecd3570f577.tar.gz"
+        ]
+    },
+    "aecba11114cf1fac5497aeb844b6966106de3eb6.tar.gz": {
+        "name": "aecba11114cf1fac5497aeb844b6966106de3eb6.tar.gz",
+        "sha256": "9f385e146410a8150b6f4cb1a57eab7ec806ced48d427554b1e754877ff26c3e",
+        "urls": [
+            "https://mirror.bazel.build/github.com/google/re2/archive/aecba11114cf1fac5497aeb844b6966106de3eb6.tar.gz",
+            "https://github.com/google/re2/archive/aecba11114cf1fac5497aeb844b6966106de3eb6.tar.gz"
+        ]
+    },
+    "android_tools": {
+        "generator_function": "maybe",
+        "generator_name": "android_tools",
+        "name": "android_tools",
+        "sha256": "5d0f140125afba82603ccd5050c78dd2e2863ca992a17f43f6df9a9119ffcb9b",
+        "url": "https://mirror.bazel.build/bazel_android_tools/android_tools_pkg-0.27.2.tar"
+    },
+    "android_tools_for_testing": {
+        "name": "android_tools_for_testing",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "5d0f140125afba82603ccd5050c78dd2e2863ca992a17f43f6df9a9119ffcb9b",
+        "url": "https://mirror.bazel.build/bazel_android_tools/android_tools_pkg-0.27.2.tar"
+    },
+    "android_tools_pkg-0.27.2.tar": {
+        "name": "android_tools_pkg-0.27.2.tar",
+        "sha256": "5d0f140125afba82603ccd5050c78dd2e2863ca992a17f43f6df9a9119ffcb9b",
+        "urls": [
+            "https://mirror.bazel.build/bazel_android_tools/android_tools_pkg-0.27.2.tar"
+        ]
+    },
+    "bazel-gazelle-v0.24.0.tar.gz": {
+        "name": "bazel-gazelle-v0.24.0.tar.gz",
+        "sha256": "de69a09dc70417580aabf20a28619bb3ef60d038470c7cf8442fafcf627c21cb",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/bazel-gazelle/releases/download/v0.24.0/bazel-gazelle-v0.24.0.tar.gz",
+            "https://github.com/bazelbuild/bazel-gazelle/releases/download/v0.24.0/bazel-gazelle-v0.24.0.tar.gz"
+        ]
+    },
+    "bazel-skylib-1.0.3.tar.gz": {
+        "name": "bazel-skylib-1.0.3.tar.gz",
+        "sha256": "1c531376ac7e5a180e0237938a2536de0c54d93f5c278634818e0efc952dd56c",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/releases/download/1.0.3/bazel-skylib-1.0.3.tar.gz",
+            "https://github.com/bazelbuild/bazel-skylib/releases/download/1.0.3/bazel-skylib-1.0.3.tar.gz"
+        ]
+    },
+    "bazel_compdb": {
+        "generator_function": "grpc_deps",
+        "generator_name": "bazel_compdb",
+        "name": "bazel_compdb",
+        "sha256": "bcecfd622c4ef272fd4ba42726a52e140b961c4eac23025f18b346c968a8cfb4",
+        "strip_prefix": "bazel-compilation-database-0.4.5",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/grailbio/bazel-compilation-database/archive/0.4.5.tar.gz",
+            "https://github.com/grailbio/bazel-compilation-database/archive/0.4.5.tar.gz"
+        ]
+    },
+    "bazel_gazelle": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "bazel_gazelle",
+        "name": "bazel_gazelle",
+        "sha256": "de69a09dc70417580aabf20a28619bb3ef60d038470c7cf8442fafcf627c21cb",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/bazel-gazelle/releases/download/v0.24.0/bazel-gazelle-v0.24.0.tar.gz",
+            "https://github.com/bazelbuild/bazel-gazelle/releases/download/v0.24.0/bazel-gazelle-v0.24.0.tar.gz"
+        ]
+    },
+    "bazel_skylib": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "bazel_skylib",
+        "name": "bazel_skylib",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "1c531376ac7e5a180e0237938a2536de0c54d93f5c278634818e0efc952dd56c",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/releases/download/1.0.3/bazel-skylib-1.0.3.tar.gz",
+            "https://github.com/bazelbuild/bazel-skylib/releases/download/1.0.3/bazel-skylib-1.0.3.tar.gz"
+        ]
+    },
+    "bazel_toolchains": {
+        "generator_function": "grpc_deps",
+        "generator_name": "bazel_toolchains",
+        "name": "bazel_toolchains",
+        "sha256": "179ec02f809e86abf56356d8898c8bd74069f1bd7c56044050c2cd3d79d0e024",
+        "strip_prefix": "bazel-toolchains-4.1.0",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/bazel-toolchains/archive/4.1.0.tar.gz",
+            "https://github.com/bazelbuild/bazel-toolchains/releases/download/4.1.0/bazel-toolchains-4.1.0.tar.gz"
+        ]
+    },
+    "bazelci_rules": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "bazelci_rules",
+        "name": "bazelci_rules",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "eca21884e6f66a88c358e580fd67a6b148d30ab57b1680f62a96c00f9bc6a07e",
+        "strip_prefix": "bazelci_rules-1.0.0",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/continuous-integration/releases/download/rules-1.0.0/bazelci_rules-1.0.0.tar.gz",
+            "https://github.com/bazelbuild/continuous-integration/releases/download/rules-1.0.0/bazelci_rules-1.0.0.tar.gz"
+        ]
+    },
+    "bazelci_rules-1.0.0.tar.gz": {
+        "name": "bazelci_rules-1.0.0.tar.gz",
+        "sha256": "eca21884e6f66a88c358e580fd67a6b148d30ab57b1680f62a96c00f9bc6a07e",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/continuous-integration/releases/download/rules-1.0.0/bazelci_rules-1.0.0.tar.gz",
+            "https://github.com/bazelbuild/continuous-integration/releases/download/rules-1.0.0/bazelci_rules-1.0.0.tar.gz"
+        ]
+    },
+    "blake3": {
+        "build_file": "//third_party:blake3/blake3.BUILD",
+        "generator_function": "dist_http_archive",
+        "generator_name": "blake3",
+        "name": "blake3",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "bb529ba133c0256df49139bd403c17835edbf60d2ecd6463549c6a5fe279364d",
+        "strip_prefix": "BLAKE3-1.3.3",
+        "urls": [
+            "https://github.com/BLAKE3-team/BLAKE3/archive/refs/tags/1.3.3.zip"
+        ]
+    },
+    "boringssl": {
+        "generator_function": "grpc_deps",
+        "generator_name": "boringssl",
+        "name": "boringssl",
+        "sha256": "534fa658bd845fd974b50b10f444d392dfd0d93768c4a51b61263fd37d851c40",
+        "strip_prefix": "boringssl-b9232f9e27e5668bc0414879dcdedb2a59ea75f2",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/google/boringssl/archive/b9232f9e27e5668bc0414879dcdedb2a59ea75f2.tar.gz",
+            "https://github.com/google/boringssl/archive/b9232f9e27e5668bc0414879dcdedb2a59ea75f2.tar.gz"
+        ]
+    },
+    "build_bazel_apple_support": {
+        "generator_function": "grpc_deps",
+        "generator_name": "build_bazel_apple_support",
+        "name": "build_bazel_apple_support",
+        "sha256": "76df040ade90836ff5543888d64616e7ba6c3a7b33b916aa3a4b68f342d1b447",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/bazelbuild/apple_support/releases/download/0.11.0/apple_support.0.11.0.tar.gz",
+            "https://github.com/bazelbuild/apple_support/releases/download/0.11.0/apple_support.0.11.0.tar.gz"
+        ]
+    },
+    "build_bazel_rules_apple": {
+        "generator_function": "grpc_deps",
+        "generator_name": "build_bazel_rules_apple",
+        "name": "build_bazel_rules_apple",
+        "sha256": "0052d452af7742c8f3a4e0929763388a66403de363775db7e90adecb2ba4944b",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/bazelbuild/rules_apple/releases/download/0.31.3/rules_apple.0.31.3.tar.gz",
+            "https://github.com/bazelbuild/rules_apple/releases/download/0.31.3/rules_apple.0.31.3.tar.gz"
+        ]
+    },
+    "build_bazel_rules_nodejs": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "build_bazel_rules_nodejs",
+        "name": "build_bazel_rules_nodejs",
+        "sha256": "0fad45a9bda7dc1990c47b002fd64f55041ea751fafc00cd34efb96107675778",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_nodejs/releases/download/5.5.0/rules_nodejs-5.5.0.tar.gz",
+            "https://github.com/bazelbuild/rules_nodejs/releases/download/5.5.0/rules_nodejs-5.5.0.tar.gz"
+        ]
+    },
+    "cb28da3451f158a947dfc45090fe92b07b243bc1.tar.gz": {
+        "name": "cb28da3451f158a947dfc45090fe92b07b243bc1.tar.gz",
+        "sha256": "5bc8365613fe2f8ce6cc33959b7667b13b7fe56cb9d16ba740c06e1a7c4242fc",
+        "urls": [
+            "https://mirror.bazel.build/github.com/cncf/xds/archive/cb28da3451f158a947dfc45090fe92b07b243bc1.tar.gz",
+            "https://github.com/cncf/xds/archive/cb28da3451f158a947dfc45090fe92b07b243bc1.tar.gz"
+        ]
+    },
+    "com_envoyproxy_protoc_gen_validate": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "com_envoyproxy_protoc_gen_validate",
+        "name": "com_envoyproxy_protoc_gen_validate",
+        "patch_args": [
+            "-p1"
+        ],
+        "patches": [
+            "//third_party/protoc_gen_validate:protoc_gen_validate.patch"
+        ],
+        "sha256": "1e490b98005664d149b379a9529a6aa05932b8a11b76b4cd86f3d22d76346f47",
+        "strip_prefix": "protoc-gen-validate-4694024279bdac52b77e22dc87808bd0fd732b69",
+        "urls": [
+            "https://mirror.bazel.build/github.com/envoyproxy/protoc-gen-validate/archive/4694024279bdac52b77e22dc87808bd0fd732b69.tar.gz",
+            "https://github.com/envoyproxy/protoc-gen-validate/archive/4694024279bdac52b77e22dc87808bd0fd732b69.tar.gz"
+        ]
+    },
+    "com_github_cares_cares": {
+        "build_file": "@com_github_grpc_grpc//third_party:cares/cares.BUILD",
+        "generator_function": "grpc_deps",
+        "generator_name": "com_github_cares_cares",
+        "name": "com_github_cares_cares",
+        "sha256": "ec76c5e79db59762776bece58b69507d095856c37b81fd35bfb0958e74b61d93",
+        "strip_prefix": "c-ares-6654436a307a5a686b008c1d4c93b0085da6e6d8",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/c-ares/c-ares/archive/6654436a307a5a686b008c1d4c93b0085da6e6d8.tar.gz",
+            "https://github.com/c-ares/c-ares/archive/6654436a307a5a686b008c1d4c93b0085da6e6d8.tar.gz"
+        ]
+    },
+    "com_github_cncf_udpa": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "com_github_cncf_udpa",
+        "name": "com_github_cncf_udpa",
+        "patch_args": [
+            "-p1"
+        ],
+        "patches": [
+            "//third_party/cncf_udpa:cncf_udpa_0.0.1.patch"
+        ],
+        "sha256": "5bc8365613fe2f8ce6cc33959b7667b13b7fe56cb9d16ba740c06e1a7c4242fc",
+        "strip_prefix": "xds-cb28da3451f158a947dfc45090fe92b07b243bc1",
+        "urls": [
+            "https://mirror.bazel.build/github.com/cncf/xds/archive/cb28da3451f158a947dfc45090fe92b07b243bc1.tar.gz",
+            "https://github.com/cncf/xds/archive/cb28da3451f158a947dfc45090fe92b07b243bc1.tar.gz"
+        ]
+    },
+    "com_github_google_benchmark": {
+        "generator_function": "grpc_deps",
+        "generator_name": "com_github_google_benchmark",
+        "name": "com_github_google_benchmark",
+        "sha256": "0b921a3bc39e35f4275c8dcc658af2391c150fb966102341287b0401ff2e6f21",
+        "strip_prefix": "benchmark-0baacde3618ca617da95375e0af13ce1baadea47",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/google/benchmark/archive/0baacde3618ca617da95375e0af13ce1baadea47.tar.gz",
+            "https://github.com/google/benchmark/archive/0baacde3618ca617da95375e0af13ce1baadea47.tar.gz"
+        ]
+    },
+    "com_github_grpc_grpc": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "com_github_grpc_grpc",
+        "name": "com_github_grpc_grpc",
+        "patch_args": [
+            "-p1"
+        ],
+        "patches": [
+            "//third_party/grpc:grpc_1.47.0.patch",
+            "//third_party/grpc:grpc_1.47.0.win_arm64.patch"
+        ],
+        "sha256": "271bdc890bf329a8de5b65819f0f9590a5381402429bca37625b63546ed19e54",
+        "strip_prefix": "grpc-1.47.0",
+        "urls": [
+            "https://mirror.bazel.build/github.com/grpc/grpc/archive/v1.47.0.tar.gz",
+            "https://github.com/grpc/grpc/archive/v1.47.0.tar.gz"
+        ]
+    },
+    "com_github_libuv_libuv": {
+        "build_file": "@com_github_grpc_grpc//third_party:libuv.BUILD",
+        "generator_function": "grpc_deps",
+        "generator_name": "com_github_libuv_libuv",
+        "name": "com_github_libuv_libuv",
+        "sha256": "5ca4e9091f3231d8ad8801862dc4e851c23af89c69141d27723157776f7291e7",
+        "strip_prefix": "libuv-02a9e1be252b623ee032a3137c0b0c94afbe6809",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/libuv/libuv/archive/02a9e1be252b623ee032a3137c0b0c94afbe6809.tar.gz",
+            "https://github.com/libuv/libuv/archive/02a9e1be252b623ee032a3137c0b0c94afbe6809.tar.gz"
+        ]
+    },
+    "com_google_absl": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "com_google_absl",
+        "name": "com_google_absl",
+        "sha256": "dcf71b9cba8dc0ca9940c4b316a0c796be8fab42b070bb6b7cab62b48f0e66c4",
+        "strip_prefix": "abseil-cpp-20211102.0",
+        "urls": [
+            "https://mirror.bazel.build/github.com/abseil/abseil-cpp/archive/refs/tags/20211102.0.tar.gz",
+            "https://github.com/abseil/abseil-cpp/archive/refs/tags/20211102.0.tar.gz"
+        ]
+    },
+    "com_google_googleapis": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "com_google_googleapis",
+        "name": "com_google_googleapis",
+        "sha256": "5bb6b0253ccf64b53d6c7249625a7e3f6c3bc6402abd52d3778bfa48258703a0",
+        "strip_prefix": "googleapis-2f9af297c84c55c8b871ba4495e01ade42476c92",
+        "urls": [
+            "https://mirror.bazel.build/github.com/googleapis/googleapis/archive/2f9af297c84c55c8b871ba4495e01ade42476c92.tar.gz",
+            "https://github.com/googleapis/googleapis/archive/2f9af297c84c55c8b871ba4495e01ade42476c92.tar.gz"
+        ]
+    },
+    "com_google_googletest": {
+        "name": "com_google_googletest",
+        "sha256": "81964fe578e9bd7c94dfdb09c8e4d6e6759e19967e397dbea48d1c10e45d0df2",
+        "strip_prefix": "googletest-release-1.12.1",
+        "urls": [
+            "https://mirror.bazel.build/github.com/google/googletest/archive/refs/tags/release-1.12.1.tar.gz",
+            "https://github.com/google/googletest/archive/refs/tags/release-1.12.1.tar.gz"
+        ]
+    },
+    "com_google_protobuf": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "com_google_protobuf",
+        "name": "com_google_protobuf",
+        "patch_args": [
+            "-p1"
+        ],
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "patches": [
+            "//third_party/protobuf:3.19.6.patch"
+        ],
+        "sha256": "9a301cf94a8ddcb380b901e7aac852780b826595075577bb967004050c835056",
+        "strip_prefix": "protobuf-3.19.6",
+        "urls": [
+            "https://mirror.bazel.build/github.com/protocolbuffers/protobuf/archive/v3.19.6.tar.gz",
+            "https://github.com/protocolbuffers/protobuf/archive/v3.19.6.tar.gz"
+        ]
+    },
+    "com_google_testparameterinjector": {
+        "build_file_content": "\njava_library(\n    name = \"testparameterinjector\",\n    testonly = True,\n    srcs = glob([\"src/main/**/*.java\"]),\n    deps = [\n      \"@org_snakeyaml//:snakeyaml\",\n      \"@//third_party:auto_value\",\n      \"@//third_party:guava\",\n      \"@//third_party:junit4\",\n      \"@//third_party/protobuf:protobuf_java\",\n    ],\n    visibility = [\"//visibility:public\"],\n)\n",
+        "name": "com_google_testparameterinjector",
+        "sha256": "562a0e87eb413a7dcad29ebc8d578f6f97503473943585b051c1398a58189b06",
+        "strip_prefix": "TestParameterInjector-1.0",
+        "urls": [
+            "https://mirror.bazel.build/github.com/google/TestParameterInjector/archive/v1.0.tar.gz",
+            "https://github.com/google/TestParameterInjector/archive/v1.0.tar.gz"
+        ]
+    },
+    "com_googlesource_code_re2": {
+        "generator_function": "grpc_deps",
+        "generator_name": "com_googlesource_code_re2",
+        "name": "com_googlesource_code_re2",
+        "sha256": "319a58a58d8af295db97dfeecc4e250179c5966beaa2d842a82f0a013b6a239b",
+        "strip_prefix": "re2-8e08f47b11b413302749c0d8b17a1c94777495d5",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/google/re2/archive/8e08f47b11b413302749c0d8b17a1c94777495d5.tar.gz",
+            "https://github.com/google/re2/archive/8e08f47b11b413302749c0d8b17a1c94777495d5.tar.gz"
+        ]
+    },
+    "coverage_output_generator-v2.6.zip": {
+        "name": "coverage_output_generator-v2.6.zip",
+        "sha256": "7006375f6756819b7013ca875eab70a541cf7d89142d9c511ed78ea4fefa38af",
+        "urls": [
+            "https://mirror.bazel.build/bazel_coverage_output_generator/releases/coverage_output_generator-v2.6.zip"
+        ]
+    },
+    "cython": {
+        "build_file": "@com_github_grpc_grpc//third_party:cython.BUILD",
+        "generator_function": "grpc_deps",
+        "generator_name": "cython",
+        "name": "cython",
+        "sha256": "bb72b2f0ef029472759c711f0a4bded6e15e3f9bda3797550cef3c1d87d02283",
+        "strip_prefix": "cython-0.29.26",
+        "urls": [
+            "https://github.com/cython/cython/archive/0.29.26.tar.gz"
+        ]
+    },
+    "desugar_jdk_libs": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "desugar_jdk_libs",
+        "name": "desugar_jdk_libs",
+        "sha256": "299452e6f4a4981b2e6d22357f7332713382a63e4c137f5fd6b89579f6d610cb",
+        "strip_prefix": "desugar_jdk_libs-5847d6a06302136d95a14b4cbd4b55a9c9f1436e",
+        "urls": [
+            "https://mirror.bazel.build/github.com/google/desugar_jdk_libs/archive/5847d6a06302136d95a14b4cbd4b55a9c9f1436e.zip",
+            "https://github.com/google/desugar_jdk_libs/archive/5847d6a06302136d95a14b4cbd4b55a9c9f1436e.zip"
+        ]
+    },
+    "enum34": {
+        "build_file": "@com_github_grpc_grpc//third_party:enum34.BUILD",
+        "generator_function": "grpc_deps",
+        "generator_name": "enum34",
+        "name": "enum34",
+        "sha256": "8ad8c4783bf61ded74527bffb48ed9b54166685e4230386a9ed9b1279e2df5b1",
+        "strip_prefix": "enum34-1.1.6",
+        "urls": [
+            "https://files.pythonhosted.org/packages/bf/3e/31d502c25302814a7c2f1d3959d2a3b3f78e509002ba91aea64993936876/enum34-1.1.6.tar.gz"
+        ]
+    },
+    "envoy_api": {
+        "generator_function": "grpc_deps",
+        "generator_name": "envoy_api",
+        "name": "envoy_api",
+        "sha256": "c5807010b67033330915ca5a20483e30538ae5e689aa14b3631d6284beca4630",
+        "strip_prefix": "data-plane-api-9c42588c956220b48eb3099d186487c2f04d32ec",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/envoyproxy/data-plane-api/archive/9c42588c956220b48eb3099d186487c2f04d32ec.tar.gz",
+            "https://github.com/envoyproxy/data-plane-api/archive/9c42588c956220b48eb3099d186487c2f04d32ec.tar.gz"
+        ]
+    },
+    "futures": {
+        "build_file": "@com_github_grpc_grpc//third_party:futures.BUILD",
+        "generator_function": "grpc_deps",
+        "generator_name": "futures",
+        "name": "futures",
+        "sha256": "7e033af76a5e35f58e56da7a91e687706faf4e7bdfb2cbc3f2cca6b9bcda9794",
+        "strip_prefix": "futures-3.3.0",
+        "urls": [
+            "https://files.pythonhosted.org/packages/47/04/5fc6c74ad114032cd2c544c575bffc17582295e9cd6a851d6026ab4b2c00/futures-3.3.0.tar.gz"
+        ]
+    },
+    "io_bazel_rules_go": {
+        "generator_function": "grpc_deps",
+        "generator_name": "io_bazel_rules_go",
+        "name": "io_bazel_rules_go",
+        "sha256": "69de5c704a05ff37862f7e0f5534d4f479418afc21806c887db544a316f3cb6b",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_go/releases/download/v0.27.0/rules_go-v0.27.0.tar.gz",
+            "https://github.com/bazelbuild/rules_go/releases/download/v0.27.0/rules_go-v0.27.0.tar.gz"
+        ]
+    },
+    "io_bazel_rules_python": {
+        "generator_function": "grpc_deps",
+        "generator_name": "io_bazel_rules_python",
+        "name": "io_bazel_rules_python",
+        "patch_args": [
+            "-p1"
+        ],
+        "patches": [
+            "@com_github_grpc_grpc//third_party:rules_python.patch"
+        ],
+        "sha256": "954aa89b491be4a083304a2cb838019c8b8c3720a7abb9c4cb81ac7a24230cea",
+        "url": "https://github.com/bazelbuild/rules_python/releases/download/0.4.0/rules_python-0.4.0.tar.gz"
+    },
+    "io_bazel_rules_sass": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "io_bazel_rules_sass",
+        "name": "io_bazel_rules_sass",
+        "sha256": "c78be58f5e0a29a04686b628cf54faaee0094322ae0ac99da5a8a8afca59a647",
+        "strip_prefix": "rules_sass-1.25.0",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_sass/archive/1.25.0.zip",
+            "https://github.com/bazelbuild/rules_sass/archive/1.25.0.zip"
+        ]
+    },
+    "io_bazel_skydoc": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "io_bazel_skydoc",
+        "name": "io_bazel_skydoc",
+        "sha256": "5a725b777976b77aa122b707d1b6f0f39b6020f66cd427bb111a585599c857b1",
+        "strip_prefix": "stardoc-1ef781ced3b1443dca3ed05dec1989eca1a4e1cd",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/stardoc/archive/1ef781ced3b1443dca3ed05dec1989eca1a4e1cd.tar.gz",
+            "https://github.com/bazelbuild/stardoc/archive/1ef781ced3b1443dca3ed05dec1989eca1a4e1cd.tar.gz"
+        ]
+    },
+    "io_opencensus_cpp": {
+        "generator_function": "grpc_deps",
+        "generator_name": "io_opencensus_cpp",
+        "name": "io_opencensus_cpp",
+        "sha256": "90d6fafa8b1a2ea613bf662731d3086e1c2ed286f458a95c81744df2dbae41b1",
+        "strip_prefix": "opencensus-cpp-c9a4da319bc669a772928ffc55af4a61be1a1176",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/census-instrumentation/opencensus-cpp/archive/c9a4da319bc669a772928ffc55af4a61be1a1176.tar.gz",
+            "https://github.com/census-instrumentation/opencensus-cpp/archive/c9a4da319bc669a772928ffc55af4a61be1a1176.tar.gz"
+        ]
+    },
+    "java_tools-v12.7.zip": {
+        "name": "java_tools-v12.7.zip",
+        "sha256": "aa11ecd5fc0af2769f0f2bdd25e2f4de7c1291ed24326fb23fa69bdd5dcae2b5",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/java/v12.7/java_tools-v12.7.zip",
+            "https://github.com/bazelbuild/java_tools/releases/download/java_v12.7/java_tools-v12.7.zip"
+        ]
+    },
+    "java_tools_darwin_arm64-v12.7.zip": {
+        "name": "java_tools_darwin_arm64-v12.7.zip",
+        "sha256": "ecedf6305768dfd51751d0ad732898af092bd7710d497c6c6c3214af7e49395f",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/java/v12.7/java_tools_darwin_arm64-v12.7.zip",
+            "https://github.com/bazelbuild/java_tools/releases/download/java_v12.7/java_tools_darwin_arm64-v12.7.zip"
+        ]
+    },
+    "java_tools_darwin_x86_64-v12.7.zip": {
+        "name": "java_tools_darwin_x86_64-v12.7.zip",
+        "sha256": "e116c649c0355ab57ffcc870ce1139e5e1528cabac458bd50263d2b84ea4ffb2",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/java/v12.7/java_tools_darwin_x86_64-v12.7.zip",
+            "https://github.com/bazelbuild/java_tools/releases/download/java_v12.7/java_tools_darwin_x86_64-v12.7.zip"
+        ]
+    },
+    "java_tools_linux-v12.7.zip": {
+        "name": "java_tools_linux-v12.7.zip",
+        "sha256": "a346b9a291b6db1bb06f7955f267e47522d99963fe14e337da1d75d125a8599f",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/java/v12.7/java_tools_linux-v12.7.zip",
+            "https://github.com/bazelbuild/java_tools/releases/download/java_v12.7/java_tools_linux-v12.7.zip"
+        ]
+    },
+    "java_tools_windows-v12.7.zip": {
+        "name": "java_tools_windows-v12.7.zip",
+        "sha256": "bae6a03b5aeead5804ba7bcdcc8b14ec3ed05b37f3db5519f788ab060bc53b05",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/java/v12.7/java_tools_windows-v12.7.zip",
+            "https://github.com/bazelbuild/java_tools/releases/download/java_v12.7/java_tools_windows-v12.7.zip"
+        ]
+    },
+    "microsoft-jdk-11.0.13.8.1-windows-aarch64.zip": {
+        "name": "microsoft-jdk-11.0.13.8.1-windows-aarch64.zip",
+        "sha256": "b8a28e6e767d90acf793ea6f5bed0bb595ba0ba5ebdf8b99f395266161e53ec2",
+        "urls": [
+            "https://mirror.bazel.build/aka.ms/download-jdk/microsoft-jdk-11.0.13.8.1-windows-aarch64.zip"
+        ]
+    },
+    "nuget_python_i686_3.10.0": {
+        "build_file_content": "\ncc_import(\n    name = \"python_full_api\",\n    hdrs = glob([\"**/*.h\"]),\n    shared_library = \"python310.dll\",\n    interface_library = \"libs/python310.lib\",\n    visibility = [\"@upb//python:__pkg__\"],\n)\n\ncc_import(\n    name = \"python_limited_api\",\n    hdrs = glob([\"**/*.h\"]),\n    shared_library = \"python3.dll\",\n    interface_library = \"libs/python3.lib\",\n    visibility = [\"@upb//python:__pkg__\"],\n)\n",
+        "generator_function": "grpc_extra_deps",
+        "generator_name": "nuget_python_i686_3.10.0",
+        "name": "nuget_python_i686_3.10.0",
+        "patch_cmds": [
+            "cp -r include/* ."
+        ],
+        "sha256": "e115e102eb90ce160ab0ef7506b750a8d7ecc385bde0a496f02a54337a8bc333",
+        "strip_prefix": "tools",
+        "type": "zip",
+        "urls": [
+            "https://www.nuget.org/api/v2/package/pythonx86/3.10.0"
+        ]
+    },
+    "nuget_python_i686_3.7.0": {
+        "build_file_content": "\ncc_import(\n    name = \"python_full_api\",\n    hdrs = glob([\"**/*.h\"]),\n    shared_library = \"python37.dll\",\n    interface_library = \"libs/python37.lib\",\n    visibility = [\"@upb//python:__pkg__\"],\n)\n\ncc_import(\n    name = \"python_limited_api\",\n    hdrs = glob([\"**/*.h\"]),\n    shared_library = \"python3.dll\",\n    interface_library = \"libs/python3.lib\",\n    visibility = [\"@upb//python:__pkg__\"],\n)\n",
+        "generator_function": "grpc_extra_deps",
+        "generator_name": "nuget_python_i686_3.7.0",
+        "name": "nuget_python_i686_3.7.0",
+        "patch_cmds": [
+            "cp -r include/* ."
+        ],
+        "sha256": "a8bb49fa1ca62ad55430fcafaca1b58015e22943e66b1a87d5e7cef2556c6a54",
+        "strip_prefix": "tools",
+        "type": "zip",
+        "urls": [
+            "https://www.nuget.org/api/v2/package/pythonx86/3.7.0"
+        ]
+    },
+    "nuget_python_i686_3.8.0": {
+        "build_file_content": "\ncc_import(\n    name = \"python_full_api\",\n    hdrs = glob([\"**/*.h\"]),\n    shared_library = \"python38.dll\",\n    interface_library = \"libs/python38.lib\",\n    visibility = [\"@upb//python:__pkg__\"],\n)\n\ncc_import(\n    name = \"python_limited_api\",\n    hdrs = glob([\"**/*.h\"]),\n    shared_library = \"python3.dll\",\n    interface_library = \"libs/python3.lib\",\n    visibility = [\"@upb//python:__pkg__\"],\n)\n",
+        "generator_function": "grpc_extra_deps",
+        "generator_name": "nuget_python_i686_3.8.0",
+        "name": "nuget_python_i686_3.8.0",
+        "patch_cmds": [
+            "cp -r include/* ."
+        ],
+        "sha256": "87a6481f5eef30b42ac12c93f06f73bd0b8692f26313b76a6615d1641c4e7bca",
+        "strip_prefix": "tools",
+        "type": "zip",
+        "urls": [
+            "https://www.nuget.org/api/v2/package/pythonx86/3.8.0"
+        ]
+    },
+    "nuget_python_i686_3.9.0": {
+        "build_file_content": "\ncc_import(\n    name = \"python_full_api\",\n    hdrs = glob([\"**/*.h\"]),\n    shared_library = \"python39.dll\",\n    interface_library = \"libs/python39.lib\",\n    visibility = [\"@upb//python:__pkg__\"],\n)\n\ncc_import(\n    name = \"python_limited_api\",\n    hdrs = glob([\"**/*.h\"]),\n    shared_library = \"python3.dll\",\n    interface_library = \"libs/python3.lib\",\n    visibility = [\"@upb//python:__pkg__\"],\n)\n",
+        "generator_function": "grpc_extra_deps",
+        "generator_name": "nuget_python_i686_3.9.0",
+        "name": "nuget_python_i686_3.9.0",
+        "patch_cmds": [
+            "cp -r include/* ."
+        ],
+        "sha256": "229abecbe49dc08fe5709e0b31e70edfb3b88f23335ebfc2904c44f940fd59b6",
+        "strip_prefix": "tools",
+        "type": "zip",
+        "urls": [
+            "https://www.nuget.org/api/v2/package/pythonx86/3.9.0"
+        ]
+    },
+    "nuget_python_x86-64_3.10.0": {
+        "build_file_content": "\ncc_import(\n    name = \"python_full_api\",\n    hdrs = glob([\"**/*.h\"]),\n    shared_library = \"python310.dll\",\n    interface_library = \"libs/python310.lib\",\n    visibility = [\"@upb//python:__pkg__\"],\n)\n\ncc_import(\n    name = \"python_limited_api\",\n    hdrs = glob([\"**/*.h\"]),\n    shared_library = \"python3.dll\",\n    interface_library = \"libs/python3.lib\",\n    visibility = [\"@upb//python:__pkg__\"],\n)\n",
+        "generator_function": "grpc_extra_deps",
+        "generator_name": "nuget_python_x86-64_3.10.0",
+        "name": "nuget_python_x86-64_3.10.0",
+        "patch_cmds": [
+            "cp -r include/* ."
+        ],
+        "sha256": "4474c83c25625d93e772e926f95f4cd398a0abbb52793625fa30f39af3d2cc00",
+        "strip_prefix": "tools",
+        "type": "zip",
+        "urls": [
+            "https://www.nuget.org/api/v2/package/python/3.10.0"
+        ]
+    },
+    "nuget_python_x86-64_3.7.0": {
+        "build_file_content": "\ncc_import(\n    name = \"python_full_api\",\n    hdrs = glob([\"**/*.h\"]),\n    shared_library = \"python37.dll\",\n    interface_library = \"libs/python37.lib\",\n    visibility = [\"@upb//python:__pkg__\"],\n)\n\ncc_import(\n    name = \"python_limited_api\",\n    hdrs = glob([\"**/*.h\"]),\n    shared_library = \"python3.dll\",\n    interface_library = \"libs/python3.lib\",\n    visibility = [\"@upb//python:__pkg__\"],\n)\n",
+        "generator_function": "grpc_extra_deps",
+        "generator_name": "nuget_python_x86-64_3.7.0",
+        "name": "nuget_python_x86-64_3.7.0",
+        "patch_cmds": [
+            "cp -r include/* ."
+        ],
+        "sha256": "66eb796a5bdb1e6787b8f655a1237a6b6964af2115b7627cf4f0032cf068b4b2",
+        "strip_prefix": "tools",
+        "type": "zip",
+        "urls": [
+            "https://www.nuget.org/api/v2/package/python/3.7.0"
+        ]
+    },
+    "nuget_python_x86-64_3.8.0": {
+        "build_file_content": "\ncc_import(\n    name = \"python_full_api\",\n    hdrs = glob([\"**/*.h\"]),\n    shared_library = \"python38.dll\",\n    interface_library = \"libs/python38.lib\",\n    visibility = [\"@upb//python:__pkg__\"],\n)\n\ncc_import(\n    name = \"python_limited_api\",\n    hdrs = glob([\"**/*.h\"]),\n    shared_library = \"python3.dll\",\n    interface_library = \"libs/python3.lib\",\n    visibility = [\"@upb//python:__pkg__\"],\n)\n",
+        "generator_function": "grpc_extra_deps",
+        "generator_name": "nuget_python_x86-64_3.8.0",
+        "name": "nuget_python_x86-64_3.8.0",
+        "patch_cmds": [
+            "cp -r include/* ."
+        ],
+        "sha256": "96c61321ce90dd053c8a04f305a5f6cc6d91350b862db34440e4a4f069b708a0",
+        "strip_prefix": "tools",
+        "type": "zip",
+        "urls": [
+            "https://www.nuget.org/api/v2/package/python/3.8.0"
+        ]
+    },
+    "nuget_python_x86-64_3.9.0": {
+        "build_file_content": "\ncc_import(\n    name = \"python_full_api\",\n    hdrs = glob([\"**/*.h\"]),\n    shared_library = \"python39.dll\",\n    interface_library = \"libs/python39.lib\",\n    visibility = [\"@upb//python:__pkg__\"],\n)\n\ncc_import(\n    name = \"python_limited_api\",\n    hdrs = glob([\"**/*.h\"]),\n    shared_library = \"python3.dll\",\n    interface_library = \"libs/python3.lib\",\n    visibility = [\"@upb//python:__pkg__\"],\n)\n",
+        "generator_function": "grpc_extra_deps",
+        "generator_name": "nuget_python_x86-64_3.9.0",
+        "name": "nuget_python_x86-64_3.9.0",
+        "patch_cmds": [
+            "cp -r include/* ."
+        ],
+        "sha256": "6af58a733e7dfbfcdd50d55788134393d6ffe7ab8270effbf724bdb786558832",
+        "strip_prefix": "tools",
+        "type": "zip",
+        "urls": [
+            "https://www.nuget.org/api/v2/package/python/3.9.0"
+        ]
+    },
+    "opencensus_proto": {
+        "generator_function": "grpc_deps",
+        "generator_name": "opencensus_proto",
+        "name": "opencensus_proto",
+        "sha256": "b7e13f0b4259e80c3070b583c2f39e53153085a6918718b1c710caf7037572b0",
+        "strip_prefix": "opencensus-proto-0.3.0/src",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/census-instrumentation/opencensus-proto/archive/v0.3.0.tar.gz",
+            "https://github.com/census-instrumentation/opencensus-proto/archive/v0.3.0.tar.gz"
+        ]
+    },
+    "openjdk11_darwin_aarch64_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "generator_function": "dist_http_archive",
+        "generator_name": "openjdk11_darwin_aarch64_archive",
+        "name": "openjdk11_darwin_aarch64_archive",
+        "sha256": "6bb0d2c6e8a29dcd9c577bbb2986352ba12481a9549ac2c0bcfd00ed60e538d2",
+        "strip_prefix": "zulu11.56.19-ca-jdk11.0.15-macosx_aarch64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu11.56.19-ca-jdk11.0.15-macosx_aarch64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu11.56.19-ca-jdk11.0.15-macosx_aarch64.tar.gz"
+        ]
+    },
+    "openjdk11_darwin_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "generator_function": "dist_http_archive",
+        "generator_name": "openjdk11_darwin_archive",
+        "name": "openjdk11_darwin_archive",
+        "sha256": "2614e5c5de8e989d4d81759de4c333aa5b867b17ab9ee78754309ba65c7f6f55",
+        "strip_prefix": "zulu11.56.19-ca-jdk11.0.15-macosx_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu11.56.19-ca-jdk11.0.15-macosx_x64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu11.56.19-ca-jdk11.0.15-macosx_x64.tar.gz"
+        ]
+    },
+    "openjdk11_linux_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "generator_function": "dist_http_archive",
+        "generator_name": "openjdk11_linux_archive",
+        "name": "openjdk11_linux_archive",
+        "sha256": "e064b61d93304012351242bf0823c6a2e41d9e28add7ea7f05378b7243d34247",
+        "strip_prefix": "zulu11.56.19-ca-jdk11.0.15-linux_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu11.56.19-ca-jdk11.0.15-linux_x64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu11.56.19-ca-jdk11.0.15-linux_x64.tar.gz"
+        ]
+    },
+    "openjdk11_windows_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "generator_function": "dist_http_archive",
+        "generator_name": "openjdk11_windows_archive",
+        "name": "openjdk11_windows_archive",
+        "sha256": "a106c77389a63b6bd963a087d5f01171bd32aa3ee7377ecef87531390dcb9050",
+        "strip_prefix": "zulu11.56.19-ca-jdk11.0.15-win_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu11.56.19-ca-jdk11.0.15-win_x64.zip",
+            "https://cdn.azul.com/zulu/bin/zulu11.56.19-ca-jdk11.0.15-win_x64.zip"
+        ]
+    },
+    "openjdk11_windows_arm64_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "generator_function": "dist_http_archive",
+        "generator_name": "openjdk11_windows_arm64_archive",
+        "name": "openjdk11_windows_arm64_archive",
+        "sha256": "b8a28e6e767d90acf793ea6f5bed0bb595ba0ba5ebdf8b99f395266161e53ec2",
+        "strip_prefix": "jdk-11.0.13+8",
+        "urls": [
+            "https://mirror.bazel.build/aka.ms/download-jdk/microsoft-jdk-11.0.13.8.1-windows-aarch64.zip"
+        ]
+    },
+    "openjdk17_darwin_aarch64_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "generator_function": "dist_http_archive",
+        "generator_name": "openjdk17_darwin_aarch64_archive",
+        "name": "openjdk17_darwin_aarch64_archive",
+        "sha256": "515dd56ec99bb5ae8966621a2088aadfbe72631818ffbba6e4387b7ee292ab09",
+        "strip_prefix": "zulu17.38.21-ca-jdk17.0.5-macosx_aarch64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.38.21-ca-jdk17.0.5-macosx_aarch64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu17.38.21-ca-jdk17.0.5-macosx_aarch64.tar.gz"
+        ]
+    },
+    "openjdk17_darwin_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "generator_function": "dist_http_archive",
+        "generator_name": "openjdk17_darwin_archive",
+        "name": "openjdk17_darwin_archive",
+        "sha256": "e6317cee4d40995f0da5b702af3f04a6af2bbd55febf67927696987d11113b53",
+        "strip_prefix": "zulu17.38.21-ca-jdk17.0.5-macosx_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.38.21-ca-jdk17.0.5-macosx_x64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu17.38.21-ca-jdk17.0.5-macosx_x64.tar.gz"
+        ]
+    },
+    "openjdk17_linux_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "generator_function": "dist_http_archive",
+        "generator_name": "openjdk17_linux_archive",
+        "name": "openjdk17_linux_archive",
+        "sha256": "20c91a922eec795f3181eaa70def8b99d8eac56047c9a14bfb257c85b991df1b",
+        "strip_prefix": "zulu17.38.21-ca-jdk17.0.5-linux_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.38.21-ca-jdk17.0.5-linux_x64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu17.38.21-ca-jdk17.0.5-linux_x64.tar.gz"
+        ]
+    },
+    "openjdk17_windows_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "generator_function": "dist_http_archive",
+        "generator_name": "openjdk17_windows_archive",
+        "name": "openjdk17_windows_archive",
+        "sha256": "9972c5b62a61b45785d3d956c559e079d9e91f144ec46225f5deeda214d48f27",
+        "strip_prefix": "zulu17.38.21-ca-jdk17.0.5-win_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.38.21-ca-jdk17.0.5-win_x64.zip",
+            "https://cdn.azul.com/zulu/bin/zulu17.38.21-ca-jdk17.0.5-win_x64.zip"
+        ]
+    },
+    "openjdk17_windows_arm64_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "generator_function": "dist_http_archive",
+        "generator_name": "openjdk17_windows_arm64_archive",
+        "name": "openjdk17_windows_arm64_archive",
+        "sha256": "bc3476f2161bf99bc9a243ff535b8fc033b34ce9a2fa4b62fb8d79b6bfdc427f",
+        "strip_prefix": "zulu17.38.21-ca-jdk17.0.5-win_aarch64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.38.21-ca-jdk17.0.5-win_aarch64.zip",
+            "https://cdn.azul.com/zulu/bin/zulu17.38.21-ca-jdk17.0.5-win_aarch64.zip"
+        ]
+    },
+    "openjdk18_darwin_aarch64_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "generator_function": "dist_http_archive",
+        "generator_name": "openjdk18_darwin_aarch64_archive",
+        "name": "openjdk18_darwin_aarch64_archive",
+        "sha256": "9595e001451e201fdf33c1952777968a3ac18fe37273bdeaea5b5ed2c4950432",
+        "strip_prefix": "zulu18.28.13-ca-jdk18.0.0-macosx_aarch64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu18.28.13-ca-jdk18.0.0-macosx_aarch64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu18.28.13-ca-jdk18.0.0-macosx_aarch64.tar.gz"
+        ]
+    },
+    "openjdk18_darwin_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "generator_function": "dist_http_archive",
+        "generator_name": "openjdk18_darwin_archive",
+        "name": "openjdk18_darwin_archive",
+        "sha256": "780a9aa4bda95a6793bf41d13f837c59ef915e9bfd0e0c5fd4c70e4cdaa88541",
+        "strip_prefix": "zulu18.28.13-ca-jdk18.0.0-macosx_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu18.28.13-ca-jdk18.0.0-macosx_x64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu18.28.13-ca-jdk18.0.0-macosx_x64.tar.gz"
+        ]
+    },
+    "openjdk18_linux_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "generator_function": "dist_http_archive",
+        "generator_name": "openjdk18_linux_archive",
+        "name": "openjdk18_linux_archive",
+        "sha256": "959a94ca4097dcaabc7886784cec10dfdf2b0a3bff890ea8943cc09c5fff29cb",
+        "strip_prefix": "zulu18.28.13-ca-jdk18.0.0-linux_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu18.28.13-ca-jdk18.0.0-linux_x64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu18.28.13-ca-jdk18.0.0-linux_x64.tar.gz"
+        ]
+    },
+    "openjdk18_windows_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "generator_function": "dist_http_archive",
+        "generator_name": "openjdk18_windows_archive",
+        "name": "openjdk18_windows_archive",
+        "sha256": "6c75498163b047595386fdb909cb6d4e04282c3a81799743c5e1f9316391fe16",
+        "strip_prefix": "zulu18.28.13-ca-jdk18.0.0-win_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu18.28.13-ca-jdk18.0.0-win_x64.zip",
+            "https://cdn.azul.com/zulu/bin/zulu18.28.13-ca-jdk18.0.0-win_x64.zip"
+        ]
+    },
+    "openjdk18_windows_arm64_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "generator_function": "dist_http_archive",
+        "generator_name": "openjdk18_windows_arm64_archive",
+        "name": "openjdk18_windows_arm64_archive",
+        "sha256": "9b52b259516e4140ee56b91f77750667bffbc543e78ad8c39082449d4c377b54",
+        "strip_prefix": "zulu18.28.13-ca-jdk18.0.0-win_aarch64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu18.28.13-ca-jdk18.0.0-win_aarch64.zip",
+            "https://cdn.azul.com/zulu/bin/zulu18.28.13-ca-jdk18.0.0-win_aarch64.zip"
+        ]
+    },
+    "openjdk_linux": {
+        "downloaded_file_path": "zulu-linux.tar.gz",
+        "name": "openjdk_linux",
+        "sha256": "65bfe4e0ffa74a680ee4410db46b17e30cd9397b664a92a886599fe1f3530969",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-linux_x64-linux_x64-allmodules-b23d4e05466f2aa1fdcd72d3d3a8e962206b64bf-1581689070.tar.gz"
+        ]
+    },
+    "openjdk_linux_aarch64": {
+        "downloaded_file_path": "zulu-linux-aarch64.tar.gz",
+        "name": "openjdk_linux_aarch64",
+        "sha256": "6b245793087300db3ee82ab0d165614f193a73a60f2f011e347756c1e6ca5bac",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.48-ca-jdk11.0.6/zulu11.37.48-ca-jdk11.0.6-linux_aarch64-allmodules-b23d4e05466f2aa1fdcd72d3d3a8e962206b64bf-1581690750.tar.gz"
+        ]
+    },
+    "openjdk_linux_aarch64_minimal": {
+        "downloaded_file_path": "zulu-linux-aarch64-minimal.tar.gz",
+        "name": "openjdk_linux_aarch64_minimal",
+        "sha256": "06f6520a877704c77614bcfc4f846cc7cbcbf5eaad149bf7f19f4f16e285c9de",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.48-ca-jdk11.0.6/zulu11.37.48-ca-jdk11.0.6-linux_aarch64-minimal-b23d4e05466f2aa1fdcd72d3d3a8e962206b64bf-1581690750.tar.gz"
+        ]
+    },
+    "openjdk_linux_aarch64_vanilla": {
+        "downloaded_file_path": "zulu-linux-aarch64-vanilla.tar.gz",
+        "generator_function": "dist_http_file",
+        "generator_name": "openjdk_linux_aarch64_vanilla",
+        "name": "openjdk_linux_aarch64_vanilla",
+        "sha256": "fc7c41a0005180d4ca471c90d01e049469e0614cf774566d4cf383caa29d1a97",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu-embedded/bin/zulu11.56.19-ca-jdk11.0.15-linux_aarch64.tar.gz",
+            "https://cdn.azul.com/zulu-embedded/bin/zulu11.56.19-ca-jdk11.0.15-linux_aarch64.tar.gz"
+        ]
+    },
+    "openjdk_linux_minimal": {
+        "downloaded_file_path": "zulu-linux-minimal.tar.gz",
+        "name": "openjdk_linux_minimal",
+        "sha256": "91f7d52f695c681d4e21499b4319d548aadef249a6b3053e306308992e1e29ae",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-linux_x64-minimal-b23d4e05466f2aa1fdcd72d3d3a8e962206b64bf-1581689068.tar.gz"
+        ]
+    },
+    "openjdk_linux_ppc64le_vanilla": {
+        "downloaded_file_path": "adoptopenjdk-ppc64le-vanilla.tar.gz",
+        "generator_function": "dist_http_file",
+        "generator_name": "openjdk_linux_ppc64le_vanilla",
+        "name": "openjdk_linux_ppc64le_vanilla",
+        "sha256": "a8fba686f6eb8ae1d1a9566821dbd5a85a1108b96ad857fdbac5c1e4649fc56f",
+        "urls": [
+            "https://mirror.bazel.build/github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.15+10/OpenJDK11U-jdk_ppc64le_linux_hotspot_11.0.15_10.tar.gz",
+            "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.15+10/OpenJDK11U-jdk_ppc64le_linux_hotspot_11.0.15_10.tar.gz"
+        ]
+    },
+    "openjdk_linux_s390x_vanilla": {
+        "downloaded_file_path": "adoptopenjdk-s390x-vanilla.tar.gz",
+        "generator_function": "dist_http_file",
+        "generator_name": "openjdk_linux_s390x_vanilla",
+        "name": "openjdk_linux_s390x_vanilla",
+        "sha256": "a58fc0361966af0a5d5a31a2d8a208e3c9bb0f54f345596fd80b99ea9a39788b",
+        "urls": [
+            "https://mirror.bazel.build/github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.15+10/OpenJDK11U-jdk_s390x_linux_hotspot_11.0.15_10.tar.gz",
+            "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.15+10/OpenJDK11U-jdk_s390x_linux_hotspot_11.0.15_10.tar.gz"
+        ]
+    },
+    "openjdk_linux_vanilla": {
+        "downloaded_file_path": "zulu-linux-vanilla.tar.gz",
+        "generator_function": "dist_http_file",
+        "generator_name": "openjdk_linux_vanilla",
+        "name": "openjdk_linux_vanilla",
+        "sha256": "e064b61d93304012351242bf0823c6a2e41d9e28add7ea7f05378b7243d34247",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu11.56.19-ca-jdk11.0.15-linux_x64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu11.56.19-ca-jdk11.0.15-linux_x64.tar.gz"
+        ]
+    },
+    "openjdk_macos_aarch64": {
+        "downloaded_file_path": "zulu-macos-aarch64.tar.gz",
+        "name": "openjdk_macos_aarch64",
+        "sha256": "a900ef793cb34b03ac5d93ea2f67291b6842e99d500934e19393a8d8f9bfa6ff",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.45.27-ca-jdk11.0.10/zulu11.45.27-ca-jdk11.0.10-macosx_aarch64-allmodules-1611665569.tar.gz"
+        ]
+    },
+    "openjdk_macos_aarch64_minimal": {
+        "downloaded_file_path": "zulu-macos-aarch64-minimal.tar.gz",
+        "name": "openjdk_macos_aarch64_minimal",
+        "sha256": "f4f606926e6deeaa8b8397e299313d9df87642fe464b0ccf1ed0432aeb00640b",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.45.27-ca-jdk11.0.10/zulu11.45.27-ca-jdk11.0.10-macosx_aarch64-minimal-1611665562.tar.gz"
+        ]
+    },
+    "openjdk_macos_aarch64_vanilla": {
+        "downloaded_file_path": "zulu-macos-aarch64-vanilla.tar.gz",
+        "generator_function": "dist_http_file",
+        "generator_name": "openjdk_macos_aarch64_vanilla",
+        "name": "openjdk_macos_aarch64_vanilla",
+        "sha256": "6bb0d2c6e8a29dcd9c577bbb2986352ba12481a9549ac2c0bcfd00ed60e538d2",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu11.56.19-ca-jdk11.0.15-macosx_aarch64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu11.56.19-ca-jdk11.0.15-macosx_aarch64.tar.gz"
+        ]
+    },
+    "openjdk_macos_x86_64": {
+        "downloaded_file_path": "zulu-macos.tar.gz",
+        "name": "openjdk_macos_x86_64",
+        "sha256": "8e283cfd23c7555be8e17295ed76eb8f00324c88ab904b8de37bbe08f90e569b",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-macosx_x64-allmodules-b23d4e05466f2aa1fdcd72d3d3a8e962206b64bf-1581689066.tar.gz"
+        ]
+    },
+    "openjdk_macos_x86_64_minimal": {
+        "downloaded_file_path": "zulu-macos-minimal.tar.gz",
+        "name": "openjdk_macos_x86_64_minimal",
+        "sha256": "1bacb1c07035d4066d79f0b65b4ea0ebd1954f3662bdfe3618da382ac8fd23a6",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-macosx_x64-minimal-b23d4e05466f2aa1fdcd72d3d3a8e962206b64bf-1581689063.tar.gz"
+        ]
+    },
+    "openjdk_macos_x86_64_vanilla": {
+        "downloaded_file_path": "zulu-macos-vanilla.tar.gz",
+        "generator_function": "dist_http_file",
+        "generator_name": "openjdk_macos_x86_64_vanilla",
+        "name": "openjdk_macos_x86_64_vanilla",
+        "sha256": "2614e5c5de8e989d4d81759de4c333aa5b867b17ab9ee78754309ba65c7f6f55",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu11.56.19-ca-jdk11.0.15-macosx_x64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu11.56.19-ca-jdk11.0.15-macosx_x64.tar.gz"
+        ]
+    },
+    "openjdk_win": {
+        "downloaded_file_path": "zulu-win.zip",
+        "name": "openjdk_win",
+        "sha256": "8e1604b3a27dcf639bc6d1a73103f1211848139e4cceb081d0a74a99e1e6f995",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-win_x64-allmodules-b23d4e05466f2aa1fdcd72d3d3a8e962206b64bf-1581689080.zip"
+        ]
+    },
+    "openjdk_win_arm64_vanilla": {
+        "downloaded_file_path": "zulu-win-arm64.zip",
+        "generator_function": "dist_http_file",
+        "generator_name": "openjdk_win_arm64_vanilla",
+        "name": "openjdk_win_arm64_vanilla",
+        "sha256": "bc3476f2161bf99bc9a243ff535b8fc033b34ce9a2fa4b62fb8d79b6bfdc427f",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.38.21-ca-jdk17.0.5-win_aarch64.zip",
+            "https://cdn.azul.com/zulu/bin/zulu17.38.21-ca-jdk17.0.5-win_aarch64.zip"
+        ]
+    },
+    "openjdk_win_minimal": {
+        "downloaded_file_path": "zulu-win-minimal.zip",
+        "name": "openjdk_win_minimal",
+        "sha256": "b90a713c9c2d9ea23cad44d2c2dfcc9af22faba9bde55dedc1c3bb9f556ac1ae",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-win_x64-minimal-b23d4e05466f2aa1fdcd72d3d3a8e962206b64bf-1581689080.zip"
+        ]
+    },
+    "openjdk_win_vanilla": {
+        "downloaded_file_path": "zulu-win-vanilla.zip",
+        "generator_function": "dist_http_file",
+        "generator_name": "openjdk_win_vanilla",
+        "name": "openjdk_win_vanilla",
+        "sha256": "a106c77389a63b6bd963a087d5f01171bd32aa3ee7377ecef87531390dcb9050",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu11.56.19-ca-jdk11.0.15-win_x64.zip",
+            "https://cdn.azul.com/zulu/bin/zulu11.56.19-ca-jdk11.0.15-win_x64.zip"
+        ]
+    },
+    "org_snakeyaml": {
+        "build_file_content": "\njava_library(\n    name = \"snakeyaml\",\n    srcs = glob([\"src/main/**/*.java\"]),\n    visibility = [\n        \"@io_bazel//src/main/java/com/google/devtools/build/docgen/release:__pkg__\",\n        \"@com_google_testparameterinjector//:__pkg__\",\n    ],\n)\n",
+        "name": "org_snakeyaml",
+        "sha256": "fd0e0cc6c5974fc8f08be3a15fb4a59954c7dd958b5b68186a803de6420b6e40",
+        "strip_prefix": "asomov-snakeyaml-b28f0b4d87c6",
+        "urls": [
+            "https://mirror.bazel.build/bitbucket.org/asomov/snakeyaml/get/snakeyaml-1.28.tar.gz"
+        ]
+    },
+    "platforms": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "platforms",
+        "name": "platforms",
+        "sha256": "3a561c99e7bdbe9173aa653fd579fe849f1d8d67395780ab4770b1f381431d51",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/platforms/releases/download/0.0.7/platforms-0.0.7.tar.gz",
+            "https://github.com/bazelbuild/platforms/releases/download/0.0.7/platforms-0.0.7.tar.gz"
+        ]
+    },
+    "platforms-0.0.7.tar.gz": {
+        "name": "platforms-0.0.7.tar.gz",
+        "sha256": "3a561c99e7bdbe9173aa653fd579fe849f1d8d67395780ab4770b1f381431d51",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/platforms/releases/download/0.0.7/platforms-0.0.7.tar.gz",
+            "https://github.com/bazelbuild/platforms/releases/download/0.0.7/platforms-0.0.7.tar.gz"
+        ]
+    },
+    "python-3.7.0": {
+        "build_file_content": "\ncc_library(\n    name = \"python_headers\",\n    hdrs = glob([\"**/Include/**/*.h\"]),\n    strip_include_prefix = \"Python-3.7.0/Include\",\n    visibility = [\"//visibility:public\"],\n)\n",
+        "generator_function": "grpc_extra_deps",
+        "generator_name": "python-3.7.0",
+        "name": "python-3.7.0",
+        "patch_cmds": [
+            "echo '#define SIZEOF_WCHAR_T 4' > Python-3.7.0/Include/pyconfig.h"
+        ],
+        "sha256": "85bb9feb6863e04fb1700b018d9d42d1caac178559ffa453d7e6a436e259fd0d",
+        "urls": [
+            "https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz"
+        ]
+    },
+    "r8-8.0.40.jar": {
+        "name": "r8-8.0.40.jar",
+        "sha256": "ab1379835c7d3e5f21f80347c3c81e2f762e0b9b02748ae5232c3afa14adf702",
+        "urls": [
+            "https://maven.google.com/com/android/tools/r8/8.0.40/r8-8.0.40.jar"
+        ]
+    },
+    "remote_coverage_tools": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "remote_coverage_tools",
+        "name": "remote_coverage_tools",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "7006375f6756819b7013ca875eab70a541cf7d89142d9c511ed78ea4fefa38af",
+        "urls": [
+            "https://mirror.bazel.build/bazel_coverage_output_generator/releases/coverage_output_generator-v2.6.zip"
+        ]
+    },
+    "remote_java_tools": {
+        "generator_function": "maybe",
+        "generator_name": "remote_java_tools",
+        "name": "remote_java_tools",
+        "sha256": "f58a358ca694a41416a9b6a92b852935ad301d8882e5d22f4f11134f035317d5",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/java/v12.6/java_tools-v12.6.zip",
+            "https://github.com/bazelbuild/java_tools/releases/download/java_v12.6/java_tools-v12.6.zip"
+        ]
+    },
+    "remote_java_tools_darwin_arm64": {
+        "generator_function": "maybe",
+        "generator_name": "remote_java_tools_darwin_arm64",
+        "name": "remote_java_tools_darwin_arm64",
+        "sha256": "c6ffcaf87965c436cc86fc0e9673dafc97c0761efae8225ad2691cf6cfe3d87a",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/java/v12.6/java_tools_darwin_arm64-v12.6.zip",
+            "https://github.com/bazelbuild/java_tools/releases/download/java_v12.6/java_tools_darwin_arm64-v12.6.zip"
+        ]
+    },
+    "remote_java_tools_darwin_arm64_for_testing": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "remote_java_tools_darwin_arm64_for_testing",
+        "name": "remote_java_tools_darwin_arm64_for_testing",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "ecedf6305768dfd51751d0ad732898af092bd7710d497c6c6c3214af7e49395f",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/java/v12.7/java_tools_darwin_arm64-v12.7.zip",
+            "https://github.com/bazelbuild/java_tools/releases/download/java_v12.7/java_tools_darwin_arm64-v12.7.zip"
+        ]
+    },
+    "remote_java_tools_darwin_x86_64": {
+        "generator_function": "maybe",
+        "generator_name": "remote_java_tools_darwin_x86_64",
+        "name": "remote_java_tools_darwin_x86_64",
+        "sha256": "c6545e82e543cb5775d3b8909d6270b5f481864b5ff083d20bfa5dcf77ac3ef7",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/java/v12.6/java_tools_darwin_x86_64-v12.6.zip",
+            "https://github.com/bazelbuild/java_tools/releases/download/java_v12.6/java_tools_darwin_x86_64-v12.6.zip"
+        ]
+    },
+    "remote_java_tools_darwin_x86_64_for_testing": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "remote_java_tools_darwin_x86_64_for_testing",
+        "name": "remote_java_tools_darwin_x86_64_for_testing",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "e116c649c0355ab57ffcc870ce1139e5e1528cabac458bd50263d2b84ea4ffb2",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/java/v12.7/java_tools_darwin_x86_64-v12.7.zip",
+            "https://github.com/bazelbuild/java_tools/releases/download/java_v12.7/java_tools_darwin_x86_64-v12.7.zip"
+        ]
+    },
+    "remote_java_tools_for_testing": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "remote_java_tools_for_testing",
+        "name": "remote_java_tools_for_testing",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "aa11ecd5fc0af2769f0f2bdd25e2f4de7c1291ed24326fb23fa69bdd5dcae2b5",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/java/v12.7/java_tools-v12.7.zip",
+            "https://github.com/bazelbuild/java_tools/releases/download/java_v12.7/java_tools-v12.7.zip"
+        ]
+    },
+    "remote_java_tools_linux": {
+        "generator_function": "maybe",
+        "generator_name": "remote_java_tools_linux",
+        "name": "remote_java_tools_linux",
+        "sha256": "64294e91fe940c77e6d35818b4c3a1f07d78e33add01e330188d907032687066",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/java/v12.6/java_tools_linux-v12.6.zip",
+            "https://github.com/bazelbuild/java_tools/releases/download/java_v12.6/java_tools_linux-v12.6.zip"
+        ]
+    },
+    "remote_java_tools_linux_for_testing": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "remote_java_tools_linux_for_testing",
+        "name": "remote_java_tools_linux_for_testing",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "a346b9a291b6db1bb06f7955f267e47522d99963fe14e337da1d75d125a8599f",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/java/v12.7/java_tools_linux-v12.7.zip",
+            "https://github.com/bazelbuild/java_tools/releases/download/java_v12.7/java_tools_linux-v12.7.zip"
+        ]
+    },
+    "remote_java_tools_test": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "remote_java_tools_test",
+        "name": "remote_java_tools_test",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "aa11ecd5fc0af2769f0f2bdd25e2f4de7c1291ed24326fb23fa69bdd5dcae2b5",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/java/v12.7/java_tools-v12.7.zip",
+            "https://github.com/bazelbuild/java_tools/releases/download/java_v12.7/java_tools-v12.7.zip"
+        ]
+    },
+    "remote_java_tools_test_darwin_arm64": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "remote_java_tools_test_darwin_arm64",
+        "name": "remote_java_tools_test_darwin_arm64",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "ecedf6305768dfd51751d0ad732898af092bd7710d497c6c6c3214af7e49395f",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/java/v12.7/java_tools_darwin_arm64-v12.7.zip",
+            "https://github.com/bazelbuild/java_tools/releases/download/java_v12.7/java_tools_darwin_arm64-v12.7.zip"
+        ]
+    },
+    "remote_java_tools_test_darwin_x86_64": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "remote_java_tools_test_darwin_x86_64",
+        "name": "remote_java_tools_test_darwin_x86_64",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "e116c649c0355ab57ffcc870ce1139e5e1528cabac458bd50263d2b84ea4ffb2",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/java/v12.7/java_tools_darwin_x86_64-v12.7.zip",
+            "https://github.com/bazelbuild/java_tools/releases/download/java_v12.7/java_tools_darwin_x86_64-v12.7.zip"
+        ]
+    },
+    "remote_java_tools_test_linux": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "remote_java_tools_test_linux",
+        "name": "remote_java_tools_test_linux",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "a346b9a291b6db1bb06f7955f267e47522d99963fe14e337da1d75d125a8599f",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/java/v12.7/java_tools_linux-v12.7.zip",
+            "https://github.com/bazelbuild/java_tools/releases/download/java_v12.7/java_tools_linux-v12.7.zip"
+        ]
+    },
+    "remote_java_tools_test_windows": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "remote_java_tools_test_windows",
+        "name": "remote_java_tools_test_windows",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "bae6a03b5aeead5804ba7bcdcc8b14ec3ed05b37f3db5519f788ab060bc53b05",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/java/v12.7/java_tools_windows-v12.7.zip",
+            "https://github.com/bazelbuild/java_tools/releases/download/java_v12.7/java_tools_windows-v12.7.zip"
+        ]
+    },
+    "remote_java_tools_windows": {
+        "generator_function": "maybe",
+        "generator_name": "remote_java_tools_windows",
+        "name": "remote_java_tools_windows",
+        "sha256": "63f727d44011b8c504bb4e6d89c2cd982278efb34dae8629687e9483d8f7d62d",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/java/v12.6/java_tools_windows-v12.6.zip",
+            "https://github.com/bazelbuild/java_tools/releases/download/java_v12.6/java_tools_windows-v12.6.zip"
+        ]
+    },
+    "remote_java_tools_windows_for_testing": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "remote_java_tools_windows_for_testing",
+        "name": "remote_java_tools_windows_for_testing",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "bae6a03b5aeead5804ba7bcdcc8b14ec3ed05b37f3db5519f788ab060bc53b05",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/java/v12.7/java_tools_windows-v12.7.zip",
+            "https://github.com/bazelbuild/java_tools/releases/download/java_v12.7/java_tools_windows-v12.7.zip"
+        ]
+    },
+    "remotejdk11_linux": {
+        "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_import\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"BUILD.bazel\"])\n\nDEPRECATION_MESSAGE = (\"Don't depend on targets in the JDK workspace;\" +\n                       \" use @bazel_tools//tools/jdk:current_java_runtime instead\" +\n                       \" (see https://github.com/bazelbuild/bazel/issues/5594)\")\n\nfilegroup(\n    name = \"jni_header\",\n    srcs = [\"include/jni.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-darwin\",\n    srcs = [\"include/darwin/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-linux\",\n    srcs = [\"include/linux/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-freebsd\",\n    srcs = [\"include/freebsd/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-openbsd\",\n    srcs = [\"include/openbsd/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-windows\",\n    srcs = [\"include/win32/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"java\",\n    srcs = select({\n        \":windows\": [\"bin/java.exe\"],\n        \"//conditions:default\": [\"bin/java\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jar\",\n    srcs = select({\n        \":windows\": [\"bin/jar.exe\"],\n        \"//conditions:default\": [\"bin/jar\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"javac\",\n    srcs = select({\n        \":windows\": [\"bin/javac.exe\"],\n        \"//conditions:default\": [\"bin/javac\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"javadoc\",\n    srcs = select({\n        \":windows\": [\"bin/javadoc.exe\"],\n        \"//conditions:default\": [\"bin/javadoc\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"xjc\",\n    srcs = [\"bin/xjc\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"wsimport\",\n    srcs = [\"bin/wsimport\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nBOOTCLASS_JARS = [\n    \"rt.jar\",\n    \"resources.jar\",\n    \"jsse.jar\",\n    \"jce.jar\",\n    \"charsets.jar\",\n]\n\n# TODO(cushon): this isn't compatible with JDK 9\nfilegroup(\n    name = \"bootclasspath\",\n    srcs = [\"jre/lib/%s\" % jar for jar in BOOTCLASS_JARS],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jre-bin\",\n    srcs = select({\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        \":windows\": glob(\n            [\"jre/bin/**\"],\n            allow_empty = True,\n            exclude = [\"jre/bin/plugin2/**\"],\n        ),\n        \"//conditions:default\": glob(\n            [\"jre/bin/**\"],\n            allow_empty = True,\n        ),\n    }),\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jre-lib\",\n    srcs = glob(\n        [\"jre/lib/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jre\",\n    srcs = [\":jre-default\"],\n)\n\nfilegroup(\n    name = \"jre-default\",\n    srcs = [\n        \":jre-bin\",\n        \":jre-lib\",\n    ],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n#This folder holds security policies\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre-default\",\n    ],\n    version = 11,\n)\n\nconfig_setting(\n    name = \"windows\",\n    constraint_values = [\"@platforms//os:windows\"],\n    visibility = [\"//visibility:private\"],\n)\n",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk11_linux",
+        "name": "remotejdk11_linux",
+        "sha256": "e064b61d93304012351242bf0823c6a2e41d9e28add7ea7f05378b7243d34247",
+        "strip_prefix": "zulu11.56.19-ca-jdk11.0.15-linux_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu11.56.19-ca-jdk11.0.15-linux_x64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu11.56.19-ca-jdk11.0.15-linux_x64.tar.gz"
+        ]
+    },
+    "remotejdk11_linux_aarch64": {
+        "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_import\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"BUILD.bazel\"])\n\nDEPRECATION_MESSAGE = (\"Don't depend on targets in the JDK workspace;\" +\n                       \" use @bazel_tools//tools/jdk:current_java_runtime instead\" +\n                       \" (see https://github.com/bazelbuild/bazel/issues/5594)\")\n\nfilegroup(\n    name = \"jni_header\",\n    srcs = [\"include/jni.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-darwin\",\n    srcs = [\"include/darwin/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-linux\",\n    srcs = [\"include/linux/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-freebsd\",\n    srcs = [\"include/freebsd/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-openbsd\",\n    srcs = [\"include/openbsd/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-windows\",\n    srcs = [\"include/win32/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"java\",\n    srcs = select({\n        \":windows\": [\"bin/java.exe\"],\n        \"//conditions:default\": [\"bin/java\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jar\",\n    srcs = select({\n        \":windows\": [\"bin/jar.exe\"],\n        \"//conditions:default\": [\"bin/jar\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"javac\",\n    srcs = select({\n        \":windows\": [\"bin/javac.exe\"],\n        \"//conditions:default\": [\"bin/javac\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"javadoc\",\n    srcs = select({\n        \":windows\": [\"bin/javadoc.exe\"],\n        \"//conditions:default\": [\"bin/javadoc\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"xjc\",\n    srcs = [\"bin/xjc\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"wsimport\",\n    srcs = [\"bin/wsimport\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nBOOTCLASS_JARS = [\n    \"rt.jar\",\n    \"resources.jar\",\n    \"jsse.jar\",\n    \"jce.jar\",\n    \"charsets.jar\",\n]\n\n# TODO(cushon): this isn't compatible with JDK 9\nfilegroup(\n    name = \"bootclasspath\",\n    srcs = [\"jre/lib/%s\" % jar for jar in BOOTCLASS_JARS],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jre-bin\",\n    srcs = select({\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        \":windows\": glob(\n            [\"jre/bin/**\"],\n            allow_empty = True,\n            exclude = [\"jre/bin/plugin2/**\"],\n        ),\n        \"//conditions:default\": glob(\n            [\"jre/bin/**\"],\n            allow_empty = True,\n        ),\n    }),\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jre-lib\",\n    srcs = glob(\n        [\"jre/lib/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jre\",\n    srcs = [\":jre-default\"],\n)\n\nfilegroup(\n    name = \"jre-default\",\n    srcs = [\n        \":jre-bin\",\n        \":jre-lib\",\n    ],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n#This folder holds security policies\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre-default\",\n    ],\n    version = 11,\n)\n\nconfig_setting(\n    name = \"windows\",\n    constraint_values = [\"@platforms//os:windows\"],\n    visibility = [\"//visibility:private\"],\n)\n",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk11_linux_aarch64",
+        "name": "remotejdk11_linux_aarch64",
+        "sha256": "fc7c41a0005180d4ca471c90d01e049469e0614cf774566d4cf383caa29d1a97",
+        "strip_prefix": "zulu11.56.19-ca-jdk11.0.15-linux_aarch64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu-embedded/bin/zulu11.56.19-ca-jdk11.0.15-linux_aarch64.tar.gz",
+            "https://cdn.azul.com/zulu-embedded/bin/zulu11.56.19-ca-jdk11.0.15-linux_aarch64.tar.gz"
+        ]
+    },
+    "remotejdk11_linux_aarch64_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "generator_function": "dist_http_archive",
+        "generator_name": "remotejdk11_linux_aarch64_for_testing",
+        "name": "remotejdk11_linux_aarch64_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "fc7c41a0005180d4ca471c90d01e049469e0614cf774566d4cf383caa29d1a97",
+        "strip_prefix": "zulu11.56.19-ca-jdk11.0.15-linux_aarch64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu-embedded/bin/zulu11.56.19-ca-jdk11.0.15-linux_aarch64.tar.gz",
+            "https://cdn.azul.com/zulu-embedded/bin/zulu11.56.19-ca-jdk11.0.15-linux_aarch64.tar.gz"
+        ]
+    },
+    "remotejdk11_linux_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "generator_function": "dist_http_archive",
+        "generator_name": "remotejdk11_linux_for_testing",
+        "name": "remotejdk11_linux_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "e064b61d93304012351242bf0823c6a2e41d9e28add7ea7f05378b7243d34247",
+        "strip_prefix": "zulu11.56.19-ca-jdk11.0.15-linux_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu11.56.19-ca-jdk11.0.15-linux_x64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu11.56.19-ca-jdk11.0.15-linux_x64.tar.gz"
+        ]
+    },
+    "remotejdk11_linux_ppc64le": {
+        "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_import\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"BUILD.bazel\"])\n\nDEPRECATION_MESSAGE = (\"Don't depend on targets in the JDK workspace;\" +\n                       \" use @bazel_tools//tools/jdk:current_java_runtime instead\" +\n                       \" (see https://github.com/bazelbuild/bazel/issues/5594)\")\n\nfilegroup(\n    name = \"jni_header\",\n    srcs = [\"include/jni.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-darwin\",\n    srcs = [\"include/darwin/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-linux\",\n    srcs = [\"include/linux/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-freebsd\",\n    srcs = [\"include/freebsd/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-openbsd\",\n    srcs = [\"include/openbsd/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-windows\",\n    srcs = [\"include/win32/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"java\",\n    srcs = select({\n        \":windows\": [\"bin/java.exe\"],\n        \"//conditions:default\": [\"bin/java\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jar\",\n    srcs = select({\n        \":windows\": [\"bin/jar.exe\"],\n        \"//conditions:default\": [\"bin/jar\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"javac\",\n    srcs = select({\n        \":windows\": [\"bin/javac.exe\"],\n        \"//conditions:default\": [\"bin/javac\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"javadoc\",\n    srcs = select({\n        \":windows\": [\"bin/javadoc.exe\"],\n        \"//conditions:default\": [\"bin/javadoc\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"xjc\",\n    srcs = [\"bin/xjc\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"wsimport\",\n    srcs = [\"bin/wsimport\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nBOOTCLASS_JARS = [\n    \"rt.jar\",\n    \"resources.jar\",\n    \"jsse.jar\",\n    \"jce.jar\",\n    \"charsets.jar\",\n]\n\n# TODO(cushon): this isn't compatible with JDK 9\nfilegroup(\n    name = \"bootclasspath\",\n    srcs = [\"jre/lib/%s\" % jar for jar in BOOTCLASS_JARS],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jre-bin\",\n    srcs = select({\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        \":windows\": glob(\n            [\"jre/bin/**\"],\n            allow_empty = True,\n            exclude = [\"jre/bin/plugin2/**\"],\n        ),\n        \"//conditions:default\": glob(\n            [\"jre/bin/**\"],\n            allow_empty = True,\n        ),\n    }),\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jre-lib\",\n    srcs = glob(\n        [\"jre/lib/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jre\",\n    srcs = [\":jre-default\"],\n)\n\nfilegroup(\n    name = \"jre-default\",\n    srcs = [\n        \":jre-bin\",\n        \":jre-lib\",\n    ],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n#This folder holds security policies\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre-default\",\n    ],\n    version = 11,\n)\n\nconfig_setting(\n    name = \"windows\",\n    constraint_values = [\"@platforms//os:windows\"],\n    visibility = [\"//visibility:private\"],\n)\n",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk11_linux_ppc64le",
+        "name": "remotejdk11_linux_ppc64le",
+        "sha256": "a8fba686f6eb8ae1d1a9566821dbd5a85a1108b96ad857fdbac5c1e4649fc56f",
+        "strip_prefix": "jdk-11.0.15+10",
+        "urls": [
+            "https://mirror.bazel.build/github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.15+10/OpenJDK11U-jdk_ppc64le_linux_hotspot_11.0.15_10.tar.gz",
+            "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.15+10/OpenJDK11U-jdk_ppc64le_linux_hotspot_11.0.15_10.tar.gz"
+        ]
+    },
+    "remotejdk11_linux_ppc64le_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "generator_function": "dist_http_archive",
+        "generator_name": "remotejdk11_linux_ppc64le_for_testing",
+        "name": "remotejdk11_linux_ppc64le_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "a8fba686f6eb8ae1d1a9566821dbd5a85a1108b96ad857fdbac5c1e4649fc56f",
+        "strip_prefix": "jdk-11.0.15+10",
+        "urls": [
+            "https://mirror.bazel.build/github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.15+10/OpenJDK11U-jdk_ppc64le_linux_hotspot_11.0.15_10.tar.gz",
+            "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.15+10/OpenJDK11U-jdk_ppc64le_linux_hotspot_11.0.15_10.tar.gz"
+        ]
+    },
+    "remotejdk11_linux_s390x": {
+        "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_import\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"BUILD.bazel\"])\n\nDEPRECATION_MESSAGE = (\"Don't depend on targets in the JDK workspace;\" +\n                       \" use @bazel_tools//tools/jdk:current_java_runtime instead\" +\n                       \" (see https://github.com/bazelbuild/bazel/issues/5594)\")\n\nfilegroup(\n    name = \"jni_header\",\n    srcs = [\"include/jni.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-darwin\",\n    srcs = [\"include/darwin/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-linux\",\n    srcs = [\"include/linux/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-freebsd\",\n    srcs = [\"include/freebsd/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-openbsd\",\n    srcs = [\"include/openbsd/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-windows\",\n    srcs = [\"include/win32/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"java\",\n    srcs = select({\n        \":windows\": [\"bin/java.exe\"],\n        \"//conditions:default\": [\"bin/java\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jar\",\n    srcs = select({\n        \":windows\": [\"bin/jar.exe\"],\n        \"//conditions:default\": [\"bin/jar\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"javac\",\n    srcs = select({\n        \":windows\": [\"bin/javac.exe\"],\n        \"//conditions:default\": [\"bin/javac\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"javadoc\",\n    srcs = select({\n        \":windows\": [\"bin/javadoc.exe\"],\n        \"//conditions:default\": [\"bin/javadoc\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"xjc\",\n    srcs = [\"bin/xjc\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"wsimport\",\n    srcs = [\"bin/wsimport\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nBOOTCLASS_JARS = [\n    \"rt.jar\",\n    \"resources.jar\",\n    \"jsse.jar\",\n    \"jce.jar\",\n    \"charsets.jar\",\n]\n\n# TODO(cushon): this isn't compatible with JDK 9\nfilegroup(\n    name = \"bootclasspath\",\n    srcs = [\"jre/lib/%s\" % jar for jar in BOOTCLASS_JARS],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jre-bin\",\n    srcs = select({\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        \":windows\": glob(\n            [\"jre/bin/**\"],\n            allow_empty = True,\n            exclude = [\"jre/bin/plugin2/**\"],\n        ),\n        \"//conditions:default\": glob(\n            [\"jre/bin/**\"],\n            allow_empty = True,\n        ),\n    }),\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jre-lib\",\n    srcs = glob(\n        [\"jre/lib/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jre\",\n    srcs = [\":jre-default\"],\n)\n\nfilegroup(\n    name = \"jre-default\",\n    srcs = [\n        \":jre-bin\",\n        \":jre-lib\",\n    ],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n#This folder holds security policies\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre-default\",\n    ],\n    version = 11,\n)\n\nconfig_setting(\n    name = \"windows\",\n    constraint_values = [\"@platforms//os:windows\"],\n    visibility = [\"//visibility:private\"],\n)\n",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk11_linux_s390x",
+        "name": "remotejdk11_linux_s390x",
+        "sha256": "a58fc0361966af0a5d5a31a2d8a208e3c9bb0f54f345596fd80b99ea9a39788b",
+        "strip_prefix": "jdk-11.0.15+10",
+        "urls": [
+            "https://mirror.bazel.build/github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.15+10/OpenJDK11U-jdk_s390x_linux_hotspot_11.0.15_10.tar.gz",
+            "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.15+10/OpenJDK11U-jdk_s390x_linux_hotspot_11.0.15_10.tar.gz"
+        ]
+    },
+    "remotejdk11_linux_s390x_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "generator_function": "dist_http_archive",
+        "generator_name": "remotejdk11_linux_s390x_for_testing",
+        "name": "remotejdk11_linux_s390x_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "a58fc0361966af0a5d5a31a2d8a208e3c9bb0f54f345596fd80b99ea9a39788b",
+        "strip_prefix": "jdk-11.0.15+10",
+        "urls": [
+            "https://mirror.bazel.build/github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.15+10/OpenJDK11U-jdk_s390x_linux_hotspot_11.0.15_10.tar.gz",
+            "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.15+10/OpenJDK11U-jdk_s390x_linux_hotspot_11.0.15_10.tar.gz"
+        ]
+    },
+    "remotejdk11_macos": {
+        "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_import\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"BUILD.bazel\"])\n\nDEPRECATION_MESSAGE = (\"Don't depend on targets in the JDK workspace;\" +\n                       \" use @bazel_tools//tools/jdk:current_java_runtime instead\" +\n                       \" (see https://github.com/bazelbuild/bazel/issues/5594)\")\n\nfilegroup(\n    name = \"jni_header\",\n    srcs = [\"include/jni.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-darwin\",\n    srcs = [\"include/darwin/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-linux\",\n    srcs = [\"include/linux/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-freebsd\",\n    srcs = [\"include/freebsd/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-openbsd\",\n    srcs = [\"include/openbsd/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-windows\",\n    srcs = [\"include/win32/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"java\",\n    srcs = select({\n        \":windows\": [\"bin/java.exe\"],\n        \"//conditions:default\": [\"bin/java\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jar\",\n    srcs = select({\n        \":windows\": [\"bin/jar.exe\"],\n        \"//conditions:default\": [\"bin/jar\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"javac\",\n    srcs = select({\n        \":windows\": [\"bin/javac.exe\"],\n        \"//conditions:default\": [\"bin/javac\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"javadoc\",\n    srcs = select({\n        \":windows\": [\"bin/javadoc.exe\"],\n        \"//conditions:default\": [\"bin/javadoc\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"xjc\",\n    srcs = [\"bin/xjc\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"wsimport\",\n    srcs = [\"bin/wsimport\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nBOOTCLASS_JARS = [\n    \"rt.jar\",\n    \"resources.jar\",\n    \"jsse.jar\",\n    \"jce.jar\",\n    \"charsets.jar\",\n]\n\n# TODO(cushon): this isn't compatible with JDK 9\nfilegroup(\n    name = \"bootclasspath\",\n    srcs = [\"jre/lib/%s\" % jar for jar in BOOTCLASS_JARS],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jre-bin\",\n    srcs = select({\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        \":windows\": glob(\n            [\"jre/bin/**\"],\n            allow_empty = True,\n            exclude = [\"jre/bin/plugin2/**\"],\n        ),\n        \"//conditions:default\": glob(\n            [\"jre/bin/**\"],\n            allow_empty = True,\n        ),\n    }),\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jre-lib\",\n    srcs = glob(\n        [\"jre/lib/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jre\",\n    srcs = [\":jre-default\"],\n)\n\nfilegroup(\n    name = \"jre-default\",\n    srcs = [\n        \":jre-bin\",\n        \":jre-lib\",\n    ],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n#This folder holds security policies\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre-default\",\n    ],\n    version = 11,\n)\n\nconfig_setting(\n    name = \"windows\",\n    constraint_values = [\"@platforms//os:windows\"],\n    visibility = [\"//visibility:private\"],\n)\n",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk11_macos",
+        "name": "remotejdk11_macos",
+        "sha256": "2614e5c5de8e989d4d81759de4c333aa5b867b17ab9ee78754309ba65c7f6f55",
+        "strip_prefix": "zulu11.56.19-ca-jdk11.0.15-macosx_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu11.56.19-ca-jdk11.0.15-macosx_x64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu11.56.19-ca-jdk11.0.15-macosx_x64.tar.gz"
+        ]
+    },
+    "remotejdk11_macos_aarch64": {
+        "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_import\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"BUILD.bazel\"])\n\nDEPRECATION_MESSAGE = (\"Don't depend on targets in the JDK workspace;\" +\n                       \" use @bazel_tools//tools/jdk:current_java_runtime instead\" +\n                       \" (see https://github.com/bazelbuild/bazel/issues/5594)\")\n\nfilegroup(\n    name = \"jni_header\",\n    srcs = [\"include/jni.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-darwin\",\n    srcs = [\"include/darwin/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-linux\",\n    srcs = [\"include/linux/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-freebsd\",\n    srcs = [\"include/freebsd/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-openbsd\",\n    srcs = [\"include/openbsd/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-windows\",\n    srcs = [\"include/win32/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"java\",\n    srcs = select({\n        \":windows\": [\"bin/java.exe\"],\n        \"//conditions:default\": [\"bin/java\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jar\",\n    srcs = select({\n        \":windows\": [\"bin/jar.exe\"],\n        \"//conditions:default\": [\"bin/jar\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"javac\",\n    srcs = select({\n        \":windows\": [\"bin/javac.exe\"],\n        \"//conditions:default\": [\"bin/javac\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"javadoc\",\n    srcs = select({\n        \":windows\": [\"bin/javadoc.exe\"],\n        \"//conditions:default\": [\"bin/javadoc\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"xjc\",\n    srcs = [\"bin/xjc\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"wsimport\",\n    srcs = [\"bin/wsimport\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nBOOTCLASS_JARS = [\n    \"rt.jar\",\n    \"resources.jar\",\n    \"jsse.jar\",\n    \"jce.jar\",\n    \"charsets.jar\",\n]\n\n# TODO(cushon): this isn't compatible with JDK 9\nfilegroup(\n    name = \"bootclasspath\",\n    srcs = [\"jre/lib/%s\" % jar for jar in BOOTCLASS_JARS],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jre-bin\",\n    srcs = select({\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        \":windows\": glob(\n            [\"jre/bin/**\"],\n            allow_empty = True,\n            exclude = [\"jre/bin/plugin2/**\"],\n        ),\n        \"//conditions:default\": glob(\n            [\"jre/bin/**\"],\n            allow_empty = True,\n        ),\n    }),\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jre-lib\",\n    srcs = glob(\n        [\"jre/lib/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jre\",\n    srcs = [\":jre-default\"],\n)\n\nfilegroup(\n    name = \"jre-default\",\n    srcs = [\n        \":jre-bin\",\n        \":jre-lib\",\n    ],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n#This folder holds security policies\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre-default\",\n    ],\n    version = 11,\n)\n\nconfig_setting(\n    name = \"windows\",\n    constraint_values = [\"@platforms//os:windows\"],\n    visibility = [\"//visibility:private\"],\n)\n",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk11_macos_aarch64",
+        "name": "remotejdk11_macos_aarch64",
+        "sha256": "6bb0d2c6e8a29dcd9c577bbb2986352ba12481a9549ac2c0bcfd00ed60e538d2",
+        "strip_prefix": "zulu11.56.19-ca-jdk11.0.15-macosx_aarch64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu11.56.19-ca-jdk11.0.15-macosx_aarch64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu11.56.19-ca-jdk11.0.15-macosx_aarch64.tar.gz"
+        ]
+    },
+    "remotejdk11_macos_aarch64_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "generator_function": "dist_http_archive",
+        "generator_name": "remotejdk11_macos_aarch64_for_testing",
+        "name": "remotejdk11_macos_aarch64_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "6bb0d2c6e8a29dcd9c577bbb2986352ba12481a9549ac2c0bcfd00ed60e538d2",
+        "strip_prefix": "zulu11.56.19-ca-jdk11.0.15-macosx_aarch64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu11.56.19-ca-jdk11.0.15-macosx_aarch64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu11.56.19-ca-jdk11.0.15-macosx_aarch64.tar.gz"
+        ]
+    },
+    "remotejdk11_macos_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "generator_function": "dist_http_archive",
+        "generator_name": "remotejdk11_macos_for_testing",
+        "name": "remotejdk11_macos_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "2614e5c5de8e989d4d81759de4c333aa5b867b17ab9ee78754309ba65c7f6f55",
+        "strip_prefix": "zulu11.56.19-ca-jdk11.0.15-macosx_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu11.56.19-ca-jdk11.0.15-macosx_x64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu11.56.19-ca-jdk11.0.15-macosx_x64.tar.gz"
+        ]
+    },
+    "remotejdk11_win": {
+        "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_import\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"BUILD.bazel\"])\n\nDEPRECATION_MESSAGE = (\"Don't depend on targets in the JDK workspace;\" +\n                       \" use @bazel_tools//tools/jdk:current_java_runtime instead\" +\n                       \" (see https://github.com/bazelbuild/bazel/issues/5594)\")\n\nfilegroup(\n    name = \"jni_header\",\n    srcs = [\"include/jni.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-darwin\",\n    srcs = [\"include/darwin/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-linux\",\n    srcs = [\"include/linux/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-freebsd\",\n    srcs = [\"include/freebsd/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-openbsd\",\n    srcs = [\"include/openbsd/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-windows\",\n    srcs = [\"include/win32/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"java\",\n    srcs = select({\n        \":windows\": [\"bin/java.exe\"],\n        \"//conditions:default\": [\"bin/java\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jar\",\n    srcs = select({\n        \":windows\": [\"bin/jar.exe\"],\n        \"//conditions:default\": [\"bin/jar\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"javac\",\n    srcs = select({\n        \":windows\": [\"bin/javac.exe\"],\n        \"//conditions:default\": [\"bin/javac\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"javadoc\",\n    srcs = select({\n        \":windows\": [\"bin/javadoc.exe\"],\n        \"//conditions:default\": [\"bin/javadoc\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"xjc\",\n    srcs = [\"bin/xjc\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"wsimport\",\n    srcs = [\"bin/wsimport\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nBOOTCLASS_JARS = [\n    \"rt.jar\",\n    \"resources.jar\",\n    \"jsse.jar\",\n    \"jce.jar\",\n    \"charsets.jar\",\n]\n\n# TODO(cushon): this isn't compatible with JDK 9\nfilegroup(\n    name = \"bootclasspath\",\n    srcs = [\"jre/lib/%s\" % jar for jar in BOOTCLASS_JARS],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jre-bin\",\n    srcs = select({\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        \":windows\": glob(\n            [\"jre/bin/**\"],\n            allow_empty = True,\n            exclude = [\"jre/bin/plugin2/**\"],\n        ),\n        \"//conditions:default\": glob(\n            [\"jre/bin/**\"],\n            allow_empty = True,\n        ),\n    }),\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jre-lib\",\n    srcs = glob(\n        [\"jre/lib/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jre\",\n    srcs = [\":jre-default\"],\n)\n\nfilegroup(\n    name = \"jre-default\",\n    srcs = [\n        \":jre-bin\",\n        \":jre-lib\",\n    ],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n#This folder holds security policies\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre-default\",\n    ],\n    version = 11,\n)\n\nconfig_setting(\n    name = \"windows\",\n    constraint_values = [\"@platforms//os:windows\"],\n    visibility = [\"//visibility:private\"],\n)\n",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk11_win",
+        "name": "remotejdk11_win",
+        "sha256": "a106c77389a63b6bd963a087d5f01171bd32aa3ee7377ecef87531390dcb9050",
+        "strip_prefix": "zulu11.56.19-ca-jdk11.0.15-win_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu11.56.19-ca-jdk11.0.15-win_x64.zip",
+            "https://cdn.azul.com/zulu/bin/zulu11.56.19-ca-jdk11.0.15-win_x64.zip"
+        ]
+    },
+    "remotejdk11_win_arm64": {
+        "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_import\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"BUILD.bazel\"])\n\nDEPRECATION_MESSAGE = (\"Don't depend on targets in the JDK workspace;\" +\n                       \" use @bazel_tools//tools/jdk:current_java_runtime instead\" +\n                       \" (see https://github.com/bazelbuild/bazel/issues/5594)\")\n\nfilegroup(\n    name = \"jni_header\",\n    srcs = [\"include/jni.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-darwin\",\n    srcs = [\"include/darwin/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-linux\",\n    srcs = [\"include/linux/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-freebsd\",\n    srcs = [\"include/freebsd/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-openbsd\",\n    srcs = [\"include/openbsd/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-windows\",\n    srcs = [\"include/win32/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"java\",\n    srcs = select({\n        \":windows\": [\"bin/java.exe\"],\n        \"//conditions:default\": [\"bin/java\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jar\",\n    srcs = select({\n        \":windows\": [\"bin/jar.exe\"],\n        \"//conditions:default\": [\"bin/jar\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"javac\",\n    srcs = select({\n        \":windows\": [\"bin/javac.exe\"],\n        \"//conditions:default\": [\"bin/javac\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"javadoc\",\n    srcs = select({\n        \":windows\": [\"bin/javadoc.exe\"],\n        \"//conditions:default\": [\"bin/javadoc\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"xjc\",\n    srcs = [\"bin/xjc\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"wsimport\",\n    srcs = [\"bin/wsimport\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nBOOTCLASS_JARS = [\n    \"rt.jar\",\n    \"resources.jar\",\n    \"jsse.jar\",\n    \"jce.jar\",\n    \"charsets.jar\",\n]\n\n# TODO(cushon): this isn't compatible with JDK 9\nfilegroup(\n    name = \"bootclasspath\",\n    srcs = [\"jre/lib/%s\" % jar for jar in BOOTCLASS_JARS],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jre-bin\",\n    srcs = select({\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        \":windows\": glob(\n            [\"jre/bin/**\"],\n            allow_empty = True,\n            exclude = [\"jre/bin/plugin2/**\"],\n        ),\n        \"//conditions:default\": glob(\n            [\"jre/bin/**\"],\n            allow_empty = True,\n        ),\n    }),\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jre-lib\",\n    srcs = glob(\n        [\"jre/lib/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jre\",\n    srcs = [\":jre-default\"],\n)\n\nfilegroup(\n    name = \"jre-default\",\n    srcs = [\n        \":jre-bin\",\n        \":jre-lib\",\n    ],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n#This folder holds security policies\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre-default\",\n    ],\n    version = 11,\n)\n\nconfig_setting(\n    name = \"windows\",\n    constraint_values = [\"@platforms//os:windows\"],\n    visibility = [\"//visibility:private\"],\n)\n",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk11_win_arm64",
+        "name": "remotejdk11_win_arm64",
+        "sha256": "b8a28e6e767d90acf793ea6f5bed0bb595ba0ba5ebdf8b99f395266161e53ec2",
+        "strip_prefix": "jdk-11.0.13+8",
+        "urls": [
+            "https://mirror.bazel.build/aka.ms/download-jdk/microsoft-jdk-11.0.13.8.1-windows-aarch64.zip"
+        ]
+    },
+    "remotejdk11_win_arm64_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "generator_function": "dist_http_archive",
+        "generator_name": "remotejdk11_win_arm64_for_testing",
+        "name": "remotejdk11_win_arm64_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "b8a28e6e767d90acf793ea6f5bed0bb595ba0ba5ebdf8b99f395266161e53ec2",
+        "strip_prefix": "jdk-11.0.13+8",
+        "urls": [
+            "https://mirror.bazel.build/aka.ms/download-jdk/microsoft-jdk-11.0.13.8.1-windows-aarch64.zip"
+        ]
+    },
+    "remotejdk11_win_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "generator_function": "dist_http_archive",
+        "generator_name": "remotejdk11_win_for_testing",
+        "name": "remotejdk11_win_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "a106c77389a63b6bd963a087d5f01171bd32aa3ee7377ecef87531390dcb9050",
+        "strip_prefix": "zulu11.56.19-ca-jdk11.0.15-win_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu11.56.19-ca-jdk11.0.15-win_x64.zip",
+            "https://cdn.azul.com/zulu/bin/zulu11.56.19-ca-jdk11.0.15-win_x64.zip"
+        ]
+    },
+    "remotejdk17_linux": {
+        "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_import\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"BUILD.bazel\"])\n\nDEPRECATION_MESSAGE = (\"Don't depend on targets in the JDK workspace;\" +\n                       \" use @bazel_tools//tools/jdk:current_java_runtime instead\" +\n                       \" (see https://github.com/bazelbuild/bazel/issues/5594)\")\n\nfilegroup(\n    name = \"jni_header\",\n    srcs = [\"include/jni.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-darwin\",\n    srcs = [\"include/darwin/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-linux\",\n    srcs = [\"include/linux/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-freebsd\",\n    srcs = [\"include/freebsd/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-openbsd\",\n    srcs = [\"include/openbsd/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-windows\",\n    srcs = [\"include/win32/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"java\",\n    srcs = select({\n        \":windows\": [\"bin/java.exe\"],\n        \"//conditions:default\": [\"bin/java\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jar\",\n    srcs = select({\n        \":windows\": [\"bin/jar.exe\"],\n        \"//conditions:default\": [\"bin/jar\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"javac\",\n    srcs = select({\n        \":windows\": [\"bin/javac.exe\"],\n        \"//conditions:default\": [\"bin/javac\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"javadoc\",\n    srcs = select({\n        \":windows\": [\"bin/javadoc.exe\"],\n        \"//conditions:default\": [\"bin/javadoc\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"xjc\",\n    srcs = [\"bin/xjc\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"wsimport\",\n    srcs = [\"bin/wsimport\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nBOOTCLASS_JARS = [\n    \"rt.jar\",\n    \"resources.jar\",\n    \"jsse.jar\",\n    \"jce.jar\",\n    \"charsets.jar\",\n]\n\n# TODO(cushon): this isn't compatible with JDK 9\nfilegroup(\n    name = \"bootclasspath\",\n    srcs = [\"jre/lib/%s\" % jar for jar in BOOTCLASS_JARS],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jre-bin\",\n    srcs = select({\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        \":windows\": glob(\n            [\"jre/bin/**\"],\n            allow_empty = True,\n            exclude = [\"jre/bin/plugin2/**\"],\n        ),\n        \"//conditions:default\": glob(\n            [\"jre/bin/**\"],\n            allow_empty = True,\n        ),\n    }),\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jre-lib\",\n    srcs = glob(\n        [\"jre/lib/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jre\",\n    srcs = [\":jre-default\"],\n)\n\nfilegroup(\n    name = \"jre-default\",\n    srcs = [\n        \":jre-bin\",\n        \":jre-lib\",\n    ],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n#This folder holds security policies\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre-default\",\n    ],\n    version = 17,\n)\n\nconfig_setting(\n    name = \"windows\",\n    constraint_values = [\"@platforms//os:windows\"],\n    visibility = [\"//visibility:private\"],\n)\n",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk17_linux",
+        "name": "remotejdk17_linux",
+        "sha256": "20c91a922eec795f3181eaa70def8b99d8eac56047c9a14bfb257c85b991df1b",
+        "strip_prefix": "zulu17.38.21-ca-jdk17.0.5-linux_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.38.21-ca-jdk17.0.5-linux_x64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu17.38.21-ca-jdk17.0.5-linux_x64.tar.gz"
+        ]
+    },
+    "remotejdk17_linux_aarch64": {
+        "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_import\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"BUILD.bazel\"])\n\nDEPRECATION_MESSAGE = (\"Don't depend on targets in the JDK workspace;\" +\n                       \" use @bazel_tools//tools/jdk:current_java_runtime instead\" +\n                       \" (see https://github.com/bazelbuild/bazel/issues/5594)\")\n\nfilegroup(\n    name = \"jni_header\",\n    srcs = [\"include/jni.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-darwin\",\n    srcs = [\"include/darwin/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-linux\",\n    srcs = [\"include/linux/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-freebsd\",\n    srcs = [\"include/freebsd/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-openbsd\",\n    srcs = [\"include/openbsd/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-windows\",\n    srcs = [\"include/win32/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"java\",\n    srcs = select({\n        \":windows\": [\"bin/java.exe\"],\n        \"//conditions:default\": [\"bin/java\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jar\",\n    srcs = select({\n        \":windows\": [\"bin/jar.exe\"],\n        \"//conditions:default\": [\"bin/jar\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"javac\",\n    srcs = select({\n        \":windows\": [\"bin/javac.exe\"],\n        \"//conditions:default\": [\"bin/javac\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"javadoc\",\n    srcs = select({\n        \":windows\": [\"bin/javadoc.exe\"],\n        \"//conditions:default\": [\"bin/javadoc\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"xjc\",\n    srcs = [\"bin/xjc\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"wsimport\",\n    srcs = [\"bin/wsimport\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nBOOTCLASS_JARS = [\n    \"rt.jar\",\n    \"resources.jar\",\n    \"jsse.jar\",\n    \"jce.jar\",\n    \"charsets.jar\",\n]\n\n# TODO(cushon): this isn't compatible with JDK 9\nfilegroup(\n    name = \"bootclasspath\",\n    srcs = [\"jre/lib/%s\" % jar for jar in BOOTCLASS_JARS],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jre-bin\",\n    srcs = select({\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        \":windows\": glob(\n            [\"jre/bin/**\"],\n            allow_empty = True,\n            exclude = [\"jre/bin/plugin2/**\"],\n        ),\n        \"//conditions:default\": glob(\n            [\"jre/bin/**\"],\n            allow_empty = True,\n        ),\n    }),\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jre-lib\",\n    srcs = glob(\n        [\"jre/lib/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jre\",\n    srcs = [\":jre-default\"],\n)\n\nfilegroup(\n    name = \"jre-default\",\n    srcs = [\n        \":jre-bin\",\n        \":jre-lib\",\n    ],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n#This folder holds security policies\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre-default\",\n    ],\n    version = 17,\n)\n\nconfig_setting(\n    name = \"windows\",\n    constraint_values = [\"@platforms//os:windows\"],\n    visibility = [\"//visibility:private\"],\n)\n",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk17_linux_aarch64",
+        "name": "remotejdk17_linux_aarch64",
+        "sha256": "dbc6ae9163e7ff469a9ab1f342cd1bc1f4c1fb78afc3c4f2228ee3b32c4f3e43",
+        "strip_prefix": "zulu17.38.21-ca-jdk17.0.5-linux_aarch64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.38.21-ca-jdk17.0.5-linux_aarch64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu17.38.21-ca-jdk17.0.5-linux_aarch64.tar.gz"
+        ]
+    },
+    "remotejdk17_linux_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "generator_function": "dist_http_archive",
+        "generator_name": "remotejdk17_linux_for_testing",
+        "name": "remotejdk17_linux_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "20c91a922eec795f3181eaa70def8b99d8eac56047c9a14bfb257c85b991df1b",
+        "strip_prefix": "zulu17.38.21-ca-jdk17.0.5-linux_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.38.21-ca-jdk17.0.5-linux_x64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu17.38.21-ca-jdk17.0.5-linux_x64.tar.gz"
+        ]
+    },
+    "remotejdk17_macos": {
+        "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_import\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"BUILD.bazel\"])\n\nDEPRECATION_MESSAGE = (\"Don't depend on targets in the JDK workspace;\" +\n                       \" use @bazel_tools//tools/jdk:current_java_runtime instead\" +\n                       \" (see https://github.com/bazelbuild/bazel/issues/5594)\")\n\nfilegroup(\n    name = \"jni_header\",\n    srcs = [\"include/jni.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-darwin\",\n    srcs = [\"include/darwin/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-linux\",\n    srcs = [\"include/linux/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-freebsd\",\n    srcs = [\"include/freebsd/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-openbsd\",\n    srcs = [\"include/openbsd/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-windows\",\n    srcs = [\"include/win32/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"java\",\n    srcs = select({\n        \":windows\": [\"bin/java.exe\"],\n        \"//conditions:default\": [\"bin/java\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jar\",\n    srcs = select({\n        \":windows\": [\"bin/jar.exe\"],\n        \"//conditions:default\": [\"bin/jar\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"javac\",\n    srcs = select({\n        \":windows\": [\"bin/javac.exe\"],\n        \"//conditions:default\": [\"bin/javac\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"javadoc\",\n    srcs = select({\n        \":windows\": [\"bin/javadoc.exe\"],\n        \"//conditions:default\": [\"bin/javadoc\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"xjc\",\n    srcs = [\"bin/xjc\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"wsimport\",\n    srcs = [\"bin/wsimport\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nBOOTCLASS_JARS = [\n    \"rt.jar\",\n    \"resources.jar\",\n    \"jsse.jar\",\n    \"jce.jar\",\n    \"charsets.jar\",\n]\n\n# TODO(cushon): this isn't compatible with JDK 9\nfilegroup(\n    name = \"bootclasspath\",\n    srcs = [\"jre/lib/%s\" % jar for jar in BOOTCLASS_JARS],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jre-bin\",\n    srcs = select({\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        \":windows\": glob(\n            [\"jre/bin/**\"],\n            allow_empty = True,\n            exclude = [\"jre/bin/plugin2/**\"],\n        ),\n        \"//conditions:default\": glob(\n            [\"jre/bin/**\"],\n            allow_empty = True,\n        ),\n    }),\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jre-lib\",\n    srcs = glob(\n        [\"jre/lib/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jre\",\n    srcs = [\":jre-default\"],\n)\n\nfilegroup(\n    name = \"jre-default\",\n    srcs = [\n        \":jre-bin\",\n        \":jre-lib\",\n    ],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n#This folder holds security policies\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre-default\",\n    ],\n    version = 17,\n)\n\nconfig_setting(\n    name = \"windows\",\n    constraint_values = [\"@platforms//os:windows\"],\n    visibility = [\"//visibility:private\"],\n)\n",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk17_macos",
+        "name": "remotejdk17_macos",
+        "sha256": "e6317cee4d40995f0da5b702af3f04a6af2bbd55febf67927696987d11113b53",
+        "strip_prefix": "zulu17.38.21-ca-jdk17.0.5-macosx_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.38.21-ca-jdk17.0.5-macosx_x64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu17.38.21-ca-jdk17.0.5-macosx_x64.tar.gz"
+        ]
+    },
+    "remotejdk17_macos_aarch64": {
+        "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_import\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"BUILD.bazel\"])\n\nDEPRECATION_MESSAGE = (\"Don't depend on targets in the JDK workspace;\" +\n                       \" use @bazel_tools//tools/jdk:current_java_runtime instead\" +\n                       \" (see https://github.com/bazelbuild/bazel/issues/5594)\")\n\nfilegroup(\n    name = \"jni_header\",\n    srcs = [\"include/jni.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-darwin\",\n    srcs = [\"include/darwin/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-linux\",\n    srcs = [\"include/linux/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-freebsd\",\n    srcs = [\"include/freebsd/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-openbsd\",\n    srcs = [\"include/openbsd/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-windows\",\n    srcs = [\"include/win32/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"java\",\n    srcs = select({\n        \":windows\": [\"bin/java.exe\"],\n        \"//conditions:default\": [\"bin/java\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jar\",\n    srcs = select({\n        \":windows\": [\"bin/jar.exe\"],\n        \"//conditions:default\": [\"bin/jar\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"javac\",\n    srcs = select({\n        \":windows\": [\"bin/javac.exe\"],\n        \"//conditions:default\": [\"bin/javac\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"javadoc\",\n    srcs = select({\n        \":windows\": [\"bin/javadoc.exe\"],\n        \"//conditions:default\": [\"bin/javadoc\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"xjc\",\n    srcs = [\"bin/xjc\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"wsimport\",\n    srcs = [\"bin/wsimport\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nBOOTCLASS_JARS = [\n    \"rt.jar\",\n    \"resources.jar\",\n    \"jsse.jar\",\n    \"jce.jar\",\n    \"charsets.jar\",\n]\n\n# TODO(cushon): this isn't compatible with JDK 9\nfilegroup(\n    name = \"bootclasspath\",\n    srcs = [\"jre/lib/%s\" % jar for jar in BOOTCLASS_JARS],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jre-bin\",\n    srcs = select({\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        \":windows\": glob(\n            [\"jre/bin/**\"],\n            allow_empty = True,\n            exclude = [\"jre/bin/plugin2/**\"],\n        ),\n        \"//conditions:default\": glob(\n            [\"jre/bin/**\"],\n            allow_empty = True,\n        ),\n    }),\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jre-lib\",\n    srcs = glob(\n        [\"jre/lib/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jre\",\n    srcs = [\":jre-default\"],\n)\n\nfilegroup(\n    name = \"jre-default\",\n    srcs = [\n        \":jre-bin\",\n        \":jre-lib\",\n    ],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n#This folder holds security policies\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre-default\",\n    ],\n    version = 17,\n)\n\nconfig_setting(\n    name = \"windows\",\n    constraint_values = [\"@platforms//os:windows\"],\n    visibility = [\"//visibility:private\"],\n)\n",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk17_macos_aarch64",
+        "name": "remotejdk17_macos_aarch64",
+        "sha256": "515dd56ec99bb5ae8966621a2088aadfbe72631818ffbba6e4387b7ee292ab09",
+        "strip_prefix": "zulu17.38.21-ca-jdk17.0.5-macosx_aarch64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.38.21-ca-jdk17.0.5-macosx_aarch64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu17.38.21-ca-jdk17.0.5-macosx_aarch64.tar.gz"
+        ]
+    },
+    "remotejdk17_macos_aarch64_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "generator_function": "dist_http_archive",
+        "generator_name": "remotejdk17_macos_aarch64_for_testing",
+        "name": "remotejdk17_macos_aarch64_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "515dd56ec99bb5ae8966621a2088aadfbe72631818ffbba6e4387b7ee292ab09",
+        "strip_prefix": "zulu17.38.21-ca-jdk17.0.5-macosx_aarch64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.38.21-ca-jdk17.0.5-macosx_aarch64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu17.38.21-ca-jdk17.0.5-macosx_aarch64.tar.gz"
+        ]
+    },
+    "remotejdk17_macos_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "generator_function": "dist_http_archive",
+        "generator_name": "remotejdk17_macos_for_testing",
+        "name": "remotejdk17_macos_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "e6317cee4d40995f0da5b702af3f04a6af2bbd55febf67927696987d11113b53",
+        "strip_prefix": "zulu17.38.21-ca-jdk17.0.5-macosx_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.38.21-ca-jdk17.0.5-macosx_x64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu17.38.21-ca-jdk17.0.5-macosx_x64.tar.gz"
+        ]
+    },
+    "remotejdk17_win": {
+        "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_import\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"BUILD.bazel\"])\n\nDEPRECATION_MESSAGE = (\"Don't depend on targets in the JDK workspace;\" +\n                       \" use @bazel_tools//tools/jdk:current_java_runtime instead\" +\n                       \" (see https://github.com/bazelbuild/bazel/issues/5594)\")\n\nfilegroup(\n    name = \"jni_header\",\n    srcs = [\"include/jni.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-darwin\",\n    srcs = [\"include/darwin/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-linux\",\n    srcs = [\"include/linux/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-freebsd\",\n    srcs = [\"include/freebsd/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-openbsd\",\n    srcs = [\"include/openbsd/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-windows\",\n    srcs = [\"include/win32/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"java\",\n    srcs = select({\n        \":windows\": [\"bin/java.exe\"],\n        \"//conditions:default\": [\"bin/java\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jar\",\n    srcs = select({\n        \":windows\": [\"bin/jar.exe\"],\n        \"//conditions:default\": [\"bin/jar\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"javac\",\n    srcs = select({\n        \":windows\": [\"bin/javac.exe\"],\n        \"//conditions:default\": [\"bin/javac\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"javadoc\",\n    srcs = select({\n        \":windows\": [\"bin/javadoc.exe\"],\n        \"//conditions:default\": [\"bin/javadoc\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"xjc\",\n    srcs = [\"bin/xjc\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"wsimport\",\n    srcs = [\"bin/wsimport\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nBOOTCLASS_JARS = [\n    \"rt.jar\",\n    \"resources.jar\",\n    \"jsse.jar\",\n    \"jce.jar\",\n    \"charsets.jar\",\n]\n\n# TODO(cushon): this isn't compatible with JDK 9\nfilegroup(\n    name = \"bootclasspath\",\n    srcs = [\"jre/lib/%s\" % jar for jar in BOOTCLASS_JARS],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jre-bin\",\n    srcs = select({\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        \":windows\": glob(\n            [\"jre/bin/**\"],\n            allow_empty = True,\n            exclude = [\"jre/bin/plugin2/**\"],\n        ),\n        \"//conditions:default\": glob(\n            [\"jre/bin/**\"],\n            allow_empty = True,\n        ),\n    }),\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jre-lib\",\n    srcs = glob(\n        [\"jre/lib/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jre\",\n    srcs = [\":jre-default\"],\n)\n\nfilegroup(\n    name = \"jre-default\",\n    srcs = [\n        \":jre-bin\",\n        \":jre-lib\",\n    ],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n#This folder holds security policies\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre-default\",\n    ],\n    version = 17,\n)\n\nconfig_setting(\n    name = \"windows\",\n    constraint_values = [\"@platforms//os:windows\"],\n    visibility = [\"//visibility:private\"],\n)\n",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk17_win",
+        "name": "remotejdk17_win",
+        "sha256": "9972c5b62a61b45785d3d956c559e079d9e91f144ec46225f5deeda214d48f27",
+        "strip_prefix": "zulu17.38.21-ca-jdk17.0.5-win_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.38.21-ca-jdk17.0.5-win_x64.zip",
+            "https://cdn.azul.com/zulu/bin/zulu17.38.21-ca-jdk17.0.5-win_x64.zip"
+        ]
+    },
+    "remotejdk17_win_arm64": {
+        "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_import\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"BUILD.bazel\"])\n\nDEPRECATION_MESSAGE = (\"Don't depend on targets in the JDK workspace;\" +\n                       \" use @bazel_tools//tools/jdk:current_java_runtime instead\" +\n                       \" (see https://github.com/bazelbuild/bazel/issues/5594)\")\n\nfilegroup(\n    name = \"jni_header\",\n    srcs = [\"include/jni.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-darwin\",\n    srcs = [\"include/darwin/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-linux\",\n    srcs = [\"include/linux/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-freebsd\",\n    srcs = [\"include/freebsd/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-openbsd\",\n    srcs = [\"include/openbsd/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-windows\",\n    srcs = [\"include/win32/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"java\",\n    srcs = select({\n        \":windows\": [\"bin/java.exe\"],\n        \"//conditions:default\": [\"bin/java\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jar\",\n    srcs = select({\n        \":windows\": [\"bin/jar.exe\"],\n        \"//conditions:default\": [\"bin/jar\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"javac\",\n    srcs = select({\n        \":windows\": [\"bin/javac.exe\"],\n        \"//conditions:default\": [\"bin/javac\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"javadoc\",\n    srcs = select({\n        \":windows\": [\"bin/javadoc.exe\"],\n        \"//conditions:default\": [\"bin/javadoc\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"xjc\",\n    srcs = [\"bin/xjc\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"wsimport\",\n    srcs = [\"bin/wsimport\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nBOOTCLASS_JARS = [\n    \"rt.jar\",\n    \"resources.jar\",\n    \"jsse.jar\",\n    \"jce.jar\",\n    \"charsets.jar\",\n]\n\n# TODO(cushon): this isn't compatible with JDK 9\nfilegroup(\n    name = \"bootclasspath\",\n    srcs = [\"jre/lib/%s\" % jar for jar in BOOTCLASS_JARS],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jre-bin\",\n    srcs = select({\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        \":windows\": glob(\n            [\"jre/bin/**\"],\n            allow_empty = True,\n            exclude = [\"jre/bin/plugin2/**\"],\n        ),\n        \"//conditions:default\": glob(\n            [\"jre/bin/**\"],\n            allow_empty = True,\n        ),\n    }),\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jre-lib\",\n    srcs = glob(\n        [\"jre/lib/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jre\",\n    srcs = [\":jre-default\"],\n)\n\nfilegroup(\n    name = \"jre-default\",\n    srcs = [\n        \":jre-bin\",\n        \":jre-lib\",\n    ],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n#This folder holds security policies\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre-default\",\n    ],\n    version = 17,\n)\n\nconfig_setting(\n    name = \"windows\",\n    constraint_values = [\"@platforms//os:windows\"],\n    visibility = [\"//visibility:private\"],\n)\n",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk17_win_arm64",
+        "name": "remotejdk17_win_arm64",
+        "sha256": "bc3476f2161bf99bc9a243ff535b8fc033b34ce9a2fa4b62fb8d79b6bfdc427f",
+        "strip_prefix": "zulu17.38.21-ca-jdk17.0.5-win_aarch64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.38.21-ca-jdk17.0.5-win_aarch64.zip",
+            "https://cdn.azul.com/zulu/bin/zulu17.38.21-ca-jdk17.0.5-win_aarch64.zip"
+        ]
+    },
+    "remotejdk17_win_arm64_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "generator_function": "dist_http_archive",
+        "generator_name": "remotejdk17_win_arm64_for_testing",
+        "name": "remotejdk17_win_arm64_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "bc3476f2161bf99bc9a243ff535b8fc033b34ce9a2fa4b62fb8d79b6bfdc427f",
+        "strip_prefix": "zulu17.38.21-ca-jdk17.0.5-win_aarch64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.38.21-ca-jdk17.0.5-win_aarch64.zip",
+            "https://cdn.azul.com/zulu/bin/zulu17.38.21-ca-jdk17.0.5-win_aarch64.zip"
+        ]
+    },
+    "remotejdk17_win_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "generator_function": "dist_http_archive",
+        "generator_name": "remotejdk17_win_for_testing",
+        "name": "remotejdk17_win_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "9972c5b62a61b45785d3d956c559e079d9e91f144ec46225f5deeda214d48f27",
+        "strip_prefix": "zulu17.38.21-ca-jdk17.0.5-win_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.38.21-ca-jdk17.0.5-win_x64.zip",
+            "https://cdn.azul.com/zulu/bin/zulu17.38.21-ca-jdk17.0.5-win_x64.zip"
+        ]
+    },
+    "remotejdk18_linux": {
+        "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_import\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"BUILD.bazel\"])\n\nDEPRECATION_MESSAGE = (\"Don't depend on targets in the JDK workspace;\" +\n                       \" use @bazel_tools//tools/jdk:current_java_runtime instead\" +\n                       \" (see https://github.com/bazelbuild/bazel/issues/5594)\")\n\nfilegroup(\n    name = \"jni_header\",\n    srcs = [\"include/jni.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-darwin\",\n    srcs = [\"include/darwin/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-linux\",\n    srcs = [\"include/linux/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-freebsd\",\n    srcs = [\"include/freebsd/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-openbsd\",\n    srcs = [\"include/openbsd/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-windows\",\n    srcs = [\"include/win32/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"java\",\n    srcs = select({\n        \":windows\": [\"bin/java.exe\"],\n        \"//conditions:default\": [\"bin/java\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jar\",\n    srcs = select({\n        \":windows\": [\"bin/jar.exe\"],\n        \"//conditions:default\": [\"bin/jar\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"javac\",\n    srcs = select({\n        \":windows\": [\"bin/javac.exe\"],\n        \"//conditions:default\": [\"bin/javac\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"javadoc\",\n    srcs = select({\n        \":windows\": [\"bin/javadoc.exe\"],\n        \"//conditions:default\": [\"bin/javadoc\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"xjc\",\n    srcs = [\"bin/xjc\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"wsimport\",\n    srcs = [\"bin/wsimport\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nBOOTCLASS_JARS = [\n    \"rt.jar\",\n    \"resources.jar\",\n    \"jsse.jar\",\n    \"jce.jar\",\n    \"charsets.jar\",\n]\n\n# TODO(cushon): this isn't compatible with JDK 9\nfilegroup(\n    name = \"bootclasspath\",\n    srcs = [\"jre/lib/%s\" % jar for jar in BOOTCLASS_JARS],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jre-bin\",\n    srcs = select({\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        \":windows\": glob(\n            [\"jre/bin/**\"],\n            allow_empty = True,\n            exclude = [\"jre/bin/plugin2/**\"],\n        ),\n        \"//conditions:default\": glob(\n            [\"jre/bin/**\"],\n            allow_empty = True,\n        ),\n    }),\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jre-lib\",\n    srcs = glob(\n        [\"jre/lib/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jre\",\n    srcs = [\":jre-default\"],\n)\n\nfilegroup(\n    name = \"jre-default\",\n    srcs = [\n        \":jre-bin\",\n        \":jre-lib\",\n    ],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n#This folder holds security policies\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre-default\",\n    ],\n    version = 18,\n)\n\nconfig_setting(\n    name = \"windows\",\n    constraint_values = [\"@platforms//os:windows\"],\n    visibility = [\"//visibility:private\"],\n)\n",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk18_linux",
+        "name": "remotejdk18_linux",
+        "sha256": "959a94ca4097dcaabc7886784cec10dfdf2b0a3bff890ea8943cc09c5fff29cb",
+        "strip_prefix": "zulu18.28.13-ca-jdk18.0.0-linux_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu18.28.13-ca-jdk18.0.0-linux_x64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu18.28.13-ca-jdk18.0.0-linux_x64.tar.gz"
+        ]
+    },
+    "remotejdk18_linux_aarch64": {
+        "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_import\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"BUILD.bazel\"])\n\nDEPRECATION_MESSAGE = (\"Don't depend on targets in the JDK workspace;\" +\n                       \" use @bazel_tools//tools/jdk:current_java_runtime instead\" +\n                       \" (see https://github.com/bazelbuild/bazel/issues/5594)\")\n\nfilegroup(\n    name = \"jni_header\",\n    srcs = [\"include/jni.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-darwin\",\n    srcs = [\"include/darwin/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-linux\",\n    srcs = [\"include/linux/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-freebsd\",\n    srcs = [\"include/freebsd/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-openbsd\",\n    srcs = [\"include/openbsd/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-windows\",\n    srcs = [\"include/win32/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"java\",\n    srcs = select({\n        \":windows\": [\"bin/java.exe\"],\n        \"//conditions:default\": [\"bin/java\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jar\",\n    srcs = select({\n        \":windows\": [\"bin/jar.exe\"],\n        \"//conditions:default\": [\"bin/jar\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"javac\",\n    srcs = select({\n        \":windows\": [\"bin/javac.exe\"],\n        \"//conditions:default\": [\"bin/javac\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"javadoc\",\n    srcs = select({\n        \":windows\": [\"bin/javadoc.exe\"],\n        \"//conditions:default\": [\"bin/javadoc\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"xjc\",\n    srcs = [\"bin/xjc\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"wsimport\",\n    srcs = [\"bin/wsimport\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nBOOTCLASS_JARS = [\n    \"rt.jar\",\n    \"resources.jar\",\n    \"jsse.jar\",\n    \"jce.jar\",\n    \"charsets.jar\",\n]\n\n# TODO(cushon): this isn't compatible with JDK 9\nfilegroup(\n    name = \"bootclasspath\",\n    srcs = [\"jre/lib/%s\" % jar for jar in BOOTCLASS_JARS],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jre-bin\",\n    srcs = select({\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        \":windows\": glob(\n            [\"jre/bin/**\"],\n            allow_empty = True,\n            exclude = [\"jre/bin/plugin2/**\"],\n        ),\n        \"//conditions:default\": glob(\n            [\"jre/bin/**\"],\n            allow_empty = True,\n        ),\n    }),\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jre-lib\",\n    srcs = glob(\n        [\"jre/lib/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jre\",\n    srcs = [\":jre-default\"],\n)\n\nfilegroup(\n    name = \"jre-default\",\n    srcs = [\n        \":jre-bin\",\n        \":jre-lib\",\n    ],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n#This folder holds security policies\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre-default\",\n    ],\n    version = 18,\n)\n\nconfig_setting(\n    name = \"windows\",\n    constraint_values = [\"@platforms//os:windows\"],\n    visibility = [\"//visibility:private\"],\n)\n",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk18_linux_aarch64",
+        "name": "remotejdk18_linux_aarch64",
+        "sha256": "a1d5f78172f32f819d08e9043b0f82fa7af738b37c55c6ca8d6092c61d204d53",
+        "strip_prefix": "zulu18.28.13-ca-jdk18.0.0-linux_aarch64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu18.28.13-ca-jdk18.0.0-linux_aarch64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu18.28.13-ca-jdk18.0.0-linux_aarch64.tar.gz"
+        ]
+    },
+    "remotejdk18_linux_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "generator_function": "dist_http_archive",
+        "generator_name": "remotejdk18_linux_for_testing",
+        "name": "remotejdk18_linux_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "959a94ca4097dcaabc7886784cec10dfdf2b0a3bff890ea8943cc09c5fff29cb",
+        "strip_prefix": "zulu18.28.13-ca-jdk18.0.0-linux_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu18.28.13-ca-jdk18.0.0-linux_x64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu18.28.13-ca-jdk18.0.0-linux_x64.tar.gz"
+        ]
+    },
+    "remotejdk18_macos": {
+        "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_import\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"BUILD.bazel\"])\n\nDEPRECATION_MESSAGE = (\"Don't depend on targets in the JDK workspace;\" +\n                       \" use @bazel_tools//tools/jdk:current_java_runtime instead\" +\n                       \" (see https://github.com/bazelbuild/bazel/issues/5594)\")\n\nfilegroup(\n    name = \"jni_header\",\n    srcs = [\"include/jni.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-darwin\",\n    srcs = [\"include/darwin/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-linux\",\n    srcs = [\"include/linux/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-freebsd\",\n    srcs = [\"include/freebsd/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-openbsd\",\n    srcs = [\"include/openbsd/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-windows\",\n    srcs = [\"include/win32/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"java\",\n    srcs = select({\n        \":windows\": [\"bin/java.exe\"],\n        \"//conditions:default\": [\"bin/java\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jar\",\n    srcs = select({\n        \":windows\": [\"bin/jar.exe\"],\n        \"//conditions:default\": [\"bin/jar\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"javac\",\n    srcs = select({\n        \":windows\": [\"bin/javac.exe\"],\n        \"//conditions:default\": [\"bin/javac\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"javadoc\",\n    srcs = select({\n        \":windows\": [\"bin/javadoc.exe\"],\n        \"//conditions:default\": [\"bin/javadoc\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"xjc\",\n    srcs = [\"bin/xjc\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"wsimport\",\n    srcs = [\"bin/wsimport\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nBOOTCLASS_JARS = [\n    \"rt.jar\",\n    \"resources.jar\",\n    \"jsse.jar\",\n    \"jce.jar\",\n    \"charsets.jar\",\n]\n\n# TODO(cushon): this isn't compatible with JDK 9\nfilegroup(\n    name = \"bootclasspath\",\n    srcs = [\"jre/lib/%s\" % jar for jar in BOOTCLASS_JARS],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jre-bin\",\n    srcs = select({\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        \":windows\": glob(\n            [\"jre/bin/**\"],\n            allow_empty = True,\n            exclude = [\"jre/bin/plugin2/**\"],\n        ),\n        \"//conditions:default\": glob(\n            [\"jre/bin/**\"],\n            allow_empty = True,\n        ),\n    }),\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jre-lib\",\n    srcs = glob(\n        [\"jre/lib/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jre\",\n    srcs = [\":jre-default\"],\n)\n\nfilegroup(\n    name = \"jre-default\",\n    srcs = [\n        \":jre-bin\",\n        \":jre-lib\",\n    ],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n#This folder holds security policies\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre-default\",\n    ],\n    version = 18,\n)\n\nconfig_setting(\n    name = \"windows\",\n    constraint_values = [\"@platforms//os:windows\"],\n    visibility = [\"//visibility:private\"],\n)\n",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk18_macos",
+        "name": "remotejdk18_macos",
+        "sha256": "780a9aa4bda95a6793bf41d13f837c59ef915e9bfd0e0c5fd4c70e4cdaa88541",
+        "strip_prefix": "zulu18.28.13-ca-jdk18.0.0-macosx_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu18.28.13-ca-jdk18.0.0-macosx_x64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu18.28.13-ca-jdk18.0.0-macosx_x64.tar.gz"
+        ]
+    },
+    "remotejdk18_macos_aarch64": {
+        "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_import\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"BUILD.bazel\"])\n\nDEPRECATION_MESSAGE = (\"Don't depend on targets in the JDK workspace;\" +\n                       \" use @bazel_tools//tools/jdk:current_java_runtime instead\" +\n                       \" (see https://github.com/bazelbuild/bazel/issues/5594)\")\n\nfilegroup(\n    name = \"jni_header\",\n    srcs = [\"include/jni.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-darwin\",\n    srcs = [\"include/darwin/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-linux\",\n    srcs = [\"include/linux/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-freebsd\",\n    srcs = [\"include/freebsd/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-openbsd\",\n    srcs = [\"include/openbsd/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-windows\",\n    srcs = [\"include/win32/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"java\",\n    srcs = select({\n        \":windows\": [\"bin/java.exe\"],\n        \"//conditions:default\": [\"bin/java\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jar\",\n    srcs = select({\n        \":windows\": [\"bin/jar.exe\"],\n        \"//conditions:default\": [\"bin/jar\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"javac\",\n    srcs = select({\n        \":windows\": [\"bin/javac.exe\"],\n        \"//conditions:default\": [\"bin/javac\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"javadoc\",\n    srcs = select({\n        \":windows\": [\"bin/javadoc.exe\"],\n        \"//conditions:default\": [\"bin/javadoc\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"xjc\",\n    srcs = [\"bin/xjc\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"wsimport\",\n    srcs = [\"bin/wsimport\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nBOOTCLASS_JARS = [\n    \"rt.jar\",\n    \"resources.jar\",\n    \"jsse.jar\",\n    \"jce.jar\",\n    \"charsets.jar\",\n]\n\n# TODO(cushon): this isn't compatible with JDK 9\nfilegroup(\n    name = \"bootclasspath\",\n    srcs = [\"jre/lib/%s\" % jar for jar in BOOTCLASS_JARS],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jre-bin\",\n    srcs = select({\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        \":windows\": glob(\n            [\"jre/bin/**\"],\n            allow_empty = True,\n            exclude = [\"jre/bin/plugin2/**\"],\n        ),\n        \"//conditions:default\": glob(\n            [\"jre/bin/**\"],\n            allow_empty = True,\n        ),\n    }),\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jre-lib\",\n    srcs = glob(\n        [\"jre/lib/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jre\",\n    srcs = [\":jre-default\"],\n)\n\nfilegroup(\n    name = \"jre-default\",\n    srcs = [\n        \":jre-bin\",\n        \":jre-lib\",\n    ],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n#This folder holds security policies\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre-default\",\n    ],\n    version = 18,\n)\n\nconfig_setting(\n    name = \"windows\",\n    constraint_values = [\"@platforms//os:windows\"],\n    visibility = [\"//visibility:private\"],\n)\n",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk18_macos_aarch64",
+        "name": "remotejdk18_macos_aarch64",
+        "sha256": "9595e001451e201fdf33c1952777968a3ac18fe37273bdeaea5b5ed2c4950432",
+        "strip_prefix": "zulu18.28.13-ca-jdk18.0.0-macosx_aarch64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu18.28.13-ca-jdk18.0.0-macosx_aarch64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu18.28.13-ca-jdk18.0.0-macosx_aarch64.tar.gz"
+        ]
+    },
+    "remotejdk18_macos_aarch64_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "generator_function": "dist_http_archive",
+        "generator_name": "remotejdk18_macos_aarch64_for_testing",
+        "name": "remotejdk18_macos_aarch64_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "9595e001451e201fdf33c1952777968a3ac18fe37273bdeaea5b5ed2c4950432",
+        "strip_prefix": "zulu18.28.13-ca-jdk18.0.0-macosx_aarch64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu18.28.13-ca-jdk18.0.0-macosx_aarch64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu18.28.13-ca-jdk18.0.0-macosx_aarch64.tar.gz"
+        ]
+    },
+    "remotejdk18_macos_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "generator_function": "dist_http_archive",
+        "generator_name": "remotejdk18_macos_for_testing",
+        "name": "remotejdk18_macos_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "780a9aa4bda95a6793bf41d13f837c59ef915e9bfd0e0c5fd4c70e4cdaa88541",
+        "strip_prefix": "zulu18.28.13-ca-jdk18.0.0-macosx_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu18.28.13-ca-jdk18.0.0-macosx_x64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu18.28.13-ca-jdk18.0.0-macosx_x64.tar.gz"
+        ]
+    },
+    "remotejdk18_win": {
+        "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_import\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"BUILD.bazel\"])\n\nDEPRECATION_MESSAGE = (\"Don't depend on targets in the JDK workspace;\" +\n                       \" use @bazel_tools//tools/jdk:current_java_runtime instead\" +\n                       \" (see https://github.com/bazelbuild/bazel/issues/5594)\")\n\nfilegroup(\n    name = \"jni_header\",\n    srcs = [\"include/jni.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-darwin\",\n    srcs = [\"include/darwin/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-linux\",\n    srcs = [\"include/linux/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-freebsd\",\n    srcs = [\"include/freebsd/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-openbsd\",\n    srcs = [\"include/openbsd/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-windows\",\n    srcs = [\"include/win32/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"java\",\n    srcs = select({\n        \":windows\": [\"bin/java.exe\"],\n        \"//conditions:default\": [\"bin/java\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jar\",\n    srcs = select({\n        \":windows\": [\"bin/jar.exe\"],\n        \"//conditions:default\": [\"bin/jar\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"javac\",\n    srcs = select({\n        \":windows\": [\"bin/javac.exe\"],\n        \"//conditions:default\": [\"bin/javac\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"javadoc\",\n    srcs = select({\n        \":windows\": [\"bin/javadoc.exe\"],\n        \"//conditions:default\": [\"bin/javadoc\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"xjc\",\n    srcs = [\"bin/xjc\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"wsimport\",\n    srcs = [\"bin/wsimport\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nBOOTCLASS_JARS = [\n    \"rt.jar\",\n    \"resources.jar\",\n    \"jsse.jar\",\n    \"jce.jar\",\n    \"charsets.jar\",\n]\n\n# TODO(cushon): this isn't compatible with JDK 9\nfilegroup(\n    name = \"bootclasspath\",\n    srcs = [\"jre/lib/%s\" % jar for jar in BOOTCLASS_JARS],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jre-bin\",\n    srcs = select({\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        \":windows\": glob(\n            [\"jre/bin/**\"],\n            allow_empty = True,\n            exclude = [\"jre/bin/plugin2/**\"],\n        ),\n        \"//conditions:default\": glob(\n            [\"jre/bin/**\"],\n            allow_empty = True,\n        ),\n    }),\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jre-lib\",\n    srcs = glob(\n        [\"jre/lib/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jre\",\n    srcs = [\":jre-default\"],\n)\n\nfilegroup(\n    name = \"jre-default\",\n    srcs = [\n        \":jre-bin\",\n        \":jre-lib\",\n    ],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n#This folder holds security policies\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre-default\",\n    ],\n    version = 18,\n)\n\nconfig_setting(\n    name = \"windows\",\n    constraint_values = [\"@platforms//os:windows\"],\n    visibility = [\"//visibility:private\"],\n)\n",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk18_win",
+        "name": "remotejdk18_win",
+        "sha256": "6c75498163b047595386fdb909cb6d4e04282c3a81799743c5e1f9316391fe16",
+        "strip_prefix": "zulu18.28.13-ca-jdk18.0.0-win_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu18.28.13-ca-jdk18.0.0-win_x64.zip",
+            "https://cdn.azul.com/zulu/bin/zulu18.28.13-ca-jdk18.0.0-win_x64.zip"
+        ]
+    },
+    "remotejdk18_win_arm64": {
+        "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_import\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"BUILD.bazel\"])\n\nDEPRECATION_MESSAGE = (\"Don't depend on targets in the JDK workspace;\" +\n                       \" use @bazel_tools//tools/jdk:current_java_runtime instead\" +\n                       \" (see https://github.com/bazelbuild/bazel/issues/5594)\")\n\nfilegroup(\n    name = \"jni_header\",\n    srcs = [\"include/jni.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-darwin\",\n    srcs = [\"include/darwin/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-linux\",\n    srcs = [\"include/linux/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-freebsd\",\n    srcs = [\"include/freebsd/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-openbsd\",\n    srcs = [\"include/openbsd/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jni_md_header-windows\",\n    srcs = [\"include/win32/jni_md.h\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"java\",\n    srcs = select({\n        \":windows\": [\"bin/java.exe\"],\n        \"//conditions:default\": [\"bin/java\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jar\",\n    srcs = select({\n        \":windows\": [\"bin/jar.exe\"],\n        \"//conditions:default\": [\"bin/jar\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"javac\",\n    srcs = select({\n        \":windows\": [\"bin/javac.exe\"],\n        \"//conditions:default\": [\"bin/javac\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"javadoc\",\n    srcs = select({\n        \":windows\": [\"bin/javadoc.exe\"],\n        \"//conditions:default\": [\"bin/javadoc\"],\n    }),\n    data = [\":jdk\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"xjc\",\n    srcs = [\"bin/xjc\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"wsimport\",\n    srcs = [\"bin/wsimport\"],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nBOOTCLASS_JARS = [\n    \"rt.jar\",\n    \"resources.jar\",\n    \"jsse.jar\",\n    \"jce.jar\",\n    \"charsets.jar\",\n]\n\n# TODO(cushon): this isn't compatible with JDK 9\nfilegroup(\n    name = \"bootclasspath\",\n    srcs = [\"jre/lib/%s\" % jar for jar in BOOTCLASS_JARS],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jre-bin\",\n    srcs = select({\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        \":windows\": glob(\n            [\"jre/bin/**\"],\n            allow_empty = True,\n            exclude = [\"jre/bin/plugin2/**\"],\n        ),\n        \"//conditions:default\": glob(\n            [\"jre/bin/**\"],\n            allow_empty = True,\n        ),\n    }),\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jre-lib\",\n    srcs = glob(\n        [\"jre/lib/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jre\",\n    srcs = [\":jre-default\"],\n)\n\nfilegroup(\n    name = \"jre-default\",\n    srcs = [\n        \":jre-bin\",\n        \":jre-lib\",\n    ],\n    deprecation = DEPRECATION_MESSAGE,\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n#This folder holds security policies\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre-default\",\n    ],\n    version = 18,\n)\n\nconfig_setting(\n    name = \"windows\",\n    constraint_values = [\"@platforms//os:windows\"],\n    visibility = [\"//visibility:private\"],\n)\n",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk18_win_arm64",
+        "name": "remotejdk18_win_arm64",
+        "sha256": "9b52b259516e4140ee56b91f77750667bffbc543e78ad8c39082449d4c377b54",
+        "strip_prefix": "zulu18.28.13-ca-jdk18.0.0-win_aarch64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu18.28.13-ca-jdk18.0.0-win_aarch64.zip",
+            "https://cdn.azul.com/zulu/bin/zulu18.28.13-ca-jdk18.0.0-win_aarch64.zip"
+        ]
+    },
+    "remotejdk18_win_arm64_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "generator_function": "dist_http_archive",
+        "generator_name": "remotejdk18_win_arm64_for_testing",
+        "name": "remotejdk18_win_arm64_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "9b52b259516e4140ee56b91f77750667bffbc543e78ad8c39082449d4c377b54",
+        "strip_prefix": "zulu18.28.13-ca-jdk18.0.0-win_aarch64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu18.28.13-ca-jdk18.0.0-win_aarch64.zip",
+            "https://cdn.azul.com/zulu/bin/zulu18.28.13-ca-jdk18.0.0-win_aarch64.zip"
+        ]
+    },
+    "remotejdk18_win_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "generator_function": "dist_http_archive",
+        "generator_name": "remotejdk18_win_for_testing",
+        "name": "remotejdk18_win_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "6c75498163b047595386fdb909cb6d4e04282c3a81799743c5e1f9316391fe16",
+        "strip_prefix": "zulu18.28.13-ca-jdk18.0.0-win_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu18.28.13-ca-jdk18.0.0-win_x64.zip",
+            "https://cdn.azul.com/zulu/bin/zulu18.28.13-ca-jdk18.0.0-win_x64.zip"
+        ]
+    },
+    "rules_cc": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "rules_cc",
+        "name": "rules_cc",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "58bff40957ace85c2de21ebfc72e53ed3a0d33af8cc20abd0ceec55c63be7de2",
+        "urls": [
+            "https://github.com/bazelbuild/rules_cc/releases/download/0.0.2/rules_cc-0.0.2.tar.gz"
+        ]
+    },
+    "rules_cc-0.0.2.tar.gz": {
+        "name": "rules_cc-0.0.2.tar.gz",
+        "sha256": "58bff40957ace85c2de21ebfc72e53ed3a0d33af8cc20abd0ceec55c63be7de2",
+        "urls": [
+            "https://github.com/bazelbuild/rules_cc/releases/download/0.0.2/rules_cc-0.0.2.tar.gz"
+        ]
+    },
+    "rules_java": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "rules_java",
+        "name": "rules_java",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "73b88f34dc251bce7bc6c472eb386a6c2b312ed5b473c81fe46855c248f792e0",
+        "strip_prefix": "",
+        "urls": [
+            "https://github.com/bazelbuild/rules_java/releases/download/5.5.1/rules_java-5.5.1.tar.gz"
+        ]
+    },
+    "rules_java-5.5.1.tar.gz": {
+        "name": "rules_java-5.5.1.tar.gz",
+        "sha256": "73b88f34dc251bce7bc6c472eb386a6c2b312ed5b473c81fe46855c248f792e0",
+        "urls": [
+            "https://github.com/bazelbuild/rules_java/releases/download/5.5.1/rules_java-5.5.1.tar.gz"
+        ]
+    },
+    "rules_jvm_external": {
+        "generator_function": "grpc_extra_deps",
+        "generator_name": "rules_jvm_external",
+        "name": "rules_jvm_external",
+        "sha256": "f36441aa876c4f6427bfb2d1f2d723b48e9d930b62662bf723ddfb8fc80f0140",
+        "strip_prefix": "rules_jvm_external-4.1",
+        "urls": [
+            "https://github.com/bazelbuild/rules_jvm_external/archive/4.1.zip"
+        ]
+    },
+    "rules_license": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "rules_license",
+        "name": "rules_license",
+        "sha256": "00ccc0df21312c127ac4b12880ab0f9a26c1cff99442dc6c5a331750360de3c3",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_license/releases/download/0.0.3/rules_license-0.0.3.tar.gz",
+            "https://github.com/bazelbuild/rules_license/releases/download/0.0.3/rules_license-0.0.3.tar.gz"
+        ]
+    },
+    "rules_license-0.0.3.tar.gz": {
+        "name": "rules_license-0.0.3.tar.gz",
+        "sha256": "00ccc0df21312c127ac4b12880ab0f9a26c1cff99442dc6c5a331750360de3c3",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_license/releases/download/0.0.3/rules_license-0.0.3.tar.gz",
+            "https://github.com/bazelbuild/rules_license/releases/download/0.0.3/rules_license-0.0.3.tar.gz"
+        ]
+    },
+    "rules_nodejs": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "rules_nodejs",
+        "name": "rules_nodejs",
+        "sha256": "4d48998e3fa1e03c684e6bdf7ac98051232c7486bfa412e5b5475bbaec7bb257",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_nodejs/releases/download/5.5.0/rules_nodejs-core-5.5.0.tar.gz",
+            "https://github.com/bazelbuild/rules_nodejs/releases/download/5.5.0/rules_nodejs-core-5.5.0.tar.gz"
+        ]
+    },
+    "rules_nodejs-5.5.0.tar.gz": {
+        "name": "rules_nodejs-5.5.0.tar.gz",
+        "sha256": "0fad45a9bda7dc1990c47b002fd64f55041ea751fafc00cd34efb96107675778",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_nodejs/releases/download/5.5.0/rules_nodejs-5.5.0.tar.gz",
+            "https://github.com/bazelbuild/rules_nodejs/releases/download/5.5.0/rules_nodejs-5.5.0.tar.gz"
+        ]
+    },
+    "rules_nodejs-core-5.5.0.tar.gz": {
+        "name": "rules_nodejs-core-5.5.0.tar.gz",
+        "sha256": "4d48998e3fa1e03c684e6bdf7ac98051232c7486bfa412e5b5475bbaec7bb257",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_nodejs/releases/download/5.5.0/rules_nodejs-core-5.5.0.tar.gz",
+            "https://github.com/bazelbuild/rules_nodejs/releases/download/5.5.0/rules_nodejs-core-5.5.0.tar.gz"
+        ]
+    },
+    "rules_pkg": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "rules_pkg",
+        "name": "rules_pkg",
+        "sha256": "8a298e832762eda1830597d64fe7db58178aa84cd5926d76d5b744d6558941c2",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_pkg/releases/download/0.7.0/rules_pkg-0.7.0.tar.gz",
+            "https://github.com/bazelbuild/rules_pkg/releases/download/0.7.0/rules_pkg-0.7.0.tar.gz"
+        ]
+    },
+    "rules_pkg-0.7.0.tar.gz": {
+        "name": "rules_pkg-0.7.0.tar.gz",
+        "sha256": "8a298e832762eda1830597d64fe7db58178aa84cd5926d76d5b744d6558941c2",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_pkg/releases/download/0.7.0/rules_pkg-0.7.0.tar.gz",
+            "https://github.com/bazelbuild/rules_pkg/releases/download/0.7.0/rules_pkg-0.7.0.tar.gz"
+        ]
+    },
+    "rules_proto": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "rules_proto",
+        "name": "rules_proto",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "8e7d59a5b12b233be5652e3d29f42fba01c7cbab09f6b3a8d0a57ed6d1e9a0da",
+        "strip_prefix": "rules_proto-7e4afce6fe62dbff0a4a03450143146f9f2d7488",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_proto/archive/7e4afce6fe62dbff0a4a03450143146f9f2d7488.tar.gz",
+            "https://github.com/bazelbuild/rules_proto/archive/7e4afce6fe62dbff0a4a03450143146f9f2d7488.tar.gz"
+        ]
+    },
+    "six": {
+        "build_file": "@com_github_grpc_grpc//third_party:six.BUILD",
+        "generator_function": "grpc_deps",
+        "generator_name": "six",
+        "name": "six",
+        "sha256": "1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926",
+        "urls": [
+            "https://files.pythonhosted.org/packages/71/39/171f1c67cd00715f190ba0b100d606d440a28c93c7714febeca8b79af85e/six-1.16.0.tar.gz"
+        ]
+    },
+    "upb": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "upb",
+        "name": "upb",
+        "sha256": "cf7f71eaff90b24c1a28b49645a9ff03a9a6c1e7134291ce70901cb63e7364b5",
+        "strip_prefix": "upb-a5477045acaa34586420942098f5fecd3570f577",
+        "urls": [
+            "https://mirror.bazel.build/github.com/protocolbuffers/upb/archive/a5477045acaa34586420942098f5fecd3570f577.tar.gz",
+            "https://github.com/protocolbuffers/upb/archive/a5477045acaa34586420942098f5fecd3570f577.tar.gz"
+        ]
+    },
+    "v1.47.0.tar.gz": {
+        "name": "v1.47.0.tar.gz",
+        "sha256": "271bdc890bf329a8de5b65819f0f9590a5381402429bca37625b63546ed19e54",
+        "urls": [
+            "https://mirror.bazel.build/github.com/grpc/grpc/archive/v1.47.0.tar.gz",
+            "https://github.com/grpc/grpc/archive/v1.47.0.tar.gz"
+        ]
+    },
+    "v1.5.2-3.zip": {
+        "name": "v1.5.2-3.zip",
+        "sha256": "366009a43cfada35015e4cc40a7efc4b7f017c6b8df5cac3f87d2478027b2056",
+        "urls": [
+            "https://mirror.bazel.build/github.com/luben/zstd-jni/archive/refs/tags/v1.5.2-3.zip",
+            "https://github.com/luben/zstd-jni/archive/refs/tags/v1.5.2-3.zip"
+        ]
+    },
+    "v3.19.6.tar.gz": {
+        "name": "v3.19.6.tar.gz",
+        "sha256": "9a301cf94a8ddcb380b901e7aac852780b826595075577bb967004050c835056",
+        "urls": [
+            "https://mirror.bazel.build/github.com/protocolbuffers/protobuf/archive/v3.19.6.tar.gz",
+            "https://github.com/protocolbuffers/protobuf/archive/v3.19.6.tar.gz"
+        ]
+    },
+    "zlib": {
+        "build_file": "@com_github_grpc_grpc//third_party:zlib.BUILD",
+        "generator_function": "grpc_deps",
+        "generator_name": "zlib",
+        "name": "zlib",
+        "sha256": "ef47b0fbe646d69a2fc5ba012cb278de8e8946a8e9649f83a807cc05559f0eff",
+        "strip_prefix": "zlib-21767c654d31d2dccdde4330529775c6c5fd5389",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/madler/zlib/archive/21767c654d31d2dccdde4330529775c6c5fd5389.tar.gz",
+            "https://github.com/madler/zlib/archive/21767c654d31d2dccdde4330529775c6c5fd5389.tar.gz"
+        ]
+    },
+    "zstd-jni": {
+        "build_file": "//third_party:zstd-jni/zstd-jni.BUILD",
+        "generator_function": "dist_http_archive",
+        "generator_name": "zstd-jni",
+        "name": "zstd-jni",
+        "patch_args": [
+            "-p1"
+        ],
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "patches": [
+            "//third_party:zstd-jni/Native.java.patch"
+        ],
+        "sha256": "366009a43cfada35015e4cc40a7efc4b7f017c6b8df5cac3f87d2478027b2056",
+        "strip_prefix": "zstd-jni-1.5.2-3",
+        "urls": [
+            "https://mirror.bazel.build/github.com/luben/zstd-jni/archive/refs/tags/v1.5.2-3.zip",
+            "https://github.com/luben/zstd-jni/archive/refs/tags/v1.5.2-3.zip"
+        ]
+    },
+    "zulu11.56.19-ca-jdk11.0.15-linux_aarch64.tar.gz": {
+        "name": "zulu11.56.19-ca-jdk11.0.15-linux_aarch64.tar.gz",
+        "sha256": "fc7c41a0005180d4ca471c90d01e049469e0614cf774566d4cf383caa29d1a97",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu-embedded/bin/zulu11.56.19-ca-jdk11.0.15-linux_aarch64.tar.gz",
+            "https://cdn.azul.com/zulu-embedded/bin/zulu11.56.19-ca-jdk11.0.15-linux_aarch64.tar.gz"
+        ]
+    },
+    "zulu11.56.19-ca-jdk11.0.15-linux_x64.tar.gz": {
+        "name": "zulu11.56.19-ca-jdk11.0.15-linux_x64.tar.gz",
+        "sha256": "e064b61d93304012351242bf0823c6a2e41d9e28add7ea7f05378b7243d34247",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu11.56.19-ca-jdk11.0.15-linux_x64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu11.56.19-ca-jdk11.0.15-linux_x64.tar.gz"
+        ]
+    },
+    "zulu11.56.19-ca-jdk11.0.15-macosx_aarch64.tar.gz": {
+        "name": "zulu11.56.19-ca-jdk11.0.15-macosx_aarch64.tar.gz",
+        "sha256": "6bb0d2c6e8a29dcd9c577bbb2986352ba12481a9549ac2c0bcfd00ed60e538d2",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu11.56.19-ca-jdk11.0.15-macosx_aarch64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu11.56.19-ca-jdk11.0.15-macosx_aarch64.tar.gz"
+        ]
+    },
+    "zulu11.56.19-ca-jdk11.0.15-macosx_x64.tar.gz": {
+        "name": "zulu11.56.19-ca-jdk11.0.15-macosx_x64.tar.gz",
+        "sha256": "2614e5c5de8e989d4d81759de4c333aa5b867b17ab9ee78754309ba65c7f6f55",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu11.56.19-ca-jdk11.0.15-macosx_x64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu11.56.19-ca-jdk11.0.15-macosx_x64.tar.gz"
+        ]
+    },
+    "zulu11.56.19-ca-jdk11.0.15-win_x64.zip": {
+        "name": "zulu11.56.19-ca-jdk11.0.15-win_x64.zip",
+        "sha256": "a106c77389a63b6bd963a087d5f01171bd32aa3ee7377ecef87531390dcb9050",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu11.56.19-ca-jdk11.0.15-win_x64.zip",
+            "https://cdn.azul.com/zulu/bin/zulu11.56.19-ca-jdk11.0.15-win_x64.zip"
+        ]
+    },
+    "zulu17.38.21-ca-jdk17.0.5-linux_aarch64.tar.gz": {
+        "name": "zulu17.38.21-ca-jdk17.0.5-linux_aarch64.tar.gz",
+        "sha256": "dbc6ae9163e7ff469a9ab1f342cd1bc1f4c1fb78afc3c4f2228ee3b32c4f3e43",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.38.21-ca-jdk17.0.5-linux_aarch64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu17.38.21-ca-jdk17.0.5-linux_aarch64.tar.gz"
+        ]
+    },
+    "zulu17.38.21-ca-jdk17.0.5-win_aarch64.zip": {
+        "name": "zulu17.38.21-ca-jdk17.0.5-win_aarch64.zip",
+        "sha256": "bc3476f2161bf99bc9a243ff535b8fc033b34ce9a2fa4b62fb8d79b6bfdc427f",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.38.21-ca-jdk17.0.5-win_aarch64.zip",
+            "https://cdn.azul.com/zulu/bin/zulu17.38.21-ca-jdk17.0.5-win_aarch64.zip"
+        ]
+    },
+    "zulu18.28.13-ca-jdk18.0.0-linux_aarch64.tar.gz": {
+        "name": "zulu18.28.13-ca-jdk18.0.0-linux_aarch64.tar.gz",
+        "sha256": "a1d5f78172f32f819d08e9043b0f82fa7af738b37c55c6ca8d6092c61d204d53",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu18.28.13-ca-jdk18.0.0-linux_aarch64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu18.28.13-ca-jdk18.0.0-linux_aarch64.tar.gz"
+        ]
+    },
+    "zulu18.28.13-ca-jdk18.0.0-win_aarch64.zip": {
+        "name": "zulu18.28.13-ca-jdk18.0.0-win_aarch64.zip",
+        "sha256": "9b52b259516e4140ee56b91f77750667bffbc543e78ad8c39082449d4c377b54",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu18.28.13-ca-jdk18.0.0-win_aarch64.zip",
+            "https://cdn.azul.com/zulu/bin/zulu18.28.13-ca-jdk18.0.0-win_aarch64.zip"
+        ]
+    }
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_6/strict_proto_deps.patch b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_6/strict_proto_deps.patch
new file mode 100644
index 000000000000..7362de839311
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_6/strict_proto_deps.patch
@@ -0,0 +1,21 @@
+diff --git a/src/main/starlark/builtins_bzl/common/java/proto/java_proto_library.bzl b/src/main/starlark/builtins_bzl/common/java/proto/java_proto_library.bzl
+index 63f68167e4..f106e64c9b 100644
+--- a/src/main/starlark/builtins_bzl/common/java/proto/java_proto_library.bzl
++++ b/src/main/starlark/builtins_bzl/common/java/proto/java_proto_library.bzl
+@@ -114,6 +114,7 @@ def java_compile_for_protos(ctx, output_jar_suffix, source_jar = None, deps = []
+             exports = exports,
+             output = output_jar,
+             output_source_jar = source_jar,
++            strict_deps = ctx.fragments.proto.strict_proto_deps(),
+             injecting_rule_kind = injecting_rule_kind,
+             javac_opts = java_toolchain.compatible_javacopts("proto"),
+             enable_jspecify = False,
+@@ -140,7 +141,7 @@ bazel_java_proto_aspect = aspect(
+     attr_aspects = ["deps", "exports"],
+     required_providers = [ProtoInfo],
+     provides = [JavaInfo, JavaProtoAspectInfo],
+-    fragments = ["java"],
++    fragments = ["java", "proto"],
+ )
+ 
+ def bazel_java_proto_library_rule(ctx):
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_6/upb-clang16.patch b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_6/upb-clang16.patch
new file mode 100644
index 000000000000..915585778384
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_6/upb-clang16.patch
@@ -0,0 +1,30 @@
+diff --git a/distdir_deps.bzl b/distdir_deps.bzl
+index c7fc4588e4..01e6966fca 100644
+--- a/distdir_deps.bzl
++++ b/distdir_deps.bzl
+@@ -192,6 +192,8@@ DIST_DEPS = {
+         "archive": "a5477045acaa34586420942098f5fecd3570f577.tar.gz",
+         "sha256": "cf7f71eaff90b24c1a28b49645a9ff03a9a6c1e7134291ce70901cb63e7364b5",
+         "strip_prefix": "upb-a5477045acaa34586420942098f5fecd3570f577",
++        "patches": ["//:upb-clang16.patch"],
++        "patch_args": ["-p1"],
+         "urls": [
+             "https://mirror.bazel.build/github.com/protocolbuffers/upb/archive/a5477045acaa34586420942098f5fecd3570f577.tar.gz",
+             "https://github.com/protocolbuffers/upb/archive/a5477045acaa34586420942098f5fecd3570f577.tar.gz",
+diff --git a/upb-clang16.patch b/upb-clang16.patch
+new file mode 100644
+index 0000000000..f81855181f
+--- /dev/null
++++ upb-clang16.patch
+@@ -0,0 +1,10 @@
++--- a/bazel/build_defs.bzl
+++++ b/bazel/build_defs.bzl
++@@ -43,6 +43,7 @@
++     "-Werror=pedantic",
++     "-Wall",
++     "-Wstrict-prototypes",
+++    "-Wno-gnu-offsetof-extensions",
++     # GCC (at least) emits spurious warnings for this that cannot be fixed
++     # without introducing redundant initialization (with runtime cost):
++     #   https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80635
+
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_6/update-srcDeps.py b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_6/update-srcDeps.py
new file mode 100755
index 000000000000..d409a32e1389
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_6/update-srcDeps.py
@@ -0,0 +1,54 @@
+#!/usr/bin/env python3
+import sys
+import json
+
+if len(sys.argv) != 2:
+    print("usage: ./this-script src-deps.json < WORKSPACE", file=sys.stderr)
+    print("Takes the bazel WORKSPACE file and reads all archives into a json dict (by evaling it as python code)", file=sys.stderr)
+    print("Hail Eris.", file=sys.stderr)
+    sys.exit(1)
+
+http_archives = []
+
+# just the kw args are the dict { name, sha256, urls … }
+def http_archive(**kw):
+    http_archives.append(kw)
+# like http_file
+def http_file(**kw):
+    http_archives.append(kw)
+
+# this is inverted from http_archive/http_file and bundles multiple archives
+def _distdir_tar(**kw):
+    for archive_name in kw['archives']:
+        http_archives.append({
+            "name": archive_name,
+            "sha256": kw['sha256'][archive_name],
+            "urls": kw['urls'][archive_name]
+        })
+
+# TODO?
+def git_repository(**kw):
+    print(json.dumps(kw, sort_keys=True, indent=4), file=sys.stderr)
+    sys.exit(1)
+
+# execute the WORKSPACE like it was python code in this module,
+# using all the function stubs from above.
+exec(sys.stdin.read())
+
+# transform to a dict with the names as keys
+d = { el['name']: el for el in http_archives }
+
+def has_urls(el):
+    return ('url' in el and el['url']) or ('urls' in el and el['urls'])
+def has_sha256(el):
+    return 'sha256' in el and el['sha256']
+bad_archives = list(filter(lambda el: not has_urls(el) or not has_sha256(el), d.values()))
+if bad_archives:
+    print('Following bazel dependencies are missing url or sha256', file=sys.stderr)
+    print('Check bazel sources for master or non-checksummed dependencies', file=sys.stderr)
+    for el in bad_archives:
+        print(json.dumps(el, sort_keys=True, indent=4), file=sys.stderr)
+    sys.exit(1)
+
+with open(sys.argv[1], "w") as f:
+    print(json.dumps(d, sort_keys=True, indent=4), file=f)
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_7/MODULE.bazel.lock b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_7/MODULE.bazel.lock
new file mode 100644
index 000000000000..3646c7e15bfa
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_7/MODULE.bazel.lock
@@ -0,0 +1,8657 @@
+{
+  "lockFileVersion": 3,
+  "moduleFileHash": "63625ac7809ba5bc83e0814e16f223ac28a98df884897ddd5bfbd69fd4e3ddbf",
+  "flags": {
+    "cmdRegistries": [
+      "https://bcr.bazel.build/"
+    ],
+    "cmdModuleOverrides": {},
+    "allowedYankedVersions": [],
+    "envVarAllowedYankedVersions": "",
+    "ignoreDevDependency": false,
+    "directDependenciesMode": "ERROR",
+    "compatibilityMode": "ERROR"
+  },
+  "localOverrideHashes": {
+    "bazel_tools": "0cc38516259ab87144b82461dd874e139f093d8e356667c3a3c5a52441ac448f",
+    "googleapis": "89bad67656f73e953cbf62f12165f56e97cf2cc17d56974c593de76200fa3471",
+    "remoteapis": "3862bfbe3d308e71852b8f025f4b33ea9c0dc8790829eda4a71425c5a2ca814e"
+  },
+  "moduleDepGraph": {
+    "<root>": {
+      "name": "bazel",
+      "version": "",
+      "key": "<root>",
+      "repoName": "io_bazel",
+      "executionPlatformsToRegister": [
+        "//:default_host_platform"
+      ],
+      "toolchainsToRegister": [
+        "@bazel_tools//tools/python:autodetecting_toolchain",
+        "@local_config_winsdk//:all",
+        "//src/main/res:empty_rc_toolchain",
+        "//:bazel_java_toolchain_definition"
+      ],
+      "extensionUsages": [
+        {
+          "extensionBzlFile": "@rules_jvm_external//:extensions.bzl",
+          "extensionName": "maven",
+          "usingModule": "<root>",
+          "location": {
+            "file": "@@//:MODULE.bazel",
+            "line": 65,
+            "column": 22
+          },
+          "imports": {
+            "maven": "maven",
+            "unpinned_maven": "unpinned_maven",
+            "maven_android": "maven_android",
+            "unpinned_maven_android": "unpinned_maven_android"
+          },
+          "devImports": [],
+          "tags": [
+            {
+              "tagName": "install",
+              "attributeValues": {
+                "artifacts": [
+                  "com.beust:jcommander:1.82",
+                  "com.github.ben-manes.caffeine:caffeine:3.0.5",
+                  "com.github.kevinstern:software-and-algorithms:1.0",
+                  "com.github.stephenc.jcip:jcip-annotations:1.0-1",
+                  "com.google.api-client:google-api-client-gson:1.35.2",
+                  "com.google.api-client:google-api-client:1.35.2",
+                  "com.google.auth:google-auth-library-credentials:1.6.0",
+                  "com.google.auth:google-auth-library-oauth2-http:1.6.0",
+                  "com.google.auto.service:auto-service-annotations:1.0.1",
+                  "com.google.auto.service:auto-service:1.0",
+                  "com.google.auto.value:auto-value-annotations:1.9",
+                  "com.google.auto.value:auto-value:1.8.2",
+                  "com.google.auto:auto-common:1.2.1",
+                  "com.google.code.findbugs:jsr305:3.0.2",
+                  "com.google.code.gson:gson:2.9.0",
+                  "com.google.code.java-allocation-instrumenter:java-allocation-instrumenter:3.3.0",
+                  "com.google.errorprone:error_prone_annotation:2.22.0",
+                  "com.google.errorprone:error_prone_annotations:2.22.0",
+                  "com.google.errorprone:error_prone_check_api:2.22.0",
+                  "com.google.errorprone:error_prone_core:2.22.0",
+                  "com.google.errorprone:error_prone_type_annotations:2.22.0",
+                  "com.google.flogger:flogger-system-backend:0.5.1",
+                  "com.google.flogger:flogger:0.5.1",
+                  "com.google.flogger:google-extensions:0.5.1",
+                  "com.google.guava:failureaccess:1.0.1",
+                  "com.google.guava:guava:31.1-jre",
+                  "com.google.http-client:google-http-client-gson:1.42.0",
+                  "com.google.http-client:google-http-client:1.42.0",
+                  "com.google.j2objc:j2objc-annotations:1.3",
+                  "com.google.turbine:turbine:0.2",
+                  "com.ryanharter.auto.value:auto-value-gson-extension:1.3.1",
+                  "com.ryanharter.auto.value:auto-value-gson-runtime:1.3.1",
+                  "com.ryanharter.auto.value:auto-value-gson-factory:1.3.1",
+                  "com.squareup:javapoet:1.12.0",
+                  "commons-collections:commons-collections:3.2.2",
+                  "commons-lang:commons-lang:2.6",
+                  "io.github.java-diff-utils:java-diff-utils:4.12",
+                  "io.grpc:grpc-api:1.48.1",
+                  "io.grpc:grpc-auth:1.48.1",
+                  "io.grpc:grpc-context:1.48.1",
+                  "io.grpc:grpc-core:1.48.1",
+                  "io.grpc:grpc-netty:1.48.1",
+                  "io.grpc:grpc-protobuf-lite:1.48.1",
+                  "io.grpc:grpc-protobuf:1.48.1",
+                  "io.grpc:grpc-stub:1.48.1",
+                  "io.netty:netty-buffer:4.1.93.Final",
+                  "io.netty:netty-codec-http2:4.1.93.Final",
+                  "io.netty:netty-codec-http:4.1.93.Final",
+                  "io.netty:netty-codec:4.1.93.Final",
+                  "io.netty:netty-common:4.1.93.Final",
+                  "io.netty:netty-handler-proxy:4.1.93.Final",
+                  "io.netty:netty-handler:4.1.93.Final",
+                  "io.netty:netty-resolver-dns:4.1.93.Final",
+                  "io.netty:netty-resolver:4.1.93.Final",
+                  "io.netty:netty-tcnative-boringssl-static:jar:linux-aarch_64:2.0.56.Final",
+                  "io.netty:netty-tcnative-boringssl-static:jar:linux-x86_64:2.0.56.Final",
+                  "io.netty:netty-tcnative-boringssl-static:jar:osx-aarch_64:2.0.56.Final",
+                  "io.netty:netty-tcnative-boringssl-static:jar:osx-x86_64:2.0.56.Final",
+                  "io.netty:netty-tcnative-boringssl-static:jar:windows-x86_64:2.0.56.Final",
+                  "io.netty:netty-tcnative-classes:2.0.56.Final",
+                  "io.netty:netty-transport-classes-epoll:4.1.93.Final",
+                  "io.netty:netty-transport-classes-kqueue:4.1.93.Final",
+                  "io.netty:netty-transport-native-epoll:jar:linux-aarch_64:4.1.93.Final",
+                  "io.netty:netty-transport-native-epoll:jar:linux-x86_64:4.1.93.Final",
+                  "io.netty:netty-transport-native-kqueue:jar:osx-aarch_64:4.1.93.Final",
+                  "io.netty:netty-transport-native-kqueue:jar:osx-x86_64:4.1.93.Final",
+                  "io.netty:netty-transport-native-unix-common:4.1.93.Final",
+                  "io.netty:netty-transport-native-unix-common:jar:linux-aarch_64:4.1.93.Final",
+                  "io.netty:netty-transport-native-unix-common:jar:linux-x86_64:4.1.93.Final",
+                  "io.netty:netty-transport-native-unix-common:jar:osx-aarch_64:4.1.93.Final",
+                  "io.netty:netty-transport-native-unix-common:jar:osx-x86_64:4.1.93.Final",
+                  "io.netty:netty-transport:4.1.93.Final",
+                  "io.reactivex.rxjava3:rxjava:3.1.2",
+                  "javax.activation:javax.activation-api:1.2.0",
+                  "javax.annotation:javax.annotation-api:1.3.2",
+                  "javax.inject:javax.inject:1",
+                  "net.bytebuddy:byte-buddy-agent:1.14.5",
+                  "net.bytebuddy:byte-buddy:1.14.5",
+                  "org.apache.commons:commons-compress:1.20",
+                  "org.apache.commons:commons-pool2:2.8.0",
+                  "org.apache.tomcat:tomcat-annotations-api:8.0.5",
+                  "org.apache.velocity:velocity:1.7",
+                  "org.checkerframework:checker-qual:3.19.0",
+                  "org.ow2.asm:asm-analysis:9.2",
+                  "org.ow2.asm:asm-commons:9.2",
+                  "org.ow2.asm:asm-tree:9.2",
+                  "org.ow2.asm:asm-util:9.2",
+                  "org.ow2.asm:asm:9.2",
+                  "org.pcollections:pcollections:3.1.4",
+                  "org.threeten:threeten-extra:1.5.0",
+                  "org.tukaani:xz:1.9",
+                  "org.yaml:snakeyaml:1.28",
+                  "tools.profiler:async-profiler:2.9",
+                  "junit:junit:4.13.2",
+                  "org.hamcrest:hamcrest-core:1.3"
+                ],
+                "excluded_artifacts": [
+                  "org.apache.httpcomponents:httpclient",
+                  "org.apache.httpcomponents:httpcore",
+                  "org.eclipse.jgit:org.eclipse.jgit",
+                  "com.google.protobuf:protobuf-java",
+                  "com.google.protobuf:protobuf-javalite"
+                ],
+                "fail_if_repin_required": true,
+                "lock_file": "//:maven_install.json",
+                "repositories": [
+                  "https://repo1.maven.org/maven2"
+                ],
+                "strict_visibility": true
+              },
+              "devDependency": false,
+              "location": {
+                "file": "@@//:MODULE.bazel",
+                "line": 66,
+                "column": 14
+              }
+            },
+            {
+              "tagName": "artifact",
+              "attributeValues": {
+                "testonly": true,
+                "artifact": "guava-testlib",
+                "group": "com.google.guava",
+                "version": "31.1-jre"
+              },
+              "devDependency": false,
+              "location": {
+                "file": "@@//:MODULE.bazel",
+                "line": 188,
+                "column": 19
+              }
+            },
+            {
+              "tagName": "artifact",
+              "attributeValues": {
+                "testonly": true,
+                "artifact": "jimfs",
+                "group": "com.google.jimfs",
+                "version": "1.2"
+              },
+              "devDependency": false,
+              "location": {
+                "file": "@@//:MODULE.bazel",
+                "line": 188,
+                "column": 19
+              }
+            },
+            {
+              "tagName": "artifact",
+              "attributeValues": {
+                "testonly": true,
+                "artifact": "compile-testing",
+                "group": "com.google.testing.compile",
+                "version": "0.18"
+              },
+              "devDependency": false,
+              "location": {
+                "file": "@@//:MODULE.bazel",
+                "line": 188,
+                "column": 19
+              }
+            },
+            {
+              "tagName": "artifact",
+              "attributeValues": {
+                "testonly": true,
+                "artifact": "test-parameter-injector",
+                "group": "com.google.testparameterinjector",
+                "version": "1.0"
+              },
+              "devDependency": false,
+              "location": {
+                "file": "@@//:MODULE.bazel",
+                "line": 188,
+                "column": 19
+              }
+            },
+            {
+              "tagName": "artifact",
+              "attributeValues": {
+                "testonly": true,
+                "artifact": "truth",
+                "group": "com.google.truth",
+                "version": "1.1.3"
+              },
+              "devDependency": false,
+              "location": {
+                "file": "@@//:MODULE.bazel",
+                "line": 188,
+                "column": 19
+              }
+            },
+            {
+              "tagName": "artifact",
+              "attributeValues": {
+                "testonly": true,
+                "artifact": "truth-java8-extension",
+                "group": "com.google.truth.extensions",
+                "version": "1.1.3"
+              },
+              "devDependency": false,
+              "location": {
+                "file": "@@//:MODULE.bazel",
+                "line": 188,
+                "column": 19
+              }
+            },
+            {
+              "tagName": "artifact",
+              "attributeValues": {
+                "testonly": true,
+                "artifact": "truth-liteproto-extension",
+                "group": "com.google.truth.extensions",
+                "version": "1.1.3"
+              },
+              "devDependency": false,
+              "location": {
+                "file": "@@//:MODULE.bazel",
+                "line": 188,
+                "column": 19
+              }
+            },
+            {
+              "tagName": "artifact",
+              "attributeValues": {
+                "testonly": true,
+                "artifact": "truth-proto-extension",
+                "group": "com.google.truth.extensions",
+                "version": "1.1.3"
+              },
+              "devDependency": false,
+              "location": {
+                "file": "@@//:MODULE.bazel",
+                "line": 188,
+                "column": 19
+              }
+            },
+            {
+              "tagName": "artifact",
+              "attributeValues": {
+                "testonly": true,
+                "artifact": "mockito-core",
+                "group": "org.mockito",
+                "version": "5.4.0"
+              },
+              "devDependency": false,
+              "location": {
+                "file": "@@//:MODULE.bazel",
+                "line": 188,
+                "column": 19
+              }
+            },
+            {
+              "tagName": "install",
+              "attributeValues": {
+                "name": "maven_android",
+                "artifacts": [
+                  "androidx.databinding:databinding-compiler:3.4.0-alpha10",
+                  "com.android.tools.build:builder:7.1.3",
+                  "com.android.tools.build:manifest-merger:30.1.3",
+                  "com.android.tools:sdk-common:30.1.3",
+                  "com.android.tools:annotations:30.1.3",
+                  "com.android.tools.layoutlib:layoutlib-api:30.1.3",
+                  "com.android.tools:common:30.1.3",
+                  "com.android.tools:repository:30.1.3"
+                ],
+                "fail_if_repin_required": true,
+                "lock_file": "//src/tools/android:maven_android_install.json",
+                "repositories": [
+                  "https://dl.google.com/android/maven2",
+                  "https://repo1.maven.org/maven2"
+                ]
+              },
+              "devDependency": false,
+              "location": {
+                "file": "@@//:MODULE.bazel",
+                "line": 321,
+                "column": 22
+              }
+            }
+          ],
+          "hasDevUseExtension": false,
+          "hasNonDevUseExtension": true
+        },
+        {
+          "extensionBzlFile": "@rules_java//java:extensions.bzl",
+          "extensionName": "toolchains",
+          "usingModule": "<root>",
+          "location": {
+            "file": "@@//:MODULE.bazel",
+            "line": 209,
+            "column": 32
+          },
+          "imports": {
+            "local_jdk": "local_jdk",
+            "remote_java_tools": "remote_java_tools",
+            "remote_java_tools_darwin_arm64": "remote_java_tools_darwin_arm64",
+            "remote_java_tools_darwin_x86_64": "remote_java_tools_darwin_x86_64",
+            "remote_java_tools_linux": "remote_java_tools_linux",
+            "remote_java_tools_windows": "remote_java_tools_windows",
+            "remotejdk11_linux": "remotejdk11_linux",
+            "remotejdk11_linux_aarch64": "remotejdk11_linux_aarch64",
+            "remotejdk11_linux_ppc64le": "remotejdk11_linux_ppc64le",
+            "remotejdk11_linux_s390x": "remotejdk11_linux_s390x",
+            "remotejdk11_macos": "remotejdk11_macos",
+            "remotejdk11_macos_aarch64": "remotejdk11_macos_aarch64",
+            "remotejdk11_win": "remotejdk11_win",
+            "remotejdk11_win_arm64": "remotejdk11_win_arm64",
+            "remotejdk17_linux": "remotejdk17_linux",
+            "remotejdk17_linux_s390x": "remotejdk17_linux_s390x",
+            "remotejdk17_macos": "remotejdk17_macos",
+            "remotejdk17_macos_aarch64": "remotejdk17_macos_aarch64",
+            "remotejdk17_win": "remotejdk17_win",
+            "remotejdk17_win_arm64": "remotejdk17_win_arm64",
+            "remotejdk21_linux": "remotejdk21_linux",
+            "remotejdk21_macos": "remotejdk21_macos",
+            "remotejdk21_macos_aarch64": "remotejdk21_macos_aarch64",
+            "remotejdk21_win": "remotejdk21_win"
+          },
+          "devImports": [],
+          "tags": [],
+          "hasDevUseExtension": false,
+          "hasNonDevUseExtension": true
+        },
+        {
+          "extensionBzlFile": "@rules_python//python/extensions:python.bzl",
+          "extensionName": "python",
+          "usingModule": "<root>",
+          "location": {
+            "file": "@@//:MODULE.bazel",
+            "line": 243,
+            "column": 23
+          },
+          "imports": {},
+          "devImports": [],
+          "tags": [
+            {
+              "tagName": "toolchain",
+              "attributeValues": {
+                "python_version": "3.8"
+              },
+              "devDependency": false,
+              "location": {
+                "file": "@@//:MODULE.bazel",
+                "line": 244,
+                "column": 17
+              }
+            }
+          ],
+          "hasDevUseExtension": false,
+          "hasNonDevUseExtension": true
+        },
+        {
+          "extensionBzlFile": "@rules_python//python/extensions:pip.bzl",
+          "extensionName": "pip",
+          "usingModule": "<root>",
+          "location": {
+            "file": "@@//:MODULE.bazel",
+            "line": 246,
+            "column": 20
+          },
+          "imports": {
+            "bazel_pip_dev_deps": "bazel_pip_dev_deps"
+          },
+          "devImports": [],
+          "tags": [
+            {
+              "tagName": "parse",
+              "attributeValues": {
+                "hub_name": "bazel_pip_dev_deps",
+                "python_version": "3.8",
+                "requirements_lock": "//:requirements.txt"
+              },
+              "devDependency": false,
+              "location": {
+                "file": "@@//:MODULE.bazel",
+                "line": 247,
+                "column": 10
+              }
+            }
+          ],
+          "hasDevUseExtension": false,
+          "hasNonDevUseExtension": true
+        },
+        {
+          "extensionBzlFile": "@io_bazel//:extensions.bzl",
+          "extensionName": "bazel_build_deps",
+          "usingModule": "<root>",
+          "location": {
+            "file": "@@//:MODULE.bazel",
+            "line": 258,
+            "column": 33
+          },
+          "imports": {
+            "bazel_tools_repo_cache": "bazel_tools_repo_cache",
+            "bootstrap_repo_cache": "bootstrap_repo_cache",
+            "debian_bin_deps": "debian_bin_deps",
+            "debian_cc_deps": "debian_cc_deps",
+            "debian_java_deps": "debian_java_deps",
+            "debian_proto_deps": "debian_proto_deps",
+            "openjdk_linux_aarch64_vanilla": "openjdk_linux_aarch64_vanilla",
+            "openjdk_linux_ppc64le_vanilla": "openjdk_linux_ppc64le_vanilla",
+            "openjdk_linux_s390x_vanilla": "openjdk_linux_s390x_vanilla",
+            "openjdk_linux_vanilla": "openjdk_linux_vanilla",
+            "openjdk_macos_aarch64_vanilla": "openjdk_macos_aarch64_vanilla",
+            "openjdk_macos_x86_64_vanilla": "openjdk_macos_x86_64_vanilla",
+            "openjdk_win_arm64_vanilla": "openjdk_win_arm64_vanilla",
+            "openjdk_win_vanilla": "openjdk_win_vanilla",
+            "workspace_repo_cache": "workspace_repo_cache"
+          },
+          "devImports": [],
+          "tags": [],
+          "hasDevUseExtension": false,
+          "hasNonDevUseExtension": true
+        },
+        {
+          "extensionBzlFile": "@bazel_tools//tools/cpp:cc_configure.bzl",
+          "extensionName": "cc_configure_extension",
+          "usingModule": "<root>",
+          "location": {
+            "file": "@@//:MODULE.bazel",
+            "line": 279,
+            "column": 29
+          },
+          "imports": {
+            "local_config_cc": "local_config_cc"
+          },
+          "devImports": [],
+          "tags": [],
+          "hasDevUseExtension": false,
+          "hasNonDevUseExtension": true
+        },
+        {
+          "extensionBzlFile": "@io_bazel//:extensions.bzl",
+          "extensionName": "bazel_test_deps",
+          "usingModule": "<root>",
+          "location": {
+            "file": "@@//:MODULE.bazel",
+            "line": 286,
+            "column": 32
+          },
+          "imports": {
+            "bazelci_rules": "bazelci_rules",
+            "local_bazel_source_list": "local_bazel_source_list",
+            "local_config_winsdk": "local_config_winsdk"
+          },
+          "devImports": [],
+          "tags": [],
+          "hasDevUseExtension": false,
+          "hasNonDevUseExtension": true
+        },
+        {
+          "extensionBzlFile": "@io_bazel//:rbe_extension.bzl",
+          "extensionName": "bazel_rbe_deps",
+          "usingModule": "<root>",
+          "location": {
+            "file": "@@//:MODULE.bazel",
+            "line": 294,
+            "column": 31
+          },
+          "imports": {
+            "rbe_ubuntu2004_java11": "rbe_ubuntu2004_java11"
+          },
+          "devImports": [],
+          "tags": [],
+          "hasDevUseExtension": false,
+          "hasNonDevUseExtension": true
+        },
+        {
+          "extensionBzlFile": "@io_bazel//tools/test:extensions.bzl",
+          "extensionName": "remote_coverage_tools_extension",
+          "usingModule": "<root>",
+          "location": {
+            "file": "@@//:MODULE.bazel",
+            "line": 297,
+            "column": 48
+          },
+          "imports": {
+            "remote_coverage_tools": "remote_coverage_tools"
+          },
+          "devImports": [],
+          "tags": [],
+          "hasDevUseExtension": false,
+          "hasNonDevUseExtension": true
+        },
+        {
+          "extensionBzlFile": "@io_bazel//:extensions.bzl",
+          "extensionName": "bazel_android_deps",
+          "usingModule": "<root>",
+          "location": {
+            "file": "@@//:MODULE.bazel",
+            "line": 343,
+            "column": 35
+          },
+          "imports": {
+            "desugar_jdk_libs": "desugar_jdk_libs"
+          },
+          "devImports": [],
+          "tags": [],
+          "hasDevUseExtension": false,
+          "hasNonDevUseExtension": true
+        },
+        {
+          "extensionBzlFile": "@io_bazel//tools/android:android_extensions.bzl",
+          "extensionName": "remote_android_tools_extensions",
+          "usingModule": "<root>",
+          "location": {
+            "file": "@@//:MODULE.bazel",
+            "line": 346,
+            "column": 42
+          },
+          "imports": {
+            "android_gmaven_r8": "android_gmaven_r8",
+            "android_tools": "android_tools"
+          },
+          "devImports": [],
+          "tags": [],
+          "hasDevUseExtension": false,
+          "hasNonDevUseExtension": true
+        }
+      ],
+      "deps": {
+        "rules_license": "rules_license@0.0.7",
+        "bazel_skylib": "bazel_skylib@1.4.1",
+        "com_google_protobuf": "protobuf@21.7",
+        "com_github_grpc_grpc": "grpc@1.48.1.bcr.1",
+        "platforms": "platforms@0.0.8",
+        "rules_pkg": "rules_pkg@0.9.1",
+        "io_bazel_skydoc": "stardoc@0.5.3",
+        "zstd-jni": "zstd-jni@1.5.2-3.bcr.1",
+        "blake3": "blake3@1.3.3.bcr.1",
+        "zlib": "zlib@1.3",
+        "rules_cc": "rules_cc@0.0.9",
+        "rules_java": "rules_java@7.1.0",
+        "rules_proto": "rules_proto@5.3.0-21.7",
+        "rules_jvm_external": "rules_jvm_external@5.2",
+        "rules_python": "rules_python@0.26.0",
+        "rules_testing": "rules_testing@0.0.4",
+        "com_google_googletest": "googletest@1.14.0",
+        "remoteapis": "remoteapis@_",
+        "googleapis": "googleapis@_",
+        "apple_support": "apple_support@1.5.0",
+        "abseil-cpp": "abseil-cpp@20230125.1",
+        "c-ares": "c-ares@1.15.0",
+        "rules_go": "rules_go@0.39.1",
+        "upb": "upb@0.0.0-20220923-a547704",
+        "bazel_tools": "bazel_tools@_",
+        "local_config_platform": "local_config_platform@_"
+      }
+    },
+    "rules_license@0.0.7": {
+      "name": "rules_license",
+      "version": "0.0.7",
+      "key": "rules_license@0.0.7",
+      "repoName": "rules_license",
+      "executionPlatformsToRegister": [],
+      "toolchainsToRegister": [],
+      "extensionUsages": [],
+      "deps": {
+        "bazel_tools": "bazel_tools@_",
+        "local_config_platform": "local_config_platform@_"
+      },
+      "repoSpec": {
+        "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl",
+        "ruleClassName": "http_archive",
+        "attributes": {
+          "name": "rules_license~0.0.7",
+          "urls": [
+            "https://github.com/bazelbuild/rules_license/releases/download/0.0.7/rules_license-0.0.7.tar.gz"
+          ],
+          "integrity": "sha256-RTHezLkTY5ww5cdRKgVNXYdWmNrrddjPkPKEN1/nw2A=",
+          "strip_prefix": "",
+          "remote_patches": {},
+          "remote_patch_strip": 0
+        }
+      }
+    },
+    "bazel_skylib@1.4.1": {
+      "name": "bazel_skylib",
+      "version": "1.4.1",
+      "key": "bazel_skylib@1.4.1",
+      "repoName": "bazel_skylib",
+      "executionPlatformsToRegister": [],
+      "toolchainsToRegister": [
+        "//toolchains/unittest:cmd_toolchain",
+        "//toolchains/unittest:bash_toolchain"
+      ],
+      "extensionUsages": [],
+      "deps": {
+        "platforms": "platforms@0.0.8",
+        "bazel_tools": "bazel_tools@_",
+        "local_config_platform": "local_config_platform@_"
+      },
+      "repoSpec": {
+        "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl",
+        "ruleClassName": "http_archive",
+        "attributes": {
+          "name": "bazel_skylib~1.4.1",
+          "urls": [
+            "https://github.com/bazelbuild/bazel-skylib/releases/download/1.4.1/bazel-skylib-1.4.1.tar.gz"
+          ],
+          "integrity": "sha256-uKFSeQF3QYCvx5iusoxGNL3M8ZxNmOe90c550f6aqtc=",
+          "strip_prefix": "",
+          "remote_patches": {},
+          "remote_patch_strip": 0
+        }
+      }
+    },
+    "protobuf@21.7": {
+      "name": "protobuf",
+      "version": "21.7",
+      "key": "protobuf@21.7",
+      "repoName": "protobuf",
+      "executionPlatformsToRegister": [],
+      "toolchainsToRegister": [],
+      "extensionUsages": [
+        {
+          "extensionBzlFile": "@rules_jvm_external//:extensions.bzl",
+          "extensionName": "maven",
+          "usingModule": "protobuf@21.7",
+          "location": {
+            "file": "https://bcr.bazel.build/modules/protobuf/21.7/MODULE.bazel",
+            "line": 22,
+            "column": 22
+          },
+          "imports": {
+            "maven": "maven"
+          },
+          "devImports": [],
+          "tags": [
+            {
+              "tagName": "install",
+              "attributeValues": {
+                "name": "maven",
+                "artifacts": [
+                  "com.google.code.findbugs:jsr305:3.0.2",
+                  "com.google.code.gson:gson:2.8.9",
+                  "com.google.errorprone:error_prone_annotations:2.3.2",
+                  "com.google.j2objc:j2objc-annotations:1.3",
+                  "com.google.guava:guava:31.1-jre",
+                  "com.google.guava:guava-testlib:31.1-jre",
+                  "com.google.truth:truth:1.1.2",
+                  "junit:junit:4.13.2",
+                  "org.mockito:mockito-core:4.3.1"
+                ]
+              },
+              "devDependency": false,
+              "location": {
+                "file": "https://bcr.bazel.build/modules/protobuf/21.7/MODULE.bazel",
+                "line": 24,
+                "column": 14
+              }
+            }
+          ],
+          "hasDevUseExtension": false,
+          "hasNonDevUseExtension": true
+        }
+      ],
+      "deps": {
+        "bazel_skylib": "bazel_skylib@1.4.1",
+        "rules_python": "rules_python@0.26.0",
+        "rules_cc": "rules_cc@0.0.9",
+        "rules_proto": "rules_proto@5.3.0-21.7",
+        "rules_java": "rules_java@7.1.0",
+        "rules_pkg": "rules_pkg@0.9.1",
+        "com_google_abseil": "abseil-cpp@20230125.1",
+        "zlib": "zlib@1.3",
+        "upb": "upb@0.0.0-20220923-a547704",
+        "rules_jvm_external": "rules_jvm_external@5.2",
+        "com_google_googletest": "googletest@1.14.0",
+        "bazel_tools": "bazel_tools@_",
+        "local_config_platform": "local_config_platform@_"
+      },
+      "repoSpec": {
+        "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl",
+        "ruleClassName": "http_archive",
+        "attributes": {
+          "name": "protobuf~21.7",
+          "urls": [
+            "https://github.com/protocolbuffers/protobuf/releases/download/v21.7/protobuf-all-21.7.zip"
+          ],
+          "integrity": "sha256-VJOiH17T/FAuZv7GuUScBqVRztYwAvpIkDxA36jeeko=",
+          "strip_prefix": "protobuf-21.7",
+          "remote_patches": {
+            "https://bcr.bazel.build/modules/protobuf/21.7/patches/add_module_dot_bazel.patch": "sha256-q3V2+eq0v2XF0z8z+V+QF4cynD6JvHI1y3kI/+rzl5s=",
+            "https://bcr.bazel.build/modules/protobuf/21.7/patches/add_module_dot_bazel_for_examples.patch": "sha256-O7YP6s3lo/1opUiO0jqXYORNHdZ/2q3hjz1QGy8QdIU=",
+            "https://bcr.bazel.build/modules/protobuf/21.7/patches/relative_repo_names.patch": "sha256-RK9RjW8T5UJNG7flIrnFiNE9vKwWB+8uWWtJqXYT0w4=",
+            "https://bcr.bazel.build/modules/protobuf/21.7/patches/add_missing_files.patch": "sha256-Hyne4DG2u5bXcWHNxNMirA2QFAe/2Cl8oMm1XJdkQIY="
+          },
+          "remote_patch_strip": 1
+        }
+      }
+    },
+    "grpc@1.48.1.bcr.1": {
+      "name": "grpc",
+      "version": "1.48.1.bcr.1",
+      "key": "grpc@1.48.1.bcr.1",
+      "repoName": "com_github_grpc_grpc",
+      "executionPlatformsToRegister": [],
+      "toolchainsToRegister": [],
+      "extensionUsages": [
+        {
+          "extensionBzlFile": "@com_github_grpc_grpc//bazel:grpc_deps.bzl",
+          "extensionName": "grpc_repo_deps_ext",
+          "usingModule": "grpc@1.48.1.bcr.1",
+          "location": {
+            "file": "https://bcr.bazel.build/modules/grpc/1.48.1.bcr.1/MODULE.bazel",
+            "line": 20,
+            "column": 35
+          },
+          "imports": {
+            "com_envoyproxy_protoc_gen_validate": "com_envoyproxy_protoc_gen_validate",
+            "com_google_googleapis": "com_google_googleapis",
+            "com_github_cncf_udpa": "com_github_cncf_udpa",
+            "envoy_api": "envoy_api"
+          },
+          "devImports": [],
+          "tags": [],
+          "hasDevUseExtension": false,
+          "hasNonDevUseExtension": true
+        },
+        {
+          "extensionBzlFile": "@com_github_grpc_grpc//bazel:grpc_extra_deps.bzl",
+          "extensionName": "grpc_extra_deps_ext",
+          "usingModule": "grpc@1.48.1.bcr.1",
+          "location": {
+            "file": "https://bcr.bazel.build/modules/grpc/1.48.1.bcr.1/MODULE.bazel",
+            "line": 30,
+            "column": 36
+          },
+          "imports": {
+            "com_google_googleapis_imports": "com_google_googleapis_imports"
+          },
+          "devImports": [],
+          "tags": [],
+          "hasDevUseExtension": false,
+          "hasNonDevUseExtension": true
+        }
+      ],
+      "deps": {
+        "bazel_skylib": "bazel_skylib@1.4.1",
+        "boringssl": "boringssl@0.0.0-20211025-d4f1ab9",
+        "com_github_cares_cares": "c-ares@1.15.0",
+        "com_google_absl": "abseil-cpp@20230125.1",
+        "com_google_protobuf": "protobuf@21.7",
+        "com_googlesource_code_re2": "re2@2021-09-01",
+        "rules_proto": "rules_proto@5.3.0-21.7",
+        "upb": "upb@0.0.0-20220923-a547704",
+        "zlib": "zlib@1.3",
+        "rules_java": "rules_java@7.1.0",
+        "io_bazel_rules_go": "rules_go@0.39.1",
+        "bazel_tools": "bazel_tools@_",
+        "local_config_platform": "local_config_platform@_"
+      },
+      "repoSpec": {
+        "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl",
+        "ruleClassName": "http_archive",
+        "attributes": {
+          "name": "grpc~1.48.1.bcr.1",
+          "urls": [
+            "https://github.com/grpc/grpc/archive/refs/tags/v1.48.1.tar.gz"
+          ],
+          "integrity": "sha256-MgNmZl0ZAnzah7I2jAOTkAajfgOIv9EJHI0qlvvJO9g=",
+          "strip_prefix": "grpc-1.48.1",
+          "remote_patches": {
+            "https://bcr.bazel.build/modules/grpc/1.48.1.bcr.1/patches/adopt_bzlmod.patch": "sha256-iMrebRKNKLNqVtRX+4eRZ63QcBr2t8Zo/ZvBPjVnyw8="
+          },
+          "remote_patch_strip": 1
+        }
+      }
+    },
+    "platforms@0.0.8": {
+      "name": "platforms",
+      "version": "0.0.8",
+      "key": "platforms@0.0.8",
+      "repoName": "platforms",
+      "executionPlatformsToRegister": [],
+      "toolchainsToRegister": [],
+      "extensionUsages": [],
+      "deps": {
+        "rules_license": "rules_license@0.0.7",
+        "bazel_tools": "bazel_tools@_",
+        "local_config_platform": "local_config_platform@_"
+      },
+      "repoSpec": {
+        "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl",
+        "ruleClassName": "http_archive",
+        "attributes": {
+          "name": "platforms",
+          "urls": [
+            "https://github.com/bazelbuild/platforms/releases/download/0.0.8/platforms-0.0.8.tar.gz"
+          ],
+          "integrity": "sha256-gVBAZgU4ns7LbaB8vLUJ1WN6OrmiS8abEQFTE2fYnXQ=",
+          "strip_prefix": "",
+          "remote_patches": {},
+          "remote_patch_strip": 0
+        }
+      }
+    },
+    "rules_pkg@0.9.1": {
+      "name": "rules_pkg",
+      "version": "0.9.1",
+      "key": "rules_pkg@0.9.1",
+      "repoName": "rules_pkg",
+      "executionPlatformsToRegister": [],
+      "toolchainsToRegister": [],
+      "extensionUsages": [],
+      "deps": {
+        "rules_license": "rules_license@0.0.7",
+        "bazel_skylib": "bazel_skylib@1.4.1",
+        "rules_python": "rules_python@0.26.0",
+        "bazel_tools": "bazel_tools@_",
+        "local_config_platform": "local_config_platform@_"
+      },
+      "repoSpec": {
+        "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl",
+        "ruleClassName": "http_archive",
+        "attributes": {
+          "name": "rules_pkg~0.9.1",
+          "urls": [
+            "https://github.com/bazelbuild/rules_pkg/releases/download/0.9.1/rules_pkg-0.9.1.tar.gz"
+          ],
+          "integrity": "sha256-j57i3BDBrlFO5ZmotC7Zn6Jit1cFj2WtPDhCif9wxLg=",
+          "strip_prefix": "",
+          "remote_patches": {},
+          "remote_patch_strip": 0
+        }
+      }
+    },
+    "stardoc@0.5.3": {
+      "name": "stardoc",
+      "version": "0.5.3",
+      "key": "stardoc@0.5.3",
+      "repoName": "stardoc",
+      "executionPlatformsToRegister": [],
+      "toolchainsToRegister": [],
+      "extensionUsages": [],
+      "deps": {
+        "bazel_skylib": "bazel_skylib@1.4.1",
+        "rules_java": "rules_java@7.1.0",
+        "bazel_tools": "bazel_tools@_",
+        "local_config_platform": "local_config_platform@_"
+      },
+      "repoSpec": {
+        "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl",
+        "ruleClassName": "http_archive",
+        "attributes": {
+          "name": "stardoc~0.5.3",
+          "urls": [
+            "https://github.com/bazelbuild/stardoc/releases/download/0.5.3/stardoc-0.5.3.tar.gz"
+          ],
+          "integrity": "sha256-P9j+xN3sPGcL2BCQTi4zFwvt/hL5Ct+UNQgYS+RYyLs=",
+          "strip_prefix": "",
+          "remote_patches": {
+            "https://bcr.bazel.build/modules/stardoc/0.5.3/patches/module_dot_bazel.patch": "sha256-Lgpy9OCr0zBWYuHoyM1rJJrgxn23X/bwgICEF7XiEug="
+          },
+          "remote_patch_strip": 0
+        }
+      }
+    },
+    "zstd-jni@1.5.2-3.bcr.1": {
+      "name": "zstd-jni",
+      "version": "1.5.2-3.bcr.1",
+      "key": "zstd-jni@1.5.2-3.bcr.1",
+      "repoName": "zstd-jni",
+      "executionPlatformsToRegister": [],
+      "toolchainsToRegister": [],
+      "extensionUsages": [],
+      "deps": {
+        "bazel_tools": "bazel_tools@_",
+        "local_config_platform": "local_config_platform@_"
+      },
+      "repoSpec": {
+        "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl",
+        "ruleClassName": "http_archive",
+        "attributes": {
+          "name": "zstd-jni~1.5.2-3.bcr.1",
+          "urls": [
+            "https://github.com/luben/zstd-jni/archive/refs/tags/v1.5.2-3.zip"
+          ],
+          "integrity": "sha256-NmAJpDz62jUBXkzECn78S38BfGuN9crD+H0keAJ7IFY=",
+          "strip_prefix": "zstd-jni-1.5.2-3",
+          "remote_patches": {
+            "https://bcr.bazel.build/modules/zstd-jni/1.5.2-3.bcr.1/patches/Native.java.patch": "sha256-HDzZr1BxNacyg+xWvojosR8VgfZdOQ2TDAPW2bCATDs=",
+            "https://bcr.bazel.build/modules/zstd-jni/1.5.2-3.bcr.1/patches/add_build_file.patch": "sha256-k67/p9wSUWEfSeeLVPabVleF+lH9YLxlog1auvezsts=",
+            "https://bcr.bazel.build/modules/zstd-jni/1.5.2-3.bcr.1/patches/module_dot_bazel.patch": "sha256-0KGh/q92+gB4AWBFco0+/UkrkRGsZf0QynxMdWvAgPo="
+          },
+          "remote_patch_strip": 1
+        }
+      }
+    },
+    "blake3@1.3.3.bcr.1": {
+      "name": "blake3",
+      "version": "1.3.3.bcr.1",
+      "key": "blake3@1.3.3.bcr.1",
+      "repoName": "blake3",
+      "executionPlatformsToRegister": [],
+      "toolchainsToRegister": [],
+      "extensionUsages": [],
+      "deps": {
+        "rules_cc": "rules_cc@0.0.9",
+        "bazel_tools": "bazel_tools@_",
+        "local_config_platform": "local_config_platform@_"
+      },
+      "repoSpec": {
+        "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl",
+        "ruleClassName": "http_archive",
+        "attributes": {
+          "name": "blake3~1.3.3.bcr.1",
+          "urls": [
+            "https://github.com/BLAKE3-team/BLAKE3/archive/refs/tags/1.3.3.tar.gz"
+          ],
+          "integrity": "sha256-J9K8TuWUW6dUNIWVIQQslJRj7nUU/xeq7zKOI++D/sA=",
+          "strip_prefix": "BLAKE3-1.3.3",
+          "remote_patches": {
+            "https://bcr.bazel.build/modules/blake3/1.3.3.bcr.1/patches/add_build_file.patch": "sha256-lKVoznUHSqWywOo27+g4J0csjL8lH3FEXjAFRJN5+Kw=",
+            "https://bcr.bazel.build/modules/blake3/1.3.3.bcr.1/patches/module_dot_bazel.patch": "sha256-4M/MRHdDFjS8iyVaKqy6QIc5Qea9pblUz7oj6I5aHfg="
+          },
+          "remote_patch_strip": 0
+        }
+      }
+    },
+    "zlib@1.3": {
+      "name": "zlib",
+      "version": "1.3",
+      "key": "zlib@1.3",
+      "repoName": "zlib",
+      "executionPlatformsToRegister": [],
+      "toolchainsToRegister": [],
+      "extensionUsages": [],
+      "deps": {
+        "platforms": "platforms@0.0.8",
+        "rules_cc": "rules_cc@0.0.9",
+        "bazel_tools": "bazel_tools@_",
+        "local_config_platform": "local_config_platform@_"
+      },
+      "repoSpec": {
+        "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl",
+        "ruleClassName": "http_archive",
+        "attributes": {
+          "name": "zlib~1.3",
+          "urls": [
+            "https://github.com/madler/zlib/releases/download/v1.3/zlib-1.3.tar.gz"
+          ],
+          "integrity": "sha256-/wukwpIBPbwnUws6geH5qBPNOd4Byl4Pi/NVcC76WT4=",
+          "strip_prefix": "zlib-1.3",
+          "remote_patches": {
+            "https://bcr.bazel.build/modules/zlib/1.3/patches/add_build_file.patch": "sha256-Ei+FYaaOo7A3jTKunMEodTI0Uw5NXQyZEcboMC8JskY=",
+            "https://bcr.bazel.build/modules/zlib/1.3/patches/module_dot_bazel.patch": "sha256-fPWLM+2xaF/kuy+kZc1YTfW6hNjrkG400Ho7gckuyJk="
+          },
+          "remote_patch_strip": 0
+        }
+      }
+    },
+    "rules_cc@0.0.9": {
+      "name": "rules_cc",
+      "version": "0.0.9",
+      "key": "rules_cc@0.0.9",
+      "repoName": "rules_cc",
+      "executionPlatformsToRegister": [],
+      "toolchainsToRegister": [
+        "@local_config_cc_toolchains//:all"
+      ],
+      "extensionUsages": [
+        {
+          "extensionBzlFile": "@bazel_tools//tools/cpp:cc_configure.bzl",
+          "extensionName": "cc_configure_extension",
+          "usingModule": "rules_cc@0.0.9",
+          "location": {
+            "file": "https://bcr.bazel.build/modules/rules_cc/0.0.9/MODULE.bazel",
+            "line": 9,
+            "column": 29
+          },
+          "imports": {
+            "local_config_cc_toolchains": "local_config_cc_toolchains"
+          },
+          "devImports": [],
+          "tags": [],
+          "hasDevUseExtension": false,
+          "hasNonDevUseExtension": true
+        }
+      ],
+      "deps": {
+        "platforms": "platforms@0.0.8",
+        "bazel_tools": "bazel_tools@_",
+        "local_config_platform": "local_config_platform@_"
+      },
+      "repoSpec": {
+        "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl",
+        "ruleClassName": "http_archive",
+        "attributes": {
+          "name": "rules_cc~0.0.9",
+          "urls": [
+            "https://github.com/bazelbuild/rules_cc/releases/download/0.0.9/rules_cc-0.0.9.tar.gz"
+          ],
+          "integrity": "sha256-IDeHW5pEVtzkp50RKorohbvEqtlo5lh9ym5k86CQDN8=",
+          "strip_prefix": "rules_cc-0.0.9",
+          "remote_patches": {
+            "https://bcr.bazel.build/modules/rules_cc/0.0.9/patches/module_dot_bazel_version.patch": "sha256-mM+qzOI0SgAdaJBlWOSMwMPKpaA9b7R37Hj/tp5bb4g="
+          },
+          "remote_patch_strip": 0
+        }
+      }
+    },
+    "rules_java@7.1.0": {
+      "name": "rules_java",
+      "version": "7.1.0",
+      "key": "rules_java@7.1.0",
+      "repoName": "rules_java",
+      "executionPlatformsToRegister": [],
+      "toolchainsToRegister": [
+        "//toolchains:all",
+        "@local_jdk//:runtime_toolchain_definition",
+        "@local_jdk//:bootstrap_runtime_toolchain_definition",
+        "@remotejdk11_linux_toolchain_config_repo//:all",
+        "@remotejdk11_linux_aarch64_toolchain_config_repo//:all",
+        "@remotejdk11_linux_ppc64le_toolchain_config_repo//:all",
+        "@remotejdk11_linux_s390x_toolchain_config_repo//:all",
+        "@remotejdk11_macos_toolchain_config_repo//:all",
+        "@remotejdk11_macos_aarch64_toolchain_config_repo//:all",
+        "@remotejdk11_win_toolchain_config_repo//:all",
+        "@remotejdk11_win_arm64_toolchain_config_repo//:all",
+        "@remotejdk17_linux_toolchain_config_repo//:all",
+        "@remotejdk17_linux_aarch64_toolchain_config_repo//:all",
+        "@remotejdk17_linux_ppc64le_toolchain_config_repo//:all",
+        "@remotejdk17_linux_s390x_toolchain_config_repo//:all",
+        "@remotejdk17_macos_toolchain_config_repo//:all",
+        "@remotejdk17_macos_aarch64_toolchain_config_repo//:all",
+        "@remotejdk17_win_toolchain_config_repo//:all",
+        "@remotejdk17_win_arm64_toolchain_config_repo//:all",
+        "@remotejdk21_linux_toolchain_config_repo//:all",
+        "@remotejdk21_linux_aarch64_toolchain_config_repo//:all",
+        "@remotejdk21_macos_toolchain_config_repo//:all",
+        "@remotejdk21_macos_aarch64_toolchain_config_repo//:all",
+        "@remotejdk21_win_toolchain_config_repo//:all"
+      ],
+      "extensionUsages": [
+        {
+          "extensionBzlFile": "@rules_java//java:extensions.bzl",
+          "extensionName": "toolchains",
+          "usingModule": "rules_java@7.1.0",
+          "location": {
+            "file": "https://bcr.bazel.build/modules/rules_java/7.1.0/MODULE.bazel",
+            "line": 19,
+            "column": 27
+          },
+          "imports": {
+            "remote_java_tools": "remote_java_tools",
+            "remote_java_tools_linux": "remote_java_tools_linux",
+            "remote_java_tools_windows": "remote_java_tools_windows",
+            "remote_java_tools_darwin_x86_64": "remote_java_tools_darwin_x86_64",
+            "remote_java_tools_darwin_arm64": "remote_java_tools_darwin_arm64",
+            "local_jdk": "local_jdk",
+            "remotejdk11_linux_toolchain_config_repo": "remotejdk11_linux_toolchain_config_repo",
+            "remotejdk11_linux_aarch64_toolchain_config_repo": "remotejdk11_linux_aarch64_toolchain_config_repo",
+            "remotejdk11_linux_ppc64le_toolchain_config_repo": "remotejdk11_linux_ppc64le_toolchain_config_repo",
+            "remotejdk11_linux_s390x_toolchain_config_repo": "remotejdk11_linux_s390x_toolchain_config_repo",
+            "remotejdk11_macos_toolchain_config_repo": "remotejdk11_macos_toolchain_config_repo",
+            "remotejdk11_macos_aarch64_toolchain_config_repo": "remotejdk11_macos_aarch64_toolchain_config_repo",
+            "remotejdk11_win_toolchain_config_repo": "remotejdk11_win_toolchain_config_repo",
+            "remotejdk11_win_arm64_toolchain_config_repo": "remotejdk11_win_arm64_toolchain_config_repo",
+            "remotejdk17_linux_toolchain_config_repo": "remotejdk17_linux_toolchain_config_repo",
+            "remotejdk17_linux_aarch64_toolchain_config_repo": "remotejdk17_linux_aarch64_toolchain_config_repo",
+            "remotejdk17_linux_ppc64le_toolchain_config_repo": "remotejdk17_linux_ppc64le_toolchain_config_repo",
+            "remotejdk17_linux_s390x_toolchain_config_repo": "remotejdk17_linux_s390x_toolchain_config_repo",
+            "remotejdk17_macos_toolchain_config_repo": "remotejdk17_macos_toolchain_config_repo",
+            "remotejdk17_macos_aarch64_toolchain_config_repo": "remotejdk17_macos_aarch64_toolchain_config_repo",
+            "remotejdk17_win_toolchain_config_repo": "remotejdk17_win_toolchain_config_repo",
+            "remotejdk17_win_arm64_toolchain_config_repo": "remotejdk17_win_arm64_toolchain_config_repo",
+            "remotejdk21_linux_toolchain_config_repo": "remotejdk21_linux_toolchain_config_repo",
+            "remotejdk21_linux_aarch64_toolchain_config_repo": "remotejdk21_linux_aarch64_toolchain_config_repo",
+            "remotejdk21_macos_toolchain_config_repo": "remotejdk21_macos_toolchain_config_repo",
+            "remotejdk21_macos_aarch64_toolchain_config_repo": "remotejdk21_macos_aarch64_toolchain_config_repo",
+            "remotejdk21_win_toolchain_config_repo": "remotejdk21_win_toolchain_config_repo"
+          },
+          "devImports": [],
+          "tags": [],
+          "hasDevUseExtension": false,
+          "hasNonDevUseExtension": true
+        }
+      ],
+      "deps": {
+        "platforms": "platforms@0.0.8",
+        "rules_cc": "rules_cc@0.0.9",
+        "bazel_skylib": "bazel_skylib@1.4.1",
+        "rules_proto": "rules_proto@5.3.0-21.7",
+        "rules_license": "rules_license@0.0.7",
+        "bazel_tools": "bazel_tools@_",
+        "local_config_platform": "local_config_platform@_"
+      },
+      "repoSpec": {
+        "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl",
+        "ruleClassName": "http_archive",
+        "attributes": {
+          "name": "rules_java~7.1.0",
+          "urls": [
+            "https://github.com/bazelbuild/rules_java/releases/download/7.1.0/rules_java-7.1.0.tar.gz"
+          ],
+          "integrity": "sha256-o3pOX2OrgnFuXdau75iO2EYcegC46TYnImKJn1h81OE=",
+          "strip_prefix": "",
+          "remote_patches": {},
+          "remote_patch_strip": 0
+        }
+      }
+    },
+    "rules_proto@5.3.0-21.7": {
+      "name": "rules_proto",
+      "version": "5.3.0-21.7",
+      "key": "rules_proto@5.3.0-21.7",
+      "repoName": "rules_proto",
+      "executionPlatformsToRegister": [],
+      "toolchainsToRegister": [],
+      "extensionUsages": [],
+      "deps": {
+        "bazel_skylib": "bazel_skylib@1.4.1",
+        "com_google_protobuf": "protobuf@21.7",
+        "rules_cc": "rules_cc@0.0.9",
+        "bazel_tools": "bazel_tools@_",
+        "local_config_platform": "local_config_platform@_"
+      },
+      "repoSpec": {
+        "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl",
+        "ruleClassName": "http_archive",
+        "attributes": {
+          "name": "rules_proto~5.3.0-21.7",
+          "urls": [
+            "https://github.com/bazelbuild/rules_proto/archive/refs/tags/5.3.0-21.7.tar.gz"
+          ],
+          "integrity": "sha256-3D+yBqLLNEG0heseQjFlsjEjWh6psDG0Qzz3vB+kYN0=",
+          "strip_prefix": "rules_proto-5.3.0-21.7",
+          "remote_patches": {},
+          "remote_patch_strip": 0
+        }
+      }
+    },
+    "rules_jvm_external@5.2": {
+      "name": "rules_jvm_external",
+      "version": "5.2",
+      "key": "rules_jvm_external@5.2",
+      "repoName": "rules_jvm_external",
+      "executionPlatformsToRegister": [],
+      "toolchainsToRegister": [],
+      "extensionUsages": [
+        {
+          "extensionBzlFile": "@rules_jvm_external//:non-module-deps.bzl",
+          "extensionName": "non_module_deps",
+          "usingModule": "rules_jvm_external@5.2",
+          "location": {
+            "file": "https://bcr.bazel.build/modules/rules_jvm_external/5.2/MODULE.bazel",
+            "line": 9,
+            "column": 32
+          },
+          "imports": {
+            "io_bazel_rules_kotlin": "io_bazel_rules_kotlin"
+          },
+          "devImports": [],
+          "tags": [],
+          "hasDevUseExtension": false,
+          "hasNonDevUseExtension": true
+        },
+        {
+          "extensionBzlFile": ":extensions.bzl",
+          "extensionName": "maven",
+          "usingModule": "rules_jvm_external@5.2",
+          "location": {
+            "file": "https://bcr.bazel.build/modules/rules_jvm_external/5.2/MODULE.bazel",
+            "line": 15,
+            "column": 22
+          },
+          "imports": {
+            "rules_jvm_external_deps": "rules_jvm_external_deps"
+          },
+          "devImports": [],
+          "tags": [
+            {
+              "tagName": "install",
+              "attributeValues": {
+                "name": "rules_jvm_external_deps",
+                "artifacts": [
+                  "com.google.auth:google-auth-library-credentials:0.22.0",
+                  "com.google.auth:google-auth-library-oauth2-http:0.22.0",
+                  "com.google.cloud:google-cloud-core:1.93.10",
+                  "com.google.cloud:google-cloud-storage:1.113.4",
+                  "com.google.code.gson:gson:2.9.0",
+                  "com.google.googlejavaformat:google-java-format:1.15.0",
+                  "com.google.guava:guava:31.1-jre",
+                  "org.apache.maven:maven-artifact:3.8.6",
+                  "software.amazon.awssdk:s3:2.17.183"
+                ],
+                "lock_file": "@rules_jvm_external//:rules_jvm_external_deps_install.json"
+              },
+              "devDependency": false,
+              "location": {
+                "file": "https://bcr.bazel.build/modules/rules_jvm_external/5.2/MODULE.bazel",
+                "line": 16,
+                "column": 14
+              }
+            }
+          ],
+          "hasDevUseExtension": false,
+          "hasNonDevUseExtension": true
+        }
+      ],
+      "deps": {
+        "bazel_skylib": "bazel_skylib@1.4.1",
+        "io_bazel_stardoc": "stardoc@0.5.3",
+        "bazel_tools": "bazel_tools@_",
+        "local_config_platform": "local_config_platform@_"
+      },
+      "repoSpec": {
+        "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl",
+        "ruleClassName": "http_archive",
+        "attributes": {
+          "name": "rules_jvm_external~5.2",
+          "urls": [
+            "https://github.com/bazelbuild/rules_jvm_external/releases/download/5.2/rules_jvm_external-5.2.tar.gz"
+          ],
+          "integrity": "sha256-+G/UKoCeGHHKCqvonbDUQEUSGcPORsWNokDH3NwAEl8=",
+          "strip_prefix": "rules_jvm_external-5.2",
+          "remote_patches": {},
+          "remote_patch_strip": 0,
+          "patches": [
+            "//third_party:rules_jvm_external_5.2.patch"
+          ],
+          "patch_cmds": [],
+          "patch_args": [
+            "-p1"
+          ]
+        }
+      }
+    },
+    "rules_python@0.26.0": {
+      "name": "rules_python",
+      "version": "0.26.0",
+      "key": "rules_python@0.26.0",
+      "repoName": "rules_python",
+      "executionPlatformsToRegister": [],
+      "toolchainsToRegister": [
+        "@pythons_hub//:all"
+      ],
+      "extensionUsages": [
+        {
+          "extensionBzlFile": "@rules_python//python/extensions/private:internal_deps.bzl",
+          "extensionName": "internal_deps",
+          "usingModule": "rules_python@0.26.0",
+          "location": {
+            "file": "https://bcr.bazel.build/modules/rules_python/0.26.0/MODULE.bazel",
+            "line": 15,
+            "column": 30
+          },
+          "imports": {
+            "rules_python_internal": "rules_python_internal",
+            "pypi__build": "pypi__build",
+            "pypi__click": "pypi__click",
+            "pypi__colorama": "pypi__colorama",
+            "pypi__importlib_metadata": "pypi__importlib_metadata",
+            "pypi__installer": "pypi__installer",
+            "pypi__more_itertools": "pypi__more_itertools",
+            "pypi__packaging": "pypi__packaging",
+            "pypi__pep517": "pypi__pep517",
+            "pypi__pip": "pypi__pip",
+            "pypi__pip_tools": "pypi__pip_tools",
+            "pypi__pyproject_hooks": "pypi__pyproject_hooks",
+            "pypi__setuptools": "pypi__setuptools",
+            "pypi__tomli": "pypi__tomli",
+            "pypi__wheel": "pypi__wheel",
+            "pypi__zipp": "pypi__zipp"
+          },
+          "devImports": [],
+          "tags": [
+            {
+              "tagName": "install",
+              "attributeValues": {},
+              "devDependency": false,
+              "location": {
+                "file": "https://bcr.bazel.build/modules/rules_python/0.26.0/MODULE.bazel",
+                "line": 16,
+                "column": 22
+              }
+            }
+          ],
+          "hasDevUseExtension": false,
+          "hasNonDevUseExtension": true
+        },
+        {
+          "extensionBzlFile": "@rules_python//python/extensions:python.bzl",
+          "extensionName": "python",
+          "usingModule": "rules_python@0.26.0",
+          "location": {
+            "file": "https://bcr.bazel.build/modules/rules_python/0.26.0/MODULE.bazel",
+            "line": 41,
+            "column": 23
+          },
+          "imports": {
+            "pythons_hub": "pythons_hub"
+          },
+          "devImports": [],
+          "tags": [
+            {
+              "tagName": "toolchain",
+              "attributeValues": {
+                "is_default": true,
+                "python_version": "3.11"
+              },
+              "devDependency": false,
+              "location": {
+                "file": "https://bcr.bazel.build/modules/rules_python/0.26.0/MODULE.bazel",
+                "line": 47,
+                "column": 17
+              }
+            }
+          ],
+          "hasDevUseExtension": false,
+          "hasNonDevUseExtension": true
+        }
+      ],
+      "deps": {
+        "bazel_features": "bazel_features@1.1.0",
+        "bazel_skylib": "bazel_skylib@1.4.1",
+        "platforms": "platforms@0.0.8",
+        "rules_proto": "rules_proto@5.3.0-21.7",
+        "com_google_protobuf": "protobuf@21.7",
+        "bazel_tools": "bazel_tools@_",
+        "local_config_platform": "local_config_platform@_"
+      },
+      "repoSpec": {
+        "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl",
+        "ruleClassName": "http_archive",
+        "attributes": {
+          "name": "rules_python~0.26.0",
+          "urls": [
+            "https://github.com/bazelbuild/rules_python/releases/download/0.26.0/rules_python-0.26.0.tar.gz"
+          ],
+          "integrity": "sha256-nQQEGskqCYXjRCNfXZRvcaxUPxsVZfLNvJoqruit9Vs=",
+          "strip_prefix": "rules_python-0.26.0",
+          "remote_patches": {
+            "https://bcr.bazel.build/modules/rules_python/0.26.0/patches/module_dot_bazel_version.patch": "sha256-V3kwks4ppP5NERbfSY4505SXghM4mKLEBuhi4tpseZE="
+          },
+          "remote_patch_strip": 1
+        }
+      }
+    },
+    "rules_testing@0.0.4": {
+      "name": "rules_testing",
+      "version": "0.0.4",
+      "key": "rules_testing@0.0.4",
+      "repoName": "rules_testing",
+      "executionPlatformsToRegister": [],
+      "toolchainsToRegister": [],
+      "extensionUsages": [],
+      "deps": {
+        "bazel_skylib": "bazel_skylib@1.4.1",
+        "bazel_tools": "bazel_tools@_",
+        "local_config_platform": "local_config_platform@_"
+      },
+      "repoSpec": {
+        "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl",
+        "ruleClassName": "http_archive",
+        "attributes": {
+          "name": "rules_testing~0.0.4",
+          "urls": [
+            "https://github.com/bazelbuild/rules_testing/releases/download/v0.0.4/rules_testing-v0.0.4.tar.gz"
+          ],
+          "integrity": "sha256-TiH5qnmWlEzpFDHye8o3S/9W5oCs/klydgdNVrxdmvI=",
+          "strip_prefix": "rules_testing-0.0.4",
+          "remote_patches": {
+            "https://bcr.bazel.build/modules/rules_testing/0.0.4/patches/module_dot_bazel_version.patch": "sha256-0bNxHP/dstK5Ftz0e6FMQ2tyV4BZwp6Bh2et7ZuD1kk="
+          },
+          "remote_patch_strip": 0
+        }
+      }
+    },
+    "googletest@1.14.0": {
+      "name": "googletest",
+      "version": "1.14.0",
+      "key": "googletest@1.14.0",
+      "repoName": "googletest",
+      "executionPlatformsToRegister": [],
+      "toolchainsToRegister": [],
+      "extensionUsages": [],
+      "deps": {
+        "com_google_absl": "abseil-cpp@20230125.1",
+        "platforms": "platforms@0.0.8",
+        "rules_cc": "rules_cc@0.0.9",
+        "bazel_tools": "bazel_tools@_",
+        "local_config_platform": "local_config_platform@_"
+      },
+      "repoSpec": {
+        "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl",
+        "ruleClassName": "http_archive",
+        "attributes": {
+          "name": "googletest~1.14.0",
+          "urls": [
+            "https://github.com/google/googletest/archive/refs/tags/v1.14.0.tar.gz"
+          ],
+          "integrity": "sha256-itWYxzrXluDYKAsILOvYKmMNc+c808cAV5OKZQG7pdc=",
+          "strip_prefix": "googletest-1.14.0",
+          "remote_patches": {
+            "https://bcr.bazel.build/modules/googletest/1.14.0/patches/module_dot_bazel.patch": "sha256-CSomzvti38LCuURDG5EEoa3O1tQF3cKKt/mknnP1qcc="
+          },
+          "remote_patch_strip": 0
+        }
+      }
+    },
+    "remoteapis@_": {
+      "name": "remoteapis",
+      "version": "",
+      "key": "remoteapis@_",
+      "repoName": "remoteapis",
+      "executionPlatformsToRegister": [],
+      "toolchainsToRegister": [],
+      "extensionUsages": [],
+      "deps": {
+        "rules_java": "rules_java@7.1.0",
+        "rules_proto": "rules_proto@5.3.0-21.7",
+        "com_google_protobuf": "protobuf@21.7",
+        "googleapis": "googleapis@_",
+        "io_bazel": "<root>",
+        "bazel_tools": "bazel_tools@_",
+        "local_config_platform": "local_config_platform@_"
+      }
+    },
+    "googleapis@_": {
+      "name": "googleapis",
+      "version": "",
+      "key": "googleapis@_",
+      "repoName": "googleapis",
+      "executionPlatformsToRegister": [],
+      "toolchainsToRegister": [],
+      "extensionUsages": [],
+      "deps": {
+        "rules_license": "rules_license@0.0.7",
+        "rules_java": "rules_java@7.1.0",
+        "rules_proto": "rules_proto@5.3.0-21.7",
+        "com_google_protobuf": "protobuf@21.7",
+        "io_bazel": "<root>",
+        "bazel_tools": "bazel_tools@_",
+        "local_config_platform": "local_config_platform@_"
+      }
+    },
+    "apple_support@1.5.0": {
+      "name": "apple_support",
+      "version": "1.5.0",
+      "key": "apple_support@1.5.0",
+      "repoName": "build_bazel_apple_support",
+      "executionPlatformsToRegister": [],
+      "toolchainsToRegister": [
+        "@local_config_apple_cc_toolchains//:all"
+      ],
+      "extensionUsages": [
+        {
+          "extensionBzlFile": "@build_bazel_apple_support//crosstool:setup.bzl",
+          "extensionName": "apple_cc_configure_extension",
+          "usingModule": "apple_support@1.5.0",
+          "location": {
+            "file": "https://bcr.bazel.build/modules/apple_support/1.5.0/MODULE.bazel",
+            "line": 17,
+            "column": 35
+          },
+          "imports": {
+            "local_config_apple_cc": "local_config_apple_cc",
+            "local_config_apple_cc_toolchains": "local_config_apple_cc_toolchains"
+          },
+          "devImports": [],
+          "tags": [],
+          "hasDevUseExtension": false,
+          "hasNonDevUseExtension": true
+        }
+      ],
+      "deps": {
+        "bazel_skylib": "bazel_skylib@1.4.1",
+        "platforms": "platforms@0.0.8",
+        "bazel_tools": "bazel_tools@_",
+        "local_config_platform": "local_config_platform@_"
+      },
+      "repoSpec": {
+        "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl",
+        "ruleClassName": "http_archive",
+        "attributes": {
+          "name": "apple_support~1.5.0",
+          "urls": [
+            "https://github.com/bazelbuild/apple_support/releases/download/1.5.0/apple_support.1.5.0.tar.gz"
+          ],
+          "integrity": "sha256-miM41vja0yRPgj8txghKA+TQ+7J8qJLclw5okNW0gYQ=",
+          "strip_prefix": "",
+          "remote_patches": {},
+          "remote_patch_strip": 0
+        }
+      }
+    },
+    "abseil-cpp@20230125.1": {
+      "name": "abseil-cpp",
+      "version": "20230125.1",
+      "key": "abseil-cpp@20230125.1",
+      "repoName": "abseil-cpp",
+      "executionPlatformsToRegister": [],
+      "toolchainsToRegister": [],
+      "extensionUsages": [],
+      "deps": {
+        "rules_cc": "rules_cc@0.0.9",
+        "platforms": "platforms@0.0.8",
+        "bazel_skylib": "bazel_skylib@1.4.1",
+        "bazel_tools": "bazel_tools@_",
+        "local_config_platform": "local_config_platform@_"
+      },
+      "repoSpec": {
+        "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl",
+        "ruleClassName": "http_archive",
+        "attributes": {
+          "name": "abseil-cpp~20230125.1",
+          "urls": [
+            "https://github.com/abseil/abseil-cpp/archive/refs/tags/20230125.1.tar.gz"
+          ],
+          "integrity": "sha256-gTEcF1mbNxIGne0gzKCaYqsL8qid+haZN4bIeCt+0UU=",
+          "strip_prefix": "abseil-cpp-20230125.1",
+          "remote_patches": {
+            "https://bcr.bazel.build/modules/abseil-cpp/20230125.1/patches/module_dot_bazel.patch": "sha256-L1wChhBmDOnRbPbD4MENVXHjOBT2KFrDxT6D+aoThxk="
+          },
+          "remote_patch_strip": 0
+        }
+      }
+    },
+    "c-ares@1.15.0": {
+      "name": "c-ares",
+      "version": "1.15.0",
+      "key": "c-ares@1.15.0",
+      "repoName": "c-ares",
+      "executionPlatformsToRegister": [],
+      "toolchainsToRegister": [],
+      "extensionUsages": [],
+      "deps": {
+        "bazel_skylib": "bazel_skylib@1.4.1",
+        "com_github_grpc_grpc": "grpc@1.48.1.bcr.1",
+        "platforms": "platforms@0.0.8",
+        "bazel_tools": "bazel_tools@_",
+        "local_config_platform": "local_config_platform@_"
+      },
+      "repoSpec": {
+        "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl",
+        "ruleClassName": "http_archive",
+        "attributes": {
+          "name": "c-ares~1.15.0",
+          "urls": [
+            "https://github.com/c-ares/c-ares/releases/download/cares-1_15_0/c-ares-1.15.0.tar.gz"
+          ],
+          "integrity": "sha256-bNuXhx8pMFMMl963z1yPpL5aCwLHzqbnx2Z2cqOdaFI=",
+          "strip_prefix": "c-ares-1.15.0",
+          "remote_patches": {
+            "https://bcr.bazel.build/modules/c-ares/1.15.0/patches/add_build_file.patch": "sha256-+SUCFxBIkR0GE9FRFPps/e6AnA9cQIGANBHK14UAKwQ=",
+            "https://bcr.bazel.build/modules/c-ares/1.15.0/patches/module_dot_bazel.patch": "sha256-SVQeSrnvd7IishMhmg8S3PK6/6bbt1IqwVEqKDfdYgk="
+          },
+          "remote_patch_strip": 0
+        }
+      }
+    },
+    "rules_go@0.39.1": {
+      "name": "rules_go",
+      "version": "0.39.1",
+      "key": "rules_go@0.39.1",
+      "repoName": "io_bazel_rules_go",
+      "executionPlatformsToRegister": [],
+      "toolchainsToRegister": [
+        "@go_toolchains//:all"
+      ],
+      "extensionUsages": [
+        {
+          "extensionBzlFile": "@io_bazel_rules_go//go/private:extensions.bzl",
+          "extensionName": "non_module_dependencies",
+          "usingModule": "rules_go@0.39.1",
+          "location": {
+            "file": "https://bcr.bazel.build/modules/rules_go/0.39.1/MODULE.bazel",
+            "line": 13,
+            "column": 40
+          },
+          "imports": {
+            "go_googleapis": "go_googleapis",
+            "io_bazel_rules_nogo": "io_bazel_rules_nogo"
+          },
+          "devImports": [],
+          "tags": [],
+          "hasDevUseExtension": false,
+          "hasNonDevUseExtension": true
+        },
+        {
+          "extensionBzlFile": "@io_bazel_rules_go//go:extensions.bzl",
+          "extensionName": "go_sdk",
+          "usingModule": "rules_go@0.39.1",
+          "location": {
+            "file": "https://bcr.bazel.build/modules/rules_go/0.39.1/MODULE.bazel",
+            "line": 20,
+            "column": 23
+          },
+          "imports": {
+            "go_toolchains": "go_toolchains"
+          },
+          "devImports": [],
+          "tags": [
+            {
+              "tagName": "download",
+              "attributeValues": {
+                "name": "go_default_sdk",
+                "version": "1.19.8"
+              },
+              "devDependency": false,
+              "location": {
+                "file": "https://bcr.bazel.build/modules/rules_go/0.39.1/MODULE.bazel",
+                "line": 21,
+                "column": 16
+              }
+            }
+          ],
+          "hasDevUseExtension": false,
+          "hasNonDevUseExtension": true
+        },
+        {
+          "extensionBzlFile": "@gazelle//:extensions.bzl",
+          "extensionName": "go_deps",
+          "usingModule": "rules_go@0.39.1",
+          "location": {
+            "file": "https://bcr.bazel.build/modules/rules_go/0.39.1/MODULE.bazel",
+            "line": 31,
+            "column": 24
+          },
+          "imports": {
+            "com_github_gogo_protobuf": "com_github_gogo_protobuf",
+            "com_github_golang_mock": "com_github_golang_mock",
+            "com_github_golang_protobuf": "com_github_golang_protobuf",
+            "org_golang_google_genproto": "org_golang_google_genproto",
+            "org_golang_google_grpc": "org_golang_google_grpc",
+            "org_golang_google_protobuf": "org_golang_google_protobuf",
+            "org_golang_x_net": "org_golang_x_net"
+          },
+          "devImports": [],
+          "tags": [
+            {
+              "tagName": "from_file",
+              "attributeValues": {
+                "go_mod": "//:go.mod"
+              },
+              "devDependency": false,
+              "location": {
+                "file": "https://bcr.bazel.build/modules/rules_go/0.39.1/MODULE.bazel",
+                "line": 32,
+                "column": 18
+              }
+            },
+            {
+              "tagName": "module",
+              "attributeValues": {
+                "path": "github.com/gogo/protobuf",
+                "sum": "h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=",
+                "version": "v1.3.2"
+              },
+              "devDependency": false,
+              "location": {
+                "file": "https://bcr.bazel.build/modules/rules_go/0.39.1/MODULE.bazel",
+                "line": 33,
+                "column": 15
+              }
+            }
+          ],
+          "hasDevUseExtension": false,
+          "hasNonDevUseExtension": true
+        }
+      ],
+      "deps": {
+        "bazel_skylib": "bazel_skylib@1.4.1",
+        "platforms": "platforms@0.0.8",
+        "rules_proto": "rules_proto@5.3.0-21.7",
+        "com_google_protobuf": "protobuf@21.7",
+        "gazelle": "gazelle@0.30.0",
+        "bazel_tools": "bazel_tools@_",
+        "local_config_platform": "local_config_platform@_"
+      },
+      "repoSpec": {
+        "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl",
+        "ruleClassName": "http_archive",
+        "attributes": {
+          "name": "rules_go~0.39.1",
+          "urls": [
+            "https://github.com/bazelbuild/rules_go/releases/download/v0.39.1/rules_go-v0.39.1.zip"
+          ],
+          "integrity": "sha256-bcLaerTPXXv8fJSXdrG3xzPwXlbtxLzZAiuySdLiqZY=",
+          "strip_prefix": "",
+          "remote_patches": {},
+          "remote_patch_strip": 0
+        }
+      }
+    },
+    "upb@0.0.0-20220923-a547704": {
+      "name": "upb",
+      "version": "0.0.0-20220923-a547704",
+      "key": "upb@0.0.0-20220923-a547704",
+      "repoName": "upb",
+      "executionPlatformsToRegister": [],
+      "toolchainsToRegister": [],
+      "extensionUsages": [],
+      "deps": {
+        "bazel_skylib": "bazel_skylib@1.4.1",
+        "rules_proto": "rules_proto@5.3.0-21.7",
+        "com_google_protobuf": "protobuf@21.7",
+        "com_google_absl": "abseil-cpp@20230125.1",
+        "platforms": "platforms@0.0.8",
+        "bazel_tools": "bazel_tools@_",
+        "local_config_platform": "local_config_platform@_"
+      },
+      "repoSpec": {
+        "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl",
+        "ruleClassName": "http_archive",
+        "attributes": {
+          "name": "upb~0.0.0-20220923-a547704",
+          "urls": [
+            "https://github.com/protocolbuffers/upb/archive/a5477045acaa34586420942098f5fecd3570f577.tar.gz"
+          ],
+          "integrity": "sha256-z39x6v+QskwaKLSWRan/A6mmwecTQpHOcJActj5zZLU=",
+          "strip_prefix": "upb-a5477045acaa34586420942098f5fecd3570f577",
+          "remote_patches": {
+            "https://bcr.bazel.build/modules/upb/0.0.0-20220923-a547704/patches/module_dot_bazel.patch": "sha256-wH4mNS6ZYy+8uC0HoAft/c7SDsq2Kxf+J8dUakXhaB0="
+          },
+          "remote_patch_strip": 0
+        }
+      }
+    },
+    "bazel_tools@_": {
+      "name": "bazel_tools",
+      "version": "",
+      "key": "bazel_tools@_",
+      "repoName": "bazel_tools",
+      "executionPlatformsToRegister": [],
+      "toolchainsToRegister": [
+        "@local_config_cc_toolchains//:all",
+        "@local_config_sh//:local_sh_toolchain"
+      ],
+      "extensionUsages": [
+        {
+          "extensionBzlFile": "@bazel_tools//tools/cpp:cc_configure.bzl",
+          "extensionName": "cc_configure_extension",
+          "usingModule": "bazel_tools@_",
+          "location": {
+            "file": "@@bazel_tools//:MODULE.bazel",
+            "line": 13,
+            "column": 29
+          },
+          "imports": {
+            "local_config_cc": "local_config_cc",
+            "local_config_cc_toolchains": "local_config_cc_toolchains"
+          },
+          "devImports": [],
+          "tags": [],
+          "hasDevUseExtension": false,
+          "hasNonDevUseExtension": true
+        },
+        {
+          "extensionBzlFile": "@bazel_tools//tools/osx:xcode_configure.bzl",
+          "extensionName": "xcode_configure_extension",
+          "usingModule": "bazel_tools@_",
+          "location": {
+            "file": "@@bazel_tools//:MODULE.bazel",
+            "line": 17,
+            "column": 32
+          },
+          "imports": {
+            "local_config_xcode": "local_config_xcode"
+          },
+          "devImports": [],
+          "tags": [],
+          "hasDevUseExtension": false,
+          "hasNonDevUseExtension": true
+        },
+        {
+          "extensionBzlFile": "@rules_java//java:extensions.bzl",
+          "extensionName": "toolchains",
+          "usingModule": "bazel_tools@_",
+          "location": {
+            "file": "@@bazel_tools//:MODULE.bazel",
+            "line": 20,
+            "column": 32
+          },
+          "imports": {
+            "local_jdk": "local_jdk",
+            "remote_java_tools": "remote_java_tools",
+            "remote_java_tools_linux": "remote_java_tools_linux",
+            "remote_java_tools_windows": "remote_java_tools_windows",
+            "remote_java_tools_darwin_x86_64": "remote_java_tools_darwin_x86_64",
+            "remote_java_tools_darwin_arm64": "remote_java_tools_darwin_arm64"
+          },
+          "devImports": [],
+          "tags": [],
+          "hasDevUseExtension": false,
+          "hasNonDevUseExtension": true
+        },
+        {
+          "extensionBzlFile": "@bazel_tools//tools/sh:sh_configure.bzl",
+          "extensionName": "sh_configure_extension",
+          "usingModule": "bazel_tools@_",
+          "location": {
+            "file": "@@bazel_tools//:MODULE.bazel",
+            "line": 31,
+            "column": 39
+          },
+          "imports": {
+            "local_config_sh": "local_config_sh"
+          },
+          "devImports": [],
+          "tags": [],
+          "hasDevUseExtension": false,
+          "hasNonDevUseExtension": true
+        },
+        {
+          "extensionBzlFile": "@bazel_tools//tools/test:extensions.bzl",
+          "extensionName": "remote_coverage_tools_extension",
+          "usingModule": "bazel_tools@_",
+          "location": {
+            "file": "@@bazel_tools//:MODULE.bazel",
+            "line": 35,
+            "column": 48
+          },
+          "imports": {
+            "remote_coverage_tools": "remote_coverage_tools"
+          },
+          "devImports": [],
+          "tags": [],
+          "hasDevUseExtension": false,
+          "hasNonDevUseExtension": true
+        },
+        {
+          "extensionBzlFile": "@bazel_tools//tools/android:android_extensions.bzl",
+          "extensionName": "remote_android_tools_extensions",
+          "usingModule": "bazel_tools@_",
+          "location": {
+            "file": "@@bazel_tools//:MODULE.bazel",
+            "line": 38,
+            "column": 42
+          },
+          "imports": {
+            "android_gmaven_r8": "android_gmaven_r8",
+            "android_tools": "android_tools"
+          },
+          "devImports": [],
+          "tags": [],
+          "hasDevUseExtension": false,
+          "hasNonDevUseExtension": true
+        }
+      ],
+      "deps": {
+        "rules_cc": "rules_cc@0.0.9",
+        "rules_java": "rules_java@7.1.0",
+        "rules_license": "rules_license@0.0.7",
+        "rules_proto": "rules_proto@5.3.0-21.7",
+        "rules_python": "rules_python@0.26.0",
+        "platforms": "platforms@0.0.8",
+        "com_google_protobuf": "protobuf@21.7",
+        "zlib": "zlib@1.3",
+        "local_config_platform": "local_config_platform@_"
+      }
+    },
+    "local_config_platform@_": {
+      "name": "local_config_platform",
+      "version": "",
+      "key": "local_config_platform@_",
+      "repoName": "local_config_platform",
+      "executionPlatformsToRegister": [],
+      "toolchainsToRegister": [],
+      "extensionUsages": [],
+      "deps": {
+        "platforms": "platforms@0.0.8",
+        "bazel_tools": "bazel_tools@_"
+      }
+    },
+    "boringssl@0.0.0-20211025-d4f1ab9": {
+      "name": "boringssl",
+      "version": "0.0.0-20211025-d4f1ab9",
+      "key": "boringssl@0.0.0-20211025-d4f1ab9",
+      "repoName": "boringssl",
+      "executionPlatformsToRegister": [],
+      "toolchainsToRegister": [],
+      "extensionUsages": [],
+      "deps": {
+        "rules_cc": "rules_cc@0.0.9",
+        "bazel_tools": "bazel_tools@_",
+        "local_config_platform": "local_config_platform@_"
+      },
+      "repoSpec": {
+        "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl",
+        "ruleClassName": "http_archive",
+        "attributes": {
+          "name": "boringssl~0.0.0-20211025-d4f1ab9",
+          "urls": [
+            "https://github.com/google/boringssl/archive/d4f1ab983065e4616319f59c723c7b9870021fae.tar.gz"
+          ],
+          "integrity": "sha256-M26QowTRWQe0pyMgTvDHwMabsdfxLqYP6MMwUWZjC/I=",
+          "strip_prefix": "boringssl-d4f1ab983065e4616319f59c723c7b9870021fae",
+          "remote_patches": {
+            "https://bcr.bazel.build/modules/boringssl/0.0.0-20211025-d4f1ab9/patches/module_dot_bazel.patch": "sha256-TJNetd16OGSjVWvmBAL4iZM/uatmXvjR0AsjHrPRGUA="
+          },
+          "remote_patch_strip": 0
+        }
+      }
+    },
+    "re2@2021-09-01": {
+      "name": "re2",
+      "version": "2021-09-01",
+      "key": "re2@2021-09-01",
+      "repoName": "re2",
+      "executionPlatformsToRegister": [],
+      "toolchainsToRegister": [],
+      "extensionUsages": [],
+      "deps": {
+        "rules_cc": "rules_cc@0.0.9",
+        "bazel_tools": "bazel_tools@_",
+        "local_config_platform": "local_config_platform@_"
+      },
+      "repoSpec": {
+        "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl",
+        "ruleClassName": "http_archive",
+        "attributes": {
+          "name": "re2~2021-09-01",
+          "urls": [
+            "https://github.com/google/re2/archive/refs/tags/2021-09-01.zip"
+          ],
+          "integrity": "sha256-739ELobFx96SqV7QdeOUNre0fFKk5+5jV1IU7slG/C8=",
+          "strip_prefix": "re2-2021-09-01",
+          "remote_patches": {
+            "https://bcr.bazel.build/modules/re2/2021-09-01/patches/module_dot_bazel.patch": "sha256-uLpoNV5fETcQxOqvD9PtPv4CHYhetfPSkPIJPXoLXcg="
+          },
+          "remote_patch_strip": 0
+        }
+      }
+    },
+    "bazel_features@1.1.0": {
+      "name": "bazel_features",
+      "version": "1.1.0",
+      "key": "bazel_features@1.1.0",
+      "repoName": "bazel_features",
+      "executionPlatformsToRegister": [],
+      "toolchainsToRegister": [],
+      "extensionUsages": [
+        {
+          "extensionBzlFile": "@bazel_features//private:extensions.bzl",
+          "extensionName": "version_extension",
+          "usingModule": "bazel_features@1.1.0",
+          "location": {
+            "file": "https://bcr.bazel.build/modules/bazel_features/1.1.0/MODULE.bazel",
+            "line": 6,
+            "column": 24
+          },
+          "imports": {
+            "bazel_features_globals": "bazel_features_globals",
+            "bazel_features_version": "bazel_features_version"
+          },
+          "devImports": [],
+          "tags": [],
+          "hasDevUseExtension": false,
+          "hasNonDevUseExtension": true
+        }
+      ],
+      "deps": {
+        "bazel_tools": "bazel_tools@_",
+        "local_config_platform": "local_config_platform@_"
+      },
+      "repoSpec": {
+        "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl",
+        "ruleClassName": "http_archive",
+        "attributes": {
+          "name": "bazel_features~1.1.0",
+          "urls": [
+            "https://github.com/bazel-contrib/bazel_features/releases/download/v1.1.0/bazel_features-v1.1.0.tar.gz"
+          ],
+          "integrity": "sha256-4hD6q1dkP7Z1Lwt/DRIJdqKZ1dqe0g4gEp7hE0o8/Hw=",
+          "strip_prefix": "bazel_features-1.1.0",
+          "remote_patches": {
+            "https://bcr.bazel.build/modules/bazel_features/1.1.0/patches/module_dot_bazel_version.patch": "sha256-o16WYfVZruIX5FGE8sATXKb9PLRpH26dbAVdbKPKVRk="
+          },
+          "remote_patch_strip": 0
+        }
+      }
+    },
+    "gazelle@0.30.0": {
+      "name": "gazelle",
+      "version": "0.30.0",
+      "key": "gazelle@0.30.0",
+      "repoName": "bazel_gazelle",
+      "executionPlatformsToRegister": [],
+      "toolchainsToRegister": [],
+      "extensionUsages": [
+        {
+          "extensionBzlFile": "@io_bazel_rules_go//go:extensions.bzl",
+          "extensionName": "go_sdk",
+          "usingModule": "gazelle@0.30.0",
+          "location": {
+            "file": "https://bcr.bazel.build/modules/gazelle/0.30.0/MODULE.bazel",
+            "line": 12,
+            "column": 23
+          },
+          "imports": {
+            "go_default_sdk": "go_default_sdk"
+          },
+          "devImports": [],
+          "tags": [],
+          "hasDevUseExtension": false,
+          "hasNonDevUseExtension": true
+        },
+        {
+          "extensionBzlFile": "@bazel_gazelle//internal/bzlmod:non_module_deps.bzl",
+          "extensionName": "non_module_deps",
+          "usingModule": "gazelle@0.30.0",
+          "location": {
+            "file": "https://bcr.bazel.build/modules/gazelle/0.30.0/MODULE.bazel",
+            "line": 17,
+            "column": 32
+          },
+          "imports": {
+            "bazel_gazelle_go_repository_cache": "bazel_gazelle_go_repository_cache",
+            "bazel_gazelle_go_repository_tools": "bazel_gazelle_go_repository_tools"
+          },
+          "devImports": [],
+          "tags": [],
+          "hasDevUseExtension": false,
+          "hasNonDevUseExtension": true
+        },
+        {
+          "extensionBzlFile": "@io_bazel_rules_go//go/private:extensions.bzl",
+          "extensionName": "non_module_dependencies",
+          "usingModule": "gazelle@0.30.0",
+          "location": {
+            "file": "https://bcr.bazel.build/modules/gazelle/0.30.0/MODULE.bazel",
+            "line": 24,
+            "column": 41
+          },
+          "imports": {
+            "go_googleapis": "go_googleapis"
+          },
+          "devImports": [],
+          "tags": [],
+          "hasDevUseExtension": false,
+          "hasNonDevUseExtension": true
+        },
+        {
+          "extensionBzlFile": "@bazel_gazelle//:extensions.bzl",
+          "extensionName": "go_deps",
+          "usingModule": "gazelle@0.30.0",
+          "location": {
+            "file": "https://bcr.bazel.build/modules/gazelle/0.30.0/MODULE.bazel",
+            "line": 30,
+            "column": 24
+          },
+          "imports": {
+            "com_github_bazelbuild_buildtools": "com_github_bazelbuild_buildtools",
+            "com_github_bmatcuk_doublestar_v4": "com_github_bmatcuk_doublestar_v4",
+            "com_github_fsnotify_fsnotify": "com_github_fsnotify_fsnotify",
+            "com_github_google_go_cmp": "com_github_google_go_cmp",
+            "com_github_pelletier_go_toml": "com_github_pelletier_go_toml",
+            "com_github_pmezard_go_difflib": "com_github_pmezard_go_difflib",
+            "org_golang_x_mod": "org_golang_x_mod",
+            "org_golang_x_sync": "org_golang_x_sync",
+            "org_golang_x_tools": "org_golang_x_tools",
+            "bazel_gazelle_go_repository_config": "bazel_gazelle_go_repository_config"
+          },
+          "devImports": [],
+          "tags": [
+            {
+              "tagName": "from_file",
+              "attributeValues": {
+                "go_mod": "//:go.mod"
+              },
+              "devDependency": false,
+              "location": {
+                "file": "https://bcr.bazel.build/modules/gazelle/0.30.0/MODULE.bazel",
+                "line": 31,
+                "column": 18
+              }
+            }
+          ],
+          "hasDevUseExtension": false,
+          "hasNonDevUseExtension": true
+        }
+      ],
+      "deps": {
+        "bazel_skylib": "bazel_skylib@1.4.1",
+        "com_google_protobuf": "protobuf@21.7",
+        "io_bazel_rules_go": "rules_go@0.39.1",
+        "rules_proto": "rules_proto@5.3.0-21.7",
+        "bazel_tools": "bazel_tools@_",
+        "local_config_platform": "local_config_platform@_"
+      },
+      "repoSpec": {
+        "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl",
+        "ruleClassName": "http_archive",
+        "attributes": {
+          "name": "gazelle~0.30.0",
+          "urls": [
+            "https://github.com/bazelbuild/bazel-gazelle/releases/download/v0.30.0/bazel-gazelle-v0.30.0.tar.gz"
+          ],
+          "integrity": "sha256-cn8+Tt2W6iDCnowsqejSr3JNjHd455I6hUssgJUrxAU=",
+          "strip_prefix": "",
+          "remote_patches": {},
+          "remote_patch_strip": 0
+        }
+      }
+    }
+  },
+  "moduleExtensions": {
+    "//:extensions.bzl%bazel_android_deps": {
+      "general": {
+        "bzlTransitiveDigest": "PjK+f/kxkhda9tRFlKVdGfNszPoXs7CDXZUi+ZGWGYU=",
+        "accumulatedFileDigests": {},
+        "envVariables": {},
+        "generatedRepoSpecs": {
+          "desugar_jdk_libs": {
+            "bzlFile": "@@//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "_main~bazel_android_deps~desugar_jdk_libs",
+              "sha256": "ef71be474fbb3b3b7bd70cda139f01232c63b9e1bbd08c058b00a8d538d4db17",
+              "strip_prefix": "desugar_jdk_libs-24dcd1dead0b64aae3d7c89ca9646b5dc4068009",
+              "url": "https://github.com/google/desugar_jdk_libs/archive/24dcd1dead0b64aae3d7c89ca9646b5dc4068009.zip"
+            }
+          }
+        }
+      }
+    },
+    "//:extensions.bzl%bazel_build_deps": {
+      "general": {
+        "bzlTransitiveDigest": "PjK+f/kxkhda9tRFlKVdGfNszPoXs7CDXZUi+ZGWGYU=",
+        "accumulatedFileDigests": {
+          "@@//src/test/tools/bzlmod:MODULE.bazel.lock": "10b96bd3c1eb194b0efe3a13fd06f2051abf36efb33414ad92048883ba471c7f",
+          "@@//:MODULE.bazel": "63625ac7809ba5bc83e0814e16f223ac28a98df884897ddd5bfbd69fd4e3ddbf"
+        },
+        "envVariables": {},
+        "generatedRepoSpecs": {
+          "openjdk_macos_aarch64_vanilla": {
+            "bzlFile": "@@//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "_main~bazel_build_deps~openjdk_macos_aarch64_vanilla",
+              "sha256": "2a7a99a3ea263dbd8d32a67d1e6e363ba8b25c645c826f5e167a02bbafaff1fa",
+              "downloaded_file_path": "zulu-macos-aarch64-vanilla.tar.gz",
+              "url": "https://cdn.azul.com/zulu/bin/zulu21.28.85-ca-jdk21.0.0-macosx_aarch64.tar.gz"
+            }
+          },
+          "bazel_tools_repo_cache": {
+            "bzlFile": "@@//:distdir.bzl",
+            "ruleClassName": "repo_cache_tar",
+            "attributes": {
+              "name": "_main~bazel_build_deps~bazel_tools_repo_cache",
+              "repos": [
+                "rules_cc~0.0.9",
+                "rules_java~7.1.0",
+                "rules_license~0.0.7",
+                "rules_proto~4.0.0",
+                "rules_python~0.4.0",
+                "platforms",
+                "protobuf~3.19.6",
+                "zlib~1.3",
+                "apple_support~1.5.0",
+                "bazel_skylib~1.3.0"
+              ],
+              "lockfile": "@@//src/test/tools/bzlmod:MODULE.bazel.lock"
+            }
+          },
+          "openjdk_linux_vanilla": {
+            "bzlFile": "@@//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "_main~bazel_build_deps~openjdk_linux_vanilla",
+              "sha256": "0c0eadfbdc47a7ca64aeab51b9c061f71b6e4d25d2d87674512e9b6387e9e3a6",
+              "downloaded_file_path": "zulu-linux-vanilla.tar.gz",
+              "url": "https://cdn.azul.com/zulu/bin/zulu21.28.85-ca-jdk21.0.0-linux_x64.tar.gz"
+            }
+          },
+          "debian_cc_deps": {
+            "bzlFile": "@@//tools/distributions:system_repo.bzl",
+            "ruleClassName": "system_repo",
+            "attributes": {
+              "name": "_main~bazel_build_deps~debian_cc_deps",
+              "symlinks": {},
+              "build_file": "@@//tools/distributions/debian:debian_cc.BUILD"
+            }
+          },
+          "debian_java_deps": {
+            "bzlFile": "@@//tools/distributions:system_repo.bzl",
+            "ruleClassName": "system_repo",
+            "attributes": {
+              "name": "_main~bazel_build_deps~debian_java_deps",
+              "symlinks": {
+                "java": "/usr/share/java"
+              },
+              "build_file": "@@//tools/distributions/debian:debian_java.BUILD"
+            }
+          },
+          "openjdk_linux_s390x_vanilla": {
+            "bzlFile": "@@//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "_main~bazel_build_deps~openjdk_linux_s390x_vanilla",
+              "sha256": "f2512f9a8e9847dd5d3557c39b485a8e7a1ef37b601dcbcb748d22e49f44815c",
+              "downloaded_file_path": "adoptopenjdk-s390x-vanilla.tar.gz",
+              "url": "https://github.com/adoptium/temurin19-binaries/releases/download/jdk-19.0.2%2B7/OpenJDK19U-jdk_s390x_linux_hotspot_19.0.2_7.tar.gz"
+            }
+          },
+          "bootstrap_repo_cache": {
+            "bzlFile": "@@//:distdir.bzl",
+            "ruleClassName": "repo_cache_tar",
+            "attributes": {
+              "name": "_main~bazel_build_deps~bootstrap_repo_cache",
+              "repos": [
+                "abseil-cpp~20230125.1",
+                "apple_support~1.5.0",
+                "bazel_skylib~1.4.1",
+                "blake3~1.3.3.bcr.1",
+                "c-ares~1.15.0",
+                "grpc~1.48.1.bcr.1",
+                "protobuf~21.7",
+                "stardoc~0.5.3",
+                "platforms",
+                "rules_cc~0.0.9",
+                "rules_go~0.39.1",
+                "rules_java~7.1.0",
+                "rules_jvm_external~5.2",
+                "rules_license~0.0.7",
+                "rules_pkg~0.9.1",
+                "rules_proto~5.3.0-21.7",
+                "rules_python~0.26.0",
+                "upb~0.0.0-20220923-a547704",
+                "zlib~1.3",
+                "zstd-jni~1.5.2-3.bcr.1",
+                "grpc~1.48.1.bcr.1~grpc_repo_deps_ext~bazel_gazelle",
+                "grpc~1.48.1.bcr.1~grpc_repo_deps_ext~bazel_skylib",
+                "grpc~1.48.1.bcr.1~grpc_repo_deps_ext~com_envoyproxy_protoc_gen_validate",
+                "grpc~1.48.1.bcr.1~grpc_repo_deps_ext~com_github_cncf_udpa",
+                "grpc~1.48.1.bcr.1~grpc_repo_deps_ext~com_google_googleapis",
+                "grpc~1.48.1.bcr.1~grpc_repo_deps_ext~envoy_api",
+                "grpc~1.48.1.bcr.1~grpc_repo_deps_ext~rules_cc"
+              ],
+              "dirname": "derived/repository_cache"
+            }
+          },
+          "debian_bin_deps": {
+            "bzlFile": "@@//tools/distributions:system_repo.bzl",
+            "ruleClassName": "system_repo",
+            "attributes": {
+              "name": "_main~bazel_build_deps~debian_bin_deps",
+              "symlinks": {
+                "protoc": "/usr/bin/protoc",
+                "grpc_cpp_plugin": "/usr/bin/grpc_cpp_plugin",
+                "grpc_java_plugin": "/usr/bin/grpc_java_plugin"
+              },
+              "build_file": "@@//tools/distributions/debian:debian_bin.BUILD"
+            }
+          },
+          "openjdk_win_arm64_vanilla": {
+            "bzlFile": "@@//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "_main~bazel_build_deps~openjdk_win_arm64_vanilla",
+              "sha256": "975603e684f2ec5a525b3b5336d6aa0b09b5b7d2d0d9e271bd6a9892ad550181",
+              "downloaded_file_path": "zulu-win-arm64.zip",
+              "url": "https://aka.ms/download-jdk/microsoft-jdk-21.0.0-windows-aarch64.zip"
+            }
+          },
+          "openjdk_linux_ppc64le_vanilla": {
+            "bzlFile": "@@//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "_main~bazel_build_deps~openjdk_linux_ppc64le_vanilla",
+              "sha256": "45dde71faf8cbb78fab3c976894259655c8d3de827347f23e0ebe5710921dded",
+              "downloaded_file_path": "adoptopenjdk-ppc64le-vanilla.tar.gz",
+              "url": "https://github.com/adoptium/temurin20-binaries/releases/download/jdk-20%2B36/OpenJDK20U-jdk_ppc64le_linux_hotspot_20_36.tar.gz"
+            }
+          },
+          "openjdk_macos_x86_64_vanilla": {
+            "bzlFile": "@@//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "_main~bazel_build_deps~openjdk_macos_x86_64_vanilla",
+              "sha256": "9639b87db586d0c89f7a9892ae47f421e442c64b97baebdff31788fbe23265bd",
+              "downloaded_file_path": "zulu-macos-vanilla.tar.gz",
+              "url": "https://cdn.azul.com/zulu/bin/zulu21.28.85-ca-jdk21.0.0-macosx_x64.tar.gz"
+            }
+          },
+          "workspace_repo_cache": {
+            "bzlFile": "@@//:distdir.bzl",
+            "ruleClassName": "_distdir_tar",
+            "attributes": {
+              "name": "_main~bazel_build_deps~workspace_repo_cache",
+              "archives": [
+                "rules_cc-0.0.9.tar.gz",
+                "rules_java-7.1.0.tar.gz",
+                "5.3.0-21.7.tar.gz",
+                "bazel-skylib-1.4.1.tar.gz",
+                "rules_license-0.0.7.tar.gz",
+                "rules_python-0.24.0.tar.gz",
+                "rules_pkg-0.9.1.tar.gz",
+                "rules_testing-v0.0.4.tar.gz",
+                "coverage_output_generator-v2.6.zip"
+              ],
+              "sha256": {
+                "rules_cc-0.0.9.tar.gz": "2037875b9a4456dce4a79d112a8ae885bbc4aad968e6587dca6e64f3a0900cdf",
+                "rules_java-7.1.0.tar.gz": "a37a4e5f63ab82716e5dd6aeef988ed8461c7a00b8e936272262899f587cd4e1",
+                "5.3.0-21.7.tar.gz": "dc3fb206a2cb3441b485eb1e423165b231235a1ea9b031b4433cf7bc1fa460dd",
+                "bazel-skylib-1.4.1.tar.gz": "b8a1527901774180afc798aeb28c4634bdccf19c4d98e7bdd1ce79d1fe9aaad7",
+                "rules_license-0.0.7.tar.gz": "4531deccb913639c30e5c7512a054d5d875698daeb75d8cf90f284375fe7c360",
+                "rules_python-0.24.0.tar.gz": "0a8003b044294d7840ac7d9d73eef05d6ceb682d7516781a4ec62eeb34702578",
+                "rules_pkg-0.9.1.tar.gz": "8f9ee2dc10c1ae514ee599a8b42ed99fa262b757058f65ad3c384289ff70c4b8",
+                "rules_testing-v0.0.4.tar.gz": "4e21f9aa7996944ce91431f27bca374bff56e680acfe497276074d56bc5d9af2",
+                "coverage_output_generator-v2.6.zip": "7006375f6756819b7013ca875eab70a541cf7d89142d9c511ed78ea4fefa38af"
+              },
+              "urls": {
+                "rules_cc-0.0.9.tar.gz": [
+                  "https://github.com/bazelbuild/rules_cc/releases/download/0.0.9/rules_cc-0.0.9.tar.gz"
+                ],
+                "rules_java-7.1.0.tar.gz": [
+                  "https://github.com/bazelbuild/rules_java/releases/download/7.1.0/rules_java-7.1.0.tar.gz"
+                ],
+                "5.3.0-21.7.tar.gz": [
+                  "https://github.com/bazelbuild/rules_proto/archive/refs/tags/5.3.0-21.7.tar.gz"
+                ],
+                "bazel-skylib-1.4.1.tar.gz": [
+                  "https://github.com/bazelbuild/bazel-skylib/releases/download/1.4.1/bazel-skylib-1.4.1.tar.gz"
+                ],
+                "rules_license-0.0.7.tar.gz": [
+                  "https://github.com/bazelbuild/rules_license/releases/download/0.0.7/rules_license-0.0.7.tar.gz"
+                ],
+                "rules_python-0.24.0.tar.gz": [
+                  "https://github.com/bazelbuild/rules_python/releases/download/0.24.0/rules_python-0.24.0.tar.gz"
+                ],
+                "rules_pkg-0.9.1.tar.gz": [
+                  "https://github.com/bazelbuild/rules_pkg/releases/download/0.9.1/rules_pkg-0.9.1.tar.gz"
+                ],
+                "rules_testing-v0.0.4.tar.gz": [
+                  "https://github.com/bazelbuild/rules_testing/releases/download/v0.0.4/rules_testing-v0.0.4.tar.gz"
+                ],
+                "coverage_output_generator-v2.6.zip": [
+                  "https://mirror.bazel.build/bazel_coverage_output_generator/releases/coverage_output_generator-v2.6.zip"
+                ]
+              }
+            }
+          },
+          "openjdk_win_vanilla": {
+            "bzlFile": "@@//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "_main~bazel_build_deps~openjdk_win_vanilla",
+              "sha256": "e9959d500a0d9a7694ac243baf657761479da132f0f94720cbffd092150bd802",
+              "downloaded_file_path": "zulu-win-vanilla.zip",
+              "url": "https://cdn.azul.com/zulu/bin/zulu21.28.85-ca-jdk21.0.0-win_x64.zip"
+            }
+          },
+          "openjdk_linux_aarch64_vanilla": {
+            "bzlFile": "@@//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "_main~bazel_build_deps~openjdk_linux_aarch64_vanilla",
+              "sha256": "1fb64b8036c5d463d8ab59af06bf5b6b006811e6012e3b0eb6bccf57f1c55835",
+              "downloaded_file_path": "zulu-linux-aarch64-vanilla.tar.gz",
+              "url": "https://cdn.azul.com/zulu/bin/zulu21.28.85-ca-jdk21.0.0-linux_aarch64.tar.gz"
+            }
+          },
+          "debian_proto_deps": {
+            "bzlFile": "@@//tools/distributions:system_repo.bzl",
+            "ruleClassName": "system_repo",
+            "attributes": {
+              "name": "_main~bazel_build_deps~debian_proto_deps",
+              "symlinks": {
+                "google/protobuf": "/usr/include/google/protobuf"
+              },
+              "build_file": "@@//tools/distributions/debian:debian_proto.BUILD"
+            }
+          }
+        }
+      }
+    },
+    "//:extensions.bzl%bazel_test_deps": {
+      "general": {
+        "bzlTransitiveDigest": "PjK+f/kxkhda9tRFlKVdGfNszPoXs7CDXZUi+ZGWGYU=",
+        "accumulatedFileDigests": {},
+        "envVariables": {},
+        "generatedRepoSpecs": {
+          "local_config_winsdk": {
+            "bzlFile": "@@//src/main/res:winsdk_configure.bzl",
+            "ruleClassName": "winsdk_configure",
+            "attributes": {
+              "name": "_main~bazel_test_deps~local_config_winsdk"
+            }
+          },
+          "local_bazel_source_list": {
+            "bzlFile": "@@//src/test/shell/bazel:list_source_repository.bzl",
+            "ruleClassName": "list_source_repository",
+            "attributes": {
+              "name": "_main~bazel_test_deps~local_bazel_source_list"
+            }
+          },
+          "bazelci_rules": {
+            "bzlFile": "@@//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "_main~bazel_test_deps~bazelci_rules",
+              "sha256": "eca21884e6f66a88c358e580fd67a6b148d30ab57b1680f62a96c00f9bc6a07e",
+              "strip_prefix": "bazelci_rules-1.0.0",
+              "url": "https://github.com/bazelbuild/continuous-integration/releases/download/rules-1.0.0/bazelci_rules-1.0.0.tar.gz"
+            }
+          }
+        }
+      }
+    },
+    "//:rbe_extension.bzl%bazel_rbe_deps": {
+      "general": {
+        "bzlTransitiveDigest": "oNMQ9KtzGcqNHdpe8zMO3lRAVIKWWDmz8n5SMubtIIc=",
+        "accumulatedFileDigests": {},
+        "envVariables": {},
+        "generatedRepoSpecs": {
+          "rbe_ubuntu2004_java11": {
+            "bzlFile": "@@_main~bazel_test_deps~bazelci_rules//:rbe_repo.bzl",
+            "ruleClassName": "rbe_preconfig",
+            "attributes": {
+              "name": "_main~bazel_rbe_deps~rbe_ubuntu2004_java11",
+              "toolchain": "ubuntu2004-bazel-java11"
+            }
+          }
+        }
+      }
+    },
+    "//tools/android:android_extensions.bzl%remote_android_tools_extensions": {
+      "general": {
+        "bzlTransitiveDigest": "iz3RFYDcsjupaT10sdSPAhA44WL3eDYkTEnYThllj1w=",
+        "accumulatedFileDigests": {},
+        "envVariables": {},
+        "generatedRepoSpecs": {
+          "android_tools": {
+            "bzlFile": "@@//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "_main~remote_android_tools_extensions~android_tools",
+              "sha256": "2b661a761a735b41c41b3a78089f4fc1982626c76ddb944604ae3ff8c545d3c2",
+              "url": "https://mirror.bazel.build/bazel_android_tools/android_tools_pkg-0.30.0.tar"
+            }
+          },
+          "android_gmaven_r8": {
+            "bzlFile": "@@//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_jar",
+            "attributes": {
+              "name": "_main~remote_android_tools_extensions~android_gmaven_r8",
+              "sha256": "57a696749695a09381a87bc2f08c3a8ed06a717a5caa3ef878a3077e0d3af19d",
+              "url": "https://maven.google.com/com/android/tools/r8/8.1.56/r8-8.1.56.jar"
+            }
+          }
+        }
+      }
+    },
+    "//tools/test:extensions.bzl%remote_coverage_tools_extension": {
+      "general": {
+        "bzlTransitiveDigest": "cizrA62cv8WUgb0cCmx5B6PRijtr/I4TAWxg/4caNGU=",
+        "accumulatedFileDigests": {},
+        "envVariables": {},
+        "generatedRepoSpecs": {
+          "remote_coverage_tools": {
+            "bzlFile": "@@//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "_main~remote_coverage_tools_extension~remote_coverage_tools",
+              "sha256": "7006375f6756819b7013ca875eab70a541cf7d89142d9c511ed78ea4fefa38af",
+              "urls": [
+                "https://mirror.bazel.build/bazel_coverage_output_generator/releases/coverage_output_generator-v2.6.zip"
+              ]
+            }
+          }
+        }
+      }
+    },
+    "@apple_support~1.5.0//crosstool:setup.bzl%apple_cc_configure_extension": {
+      "general": {
+        "bzlTransitiveDigest": "jHojdO5WHRVU9tk3Qspqa1HdHApA7p3vMRe5vEKWQkg=",
+        "accumulatedFileDigests": {},
+        "envVariables": {},
+        "generatedRepoSpecs": {
+          "local_config_apple_cc": {
+            "bzlFile": "@@apple_support~1.5.0//crosstool:setup.bzl",
+            "ruleClassName": "_apple_cc_autoconf",
+            "attributes": {
+              "name": "apple_support~1.5.0~apple_cc_configure_extension~local_config_apple_cc"
+            }
+          },
+          "local_config_apple_cc_toolchains": {
+            "bzlFile": "@@apple_support~1.5.0//crosstool:setup.bzl",
+            "ruleClassName": "_apple_cc_autoconf_toolchains",
+            "attributes": {
+              "name": "apple_support~1.5.0~apple_cc_configure_extension~local_config_apple_cc_toolchains"
+            }
+          }
+        }
+      }
+    },
+    "@bazel_features~1.1.0//private:extensions.bzl%version_extension": {
+      "general": {
+        "bzlTransitiveDigest": "LKmXjK1avT44pRhO3x6Hplu1mU9qrNOaHP+/tJ0VFfE=",
+        "accumulatedFileDigests": {},
+        "envVariables": {},
+        "generatedRepoSpecs": {
+          "bazel_features_version": {
+            "bzlFile": "@@bazel_features~1.1.0//private:version_repo.bzl",
+            "ruleClassName": "version_repo",
+            "attributes": {
+              "name": "bazel_features~1.1.0~version_extension~bazel_features_version"
+            }
+          },
+          "bazel_features_globals": {
+            "bzlFile": "@@bazel_features~1.1.0//private:globals_repo.bzl",
+            "ruleClassName": "globals_repo",
+            "attributes": {
+              "name": "bazel_features~1.1.0~version_extension~bazel_features_globals",
+              "globals": {
+                "RunEnvironmentInfo": "5.3.0",
+                "DefaultInfo": "0.0.1",
+                "__TestingOnly_NeverAvailable": "1000000000.0.0"
+              }
+            }
+          }
+        }
+      }
+    },
+    "@bazel_tools//tools/android:android_extensions.bzl%remote_android_tools_extensions": {
+      "general": {
+        "bzlTransitiveDigest": "4+Dj2H7maLh8JtpJKiuaI7PSXiIZw6oWX9xsVhnJ5DU=",
+        "accumulatedFileDigests": {},
+        "envVariables": {},
+        "generatedRepoSpecs": {
+          "android_tools": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "bazel_tools~remote_android_tools_extensions~android_tools",
+              "sha256": "1afa4b7e13c82523c8b69e87f8d598c891ec7e2baa41d9e24e08becd723edb4d",
+              "url": "https://mirror.bazel.build/bazel_android_tools/android_tools_pkg-0.27.0.tar.gz"
+            }
+          },
+          "android_gmaven_r8": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_jar",
+            "attributes": {
+              "name": "bazel_tools~remote_android_tools_extensions~android_gmaven_r8",
+              "sha256": "ab1379835c7d3e5f21f80347c3c81e2f762e0b9b02748ae5232c3afa14adf702",
+              "url": "https://maven.google.com/com/android/tools/r8/8.0.40/r8-8.0.40.jar"
+            }
+          }
+        }
+      }
+    },
+    "@bazel_tools//tools/cpp:cc_configure.bzl%cc_configure_extension": {
+      "general": {
+        "bzlTransitiveDigest": "sftnIlf92nP/IUiWiMkgL9Sh8Drk9kKhTXHvoavVJZg=",
+        "accumulatedFileDigests": {},
+        "envVariables": {},
+        "generatedRepoSpecs": {
+          "local_config_cc": {
+            "bzlFile": "@@bazel_tools//tools/cpp:cc_configure.bzl",
+            "ruleClassName": "cc_autoconf",
+            "attributes": {
+              "name": "bazel_tools~cc_configure_extension~local_config_cc"
+            }
+          },
+          "local_config_cc_toolchains": {
+            "bzlFile": "@@bazel_tools//tools/cpp:cc_configure.bzl",
+            "ruleClassName": "cc_autoconf_toolchains",
+            "attributes": {
+              "name": "bazel_tools~cc_configure_extension~local_config_cc_toolchains"
+            }
+          }
+        }
+      }
+    },
+    "@bazel_tools//tools/osx:xcode_configure.bzl%xcode_configure_extension": {
+      "general": {
+        "bzlTransitiveDigest": "CtmyZVPtInM72JKIFfarSKOF0R/GbDRl8HBuOsRWhRs=",
+        "accumulatedFileDigests": {},
+        "envVariables": {},
+        "generatedRepoSpecs": {
+          "local_config_xcode": {
+            "bzlFile": "@@bazel_tools//tools/osx:xcode_configure.bzl",
+            "ruleClassName": "xcode_autoconf",
+            "attributes": {
+              "name": "bazel_tools~xcode_configure_extension~local_config_xcode",
+              "xcode_locator": "@bazel_tools//tools/osx:xcode_locator.m",
+              "remote_xcode": ""
+            }
+          }
+        }
+      }
+    },
+    "@bazel_tools//tools/sh:sh_configure.bzl%sh_configure_extension": {
+      "general": {
+        "bzlTransitiveDigest": "hp4NgmNjEg5+xgvzfh6L83bt9/aiiWETuNpwNuF1MSU=",
+        "accumulatedFileDigests": {},
+        "envVariables": {},
+        "generatedRepoSpecs": {
+          "local_config_sh": {
+            "bzlFile": "@@bazel_tools//tools/sh:sh_configure.bzl",
+            "ruleClassName": "sh_config",
+            "attributes": {
+              "name": "bazel_tools~sh_configure_extension~local_config_sh"
+            }
+          }
+        }
+      }
+    },
+    "@bazel_tools//tools/test:extensions.bzl%remote_coverage_tools_extension": {
+      "general": {
+        "bzlTransitiveDigest": "IWFtZ+6M0WGmNpfnHZMxnVFSDZ6pRTEWt7jixp7XffQ=",
+        "accumulatedFileDigests": {},
+        "envVariables": {},
+        "generatedRepoSpecs": {
+          "remote_coverage_tools": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "bazel_tools~remote_coverage_tools_extension~remote_coverage_tools",
+              "sha256": "7006375f6756819b7013ca875eab70a541cf7d89142d9c511ed78ea4fefa38af",
+              "urls": [
+                "https://mirror.bazel.build/bazel_coverage_output_generator/releases/coverage_output_generator-v2.6.zip"
+              ]
+            }
+          }
+        }
+      }
+    },
+    "@gazelle~0.30.0//:extensions.bzl%go_deps": {
+      "general": {
+        "bzlTransitiveDigest": "BoYvkoiu4JJx2ptGuMiFUuXn9wupdeJIWbn2MXOkBb8=",
+        "accumulatedFileDigests": {
+          "@@rules_go~0.39.1//:go.sum": "022d36c9ebcc7b5dee1e9b85b3da9c9f3a529ee6f979946d66e4955b8d54614a",
+          "@@rules_go~0.39.1//:go.mod": "a7143f329c2a3e0b983ce74a96c0c25b0d0c59d236d75f7e1b069aadd988d55e",
+          "@@gazelle~0.30.0//:go.sum": "c9624aa41e5ffd61a8581d57a3c4046e62b46630dddc8b191e65017f34ff12a5",
+          "@@gazelle~0.30.0//:go.mod": "5346019bf0673364b383d56ffbc9fced98b7b4ee921e865dfe905a1ebe82d326"
+        },
+        "envVariables": {},
+        "generatedRepoSpecs": {
+          "com_github_fsnotify_fsnotify": {
+            "bzlFile": "@@gazelle~0.30.0//internal:go_repository.bzl",
+            "ruleClassName": "go_repository",
+            "attributes": {
+              "name": "gazelle~0.30.0~go_deps~com_github_fsnotify_fsnotify",
+              "importpath": "github.com/fsnotify/fsnotify",
+              "sum": "h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY=",
+              "replace": "",
+              "version": "v1.6.0",
+              "build_directives": []
+            }
+          },
+          "org_golang_x_text": {
+            "bzlFile": "@@gazelle~0.30.0//internal:go_repository.bzl",
+            "ruleClassName": "go_repository",
+            "attributes": {
+              "name": "gazelle~0.30.0~go_deps~org_golang_x_text",
+              "importpath": "golang.org/x/text",
+              "sum": "h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k=",
+              "replace": "",
+              "version": "v0.3.3",
+              "build_directives": []
+            }
+          },
+          "org_golang_google_protobuf": {
+            "bzlFile": "@@gazelle~0.30.0//internal:go_repository.bzl",
+            "ruleClassName": "go_repository",
+            "attributes": {
+              "name": "gazelle~0.30.0~go_deps~org_golang_google_protobuf",
+              "importpath": "google.golang.org/protobuf",
+              "sum": "h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw=",
+              "replace": "",
+              "version": "v1.28.0",
+              "build_directives": []
+            }
+          },
+          "com_github_bmatcuk_doublestar_v4": {
+            "bzlFile": "@@gazelle~0.30.0//internal:go_repository.bzl",
+            "ruleClassName": "go_repository",
+            "attributes": {
+              "name": "gazelle~0.30.0~go_deps~com_github_bmatcuk_doublestar_v4",
+              "importpath": "github.com/bmatcuk/doublestar/v4",
+              "sum": "h1:HTuxyug8GyFbRkrffIpzNCSK4luc0TY3wzXvzIZhEXc=",
+              "replace": "",
+              "version": "v4.6.0",
+              "build_directives": []
+            }
+          },
+          "com_github_pmezard_go_difflib": {
+            "bzlFile": "@@gazelle~0.30.0//internal:go_repository.bzl",
+            "ruleClassName": "go_repository",
+            "attributes": {
+              "name": "gazelle~0.30.0~go_deps~com_github_pmezard_go_difflib",
+              "importpath": "github.com/pmezard/go-difflib",
+              "sum": "h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=",
+              "replace": "",
+              "version": "v1.0.0",
+              "build_directives": []
+            }
+          },
+          "org_golang_x_mod": {
+            "bzlFile": "@@gazelle~0.30.0//internal:go_repository.bzl",
+            "ruleClassName": "go_repository",
+            "attributes": {
+              "name": "gazelle~0.30.0~go_deps~org_golang_x_mod",
+              "importpath": "golang.org/x/mod",
+              "sum": "h1:KENHtAZL2y3NLMYZeHY9DW8HW8V+kQyJsY/V9JlKvCs=",
+              "replace": "",
+              "version": "v0.9.0",
+              "build_directives": []
+            }
+          },
+          "org_golang_x_tools": {
+            "bzlFile": "@@gazelle~0.30.0//internal:go_repository.bzl",
+            "ruleClassName": "go_repository",
+            "attributes": {
+              "name": "gazelle~0.30.0~go_deps~org_golang_x_tools",
+              "importpath": "golang.org/x/tools",
+              "sum": "h1:W4OVu8VVOaIO0yzWMNdepAulS7YfoS3Zabrm8DOXXU4=",
+              "replace": "",
+              "version": "v0.7.0",
+              "build_directives": []
+            }
+          },
+          "org_golang_x_net": {
+            "bzlFile": "@@gazelle~0.30.0//internal:go_repository.bzl",
+            "ruleClassName": "go_repository",
+            "attributes": {
+              "name": "gazelle~0.30.0~go_deps~org_golang_x_net",
+              "importpath": "golang.org/x/net",
+              "sum": "h1:4nGaVu0QrbjT/AK2PRLuQfQuh6DJve+pELhqTdAj3x0=",
+              "replace": "",
+              "version": "v0.0.0-20210405180319-a5a99cb37ef4",
+              "build_directives": []
+            }
+          },
+          "com_github_bazelbuild_buildtools": {
+            "bzlFile": "@@gazelle~0.30.0//internal:go_repository.bzl",
+            "ruleClassName": "go_repository",
+            "attributes": {
+              "name": "gazelle~0.30.0~go_deps~com_github_bazelbuild_buildtools",
+              "importpath": "github.com/bazelbuild/buildtools",
+              "sum": "h1:XmPu4mXICgdGnC5dXGjUGbwUD/kUmS0l5Aop3LaevBM=",
+              "replace": "",
+              "version": "v0.0.0-20230317132445-9c3c1fc0106e",
+              "build_directives": []
+            }
+          },
+          "org_golang_google_genproto": {
+            "bzlFile": "@@gazelle~0.30.0//internal:go_repository.bzl",
+            "ruleClassName": "go_repository",
+            "attributes": {
+              "name": "gazelle~0.30.0~go_deps~org_golang_google_genproto",
+              "importpath": "google.golang.org/genproto",
+              "sum": "h1:+kGHl1aib/qcwaRi1CbqBZ1rk19r85MNUf8HaBghugY=",
+              "replace": "",
+              "version": "v0.0.0-20200526211855-cb27e3aa2013",
+              "build_directives": []
+            }
+          },
+          "com_github_gogo_protobuf": {
+            "bzlFile": "@@gazelle~0.30.0//internal:go_repository.bzl",
+            "ruleClassName": "go_repository",
+            "attributes": {
+              "name": "gazelle~0.30.0~go_deps~com_github_gogo_protobuf",
+              "importpath": "github.com/gogo/protobuf",
+              "sum": "h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=",
+              "replace": "",
+              "version": "v1.3.2",
+              "build_directives": [
+                "gazelle:proto disable"
+              ]
+            }
+          },
+          "com_github_pelletier_go_toml": {
+            "bzlFile": "@@gazelle~0.30.0//internal:go_repository.bzl",
+            "ruleClassName": "go_repository",
+            "attributes": {
+              "name": "gazelle~0.30.0~go_deps~com_github_pelletier_go_toml",
+              "importpath": "github.com/pelletier/go-toml",
+              "sum": "h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8=",
+              "replace": "",
+              "version": "v1.9.5",
+              "build_directives": []
+            }
+          },
+          "com_github_golang_protobuf": {
+            "bzlFile": "@@gazelle~0.30.0//internal:go_repository.bzl",
+            "ruleClassName": "go_repository",
+            "attributes": {
+              "name": "gazelle~0.30.0~go_deps~com_github_golang_protobuf",
+              "importpath": "github.com/golang/protobuf",
+              "sum": "h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=",
+              "replace": "",
+              "version": "v1.5.2",
+              "build_directives": []
+            }
+          },
+          "com_github_golang_mock": {
+            "bzlFile": "@@gazelle~0.30.0//internal:go_repository.bzl",
+            "ruleClassName": "go_repository",
+            "attributes": {
+              "name": "gazelle~0.30.0~go_deps~com_github_golang_mock",
+              "importpath": "github.com/golang/mock",
+              "sum": "h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc=",
+              "replace": "",
+              "version": "v1.6.0",
+              "build_directives": []
+            }
+          },
+          "org_golang_x_sync": {
+            "bzlFile": "@@gazelle~0.30.0//internal:go_repository.bzl",
+            "ruleClassName": "go_repository",
+            "attributes": {
+              "name": "gazelle~0.30.0~go_deps~org_golang_x_sync",
+              "importpath": "golang.org/x/sync",
+              "sum": "h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o=",
+              "replace": "",
+              "version": "v0.1.0",
+              "build_directives": []
+            }
+          },
+          "bazel_gazelle_go_repository_config": {
+            "bzlFile": "@@gazelle~0.30.0//internal/bzlmod:go_deps.bzl",
+            "ruleClassName": "_go_repository_config",
+            "attributes": {
+              "name": "gazelle~0.30.0~go_deps~bazel_gazelle_go_repository_config",
+              "importpaths": {
+                "com_github_gogo_protobuf": "github.com/gogo/protobuf",
+                "com_github_golang_mock": "github.com/golang/mock",
+                "com_github_golang_protobuf": "github.com/golang/protobuf",
+                "org_golang_google_protobuf": "google.golang.org/protobuf",
+                "org_golang_x_net": "golang.org/x/net",
+                "org_golang_x_sys": "golang.org/x/sys",
+                "org_golang_x_text": "golang.org/x/text",
+                "org_golang_google_genproto": "google.golang.org/genproto",
+                "org_golang_google_grpc": "google.golang.org/grpc",
+                "com_github_bazelbuild_buildtools": "github.com/bazelbuild/buildtools",
+                "com_github_bmatcuk_doublestar_v4": "github.com/bmatcuk/doublestar/v4",
+                "com_github_fsnotify_fsnotify": "github.com/fsnotify/fsnotify",
+                "com_github_google_go_cmp": "github.com/google/go-cmp",
+                "com_github_pelletier_go_toml": "github.com/pelletier/go-toml",
+                "com_github_pmezard_go_difflib": "github.com/pmezard/go-difflib",
+                "org_golang_x_mod": "golang.org/x/mod",
+                "org_golang_x_sync": "golang.org/x/sync",
+                "org_golang_x_tools": "golang.org/x/tools"
+              },
+              "build_naming_conventions": {}
+            }
+          },
+          "org_golang_google_grpc": {
+            "bzlFile": "@@gazelle~0.30.0//internal:go_repository.bzl",
+            "ruleClassName": "go_repository",
+            "attributes": {
+              "name": "gazelle~0.30.0~go_deps~org_golang_google_grpc",
+              "importpath": "google.golang.org/grpc",
+              "sum": "h1:fPVVDxY9w++VjTZsYvXWqEf9Rqar/e+9zYfxKK+W+YU=",
+              "replace": "",
+              "version": "v1.50.0",
+              "build_directives": [
+                "gazelle:proto disable"
+              ]
+            }
+          },
+          "org_golang_x_sys": {
+            "bzlFile": "@@gazelle~0.30.0//internal:go_repository.bzl",
+            "ruleClassName": "go_repository",
+            "attributes": {
+              "name": "gazelle~0.30.0~go_deps~org_golang_x_sys",
+              "importpath": "golang.org/x/sys",
+              "sum": "h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ=",
+              "replace": "",
+              "version": "v0.6.0",
+              "build_directives": []
+            }
+          },
+          "com_github_google_go_cmp": {
+            "bzlFile": "@@gazelle~0.30.0//internal:go_repository.bzl",
+            "ruleClassName": "go_repository",
+            "attributes": {
+              "name": "gazelle~0.30.0~go_deps~com_github_google_go_cmp",
+              "importpath": "github.com/google/go-cmp",
+              "sum": "h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=",
+              "replace": "",
+              "version": "v0.5.9",
+              "build_directives": []
+            }
+          }
+        }
+      }
+    },
+    "@gazelle~0.30.0//internal/bzlmod:non_module_deps.bzl%non_module_deps": {
+      "general": {
+        "bzlTransitiveDigest": "30wev+wJfzc4s72MCfbP9U8W+3Js2b+Xbo5ofgZbHw8=",
+        "accumulatedFileDigests": {},
+        "envVariables": {},
+        "generatedRepoSpecs": {
+          "bazel_gazelle_go_repository_tools": {
+            "bzlFile": "@@gazelle~0.30.0//internal:go_repository_tools.bzl",
+            "ruleClassName": "go_repository_tools",
+            "attributes": {
+              "name": "gazelle~0.30.0~non_module_deps~bazel_gazelle_go_repository_tools",
+              "go_cache": "@@gazelle~0.30.0~non_module_deps~bazel_gazelle_go_repository_cache//:go.env"
+            }
+          },
+          "bazel_gazelle_go_repository_cache": {
+            "bzlFile": "@@gazelle~0.30.0//internal:go_repository_cache.bzl",
+            "ruleClassName": "go_repository_cache",
+            "attributes": {
+              "name": "gazelle~0.30.0~non_module_deps~bazel_gazelle_go_repository_cache",
+              "go_sdk_name": "go_default_sdk",
+              "go_env": {}
+            }
+          }
+        }
+      }
+    },
+    "@grpc~1.48.1.bcr.1//bazel:grpc_deps.bzl%grpc_repo_deps_ext": {
+      "general": {
+        "bzlTransitiveDigest": "S5rdtWt3QVZgX2cP/Ot1NLUmlqgtcoz1cPNksEQYtFQ=",
+        "accumulatedFileDigests": {},
+        "envVariables": {},
+        "generatedRepoSpecs": {
+          "io_opencensus_cpp": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "grpc~1.48.1.bcr.1~grpc_repo_deps_ext~io_opencensus_cpp",
+              "sha256": "90d6fafa8b1a2ea613bf662731d3086e1c2ed286f458a95c81744df2dbae41b1",
+              "strip_prefix": "opencensus-cpp-c9a4da319bc669a772928ffc55af4a61be1a1176",
+              "urls": [
+                "https://storage.googleapis.com/grpc-bazel-mirror/github.com/census-instrumentation/opencensus-cpp/archive/c9a4da319bc669a772928ffc55af4a61be1a1176.tar.gz",
+                "https://github.com/census-instrumentation/opencensus-cpp/archive/c9a4da319bc669a772928ffc55af4a61be1a1176.tar.gz"
+              ]
+            }
+          },
+          "com_github_libuv_libuv": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "grpc~1.48.1.bcr.1~grpc_repo_deps_ext~com_github_libuv_libuv",
+              "build_file": "@@grpc~1.48.1.bcr.1//third_party:libuv.BUILD",
+              "sha256": "5ca4e9091f3231d8ad8801862dc4e851c23af89c69141d27723157776f7291e7",
+              "strip_prefix": "libuv-02a9e1be252b623ee032a3137c0b0c94afbe6809",
+              "urls": [
+                "https://storage.googleapis.com/grpc-bazel-mirror/github.com/libuv/libuv/archive/02a9e1be252b623ee032a3137c0b0c94afbe6809.tar.gz",
+                "https://github.com/libuv/libuv/archive/02a9e1be252b623ee032a3137c0b0c94afbe6809.tar.gz"
+              ]
+            }
+          },
+          "com_google_googleapis": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "grpc~1.48.1.bcr.1~grpc_repo_deps_ext~com_google_googleapis",
+              "sha256": "5bb6b0253ccf64b53d6c7249625a7e3f6c3bc6402abd52d3778bfa48258703a0",
+              "strip_prefix": "googleapis-2f9af297c84c55c8b871ba4495e01ade42476c92",
+              "urls": [
+                "https://storage.googleapis.com/grpc-bazel-mirror/github.com/googleapis/googleapis/archive/2f9af297c84c55c8b871ba4495e01ade42476c92.tar.gz",
+                "https://github.com/googleapis/googleapis/archive/2f9af297c84c55c8b871ba4495e01ade42476c92.tar.gz"
+              ]
+            }
+          },
+          "upb": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "grpc~1.48.1.bcr.1~grpc_repo_deps_ext~upb",
+              "sha256": "d0fe259d650bf9547e75896a1307bfc7034195e4ae89f5139814d295991ba681",
+              "strip_prefix": "upb-bef53686ec702607971bd3ea4d4fefd80c6cc6e8",
+              "urls": [
+                "https://storage.googleapis.com/grpc-bazel-mirror/github.com/protocolbuffers/upb/archive/bef53686ec702607971bd3ea4d4fefd80c6cc6e8.tar.gz",
+                "https://github.com/protocolbuffers/upb/archive/bef53686ec702607971bd3ea4d4fefd80c6cc6e8.tar.gz"
+              ]
+            }
+          },
+          "rules_cc": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "grpc~1.48.1.bcr.1~grpc_repo_deps_ext~rules_cc",
+              "sha256": "35f2fb4ea0b3e61ad64a369de284e4fbbdcdba71836a5555abb5e194cf119509",
+              "strip_prefix": "rules_cc-624b5d59dfb45672d4239422fa1e3de1822ee110",
+              "urls": [
+                "https://storage.googleapis.com/grpc-bazel-mirror/github.com/bazelbuild/rules_cc/archive/624b5d59dfb45672d4239422fa1e3de1822ee110.tar.gz",
+                "https://github.com/bazelbuild/rules_cc/archive/624b5d59dfb45672d4239422fa1e3de1822ee110.tar.gz"
+              ]
+            }
+          },
+          "boringssl": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "grpc~1.48.1.bcr.1~grpc_repo_deps_ext~boringssl",
+              "sha256": "534fa658bd845fd974b50b10f444d392dfd0d93768c4a51b61263fd37d851c40",
+              "strip_prefix": "boringssl-b9232f9e27e5668bc0414879dcdedb2a59ea75f2",
+              "urls": [
+                "https://storage.googleapis.com/grpc-bazel-mirror/github.com/google/boringssl/archive/b9232f9e27e5668bc0414879dcdedb2a59ea75f2.tar.gz",
+                "https://github.com/google/boringssl/archive/b9232f9e27e5668bc0414879dcdedb2a59ea75f2.tar.gz"
+              ]
+            }
+          },
+          "bazel_gazelle": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "grpc~1.48.1.bcr.1~grpc_repo_deps_ext~bazel_gazelle",
+              "sha256": "de69a09dc70417580aabf20a28619bb3ef60d038470c7cf8442fafcf627c21cb",
+              "urls": [
+                "https://mirror.bazel.build/github.com/bazelbuild/bazel-gazelle/releases/download/v0.24.0/bazel-gazelle-v0.24.0.tar.gz",
+                "https://github.com/bazelbuild/bazel-gazelle/releases/download/v0.24.0/bazel-gazelle-v0.24.0.tar.gz"
+              ]
+            }
+          },
+          "opencensus_proto": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "grpc~1.48.1.bcr.1~grpc_repo_deps_ext~opencensus_proto",
+              "sha256": "b7e13f0b4259e80c3070b583c2f39e53153085a6918718b1c710caf7037572b0",
+              "strip_prefix": "opencensus-proto-0.3.0/src",
+              "urls": [
+                "https://storage.googleapis.com/grpc-bazel-mirror/github.com/census-instrumentation/opencensus-proto/archive/v0.3.0.tar.gz",
+                "https://github.com/census-instrumentation/opencensus-proto/archive/v0.3.0.tar.gz"
+              ],
+              "patches": [
+                "@@grpc~1.48.1.bcr.1//third_party:opencensus-proto.patch"
+              ],
+              "patch_args": [
+                "-p2"
+              ]
+            }
+          },
+          "com_googlesource_code_re2": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "grpc~1.48.1.bcr.1~grpc_repo_deps_ext~com_googlesource_code_re2",
+              "sha256": "319a58a58d8af295db97dfeecc4e250179c5966beaa2d842a82f0a013b6a239b",
+              "strip_prefix": "re2-8e08f47b11b413302749c0d8b17a1c94777495d5",
+              "urls": [
+                "https://storage.googleapis.com/grpc-bazel-mirror/github.com/google/re2/archive/8e08f47b11b413302749c0d8b17a1c94777495d5.tar.gz",
+                "https://github.com/google/re2/archive/8e08f47b11b413302749c0d8b17a1c94777495d5.tar.gz"
+              ]
+            }
+          },
+          "bazel_skylib": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "grpc~1.48.1.bcr.1~grpc_repo_deps_ext~bazel_skylib",
+              "urls": [
+                "https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/releases/download/1.0.2/bazel-skylib-1.0.2.tar.gz",
+                "https://github.com/bazelbuild/bazel-skylib/releases/download/1.0.2/bazel-skylib-1.0.2.tar.gz"
+              ],
+              "sha256": "97e70364e9249702246c0e9444bccdc4b847bed1eb03c5a3ece4f83dfe6abc44"
+            }
+          },
+          "com_github_cares_cares": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "grpc~1.48.1.bcr.1~grpc_repo_deps_ext~com_github_cares_cares",
+              "build_file": "@@grpc~1.48.1.bcr.1//third_party:cares/cares.BUILD",
+              "sha256": "ec76c5e79db59762776bece58b69507d095856c37b81fd35bfb0958e74b61d93",
+              "strip_prefix": "c-ares-6654436a307a5a686b008c1d4c93b0085da6e6d8",
+              "urls": [
+                "https://storage.googleapis.com/grpc-bazel-mirror/github.com/c-ares/c-ares/archive/6654436a307a5a686b008c1d4c93b0085da6e6d8.tar.gz",
+                "https://github.com/c-ares/c-ares/archive/6654436a307a5a686b008c1d4c93b0085da6e6d8.tar.gz"
+              ]
+            }
+          },
+          "build_bazel_apple_support": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "grpc~1.48.1.bcr.1~grpc_repo_deps_ext~build_bazel_apple_support",
+              "sha256": "76df040ade90836ff5543888d64616e7ba6c3a7b33b916aa3a4b68f342d1b447",
+              "urls": [
+                "https://storage.googleapis.com/grpc-bazel-mirror/github.com/bazelbuild/apple_support/releases/download/0.11.0/apple_support.0.11.0.tar.gz",
+                "https://github.com/bazelbuild/apple_support/releases/download/0.11.0/apple_support.0.11.0.tar.gz"
+              ]
+            }
+          },
+          "zlib": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "grpc~1.48.1.bcr.1~grpc_repo_deps_ext~zlib",
+              "build_file": "@@grpc~1.48.1.bcr.1//third_party:zlib.BUILD",
+              "sha256": "ef47b0fbe646d69a2fc5ba012cb278de8e8946a8e9649f83a807cc05559f0eff",
+              "strip_prefix": "zlib-21767c654d31d2dccdde4330529775c6c5fd5389",
+              "urls": [
+                "https://storage.googleapis.com/grpc-bazel-mirror/github.com/madler/zlib/archive/21767c654d31d2dccdde4330529775c6c5fd5389.tar.gz",
+                "https://github.com/madler/zlib/archive/21767c654d31d2dccdde4330529775c6c5fd5389.tar.gz"
+              ]
+            }
+          },
+          "com_google_googletest": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "grpc~1.48.1.bcr.1~grpc_repo_deps_ext~com_google_googletest",
+              "sha256": "c8de6c60e12ad014a28225c5247ee735861d85cf906df617f6a29954ca05f547",
+              "strip_prefix": "googletest-0e402173c97aea7a00749e825b194bfede4f2e45",
+              "urls": [
+                "https://github.com/google/googletest/archive/0e402173c97aea7a00749e825b194bfede4f2e45.tar.gz"
+              ]
+            }
+          },
+          "envoy_api": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "grpc~1.48.1.bcr.1~grpc_repo_deps_ext~envoy_api",
+              "sha256": "c5807010b67033330915ca5a20483e30538ae5e689aa14b3631d6284beca4630",
+              "strip_prefix": "data-plane-api-9c42588c956220b48eb3099d186487c2f04d32ec",
+              "urls": [
+                "https://storage.googleapis.com/grpc-bazel-mirror/github.com/envoyproxy/data-plane-api/archive/9c42588c956220b48eb3099d186487c2f04d32ec.tar.gz",
+                "https://github.com/envoyproxy/data-plane-api/archive/9c42588c956220b48eb3099d186487c2f04d32ec.tar.gz"
+              ]
+            }
+          },
+          "build_bazel_rules_apple": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "grpc~1.48.1.bcr.1~grpc_repo_deps_ext~build_bazel_rules_apple",
+              "sha256": "0052d452af7742c8f3a4e0929763388a66403de363775db7e90adecb2ba4944b",
+              "urls": [
+                "https://storage.googleapis.com/grpc-bazel-mirror/github.com/bazelbuild/rules_apple/releases/download/0.31.3/rules_apple.0.31.3.tar.gz",
+                "https://github.com/bazelbuild/rules_apple/releases/download/0.31.3/rules_apple.0.31.3.tar.gz"
+              ]
+            }
+          },
+          "com_github_cncf_udpa": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "grpc~1.48.1.bcr.1~grpc_repo_deps_ext~com_github_cncf_udpa",
+              "sha256": "5bc8365613fe2f8ce6cc33959b7667b13b7fe56cb9d16ba740c06e1a7c4242fc",
+              "strip_prefix": "xds-cb28da3451f158a947dfc45090fe92b07b243bc1",
+              "urls": [
+                "https://storage.googleapis.com/grpc-bazel-mirror/github.com/cncf/xds/archive/cb28da3451f158a947dfc45090fe92b07b243bc1.tar.gz",
+                "https://github.com/cncf/xds/archive/cb28da3451f158a947dfc45090fe92b07b243bc1.tar.gz"
+              ]
+            }
+          },
+          "com_github_google_benchmark": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "grpc~1.48.1.bcr.1~grpc_repo_deps_ext~com_github_google_benchmark",
+              "sha256": "0b921a3bc39e35f4275c8dcc658af2391c150fb966102341287b0401ff2e6f21",
+              "strip_prefix": "benchmark-0baacde3618ca617da95375e0af13ce1baadea47",
+              "urls": [
+                "https://storage.googleapis.com/grpc-bazel-mirror/github.com/google/benchmark/archive/0baacde3618ca617da95375e0af13ce1baadea47.tar.gz",
+                "https://github.com/google/benchmark/archive/0baacde3618ca617da95375e0af13ce1baadea47.tar.gz"
+              ]
+            }
+          },
+          "com_envoyproxy_protoc_gen_validate": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "grpc~1.48.1.bcr.1~grpc_repo_deps_ext~com_envoyproxy_protoc_gen_validate",
+              "strip_prefix": "protoc-gen-validate-4694024279bdac52b77e22dc87808bd0fd732b69",
+              "sha256": "1e490b98005664d149b379a9529a6aa05932b8a11b76b4cd86f3d22d76346f47",
+              "urls": [
+                "https://github.com/envoyproxy/protoc-gen-validate/archive/4694024279bdac52b77e22dc87808bd0fd732b69.tar.gz"
+              ],
+              "patches": [
+                "@@grpc~1.48.1.bcr.1//third_party:protoc-gen-validate.patch"
+              ],
+              "patch_args": [
+                "-p1"
+              ]
+            }
+          },
+          "com_google_absl": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "grpc~1.48.1.bcr.1~grpc_repo_deps_ext~com_google_absl",
+              "sha256": "4208129b49006089ba1d6710845a45e31c59b0ab6bff9e5788a87f55c5abd602",
+              "strip_prefix": "abseil-cpp-20220623.0",
+              "urls": [
+                "https://storage.googleapis.com/grpc-bazel-mirror/github.com/abseil/abseil-cpp/archive/20220623.0.tar.gz",
+                "https://github.com/abseil/abseil-cpp/archive/20220623.0.tar.gz"
+              ]
+            }
+          },
+          "bazel_toolchains": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "grpc~1.48.1.bcr.1~grpc_repo_deps_ext~bazel_toolchains",
+              "sha256": "179ec02f809e86abf56356d8898c8bd74069f1bd7c56044050c2cd3d79d0e024",
+              "strip_prefix": "bazel-toolchains-4.1.0",
+              "urls": [
+                "https://mirror.bazel.build/github.com/bazelbuild/bazel-toolchains/releases/download/4.1.0/bazel-toolchains-4.1.0.tar.gz",
+                "https://github.com/bazelbuild/bazel-toolchains/releases/download/4.1.0/bazel-toolchains-4.1.0.tar.gz"
+              ]
+            }
+          },
+          "bazel_compdb": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "grpc~1.48.1.bcr.1~grpc_repo_deps_ext~bazel_compdb",
+              "sha256": "bcecfd622c4ef272fd4ba42726a52e140b961c4eac23025f18b346c968a8cfb4",
+              "strip_prefix": "bazel-compilation-database-0.4.5",
+              "urls": [
+                "https://storage.googleapis.com/grpc-bazel-mirror/github.com/grailbio/bazel-compilation-database/archive/0.4.5.tar.gz",
+                "https://github.com/grailbio/bazel-compilation-database/archive/0.4.5.tar.gz"
+              ]
+            }
+          }
+        }
+      }
+    },
+    "@grpc~1.48.1.bcr.1//bazel:grpc_extra_deps.bzl%grpc_extra_deps_ext": {
+      "general": {
+        "bzlTransitiveDigest": "ALqwntEqKRNf03LlwK9t4Oh/flVzCF6ZWFL9xTX69uI=",
+        "accumulatedFileDigests": {},
+        "envVariables": {},
+        "generatedRepoSpecs": {
+          "com_google_googleapis_imports": {
+            "bzlFile": "@@grpc~1.48.1.bcr.1~grpc_repo_deps_ext~com_google_googleapis//:repository_rules.bzl",
+            "ruleClassName": "switched_rules",
+            "attributes": {
+              "name": "grpc~1.48.1.bcr.1~grpc_extra_deps_ext~com_google_googleapis_imports",
+              "rules": {
+                "proto_library_with_info": [
+                  "",
+                  ""
+                ],
+                "moved_proto_library": [
+                  "",
+                  ""
+                ],
+                "java_proto_library": [
+                  "",
+                  ""
+                ],
+                "java_grpc_library": [
+                  "",
+                  ""
+                ],
+                "java_gapic_library": [
+                  "",
+                  ""
+                ],
+                "java_gapic_test": [
+                  "",
+                  ""
+                ],
+                "java_gapic_assembly_gradle_pkg": [
+                  "",
+                  ""
+                ],
+                "py_proto_library": [
+                  "@com_github_grpc_grpc//bazel:python_rules.bzl",
+                  ""
+                ],
+                "py_grpc_library": [
+                  "@com_github_grpc_grpc//bazel:python_rules.bzl",
+                  ""
+                ],
+                "py_gapic_library": [
+                  "",
+                  ""
+                ],
+                "py_gapic_assembly_pkg": [
+                  "",
+                  ""
+                ],
+                "go_proto_library": [
+                  "",
+                  ""
+                ],
+                "go_library": [
+                  "",
+                  ""
+                ],
+                "go_test": [
+                  "",
+                  ""
+                ],
+                "go_gapic_library": [
+                  "",
+                  ""
+                ],
+                "go_gapic_assembly_pkg": [
+                  "",
+                  ""
+                ],
+                "cc_proto_library": [
+                  "native.cc_proto_library",
+                  ""
+                ],
+                "cc_grpc_library": [
+                  "@com_github_grpc_grpc//bazel:cc_grpc_library.bzl",
+                  ""
+                ],
+                "cc_gapic_library": [
+                  "",
+                  ""
+                ],
+                "php_proto_library": [
+                  "",
+                  "php_proto_library"
+                ],
+                "php_grpc_library": [
+                  "",
+                  "php_grpc_library"
+                ],
+                "php_gapic_library": [
+                  "",
+                  "php_gapic_library"
+                ],
+                "php_gapic_assembly_pkg": [
+                  "",
+                  "php_gapic_assembly_pkg"
+                ],
+                "nodejs_gapic_library": [
+                  "",
+                  "typescript_gapic_library"
+                ],
+                "nodejs_gapic_assembly_pkg": [
+                  "",
+                  "typescript_gapic_assembly_pkg"
+                ],
+                "ruby_proto_library": [
+                  "",
+                  ""
+                ],
+                "ruby_grpc_library": [
+                  "",
+                  ""
+                ],
+                "ruby_ads_gapic_library": [
+                  "",
+                  ""
+                ],
+                "ruby_cloud_gapic_library": [
+                  "",
+                  ""
+                ],
+                "ruby_gapic_assembly_pkg": [
+                  "",
+                  ""
+                ],
+                "csharp_proto_library": [
+                  "",
+                  ""
+                ],
+                "csharp_grpc_library": [
+                  "",
+                  ""
+                ],
+                "csharp_gapic_library": [
+                  "",
+                  ""
+                ],
+                "csharp_gapic_assembly_pkg": [
+                  "",
+                  ""
+                ]
+              }
+            }
+          }
+        }
+      }
+    },
+    "@rules_go~0.39.1//go:extensions.bzl%go_sdk": {
+      "general": {
+        "bzlTransitiveDigest": "baCc5Mc6nJAIoj3TovuW1bOINXCqP/9lOv0UCbAkhsk=",
+        "accumulatedFileDigests": {},
+        "envVariables": {},
+        "generatedRepoSpecs": {
+          "go_default_sdk": {
+            "bzlFile": "@@rules_go~0.39.1//go/private:sdk.bzl",
+            "ruleClassName": "go_download_sdk_rule",
+            "attributes": {
+              "name": "rules_go~0.39.1~go_sdk~go_default_sdk",
+              "goos": "",
+              "goarch": "",
+              "sdks": {},
+              "urls": [
+                "https://dl.google.com/go/{}"
+              ],
+              "version": "1.19.8"
+            }
+          },
+          "go_toolchains": {
+            "bzlFile": "@@rules_go~0.39.1//go/private:sdk.bzl",
+            "ruleClassName": "go_multiple_toolchains",
+            "attributes": {
+              "name": "rules_go~0.39.1~go_sdk~go_toolchains",
+              "prefixes": [
+                "_0000_go_default_sdk_"
+              ],
+              "geese": [
+                ""
+              ],
+              "goarchs": [
+                ""
+              ],
+              "sdk_repos": [
+                "go_default_sdk"
+              ],
+              "sdk_types": [
+                "remote"
+              ],
+              "sdk_versions": [
+                "1.19.8"
+              ]
+            }
+          }
+        }
+      }
+    },
+    "@rules_go~0.39.1//go/private:extensions.bzl%non_module_dependencies": {
+      "general": {
+        "bzlTransitiveDigest": "lISD5Aqr6V4eTUAf5oZ4MilfT1BSlMybWvnRzRfSmM4=",
+        "accumulatedFileDigests": {},
+        "envVariables": {},
+        "generatedRepoSpecs": {
+          "org_golang_x_xerrors": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_go~0.39.1~non_module_dependencies~org_golang_x_xerrors",
+              "urls": [
+                "https://mirror.bazel.build/github.com/golang/xerrors/archive/04be3eba64a22a838cdb17b8dca15a52871c08b4.zip",
+                "https://github.com/golang/xerrors/archive/04be3eba64a22a838cdb17b8dca15a52871c08b4.zip"
+              ],
+              "sha256": "ffad2b06ef2e09d040da2ff08077865e99ab95d4d0451737fc8e33706bb01634",
+              "strip_prefix": "xerrors-04be3eba64a22a838cdb17b8dca15a52871c08b4",
+              "patches": [
+                "@@rules_go~0.39.1//third_party:org_golang_x_xerrors-gazelle.patch"
+              ],
+              "patch_args": [
+                "-p1"
+              ]
+            }
+          },
+          "gogo_special_proto": {
+            "bzlFile": "@@rules_go~0.39.1//proto:gogo.bzl",
+            "ruleClassName": "gogo_special_proto",
+            "attributes": {
+              "name": "rules_go~0.39.1~non_module_dependencies~gogo_special_proto"
+            }
+          },
+          "org_golang_google_protobuf": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_go~0.39.1~non_module_dependencies~org_golang_google_protobuf",
+              "sha256": "cb1a05581c33b3705ede6c08edf9b9c1dbc579559ba30f532704c324e42bf801",
+              "urls": [
+                "https://mirror.bazel.build/github.com/protocolbuffers/protobuf-go/archive/refs/tags/v1.30.0.zip",
+                "https://github.com/protocolbuffers/protobuf-go/archive/refs/tags/v1.30.0.zip"
+              ],
+              "strip_prefix": "protobuf-go-1.30.0",
+              "patches": [
+                "@@rules_go~0.39.1//third_party:org_golang_google_protobuf-gazelle.patch"
+              ],
+              "patch_args": [
+                "-p1"
+              ]
+            }
+          },
+          "com_github_mwitkow_go_proto_validators": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_go~0.39.1~non_module_dependencies~com_github_mwitkow_go_proto_validators",
+              "urls": [
+                "https://mirror.bazel.build/github.com/mwitkow/go-proto-validators/archive/refs/tags/v0.3.2.zip",
+                "https://github.com/mwitkow/go-proto-validators/archive/refs/tags/v0.3.2.zip"
+              ],
+              "sha256": "d8697f05a2f0eaeb65261b480e1e6035301892d9fc07ed945622f41b12a68142",
+              "strip_prefix": "go-proto-validators-0.3.2"
+            }
+          },
+          "org_golang_x_tools": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_go~0.39.1~non_module_dependencies~org_golang_x_tools",
+              "urls": [
+                "https://mirror.bazel.build/github.com/golang/tools/archive/refs/tags/v0.7.0.zip",
+                "https://github.com/golang/tools/archive/refs/tags/v0.7.0.zip"
+              ],
+              "sha256": "9f20a20f29f4008d797a8be882ef82b69cf8f7f2b96dbdfe3814c57d8280fa4b",
+              "strip_prefix": "tools-0.7.0",
+              "patches": [
+                "@@rules_go~0.39.1//third_party:org_golang_x_tools-deletegopls.patch",
+                "@@rules_go~0.39.1//third_party:org_golang_x_tools-gazelle.patch"
+              ],
+              "patch_args": [
+                "-p1"
+              ]
+            }
+          },
+          "go_googleapis": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_go~0.39.1~non_module_dependencies~go_googleapis",
+              "urls": [
+                "https://mirror.bazel.build/github.com/googleapis/googleapis/archive/83c3605afb5a39952bf0a0809875d41cf2a558ca.zip",
+                "https://github.com/googleapis/googleapis/archive/83c3605afb5a39952bf0a0809875d41cf2a558ca.zip"
+              ],
+              "sha256": "ba694861340e792fd31cb77274eacaf6e4ca8bda97707898f41d8bebfd8a4984",
+              "strip_prefix": "googleapis-83c3605afb5a39952bf0a0809875d41cf2a558ca",
+              "patches": [
+                "@@rules_go~0.39.1//third_party:go_googleapis-deletebuild.patch",
+                "@@rules_go~0.39.1//third_party:go_googleapis-directives.patch",
+                "@@rules_go~0.39.1//third_party:go_googleapis-gazelle.patch"
+              ],
+              "patch_args": [
+                "-E",
+                "-p1"
+              ]
+            }
+          },
+          "org_golang_google_genproto": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_go~0.39.1~non_module_dependencies~org_golang_google_genproto",
+              "urls": [
+                "https://mirror.bazel.build/github.com/googleapis/go-genproto/archive/6ac7f18bb9d5eeeb13a9f1ae4f21e4374a1952f8.zip",
+                "https://github.com/googleapis/go-genproto/archive/6ac7f18bb9d5eeeb13a9f1ae4f21e4374a1952f8.zip"
+              ],
+              "sha256": "3470e7a89b24971b20c4bb8900a668df25279e4b741f72bc09418c1f22543215",
+              "strip_prefix": "go-genproto-6ac7f18bb9d5eeeb13a9f1ae4f21e4374a1952f8",
+              "patches": [
+                "@@rules_go~0.39.1//third_party:org_golang_google_genproto-gazelle.patch"
+              ],
+              "patch_args": [
+                "-p1"
+              ]
+            }
+          },
+          "bazel_skylib": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_go~0.39.1~non_module_dependencies~bazel_skylib",
+              "urls": [
+                "https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/releases/download/1.4.1/bazel-skylib-1.4.1.tar.gz",
+                "https://github.com/bazelbuild/bazel-skylib/releases/download/1.4.1/bazel-skylib-1.4.1.tar.gz"
+              ],
+              "sha256": "b8a1527901774180afc798aeb28c4634bdccf19c4d98e7bdd1ce79d1fe9aaad7",
+              "strip_prefix": ""
+            }
+          },
+          "com_github_gogo_protobuf": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_go~0.39.1~non_module_dependencies~com_github_gogo_protobuf",
+              "urls": [
+                "https://mirror.bazel.build/github.com/gogo/protobuf/archive/refs/tags/v1.3.2.zip",
+                "https://github.com/gogo/protobuf/archive/refs/tags/v1.3.2.zip"
+              ],
+              "sha256": "f89f8241af909ce3226562d135c25b28e656ae173337b3e58ede917aa26e1e3c",
+              "strip_prefix": "protobuf-1.3.2",
+              "patches": [
+                "@@rules_go~0.39.1//third_party:com_github_gogo_protobuf-gazelle.patch"
+              ],
+              "patch_args": [
+                "-p1"
+              ]
+            }
+          },
+          "com_github_golang_protobuf": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_go~0.39.1~non_module_dependencies~com_github_golang_protobuf",
+              "urls": [
+                "https://mirror.bazel.build/github.com/golang/protobuf/archive/refs/tags/v1.5.3.zip",
+                "https://github.com/golang/protobuf/archive/refs/tags/v1.5.3.zip"
+              ],
+              "sha256": "2dced4544ae5372281e20f1e48ca76368355a01b31353724718c4d6e3dcbb430",
+              "strip_prefix": "protobuf-1.5.3",
+              "patches": [
+                "@@rules_go~0.39.1//third_party:com_github_golang_protobuf-gazelle.patch"
+              ],
+              "patch_args": [
+                "-p1"
+              ]
+            }
+          },
+          "io_bazel_rules_nogo": {
+            "bzlFile": "@@rules_go~0.39.1//go/private:nogo.bzl",
+            "ruleClassName": "go_register_nogo",
+            "attributes": {
+              "name": "rules_go~0.39.1~non_module_dependencies~io_bazel_rules_nogo",
+              "nogo": "@io_bazel_rules_go//:default_nogo"
+            }
+          },
+          "com_github_golang_mock": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_go~0.39.1~non_module_dependencies~com_github_golang_mock",
+              "urls": [
+                "https://mirror.bazel.build/github.com/golang/mock/archive/refs/tags/v1.7.0-rc.1.zip",
+                "https://github.com/golang/mock/archive/refs/tags/v1.7.0-rc.1.zip"
+              ],
+              "patches": [
+                "@@rules_go~0.39.1//third_party:com_github_golang_mock-gazelle.patch"
+              ],
+              "patch_args": [
+                "-p1"
+              ],
+              "sha256": "5359c78b0c1649cf7beb3b48ff8b1d1aaf0243b22ea4789aba94805280075d8e",
+              "strip_prefix": "mock-1.7.0-rc.1"
+            }
+          },
+          "org_golang_x_sys": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_go~0.39.1~non_module_dependencies~org_golang_x_sys",
+              "urls": [
+                "https://mirror.bazel.build/github.com/golang/sys/archive/refs/tags/v0.6.0.zip",
+                "https://github.com/golang/sys/archive/refs/tags/v0.6.0.zip"
+              ],
+              "sha256": "7f2399398b2eb4f1f495cc754d6353566e0ad934ee0eb46505e55162e0def56d",
+              "strip_prefix": "sys-0.6.0",
+              "patches": [
+                "@@rules_go~0.39.1//third_party:org_golang_x_sys-gazelle.patch"
+              ],
+              "patch_args": [
+                "-p1"
+              ]
+            }
+          }
+        }
+      }
+    },
+    "@rules_java~7.1.0//java:extensions.bzl%toolchains": {
+      "general": {
+        "bzlTransitiveDigest": "p7Arq0FCdeuM/UFxax3JGDCetBx8pIqr2m77/MWrf8w=",
+        "accumulatedFileDigests": {},
+        "envVariables": {},
+        "generatedRepoSpecs": {
+          "remotejdk21_linux_toolchain_config_repo": {
+            "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl",
+            "ruleClassName": "_toolchain_config",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk21_linux_toolchain_config_repo",
+              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_21\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"21\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"//conditions:default\": \":prefix_version_setting\",\n    }),\n    visibility = [\"//visibility:private\"],\n)\ntoolchain(\n    name = \"toolchain\",\n    target_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:x86_64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n    toolchain = \"@remotejdk21_linux//:jdk\",\n)\ntoolchain(\n    name = \"bootstrap_runtime_toolchain\",\n    # These constraints are not required for correctness, but prevent fetches of remote JDK for\n    # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n    # the same configuration, this constraint will not result in toolchain resolution failures.\n    exec_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:x86_64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n    toolchain = \"@remotejdk21_linux//:jdk\",\n)\n"
+            }
+          },
+          "remotejdk17_linux_s390x_toolchain_config_repo": {
+            "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl",
+            "ruleClassName": "_toolchain_config",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk17_linux_s390x_toolchain_config_repo",
+              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_17\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"17\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"//conditions:default\": \":prefix_version_setting\",\n    }),\n    visibility = [\"//visibility:private\"],\n)\ntoolchain(\n    name = \"toolchain\",\n    target_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:s390x\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n    toolchain = \"@remotejdk17_linux_s390x//:jdk\",\n)\ntoolchain(\n    name = \"bootstrap_runtime_toolchain\",\n    # These constraints are not required for correctness, but prevent fetches of remote JDK for\n    # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n    # the same configuration, this constraint will not result in toolchain resolution failures.\n    exec_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:s390x\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n    toolchain = \"@remotejdk17_linux_s390x//:jdk\",\n)\n"
+            }
+          },
+          "remotejdk17_macos_toolchain_config_repo": {
+            "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl",
+            "ruleClassName": "_toolchain_config",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk17_macos_toolchain_config_repo",
+              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_17\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"17\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"//conditions:default\": \":prefix_version_setting\",\n    }),\n    visibility = [\"//visibility:private\"],\n)\ntoolchain(\n    name = \"toolchain\",\n    target_compatible_with = [\"@platforms//os:macos\", \"@platforms//cpu:x86_64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n    toolchain = \"@remotejdk17_macos//:jdk\",\n)\ntoolchain(\n    name = \"bootstrap_runtime_toolchain\",\n    # These constraints are not required for correctness, but prevent fetches of remote JDK for\n    # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n    # the same configuration, this constraint will not result in toolchain resolution failures.\n    exec_compatible_with = [\"@platforms//os:macos\", \"@platforms//cpu:x86_64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n    toolchain = \"@remotejdk17_macos//:jdk\",\n)\n"
+            }
+          },
+          "remotejdk21_macos_aarch64_toolchain_config_repo": {
+            "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl",
+            "ruleClassName": "_toolchain_config",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk21_macos_aarch64_toolchain_config_repo",
+              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_21\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"21\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"//conditions:default\": \":prefix_version_setting\",\n    }),\n    visibility = [\"//visibility:private\"],\n)\ntoolchain(\n    name = \"toolchain\",\n    target_compatible_with = [\"@platforms//os:macos\", \"@platforms//cpu:aarch64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n    toolchain = \"@remotejdk21_macos_aarch64//:jdk\",\n)\ntoolchain(\n    name = \"bootstrap_runtime_toolchain\",\n    # These constraints are not required for correctness, but prevent fetches of remote JDK for\n    # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n    # the same configuration, this constraint will not result in toolchain resolution failures.\n    exec_compatible_with = [\"@platforms//os:macos\", \"@platforms//cpu:aarch64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n    toolchain = \"@remotejdk21_macos_aarch64//:jdk\",\n)\n"
+            }
+          },
+          "remotejdk17_linux_aarch64_toolchain_config_repo": {
+            "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl",
+            "ruleClassName": "_toolchain_config",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk17_linux_aarch64_toolchain_config_repo",
+              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_17\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"17\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"//conditions:default\": \":prefix_version_setting\",\n    }),\n    visibility = [\"//visibility:private\"],\n)\ntoolchain(\n    name = \"toolchain\",\n    target_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:aarch64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n    toolchain = \"@remotejdk17_linux_aarch64//:jdk\",\n)\ntoolchain(\n    name = \"bootstrap_runtime_toolchain\",\n    # These constraints are not required for correctness, but prevent fetches of remote JDK for\n    # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n    # the same configuration, this constraint will not result in toolchain resolution failures.\n    exec_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:aarch64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n    toolchain = \"@remotejdk17_linux_aarch64//:jdk\",\n)\n"
+            }
+          },
+          "remotejdk21_macos_aarch64": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk21_macos_aarch64",
+              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        exclude = [\"jre/bin/plugin2/**\"],\n    ),\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n# This folder holds security policies.\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\", \"release\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre\",\n    ],\n    # Provide the 'java` binary explicitly so that the correct path is used by\n    # Bazel even when the host platform differs from the execution platform.\n    # Exactly one of the two globs will be empty depending on the host platform.\n    # When --incompatible_disallow_empty_glob is enabled, each individual empty\n    # glob will fail without allow_empty = True, even if the overall result is\n    # non-empty.\n    java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n    version = 21,\n)\n",
+              "sha256": "2a7a99a3ea263dbd8d32a67d1e6e363ba8b25c645c826f5e167a02bbafaff1fa",
+              "strip_prefix": "zulu21.28.85-ca-jdk21.0.0-macosx_aarch64",
+              "urls": [
+                "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu21.28.85-ca-jdk21.0.0-macosx_aarch64.tar.gz",
+                "https://cdn.azul.com/zulu/bin/zulu21.28.85-ca-jdk21.0.0-macosx_aarch64.tar.gz"
+              ]
+            }
+          },
+          "remotejdk17_linux_toolchain_config_repo": {
+            "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl",
+            "ruleClassName": "_toolchain_config",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk17_linux_toolchain_config_repo",
+              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_17\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"17\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"//conditions:default\": \":prefix_version_setting\",\n    }),\n    visibility = [\"//visibility:private\"],\n)\ntoolchain(\n    name = \"toolchain\",\n    target_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:x86_64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n    toolchain = \"@remotejdk17_linux//:jdk\",\n)\ntoolchain(\n    name = \"bootstrap_runtime_toolchain\",\n    # These constraints are not required for correctness, but prevent fetches of remote JDK for\n    # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n    # the same configuration, this constraint will not result in toolchain resolution failures.\n    exec_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:x86_64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n    toolchain = \"@remotejdk17_linux//:jdk\",\n)\n"
+            }
+          },
+          "remotejdk17_macos_aarch64": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk17_macos_aarch64",
+              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        exclude = [\"jre/bin/plugin2/**\"],\n    ),\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n# This folder holds security policies.\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\", \"release\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre\",\n    ],\n    # Provide the 'java` binary explicitly so that the correct path is used by\n    # Bazel even when the host platform differs from the execution platform.\n    # Exactly one of the two globs will be empty depending on the host platform.\n    # When --incompatible_disallow_empty_glob is enabled, each individual empty\n    # glob will fail without allow_empty = True, even if the overall result is\n    # non-empty.\n    java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n    version = 17,\n)\n",
+              "sha256": "314b04568ec0ae9b36ba03c9cbd42adc9e1265f74678923b19297d66eb84dcca",
+              "strip_prefix": "zulu17.44.53-ca-jdk17.0.8.1-macosx_aarch64",
+              "urls": [
+                "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.44.53-ca-jdk17.0.8.1-macosx_aarch64.tar.gz",
+                "https://cdn.azul.com/zulu/bin/zulu17.44.53-ca-jdk17.0.8.1-macosx_aarch64.tar.gz"
+              ]
+            }
+          },
+          "remote_java_tools_windows": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remote_java_tools_windows",
+              "sha256": "c5c70c214a350f12cbf52da8270fa43ba629b795f3dd328028a38f8f0d39c2a1",
+              "urls": [
+                "https://mirror.bazel.build/bazel_java_tools/releases/java/v13.1/java_tools_windows-v13.1.zip",
+                "https://github.com/bazelbuild/java_tools/releases/download/java_v13.1/java_tools_windows-v13.1.zip"
+              ]
+            }
+          },
+          "remotejdk11_win": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk11_win",
+              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        exclude = [\"jre/bin/plugin2/**\"],\n    ),\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n# This folder holds security policies.\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\", \"release\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre\",\n    ],\n    # Provide the 'java` binary explicitly so that the correct path is used by\n    # Bazel even when the host platform differs from the execution platform.\n    # Exactly one of the two globs will be empty depending on the host platform.\n    # When --incompatible_disallow_empty_glob is enabled, each individual empty\n    # glob will fail without allow_empty = True, even if the overall result is\n    # non-empty.\n    java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n    version = 11,\n)\n",
+              "sha256": "43408193ce2fa0862819495b5ae8541085b95660153f2adcf91a52d3a1710e83",
+              "strip_prefix": "zulu11.66.15-ca-jdk11.0.20-win_x64",
+              "urls": [
+                "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu11.66.15-ca-jdk11.0.20-win_x64.zip",
+                "https://cdn.azul.com/zulu/bin/zulu11.66.15-ca-jdk11.0.20-win_x64.zip"
+              ]
+            }
+          },
+          "remotejdk11_win_toolchain_config_repo": {
+            "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl",
+            "ruleClassName": "_toolchain_config",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk11_win_toolchain_config_repo",
+              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_11\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"11\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"//conditions:default\": \":prefix_version_setting\",\n    }),\n    visibility = [\"//visibility:private\"],\n)\ntoolchain(\n    name = \"toolchain\",\n    target_compatible_with = [\"@platforms//os:windows\", \"@platforms//cpu:x86_64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n    toolchain = \"@remotejdk11_win//:jdk\",\n)\ntoolchain(\n    name = \"bootstrap_runtime_toolchain\",\n    # These constraints are not required for correctness, but prevent fetches of remote JDK for\n    # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n    # the same configuration, this constraint will not result in toolchain resolution failures.\n    exec_compatible_with = [\"@platforms//os:windows\", \"@platforms//cpu:x86_64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n    toolchain = \"@remotejdk11_win//:jdk\",\n)\n"
+            }
+          },
+          "remotejdk11_linux_aarch64": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk11_linux_aarch64",
+              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        exclude = [\"jre/bin/plugin2/**\"],\n    ),\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n# This folder holds security policies.\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\", \"release\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre\",\n    ],\n    # Provide the 'java` binary explicitly so that the correct path is used by\n    # Bazel even when the host platform differs from the execution platform.\n    # Exactly one of the two globs will be empty depending on the host platform.\n    # When --incompatible_disallow_empty_glob is enabled, each individual empty\n    # glob will fail without allow_empty = True, even if the overall result is\n    # non-empty.\n    java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n    version = 11,\n)\n",
+              "sha256": "54174439f2b3fddd11f1048c397fe7bb45d4c9d66d452d6889b013d04d21c4de",
+              "strip_prefix": "zulu11.66.15-ca-jdk11.0.20-linux_aarch64",
+              "urls": [
+                "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu11.66.15-ca-jdk11.0.20-linux_aarch64.tar.gz",
+                "https://cdn.azul.com/zulu/bin/zulu11.66.15-ca-jdk11.0.20-linux_aarch64.tar.gz"
+              ]
+            }
+          },
+          "remotejdk17_linux": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk17_linux",
+              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        exclude = [\"jre/bin/plugin2/**\"],\n    ),\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n# This folder holds security policies.\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\", \"release\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre\",\n    ],\n    # Provide the 'java` binary explicitly so that the correct path is used by\n    # Bazel even when the host platform differs from the execution platform.\n    # Exactly one of the two globs will be empty depending on the host platform.\n    # When --incompatible_disallow_empty_glob is enabled, each individual empty\n    # glob will fail without allow_empty = True, even if the overall result is\n    # non-empty.\n    java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n    version = 17,\n)\n",
+              "sha256": "b9482f2304a1a68a614dfacddcf29569a72f0fac32e6c74f83dc1b9a157b8340",
+              "strip_prefix": "zulu17.44.53-ca-jdk17.0.8.1-linux_x64",
+              "urls": [
+                "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.44.53-ca-jdk17.0.8.1-linux_x64.tar.gz",
+                "https://cdn.azul.com/zulu/bin/zulu17.44.53-ca-jdk17.0.8.1-linux_x64.tar.gz"
+              ]
+            }
+          },
+          "remotejdk11_linux_s390x_toolchain_config_repo": {
+            "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl",
+            "ruleClassName": "_toolchain_config",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk11_linux_s390x_toolchain_config_repo",
+              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_11\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"11\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"//conditions:default\": \":prefix_version_setting\",\n    }),\n    visibility = [\"//visibility:private\"],\n)\ntoolchain(\n    name = \"toolchain\",\n    target_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:s390x\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n    toolchain = \"@remotejdk11_linux_s390x//:jdk\",\n)\ntoolchain(\n    name = \"bootstrap_runtime_toolchain\",\n    # These constraints are not required for correctness, but prevent fetches of remote JDK for\n    # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n    # the same configuration, this constraint will not result in toolchain resolution failures.\n    exec_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:s390x\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n    toolchain = \"@remotejdk11_linux_s390x//:jdk\",\n)\n"
+            }
+          },
+          "remotejdk11_linux_toolchain_config_repo": {
+            "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl",
+            "ruleClassName": "_toolchain_config",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk11_linux_toolchain_config_repo",
+              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_11\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"11\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"//conditions:default\": \":prefix_version_setting\",\n    }),\n    visibility = [\"//visibility:private\"],\n)\ntoolchain(\n    name = \"toolchain\",\n    target_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:x86_64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n    toolchain = \"@remotejdk11_linux//:jdk\",\n)\ntoolchain(\n    name = \"bootstrap_runtime_toolchain\",\n    # These constraints are not required for correctness, but prevent fetches of remote JDK for\n    # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n    # the same configuration, this constraint will not result in toolchain resolution failures.\n    exec_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:x86_64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n    toolchain = \"@remotejdk11_linux//:jdk\",\n)\n"
+            }
+          },
+          "remotejdk11_macos": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk11_macos",
+              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        exclude = [\"jre/bin/plugin2/**\"],\n    ),\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n# This folder holds security policies.\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\", \"release\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre\",\n    ],\n    # Provide the 'java` binary explicitly so that the correct path is used by\n    # Bazel even when the host platform differs from the execution platform.\n    # Exactly one of the two globs will be empty depending on the host platform.\n    # When --incompatible_disallow_empty_glob is enabled, each individual empty\n    # glob will fail without allow_empty = True, even if the overall result is\n    # non-empty.\n    java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n    version = 11,\n)\n",
+              "sha256": "bcaab11cfe586fae7583c6d9d311c64384354fb2638eb9a012eca4c3f1a1d9fd",
+              "strip_prefix": "zulu11.66.15-ca-jdk11.0.20-macosx_x64",
+              "urls": [
+                "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu11.66.15-ca-jdk11.0.20-macosx_x64.tar.gz",
+                "https://cdn.azul.com/zulu/bin/zulu11.66.15-ca-jdk11.0.20-macosx_x64.tar.gz"
+              ]
+            }
+          },
+          "remotejdk11_win_arm64": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk11_win_arm64",
+              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        exclude = [\"jre/bin/plugin2/**\"],\n    ),\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n# This folder holds security policies.\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\", \"release\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre\",\n    ],\n    # Provide the 'java` binary explicitly so that the correct path is used by\n    # Bazel even when the host platform differs from the execution platform.\n    # Exactly one of the two globs will be empty depending on the host platform.\n    # When --incompatible_disallow_empty_glob is enabled, each individual empty\n    # glob will fail without allow_empty = True, even if the overall result is\n    # non-empty.\n    java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n    version = 11,\n)\n",
+              "sha256": "b8a28e6e767d90acf793ea6f5bed0bb595ba0ba5ebdf8b99f395266161e53ec2",
+              "strip_prefix": "jdk-11.0.13+8",
+              "urls": [
+                "https://mirror.bazel.build/aka.ms/download-jdk/microsoft-jdk-11.0.13.8.1-windows-aarch64.zip"
+              ]
+            }
+          },
+          "remotejdk17_macos": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk17_macos",
+              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        exclude = [\"jre/bin/plugin2/**\"],\n    ),\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n# This folder holds security policies.\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\", \"release\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre\",\n    ],\n    # Provide the 'java` binary explicitly so that the correct path is used by\n    # Bazel even when the host platform differs from the execution platform.\n    # Exactly one of the two globs will be empty depending on the host platform.\n    # When --incompatible_disallow_empty_glob is enabled, each individual empty\n    # glob will fail without allow_empty = True, even if the overall result is\n    # non-empty.\n    java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n    version = 17,\n)\n",
+              "sha256": "640453e8afe8ffe0fb4dceb4535fb50db9c283c64665eebb0ba68b19e65f4b1f",
+              "strip_prefix": "zulu17.44.53-ca-jdk17.0.8.1-macosx_x64",
+              "urls": [
+                "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.44.53-ca-jdk17.0.8.1-macosx_x64.tar.gz",
+                "https://cdn.azul.com/zulu/bin/zulu17.44.53-ca-jdk17.0.8.1-macosx_x64.tar.gz"
+              ]
+            }
+          },
+          "remotejdk21_macos": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk21_macos",
+              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        exclude = [\"jre/bin/plugin2/**\"],\n    ),\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n# This folder holds security policies.\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\", \"release\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre\",\n    ],\n    # Provide the 'java` binary explicitly so that the correct path is used by\n    # Bazel even when the host platform differs from the execution platform.\n    # Exactly one of the two globs will be empty depending on the host platform.\n    # When --incompatible_disallow_empty_glob is enabled, each individual empty\n    # glob will fail without allow_empty = True, even if the overall result is\n    # non-empty.\n    java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n    version = 21,\n)\n",
+              "sha256": "9639b87db586d0c89f7a9892ae47f421e442c64b97baebdff31788fbe23265bd",
+              "strip_prefix": "zulu21.28.85-ca-jdk21.0.0-macosx_x64",
+              "urls": [
+                "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu21.28.85-ca-jdk21.0.0-macosx_x64.tar.gz",
+                "https://cdn.azul.com/zulu/bin/zulu21.28.85-ca-jdk21.0.0-macosx_x64.tar.gz"
+              ]
+            }
+          },
+          "remotejdk21_macos_toolchain_config_repo": {
+            "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl",
+            "ruleClassName": "_toolchain_config",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk21_macos_toolchain_config_repo",
+              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_21\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"21\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"//conditions:default\": \":prefix_version_setting\",\n    }),\n    visibility = [\"//visibility:private\"],\n)\ntoolchain(\n    name = \"toolchain\",\n    target_compatible_with = [\"@platforms//os:macos\", \"@platforms//cpu:x86_64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n    toolchain = \"@remotejdk21_macos//:jdk\",\n)\ntoolchain(\n    name = \"bootstrap_runtime_toolchain\",\n    # These constraints are not required for correctness, but prevent fetches of remote JDK for\n    # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n    # the same configuration, this constraint will not result in toolchain resolution failures.\n    exec_compatible_with = [\"@platforms//os:macos\", \"@platforms//cpu:x86_64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n    toolchain = \"@remotejdk21_macos//:jdk\",\n)\n"
+            }
+          },
+          "remotejdk17_macos_aarch64_toolchain_config_repo": {
+            "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl",
+            "ruleClassName": "_toolchain_config",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk17_macos_aarch64_toolchain_config_repo",
+              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_17\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"17\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"//conditions:default\": \":prefix_version_setting\",\n    }),\n    visibility = [\"//visibility:private\"],\n)\ntoolchain(\n    name = \"toolchain\",\n    target_compatible_with = [\"@platforms//os:macos\", \"@platforms//cpu:aarch64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n    toolchain = \"@remotejdk17_macos_aarch64//:jdk\",\n)\ntoolchain(\n    name = \"bootstrap_runtime_toolchain\",\n    # These constraints are not required for correctness, but prevent fetches of remote JDK for\n    # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n    # the same configuration, this constraint will not result in toolchain resolution failures.\n    exec_compatible_with = [\"@platforms//os:macos\", \"@platforms//cpu:aarch64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n    toolchain = \"@remotejdk17_macos_aarch64//:jdk\",\n)\n"
+            }
+          },
+          "remotejdk17_win": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk17_win",
+              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        exclude = [\"jre/bin/plugin2/**\"],\n    ),\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n# This folder holds security policies.\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\", \"release\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre\",\n    ],\n    # Provide the 'java` binary explicitly so that the correct path is used by\n    # Bazel even when the host platform differs from the execution platform.\n    # Exactly one of the two globs will be empty depending on the host platform.\n    # When --incompatible_disallow_empty_glob is enabled, each individual empty\n    # glob will fail without allow_empty = True, even if the overall result is\n    # non-empty.\n    java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n    version = 17,\n)\n",
+              "sha256": "192f2afca57701de6ec496234f7e45d971bf623ff66b8ee4a5c81582054e5637",
+              "strip_prefix": "zulu17.44.53-ca-jdk17.0.8.1-win_x64",
+              "urls": [
+                "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.44.53-ca-jdk17.0.8.1-win_x64.zip",
+                "https://cdn.azul.com/zulu/bin/zulu17.44.53-ca-jdk17.0.8.1-win_x64.zip"
+              ]
+            }
+          },
+          "remotejdk11_macos_aarch64_toolchain_config_repo": {
+            "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl",
+            "ruleClassName": "_toolchain_config",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk11_macos_aarch64_toolchain_config_repo",
+              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_11\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"11\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"//conditions:default\": \":prefix_version_setting\",\n    }),\n    visibility = [\"//visibility:private\"],\n)\ntoolchain(\n    name = \"toolchain\",\n    target_compatible_with = [\"@platforms//os:macos\", \"@platforms//cpu:aarch64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n    toolchain = \"@remotejdk11_macos_aarch64//:jdk\",\n)\ntoolchain(\n    name = \"bootstrap_runtime_toolchain\",\n    # These constraints are not required for correctness, but prevent fetches of remote JDK for\n    # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n    # the same configuration, this constraint will not result in toolchain resolution failures.\n    exec_compatible_with = [\"@platforms//os:macos\", \"@platforms//cpu:aarch64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n    toolchain = \"@remotejdk11_macos_aarch64//:jdk\",\n)\n"
+            }
+          },
+          "remotejdk11_linux_ppc64le_toolchain_config_repo": {
+            "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl",
+            "ruleClassName": "_toolchain_config",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk11_linux_ppc64le_toolchain_config_repo",
+              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_11\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"11\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"//conditions:default\": \":prefix_version_setting\",\n    }),\n    visibility = [\"//visibility:private\"],\n)\ntoolchain(\n    name = \"toolchain\",\n    target_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:ppc\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n    toolchain = \"@remotejdk11_linux_ppc64le//:jdk\",\n)\ntoolchain(\n    name = \"bootstrap_runtime_toolchain\",\n    # These constraints are not required for correctness, but prevent fetches of remote JDK for\n    # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n    # the same configuration, this constraint will not result in toolchain resolution failures.\n    exec_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:ppc\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n    toolchain = \"@remotejdk11_linux_ppc64le//:jdk\",\n)\n"
+            }
+          },
+          "remotejdk21_linux": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk21_linux",
+              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        exclude = [\"jre/bin/plugin2/**\"],\n    ),\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n# This folder holds security policies.\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\", \"release\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre\",\n    ],\n    # Provide the 'java` binary explicitly so that the correct path is used by\n    # Bazel even when the host platform differs from the execution platform.\n    # Exactly one of the two globs will be empty depending on the host platform.\n    # When --incompatible_disallow_empty_glob is enabled, each individual empty\n    # glob will fail without allow_empty = True, even if the overall result is\n    # non-empty.\n    java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n    version = 21,\n)\n",
+              "sha256": "0c0eadfbdc47a7ca64aeab51b9c061f71b6e4d25d2d87674512e9b6387e9e3a6",
+              "strip_prefix": "zulu21.28.85-ca-jdk21.0.0-linux_x64",
+              "urls": [
+                "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu21.28.85-ca-jdk21.0.0-linux_x64.tar.gz",
+                "https://cdn.azul.com/zulu/bin/zulu21.28.85-ca-jdk21.0.0-linux_x64.tar.gz"
+              ]
+            }
+          },
+          "remote_java_tools_linux": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remote_java_tools_linux",
+              "sha256": "d134da9b04c9023fb6e56a5d4bffccee73f7bc9572ddc4e747778dacccd7a5a7",
+              "urls": [
+                "https://mirror.bazel.build/bazel_java_tools/releases/java/v13.1/java_tools_linux-v13.1.zip",
+                "https://github.com/bazelbuild/java_tools/releases/download/java_v13.1/java_tools_linux-v13.1.zip"
+              ]
+            }
+          },
+          "remotejdk21_win": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk21_win",
+              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        exclude = [\"jre/bin/plugin2/**\"],\n    ),\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n# This folder holds security policies.\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\", \"release\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre\",\n    ],\n    # Provide the 'java` binary explicitly so that the correct path is used by\n    # Bazel even when the host platform differs from the execution platform.\n    # Exactly one of the two globs will be empty depending on the host platform.\n    # When --incompatible_disallow_empty_glob is enabled, each individual empty\n    # glob will fail without allow_empty = True, even if the overall result is\n    # non-empty.\n    java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n    version = 21,\n)\n",
+              "sha256": "e9959d500a0d9a7694ac243baf657761479da132f0f94720cbffd092150bd802",
+              "strip_prefix": "zulu21.28.85-ca-jdk21.0.0-win_x64",
+              "urls": [
+                "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu21.28.85-ca-jdk21.0.0-win_x64.zip",
+                "https://cdn.azul.com/zulu/bin/zulu21.28.85-ca-jdk21.0.0-win_x64.zip"
+              ]
+            }
+          },
+          "remotejdk21_linux_aarch64": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk21_linux_aarch64",
+              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        exclude = [\"jre/bin/plugin2/**\"],\n    ),\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n# This folder holds security policies.\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\", \"release\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre\",\n    ],\n    # Provide the 'java` binary explicitly so that the correct path is used by\n    # Bazel even when the host platform differs from the execution platform.\n    # Exactly one of the two globs will be empty depending on the host platform.\n    # When --incompatible_disallow_empty_glob is enabled, each individual empty\n    # glob will fail without allow_empty = True, even if the overall result is\n    # non-empty.\n    java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n    version = 21,\n)\n",
+              "sha256": "1fb64b8036c5d463d8ab59af06bf5b6b006811e6012e3b0eb6bccf57f1c55835",
+              "strip_prefix": "zulu21.28.85-ca-jdk21.0.0-linux_aarch64",
+              "urls": [
+                "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu21.28.85-ca-jdk21.0.0-linux_aarch64.tar.gz",
+                "https://cdn.azul.com/zulu/bin/zulu21.28.85-ca-jdk21.0.0-linux_aarch64.tar.gz"
+              ]
+            }
+          },
+          "remotejdk11_linux_aarch64_toolchain_config_repo": {
+            "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl",
+            "ruleClassName": "_toolchain_config",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk11_linux_aarch64_toolchain_config_repo",
+              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_11\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"11\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"//conditions:default\": \":prefix_version_setting\",\n    }),\n    visibility = [\"//visibility:private\"],\n)\ntoolchain(\n    name = \"toolchain\",\n    target_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:aarch64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n    toolchain = \"@remotejdk11_linux_aarch64//:jdk\",\n)\ntoolchain(\n    name = \"bootstrap_runtime_toolchain\",\n    # These constraints are not required for correctness, but prevent fetches of remote JDK for\n    # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n    # the same configuration, this constraint will not result in toolchain resolution failures.\n    exec_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:aarch64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n    toolchain = \"@remotejdk11_linux_aarch64//:jdk\",\n)\n"
+            }
+          },
+          "remotejdk11_linux_s390x": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk11_linux_s390x",
+              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        exclude = [\"jre/bin/plugin2/**\"],\n    ),\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n# This folder holds security policies.\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\", \"release\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre\",\n    ],\n    # Provide the 'java` binary explicitly so that the correct path is used by\n    # Bazel even when the host platform differs from the execution platform.\n    # Exactly one of the two globs will be empty depending on the host platform.\n    # When --incompatible_disallow_empty_glob is enabled, each individual empty\n    # glob will fail without allow_empty = True, even if the overall result is\n    # non-empty.\n    java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n    version = 11,\n)\n",
+              "sha256": "a58fc0361966af0a5d5a31a2d8a208e3c9bb0f54f345596fd80b99ea9a39788b",
+              "strip_prefix": "jdk-11.0.15+10",
+              "urls": [
+                "https://mirror.bazel.build/github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.15+10/OpenJDK11U-jdk_s390x_linux_hotspot_11.0.15_10.tar.gz",
+                "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.15+10/OpenJDK11U-jdk_s390x_linux_hotspot_11.0.15_10.tar.gz"
+              ]
+            }
+          },
+          "remotejdk17_linux_aarch64": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk17_linux_aarch64",
+              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        exclude = [\"jre/bin/plugin2/**\"],\n    ),\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n# This folder holds security policies.\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\", \"release\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre\",\n    ],\n    # Provide the 'java` binary explicitly so that the correct path is used by\n    # Bazel even when the host platform differs from the execution platform.\n    # Exactly one of the two globs will be empty depending on the host platform.\n    # When --incompatible_disallow_empty_glob is enabled, each individual empty\n    # glob will fail without allow_empty = True, even if the overall result is\n    # non-empty.\n    java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n    version = 17,\n)\n",
+              "sha256": "6531cef61e416d5a7b691555c8cf2bdff689201b8a001ff45ab6740062b44313",
+              "strip_prefix": "zulu17.44.53-ca-jdk17.0.8.1-linux_aarch64",
+              "urls": [
+                "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.44.53-ca-jdk17.0.8.1-linux_aarch64.tar.gz",
+                "https://cdn.azul.com/zulu/bin/zulu17.44.53-ca-jdk17.0.8.1-linux_aarch64.tar.gz"
+              ]
+            }
+          },
+          "remotejdk17_win_arm64_toolchain_config_repo": {
+            "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl",
+            "ruleClassName": "_toolchain_config",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk17_win_arm64_toolchain_config_repo",
+              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_17\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"17\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"//conditions:default\": \":prefix_version_setting\",\n    }),\n    visibility = [\"//visibility:private\"],\n)\ntoolchain(\n    name = \"toolchain\",\n    target_compatible_with = [\"@platforms//os:windows\", \"@platforms//cpu:arm64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n    toolchain = \"@remotejdk17_win_arm64//:jdk\",\n)\ntoolchain(\n    name = \"bootstrap_runtime_toolchain\",\n    # These constraints are not required for correctness, but prevent fetches of remote JDK for\n    # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n    # the same configuration, this constraint will not result in toolchain resolution failures.\n    exec_compatible_with = [\"@platforms//os:windows\", \"@platforms//cpu:arm64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n    toolchain = \"@remotejdk17_win_arm64//:jdk\",\n)\n"
+            }
+          },
+          "remotejdk11_linux": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk11_linux",
+              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        exclude = [\"jre/bin/plugin2/**\"],\n    ),\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n# This folder holds security policies.\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\", \"release\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre\",\n    ],\n    # Provide the 'java` binary explicitly so that the correct path is used by\n    # Bazel even when the host platform differs from the execution platform.\n    # Exactly one of the two globs will be empty depending on the host platform.\n    # When --incompatible_disallow_empty_glob is enabled, each individual empty\n    # glob will fail without allow_empty = True, even if the overall result is\n    # non-empty.\n    java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n    version = 11,\n)\n",
+              "sha256": "a34b404f87a08a61148b38e1416d837189e1df7a040d949e743633daf4695a3c",
+              "strip_prefix": "zulu11.66.15-ca-jdk11.0.20-linux_x64",
+              "urls": [
+                "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu11.66.15-ca-jdk11.0.20-linux_x64.tar.gz",
+                "https://cdn.azul.com/zulu/bin/zulu11.66.15-ca-jdk11.0.20-linux_x64.tar.gz"
+              ]
+            }
+          },
+          "remotejdk11_macos_toolchain_config_repo": {
+            "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl",
+            "ruleClassName": "_toolchain_config",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk11_macos_toolchain_config_repo",
+              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_11\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"11\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"//conditions:default\": \":prefix_version_setting\",\n    }),\n    visibility = [\"//visibility:private\"],\n)\ntoolchain(\n    name = \"toolchain\",\n    target_compatible_with = [\"@platforms//os:macos\", \"@platforms//cpu:x86_64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n    toolchain = \"@remotejdk11_macos//:jdk\",\n)\ntoolchain(\n    name = \"bootstrap_runtime_toolchain\",\n    # These constraints are not required for correctness, but prevent fetches of remote JDK for\n    # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n    # the same configuration, this constraint will not result in toolchain resolution failures.\n    exec_compatible_with = [\"@platforms//os:macos\", \"@platforms//cpu:x86_64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n    toolchain = \"@remotejdk11_macos//:jdk\",\n)\n"
+            }
+          },
+          "remotejdk17_linux_ppc64le_toolchain_config_repo": {
+            "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl",
+            "ruleClassName": "_toolchain_config",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk17_linux_ppc64le_toolchain_config_repo",
+              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_17\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"17\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"//conditions:default\": \":prefix_version_setting\",\n    }),\n    visibility = [\"//visibility:private\"],\n)\ntoolchain(\n    name = \"toolchain\",\n    target_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:ppc\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n    toolchain = \"@remotejdk17_linux_ppc64le//:jdk\",\n)\ntoolchain(\n    name = \"bootstrap_runtime_toolchain\",\n    # These constraints are not required for correctness, but prevent fetches of remote JDK for\n    # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n    # the same configuration, this constraint will not result in toolchain resolution failures.\n    exec_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:ppc\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n    toolchain = \"@remotejdk17_linux_ppc64le//:jdk\",\n)\n"
+            }
+          },
+          "remotejdk17_win_arm64": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk17_win_arm64",
+              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        exclude = [\"jre/bin/plugin2/**\"],\n    ),\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n# This folder holds security policies.\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\", \"release\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre\",\n    ],\n    # Provide the 'java` binary explicitly so that the correct path is used by\n    # Bazel even when the host platform differs from the execution platform.\n    # Exactly one of the two globs will be empty depending on the host platform.\n    # When --incompatible_disallow_empty_glob is enabled, each individual empty\n    # glob will fail without allow_empty = True, even if the overall result is\n    # non-empty.\n    java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n    version = 17,\n)\n",
+              "sha256": "6802c99eae0d788e21f52d03cab2e2b3bf42bc334ca03cbf19f71eb70ee19f85",
+              "strip_prefix": "zulu17.44.53-ca-jdk17.0.8.1-win_aarch64",
+              "urls": [
+                "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.44.53-ca-jdk17.0.8.1-win_aarch64.zip",
+                "https://cdn.azul.com/zulu/bin/zulu17.44.53-ca-jdk17.0.8.1-win_aarch64.zip"
+              ]
+            }
+          },
+          "remote_java_tools_darwin_arm64": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remote_java_tools_darwin_arm64",
+              "sha256": "dab5bb87ec43e980faea6e1cec14bafb217b8e2f5346f53aa784fd715929a930",
+              "urls": [
+                "https://mirror.bazel.build/bazel_java_tools/releases/java/v13.1/java_tools_darwin_arm64-v13.1.zip",
+                "https://github.com/bazelbuild/java_tools/releases/download/java_v13.1/java_tools_darwin_arm64-v13.1.zip"
+              ]
+            }
+          },
+          "remotejdk17_linux_ppc64le": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk17_linux_ppc64le",
+              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        exclude = [\"jre/bin/plugin2/**\"],\n    ),\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n# This folder holds security policies.\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\", \"release\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre\",\n    ],\n    # Provide the 'java` binary explicitly so that the correct path is used by\n    # Bazel even when the host platform differs from the execution platform.\n    # Exactly one of the two globs will be empty depending on the host platform.\n    # When --incompatible_disallow_empty_glob is enabled, each individual empty\n    # glob will fail without allow_empty = True, even if the overall result is\n    # non-empty.\n    java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n    version = 17,\n)\n",
+              "sha256": "00a4c07603d0218cd678461b5b3b7e25b3253102da4022d31fc35907f21a2efd",
+              "strip_prefix": "jdk-17.0.8.1+1",
+              "urls": [
+                "https://mirror.bazel.build/github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.8.1%2B1/OpenJDK17U-jdk_ppc64le_linux_hotspot_17.0.8.1_1.tar.gz",
+                "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.8.1%2B1/OpenJDK17U-jdk_ppc64le_linux_hotspot_17.0.8.1_1.tar.gz"
+              ]
+            }
+          },
+          "remotejdk21_linux_aarch64_toolchain_config_repo": {
+            "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl",
+            "ruleClassName": "_toolchain_config",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk21_linux_aarch64_toolchain_config_repo",
+              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_21\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"21\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"//conditions:default\": \":prefix_version_setting\",\n    }),\n    visibility = [\"//visibility:private\"],\n)\ntoolchain(\n    name = \"toolchain\",\n    target_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:aarch64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n    toolchain = \"@remotejdk21_linux_aarch64//:jdk\",\n)\ntoolchain(\n    name = \"bootstrap_runtime_toolchain\",\n    # These constraints are not required for correctness, but prevent fetches of remote JDK for\n    # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n    # the same configuration, this constraint will not result in toolchain resolution failures.\n    exec_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:aarch64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n    toolchain = \"@remotejdk21_linux_aarch64//:jdk\",\n)\n"
+            }
+          },
+          "remotejdk11_win_arm64_toolchain_config_repo": {
+            "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl",
+            "ruleClassName": "_toolchain_config",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk11_win_arm64_toolchain_config_repo",
+              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_11\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"11\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"//conditions:default\": \":prefix_version_setting\",\n    }),\n    visibility = [\"//visibility:private\"],\n)\ntoolchain(\n    name = \"toolchain\",\n    target_compatible_with = [\"@platforms//os:windows\", \"@platforms//cpu:arm64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n    toolchain = \"@remotejdk11_win_arm64//:jdk\",\n)\ntoolchain(\n    name = \"bootstrap_runtime_toolchain\",\n    # These constraints are not required for correctness, but prevent fetches of remote JDK for\n    # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n    # the same configuration, this constraint will not result in toolchain resolution failures.\n    exec_compatible_with = [\"@platforms//os:windows\", \"@platforms//cpu:arm64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n    toolchain = \"@remotejdk11_win_arm64//:jdk\",\n)\n"
+            }
+          },
+          "local_jdk": {
+            "bzlFile": "@@rules_java~7.1.0//toolchains:local_java_repository.bzl",
+            "ruleClassName": "_local_java_repository_rule",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~local_jdk",
+              "java_home": "",
+              "version": "",
+              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        exclude = [\"jre/bin/plugin2/**\"],\n    ),\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n# This folder holds security policies.\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\", \"release\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre\",\n    ],\n    # Provide the 'java` binary explicitly so that the correct path is used by\n    # Bazel even when the host platform differs from the execution platform.\n    # Exactly one of the two globs will be empty depending on the host platform.\n    # When --incompatible_disallow_empty_glob is enabled, each individual empty\n    # glob will fail without allow_empty = True, even if the overall result is\n    # non-empty.\n    java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n    version = {RUNTIME_VERSION},\n)\n"
+            }
+          },
+          "remote_java_tools_darwin_x86_64": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remote_java_tools_darwin_x86_64",
+              "sha256": "0db40d8505a2b65ef0ed46e4256757807db8162f7acff16225be57c1d5726dbc",
+              "urls": [
+                "https://mirror.bazel.build/bazel_java_tools/releases/java/v13.1/java_tools_darwin_x86_64-v13.1.zip",
+                "https://github.com/bazelbuild/java_tools/releases/download/java_v13.1/java_tools_darwin_x86_64-v13.1.zip"
+              ]
+            }
+          },
+          "remote_java_tools": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remote_java_tools",
+              "sha256": "286bdbbd66e616fc4ed3f90101418729a73baa7e8c23a98ffbef558f74c0ad14",
+              "urls": [
+                "https://mirror.bazel.build/bazel_java_tools/releases/java/v13.1/java_tools-v13.1.zip",
+                "https://github.com/bazelbuild/java_tools/releases/download/java_v13.1/java_tools-v13.1.zip"
+              ]
+            }
+          },
+          "remotejdk17_linux_s390x": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk17_linux_s390x",
+              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        exclude = [\"jre/bin/plugin2/**\"],\n    ),\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n# This folder holds security policies.\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\", \"release\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre\",\n    ],\n    # Provide the 'java` binary explicitly so that the correct path is used by\n    # Bazel even when the host platform differs from the execution platform.\n    # Exactly one of the two globs will be empty depending on the host platform.\n    # When --incompatible_disallow_empty_glob is enabled, each individual empty\n    # glob will fail without allow_empty = True, even if the overall result is\n    # non-empty.\n    java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n    version = 17,\n)\n",
+              "sha256": "ffacba69c6843d7ca70d572489d6cc7ab7ae52c60f0852cedf4cf0d248b6fc37",
+              "strip_prefix": "jdk-17.0.8.1+1",
+              "urls": [
+                "https://mirror.bazel.build/github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.8.1%2B1/OpenJDK17U-jdk_s390x_linux_hotspot_17.0.8.1_1.tar.gz",
+                "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.8.1%2B1/OpenJDK17U-jdk_s390x_linux_hotspot_17.0.8.1_1.tar.gz"
+              ]
+            }
+          },
+          "remotejdk17_win_toolchain_config_repo": {
+            "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl",
+            "ruleClassName": "_toolchain_config",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk17_win_toolchain_config_repo",
+              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_17\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"17\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"//conditions:default\": \":prefix_version_setting\",\n    }),\n    visibility = [\"//visibility:private\"],\n)\ntoolchain(\n    name = \"toolchain\",\n    target_compatible_with = [\"@platforms//os:windows\", \"@platforms//cpu:x86_64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n    toolchain = \"@remotejdk17_win//:jdk\",\n)\ntoolchain(\n    name = \"bootstrap_runtime_toolchain\",\n    # These constraints are not required for correctness, but prevent fetches of remote JDK for\n    # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n    # the same configuration, this constraint will not result in toolchain resolution failures.\n    exec_compatible_with = [\"@platforms//os:windows\", \"@platforms//cpu:x86_64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n    toolchain = \"@remotejdk17_win//:jdk\",\n)\n"
+            }
+          },
+          "remotejdk11_linux_ppc64le": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk11_linux_ppc64le",
+              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        exclude = [\"jre/bin/plugin2/**\"],\n    ),\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n# This folder holds security policies.\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\", \"release\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre\",\n    ],\n    # Provide the 'java` binary explicitly so that the correct path is used by\n    # Bazel even when the host platform differs from the execution platform.\n    # Exactly one of the two globs will be empty depending on the host platform.\n    # When --incompatible_disallow_empty_glob is enabled, each individual empty\n    # glob will fail without allow_empty = True, even if the overall result is\n    # non-empty.\n    java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n    version = 11,\n)\n",
+              "sha256": "a8fba686f6eb8ae1d1a9566821dbd5a85a1108b96ad857fdbac5c1e4649fc56f",
+              "strip_prefix": "jdk-11.0.15+10",
+              "urls": [
+                "https://mirror.bazel.build/github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.15+10/OpenJDK11U-jdk_ppc64le_linux_hotspot_11.0.15_10.tar.gz",
+                "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.15+10/OpenJDK11U-jdk_ppc64le_linux_hotspot_11.0.15_10.tar.gz"
+              ]
+            }
+          },
+          "remotejdk11_macos_aarch64": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk11_macos_aarch64",
+              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        exclude = [\"jre/bin/plugin2/**\"],\n    ),\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n# This folder holds security policies.\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\", \"release\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre\",\n    ],\n    # Provide the 'java` binary explicitly so that the correct path is used by\n    # Bazel even when the host platform differs from the execution platform.\n    # Exactly one of the two globs will be empty depending on the host platform.\n    # When --incompatible_disallow_empty_glob is enabled, each individual empty\n    # glob will fail without allow_empty = True, even if the overall result is\n    # non-empty.\n    java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n    version = 11,\n)\n",
+              "sha256": "7632bc29f8a4b7d492b93f3bc75a7b61630894db85d136456035ab2a24d38885",
+              "strip_prefix": "zulu11.66.15-ca-jdk11.0.20-macosx_aarch64",
+              "urls": [
+                "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu11.66.15-ca-jdk11.0.20-macosx_aarch64.tar.gz",
+                "https://cdn.azul.com/zulu/bin/zulu11.66.15-ca-jdk11.0.20-macosx_aarch64.tar.gz"
+              ]
+            }
+          },
+          "remotejdk21_win_toolchain_config_repo": {
+            "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl",
+            "ruleClassName": "_toolchain_config",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk21_win_toolchain_config_repo",
+              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_21\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"21\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"//conditions:default\": \":prefix_version_setting\",\n    }),\n    visibility = [\"//visibility:private\"],\n)\ntoolchain(\n    name = \"toolchain\",\n    target_compatible_with = [\"@platforms//os:windows\", \"@platforms//cpu:x86_64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n    toolchain = \"@remotejdk21_win//:jdk\",\n)\ntoolchain(\n    name = \"bootstrap_runtime_toolchain\",\n    # These constraints are not required for correctness, but prevent fetches of remote JDK for\n    # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n    # the same configuration, this constraint will not result in toolchain resolution failures.\n    exec_compatible_with = [\"@platforms//os:windows\", \"@platforms//cpu:x86_64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n    toolchain = \"@remotejdk21_win//:jdk\",\n)\n"
+            }
+          }
+        }
+      }
+    },
+    "@rules_jvm_external~5.2//:extensions.bzl%maven": {
+      "general": {
+        "bzlTransitiveDigest": "WAWsskOl4eHIskcL0TuHZGIMjV8sMJaAbAo2luMqofo=",
+        "accumulatedFileDigests": {
+          "@@//:maven_install.json": "cc2396f3421ceaeca5bf2852dc5aa14b83e5a918f4c3dee5a1214b127214584c",
+          "@@rules_jvm_external~5.2//:rules_jvm_external_deps_install.json": "3ab1f67b0de4815df110bc72ccd6c77882b3b21d3d1e0a84445847b6ce3235a3",
+          "@@//src/tools/android:maven_android_install.json": "09bff3e33d291336046f7c9201630fb5e014f0e60b78b6f09b84e4f5f73ed04f"
+        },
+        "envVariables": {},
+        "generatedRepoSpecs": {
+          "com_google_api_gax_1_60_0": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_api_gax_1_60_0",
+              "sha256": "02f37d4ff1a7b8d71dff8064cf9568aa4f4b61bcc4485085d16130f32afa5a79",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/api/gax/1.60.0/gax-1.60.0.jar",
+                "https://maven.google.com/com/google/api/gax/1.60.0/gax-1.60.0.jar"
+              ],
+              "downloaded_file_path": "com/google/api/gax/1.60.0/gax-1.60.0.jar"
+            }
+          },
+          "com_google_http_client_google_http_client_appengine_1_38_0": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_http_client_google_http_client_appengine_1_38_0",
+              "sha256": "f97b495fd97ac3a3d59099eb2b55025f4948230da15a076f189b9cff37c6b4d2",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/http-client/google-http-client-appengine/1.38.0/google-http-client-appengine-1.38.0.jar",
+                "https://maven.google.com/com/google/http-client/google-http-client-appengine/1.38.0/google-http-client-appengine-1.38.0.jar"
+              ],
+              "downloaded_file_path": "com/google/http-client/google-http-client-appengine/1.38.0/google-http-client-appengine-1.38.0.jar"
+            }
+          },
+          "com_ryanharter_auto_value_auto_value_gson_factory_1_3_1": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_ryanharter_auto_value_auto_value_gson_factory_1_3_1",
+              "sha256": "5a76c3d401c984999d59868f08df05a15613d1428f7764fed80b722e2a277f6c",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/ryanharter/auto/value/auto-value-gson-factory/1.3.1/auto-value-gson-factory-1.3.1.jar"
+              ],
+              "downloaded_file_path": "com/ryanharter/auto/value/auto-value-gson-factory/1.3.1/auto-value-gson-factory-1.3.1.jar"
+            }
+          },
+          "com_google_auth_google_auth_library_oauth2_http_0_22_0": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_auth_google_auth_library_oauth2_http_0_22_0",
+              "sha256": "1722d895c42dc42ea1d1f392ddbec1fbb28f7a979022c3a6c29acc39cc777ad1",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/auth/google-auth-library-oauth2-http/0.22.0/google-auth-library-oauth2-http-0.22.0.jar",
+                "https://maven.google.com/com/google/auth/google-auth-library-oauth2-http/0.22.0/google-auth-library-oauth2-http-0.22.0.jar"
+              ],
+              "downloaded_file_path": "com/google/auth/google-auth-library-oauth2-http/0.22.0/google-auth-library-oauth2-http-0.22.0.jar"
+            }
+          },
+          "io_grpc_grpc_protobuf_1_48_1": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~io_grpc_grpc_protobuf_1_48_1",
+              "sha256": "6ab68b0a3bb3834af44208df058be4631425b56ef95f9b9412aa21df3311e8d3",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/grpc/grpc-protobuf/1.48.1/grpc-protobuf-1.48.1.jar"
+              ],
+              "downloaded_file_path": "io/grpc/grpc-protobuf/1.48.1/grpc-protobuf-1.48.1.jar"
+            }
+          },
+          "com_google_jimfs_jimfs_1_1": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_jimfs_jimfs_1_1",
+              "sha256": "c4828e28d7c0a930af9387510b3bada7daa5c04d7c25a75c7b8b081f1c257ddd",
+              "urls": [
+                "https://dl.google.com/android/maven2/com/google/jimfs/jimfs/1.1/jimfs-1.1.jar",
+                "https://repo1.maven.org/maven2/com/google/jimfs/jimfs/1.1/jimfs-1.1.jar"
+              ],
+              "downloaded_file_path": "com/google/jimfs/jimfs/1.1/jimfs-1.1.jar"
+            }
+          },
+          "com_googlecode_json_simple_json_simple_1_1": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_googlecode_json_simple_json_simple_1_1",
+              "sha256": "2d9484f4c649f708f47f9a479465fc729770ee65617dca3011836602264f6439",
+              "urls": [
+                "https://dl.google.com/android/maven2/com/googlecode/json-simple/json-simple/1.1/json-simple-1.1.jar",
+                "https://repo1.maven.org/maven2/com/googlecode/json-simple/json-simple/1.1/json-simple-1.1.jar"
+              ],
+              "downloaded_file_path": "com/googlecode/json-simple/json-simple/1.1/json-simple-1.1.jar"
+            }
+          },
+          "com_github_kevinstern_software_and_algorithms_1_0": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_github_kevinstern_software_and_algorithms_1_0",
+              "sha256": "61ab82439cef37343b14f53154c461619375373a56b9338e895709fb54e0864c",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/github/kevinstern/software-and-algorithms/1.0/software-and-algorithms-1.0.jar"
+              ],
+              "downloaded_file_path": "com/github/kevinstern/software-and-algorithms/1.0/software-and-algorithms-1.0.jar"
+            }
+          },
+          "com_google_jimfs_jimfs_1_2": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_jimfs_jimfs_1_2",
+              "sha256": "de16d5c8489729a8512f1a02fbd81f58f89249b72066987da4cc5c87ecb9f72d",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/jimfs/jimfs/1.2/jimfs-1.2.jar"
+              ],
+              "downloaded_file_path": "com/google/jimfs/jimfs/1.2/jimfs-1.2.jar"
+            }
+          },
+          "org_reactivestreams_reactive_streams_1_0_3": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~org_reactivestreams_reactive_streams_1_0_3",
+              "sha256": "1dee0481072d19c929b623e155e14d2f6085dc011529a0a0dbefc84cf571d865",
+              "urls": [
+                "https://repo1.maven.org/maven2/org/reactivestreams/reactive-streams/1.0.3/reactive-streams-1.0.3.jar"
+              ],
+              "downloaded_file_path": "org/reactivestreams/reactive-streams/1.0.3/reactive-streams-1.0.3.jar"
+            }
+          },
+          "com_android_tools_annotations_30_1_3": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_android_tools_annotations_30_1_3",
+              "sha256": "630ab4c6f211fa1c0f5c884152cb6311360f1b796442196c287a658645a99645",
+              "urls": [
+                "https://dl.google.com/android/maven2/com/android/tools/annotations/30.1.3/annotations-30.1.3.jar",
+                "https://repo1.maven.org/maven2/com/android/tools/annotations/30.1.3/annotations-30.1.3.jar"
+              ],
+              "downloaded_file_path": "com/android/tools/annotations/30.1.3/annotations-30.1.3.jar"
+            }
+          },
+          "io_netty_netty_transport_4_1_72_Final": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~io_netty_netty_transport_4_1_72_Final",
+              "sha256": "c5fb68e9a65b6e8a516adfcb9fa323479ee7b4d9449d8a529d2ecab3d3711d5a",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/netty/netty-transport/4.1.72.Final/netty-transport-4.1.72.Final.jar",
+                "https://maven.google.com/io/netty/netty-transport/4.1.72.Final/netty-transport-4.1.72.Final.jar"
+              ],
+              "downloaded_file_path": "io/netty/netty-transport/4.1.72.Final/netty-transport-4.1.72.Final.jar"
+            }
+          },
+          "org_ow2_asm_asm_util_9_1": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~org_ow2_asm_asm_util_9_1",
+              "sha256": "380e2ecd16f7cc0f1a76ba9ba049179b5760a57b282a87a4c653caeff2cd5bd6",
+              "urls": [
+                "https://dl.google.com/android/maven2/org/ow2/asm/asm-util/9.1/asm-util-9.1.jar",
+                "https://repo1.maven.org/maven2/org/ow2/asm/asm-util/9.1/asm-util-9.1.jar"
+              ],
+              "downloaded_file_path": "org/ow2/asm/asm-util/9.1/asm-util-9.1.jar"
+            }
+          },
+          "org_ow2_asm_asm_util_9_2": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~org_ow2_asm_asm_util_9_2",
+              "sha256": "ff5b3cd331ae8a9a804768280da98f50f424fef23dd3c788bb320e08c94ee598",
+              "urls": [
+                "https://repo1.maven.org/maven2/org/ow2/asm/asm-util/9.2/asm-util-9.2.jar"
+              ],
+              "downloaded_file_path": "org/ow2/asm/asm-util/9.2/asm-util-9.2.jar"
+            }
+          },
+          "io_opencensus_opencensus_api_0_24_0": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~io_opencensus_opencensus_api_0_24_0",
+              "sha256": "f561b1cc2673844288e596ddf5bb6596868a8472fd2cb8993953fc5c034b2352",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/opencensus/opencensus-api/0.24.0/opencensus-api-0.24.0.jar",
+                "https://maven.google.com/io/opencensus/opencensus-api/0.24.0/opencensus-api-0.24.0.jar"
+              ],
+              "downloaded_file_path": "io/opencensus/opencensus-api/0.24.0/opencensus-api-0.24.0.jar"
+            }
+          },
+          "javax_activation_javax_activation_api_1_2_0": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~javax_activation_javax_activation_api_1_2_0",
+              "sha256": "43fdef0b5b6ceb31b0424b208b930c74ab58fac2ceeb7b3f6fd3aeb8b5ca4393",
+              "urls": [
+                "https://repo1.maven.org/maven2/javax/activation/javax.activation-api/1.2.0/javax.activation-api-1.2.0.jar"
+              ],
+              "downloaded_file_path": "javax/activation/javax.activation-api/1.2.0/javax.activation-api-1.2.0.jar"
+            }
+          },
+          "it_unimi_dsi_fastutil_8_4_0": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~it_unimi_dsi_fastutil_8_4_0",
+              "sha256": "2ad2824a4a0a0eb836b52ee2fc84ba2134f44bce7bfa54015ae3f31c710a3071",
+              "urls": [
+                "https://dl.google.com/android/maven2/it/unimi/dsi/fastutil/8.4.0/fastutil-8.4.0.jar",
+                "https://repo1.maven.org/maven2/it/unimi/dsi/fastutil/8.4.0/fastutil-8.4.0.jar"
+              ],
+              "downloaded_file_path": "it/unimi/dsi/fastutil/8.4.0/fastutil-8.4.0.jar"
+            }
+          },
+          "com_android_tools_build_manifest_merger_30_1_3": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_android_tools_build_manifest_merger_30_1_3",
+              "sha256": "fb04445bd588ccd27dacd5e139abed42246f55e6785eebf66659857233207fac",
+              "urls": [
+                "https://dl.google.com/android/maven2/com/android/tools/build/manifest-merger/30.1.3/manifest-merger-30.1.3.jar",
+                "https://repo1.maven.org/maven2/com/android/tools/build/manifest-merger/30.1.3/manifest-merger-30.1.3.jar"
+              ],
+              "downloaded_file_path": "com/android/tools/build/manifest-merger/30.1.3/manifest-merger-30.1.3.jar"
+            }
+          },
+          "org_glassfish_jaxb_jaxb_runtime_2_3_2": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~org_glassfish_jaxb_jaxb_runtime_2_3_2",
+              "sha256": "e6e0a1e89fb6ff786279e6a0082d5cef52dc2ebe67053d041800737652b4fd1b",
+              "urls": [
+                "https://dl.google.com/android/maven2/org/glassfish/jaxb/jaxb-runtime/2.3.2/jaxb-runtime-2.3.2.jar",
+                "https://repo1.maven.org/maven2/org/glassfish/jaxb/jaxb-runtime/2.3.2/jaxb-runtime-2.3.2.jar"
+              ],
+              "downloaded_file_path": "org/glassfish/jaxb/jaxb-runtime/2.3.2/jaxb-runtime-2.3.2.jar"
+            }
+          },
+          "software_amazon_awssdk_netty_nio_client_2_17_183": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~software_amazon_awssdk_netty_nio_client_2_17_183",
+              "sha256": "a6d356f364c56d7b90006b0b7e503b8630010993a5587ce42e74b10b8dca2238",
+              "urls": [
+                "https://repo1.maven.org/maven2/software/amazon/awssdk/netty-nio-client/2.17.183/netty-nio-client-2.17.183.jar",
+                "https://maven.google.com/software/amazon/awssdk/netty-nio-client/2.17.183/netty-nio-client-2.17.183.jar"
+              ],
+              "downloaded_file_path": "software/amazon/awssdk/netty-nio-client/2.17.183/netty-nio-client-2.17.183.jar"
+            }
+          },
+          "com_google_guava_guava_31_1_jre": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_guava_guava_31_1_jre",
+              "sha256": "a42edc9cab792e39fe39bb94f3fca655ed157ff87a8af78e1d6ba5b07c4a00ab",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/guava/guava/31.1-jre/guava-31.1-jre.jar",
+                "https://maven.google.com/com/google/guava/guava/31.1-jre/guava-31.1-jre.jar"
+              ],
+              "downloaded_file_path": "com/google/guava/guava/31.1-jre/guava-31.1-jre.jar"
+            }
+          },
+          "io_netty_netty_transport_native_unix_common_4_1_72_Final": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~io_netty_netty_transport_native_unix_common_4_1_72_Final",
+              "sha256": "6f8f1cc29b5a234eeee9439a63eb3f03a5994aa540ff555cb0b2c88cefaf6877",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/netty/netty-transport-native-unix-common/4.1.72.Final/netty-transport-native-unix-common-4.1.72.Final.jar",
+                "https://maven.google.com/io/netty/netty-transport-native-unix-common/4.1.72.Final/netty-transport-native-unix-common-4.1.72.Final.jar"
+              ],
+              "downloaded_file_path": "io/netty/netty-transport-native-unix-common/4.1.72.Final/netty-transport-native-unix-common-4.1.72.Final.jar"
+            }
+          },
+          "io_grpc_grpc_context_1_48_1": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~io_grpc_grpc_context_1_48_1",
+              "sha256": "2fb9007e12f768e9c968f9db292be4ea9cba2ef40fb8d179f3f8746ebdc73c1b",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/grpc/grpc-context/1.48.1/grpc-context-1.48.1.jar"
+              ],
+              "downloaded_file_path": "io/grpc/grpc-context/1.48.1/grpc-context-1.48.1.jar"
+            }
+          },
+          "io_opencensus_opencensus_contrib_http_util_0_24_0": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~io_opencensus_opencensus_contrib_http_util_0_24_0",
+              "sha256": "7155273bbb1ed3d477ea33cf19d7bbc0b285ff395f43b29ae576722cf247000f",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/opencensus/opencensus-contrib-http-util/0.24.0/opencensus-contrib-http-util-0.24.0.jar",
+                "https://maven.google.com/io/opencensus/opencensus-contrib-http-util/0.24.0/opencensus-contrib-http-util-0.24.0.jar"
+              ],
+              "downloaded_file_path": "io/opencensus/opencensus-contrib-http-util/0.24.0/opencensus-contrib-http-util-0.24.0.jar"
+            }
+          },
+          "io_netty_netty_codec_4_1_93_Final": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~io_netty_netty_codec_4_1_93_Final",
+              "sha256": "990c378168dc6364c6ff569701f4f2f122fffe8998b3e189eba4c4d868ed1084",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/netty/netty-codec/4.1.93.Final/netty-codec-4.1.93.Final.jar"
+              ],
+              "downloaded_file_path": "io/netty/netty-codec/4.1.93.Final/netty-codec-4.1.93.Final.jar"
+            }
+          },
+          "com_google_errorprone_error_prone_core_2_22_0": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_errorprone_error_prone_core_2_22_0",
+              "sha256": "32a3df226a9a47f48dd895a9a89678d50ac404282c33400781c38757e8143f2c",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/errorprone/error_prone_core/2.22.0/error_prone_core-2.22.0.jar"
+              ],
+              "downloaded_file_path": "com/google/errorprone/error_prone_core/2.22.0/error_prone_core-2.22.0.jar"
+            }
+          },
+          "org_apache_httpcomponents_httpcore_4_4_10": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~org_apache_httpcomponents_httpcore_4_4_10",
+              "sha256": "78ba1096561957db1b55200a159b648876430342d15d461277e62360da19f6fd",
+              "urls": [
+                "https://dl.google.com/android/maven2/org/apache/httpcomponents/httpcore/4.4.10/httpcore-4.4.10.jar",
+                "https://repo1.maven.org/maven2/org/apache/httpcomponents/httpcore/4.4.10/httpcore-4.4.10.jar"
+              ],
+              "downloaded_file_path": "org/apache/httpcomponents/httpcore/4.4.10/httpcore-4.4.10.jar"
+            }
+          },
+          "com_android_tools_build_builder_model_7_1_3": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_android_tools_build_builder_model_7_1_3",
+              "sha256": "232604983a99b8372eb1a93e5183d48fc8fc69239e5e6229170be0e3320df430",
+              "urls": [
+                "https://dl.google.com/android/maven2/com/android/tools/build/builder-model/7.1.3/builder-model-7.1.3.jar",
+                "https://repo1.maven.org/maven2/com/android/tools/build/builder-model/7.1.3/builder-model-7.1.3.jar"
+              ],
+              "downloaded_file_path": "com/android/tools/build/builder-model/7.1.3/builder-model-7.1.3.jar"
+            }
+          },
+          "com_android_zipflinger_7_1_3": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_android_zipflinger_7_1_3",
+              "sha256": "c6ed9458f3a85c847f168a7e3719bbd1e7484b97ec00096122ac8a9c4141665f",
+              "urls": [
+                "https://dl.google.com/android/maven2/com/android/zipflinger/7.1.3/zipflinger-7.1.3.jar",
+                "https://repo1.maven.org/maven2/com/android/zipflinger/7.1.3/zipflinger-7.1.3.jar"
+              ],
+              "downloaded_file_path": "com/android/zipflinger/7.1.3/zipflinger-7.1.3.jar"
+            }
+          },
+          "org_apache_httpcomponents_httpcore_4_4_13": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~org_apache_httpcomponents_httpcore_4_4_13",
+              "sha256": "e06e89d40943245fcfa39ec537cdbfce3762aecde8f9c597780d2b00c2b43424",
+              "urls": [
+                "https://repo1.maven.org/maven2/org/apache/httpcomponents/httpcore/4.4.13/httpcore-4.4.13.jar",
+                "https://maven.google.com/org/apache/httpcomponents/httpcore/4.4.13/httpcore-4.4.13.jar"
+              ],
+              "downloaded_file_path": "org/apache/httpcomponents/httpcore/4.4.13/httpcore-4.4.13.jar"
+            }
+          },
+          "io_netty_netty_handler_proxy_4_1_93_Final": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~io_netty_netty_handler_proxy_4_1_93_Final",
+              "sha256": "2ac5f7fbefa0b73ef783889069344d5515505a14b2303be693c5002c486df2b4",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/netty/netty-handler-proxy/4.1.93.Final/netty-handler-proxy-4.1.93.Final.jar"
+              ],
+              "downloaded_file_path": "io/netty/netty-handler-proxy/4.1.93.Final/netty-handler-proxy-4.1.93.Final.jar"
+            }
+          },
+          "io_netty_netty_common_4_1_72_Final": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~io_netty_netty_common_4_1_72_Final",
+              "sha256": "8adb4c291260ceb2859a68c49f0adeed36bf49587608e2b81ecff6aaf06025e9",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/netty/netty-common/4.1.72.Final/netty-common-4.1.72.Final.jar",
+                "https://maven.google.com/io/netty/netty-common/4.1.72.Final/netty-common-4.1.72.Final.jar"
+              ],
+              "downloaded_file_path": "io/netty/netty-common/4.1.72.Final/netty-common-4.1.72.Final.jar"
+            }
+          },
+          "com_android_tools_build_builder_7_1_3": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_android_tools_build_builder_7_1_3",
+              "sha256": "4b33ed3941563ffc67f8aeedc480aafd958ec6cd1fe661f0b2b5b0d9c1423649",
+              "urls": [
+                "https://dl.google.com/android/maven2/com/android/tools/build/builder/7.1.3/builder-7.1.3.jar",
+                "https://repo1.maven.org/maven2/com/android/tools/build/builder/7.1.3/builder-7.1.3.jar"
+              ],
+              "downloaded_file_path": "com/android/tools/build/builder/7.1.3/builder-7.1.3.jar"
+            }
+          },
+          "com_sun_istack_istack_commons_runtime_3_0_8": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_sun_istack_istack_commons_runtime_3_0_8",
+              "sha256": "4ffabb06be454a05e4398e20c77fa2b6308d4b88dfbef7ca30a76b5b7d5505ef",
+              "urls": [
+                "https://dl.google.com/android/maven2/com/sun/istack/istack-commons-runtime/3.0.8/istack-commons-runtime-3.0.8.jar",
+                "https://repo1.maven.org/maven2/com/sun/istack/istack-commons-runtime/3.0.8/istack-commons-runtime-3.0.8.jar"
+              ],
+              "downloaded_file_path": "com/sun/istack/istack-commons-runtime/3.0.8/istack-commons-runtime-3.0.8.jar"
+            }
+          },
+          "com_google_protobuf_protobuf_java_3_10_0": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_protobuf_protobuf_java_3_10_0",
+              "sha256": "161d7d61a8cb3970891c299578702fd079646e032329d6c2cabf998d191437c9",
+              "urls": [
+                "https://dl.google.com/android/maven2/com/google/protobuf/protobuf-java/3.10.0/protobuf-java-3.10.0.jar",
+                "https://repo1.maven.org/maven2/com/google/protobuf/protobuf-java/3.10.0/protobuf-java-3.10.0.jar"
+              ],
+              "downloaded_file_path": "com/google/protobuf/protobuf-java/3.10.0/protobuf-java-3.10.0.jar"
+            }
+          },
+          "software_amazon_awssdk_utils_2_17_183": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~software_amazon_awssdk_utils_2_17_183",
+              "sha256": "7bd849bb5aa71bfdf6b849643736ecab3a7b3f204795804eefe5754104231ec6",
+              "urls": [
+                "https://repo1.maven.org/maven2/software/amazon/awssdk/utils/2.17.183/utils-2.17.183.jar",
+                "https://maven.google.com/software/amazon/awssdk/utils/2.17.183/utils-2.17.183.jar"
+              ],
+              "downloaded_file_path": "software/amazon/awssdk/utils/2.17.183/utils-2.17.183.jar"
+            }
+          },
+          "com_google_truth_extensions_truth_proto_extension_1_1_3": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_truth_extensions_truth_proto_extension_1_1_3",
+              "sha256": "821993e4794e7034ae4a7b68105ef83f1913f0de6112f2fe4b5a7130f6a2bf49",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/truth/extensions/truth-proto-extension/1.1.3/truth-proto-extension-1.1.3.jar"
+              ],
+              "downloaded_file_path": "com/google/truth/extensions/truth-proto-extension/1.1.3/truth-proto-extension-1.1.3.jar"
+            }
+          },
+          "com_google_errorprone_error_prone_type_annotations_2_22_0": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_errorprone_error_prone_type_annotations_2_22_0",
+              "sha256": "6618b1d28df562622b77187b5c6dfc9c4c97851af73bd64dc0300efe9a439b20",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/errorprone/error_prone_type_annotations/2.22.0/error_prone_type_annotations-2.22.0.jar"
+              ],
+              "downloaded_file_path": "com/google/errorprone/error_prone_type_annotations/2.22.0/error_prone_type_annotations-2.22.0.jar"
+            }
+          },
+          "io_netty_netty_transport_native_kqueue_jar_osx_aarch_64_4_1_93_Final": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~io_netty_netty_transport_native_kqueue_jar_osx_aarch_64_4_1_93_Final",
+              "sha256": "6e9f04b5a16ba95b7371a735d60851602a3f3c549981edb74eeaf90e1b8fecce",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/netty/netty-transport-native-kqueue/4.1.93.Final/netty-transport-native-kqueue-4.1.93.Final-osx-aarch_64.jar"
+              ],
+              "downloaded_file_path": "io/netty/netty-transport-native-kqueue/4.1.93.Final/netty-transport-native-kqueue-4.1.93.Final-osx-aarch_64.jar"
+            }
+          },
+          "unpinned_maven": {
+            "bzlFile": "@@rules_jvm_external~5.2//:coursier.bzl",
+            "ruleClassName": "coursier_fetch",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~unpinned_maven",
+              "repositories": [
+                "{ \"repo_url\": \"https://repo1.maven.org/maven2\" }"
+              ],
+              "artifacts": [
+                "{ \"group\": \"com.google.guava\", \"artifact\": \"guava-testlib\", \"version\": \"31.1-jre\", \"testonly\": true }",
+                "{ \"group\": \"com.google.jimfs\", \"artifact\": \"jimfs\", \"version\": \"1.2\", \"testonly\": true }",
+                "{ \"group\": \"com.google.testing.compile\", \"artifact\": \"compile-testing\", \"version\": \"0.18\", \"testonly\": true }",
+                "{ \"group\": \"com.google.testparameterinjector\", \"artifact\": \"test-parameter-injector\", \"version\": \"1.0\", \"testonly\": true }",
+                "{ \"group\": \"com.google.truth\", \"artifact\": \"truth\", \"version\": \"1.1.3\", \"testonly\": true }",
+                "{ \"group\": \"com.google.truth.extensions\", \"artifact\": \"truth-java8-extension\", \"version\": \"1.1.3\", \"testonly\": true }",
+                "{ \"group\": \"com.google.truth.extensions\", \"artifact\": \"truth-liteproto-extension\", \"version\": \"1.1.3\", \"testonly\": true }",
+                "{ \"group\": \"com.google.truth.extensions\", \"artifact\": \"truth-proto-extension\", \"version\": \"1.1.3\", \"testonly\": true }",
+                "{ \"group\": \"org.mockito\", \"artifact\": \"mockito-core\", \"version\": \"5.4.0\", \"testonly\": true }",
+                "{ \"group\": \"com.beust\", \"artifact\": \"jcommander\", \"version\": \"1.82\" }",
+                "{ \"group\": \"com.github.ben-manes.caffeine\", \"artifact\": \"caffeine\", \"version\": \"3.0.5\" }",
+                "{ \"group\": \"com.github.kevinstern\", \"artifact\": \"software-and-algorithms\", \"version\": \"1.0\" }",
+                "{ \"group\": \"com.github.stephenc.jcip\", \"artifact\": \"jcip-annotations\", \"version\": \"1.0-1\" }",
+                "{ \"group\": \"com.google.api-client\", \"artifact\": \"google-api-client-gson\", \"version\": \"1.35.2\" }",
+                "{ \"group\": \"com.google.api-client\", \"artifact\": \"google-api-client\", \"version\": \"1.35.2\" }",
+                "{ \"group\": \"com.google.auth\", \"artifact\": \"google-auth-library-credentials\", \"version\": \"1.6.0\" }",
+                "{ \"group\": \"com.google.auth\", \"artifact\": \"google-auth-library-oauth2-http\", \"version\": \"1.6.0\" }",
+                "{ \"group\": \"com.google.auto.service\", \"artifact\": \"auto-service-annotations\", \"version\": \"1.0.1\" }",
+                "{ \"group\": \"com.google.auto.service\", \"artifact\": \"auto-service\", \"version\": \"1.0\" }",
+                "{ \"group\": \"com.google.auto.value\", \"artifact\": \"auto-value-annotations\", \"version\": \"1.9\" }",
+                "{ \"group\": \"com.google.auto.value\", \"artifact\": \"auto-value\", \"version\": \"1.8.2\" }",
+                "{ \"group\": \"com.google.auto\", \"artifact\": \"auto-common\", \"version\": \"1.2.1\" }",
+                "{ \"group\": \"com.google.code.findbugs\", \"artifact\": \"jsr305\", \"version\": \"3.0.2\" }",
+                "{ \"group\": \"com.google.code.gson\", \"artifact\": \"gson\", \"version\": \"2.9.0\" }",
+                "{ \"group\": \"com.google.code.java-allocation-instrumenter\", \"artifact\": \"java-allocation-instrumenter\", \"version\": \"3.3.0\" }",
+                "{ \"group\": \"com.google.errorprone\", \"artifact\": \"error_prone_annotation\", \"version\": \"2.22.0\" }",
+                "{ \"group\": \"com.google.errorprone\", \"artifact\": \"error_prone_annotations\", \"version\": \"2.22.0\" }",
+                "{ \"group\": \"com.google.errorprone\", \"artifact\": \"error_prone_check_api\", \"version\": \"2.22.0\" }",
+                "{ \"group\": \"com.google.errorprone\", \"artifact\": \"error_prone_core\", \"version\": \"2.22.0\" }",
+                "{ \"group\": \"com.google.errorprone\", \"artifact\": \"error_prone_type_annotations\", \"version\": \"2.22.0\" }",
+                "{ \"group\": \"com.google.flogger\", \"artifact\": \"flogger-system-backend\", \"version\": \"0.5.1\" }",
+                "{ \"group\": \"com.google.flogger\", \"artifact\": \"flogger\", \"version\": \"0.5.1\" }",
+                "{ \"group\": \"com.google.flogger\", \"artifact\": \"google-extensions\", \"version\": \"0.5.1\" }",
+                "{ \"group\": \"com.google.guava\", \"artifact\": \"failureaccess\", \"version\": \"1.0.1\" }",
+                "{ \"group\": \"com.google.guava\", \"artifact\": \"guava\", \"version\": \"31.1-jre\" }",
+                "{ \"group\": \"com.google.http-client\", \"artifact\": \"google-http-client-gson\", \"version\": \"1.42.0\" }",
+                "{ \"group\": \"com.google.http-client\", \"artifact\": \"google-http-client\", \"version\": \"1.42.0\" }",
+                "{ \"group\": \"com.google.j2objc\", \"artifact\": \"j2objc-annotations\", \"version\": \"1.3\" }",
+                "{ \"group\": \"com.google.turbine\", \"artifact\": \"turbine\", \"version\": \"0.2\" }",
+                "{ \"group\": \"com.ryanharter.auto.value\", \"artifact\": \"auto-value-gson-extension\", \"version\": \"1.3.1\" }",
+                "{ \"group\": \"com.ryanharter.auto.value\", \"artifact\": \"auto-value-gson-runtime\", \"version\": \"1.3.1\" }",
+                "{ \"group\": \"com.ryanharter.auto.value\", \"artifact\": \"auto-value-gson-factory\", \"version\": \"1.3.1\" }",
+                "{ \"group\": \"com.squareup\", \"artifact\": \"javapoet\", \"version\": \"1.12.0\" }",
+                "{ \"group\": \"commons-collections\", \"artifact\": \"commons-collections\", \"version\": \"3.2.2\" }",
+                "{ \"group\": \"commons-lang\", \"artifact\": \"commons-lang\", \"version\": \"2.6\" }",
+                "{ \"group\": \"io.github.java-diff-utils\", \"artifact\": \"java-diff-utils\", \"version\": \"4.12\" }",
+                "{ \"group\": \"io.grpc\", \"artifact\": \"grpc-api\", \"version\": \"1.48.1\" }",
+                "{ \"group\": \"io.grpc\", \"artifact\": \"grpc-auth\", \"version\": \"1.48.1\" }",
+                "{ \"group\": \"io.grpc\", \"artifact\": \"grpc-context\", \"version\": \"1.48.1\" }",
+                "{ \"group\": \"io.grpc\", \"artifact\": \"grpc-core\", \"version\": \"1.48.1\" }",
+                "{ \"group\": \"io.grpc\", \"artifact\": \"grpc-netty\", \"version\": \"1.48.1\" }",
+                "{ \"group\": \"io.grpc\", \"artifact\": \"grpc-protobuf-lite\", \"version\": \"1.48.1\" }",
+                "{ \"group\": \"io.grpc\", \"artifact\": \"grpc-protobuf\", \"version\": \"1.48.1\" }",
+                "{ \"group\": \"io.grpc\", \"artifact\": \"grpc-stub\", \"version\": \"1.48.1\" }",
+                "{ \"group\": \"io.netty\", \"artifact\": \"netty-buffer\", \"version\": \"4.1.93.Final\" }",
+                "{ \"group\": \"io.netty\", \"artifact\": \"netty-codec-http2\", \"version\": \"4.1.93.Final\" }",
+                "{ \"group\": \"io.netty\", \"artifact\": \"netty-codec-http\", \"version\": \"4.1.93.Final\" }",
+                "{ \"group\": \"io.netty\", \"artifact\": \"netty-codec\", \"version\": \"4.1.93.Final\" }",
+                "{ \"group\": \"io.netty\", \"artifact\": \"netty-common\", \"version\": \"4.1.93.Final\" }",
+                "{ \"group\": \"io.netty\", \"artifact\": \"netty-handler-proxy\", \"version\": \"4.1.93.Final\" }",
+                "{ \"group\": \"io.netty\", \"artifact\": \"netty-handler\", \"version\": \"4.1.93.Final\" }",
+                "{ \"group\": \"io.netty\", \"artifact\": \"netty-resolver-dns\", \"version\": \"4.1.93.Final\" }",
+                "{ \"group\": \"io.netty\", \"artifact\": \"netty-resolver\", \"version\": \"4.1.93.Final\" }",
+                "{ \"group\": \"io.netty\", \"artifact\": \"netty-tcnative-boringssl-static\", \"version\": \"2.0.56.Final\", \"packaging\": \"jar\", \"classifier\": \"linux-aarch_64\" }",
+                "{ \"group\": \"io.netty\", \"artifact\": \"netty-tcnative-boringssl-static\", \"version\": \"2.0.56.Final\", \"packaging\": \"jar\", \"classifier\": \"linux-x86_64\" }",
+                "{ \"group\": \"io.netty\", \"artifact\": \"netty-tcnative-boringssl-static\", \"version\": \"2.0.56.Final\", \"packaging\": \"jar\", \"classifier\": \"osx-aarch_64\" }",
+                "{ \"group\": \"io.netty\", \"artifact\": \"netty-tcnative-boringssl-static\", \"version\": \"2.0.56.Final\", \"packaging\": \"jar\", \"classifier\": \"osx-x86_64\" }",
+                "{ \"group\": \"io.netty\", \"artifact\": \"netty-tcnative-boringssl-static\", \"version\": \"2.0.56.Final\", \"packaging\": \"jar\", \"classifier\": \"windows-x86_64\" }",
+                "{ \"group\": \"io.netty\", \"artifact\": \"netty-tcnative-classes\", \"version\": \"2.0.56.Final\" }",
+                "{ \"group\": \"io.netty\", \"artifact\": \"netty-transport-classes-epoll\", \"version\": \"4.1.93.Final\" }",
+                "{ \"group\": \"io.netty\", \"artifact\": \"netty-transport-classes-kqueue\", \"version\": \"4.1.93.Final\" }",
+                "{ \"group\": \"io.netty\", \"artifact\": \"netty-transport-native-epoll\", \"version\": \"4.1.93.Final\", \"packaging\": \"jar\", \"classifier\": \"linux-aarch_64\" }",
+                "{ \"group\": \"io.netty\", \"artifact\": \"netty-transport-native-epoll\", \"version\": \"4.1.93.Final\", \"packaging\": \"jar\", \"classifier\": \"linux-x86_64\" }",
+                "{ \"group\": \"io.netty\", \"artifact\": \"netty-transport-native-kqueue\", \"version\": \"4.1.93.Final\", \"packaging\": \"jar\", \"classifier\": \"osx-aarch_64\" }",
+                "{ \"group\": \"io.netty\", \"artifact\": \"netty-transport-native-kqueue\", \"version\": \"4.1.93.Final\", \"packaging\": \"jar\", \"classifier\": \"osx-x86_64\" }",
+                "{ \"group\": \"io.netty\", \"artifact\": \"netty-transport-native-unix-common\", \"version\": \"4.1.93.Final\" }",
+                "{ \"group\": \"io.netty\", \"artifact\": \"netty-transport-native-unix-common\", \"version\": \"4.1.93.Final\", \"packaging\": \"jar\", \"classifier\": \"linux-aarch_64\" }",
+                "{ \"group\": \"io.netty\", \"artifact\": \"netty-transport-native-unix-common\", \"version\": \"4.1.93.Final\", \"packaging\": \"jar\", \"classifier\": \"linux-x86_64\" }",
+                "{ \"group\": \"io.netty\", \"artifact\": \"netty-transport-native-unix-common\", \"version\": \"4.1.93.Final\", \"packaging\": \"jar\", \"classifier\": \"osx-aarch_64\" }",
+                "{ \"group\": \"io.netty\", \"artifact\": \"netty-transport-native-unix-common\", \"version\": \"4.1.93.Final\", \"packaging\": \"jar\", \"classifier\": \"osx-x86_64\" }",
+                "{ \"group\": \"io.netty\", \"artifact\": \"netty-transport\", \"version\": \"4.1.93.Final\" }",
+                "{ \"group\": \"io.reactivex.rxjava3\", \"artifact\": \"rxjava\", \"version\": \"3.1.2\" }",
+                "{ \"group\": \"javax.activation\", \"artifact\": \"javax.activation-api\", \"version\": \"1.2.0\" }",
+                "{ \"group\": \"javax.annotation\", \"artifact\": \"javax.annotation-api\", \"version\": \"1.3.2\" }",
+                "{ \"group\": \"javax.inject\", \"artifact\": \"javax.inject\", \"version\": \"1\" }",
+                "{ \"group\": \"net.bytebuddy\", \"artifact\": \"byte-buddy-agent\", \"version\": \"1.14.5\" }",
+                "{ \"group\": \"net.bytebuddy\", \"artifact\": \"byte-buddy\", \"version\": \"1.14.5\" }",
+                "{ \"group\": \"org.apache.commons\", \"artifact\": \"commons-compress\", \"version\": \"1.20\" }",
+                "{ \"group\": \"org.apache.commons\", \"artifact\": \"commons-pool2\", \"version\": \"2.8.0\" }",
+                "{ \"group\": \"org.apache.tomcat\", \"artifact\": \"tomcat-annotations-api\", \"version\": \"8.0.5\" }",
+                "{ \"group\": \"org.apache.velocity\", \"artifact\": \"velocity\", \"version\": \"1.7\" }",
+                "{ \"group\": \"org.checkerframework\", \"artifact\": \"checker-qual\", \"version\": \"3.19.0\" }",
+                "{ \"group\": \"org.ow2.asm\", \"artifact\": \"asm-analysis\", \"version\": \"9.2\" }",
+                "{ \"group\": \"org.ow2.asm\", \"artifact\": \"asm-commons\", \"version\": \"9.2\" }",
+                "{ \"group\": \"org.ow2.asm\", \"artifact\": \"asm-tree\", \"version\": \"9.2\" }",
+                "{ \"group\": \"org.ow2.asm\", \"artifact\": \"asm-util\", \"version\": \"9.2\" }",
+                "{ \"group\": \"org.ow2.asm\", \"artifact\": \"asm\", \"version\": \"9.2\" }",
+                "{ \"group\": \"org.pcollections\", \"artifact\": \"pcollections\", \"version\": \"3.1.4\" }",
+                "{ \"group\": \"org.threeten\", \"artifact\": \"threeten-extra\", \"version\": \"1.5.0\" }",
+                "{ \"group\": \"org.tukaani\", \"artifact\": \"xz\", \"version\": \"1.9\" }",
+                "{ \"group\": \"org.yaml\", \"artifact\": \"snakeyaml\", \"version\": \"1.28\" }",
+                "{ \"group\": \"tools.profiler\", \"artifact\": \"async-profiler\", \"version\": \"2.9\" }",
+                "{ \"group\": \"junit\", \"artifact\": \"junit\", \"version\": \"4.13.2\" }",
+                "{ \"group\": \"org.hamcrest\", \"artifact\": \"hamcrest-core\", \"version\": \"1.3\" }",
+                "{ \"group\": \"com.google.code.findbugs\", \"artifact\": \"jsr305\", \"version\": \"3.0.2\" }",
+                "{ \"group\": \"com.google.code.gson\", \"artifact\": \"gson\", \"version\": \"2.8.9\" }",
+                "{ \"group\": \"com.google.errorprone\", \"artifact\": \"error_prone_annotations\", \"version\": \"2.3.2\" }",
+                "{ \"group\": \"com.google.j2objc\", \"artifact\": \"j2objc-annotations\", \"version\": \"1.3\" }",
+                "{ \"group\": \"com.google.guava\", \"artifact\": \"guava\", \"version\": \"31.1-jre\" }",
+                "{ \"group\": \"com.google.guava\", \"artifact\": \"guava-testlib\", \"version\": \"31.1-jre\" }",
+                "{ \"group\": \"com.google.truth\", \"artifact\": \"truth\", \"version\": \"1.1.2\" }",
+                "{ \"group\": \"junit\", \"artifact\": \"junit\", \"version\": \"4.13.2\" }",
+                "{ \"group\": \"org.mockito\", \"artifact\": \"mockito-core\", \"version\": \"4.3.1\" }"
+              ],
+              "fail_on_missing_checksum": true,
+              "fetch_sources": false,
+              "fetch_javadoc": false,
+              "excluded_artifacts": [
+                "{ \"group\": \"org.apache.httpcomponents\", \"artifact\": \"httpclient\" }",
+                "{ \"group\": \"org.apache.httpcomponents\", \"artifact\": \"httpcore\" }",
+                "{ \"group\": \"org.eclipse.jgit\", \"artifact\": \"org.eclipse.jgit\" }",
+                "{ \"group\": \"com.google.protobuf\", \"artifact\": \"protobuf-java\" }",
+                "{ \"group\": \"com.google.protobuf\", \"artifact\": \"protobuf-javalite\" }"
+              ],
+              "generate_compat_repositories": false,
+              "version_conflict_policy": "default",
+              "override_targets": {},
+              "strict_visibility": true,
+              "strict_visibility_value": [
+                "@@//visibility:private"
+              ],
+              "maven_install_json": "@@//:maven_install.json",
+              "resolve_timeout": 600,
+              "jetify": false,
+              "jetify_include_list": [
+                "*"
+              ],
+              "use_starlark_android_rules": false,
+              "aar_import_bzl_label": "@build_bazel_rules_android//android:rules.bzl",
+              "duplicate_version_warning": "warn"
+            }
+          },
+          "com_google_testing_compile_compile_testing_0_18": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_testing_compile_compile_testing_0_18",
+              "sha256": "92cfbee5ad356a403d36688ab7bae74be65db9a117478ace34ac3ab4d1f9feb9",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/testing/compile/compile-testing/0.18/compile-testing-0.18.jar"
+              ],
+              "downloaded_file_path": "com/google/testing/compile/compile-testing/0.18/compile-testing-0.18.jar"
+            }
+          },
+          "io_netty_netty_transport_native_kqueue_jar_osx_x86_64_4_1_93_Final": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~io_netty_netty_transport_native_kqueue_jar_osx_x86_64_4_1_93_Final",
+              "sha256": "bf3a21e503d26a600e2469e98f5acaadb57c18f207a51e8a7073b875c5f50e03",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/netty/netty-transport-native-kqueue/4.1.93.Final/netty-transport-native-kqueue-4.1.93.Final-osx-x86_64.jar"
+              ],
+              "downloaded_file_path": "io/netty/netty-transport-native-kqueue/4.1.93.Final/netty-transport-native-kqueue-4.1.93.Final-osx-x86_64.jar"
+            }
+          },
+          "org_apache_tomcat_tomcat_annotations_api_8_0_5": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~org_apache_tomcat_tomcat_annotations_api_8_0_5",
+              "sha256": "748677bebb1651a313317dfd93e984ed8f8c9e345538fa8b0ab0cbb804631953",
+              "urls": [
+                "https://repo1.maven.org/maven2/org/apache/tomcat/tomcat-annotations-api/8.0.5/tomcat-annotations-api-8.0.5.jar"
+              ],
+              "downloaded_file_path": "org/apache/tomcat/tomcat-annotations-api/8.0.5/tomcat-annotations-api-8.0.5.jar"
+            }
+          },
+          "com_android_tools_analytics_library_protos_30_1_3": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_android_tools_analytics_library_protos_30_1_3",
+              "sha256": "6c7c2fc5ea590797db1532d7879b717cdd6328c8f74c0e32ddccdf392e94ffe6",
+              "urls": [
+                "https://dl.google.com/android/maven2/com/android/tools/analytics-library/protos/30.1.3/protos-30.1.3.jar",
+                "https://repo1.maven.org/maven2/com/android/tools/analytics-library/protos/30.1.3/protos-30.1.3.jar"
+              ],
+              "downloaded_file_path": "com/android/tools/analytics-library/protos/30.1.3/protos-30.1.3.jar"
+            }
+          },
+          "com_android_signflinger_7_1_3": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_android_signflinger_7_1_3",
+              "sha256": "899a4da318f83e6e8e64d3a51bf97add91b4c642a52f7162d3333c2f74ff4555",
+              "urls": [
+                "https://dl.google.com/android/maven2/com/android/signflinger/7.1.3/signflinger-7.1.3.jar",
+                "https://repo1.maven.org/maven2/com/android/signflinger/7.1.3/signflinger-7.1.3.jar"
+              ],
+              "downloaded_file_path": "com/android/signflinger/7.1.3/signflinger-7.1.3.jar"
+            }
+          },
+          "org_checkerframework_checker_compat_qual_2_5_3": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~org_checkerframework_checker_compat_qual_2_5_3",
+              "sha256": "d76b9afea61c7c082908023f0cbc1427fab9abd2df915c8b8a3e7a509bccbc6d",
+              "urls": [
+                "https://repo1.maven.org/maven2/org/checkerframework/checker-compat-qual/2.5.3/checker-compat-qual-2.5.3.jar"
+              ],
+              "downloaded_file_path": "org/checkerframework/checker-compat-qual/2.5.3/checker-compat-qual-2.5.3.jar"
+            }
+          },
+          "org_ow2_asm_asm_9_2": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~org_ow2_asm_asm_9_2",
+              "sha256": "b9d4fe4d71938df38839f0eca42aaaa64cf8b313d678da036f0cb3ca199b47f5",
+              "urls": [
+                "https://repo1.maven.org/maven2/org/ow2/asm/asm/9.2/asm-9.2.jar"
+              ],
+              "downloaded_file_path": "org/ow2/asm/asm/9.2/asm-9.2.jar"
+            }
+          },
+          "com_android_tools_repository_30_1_3": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_android_tools_repository_30_1_3",
+              "sha256": "11e2489f49f45b7709d080c2a82691ba42cfe8e13d3ac55487592fb550adb597",
+              "urls": [
+                "https://dl.google.com/android/maven2/com/android/tools/repository/30.1.3/repository-30.1.3.jar",
+                "https://repo1.maven.org/maven2/com/android/tools/repository/30.1.3/repository-30.1.3.jar"
+              ],
+              "downloaded_file_path": "com/android/tools/repository/30.1.3/repository-30.1.3.jar"
+            }
+          },
+          "org_checkerframework_checker_compat_qual_2_5_5": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~org_checkerframework_checker_compat_qual_2_5_5",
+              "sha256": "11d134b245e9cacc474514d2d66b5b8618f8039a1465cdc55bbc0b34e0008b7a",
+              "urls": [
+                "https://repo1.maven.org/maven2/org/checkerframework/checker-compat-qual/2.5.5/checker-compat-qual-2.5.5.jar",
+                "https://maven.google.com/org/checkerframework/checker-compat-qual/2.5.5/checker-compat-qual-2.5.5.jar"
+              ],
+              "downloaded_file_path": "org/checkerframework/checker-compat-qual/2.5.5/checker-compat-qual-2.5.5.jar"
+            }
+          },
+          "org_ow2_asm_asm_9_1": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~org_ow2_asm_asm_9_1",
+              "sha256": "cda4de455fab48ff0bcb7c48b4639447d4de859a7afc30a094a986f0936beba2",
+              "urls": [
+                "https://dl.google.com/android/maven2/org/ow2/asm/asm/9.1/asm-9.1.jar",
+                "https://repo1.maven.org/maven2/org/ow2/asm/asm/9.1/asm-9.1.jar"
+              ],
+              "downloaded_file_path": "org/ow2/asm/asm/9.1/asm-9.1.jar"
+            }
+          },
+          "io_netty_netty_tcnative_boringssl_static_jar_linux_aarch_64_2_0_56_Final": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~io_netty_netty_tcnative_boringssl_static_jar_linux_aarch_64_2_0_56_Final",
+              "sha256": "8e5a30fc4a9514714367813f8027df4c9672746797b0699d83958d678e5cfeca",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/netty/netty-tcnative-boringssl-static/2.0.56.Final/netty-tcnative-boringssl-static-2.0.56.Final-linux-aarch_64.jar"
+              ],
+              "downloaded_file_path": "io/netty/netty-tcnative-boringssl-static/2.0.56.Final/netty-tcnative-boringssl-static-2.0.56.Final-linux-aarch_64.jar"
+            }
+          },
+          "com_google_googlejavaformat_google_java_format_1_15_0": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_googlejavaformat_google_java_format_1_15_0",
+              "sha256": "4f546cfe159547ac3b9547daa9649e728f6abc254979c975f1cb9971793692c3",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/googlejavaformat/google-java-format/1.15.0/google-java-format-1.15.0.jar",
+                "https://maven.google.com/com/google/googlejavaformat/google-java-format/1.15.0/google-java-format-1.15.0.jar"
+              ],
+              "downloaded_file_path": "com/google/googlejavaformat/google-java-format/1.15.0/google-java-format-1.15.0.jar"
+            }
+          },
+          "com_google_guava_listenablefuture_9999_0_empty_to_avoid_conflict_with_guava": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_guava_listenablefuture_9999_0_empty_to_avoid_conflict_with_guava",
+              "sha256": "b372a037d4230aa57fbeffdef30fd6123f9c0c2db85d0aced00c91b974f33f99",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar"
+              ],
+              "downloaded_file_path": "com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar"
+            }
+          },
+          "io_netty_netty_transport_4_1_93_Final": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~io_netty_netty_transport_4_1_93_Final",
+              "sha256": "a5a78019bc1cd43dbc3c7b7cdd3801912ca26d1f498fb560514fee497864ba96",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/netty/netty-transport/4.1.93.Final/netty-transport-4.1.93.Final.jar"
+              ],
+              "downloaded_file_path": "io/netty/netty-transport/4.1.93.Final/netty-transport-4.1.93.Final.jar"
+            }
+          },
+          "com_google_oauth_client_google_oauth_client_1_34_1": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_oauth_client_google_oauth_client_1_34_1",
+              "sha256": "193edf97aefa28b93c5892bdc598bac34fa4c396588030084f290b1440e8b98a",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/oauth-client/google-oauth-client/1.34.1/google-oauth-client-1.34.1.jar"
+              ],
+              "downloaded_file_path": "com/google/oauth-client/google-oauth-client/1.34.1/google-oauth-client-1.34.1.jar"
+            }
+          },
+          "org_bouncycastle_bcprov_jdk15on_1_56": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~org_bouncycastle_bcprov_jdk15on_1_56",
+              "sha256": "963e1ee14f808ffb99897d848ddcdb28fa91ddda867eb18d303e82728f878349",
+              "urls": [
+                "https://dl.google.com/android/maven2/org/bouncycastle/bcprov-jdk15on/1.56/bcprov-jdk15on-1.56.jar",
+                "https://repo1.maven.org/maven2/org/bouncycastle/bcprov-jdk15on/1.56/bcprov-jdk15on-1.56.jar"
+              ],
+              "downloaded_file_path": "org/bouncycastle/bcprov-jdk15on/1.56/bcprov-jdk15on-1.56.jar"
+            }
+          },
+          "com_google_flogger_flogger_system_backend_0_5_1": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_flogger_flogger_system_backend_0_5_1",
+              "sha256": "685de33b53eb313049bbeee7f4b7a80dd09e8e754e96b048a3edab2cebb36442",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/flogger/flogger-system-backend/0.5.1/flogger-system-backend-0.5.1.jar"
+              ],
+              "downloaded_file_path": "com/google/flogger/flogger-system-backend/0.5.1/flogger-system-backend-0.5.1.jar"
+            }
+          },
+          "org_jetbrains_kotlin_kotlin_reflect_1_4_32": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~org_jetbrains_kotlin_kotlin_reflect_1_4_32",
+              "sha256": "dbf19e9cdaa9c3c170f3f6f6ce3922f38dfc1d7fa1cab5b7c23a19da8b5eec5b",
+              "urls": [
+                "https://dl.google.com/android/maven2/org/jetbrains/kotlin/kotlin-reflect/1.4.32/kotlin-reflect-1.4.32.jar",
+                "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.4.32/kotlin-reflect-1.4.32.jar"
+              ],
+              "downloaded_file_path": "org/jetbrains/kotlin/kotlin-reflect/1.4.32/kotlin-reflect-1.4.32.jar"
+            }
+          },
+          "androidx_databinding_databinding_compiler_3_4_0_alpha10": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~androidx_databinding_databinding_compiler_3_4_0_alpha10",
+              "sha256": "2d741da6cc20a3f0136b6fdce6babf92d8b5115b37b05c61dd8ce6832499d629",
+              "urls": [
+                "https://dl.google.com/android/maven2/androidx/databinding/databinding-compiler/3.4.0-alpha10/databinding-compiler-3.4.0-alpha10.jar",
+                "https://repo1.maven.org/maven2/androidx/databinding/databinding-compiler/3.4.0-alpha10/databinding-compiler-3.4.0-alpha10.jar"
+              ],
+              "downloaded_file_path": "androidx/databinding/databinding-compiler/3.4.0-alpha10/databinding-compiler-3.4.0-alpha10.jar"
+            }
+          },
+          "net_sf_jopt_simple_jopt_simple_4_9": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~net_sf_jopt_simple_jopt_simple_4_9",
+              "sha256": "26c5856e954b5f864db76f13b86919b59c6eecf9fd930b96baa8884626baf2f5",
+              "urls": [
+                "https://dl.google.com/android/maven2/net/sf/jopt-simple/jopt-simple/4.9/jopt-simple-4.9.jar",
+                "https://repo1.maven.org/maven2/net/sf/jopt-simple/jopt-simple/4.9/jopt-simple-4.9.jar"
+              ],
+              "downloaded_file_path": "net/sf/jopt-simple/jopt-simple/4.9/jopt-simple-4.9.jar"
+            }
+          },
+          "software_amazon_awssdk_auth_2_17_183": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~software_amazon_awssdk_auth_2_17_183",
+              "sha256": "8820c6636e5c14efc29399fb5565ce50212b0c1f4ed720a025a2c402d54e0978",
+              "urls": [
+                "https://repo1.maven.org/maven2/software/amazon/awssdk/auth/2.17.183/auth-2.17.183.jar",
+                "https://maven.google.com/software/amazon/awssdk/auth/2.17.183/auth-2.17.183.jar"
+              ],
+              "downloaded_file_path": "software/amazon/awssdk/auth/2.17.183/auth-2.17.183.jar"
+            }
+          },
+          "jakarta_activation_jakarta_activation_api_1_2_1": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~jakarta_activation_jakarta_activation_api_1_2_1",
+              "sha256": "8b0a0f52fa8b05c5431921a063ed866efaa41dadf2e3a7ee3e1961f2b0d9645b",
+              "urls": [
+                "https://dl.google.com/android/maven2/jakarta/activation/jakarta.activation-api/1.2.1/jakarta.activation-api-1.2.1.jar",
+                "https://repo1.maven.org/maven2/jakarta/activation/jakarta.activation-api/1.2.1/jakarta.activation-api-1.2.1.jar"
+              ],
+              "downloaded_file_path": "jakarta/activation/jakarta.activation-api/1.2.1/jakarta.activation-api-1.2.1.jar"
+            }
+          },
+          "io_grpc_grpc_core_1_48_1": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~io_grpc_grpc_core_1_48_1",
+              "sha256": "6d472ee6d2b60ef3f3e6801e7cd4dbec5fbbef81e883a0de1fbc55e6defe1cb7",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/grpc/grpc-core/1.48.1/grpc-core-1.48.1.jar"
+              ],
+              "downloaded_file_path": "io/grpc/grpc-core/1.48.1/grpc-core-1.48.1.jar"
+            }
+          },
+          "io_netty_netty_codec_http_4_1_93_Final": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~io_netty_netty_codec_http_4_1_93_Final",
+              "sha256": "dacf78ce78ab2d29570325db4cd2451ea589639807de95881a0fa7155a9e6b55",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/netty/netty-codec-http/4.1.93.Final/netty-codec-http-4.1.93.Final.jar"
+              ],
+              "downloaded_file_path": "io/netty/netty-codec-http/4.1.93.Final/netty-codec-http-4.1.93.Final.jar"
+            }
+          },
+          "com_android_tools_common_30_1_3": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_android_tools_common_30_1_3",
+              "sha256": "194ea15f8b182cca975544fb97d92bc1c6ceb6059f35250a5971ac3c306ebdcc",
+              "urls": [
+                "https://dl.google.com/android/maven2/com/android/tools/common/30.1.3/common-30.1.3.jar",
+                "https://repo1.maven.org/maven2/com/android/tools/common/30.1.3/common-30.1.3.jar"
+              ],
+              "downloaded_file_path": "com/android/tools/common/30.1.3/common-30.1.3.jar"
+            }
+          },
+          "io_netty_netty_codec_4_1_72_Final": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~io_netty_netty_codec_4_1_72_Final",
+              "sha256": "5d8591ca271a1e9c224e8de3873aa9936acb581ee0db514e7dc18523df36d16c",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/netty/netty-codec/4.1.72.Final/netty-codec-4.1.72.Final.jar",
+                "https://maven.google.com/io/netty/netty-codec/4.1.72.Final/netty-codec-4.1.72.Final.jar"
+              ],
+              "downloaded_file_path": "io/netty/netty-codec/4.1.72.Final/netty-codec-4.1.72.Final.jar"
+            }
+          },
+          "io_grpc_grpc_auth_1_48_1": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~io_grpc_grpc_auth_1_48_1",
+              "sha256": "ae63be5fe345ffdd5157284d90b783138eb31634e274182a8495242f9ad66a56",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/grpc/grpc-auth/1.48.1/grpc-auth-1.48.1.jar"
+              ],
+              "downloaded_file_path": "io/grpc/grpc-auth/1.48.1/grpc-auth-1.48.1.jar"
+            }
+          },
+          "org_apache_httpcomponents_httpmime_4_5_6": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~org_apache_httpcomponents_httpmime_4_5_6",
+              "sha256": "0b2b1102c18d3c7e05a77214b9b7501a6f6056174ae5604e0e256776eda7553e",
+              "urls": [
+                "https://dl.google.com/android/maven2/org/apache/httpcomponents/httpmime/4.5.6/httpmime-4.5.6.jar",
+                "https://repo1.maven.org/maven2/org/apache/httpcomponents/httpmime/4.5.6/httpmime-4.5.6.jar"
+              ],
+              "downloaded_file_path": "org/apache/httpcomponents/httpmime/4.5.6/httpmime-4.5.6.jar"
+            }
+          },
+          "io_netty_netty_resolver_dns_4_1_93_Final": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~io_netty_netty_resolver_dns_4_1_93_Final",
+              "sha256": "2744ccc1bbd653c9f65f5764ab211f51cae56aa6c2e2288850a9add9c805be56",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/netty/netty-resolver-dns/4.1.93.Final/netty-resolver-dns-4.1.93.Final.jar"
+              ],
+              "downloaded_file_path": "io/netty/netty-resolver-dns/4.1.93.Final/netty-resolver-dns-4.1.93.Final.jar"
+            }
+          },
+          "com_github_ben_manes_caffeine_caffeine_3_0_5": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_github_ben_manes_caffeine_caffeine_3_0_5",
+              "sha256": "8a9b54d3506a3b92ee46b217bcee79196b21ca6d52dc2967c686a205fb2f9c15",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/github/ben-manes/caffeine/caffeine/3.0.5/caffeine-3.0.5.jar"
+              ],
+              "downloaded_file_path": "com/github/ben-manes/caffeine/caffeine/3.0.5/caffeine-3.0.5.jar"
+            }
+          },
+          "org_apache_httpcomponents_httpclient_4_5_6": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~org_apache_httpcomponents_httpclient_4_5_6",
+              "sha256": "c03f813195e7a80e3608d0ddd8da80b21696a4c92a6a2298865bf149071551c7",
+              "urls": [
+                "https://dl.google.com/android/maven2/org/apache/httpcomponents/httpclient/4.5.6/httpclient-4.5.6.jar",
+                "https://repo1.maven.org/maven2/org/apache/httpcomponents/httpclient/4.5.6/httpclient-4.5.6.jar"
+              ],
+              "downloaded_file_path": "org/apache/httpcomponents/httpclient/4.5.6/httpclient-4.5.6.jar"
+            }
+          },
+          "io_netty_netty_tcnative_classes_2_0_46_Final": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~io_netty_netty_tcnative_classes_2_0_46_Final",
+              "sha256": "d3ec888dcc4ac7915bf88b417c5e04fd354f4311032a748a6882df09347eed9a",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/netty/netty-tcnative-classes/2.0.46.Final/netty-tcnative-classes-2.0.46.Final.jar",
+                "https://maven.google.com/io/netty/netty-tcnative-classes/2.0.46.Final/netty-tcnative-classes-2.0.46.Final.jar"
+              ],
+              "downloaded_file_path": "io/netty/netty-tcnative-classes/2.0.46.Final/netty-tcnative-classes-2.0.46.Final.jar"
+            }
+          },
+          "io_netty_netty_tcnative_boringssl_static_jar_osx_aarch_64_2_0_56_Final": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~io_netty_netty_tcnative_boringssl_static_jar_osx_aarch_64_2_0_56_Final",
+              "sha256": "3b962ce1361b479ec7375f04e5d149e7b374a99ecf4f583c9aa0f0a92e5fa415",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/netty/netty-tcnative-boringssl-static/2.0.56.Final/netty-tcnative-boringssl-static-2.0.56.Final-osx-aarch_64.jar"
+              ],
+              "downloaded_file_path": "io/netty/netty-tcnative-boringssl-static/2.0.56.Final/netty-tcnative-boringssl-static-2.0.56.Final-osx-aarch_64.jar"
+            }
+          },
+          "com_google_errorprone_error_prone_annotations_2_3_4": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_errorprone_error_prone_annotations_2_3_4",
+              "sha256": "baf7d6ea97ce606c53e11b6854ba5f2ce7ef5c24dddf0afa18d1260bd25b002c",
+              "urls": [
+                "https://dl.google.com/android/maven2/com/google/errorprone/error_prone_annotations/2.3.4/error_prone_annotations-2.3.4.jar",
+                "https://repo1.maven.org/maven2/com/google/errorprone/error_prone_annotations/2.3.4/error_prone_annotations-2.3.4.jar"
+              ],
+              "downloaded_file_path": "com/google/errorprone/error_prone_annotations/2.3.4/error_prone_annotations-2.3.4.jar"
+            }
+          },
+          "com_google_api_api_common_1_10_1": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_api_api_common_1_10_1",
+              "sha256": "2a033f24bb620383eda440ad307cb8077cfec1c7eadc684d65216123a1b9613a",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/api/api-common/1.10.1/api-common-1.10.1.jar",
+                "https://maven.google.com/com/google/api/api-common/1.10.1/api-common-1.10.1.jar"
+              ],
+              "downloaded_file_path": "com/google/api/api-common/1.10.1/api-common-1.10.1.jar"
+            }
+          },
+          "com_google_auth_google_auth_library_oauth2_http_1_6_0": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_auth_google_auth_library_oauth2_http_1_6_0",
+              "sha256": "2220f02fcfc480e3798bab43b2618d158319f9fcb357c9eb04b4a68117699808",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/auth/google-auth-library-oauth2-http/1.6.0/google-auth-library-oauth2-http-1.6.0.jar"
+              ],
+              "downloaded_file_path": "com/google/auth/google-auth-library-oauth2-http/1.6.0/google-auth-library-oauth2-http-1.6.0.jar"
+            }
+          },
+          "javax_annotation_javax_annotation_api_1_3_2": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~javax_annotation_javax_annotation_api_1_3_2",
+              "sha256": "e04ba5195bcd555dc95650f7cc614d151e4bcd52d29a10b8aa2197f3ab89ab9b",
+              "urls": [
+                "https://repo1.maven.org/maven2/javax/annotation/javax.annotation-api/1.3.2/javax.annotation-api-1.3.2.jar"
+              ],
+              "downloaded_file_path": "javax/annotation/javax.annotation-api/1.3.2/javax.annotation-api-1.3.2.jar"
+            }
+          },
+          "io_netty_netty_common_4_1_93_Final": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~io_netty_netty_common_4_1_93_Final",
+              "sha256": "443bb316599fb16e3baeba2fb58881814d7ff0b7af176fe76e38071a6e86f8c0",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/netty/netty-common/4.1.93.Final/netty-common-4.1.93.Final.jar"
+              ],
+              "downloaded_file_path": "io/netty/netty-common/4.1.93.Final/netty-common-4.1.93.Final.jar"
+            }
+          },
+          "com_google_j2objc_j2objc_annotations_1_3": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_j2objc_j2objc_annotations_1_3",
+              "sha256": "21af30c92267bd6122c0e0b4d20cccb6641a37eaf956c6540ec471d584e64a7b",
+              "urls": [
+                "https://dl.google.com/android/maven2/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar",
+                "https://repo1.maven.org/maven2/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar"
+              ],
+              "downloaded_file_path": "com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar"
+            }
+          },
+          "io_netty_netty_resolver_4_1_93_Final": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~io_netty_netty_resolver_4_1_93_Final",
+              "sha256": "e59770b66e81822e5d111ac4e544d7eb0c543e0a285f52628e53941acd8ed759",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/netty/netty-resolver/4.1.93.Final/netty-resolver-4.1.93.Final.jar"
+              ],
+              "downloaded_file_path": "io/netty/netty-resolver/4.1.93.Final/netty-resolver-4.1.93.Final.jar"
+            }
+          },
+          "com_google_flogger_flogger_0_5_1": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_flogger_flogger_0_5_1",
+              "sha256": "b5ecd1483e041197012786f749968a62063c1964d3ecfbf96ba92a95797bb8f5",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/flogger/flogger/0.5.1/flogger-0.5.1.jar"
+              ],
+              "downloaded_file_path": "com/google/flogger/flogger/0.5.1/flogger-0.5.1.jar"
+            }
+          },
+          "io_netty_netty_tcnative_boringssl_static_jar_linux_x86_64_2_0_56_Final": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~io_netty_netty_tcnative_boringssl_static_jar_linux_x86_64_2_0_56_Final",
+              "sha256": "725c26b4dd58a1aa782020952ad949bdb607235dd20ee49e5a5875c15456ca86",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/netty/netty-tcnative-boringssl-static/2.0.56.Final/netty-tcnative-boringssl-static-2.0.56.Final-linux-x86_64.jar"
+              ],
+              "downloaded_file_path": "io/netty/netty-tcnative-boringssl-static/2.0.56.Final/netty-tcnative-boringssl-static-2.0.56.Final-linux-x86_64.jar"
+            }
+          },
+          "com_google_truth_extensions_truth_liteproto_extension_1_1_3": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_truth_extensions_truth_liteproto_extension_1_1_3",
+              "sha256": "71cce6284554e546d1b5ba48e310ee4b4050676f09fb0eced136d779284ff78d",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/truth/extensions/truth-liteproto-extension/1.1.3/truth-liteproto-extension-1.1.3.jar"
+              ],
+              "downloaded_file_path": "com/google/truth/extensions/truth-liteproto-extension/1.1.3/truth-liteproto-extension-1.1.3.jar"
+            }
+          },
+          "com_ryanharter_auto_value_auto_value_gson_runtime_1_3_1": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_ryanharter_auto_value_auto_value_gson_runtime_1_3_1",
+              "sha256": "84ee23b7989d4bf19930b5bd3d03c0f2efb9e73bcee3a0208a9d1b2e1979c049",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/ryanharter/auto/value/auto-value-gson-runtime/1.3.1/auto-value-gson-runtime-1.3.1.jar"
+              ],
+              "downloaded_file_path": "com/ryanharter/auto/value/auto-value-gson-runtime/1.3.1/auto-value-gson-runtime-1.3.1.jar"
+            }
+          },
+          "org_apache_velocity_velocity_1_7": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~org_apache_velocity_velocity_1_7",
+              "sha256": "ec92dae810034f4b46dbb16ef4364a4013b0efb24a8c5dd67435cae46a290d8e",
+              "urls": [
+                "https://repo1.maven.org/maven2/org/apache/velocity/velocity/1.7/velocity-1.7.jar"
+              ],
+              "downloaded_file_path": "org/apache/velocity/velocity/1.7/velocity-1.7.jar"
+            }
+          },
+          "org_ow2_asm_asm_tree_9_2": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~org_ow2_asm_asm_tree_9_2",
+              "sha256": "aabf9bd23091a4ebfc109c1f3ee7cf3e4b89f6ba2d3f51c5243f16b3cffae011",
+              "urls": [
+                "https://repo1.maven.org/maven2/org/ow2/asm/asm-tree/9.2/asm-tree-9.2.jar"
+              ],
+              "downloaded_file_path": "org/ow2/asm/asm-tree/9.2/asm-tree-9.2.jar"
+            }
+          },
+          "io_netty_netty_transport_classes_epoll_4_1_93_Final": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~io_netty_netty_transport_classes_epoll_4_1_93_Final",
+              "sha256": "23722fa366ba017137a68c5e92fc3ee27bbb341c681ac4790f61c6adb7289e26",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/netty/netty-transport-classes-epoll/4.1.93.Final/netty-transport-classes-epoll-4.1.93.Final.jar"
+              ],
+              "downloaded_file_path": "io/netty/netty-transport-classes-epoll/4.1.93.Final/netty-transport-classes-epoll-4.1.93.Final.jar"
+            }
+          },
+          "org_ow2_asm_asm_tree_9_1": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~org_ow2_asm_asm_tree_9_1",
+              "sha256": "fd00afa49e9595d7646205b09cecb4a776a8ff0ba06f2d59b8f7bf9c704b4a73",
+              "urls": [
+                "https://dl.google.com/android/maven2/org/ow2/asm/asm-tree/9.1/asm-tree-9.1.jar",
+                "https://repo1.maven.org/maven2/org/ow2/asm/asm-tree/9.1/asm-tree-9.1.jar"
+              ],
+              "downloaded_file_path": "org/ow2/asm/asm-tree/9.1/asm-tree-9.1.jar"
+            }
+          },
+          "androidx_databinding_databinding_compiler_common_3_4_0_alpha10": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~androidx_databinding_databinding_compiler_common_3_4_0_alpha10",
+              "sha256": "7e1ffef1c21064f2b065b17a69bc217270e14b6723311cf795f4276a05b83750",
+              "urls": [
+                "https://dl.google.com/android/maven2/androidx/databinding/databinding-compiler-common/3.4.0-alpha10/databinding-compiler-common-3.4.0-alpha10.jar",
+                "https://repo1.maven.org/maven2/androidx/databinding/databinding-compiler-common/3.4.0-alpha10/databinding-compiler-common-3.4.0-alpha10.jar"
+              ],
+              "downloaded_file_path": "androidx/databinding/databinding-compiler-common/3.4.0-alpha10/databinding-compiler-common-3.4.0-alpha10.jar"
+            }
+          },
+          "io_netty_netty_codec_http2_4_1_72_Final": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~io_netty_netty_codec_http2_4_1_72_Final",
+              "sha256": "c89a70500f59e8563e720aaa808263a514bd9e2bd91ba84eab8c2ccb45f234b2",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/netty/netty-codec-http2/4.1.72.Final/netty-codec-http2-4.1.72.Final.jar",
+                "https://maven.google.com/io/netty/netty-codec-http2/4.1.72.Final/netty-codec-http2-4.1.72.Final.jar"
+              ],
+              "downloaded_file_path": "io/netty/netty-codec-http2/4.1.72.Final/netty-codec-http2-4.1.72.Final.jar"
+            }
+          },
+          "rules_jvm_external_deps": {
+            "bzlFile": "@@rules_jvm_external~5.2//:coursier.bzl",
+            "ruleClassName": "pinned_coursier_fetch",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~rules_jvm_external_deps",
+              "repositories": [
+                "{ \"repo_url\": \"https://repo1.maven.org/maven2\" }"
+              ],
+              "artifacts": [
+                "{ \"group\": \"com.google.auth\", \"artifact\": \"google-auth-library-credentials\", \"version\": \"0.22.0\" }",
+                "{ \"group\": \"com.google.auth\", \"artifact\": \"google-auth-library-oauth2-http\", \"version\": \"0.22.0\" }",
+                "{ \"group\": \"com.google.cloud\", \"artifact\": \"google-cloud-core\", \"version\": \"1.93.10\" }",
+                "{ \"group\": \"com.google.cloud\", \"artifact\": \"google-cloud-storage\", \"version\": \"1.113.4\" }",
+                "{ \"group\": \"com.google.code.gson\", \"artifact\": \"gson\", \"version\": \"2.9.0\" }",
+                "{ \"group\": \"com.google.googlejavaformat\", \"artifact\": \"google-java-format\", \"version\": \"1.15.0\" }",
+                "{ \"group\": \"com.google.guava\", \"artifact\": \"guava\", \"version\": \"31.1-jre\" }",
+                "{ \"group\": \"org.apache.maven\", \"artifact\": \"maven-artifact\", \"version\": \"3.8.6\" }",
+                "{ \"group\": \"software.amazon.awssdk\", \"artifact\": \"s3\", \"version\": \"2.17.183\" }"
+              ],
+              "fetch_sources": false,
+              "fetch_javadoc": false,
+              "generate_compat_repositories": false,
+              "maven_install_json": "@@rules_jvm_external~5.2//:rules_jvm_external_deps_install.json",
+              "override_targets": {},
+              "strict_visibility": false,
+              "strict_visibility_value": [
+                "@@//visibility:private"
+              ],
+              "jetify": false,
+              "jetify_include_list": [
+                "*"
+              ],
+              "additional_netrc_lines": [],
+              "fail_if_repin_required": false,
+              "use_starlark_android_rules": false,
+              "aar_import_bzl_label": "@build_bazel_rules_android//android:rules.bzl",
+              "duplicate_version_warning": "warn"
+            }
+          },
+          "org_apache_commons_commons_compress_1_20": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~org_apache_commons_commons_compress_1_20",
+              "sha256": "0aeb625c948c697ea7b205156e112363b59ed5e2551212cd4e460bdb72c7c06e",
+              "urls": [
+                "https://repo1.maven.org/maven2/org/apache/commons/commons-compress/1.20/commons-compress-1.20.jar"
+              ],
+              "downloaded_file_path": "org/apache/commons/commons-compress/1.20/commons-compress-1.20.jar"
+            }
+          },
+          "software_amazon_awssdk_http_client_spi_2_17_183": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~software_amazon_awssdk_http_client_spi_2_17_183",
+              "sha256": "fe7120f175df9e47ebcc5d946d7f40110faf2ba0a30364f3b935d5b8a5a6c3c6",
+              "urls": [
+                "https://repo1.maven.org/maven2/software/amazon/awssdk/http-client-spi/2.17.183/http-client-spi-2.17.183.jar",
+                "https://maven.google.com/software/amazon/awssdk/http-client-spi/2.17.183/http-client-spi-2.17.183.jar"
+              ],
+              "downloaded_file_path": "software/amazon/awssdk/http-client-spi/2.17.183/http-client-spi-2.17.183.jar"
+            }
+          },
+          "org_checkerframework_checker_qual_3_5_0": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~org_checkerframework_checker_qual_3_5_0",
+              "sha256": "729990b3f18a95606fc2573836b6958bcdb44cb52bfbd1b7aa9c339cff35a5a4",
+              "urls": [
+                "https://dl.google.com/android/maven2/org/checkerframework/checker-qual/3.5.0/checker-qual-3.5.0.jar",
+                "https://repo1.maven.org/maven2/org/checkerframework/checker-qual/3.5.0/checker-qual-3.5.0.jar"
+              ],
+              "downloaded_file_path": "org/checkerframework/checker-qual/3.5.0/checker-qual-3.5.0.jar"
+            }
+          },
+          "com_google_oauth_client_google_oauth_client_1_31_1": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_oauth_client_google_oauth_client_1_31_1",
+              "sha256": "4ed4e2948251dbda66ce251bd7f3b32cd8570055e5cdb165a3c7aea8f43da0ff",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/oauth-client/google-oauth-client/1.31.1/google-oauth-client-1.31.1.jar",
+                "https://maven.google.com/com/google/oauth-client/google-oauth-client/1.31.1/google-oauth-client-1.31.1.jar"
+              ],
+              "downloaded_file_path": "com/google/oauth-client/google-oauth-client/1.31.1/google-oauth-client-1.31.1.jar"
+            }
+          },
+          "com_google_code_java_allocation_instrumenter_java_allocation_instrumenter_3_3_0": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_code_java_allocation_instrumenter_java_allocation_instrumenter_3_3_0",
+              "sha256": "1ef5535a8bd41cf3072469f381b9ee6ab28275311a7499f53d6e52adf976fef0",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/code/java-allocation-instrumenter/java-allocation-instrumenter/3.3.0/java-allocation-instrumenter-3.3.0.jar"
+              ],
+              "downloaded_file_path": "com/google/code/java-allocation-instrumenter/java-allocation-instrumenter/3.3.0/java-allocation-instrumenter-3.3.0.jar"
+            }
+          },
+          "org_jetbrains_kotlin_kotlin_stdlib_jdk7_1_4_32": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~org_jetbrains_kotlin_kotlin_stdlib_jdk7_1_4_32",
+              "sha256": "5f801e75ca27d8791c14b07943c608da27620d910a8093022af57f543d5d98b6",
+              "urls": [
+                "https://dl.google.com/android/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.4.32/kotlin-stdlib-jdk7-1.4.32.jar",
+                "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.4.32/kotlin-stdlib-jdk7-1.4.32.jar"
+              ],
+              "downloaded_file_path": "org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.4.32/kotlin-stdlib-jdk7-1.4.32.jar"
+            }
+          },
+          "maven_android": {
+            "bzlFile": "@@rules_jvm_external~5.2//:coursier.bzl",
+            "ruleClassName": "pinned_coursier_fetch",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~maven_android",
+              "repositories": [
+                "{ \"repo_url\": \"https://dl.google.com/android/maven2\" }",
+                "{ \"repo_url\": \"https://repo1.maven.org/maven2\" }"
+              ],
+              "artifacts": [
+                "{ \"group\": \"androidx.databinding\", \"artifact\": \"databinding-compiler\", \"version\": \"3.4.0-alpha10\" }",
+                "{ \"group\": \"com.android.tools.build\", \"artifact\": \"builder\", \"version\": \"7.1.3\" }",
+                "{ \"group\": \"com.android.tools.build\", \"artifact\": \"manifest-merger\", \"version\": \"30.1.3\" }",
+                "{ \"group\": \"com.android.tools\", \"artifact\": \"sdk-common\", \"version\": \"30.1.3\" }",
+                "{ \"group\": \"com.android.tools\", \"artifact\": \"annotations\", \"version\": \"30.1.3\" }",
+                "{ \"group\": \"com.android.tools.layoutlib\", \"artifact\": \"layoutlib-api\", \"version\": \"30.1.3\" }",
+                "{ \"group\": \"com.android.tools\", \"artifact\": \"common\", \"version\": \"30.1.3\" }",
+                "{ \"group\": \"com.android.tools\", \"artifact\": \"repository\", \"version\": \"30.1.3\" }"
+              ],
+              "fetch_sources": false,
+              "fetch_javadoc": false,
+              "generate_compat_repositories": false,
+              "maven_install_json": "@@//src/tools/android:maven_android_install.json",
+              "override_targets": {},
+              "strict_visibility": false,
+              "strict_visibility_value": [
+                "@@//visibility:private"
+              ],
+              "jetify": false,
+              "jetify_include_list": [
+                "*"
+              ],
+              "additional_netrc_lines": [],
+              "fail_if_repin_required": true,
+              "use_starlark_android_rules": false,
+              "aar_import_bzl_label": "@build_bazel_rules_android//android:rules.bzl",
+              "duplicate_version_warning": "warn"
+            }
+          },
+          "com_google_code_gson_gson_2_8_6": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_code_gson_gson_2_8_6",
+              "sha256": "c8fb4839054d280b3033f800d1f5a97de2f028eb8ba2eb458ad287e536f3f25f",
+              "urls": [
+                "https://dl.google.com/android/maven2/com/google/code/gson/gson/2.8.6/gson-2.8.6.jar",
+                "https://repo1.maven.org/maven2/com/google/code/gson/gson/2.8.6/gson-2.8.6.jar"
+              ],
+              "downloaded_file_path": "com/google/code/gson/gson/2.8.6/gson-2.8.6.jar"
+            }
+          },
+          "com_google_auto_service_auto_service_annotations_1_0_1": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_auto_service_auto_service_annotations_1_0_1",
+              "sha256": "c7bec54b7b5588b5967e870341091c5691181d954cf2039f1bf0a6eeb837473b",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/auto/service/auto-service-annotations/1.0.1/auto-service-annotations-1.0.1.jar"
+              ],
+              "downloaded_file_path": "com/google/auto/service/auto-service-annotations/1.0.1/auto-service-annotations-1.0.1.jar"
+            }
+          },
+          "com_google_truth_extensions_truth_java8_extension_1_1_3": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_truth_extensions_truth_java8_extension_1_1_3",
+              "sha256": "2bbd32dd2fa9470d17f1bbda4f52b33b60bce4574052c1d46610a0aa371fc446",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/truth/extensions/truth-java8-extension/1.1.3/truth-java8-extension-1.1.3.jar"
+              ],
+              "downloaded_file_path": "com/google/truth/extensions/truth-java8-extension/1.1.3/truth-java8-extension-1.1.3.jar"
+            }
+          },
+          "software_amazon_awssdk_annotations_2_17_183": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~software_amazon_awssdk_annotations_2_17_183",
+              "sha256": "8e4d72361ca805a0bd8bbd9017cd7ff77c8d170f2dd469c7d52d5653330bb3fd",
+              "urls": [
+                "https://repo1.maven.org/maven2/software/amazon/awssdk/annotations/2.17.183/annotations-2.17.183.jar",
+                "https://maven.google.com/software/amazon/awssdk/annotations/2.17.183/annotations-2.17.183.jar"
+              ],
+              "downloaded_file_path": "software/amazon/awssdk/annotations/2.17.183/annotations-2.17.183.jar"
+            }
+          },
+          "io_netty_netty_transport_native_unix_common_jar_linux_aarch_64_4_1_93_Final": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~io_netty_netty_transport_native_unix_common_jar_linux_aarch_64_4_1_93_Final",
+              "sha256": "29675f1d9a2f09e426c0016e5fb89328d38afad0403f1bd1b98f985253d96ad8",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/netty/netty-transport-native-unix-common/4.1.93.Final/netty-transport-native-unix-common-4.1.93.Final-linux-aarch_64.jar"
+              ],
+              "downloaded_file_path": "io/netty/netty-transport-native-unix-common/4.1.93.Final/netty-transport-native-unix-common-4.1.93.Final-linux-aarch_64.jar"
+            }
+          },
+          "org_jetbrains_kotlin_kotlin_stdlib_1_4_32": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~org_jetbrains_kotlin_kotlin_stdlib_1_4_32",
+              "sha256": "13e9fd3e69dc7230ce0fc873a92a4e5d521d179bcf1bef75a6705baac3bfecba",
+              "urls": [
+                "https://dl.google.com/android/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.4.32/kotlin-stdlib-1.4.32.jar",
+                "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.4.32/kotlin-stdlib-1.4.32.jar"
+              ],
+              "downloaded_file_path": "org/jetbrains/kotlin/kotlin-stdlib/1.4.32/kotlin-stdlib-1.4.32.jar"
+            }
+          },
+          "com_google_auto_value_auto_value_annotations_1_7_4": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_auto_value_auto_value_annotations_1_7_4",
+              "sha256": "fedd59b0b4986c342f6ab2d182f2a4ee9fceb2c7e2d5bdc4dc764c92394a23d3",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/auto/value/auto-value-annotations/1.7.4/auto-value-annotations-1.7.4.jar",
+                "https://maven.google.com/com/google/auto/value/auto-value-annotations/1.7.4/auto-value-annotations-1.7.4.jar"
+              ],
+              "downloaded_file_path": "com/google/auto/value/auto-value-annotations/1.7.4/auto-value-annotations-1.7.4.jar"
+            }
+          },
+          "com_android_tools_layoutlib_layoutlib_api_30_1_3": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_android_tools_layoutlib_layoutlib_api_30_1_3",
+              "sha256": "14d7ffdcedeea701c7316d6eba58ae32d329293de215c3b7218d14711ecfffaf",
+              "urls": [
+                "https://dl.google.com/android/maven2/com/android/tools/layoutlib/layoutlib-api/30.1.3/layoutlib-api-30.1.3.jar",
+                "https://repo1.maven.org/maven2/com/android/tools/layoutlib/layoutlib-api/30.1.3/layoutlib-api-30.1.3.jar"
+              ],
+              "downloaded_file_path": "com/android/tools/layoutlib/layoutlib-api/30.1.3/layoutlib-api-30.1.3.jar"
+            }
+          },
+          "io_netty_netty_transport_classes_kqueue_4_1_93_Final": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~io_netty_netty_transport_classes_kqueue_4_1_93_Final",
+              "sha256": "453fe595c3e12b9228b930b845140aaed93a9fb87d1a5d829c55b31d670def9f",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/netty/netty-transport-classes-kqueue/4.1.93.Final/netty-transport-classes-kqueue-4.1.93.Final.jar"
+              ],
+              "downloaded_file_path": "io/netty/netty-transport-classes-kqueue/4.1.93.Final/netty-transport-classes-kqueue-4.1.93.Final.jar"
+            }
+          },
+          "junit_junit_4_13_2": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~junit_junit_4_13_2",
+              "sha256": "8e495b634469d64fb8acfa3495a065cbacc8a0fff55ce1e31007be4c16dc57d3",
+              "urls": [
+                "https://repo1.maven.org/maven2/junit/junit/4.13.2/junit-4.13.2.jar"
+              ],
+              "downloaded_file_path": "junit/junit/4.13.2/junit-4.13.2.jar"
+            }
+          },
+          "com_google_auth_google_auth_library_credentials_0_22_0": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_auth_google_auth_library_credentials_0_22_0",
+              "sha256": "42c76031276de5b520909e9faf88c5b3c9a722d69ee9cfdafedb1c52c355dfc5",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/auth/google-auth-library-credentials/0.22.0/google-auth-library-credentials-0.22.0.jar",
+                "https://maven.google.com/com/google/auth/google-auth-library-credentials/0.22.0/google-auth-library-credentials-0.22.0.jar"
+              ],
+              "downloaded_file_path": "com/google/auth/google-auth-library-credentials/0.22.0/google-auth-library-credentials-0.22.0.jar"
+            }
+          },
+          "com_google_guava_guava_32_1_1_jre": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_guava_guava_32_1_1_jre",
+              "sha256": "91fbba37f1c8b251cf9ea9e7d3a369eb79eb1e6a5df1d4bbf483dd0380740281",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/guava/guava/32.1.1-jre/guava-32.1.1-jre.jar"
+              ],
+              "downloaded_file_path": "com/google/guava/guava/32.1.1-jre/guava-32.1.1-jre.jar"
+            }
+          },
+          "com_android_tools_sdklib_30_1_3": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_android_tools_sdklib_30_1_3",
+              "sha256": "edf456a67ada3154c9fd23f9829699e8b654dc7f33f2430b50839d6904760b48",
+              "urls": [
+                "https://dl.google.com/android/maven2/com/android/tools/sdklib/30.1.3/sdklib-30.1.3.jar",
+                "https://repo1.maven.org/maven2/com/android/tools/sdklib/30.1.3/sdklib-30.1.3.jar"
+              ],
+              "downloaded_file_path": "com/android/tools/sdklib/30.1.3/sdklib-30.1.3.jar"
+            }
+          },
+          "org_tukaani_xz_1_9": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~org_tukaani_xz_1_9",
+              "sha256": "211b306cfc44f8f96df3a0a3ddaf75ba8c5289eed77d60d72f889bb855f535e5",
+              "urls": [
+                "https://repo1.maven.org/maven2/org/tukaani/xz/1.9/xz-1.9.jar"
+              ],
+              "downloaded_file_path": "org/tukaani/xz/1.9/xz-1.9.jar"
+            }
+          },
+          "com_google_guava_guava_testlib_31_1_jre": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_guava_guava_testlib_31_1_jre",
+              "sha256": "aadc71b10d5c3ac474dd16be84cfb18d257e584d1e0a59f8cab64ef4376226ce",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/guava/guava-testlib/31.1-jre/guava-testlib-31.1-jre.jar"
+              ],
+              "downloaded_file_path": "com/google/guava/guava-testlib/31.1-jre/guava-testlib-31.1-jre.jar"
+            }
+          },
+          "com_google_http_client_google_http_client_1_42_0": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_http_client_google_http_client_1_42_0",
+              "sha256": "82ca0e08171846d1768d5ac3f13244d6fe5a54102c14735ef40bf15d57d478e5",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/http-client/google-http-client/1.42.0/google-http-client-1.42.0.jar"
+              ],
+              "downloaded_file_path": "com/google/http-client/google-http-client/1.42.0/google-http-client-1.42.0.jar"
+            }
+          },
+          "com_android_tools_sdk_common_30_1_3": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_android_tools_sdk_common_30_1_3",
+              "sha256": "6c44d6ffa3b1b34505fcb05422f08bd293391648dc974cc252ddc541fd9b27f5",
+              "urls": [
+                "https://dl.google.com/android/maven2/com/android/tools/sdk-common/30.1.3/sdk-common-30.1.3.jar",
+                "https://repo1.maven.org/maven2/com/android/tools/sdk-common/30.1.3/sdk-common-30.1.3.jar"
+              ],
+              "downloaded_file_path": "com/android/tools/sdk-common/30.1.3/sdk-common-30.1.3.jar"
+            }
+          },
+          "org_checkerframework_checker_qual_3_33_0": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~org_checkerframework_checker_qual_3_33_0",
+              "sha256": "e316255bbfcd9fe50d165314b85abb2b33cb2a66a93c491db648e498a82c2de1",
+              "urls": [
+                "https://repo1.maven.org/maven2/org/checkerframework/checker-qual/3.33.0/checker-qual-3.33.0.jar"
+              ],
+              "downloaded_file_path": "org/checkerframework/checker-qual/3.33.0/checker-qual-3.33.0.jar"
+            }
+          },
+          "org_hamcrest_hamcrest_core_1_3": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~org_hamcrest_hamcrest_core_1_3",
+              "sha256": "66fdef91e9739348df7a096aa384a5685f4e875584cce89386a7a47251c4d8e9",
+              "urls": [
+                "https://repo1.maven.org/maven2/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar"
+              ],
+              "downloaded_file_path": "org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar"
+            }
+          },
+          "com_google_cloud_google_cloud_core_http_1_93_10": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_cloud_google_cloud_core_http_1_93_10",
+              "sha256": "81ac67c14c7c4244d2b7db2607ad352416aca8d3bb2adf338964e8fea25b1b3c",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/cloud/google-cloud-core-http/1.93.10/google-cloud-core-http-1.93.10.jar",
+                "https://maven.google.com/com/google/cloud/google-cloud-core-http/1.93.10/google-cloud-core-http-1.93.10.jar"
+              ],
+              "downloaded_file_path": "com/google/cloud/google-cloud-core-http/1.93.10/google-cloud-core-http-1.93.10.jar"
+            }
+          },
+          "io_netty_netty_transport_native_unix_common_jar_osx_aarch_64_4_1_93_Final": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~io_netty_netty_transport_native_unix_common_jar_osx_aarch_64_4_1_93_Final",
+              "sha256": "6c6ecf73016d360e09a1cac31acd953f508309612f1b97d73db2ed0813d8bf14",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/netty/netty-transport-native-unix-common/4.1.93.Final/netty-transport-native-unix-common-4.1.93.Final-osx-aarch_64.jar"
+              ],
+              "downloaded_file_path": "io/netty/netty-transport-native-unix-common/4.1.93.Final/netty-transport-native-unix-common-4.1.93.Final-osx-aarch_64.jar"
+            }
+          },
+          "io_sweers_autotransient_autotransient_1_0_0": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~io_sweers_autotransient_autotransient_1_0_0",
+              "sha256": "914ce84508410ee1419514925f93b1855a9f7a7b5b5d02fc07f411d2a45f1bba",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/sweers/autotransient/autotransient/1.0.0/autotransient-1.0.0.jar"
+              ],
+              "downloaded_file_path": "io/sweers/autotransient/autotransient/1.0.0/autotransient-1.0.0.jar"
+            }
+          },
+          "unpinned_rules_jvm_external_deps": {
+            "bzlFile": "@@rules_jvm_external~5.2//:coursier.bzl",
+            "ruleClassName": "coursier_fetch",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~unpinned_rules_jvm_external_deps",
+              "repositories": [
+                "{ \"repo_url\": \"https://repo1.maven.org/maven2\" }"
+              ],
+              "artifacts": [
+                "{ \"group\": \"com.google.auth\", \"artifact\": \"google-auth-library-credentials\", \"version\": \"0.22.0\" }",
+                "{ \"group\": \"com.google.auth\", \"artifact\": \"google-auth-library-oauth2-http\", \"version\": \"0.22.0\" }",
+                "{ \"group\": \"com.google.cloud\", \"artifact\": \"google-cloud-core\", \"version\": \"1.93.10\" }",
+                "{ \"group\": \"com.google.cloud\", \"artifact\": \"google-cloud-storage\", \"version\": \"1.113.4\" }",
+                "{ \"group\": \"com.google.code.gson\", \"artifact\": \"gson\", \"version\": \"2.9.0\" }",
+                "{ \"group\": \"com.google.googlejavaformat\", \"artifact\": \"google-java-format\", \"version\": \"1.15.0\" }",
+                "{ \"group\": \"com.google.guava\", \"artifact\": \"guava\", \"version\": \"31.1-jre\" }",
+                "{ \"group\": \"org.apache.maven\", \"artifact\": \"maven-artifact\", \"version\": \"3.8.6\" }",
+                "{ \"group\": \"software.amazon.awssdk\", \"artifact\": \"s3\", \"version\": \"2.17.183\" }"
+              ],
+              "fail_on_missing_checksum": true,
+              "fetch_sources": false,
+              "fetch_javadoc": false,
+              "excluded_artifacts": [],
+              "generate_compat_repositories": false,
+              "version_conflict_policy": "default",
+              "override_targets": {},
+              "strict_visibility": false,
+              "strict_visibility_value": [
+                "@@//visibility:private"
+              ],
+              "maven_install_json": "@@rules_jvm_external~5.2//:rules_jvm_external_deps_install.json",
+              "resolve_timeout": 600,
+              "jetify": false,
+              "jetify_include_list": [
+                "*"
+              ],
+              "use_starlark_android_rules": false,
+              "aar_import_bzl_label": "@build_bazel_rules_android//android:rules.bzl",
+              "duplicate_version_warning": "warn"
+            }
+          },
+          "com_google_auth_google_auth_library_credentials_1_6_0": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_auth_google_auth_library_credentials_1_6_0",
+              "sha256": "153fa3cdc153ac3ee25649e8037aeda4438256153d35acf3c27e83e4ee6165a4",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/auth/google-auth-library-credentials/1.6.0/google-auth-library-credentials-1.6.0.jar"
+              ],
+              "downloaded_file_path": "com/google/auth/google-auth-library-credentials/1.6.0/google-auth-library-credentials-1.6.0.jar"
+            }
+          },
+          "io_netty_netty_tcnative_boringssl_static_jar_windows_x86_64_2_0_56_Final": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~io_netty_netty_tcnative_boringssl_static_jar_windows_x86_64_2_0_56_Final",
+              "sha256": "b0d9505b09427ab655369506a802358966762edcb7cf08fc162dc2b368a2041c",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/netty/netty-tcnative-boringssl-static/2.0.56.Final/netty-tcnative-boringssl-static-2.0.56.Final-windows-x86_64.jar"
+              ],
+              "downloaded_file_path": "io/netty/netty-tcnative-boringssl-static/2.0.56.Final/netty-tcnative-boringssl-static-2.0.56.Final-windows-x86_64.jar"
+            }
+          },
+          "software_amazon_awssdk_aws_query_protocol_2_17_183": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~software_amazon_awssdk_aws_query_protocol_2_17_183",
+              "sha256": "4dace03c76f80f3dec920cb3dedb2a95984c4366ef4fda728660cb90bed74848",
+              "urls": [
+                "https://repo1.maven.org/maven2/software/amazon/awssdk/aws-query-protocol/2.17.183/aws-query-protocol-2.17.183.jar",
+                "https://maven.google.com/software/amazon/awssdk/aws-query-protocol/2.17.183/aws-query-protocol-2.17.183.jar"
+              ],
+              "downloaded_file_path": "software/amazon/awssdk/aws-query-protocol/2.17.183/aws-query-protocol-2.17.183.jar"
+            }
+          },
+          "com_google_errorprone_error_prone_check_api_2_22_0": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_errorprone_error_prone_check_api_2_22_0",
+              "sha256": "1717bbf65757b8e1a83f3b0aa78c5ac25a6493008bc730091d404cf798fc0639",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/errorprone/error_prone_check_api/2.22.0/error_prone_check_api-2.22.0.jar"
+              ],
+              "downloaded_file_path": "com/google/errorprone/error_prone_check_api/2.22.0/error_prone_check_api-2.22.0.jar"
+            }
+          },
+          "io_netty_netty_codec_http_4_1_72_Final": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~io_netty_netty_codec_http_4_1_72_Final",
+              "sha256": "fa6fec88010bfaf6a7415b5364671b6b18ffb6b35a986ab97b423fd8c3a0174b",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/netty/netty-codec-http/4.1.72.Final/netty-codec-http-4.1.72.Final.jar",
+                "https://maven.google.com/io/netty/netty-codec-http/4.1.72.Final/netty-codec-http-4.1.72.Final.jar"
+              ],
+              "downloaded_file_path": "io/netty/netty-codec-http/4.1.72.Final/netty-codec-http-4.1.72.Final.jar"
+            }
+          },
+          "com_googlecode_juniversalchardet_juniversalchardet_1_0_3": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_googlecode_juniversalchardet_juniversalchardet_1_0_3",
+              "sha256": "757bfe906193b8b651e79dc26cd67d6b55d0770a2cdfb0381591504f779d4a76",
+              "urls": [
+                "https://dl.google.com/android/maven2/com/googlecode/juniversalchardet/juniversalchardet/1.0.3/juniversalchardet-1.0.3.jar",
+                "https://repo1.maven.org/maven2/com/googlecode/juniversalchardet/juniversalchardet/1.0.3/juniversalchardet-1.0.3.jar"
+              ],
+              "downloaded_file_path": "com/googlecode/juniversalchardet/juniversalchardet/1.0.3/juniversalchardet-1.0.3.jar"
+            }
+          },
+          "io_opencensus_opencensus_contrib_http_util_0_31_1": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~io_opencensus_opencensus_contrib_http_util_0_31_1",
+              "sha256": "3ea995b55a4068be22989b70cc29a4d788c2d328d1d50613a7a9afd13fdd2d0a",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/opencensus/opencensus-contrib-http-util/0.31.1/opencensus-contrib-http-util-0.31.1.jar"
+              ],
+              "downloaded_file_path": "io/opencensus/opencensus-contrib-http-util/0.31.1/opencensus-contrib-http-util-0.31.1.jar"
+            }
+          },
+          "com_google_flogger_google_extensions_0_5_1": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_flogger_google_extensions_0_5_1",
+              "sha256": "8b0862cad85b9549f355fe383c6c63816d2f19529634e033ae06d0107ab110b9",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/flogger/google-extensions/0.5.1/google-extensions-0.5.1.jar"
+              ],
+              "downloaded_file_path": "com/google/flogger/google-extensions/0.5.1/google-extensions-0.5.1.jar"
+            }
+          },
+          "com_sun_activation_javax_activation_1_2_0": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_sun_activation_javax_activation_1_2_0",
+              "sha256": "993302b16cd7056f21e779cc577d175a810bb4900ef73cd8fbf2b50f928ba9ce",
+              "urls": [
+                "https://dl.google.com/android/maven2/com/sun/activation/javax.activation/1.2.0/javax.activation-1.2.0.jar",
+                "https://repo1.maven.org/maven2/com/sun/activation/javax.activation/1.2.0/javax.activation-1.2.0.jar"
+              ],
+              "downloaded_file_path": "com/sun/activation/javax.activation/1.2.0/javax.activation-1.2.0.jar"
+            }
+          },
+          "com_ryanharter_auto_value_auto_value_gson_extension_1_3_1": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_ryanharter_auto_value_auto_value_gson_extension_1_3_1",
+              "sha256": "261be84be30a56994e132d718a85efcd579197a2edb9426b84c5722c56955eca",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/ryanharter/auto/value/auto-value-gson-extension/1.3.1/auto-value-gson-extension-1.3.1.jar"
+              ],
+              "downloaded_file_path": "com/ryanharter/auto/value/auto-value-gson-extension/1.3.1/auto-value-gson-extension-1.3.1.jar"
+            }
+          },
+          "com_google_truth_truth_1_1_3": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_truth_truth_1_1_3",
+              "sha256": "fc0b67782289a2aabfddfdf99eff1dcd5edc890d49143fcd489214b107b8f4f3",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/truth/truth/1.1.3/truth-1.1.3.jar"
+              ],
+              "downloaded_file_path": "com/google/truth/truth/1.1.3/truth-1.1.3.jar"
+            }
+          },
+          "com_google_guava_guava_30_1_jre": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_guava_guava_30_1_jre",
+              "sha256": "e6dd072f9d3fe02a4600688380bd422bdac184caf6fe2418cfdd0934f09432aa",
+              "urls": [
+                "https://dl.google.com/android/maven2/com/google/guava/guava/30.1-jre/guava-30.1-jre.jar",
+                "https://repo1.maven.org/maven2/com/google/guava/guava/30.1-jre/guava-30.1-jre.jar"
+              ],
+              "downloaded_file_path": "com/google/guava/guava/30.1-jre/guava-30.1-jre.jar"
+            }
+          },
+          "net_bytebuddy_byte_buddy_agent_1_14_5": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~net_bytebuddy_byte_buddy_agent_1_14_5",
+              "sha256": "55f19862b870f5d85890ba5386b1b45e9bbc88d5fe1f819abe0c788b4929fa6b",
+              "urls": [
+                "https://repo1.maven.org/maven2/net/bytebuddy/byte-buddy-agent/1.14.5/byte-buddy-agent-1.14.5.jar"
+              ],
+              "downloaded_file_path": "net/bytebuddy/byte-buddy-agent/1.14.5/byte-buddy-agent-1.14.5.jar"
+            }
+          },
+          "com_google_j2objc_j2objc_annotations_2_8": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_j2objc_j2objc_annotations_2_8",
+              "sha256": "f02a95fa1a5e95edb3ed859fd0fb7df709d121a35290eff8b74dce2ab7f4d6ed",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/j2objc/j2objc-annotations/2.8/j2objc-annotations-2.8.jar"
+              ],
+              "downloaded_file_path": "com/google/j2objc/j2objc-annotations/2.8/j2objc-annotations-2.8.jar"
+            }
+          },
+          "com_google_http_client_google_http_client_1_38_0": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_http_client_google_http_client_1_38_0",
+              "sha256": "411f4a42519b6b78bdc0fcfdf74c9edcef0ee97afa4a667abe04045a508d6302",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/http-client/google-http-client/1.38.0/google-http-client-1.38.0.jar",
+                "https://maven.google.com/com/google/http-client/google-http-client/1.38.0/google-http-client-1.38.0.jar"
+              ],
+              "downloaded_file_path": "com/google/http-client/google-http-client/1.38.0/google-http-client-1.38.0.jar"
+            }
+          },
+          "net_java_dev_jna_jna_platform_5_6_0": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~net_java_dev_jna_jna_platform_5_6_0",
+              "sha256": "9ecea8bf2b1b39963939d18b70464eef60c508fed8820f9dcaba0c35518eabf7",
+              "urls": [
+                "https://dl.google.com/android/maven2/net/java/dev/jna/jna-platform/5.6.0/jna-platform-5.6.0.jar",
+                "https://repo1.maven.org/maven2/net/java/dev/jna/jna-platform/5.6.0/jna-platform-5.6.0.jar"
+              ],
+              "downloaded_file_path": "net/java/dev/jna/jna-platform/5.6.0/jna-platform-5.6.0.jar"
+            }
+          },
+          "com_android_tools_analytics_library_shared_30_1_3": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_android_tools_analytics_library_shared_30_1_3",
+              "sha256": "7c7d19727641e1fbbb61e8569712b3a0229e4e0352636b5745049d41e1a71e00",
+              "urls": [
+                "https://dl.google.com/android/maven2/com/android/tools/analytics-library/shared/30.1.3/shared-30.1.3.jar",
+                "https://repo1.maven.org/maven2/com/android/tools/analytics-library/shared/30.1.3/shared-30.1.3.jar"
+              ],
+              "downloaded_file_path": "com/android/tools/analytics-library/shared/30.1.3/shared-30.1.3.jar"
+            }
+          },
+          "com_google_code_findbugs_jsr305_3_0_2": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_code_findbugs_jsr305_3_0_2",
+              "sha256": "766ad2a0783f2687962c8ad74ceecc38a28b9f72a2d085ee438b7813e928d0c7",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar"
+              ],
+              "downloaded_file_path": "com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar"
+            }
+          },
+          "com_google_errorprone_error_prone_annotation_2_22_0": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_errorprone_error_prone_annotation_2_22_0",
+              "sha256": "554c42449c9920ea1f6baec1d1b8aaac404a88be653f7cb441ee059316f8a1d1",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/errorprone/error_prone_annotation/2.22.0/error_prone_annotation-2.22.0.jar"
+              ],
+              "downloaded_file_path": "com/google/errorprone/error_prone_annotation/2.22.0/error_prone_annotation-2.22.0.jar"
+            }
+          },
+          "com_google_http_client_google_http_client_gson_1_42_0": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_http_client_google_http_client_gson_1_42_0",
+              "sha256": "cb852272c1cb0c8449d8b1a70f3e0f2c1efb2063e543183faa43078fb446f540",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/http-client/google-http-client-gson/1.42.0/google-http-client-gson-1.42.0.jar"
+              ],
+              "downloaded_file_path": "com/google/http-client/google-http-client-gson/1.42.0/google-http-client-gson-1.42.0.jar"
+            }
+          },
+          "com_google_protobuf_protobuf_java_util_3_13_0": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_protobuf_protobuf_java_util_3_13_0",
+              "sha256": "d9de66b8c9445905dfa7064f6d5213d47ce88a20d34e21d83c4a94a229e14e62",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/protobuf/protobuf-java-util/3.13.0/protobuf-java-util-3.13.0.jar",
+                "https://maven.google.com/com/google/protobuf/protobuf-java-util/3.13.0/protobuf-java-util-3.13.0.jar"
+              ],
+              "downloaded_file_path": "com/google/protobuf/protobuf-java-util/3.13.0/protobuf-java-util-3.13.0.jar"
+            }
+          },
+          "org_mockito_mockito_core_5_4_0": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~org_mockito_mockito_core_5_4_0",
+              "sha256": "b1689b06617ea01fd777bfaedbdde512faf083d639a049f79b388d5a4e96d2e5",
+              "urls": [
+                "https://repo1.maven.org/maven2/org/mockito/mockito-core/5.4.0/mockito-core-5.4.0.jar"
+              ],
+              "downloaded_file_path": "org/mockito/mockito-core/5.4.0/mockito-core-5.4.0.jar"
+            }
+          },
+          "com_google_guava_failureaccess_1_0_1": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_guava_failureaccess_1_0_1",
+              "sha256": "a171ee4c734dd2da837e4b16be9df4661afab72a41adaf31eb84dfdaf936ca26",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar"
+              ],
+              "downloaded_file_path": "com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar"
+            }
+          },
+          "io_opencensus_opencensus_api_0_31_1": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~io_opencensus_opencensus_api_0_31_1",
+              "sha256": "f1474d47f4b6b001558ad27b952e35eda5cc7146788877fc52938c6eba24b382",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/opencensus/opencensus-api/0.31.1/opencensus-api-0.31.1.jar"
+              ],
+              "downloaded_file_path": "io/opencensus/opencensus-api/0.31.1/opencensus-api-0.31.1.jar"
+            }
+          },
+          "io_grpc_grpc_context_1_33_1": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~io_grpc_grpc_context_1_33_1",
+              "sha256": "99b8aea2b614fe0e61c3676e681259dc43c2de7f64620998e1a8435eb2976496",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/grpc/grpc-context/1.33.1/grpc-context-1.33.1.jar",
+                "https://maven.google.com/io/grpc/grpc-context/1.33.1/grpc-context-1.33.1.jar"
+              ],
+              "downloaded_file_path": "io/grpc/grpc-context/1.33.1/grpc-context-1.33.1.jar"
+            }
+          },
+          "com_google_api_grpc_proto_google_iam_v1_1_0_3": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_api_grpc_proto_google_iam_v1_1_0_3",
+              "sha256": "64cee7383a97e846da8d8e160e6c8fe30561e507260552c59e6ccfc81301fdc8",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/api/grpc/proto-google-iam-v1/1.0.3/proto-google-iam-v1-1.0.3.jar",
+                "https://maven.google.com/com/google/api/grpc/proto-google-iam-v1/1.0.3/proto-google-iam-v1-1.0.3.jar"
+              ],
+              "downloaded_file_path": "com/google/api/grpc/proto-google-iam-v1/1.0.3/proto-google-iam-v1-1.0.3.jar"
+            }
+          },
+          "org_objenesis_objenesis_3_3": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~org_objenesis_objenesis_3_3",
+              "sha256": "02dfd0b0439a5591e35b708ed2f5474eb0948f53abf74637e959b8e4ef69bfeb",
+              "urls": [
+                "https://repo1.maven.org/maven2/org/objenesis/objenesis/3.3/objenesis-3.3.jar"
+              ],
+              "downloaded_file_path": "org/objenesis/objenesis/3.3/objenesis-3.3.jar"
+            }
+          },
+          "software_amazon_awssdk_metrics_spi_2_17_183": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~software_amazon_awssdk_metrics_spi_2_17_183",
+              "sha256": "08a11dc8c4ba464beafbcc7ac05b8c724c1ccb93da99482e82a68540ac704e4a",
+              "urls": [
+                "https://repo1.maven.org/maven2/software/amazon/awssdk/metrics-spi/2.17.183/metrics-spi-2.17.183.jar",
+                "https://maven.google.com/software/amazon/awssdk/metrics-spi/2.17.183/metrics-spi-2.17.183.jar"
+              ],
+              "downloaded_file_path": "software/amazon/awssdk/metrics-spi/2.17.183/metrics-spi-2.17.183.jar"
+            }
+          },
+          "com_google_http_client_google_http_client_jackson2_1_38_0": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_http_client_google_http_client_jackson2_1_38_0",
+              "sha256": "e6504a82425fcc2168a4ca4175138ddcc085168daed8cdedb86d8f6fdc296e1e",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/http-client/google-http-client-jackson2/1.38.0/google-http-client-jackson2-1.38.0.jar",
+                "https://maven.google.com/com/google/http-client/google-http-client-jackson2/1.38.0/google-http-client-jackson2-1.38.0.jar"
+              ],
+              "downloaded_file_path": "com/google/http-client/google-http-client-jackson2/1.38.0/google-http-client-jackson2-1.38.0.jar"
+            }
+          },
+          "com_android_tools_build_apksig_7_1_3": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_android_tools_build_apksig_7_1_3",
+              "sha256": "095885c56af3e52e9c7d2ac9b6cf07a8e3bf7fedfbab3914c75c39677d346ada",
+              "urls": [
+                "https://dl.google.com/android/maven2/com/android/tools/build/apksig/7.1.3/apksig-7.1.3.jar",
+                "https://repo1.maven.org/maven2/com/android/tools/build/apksig/7.1.3/apksig-7.1.3.jar"
+              ],
+              "downloaded_file_path": "com/android/tools/build/apksig/7.1.3/apksig-7.1.3.jar"
+            }
+          },
+          "com_beust_jcommander_1_82": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_beust_jcommander_1_82",
+              "sha256": "deeac157c8de6822878d85d0c7bc8467a19cc8484d37788f7804f039dde280b1",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/beust/jcommander/1.82/jcommander-1.82.jar"
+              ],
+              "downloaded_file_path": "com/beust/jcommander/1.82/jcommander-1.82.jar"
+            }
+          },
+          "androidx_databinding_databinding_common_3_4_0_alpha10": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~androidx_databinding_databinding_common_3_4_0_alpha10",
+              "sha256": "1b2cfc3beaf6139e1851dd4a888cda8192ba0ad4be3de43450d5f30569845303",
+              "urls": [
+                "https://dl.google.com/android/maven2/androidx/databinding/databinding-common/3.4.0-alpha10/databinding-common-3.4.0-alpha10.jar",
+                "https://repo1.maven.org/maven2/androidx/databinding/databinding-common/3.4.0-alpha10/databinding-common-3.4.0-alpha10.jar"
+              ],
+              "downloaded_file_path": "androidx/databinding/databinding-common/3.4.0-alpha10/databinding-common-3.4.0-alpha10.jar"
+            }
+          },
+          "software_amazon_awssdk_third_party_jackson_core_2_17_183": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~software_amazon_awssdk_third_party_jackson_core_2_17_183",
+              "sha256": "1bc27c9960993c20e1ab058012dd1ae04c875eec9f0f08f2b2ca41e578dee9a4",
+              "urls": [
+                "https://repo1.maven.org/maven2/software/amazon/awssdk/third-party-jackson-core/2.17.183/third-party-jackson-core-2.17.183.jar",
+                "https://maven.google.com/software/amazon/awssdk/third-party-jackson-core/2.17.183/third-party-jackson-core-2.17.183.jar"
+              ],
+              "downloaded_file_path": "software/amazon/awssdk/third-party-jackson-core/2.17.183/third-party-jackson-core-2.17.183.jar"
+            }
+          },
+          "software_amazon_eventstream_eventstream_1_0_1": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~software_amazon_eventstream_eventstream_1_0_1",
+              "sha256": "0c37d8e696117f02c302191b8110b0d0eb20fa412fce34c3a269ec73c16ce822",
+              "urls": [
+                "https://repo1.maven.org/maven2/software/amazon/eventstream/eventstream/1.0.1/eventstream-1.0.1.jar",
+                "https://maven.google.com/software/amazon/eventstream/eventstream/1.0.1/eventstream-1.0.1.jar"
+              ],
+              "downloaded_file_path": "software/amazon/eventstream/eventstream/1.0.1/eventstream-1.0.1.jar"
+            }
+          },
+          "org_threeten_threeten_extra_1_5_0": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~org_threeten_threeten_extra_1_5_0",
+              "sha256": "e7def554536188fbaf8aac1a0a2f956b039cbbb5696edc3b8336c442c56ae445",
+              "urls": [
+                "https://repo1.maven.org/maven2/org/threeten/threeten-extra/1.5.0/threeten-extra-1.5.0.jar"
+              ],
+              "downloaded_file_path": "org/threeten/threeten-extra/1.5.0/threeten-extra-1.5.0.jar"
+            }
+          },
+          "io_netty_netty_codec_dns_4_1_93_Final": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~io_netty_netty_codec_dns_4_1_93_Final",
+              "sha256": "10a278b19d6393d5637f745007cb26d47dd16d468898dcc4a43e26d39c6cdd29",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/netty/netty-codec-dns/4.1.93.Final/netty-codec-dns-4.1.93.Final.jar"
+              ],
+              "downloaded_file_path": "io/netty/netty-codec-dns/4.1.93.Final/netty-codec-dns-4.1.93.Final.jar"
+            }
+          },
+          "software_amazon_awssdk_aws_xml_protocol_2_17_183": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~software_amazon_awssdk_aws_xml_protocol_2_17_183",
+              "sha256": "566bba05d49256fa6994efd68fa625ae05a62ea45ee74bb9130d20ea20988363",
+              "urls": [
+                "https://repo1.maven.org/maven2/software/amazon/awssdk/aws-xml-protocol/2.17.183/aws-xml-protocol-2.17.183.jar",
+                "https://maven.google.com/software/amazon/awssdk/aws-xml-protocol/2.17.183/aws-xml-protocol-2.17.183.jar"
+              ],
+              "downloaded_file_path": "software/amazon/awssdk/aws-xml-protocol/2.17.183/aws-xml-protocol-2.17.183.jar"
+            }
+          },
+          "io_netty_netty_transport_native_unix_common_jar_linux_x86_64_4_1_93_Final": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~io_netty_netty_transport_native_unix_common_jar_linux_x86_64_4_1_93_Final",
+              "sha256": "8923a73ba8a373f7b994906f5902ba9f6bb59d181d4ad01576a6e0c5abb09b67",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/netty/netty-transport-native-unix-common/4.1.93.Final/netty-transport-native-unix-common-4.1.93.Final-linux-x86_64.jar"
+              ],
+              "downloaded_file_path": "io/netty/netty-transport-native-unix-common/4.1.93.Final/netty-transport-native-unix-common-4.1.93.Final-linux-x86_64.jar"
+            }
+          },
+          "com_google_turbine_turbine_0_2": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_turbine_turbine_0_2",
+              "sha256": "e9088d5726b06cd6ed7e421f2a0a6bd1e4d3e8b9de1ce53603e5fb0f9ac9e4f2",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/turbine/turbine/0.2/turbine-0.2.jar"
+              ],
+              "downloaded_file_path": "com/google/turbine/turbine/0.2/turbine-0.2.jar"
+            }
+          },
+          "io_netty_netty_handler_4_1_93_Final": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~io_netty_netty_handler_4_1_93_Final",
+              "sha256": "4e5f563ae14ed713381816d582f5fcfd0615aefb29203486cdfb782d8a00a02b",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/netty/netty-handler/4.1.93.Final/netty-handler-4.1.93.Final.jar"
+              ],
+              "downloaded_file_path": "io/netty/netty-handler/4.1.93.Final/netty-handler-4.1.93.Final.jar"
+            }
+          },
+          "com_android_databinding_baseLibrary_3_4_0_alpha10": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_android_databinding_baseLibrary_3_4_0_alpha10",
+              "sha256": "1aed4f3e46bf83c80a1722ce6cc64a8133c4554a668c483f6b3d0f2c06dd7461",
+              "urls": [
+                "https://dl.google.com/android/maven2/com/android/databinding/baseLibrary/3.4.0-alpha10/baseLibrary-3.4.0-alpha10.jar",
+                "https://repo1.maven.org/maven2/com/android/databinding/baseLibrary/3.4.0-alpha10/baseLibrary-3.4.0-alpha10.jar"
+              ],
+              "downloaded_file_path": "com/android/databinding/baseLibrary/3.4.0-alpha10/baseLibrary-3.4.0-alpha10.jar"
+            }
+          },
+          "org_codehaus_mojo_animal_sniffer_annotations_1_21": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~org_codehaus_mojo_animal_sniffer_annotations_1_21",
+              "sha256": "2f25841c937e24959a57b630e2c4b8525b3d0f536f2e511c9b2bed30b1651d54",
+              "urls": [
+                "https://repo1.maven.org/maven2/org/codehaus/mojo/animal-sniffer-annotations/1.21/animal-sniffer-annotations-1.21.jar"
+              ],
+              "downloaded_file_path": "org/codehaus/mojo/animal-sniffer-annotations/1.21/animal-sniffer-annotations-1.21.jar"
+            }
+          },
+          "com_fasterxml_jackson_core_jackson_core_2_11_3": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_fasterxml_jackson_core_jackson_core_2_11_3",
+              "sha256": "78cd0a6b936232e06dd3e38da8a0345348a09cd1ff9c4d844c6ee72c75cfc402",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-core/2.11.3/jackson-core-2.11.3.jar",
+                "https://maven.google.com/com/fasterxml/jackson/core/jackson-core/2.11.3/jackson-core-2.11.3.jar"
+              ],
+              "downloaded_file_path": "com/fasterxml/jackson/core/jackson-core/2.11.3/jackson-core-2.11.3.jar"
+            }
+          },
+          "com_google_cloud_google_cloud_core_1_93_10": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_cloud_google_cloud_core_1_93_10",
+              "sha256": "832d74eca66f4601e162a8460d6f59f50d1d23f93c18b02654423b6b0d67c6ea",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/cloud/google-cloud-core/1.93.10/google-cloud-core-1.93.10.jar",
+                "https://maven.google.com/com/google/cloud/google-cloud-core/1.93.10/google-cloud-core-1.93.10.jar"
+              ],
+              "downloaded_file_path": "com/google/cloud/google-cloud-core/1.93.10/google-cloud-core-1.93.10.jar"
+            }
+          },
+          "io_netty_netty_codec_http2_4_1_93_Final": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~io_netty_netty_codec_http2_4_1_93_Final",
+              "sha256": "d96cc09045a1341c6d47494352aa263b87b72fb1d2ea9eca161aa73820bfe8bb",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/netty/netty-codec-http2/4.1.93.Final/netty-codec-http2-4.1.93.Final.jar"
+              ],
+              "downloaded_file_path": "io/netty/netty-codec-http2/4.1.93.Final/netty-codec-http2-4.1.93.Final.jar"
+            }
+          },
+          "io_netty_netty_buffer_4_1_93_Final": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~io_netty_netty_buffer_4_1_93_Final",
+              "sha256": "007c7d9c378df02d390567d0d7ddf542ffddb021b7313dbf502392113ffabb08",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/netty/netty-buffer/4.1.93.Final/netty-buffer-4.1.93.Final.jar"
+              ],
+              "downloaded_file_path": "io/netty/netty-buffer/4.1.93.Final/netty-buffer-4.1.93.Final.jar"
+            }
+          },
+          "commons_lang_commons_lang_2_6": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~commons_lang_commons_lang_2_6",
+              "sha256": "50f11b09f877c294d56f24463f47d28f929cf5044f648661c0f0cfbae9a2f49c",
+              "urls": [
+                "https://repo1.maven.org/maven2/commons-lang/commons-lang/2.6/commons-lang-2.6.jar"
+              ],
+              "downloaded_file_path": "commons-lang/commons-lang/2.6/commons-lang-2.6.jar"
+            }
+          },
+          "org_antlr_antlr4_4_5_3": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~org_antlr_antlr4_4_5_3",
+              "sha256": "a32de739cfdf515774e696f91aa9697d2e7731e5cb5045ca8a4b657f8b1b4fb4",
+              "urls": [
+                "https://dl.google.com/android/maven2/org/antlr/antlr4/4.5.3/antlr4-4.5.3.jar",
+                "https://repo1.maven.org/maven2/org/antlr/antlr4/4.5.3/antlr4-4.5.3.jar"
+              ],
+              "downloaded_file_path": "org/antlr/antlr4/4.5.3/antlr4-4.5.3.jar"
+            }
+          },
+          "io_netty_netty_tcnative_classes_2_0_56_Final": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~io_netty_netty_tcnative_classes_2_0_56_Final",
+              "sha256": "eede807f0dd5eb1ad74ea1ae1094430631da63fcde00d4dc20eb0cd048bb0ac3",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/netty/netty-tcnative-classes/2.0.56.Final/netty-tcnative-classes-2.0.56.Final.jar"
+              ],
+              "downloaded_file_path": "io/netty/netty-tcnative-classes/2.0.56.Final/netty-tcnative-classes-2.0.56.Final.jar"
+            }
+          },
+          "io_netty_netty_transport_classes_epoll_4_1_72_Final": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~io_netty_netty_transport_classes_epoll_4_1_72_Final",
+              "sha256": "e1528a9751c1285aa7beaf3a1eb0597151716426ce38598ac9bc0891209b9e68",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/netty/netty-transport-classes-epoll/4.1.72.Final/netty-transport-classes-epoll-4.1.72.Final.jar",
+                "https://maven.google.com/io/netty/netty-transport-classes-epoll/4.1.72.Final/netty-transport-classes-epoll-4.1.72.Final.jar"
+              ],
+              "downloaded_file_path": "io/netty/netty-transport-classes-epoll/4.1.72.Final/netty-transport-classes-epoll-4.1.72.Final.jar"
+            }
+          },
+          "org_checkerframework_checker_qual_3_12_0": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~org_checkerframework_checker_qual_3_12_0",
+              "sha256": "ff10785ac2a357ec5de9c293cb982a2cbb605c0309ea4cc1cb9b9bc6dbe7f3cb",
+              "urls": [
+                "https://repo1.maven.org/maven2/org/checkerframework/checker-qual/3.12.0/checker-qual-3.12.0.jar",
+                "https://maven.google.com/org/checkerframework/checker-qual/3.12.0/checker-qual-3.12.0.jar"
+              ],
+              "downloaded_file_path": "org/checkerframework/checker-qual/3.12.0/checker-qual-3.12.0.jar"
+            }
+          },
+          "software_amazon_awssdk_regions_2_17_183": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~software_amazon_awssdk_regions_2_17_183",
+              "sha256": "d3079395f3ffc07d04ffcce16fca29fb5968197f6e9ea3dbff6be297102b40a5",
+              "urls": [
+                "https://repo1.maven.org/maven2/software/amazon/awssdk/regions/2.17.183/regions-2.17.183.jar",
+                "https://maven.google.com/software/amazon/awssdk/regions/2.17.183/regions-2.17.183.jar"
+              ],
+              "downloaded_file_path": "software/amazon/awssdk/regions/2.17.183/regions-2.17.183.jar"
+            }
+          },
+          "com_google_http_client_google_http_client_apache_v2_1_42_0": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_http_client_google_http_client_apache_v2_1_42_0",
+              "sha256": "1fc4964236b67cf3c5651d7ac1dff668f73b7810c7f1dc0862a0e5bc01608785",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/http-client/google-http-client-apache-v2/1.42.0/google-http-client-apache-v2-1.42.0.jar"
+              ],
+              "downloaded_file_path": "com/google/http-client/google-http-client-apache-v2/1.42.0/google-http-client-apache-v2-1.42.0.jar"
+            }
+          },
+          "io_perfmark_perfmark_api_0_25_0": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~io_perfmark_perfmark_api_0_25_0",
+              "sha256": "2044542933fcdf40ad18441bec37646d150c491871157f288847e29cb81de4cb",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/perfmark/perfmark-api/0.25.0/perfmark-api-0.25.0.jar"
+              ],
+              "downloaded_file_path": "io/perfmark/perfmark-api/0.25.0/perfmark-api-0.25.0.jar"
+            }
+          },
+          "io_netty_netty_handler_4_1_72_Final": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~io_netty_netty_handler_4_1_72_Final",
+              "sha256": "9cb6012af7e06361d738ac4e3bdc49a158f8cf87d9dee0f2744056b7d99c28d5",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/netty/netty-handler/4.1.72.Final/netty-handler-4.1.72.Final.jar",
+                "https://maven.google.com/io/netty/netty-handler/4.1.72.Final/netty-handler-4.1.72.Final.jar"
+              ],
+              "downloaded_file_path": "io/netty/netty-handler/4.1.72.Final/netty-handler-4.1.72.Final.jar"
+            }
+          },
+          "com_google_testparameterinjector_test_parameter_injector_1_0": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_testparameterinjector_test_parameter_injector_1_0",
+              "sha256": "c3d4c8d7055b6fd7f1047ab37e3d476709c492510d485f1bfb204a3c16f0351c",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/testparameterinjector/test-parameter-injector/1.0/test-parameter-injector-1.0.jar"
+              ],
+              "downloaded_file_path": "com/google/testparameterinjector/test-parameter-injector/1.0/test-parameter-injector-1.0.jar"
+            }
+          },
+          "io_grpc_grpc_api_1_48_1": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~io_grpc_grpc_api_1_48_1",
+              "sha256": "aeb8d7a1361aa3d8f5a191580fa7f8cbc5ceb53137a4a698590f612f791e2c45",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/grpc/grpc-api/1.48.1/grpc-api-1.48.1.jar"
+              ],
+              "downloaded_file_path": "io/grpc/grpc-api/1.48.1/grpc-api-1.48.1.jar"
+            }
+          },
+          "org_ow2_asm_asm_analysis_9_2": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~org_ow2_asm_asm_analysis_9_2",
+              "sha256": "878fbe521731c072d14d2d65b983b1beae6ad06fda0007b6a8bae81f73f433c4",
+              "urls": [
+                "https://repo1.maven.org/maven2/org/ow2/asm/asm-analysis/9.2/asm-analysis-9.2.jar"
+              ],
+              "downloaded_file_path": "org/ow2/asm/asm-analysis/9.2/asm-analysis-9.2.jar"
+            }
+          },
+          "org_ow2_asm_asm_analysis_9_1": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~org_ow2_asm_asm_analysis_9_1",
+              "sha256": "81a88041b1b8beda5a8a99646098046c48709538270c49def68abff25ac3be34",
+              "urls": [
+                "https://dl.google.com/android/maven2/org/ow2/asm/asm-analysis/9.1/asm-analysis-9.1.jar",
+                "https://repo1.maven.org/maven2/org/ow2/asm/asm-analysis/9.1/asm-analysis-9.1.jar"
+              ],
+              "downloaded_file_path": "org/ow2/asm/asm-analysis/9.1/asm-analysis-9.1.jar"
+            }
+          },
+          "com_squareup_javapoet_1_12_0": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_squareup_javapoet_1_12_0",
+              "sha256": "2b70cdfa8c9e997b4007035a266c273c0df341f9c57c9d0b45a680ae3fd882db",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/squareup/javapoet/1.12.0/javapoet-1.12.0.jar"
+              ],
+              "downloaded_file_path": "com/squareup/javapoet/1.12.0/javapoet-1.12.0.jar"
+            }
+          },
+          "unpinned_maven_android": {
+            "bzlFile": "@@rules_jvm_external~5.2//:coursier.bzl",
+            "ruleClassName": "coursier_fetch",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~unpinned_maven_android",
+              "repositories": [
+                "{ \"repo_url\": \"https://dl.google.com/android/maven2\" }",
+                "{ \"repo_url\": \"https://repo1.maven.org/maven2\" }"
+              ],
+              "artifacts": [
+                "{ \"group\": \"androidx.databinding\", \"artifact\": \"databinding-compiler\", \"version\": \"3.4.0-alpha10\" }",
+                "{ \"group\": \"com.android.tools.build\", \"artifact\": \"builder\", \"version\": \"7.1.3\" }",
+                "{ \"group\": \"com.android.tools.build\", \"artifact\": \"manifest-merger\", \"version\": \"30.1.3\" }",
+                "{ \"group\": \"com.android.tools\", \"artifact\": \"sdk-common\", \"version\": \"30.1.3\" }",
+                "{ \"group\": \"com.android.tools\", \"artifact\": \"annotations\", \"version\": \"30.1.3\" }",
+                "{ \"group\": \"com.android.tools.layoutlib\", \"artifact\": \"layoutlib-api\", \"version\": \"30.1.3\" }",
+                "{ \"group\": \"com.android.tools\", \"artifact\": \"common\", \"version\": \"30.1.3\" }",
+                "{ \"group\": \"com.android.tools\", \"artifact\": \"repository\", \"version\": \"30.1.3\" }"
+              ],
+              "fail_on_missing_checksum": true,
+              "fetch_sources": false,
+              "fetch_javadoc": false,
+              "excluded_artifacts": [],
+              "generate_compat_repositories": false,
+              "version_conflict_policy": "default",
+              "override_targets": {},
+              "strict_visibility": false,
+              "strict_visibility_value": [
+                "@@//visibility:private"
+              ],
+              "maven_install_json": "@@//src/tools/android:maven_android_install.json",
+              "resolve_timeout": 600,
+              "jetify": false,
+              "jetify_include_list": [
+                "*"
+              ],
+              "use_starlark_android_rules": false,
+              "aar_import_bzl_label": "@build_bazel_rules_android//android:rules.bzl",
+              "duplicate_version_warning": "warn"
+            }
+          },
+          "io_netty_netty_resolver_4_1_72_Final": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~io_netty_netty_resolver_4_1_72_Final",
+              "sha256": "6474598aab7cc9d8d6cfa06c05bd1b19adbf7f8451dbdd73070b33a6c60b1b90",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/netty/netty-resolver/4.1.72.Final/netty-resolver-4.1.72.Final.jar",
+                "https://maven.google.com/io/netty/netty-resolver/4.1.72.Final/netty-resolver-4.1.72.Final.jar"
+              ],
+              "downloaded_file_path": "io/netty/netty-resolver/4.1.72.Final/netty-resolver-4.1.72.Final.jar"
+            }
+          },
+          "software_amazon_awssdk_protocol_core_2_17_183": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~software_amazon_awssdk_protocol_core_2_17_183",
+              "sha256": "10e7c4faa1f05e2d73055d0390dbd0bb6450e2e6cb85beda051b1e4693c826ce",
+              "urls": [
+                "https://repo1.maven.org/maven2/software/amazon/awssdk/protocol-core/2.17.183/protocol-core-2.17.183.jar",
+                "https://maven.google.com/software/amazon/awssdk/protocol-core/2.17.183/protocol-core-2.17.183.jar"
+              ],
+              "downloaded_file_path": "software/amazon/awssdk/protocol-core/2.17.183/protocol-core-2.17.183.jar"
+            }
+          },
+          "com_squareup_javapoet_1_8_0": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_squareup_javapoet_1_8_0",
+              "sha256": "8e108c92027bb428196f10fa11cffbe589f7648a6af2016d652279385fdfd789",
+              "urls": [
+                "https://dl.google.com/android/maven2/com/squareup/javapoet/1.8.0/javapoet-1.8.0.jar",
+                "https://repo1.maven.org/maven2/com/squareup/javapoet/1.8.0/javapoet-1.8.0.jar"
+              ],
+              "downloaded_file_path": "com/squareup/javapoet/1.8.0/javapoet-1.8.0.jar"
+            }
+          },
+          "io_grpc_grpc_protobuf_lite_1_48_1": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~io_grpc_grpc_protobuf_lite_1_48_1",
+              "sha256": "0a4c735bb80e342d418c0ef7d2add7793aaf72b91c449bde2769ea81f1869737",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/grpc/grpc-protobuf-lite/1.48.1/grpc-protobuf-lite-1.48.1.jar"
+              ],
+              "downloaded_file_path": "io/grpc/grpc-protobuf-lite/1.48.1/grpc-protobuf-lite-1.48.1.jar"
+            }
+          },
+          "software_amazon_awssdk_s3_2_17_183": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~software_amazon_awssdk_s3_2_17_183",
+              "sha256": "ab073b91107a9e4ed9f030314077d137fe627e055ad895fabb036980a050e360",
+              "urls": [
+                "https://repo1.maven.org/maven2/software/amazon/awssdk/s3/2.17.183/s3-2.17.183.jar",
+                "https://maven.google.com/software/amazon/awssdk/s3/2.17.183/s3-2.17.183.jar"
+              ],
+              "downloaded_file_path": "software/amazon/awssdk/s3/2.17.183/s3-2.17.183.jar"
+            }
+          },
+          "com_squareup_javawriter_2_5_0": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_squareup_javawriter_2_5_0",
+              "sha256": "fcfb09fb0ea0aa97d3cfe7ea792398081348e468f126b3603cb3803f240197f0",
+              "urls": [
+                "https://dl.google.com/android/maven2/com/squareup/javawriter/2.5.0/javawriter-2.5.0.jar",
+                "https://repo1.maven.org/maven2/com/squareup/javawriter/2.5.0/javawriter-2.5.0.jar"
+              ],
+              "downloaded_file_path": "com/squareup/javawriter/2.5.0/javawriter-2.5.0.jar"
+            }
+          },
+          "org_apache_httpcomponents_httpclient_4_5_13": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~org_apache_httpcomponents_httpclient_4_5_13",
+              "sha256": "6fe9026a566c6a5001608cf3fc32196641f6c1e5e1986d1037ccdbd5f31ef743",
+              "urls": [
+                "https://repo1.maven.org/maven2/org/apache/httpcomponents/httpclient/4.5.13/httpclient-4.5.13.jar",
+                "https://maven.google.com/org/apache/httpcomponents/httpclient/4.5.13/httpclient-4.5.13.jar"
+              ],
+              "downloaded_file_path": "org/apache/httpcomponents/httpclient/4.5.13/httpclient-4.5.13.jar"
+            }
+          },
+          "net_sf_kxml_kxml2_2_3_0": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~net_sf_kxml_kxml2_2_3_0",
+              "sha256": "f264dd9f79a1fde10ce5ecc53221eff24be4c9331c830b7d52f2f08a7b633de2",
+              "urls": [
+                "https://dl.google.com/android/maven2/net/sf/kxml/kxml2/2.3.0/kxml2-2.3.0.jar",
+                "https://repo1.maven.org/maven2/net/sf/kxml/kxml2/2.3.0/kxml2-2.3.0.jar"
+              ],
+              "downloaded_file_path": "net/sf/kxml/kxml2/2.3.0/kxml2-2.3.0.jar"
+            }
+          },
+          "com_google_code_gson_gson_2_9_0": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_code_gson_gson_2_9_0",
+              "sha256": "c96d60551331a196dac54b745aa642cd078ef89b6f267146b705f2c2cbef052d",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/code/gson/gson/2.9.0/gson-2.9.0.jar"
+              ],
+              "downloaded_file_path": "com/google/code/gson/gson/2.9.0/gson-2.9.0.jar"
+            }
+          },
+          "io_netty_netty_buffer_4_1_72_Final": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~io_netty_netty_buffer_4_1_72_Final",
+              "sha256": "568ff7cd9d8e2284ec980730c88924f686642929f8f219a74518b4e64755f3a1",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/netty/netty-buffer/4.1.72.Final/netty-buffer-4.1.72.Final.jar",
+                "https://maven.google.com/io/netty/netty-buffer/4.1.72.Final/netty-buffer-4.1.72.Final.jar"
+              ],
+              "downloaded_file_path": "io/netty/netty-buffer/4.1.72.Final/netty-buffer-4.1.72.Final.jar"
+            }
+          },
+          "jakarta_xml_bind_jakarta_xml_bind_api_2_3_2": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~jakarta_xml_bind_jakarta_xml_bind_api_2_3_2",
+              "sha256": "69156304079bdeed9fc0ae3b39389f19b3cc4ba4443bc80508995394ead742ea",
+              "urls": [
+                "https://dl.google.com/android/maven2/jakarta/xml/bind/jakarta.xml.bind-api/2.3.2/jakarta.xml.bind-api-2.3.2.jar",
+                "https://repo1.maven.org/maven2/jakarta/xml/bind/jakarta.xml.bind-api/2.3.2/jakarta.xml.bind-api-2.3.2.jar"
+              ],
+              "downloaded_file_path": "jakarta/xml/bind/jakarta.xml.bind-api/2.3.2/jakarta.xml.bind-api-2.3.2.jar"
+            }
+          },
+          "org_pcollections_pcollections_3_1_4": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~org_pcollections_pcollections_3_1_4",
+              "sha256": "34f579ba075c8da2c8a0fedd0f04e21eac2fb6c660d90d0fabb573e8b4dc6918",
+              "urls": [
+                "https://repo1.maven.org/maven2/org/pcollections/pcollections/3.1.4/pcollections-3.1.4.jar"
+              ],
+              "downloaded_file_path": "org/pcollections/pcollections/3.1.4/pcollections-3.1.4.jar"
+            }
+          },
+          "xerces_xercesImpl_2_12_0": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~xerces_xercesImpl_2_12_0",
+              "sha256": "b50d3a4ca502faa4d1c838acb8aa9480446953421f7327e338c5dda3da5e76d0",
+              "urls": [
+                "https://dl.google.com/android/maven2/xerces/xercesImpl/2.12.0/xercesImpl-2.12.0.jar",
+                "https://repo1.maven.org/maven2/xerces/xercesImpl/2.12.0/xercesImpl-2.12.0.jar"
+              ],
+              "downloaded_file_path": "xerces/xercesImpl/2.12.0/xercesImpl-2.12.0.jar"
+            }
+          },
+          "com_android_tools_analytics_library_tracker_30_1_3": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_android_tools_analytics_library_tracker_30_1_3",
+              "sha256": "c30e3634f83d524680f3aba2861078fb14bd347e6f9f0e5c079fba6142eec7e9",
+              "urls": [
+                "https://dl.google.com/android/maven2/com/android/tools/analytics-library/tracker/30.1.3/tracker-30.1.3.jar",
+                "https://repo1.maven.org/maven2/com/android/tools/analytics-library/tracker/30.1.3/tracker-30.1.3.jar"
+              ],
+              "downloaded_file_path": "com/android/tools/analytics-library/tracker/30.1.3/tracker-30.1.3.jar"
+            }
+          },
+          "io_netty_netty_tcnative_boringssl_static_jar_osx_x86_64_2_0_56_Final": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~io_netty_netty_tcnative_boringssl_static_jar_osx_x86_64_2_0_56_Final",
+              "sha256": "9a77e8910af04becbdb535592c6a1e1a9accecde522aa1bb925a023c2c59d6dc",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/netty/netty-tcnative-boringssl-static/2.0.56.Final/netty-tcnative-boringssl-static-2.0.56.Final-osx-x86_64.jar"
+              ],
+              "downloaded_file_path": "io/netty/netty-tcnative-boringssl-static/2.0.56.Final/netty-tcnative-boringssl-static-2.0.56.Final-osx-x86_64.jar"
+            }
+          },
+          "io_grpc_grpc_stub_1_48_1": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~io_grpc_grpc_stub_1_48_1",
+              "sha256": "6436f19cef264fd949fb7a41e11424e373aa3b1096cad0b7e518f1c81aa60f23",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/grpc/grpc-stub/1.48.1/grpc-stub-1.48.1.jar"
+              ],
+              "downloaded_file_path": "io/grpc/grpc-stub/1.48.1/grpc-stub-1.48.1.jar"
+            }
+          },
+          "org_slf4j_slf4j_api_1_7_30": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~org_slf4j_slf4j_api_1_7_30",
+              "sha256": "cdba07964d1bb40a0761485c6b1e8c2f8fd9eb1d19c53928ac0d7f9510105c57",
+              "urls": [
+                "https://repo1.maven.org/maven2/org/slf4j/slf4j-api/1.7.30/slf4j-api-1.7.30.jar",
+                "https://maven.google.com/org/slf4j/slf4j-api/1.7.30/slf4j-api-1.7.30.jar"
+              ],
+              "downloaded_file_path": "org/slf4j/slf4j-api/1.7.30/slf4j-api-1.7.30.jar"
+            }
+          },
+          "org_jetbrains_annotations_13_0": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~org_jetbrains_annotations_13_0",
+              "sha256": "ace2a10dc8e2d5fd34925ecac03e4988b2c0f851650c94b8cef49ba1bd111478",
+              "urls": [
+                "https://dl.google.com/android/maven2/org/jetbrains/annotations/13.0/annotations-13.0.jar",
+                "https://repo1.maven.org/maven2/org/jetbrains/annotations/13.0/annotations-13.0.jar"
+              ],
+              "downloaded_file_path": "org/jetbrains/annotations/13.0/annotations-13.0.jar"
+            }
+          },
+          "org_jvnet_staxex_stax_ex_1_8_1": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~org_jvnet_staxex_stax_ex_1_8_1",
+              "sha256": "20522549056e9e50aa35ef0b445a2e47a53d06be0b0a9467d704e2483ffb049a",
+              "urls": [
+                "https://dl.google.com/android/maven2/org/jvnet/staxex/stax-ex/1.8.1/stax-ex-1.8.1.jar",
+                "https://repo1.maven.org/maven2/org/jvnet/staxex/stax-ex/1.8.1/stax-ex-1.8.1.jar"
+              ],
+              "downloaded_file_path": "org/jvnet/staxex/stax-ex/1.8.1/stax-ex-1.8.1.jar"
+            }
+          },
+          "com_google_api_grpc_proto_google_common_protos_2_0_1": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_api_grpc_proto_google_common_protos_2_0_1",
+              "sha256": "5ce71656118618731e34a5d4c61aa3a031be23446dc7de8b5a5e77b66ebcd6ef",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/api/grpc/proto-google-common-protos/2.0.1/proto-google-common-protos-2.0.1.jar",
+                "https://maven.google.com/com/google/api/grpc/proto-google-common-protos/2.0.1/proto-google-common-protos-2.0.1.jar"
+              ],
+              "downloaded_file_path": "com/google/api/grpc/proto-google-common-protos/2.0.1/proto-google-common-protos-2.0.1.jar"
+            }
+          },
+          "commons_logging_commons_logging_1_2": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~commons_logging_commons_logging_1_2",
+              "sha256": "daddea1ea0be0f56978ab3006b8ac92834afeefbd9b7e4e6316fca57df0fa636",
+              "urls": [
+                "https://dl.google.com/android/maven2/commons-logging/commons-logging/1.2/commons-logging-1.2.jar",
+                "https://repo1.maven.org/maven2/commons-logging/commons-logging/1.2/commons-logging-1.2.jar"
+              ],
+              "downloaded_file_path": "commons-logging/commons-logging/1.2/commons-logging-1.2.jar"
+            }
+          },
+          "com_google_api_client_google_api_client_gson_1_35_2": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_api_client_google_api_client_gson_1_35_2",
+              "sha256": "54e5be675e5c2ab0958647fcaa35c14bd8f7c08358c634f5ab786e4ed7268576",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/api-client/google-api-client-gson/1.35.2/google-api-client-gson-1.35.2.jar"
+              ],
+              "downloaded_file_path": "com/google/api-client/google-api-client-gson/1.35.2/google-api-client-gson-1.35.2.jar"
+            }
+          },
+          "com_sun_xml_fastinfoset_FastInfoset_1_2_16": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_sun_xml_fastinfoset_FastInfoset_1_2_16",
+              "sha256": "056f3a1e144409f21ed16afc26805f58e9a21f3fce1543c42d400719d250c511",
+              "urls": [
+                "https://dl.google.com/android/maven2/com/sun/xml/fastinfoset/FastInfoset/1.2.16/FastInfoset-1.2.16.jar",
+                "https://repo1.maven.org/maven2/com/sun/xml/fastinfoset/FastInfoset/1.2.16/FastInfoset-1.2.16.jar"
+              ],
+              "downloaded_file_path": "com/sun/xml/fastinfoset/FastInfoset/1.2.16/FastInfoset-1.2.16.jar"
+            }
+          },
+          "com_google_cloud_google_cloud_storage_1_113_4": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_cloud_google_cloud_storage_1_113_4",
+              "sha256": "796833e9bdab80c40bbc820e65087eb8f28c6bfbca194d2e3e00d98cb5bc55d6",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/cloud/google-cloud-storage/1.113.4/google-cloud-storage-1.113.4.jar",
+                "https://maven.google.com/com/google/cloud/google-cloud-storage/1.113.4/google-cloud-storage-1.113.4.jar"
+              ],
+              "downloaded_file_path": "com/google/cloud/google-cloud-storage/1.113.4/google-cloud-storage-1.113.4.jar"
+            }
+          },
+          "commons_io_commons_io_2_4": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~commons_io_commons_io_2_4",
+              "sha256": "cc6a41dc3eaacc9e440a6bd0d2890b20d36b4ee408fe2d67122f328bb6e01581",
+              "urls": [
+                "https://dl.google.com/android/maven2/commons-io/commons-io/2.4/commons-io-2.4.jar",
+                "https://repo1.maven.org/maven2/commons-io/commons-io/2.4/commons-io-2.4.jar"
+              ],
+              "downloaded_file_path": "commons-io/commons-io/2.4/commons-io-2.4.jar"
+            }
+          },
+          "io_netty_netty_transport_native_epoll_jar_linux_x86_64_4_1_93_Final": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~io_netty_netty_transport_native_epoll_jar_linux_x86_64_4_1_93_Final",
+              "sha256": "f87a502f3d257bc41f80bd0b90c19e6b4a48d0600fb26e7b5d6c2c675680fa0e",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/netty/netty-transport-native-epoll/4.1.93.Final/netty-transport-native-epoll-4.1.93.Final-linux-x86_64.jar"
+              ],
+              "downloaded_file_path": "io/netty/netty-transport-native-epoll/4.1.93.Final/netty-transport-native-epoll-4.1.93.Final-linux-x86_64.jar"
+            }
+          },
+          "com_typesafe_netty_netty_reactive_streams_2_0_5": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_typesafe_netty_netty_reactive_streams_2_0_5",
+              "sha256": "f949849fc8ee75fde468ba3a35df2e04577fa31a2940b83b2a7dc9d14dac13d6",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/typesafe/netty/netty-reactive-streams/2.0.5/netty-reactive-streams-2.0.5.jar",
+                "https://maven.google.com/com/typesafe/netty/netty-reactive-streams/2.0.5/netty-reactive-streams-2.0.5.jar"
+              ],
+              "downloaded_file_path": "com/typesafe/netty/netty-reactive-streams/2.0.5/netty-reactive-streams-2.0.5.jar"
+            }
+          },
+          "com_github_stephenc_jcip_jcip_annotations_1_0_1": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_github_stephenc_jcip_jcip_annotations_1_0_1",
+              "sha256": "4fccff8382aafc589962c4edb262f6aa595e34f1e11e61057d1c6a96e8fc7323",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/github/stephenc/jcip/jcip-annotations/1.0-1/jcip-annotations-1.0-1.jar"
+              ],
+              "downloaded_file_path": "com/github/stephenc/jcip/jcip-annotations/1.0-1/jcip-annotations-1.0-1.jar"
+            }
+          },
+          "com_typesafe_netty_netty_reactive_streams_http_2_0_5": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_typesafe_netty_netty_reactive_streams_http_2_0_5",
+              "sha256": "b39224751ad936758176e9d994230380ade5e9079e7c8ad778e3995779bcf303",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/typesafe/netty/netty-reactive-streams-http/2.0.5/netty-reactive-streams-http-2.0.5.jar",
+                "https://maven.google.com/com/typesafe/netty/netty-reactive-streams-http/2.0.5/netty-reactive-streams-http-2.0.5.jar"
+              ],
+              "downloaded_file_path": "com/typesafe/netty/netty-reactive-streams-http/2.0.5/netty-reactive-streams-http-2.0.5.jar"
+            }
+          },
+          "com_google_api_client_google_api_client_1_35_2": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_api_client_google_api_client_1_35_2",
+              "sha256": "f195cd6228d3f99fa7e30ff2dee60ad0f2c7923be31399a7dcdc1abd679aa22e",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/api-client/google-api-client/1.35.2/google-api-client-1.35.2.jar"
+              ],
+              "downloaded_file_path": "com/google/api-client/google-api-client/1.35.2/google-api-client-1.35.2.jar"
+            }
+          },
+          "org_ow2_asm_asm_commons_9_2": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~org_ow2_asm_asm_commons_9_2",
+              "sha256": "be4ce53138a238bb522cd781cf91f3ba5ce2f6ca93ec62d46a162a127225e0a6",
+              "urls": [
+                "https://repo1.maven.org/maven2/org/ow2/asm/asm-commons/9.2/asm-commons-9.2.jar"
+              ],
+              "downloaded_file_path": "org/ow2/asm/asm-commons/9.2/asm-commons-9.2.jar"
+            }
+          },
+          "org_ow2_asm_asm_commons_9_1": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~org_ow2_asm_asm_commons_9_1",
+              "sha256": "afcb26dc1fc12c0c4a99ada670908dd82e18dfc488caf5ee92546996b470c00c",
+              "urls": [
+                "https://dl.google.com/android/maven2/org/ow2/asm/asm-commons/9.1/asm-commons-9.1.jar",
+                "https://repo1.maven.org/maven2/org/ow2/asm/asm-commons/9.1/asm-commons-9.1.jar"
+              ],
+              "downloaded_file_path": "org/ow2/asm/asm-commons/9.1/asm-commons-9.1.jar"
+            }
+          },
+          "com_android_tools_dvlib_30_1_3": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_android_tools_dvlib_30_1_3",
+              "sha256": "50886691517d30762c571f585a07f384e6a8cca5fcbea9d46660ba078b613bfa",
+              "urls": [
+                "https://dl.google.com/android/maven2/com/android/tools/dvlib/30.1.3/dvlib-30.1.3.jar",
+                "https://repo1.maven.org/maven2/com/android/tools/dvlib/30.1.3/dvlib-30.1.3.jar"
+              ],
+              "downloaded_file_path": "com/android/tools/dvlib/30.1.3/dvlib-30.1.3.jar"
+            }
+          },
+          "org_threeten_threetenbp_1_5_0": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~org_threeten_threetenbp_1_5_0",
+              "sha256": "dcf9c0f940739f2a825cd8626ff27113459a2f6eb18797c7152f93fff69c264f",
+              "urls": [
+                "https://repo1.maven.org/maven2/org/threeten/threetenbp/1.5.0/threetenbp-1.5.0.jar",
+                "https://maven.google.com/org/threeten/threetenbp/1.5.0/threetenbp-1.5.0.jar"
+              ],
+              "downloaded_file_path": "org/threeten/threetenbp/1.5.0/threetenbp-1.5.0.jar"
+            }
+          },
+          "io_reactivex_rxjava3_rxjava_3_1_2": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~io_reactivex_rxjava3_rxjava_3_1_2",
+              "sha256": "8d784075bec0b7c55042c109a4de8923b3b6d2ebd2e00912d518f07240f9c23a",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/reactivex/rxjava3/rxjava/3.1.2/rxjava-3.1.2.jar"
+              ],
+              "downloaded_file_path": "io/reactivex/rxjava3/rxjava/3.1.2/rxjava-3.1.2.jar"
+            }
+          },
+          "com_android_tools_build_apkzlib_7_1_3": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_android_tools_build_apkzlib_7_1_3",
+              "sha256": "5c10846c4a325b4313cdfcb236505ce1defa68f55d1a4259b503be115453c661",
+              "urls": [
+                "https://dl.google.com/android/maven2/com/android/tools/build/apkzlib/7.1.3/apkzlib-7.1.3.jar",
+                "https://repo1.maven.org/maven2/com/android/tools/build/apkzlib/7.1.3/apkzlib-7.1.3.jar"
+              ],
+              "downloaded_file_path": "com/android/tools/build/apkzlib/7.1.3/apkzlib-7.1.3.jar"
+            }
+          },
+          "io_github_java_diff_utils_java_diff_utils_4_12": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~io_github_java_diff_utils_java_diff_utils_4_12",
+              "sha256": "9990a2039778f6b4cc94790141c2868864eacee0620c6c459451121a901cd5b5",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/github/java-diff-utils/java-diff-utils/4.12/java-diff-utils-4.12.jar"
+              ],
+              "downloaded_file_path": "io/github/java-diff-utils/java-diff-utils/4.12/java-diff-utils-4.12.jar"
+            }
+          },
+          "io_grpc_grpc_netty_1_48_1": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~io_grpc_grpc_netty_1_48_1",
+              "sha256": "2a51593342a2ee4f8f1b946dc48d06b02d0721493238e4ae83d1ad66f8b0c9f4",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/grpc/grpc-netty/1.48.1/grpc-netty-1.48.1.jar"
+              ],
+              "downloaded_file_path": "io/grpc/grpc-netty/1.48.1/grpc-netty-1.48.1.jar"
+            }
+          },
+          "maven": {
+            "bzlFile": "@@rules_jvm_external~5.2//:coursier.bzl",
+            "ruleClassName": "pinned_coursier_fetch",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~maven",
+              "repositories": [
+                "{ \"repo_url\": \"https://repo1.maven.org/maven2\" }"
+              ],
+              "artifacts": [
+                "{ \"group\": \"com.google.guava\", \"artifact\": \"guava-testlib\", \"version\": \"31.1-jre\", \"testonly\": true }",
+                "{ \"group\": \"com.google.jimfs\", \"artifact\": \"jimfs\", \"version\": \"1.2\", \"testonly\": true }",
+                "{ \"group\": \"com.google.testing.compile\", \"artifact\": \"compile-testing\", \"version\": \"0.18\", \"testonly\": true }",
+                "{ \"group\": \"com.google.testparameterinjector\", \"artifact\": \"test-parameter-injector\", \"version\": \"1.0\", \"testonly\": true }",
+                "{ \"group\": \"com.google.truth\", \"artifact\": \"truth\", \"version\": \"1.1.3\", \"testonly\": true }",
+                "{ \"group\": \"com.google.truth.extensions\", \"artifact\": \"truth-java8-extension\", \"version\": \"1.1.3\", \"testonly\": true }",
+                "{ \"group\": \"com.google.truth.extensions\", \"artifact\": \"truth-liteproto-extension\", \"version\": \"1.1.3\", \"testonly\": true }",
+                "{ \"group\": \"com.google.truth.extensions\", \"artifact\": \"truth-proto-extension\", \"version\": \"1.1.3\", \"testonly\": true }",
+                "{ \"group\": \"org.mockito\", \"artifact\": \"mockito-core\", \"version\": \"5.4.0\", \"testonly\": true }",
+                "{ \"group\": \"com.beust\", \"artifact\": \"jcommander\", \"version\": \"1.82\" }",
+                "{ \"group\": \"com.github.ben-manes.caffeine\", \"artifact\": \"caffeine\", \"version\": \"3.0.5\" }",
+                "{ \"group\": \"com.github.kevinstern\", \"artifact\": \"software-and-algorithms\", \"version\": \"1.0\" }",
+                "{ \"group\": \"com.github.stephenc.jcip\", \"artifact\": \"jcip-annotations\", \"version\": \"1.0-1\" }",
+                "{ \"group\": \"com.google.api-client\", \"artifact\": \"google-api-client-gson\", \"version\": \"1.35.2\" }",
+                "{ \"group\": \"com.google.api-client\", \"artifact\": \"google-api-client\", \"version\": \"1.35.2\" }",
+                "{ \"group\": \"com.google.auth\", \"artifact\": \"google-auth-library-credentials\", \"version\": \"1.6.0\" }",
+                "{ \"group\": \"com.google.auth\", \"artifact\": \"google-auth-library-oauth2-http\", \"version\": \"1.6.0\" }",
+                "{ \"group\": \"com.google.auto.service\", \"artifact\": \"auto-service-annotations\", \"version\": \"1.0.1\" }",
+                "{ \"group\": \"com.google.auto.service\", \"artifact\": \"auto-service\", \"version\": \"1.0\" }",
+                "{ \"group\": \"com.google.auto.value\", \"artifact\": \"auto-value-annotations\", \"version\": \"1.9\" }",
+                "{ \"group\": \"com.google.auto.value\", \"artifact\": \"auto-value\", \"version\": \"1.8.2\" }",
+                "{ \"group\": \"com.google.auto\", \"artifact\": \"auto-common\", \"version\": \"1.2.1\" }",
+                "{ \"group\": \"com.google.code.findbugs\", \"artifact\": \"jsr305\", \"version\": \"3.0.2\" }",
+                "{ \"group\": \"com.google.code.gson\", \"artifact\": \"gson\", \"version\": \"2.9.0\" }",
+                "{ \"group\": \"com.google.code.java-allocation-instrumenter\", \"artifact\": \"java-allocation-instrumenter\", \"version\": \"3.3.0\" }",
+                "{ \"group\": \"com.google.errorprone\", \"artifact\": \"error_prone_annotation\", \"version\": \"2.22.0\" }",
+                "{ \"group\": \"com.google.errorprone\", \"artifact\": \"error_prone_annotations\", \"version\": \"2.22.0\" }",
+                "{ \"group\": \"com.google.errorprone\", \"artifact\": \"error_prone_check_api\", \"version\": \"2.22.0\" }",
+                "{ \"group\": \"com.google.errorprone\", \"artifact\": \"error_prone_core\", \"version\": \"2.22.0\" }",
+                "{ \"group\": \"com.google.errorprone\", \"artifact\": \"error_prone_type_annotations\", \"version\": \"2.22.0\" }",
+                "{ \"group\": \"com.google.flogger\", \"artifact\": \"flogger-system-backend\", \"version\": \"0.5.1\" }",
+                "{ \"group\": \"com.google.flogger\", \"artifact\": \"flogger\", \"version\": \"0.5.1\" }",
+                "{ \"group\": \"com.google.flogger\", \"artifact\": \"google-extensions\", \"version\": \"0.5.1\" }",
+                "{ \"group\": \"com.google.guava\", \"artifact\": \"failureaccess\", \"version\": \"1.0.1\" }",
+                "{ \"group\": \"com.google.guava\", \"artifact\": \"guava\", \"version\": \"31.1-jre\" }",
+                "{ \"group\": \"com.google.http-client\", \"artifact\": \"google-http-client-gson\", \"version\": \"1.42.0\" }",
+                "{ \"group\": \"com.google.http-client\", \"artifact\": \"google-http-client\", \"version\": \"1.42.0\" }",
+                "{ \"group\": \"com.google.j2objc\", \"artifact\": \"j2objc-annotations\", \"version\": \"1.3\" }",
+                "{ \"group\": \"com.google.turbine\", \"artifact\": \"turbine\", \"version\": \"0.2\" }",
+                "{ \"group\": \"com.ryanharter.auto.value\", \"artifact\": \"auto-value-gson-extension\", \"version\": \"1.3.1\" }",
+                "{ \"group\": \"com.ryanharter.auto.value\", \"artifact\": \"auto-value-gson-runtime\", \"version\": \"1.3.1\" }",
+                "{ \"group\": \"com.ryanharter.auto.value\", \"artifact\": \"auto-value-gson-factory\", \"version\": \"1.3.1\" }",
+                "{ \"group\": \"com.squareup\", \"artifact\": \"javapoet\", \"version\": \"1.12.0\" }",
+                "{ \"group\": \"commons-collections\", \"artifact\": \"commons-collections\", \"version\": \"3.2.2\" }",
+                "{ \"group\": \"commons-lang\", \"artifact\": \"commons-lang\", \"version\": \"2.6\" }",
+                "{ \"group\": \"io.github.java-diff-utils\", \"artifact\": \"java-diff-utils\", \"version\": \"4.12\" }",
+                "{ \"group\": \"io.grpc\", \"artifact\": \"grpc-api\", \"version\": \"1.48.1\" }",
+                "{ \"group\": \"io.grpc\", \"artifact\": \"grpc-auth\", \"version\": \"1.48.1\" }",
+                "{ \"group\": \"io.grpc\", \"artifact\": \"grpc-context\", \"version\": \"1.48.1\" }",
+                "{ \"group\": \"io.grpc\", \"artifact\": \"grpc-core\", \"version\": \"1.48.1\" }",
+                "{ \"group\": \"io.grpc\", \"artifact\": \"grpc-netty\", \"version\": \"1.48.1\" }",
+                "{ \"group\": \"io.grpc\", \"artifact\": \"grpc-protobuf-lite\", \"version\": \"1.48.1\" }",
+                "{ \"group\": \"io.grpc\", \"artifact\": \"grpc-protobuf\", \"version\": \"1.48.1\" }",
+                "{ \"group\": \"io.grpc\", \"artifact\": \"grpc-stub\", \"version\": \"1.48.1\" }",
+                "{ \"group\": \"io.netty\", \"artifact\": \"netty-buffer\", \"version\": \"4.1.93.Final\" }",
+                "{ \"group\": \"io.netty\", \"artifact\": \"netty-codec-http2\", \"version\": \"4.1.93.Final\" }",
+                "{ \"group\": \"io.netty\", \"artifact\": \"netty-codec-http\", \"version\": \"4.1.93.Final\" }",
+                "{ \"group\": \"io.netty\", \"artifact\": \"netty-codec\", \"version\": \"4.1.93.Final\" }",
+                "{ \"group\": \"io.netty\", \"artifact\": \"netty-common\", \"version\": \"4.1.93.Final\" }",
+                "{ \"group\": \"io.netty\", \"artifact\": \"netty-handler-proxy\", \"version\": \"4.1.93.Final\" }",
+                "{ \"group\": \"io.netty\", \"artifact\": \"netty-handler\", \"version\": \"4.1.93.Final\" }",
+                "{ \"group\": \"io.netty\", \"artifact\": \"netty-resolver-dns\", \"version\": \"4.1.93.Final\" }",
+                "{ \"group\": \"io.netty\", \"artifact\": \"netty-resolver\", \"version\": \"4.1.93.Final\" }",
+                "{ \"group\": \"io.netty\", \"artifact\": \"netty-tcnative-boringssl-static\", \"version\": \"2.0.56.Final\", \"packaging\": \"jar\", \"classifier\": \"linux-aarch_64\" }",
+                "{ \"group\": \"io.netty\", \"artifact\": \"netty-tcnative-boringssl-static\", \"version\": \"2.0.56.Final\", \"packaging\": \"jar\", \"classifier\": \"linux-x86_64\" }",
+                "{ \"group\": \"io.netty\", \"artifact\": \"netty-tcnative-boringssl-static\", \"version\": \"2.0.56.Final\", \"packaging\": \"jar\", \"classifier\": \"osx-aarch_64\" }",
+                "{ \"group\": \"io.netty\", \"artifact\": \"netty-tcnative-boringssl-static\", \"version\": \"2.0.56.Final\", \"packaging\": \"jar\", \"classifier\": \"osx-x86_64\" }",
+                "{ \"group\": \"io.netty\", \"artifact\": \"netty-tcnative-boringssl-static\", \"version\": \"2.0.56.Final\", \"packaging\": \"jar\", \"classifier\": \"windows-x86_64\" }",
+                "{ \"group\": \"io.netty\", \"artifact\": \"netty-tcnative-classes\", \"version\": \"2.0.56.Final\" }",
+                "{ \"group\": \"io.netty\", \"artifact\": \"netty-transport-classes-epoll\", \"version\": \"4.1.93.Final\" }",
+                "{ \"group\": \"io.netty\", \"artifact\": \"netty-transport-classes-kqueue\", \"version\": \"4.1.93.Final\" }",
+                "{ \"group\": \"io.netty\", \"artifact\": \"netty-transport-native-epoll\", \"version\": \"4.1.93.Final\", \"packaging\": \"jar\", \"classifier\": \"linux-aarch_64\" }",
+                "{ \"group\": \"io.netty\", \"artifact\": \"netty-transport-native-epoll\", \"version\": \"4.1.93.Final\", \"packaging\": \"jar\", \"classifier\": \"linux-x86_64\" }",
+                "{ \"group\": \"io.netty\", \"artifact\": \"netty-transport-native-kqueue\", \"version\": \"4.1.93.Final\", \"packaging\": \"jar\", \"classifier\": \"osx-aarch_64\" }",
+                "{ \"group\": \"io.netty\", \"artifact\": \"netty-transport-native-kqueue\", \"version\": \"4.1.93.Final\", \"packaging\": \"jar\", \"classifier\": \"osx-x86_64\" }",
+                "{ \"group\": \"io.netty\", \"artifact\": \"netty-transport-native-unix-common\", \"version\": \"4.1.93.Final\" }",
+                "{ \"group\": \"io.netty\", \"artifact\": \"netty-transport-native-unix-common\", \"version\": \"4.1.93.Final\", \"packaging\": \"jar\", \"classifier\": \"linux-aarch_64\" }",
+                "{ \"group\": \"io.netty\", \"artifact\": \"netty-transport-native-unix-common\", \"version\": \"4.1.93.Final\", \"packaging\": \"jar\", \"classifier\": \"linux-x86_64\" }",
+                "{ \"group\": \"io.netty\", \"artifact\": \"netty-transport-native-unix-common\", \"version\": \"4.1.93.Final\", \"packaging\": \"jar\", \"classifier\": \"osx-aarch_64\" }",
+                "{ \"group\": \"io.netty\", \"artifact\": \"netty-transport-native-unix-common\", \"version\": \"4.1.93.Final\", \"packaging\": \"jar\", \"classifier\": \"osx-x86_64\" }",
+                "{ \"group\": \"io.netty\", \"artifact\": \"netty-transport\", \"version\": \"4.1.93.Final\" }",
+                "{ \"group\": \"io.reactivex.rxjava3\", \"artifact\": \"rxjava\", \"version\": \"3.1.2\" }",
+                "{ \"group\": \"javax.activation\", \"artifact\": \"javax.activation-api\", \"version\": \"1.2.0\" }",
+                "{ \"group\": \"javax.annotation\", \"artifact\": \"javax.annotation-api\", \"version\": \"1.3.2\" }",
+                "{ \"group\": \"javax.inject\", \"artifact\": \"javax.inject\", \"version\": \"1\" }",
+                "{ \"group\": \"net.bytebuddy\", \"artifact\": \"byte-buddy-agent\", \"version\": \"1.14.5\" }",
+                "{ \"group\": \"net.bytebuddy\", \"artifact\": \"byte-buddy\", \"version\": \"1.14.5\" }",
+                "{ \"group\": \"org.apache.commons\", \"artifact\": \"commons-compress\", \"version\": \"1.20\" }",
+                "{ \"group\": \"org.apache.commons\", \"artifact\": \"commons-pool2\", \"version\": \"2.8.0\" }",
+                "{ \"group\": \"org.apache.tomcat\", \"artifact\": \"tomcat-annotations-api\", \"version\": \"8.0.5\" }",
+                "{ \"group\": \"org.apache.velocity\", \"artifact\": \"velocity\", \"version\": \"1.7\" }",
+                "{ \"group\": \"org.checkerframework\", \"artifact\": \"checker-qual\", \"version\": \"3.19.0\" }",
+                "{ \"group\": \"org.ow2.asm\", \"artifact\": \"asm-analysis\", \"version\": \"9.2\" }",
+                "{ \"group\": \"org.ow2.asm\", \"artifact\": \"asm-commons\", \"version\": \"9.2\" }",
+                "{ \"group\": \"org.ow2.asm\", \"artifact\": \"asm-tree\", \"version\": \"9.2\" }",
+                "{ \"group\": \"org.ow2.asm\", \"artifact\": \"asm-util\", \"version\": \"9.2\" }",
+                "{ \"group\": \"org.ow2.asm\", \"artifact\": \"asm\", \"version\": \"9.2\" }",
+                "{ \"group\": \"org.pcollections\", \"artifact\": \"pcollections\", \"version\": \"3.1.4\" }",
+                "{ \"group\": \"org.threeten\", \"artifact\": \"threeten-extra\", \"version\": \"1.5.0\" }",
+                "{ \"group\": \"org.tukaani\", \"artifact\": \"xz\", \"version\": \"1.9\" }",
+                "{ \"group\": \"org.yaml\", \"artifact\": \"snakeyaml\", \"version\": \"1.28\" }",
+                "{ \"group\": \"tools.profiler\", \"artifact\": \"async-profiler\", \"version\": \"2.9\" }",
+                "{ \"group\": \"junit\", \"artifact\": \"junit\", \"version\": \"4.13.2\" }",
+                "{ \"group\": \"org.hamcrest\", \"artifact\": \"hamcrest-core\", \"version\": \"1.3\" }",
+                "{ \"group\": \"com.google.code.findbugs\", \"artifact\": \"jsr305\", \"version\": \"3.0.2\" }",
+                "{ \"group\": \"com.google.code.gson\", \"artifact\": \"gson\", \"version\": \"2.8.9\" }",
+                "{ \"group\": \"com.google.errorprone\", \"artifact\": \"error_prone_annotations\", \"version\": \"2.3.2\" }",
+                "{ \"group\": \"com.google.j2objc\", \"artifact\": \"j2objc-annotations\", \"version\": \"1.3\" }",
+                "{ \"group\": \"com.google.guava\", \"artifact\": \"guava\", \"version\": \"31.1-jre\" }",
+                "{ \"group\": \"com.google.guava\", \"artifact\": \"guava-testlib\", \"version\": \"31.1-jre\" }",
+                "{ \"group\": \"com.google.truth\", \"artifact\": \"truth\", \"version\": \"1.1.2\" }",
+                "{ \"group\": \"junit\", \"artifact\": \"junit\", \"version\": \"4.13.2\" }",
+                "{ \"group\": \"org.mockito\", \"artifact\": \"mockito-core\", \"version\": \"4.3.1\" }"
+              ],
+              "fetch_sources": false,
+              "fetch_javadoc": false,
+              "generate_compat_repositories": false,
+              "maven_install_json": "@@//:maven_install.json",
+              "override_targets": {},
+              "strict_visibility": true,
+              "strict_visibility_value": [
+                "@@//visibility:private"
+              ],
+              "jetify": false,
+              "jetify_include_list": [
+                "*"
+              ],
+              "additional_netrc_lines": [],
+              "fail_if_repin_required": true,
+              "use_starlark_android_rules": false,
+              "aar_import_bzl_label": "@build_bazel_rules_android//android:rules.bzl",
+              "duplicate_version_warning": "warn"
+            }
+          },
+          "com_google_auto_service_auto_service_1_0": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_auto_service_auto_service_1_0",
+              "sha256": "4ae44dd05b49a1109a463c0d2aaf920c24f76d1e996bb89f29481c4ff75ec526",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/auto/service/auto-service/1.0/auto-service-1.0.jar"
+              ],
+              "downloaded_file_path": "com/google/auto/service/auto-service/1.0/auto-service-1.0.jar"
+            }
+          },
+          "aopalliance_aopalliance_1_0": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~aopalliance_aopalliance_1_0",
+              "sha256": "0addec670fedcd3f113c5c8091d783280d23f75e3acb841b61a9cdb079376a08",
+              "urls": [
+                "https://repo1.maven.org/maven2/aopalliance/aopalliance/1.0/aopalliance-1.0.jar"
+              ],
+              "downloaded_file_path": "aopalliance/aopalliance/1.0/aopalliance-1.0.jar"
+            }
+          },
+          "org_bouncycastle_bcpkix_jdk15on_1_56": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~org_bouncycastle_bcpkix_jdk15on_1_56",
+              "sha256": "7043dee4e9e7175e93e0b36f45b1ec1ecb893c5f755667e8b916eb8dd201c6ca",
+              "urls": [
+                "https://dl.google.com/android/maven2/org/bouncycastle/bcpkix-jdk15on/1.56/bcpkix-jdk15on-1.56.jar",
+                "https://repo1.maven.org/maven2/org/bouncycastle/bcpkix-jdk15on/1.56/bcpkix-jdk15on-1.56.jar"
+              ],
+              "downloaded_file_path": "org/bouncycastle/bcpkix-jdk15on/1.56/bcpkix-jdk15on-1.56.jar"
+            }
+          },
+          "io_netty_netty_transport_native_unix_common_jar_osx_x86_64_4_1_93_Final": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~io_netty_netty_transport_native_unix_common_jar_osx_x86_64_4_1_93_Final",
+              "sha256": "deded602209c23f624e9d91f3d4c27cbba9b303e35ea9b4693090d54ac245b6c",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/netty/netty-transport-native-unix-common/4.1.93.Final/netty-transport-native-unix-common-4.1.93.Final-osx-x86_64.jar"
+              ],
+              "downloaded_file_path": "io/netty/netty-transport-native-unix-common/4.1.93.Final/netty-transport-native-unix-common-4.1.93.Final-osx-x86_64.jar"
+            }
+          },
+          "com_android_tools_build_builder_test_api_7_1_3": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_android_tools_build_builder_test_api_7_1_3",
+              "sha256": "6259c32a8602d9a18fc9a5abb274b915dbba32837c5ce91ac07a2d229460078a",
+              "urls": [
+                "https://dl.google.com/android/maven2/com/android/tools/build/builder-test-api/7.1.3/builder-test-api-7.1.3.jar",
+                "https://repo1.maven.org/maven2/com/android/tools/build/builder-test-api/7.1.3/builder-test-api-7.1.3.jar"
+              ],
+              "downloaded_file_path": "com/android/tools/build/builder-test-api/7.1.3/builder-test-api-7.1.3.jar"
+            }
+          },
+          "commons_collections_commons_collections_3_2_2": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~commons_collections_commons_collections_3_2_2",
+              "sha256": "eeeae917917144a68a741d4c0dff66aa5c5c5fd85593ff217bced3fc8ca783b8",
+              "urls": [
+                "https://repo1.maven.org/maven2/commons-collections/commons-collections/3.2.2/commons-collections-3.2.2.jar"
+              ],
+              "downloaded_file_path": "commons-collections/commons-collections/3.2.2/commons-collections-3.2.2.jar"
+            }
+          },
+          "software_amazon_awssdk_profiles_2_17_183": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~software_amazon_awssdk_profiles_2_17_183",
+              "sha256": "78833b32fde3f1c5320373b9ea955c1bbc28f2c904010791c4784e610193ee56",
+              "urls": [
+                "https://repo1.maven.org/maven2/software/amazon/awssdk/profiles/2.17.183/profiles-2.17.183.jar",
+                "https://maven.google.com/software/amazon/awssdk/profiles/2.17.183/profiles-2.17.183.jar"
+              ],
+              "downloaded_file_path": "software/amazon/awssdk/profiles/2.17.183/profiles-2.17.183.jar"
+            }
+          },
+          "io_github_eisop_dataflow_errorprone_3_34_0_eisop1": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~io_github_eisop_dataflow_errorprone_3_34_0_eisop1",
+              "sha256": "89b4f5d2bd5059f067c5982a0e5988b87dfc8a8234795d68c6f3178846de3319",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/github/eisop/dataflow-errorprone/3.34.0-eisop1/dataflow-errorprone-3.34.0-eisop1.jar"
+              ],
+              "downloaded_file_path": "io/github/eisop/dataflow-errorprone/3.34.0-eisop1/dataflow-errorprone-3.34.0-eisop1.jar"
+            }
+          },
+          "com_google_api_grpc_proto_google_common_protos_2_9_0": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_api_grpc_proto_google_common_protos_2_9_0",
+              "sha256": "0d830380ec66bd7e25eee63aa0a5a08578e46ad187fb72d99b44d9ba22827f91",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/api/grpc/proto-google-common-protos/2.9.0/proto-google-common-protos-2.9.0.jar"
+              ],
+              "downloaded_file_path": "com/google/api/grpc/proto-google-common-protos/2.9.0/proto-google-common-protos-2.9.0.jar"
+            }
+          },
+          "com_android_tools_ddms_ddmlib_30_1_3": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_android_tools_ddms_ddmlib_30_1_3",
+              "sha256": "b88ba88a1a8f0156c9a056eb0c83a181321541bdbb78e834bf837fd1dd07e4f3",
+              "urls": [
+                "https://dl.google.com/android/maven2/com/android/tools/ddms/ddmlib/30.1.3/ddmlib-30.1.3.jar",
+                "https://repo1.maven.org/maven2/com/android/tools/ddms/ddmlib/30.1.3/ddmlib-30.1.3.jar"
+              ],
+              "downloaded_file_path": "com/android/tools/ddms/ddmlib/30.1.3/ddmlib-30.1.3.jar"
+            }
+          },
+          "org_apache_commons_commons_lang3_3_8_1": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~org_apache_commons_commons_lang3_3_8_1",
+              "sha256": "dac807f65b07698ff39b1b07bfef3d87ae3fd46d91bbf8a2bc02b2a831616f68",
+              "urls": [
+                "https://repo1.maven.org/maven2/org/apache/commons/commons-lang3/3.8.1/commons-lang3-3.8.1.jar",
+                "https://maven.google.com/org/apache/commons/commons-lang3/3.8.1/commons-lang3-3.8.1.jar"
+              ],
+              "downloaded_file_path": "org/apache/commons/commons-lang3/3.8.1/commons-lang3-3.8.1.jar"
+            }
+          },
+          "software_amazon_awssdk_aws_core_2_17_183": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~software_amazon_awssdk_aws_core_2_17_183",
+              "sha256": "bccbdbea689a665a702ff19828662d87fb7fe81529df13f02ef1e4c474ea9f93",
+              "urls": [
+                "https://repo1.maven.org/maven2/software/amazon/awssdk/aws-core/2.17.183/aws-core-2.17.183.jar",
+                "https://maven.google.com/software/amazon/awssdk/aws-core/2.17.183/aws-core-2.17.183.jar"
+              ],
+              "downloaded_file_path": "software/amazon/awssdk/aws-core/2.17.183/aws-core-2.17.183.jar"
+            }
+          },
+          "com_google_api_gax_httpjson_0_77_0": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_api_gax_httpjson_0_77_0",
+              "sha256": "fd4dae47fa016d3b26e8d90b67ddc6c23c4c06e8bcdf085c70310ab7ef324bd6",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/api/gax-httpjson/0.77.0/gax-httpjson-0.77.0.jar",
+                "https://maven.google.com/com/google/api/gax-httpjson/0.77.0/gax-httpjson-0.77.0.jar"
+              ],
+              "downloaded_file_path": "com/google/api/gax-httpjson/0.77.0/gax-httpjson-0.77.0.jar"
+            }
+          },
+          "org_apache_commons_commons_pool2_2_8_0": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~org_apache_commons_commons_pool2_2_8_0",
+              "sha256": "5efa9fbb54a58b1a12205a5fac565f6982abfeb0ff45bdbc318748ef5fd3a3ff",
+              "urls": [
+                "https://repo1.maven.org/maven2/org/apache/commons/commons-pool2/2.8.0/commons-pool2-2.8.0.jar"
+              ],
+              "downloaded_file_path": "org/apache/commons/commons-pool2/2.8.0/commons-pool2-2.8.0.jar"
+            }
+          },
+          "com_google_errorprone_error_prone_annotations_2_11_0": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_errorprone_error_prone_annotations_2_11_0",
+              "sha256": "721cb91842b46fa056847d104d5225c8b8e1e8b62263b993051e1e5a0137b7ec",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/errorprone/error_prone_annotations/2.11.0/error_prone_annotations-2.11.0.jar",
+                "https://maven.google.com/com/google/errorprone/error_prone_annotations/2.11.0/error_prone_annotations-2.11.0.jar"
+              ],
+              "downloaded_file_path": "com/google/errorprone/error_prone_annotations/2.11.0/error_prone_annotations-2.11.0.jar"
+            }
+          },
+          "com_google_inject_guice_5_1_0": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_inject_guice_5_1_0",
+              "sha256": "4130e50bfac48099c860f0d903b91860c81a249c90f38245f8fed58fc817bc26",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/inject/guice/5.1.0/guice-5.1.0.jar"
+              ],
+              "downloaded_file_path": "com/google/inject/guice/5.1.0/guice-5.1.0.jar"
+            }
+          },
+          "io_netty_netty_codec_socks_4_1_93_Final": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~io_netty_netty_codec_socks_4_1_93_Final",
+              "sha256": "0ea47b5ba23ca1da8eb9146c8fc755c1271414633b1e2be2ce1df764ba0fff2a",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/netty/netty-codec-socks/4.1.93.Final/netty-codec-socks-4.1.93.Final.jar"
+              ],
+              "downloaded_file_path": "io/netty/netty-codec-socks/4.1.93.Final/netty-codec-socks-4.1.93.Final.jar"
+            }
+          },
+          "com_google_auto_value_auto_value_1_8_2": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_auto_value_auto_value_1_8_2",
+              "sha256": "2067b788d4c1c96fd621ad861053a5c4d8a801cfafc77fec20d49a6e9340a745",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/auto/value/auto-value/1.8.2/auto-value-1.8.2.jar"
+              ],
+              "downloaded_file_path": "com/google/auto/value/auto-value/1.8.2/auto-value-1.8.2.jar"
+            }
+          },
+          "com_google_auto_auto_common_1_2_1": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_auto_auto_common_1_2_1",
+              "sha256": "f43f29fe2a6ebaf04b2598cdeec32a4e346d49a9404e990f5fc19c19f3a28d0e",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/auto/auto-common/1.2.1/auto-common-1.2.1.jar"
+              ],
+              "downloaded_file_path": "com/google/auto/auto-common/1.2.1/auto-common-1.2.1.jar"
+            }
+          },
+          "io_netty_netty_transport_native_unix_common_4_1_93_Final": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~io_netty_netty_transport_native_unix_common_4_1_93_Final",
+              "sha256": "774165a1c4dbaacb17f9c1ad666b3569a6a59715ae828e7c3d47703f479a53e7",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/netty/netty-transport-native-unix-common/4.1.93.Final/netty-transport-native-unix-common-4.1.93.Final.jar"
+              ],
+              "downloaded_file_path": "io/netty/netty-transport-native-unix-common/4.1.93.Final/netty-transport-native-unix-common-4.1.93.Final.jar"
+            }
+          },
+          "net_bytebuddy_byte_buddy_1_14_5": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~net_bytebuddy_byte_buddy_1_14_5",
+              "sha256": "e99761a526df0fefbbd3fe14436b0f953000cdfa5151dc63c0b18d37d9c46f1c",
+              "urls": [
+                "https://repo1.maven.org/maven2/net/bytebuddy/byte-buddy/1.14.5/byte-buddy-1.14.5.jar"
+              ],
+              "downloaded_file_path": "net/bytebuddy/byte-buddy/1.14.5/byte-buddy-1.14.5.jar"
+            }
+          },
+          "com_google_apis_google_api_services_storage_v1_rev20200927_1_30_10": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_apis_google_api_services_storage_v1_rev20200927_1_30_10",
+              "sha256": "52d26a9d105f8d8a0850807285f307a76cea8f3e0cdb2be4d3b15b1adfa77351",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/apis/google-api-services-storage/v1-rev20200927-1.30.10/google-api-services-storage-v1-rev20200927-1.30.10.jar",
+                "https://maven.google.com/com/google/apis/google-api-services-storage/v1-rev20200927-1.30.10/google-api-services-storage-v1-rev20200927-1.30.10.jar"
+              ],
+              "downloaded_file_path": "com/google/apis/google-api-services-storage/v1-rev20200927-1.30.10/google-api-services-storage-v1-rev20200927-1.30.10.jar"
+            }
+          },
+          "com_google_api_client_google_api_client_1_30_11": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_api_client_google_api_client_1_30_11",
+              "sha256": "ee6f97865cc7de6c7c80955c3f37372cf3887bd75e4fc06f1058a6b4cd9bf4da",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/api-client/google-api-client/1.30.11/google-api-client-1.30.11.jar",
+                "https://maven.google.com/com/google/api-client/google-api-client/1.30.11/google-api-client-1.30.11.jar"
+              ],
+              "downloaded_file_path": "com/google/api-client/google-api-client/1.30.11/google-api-client-1.30.11.jar"
+            }
+          },
+          "org_apache_maven_maven_artifact_3_8_6": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~org_apache_maven_maven_artifact_3_8_6",
+              "sha256": "de22a4c6f54fe31276a823b1bbd3adfd6823529e732f431b5eff0852c2b9252b",
+              "urls": [
+                "https://repo1.maven.org/maven2/org/apache/maven/maven-artifact/3.8.6/maven-artifact-3.8.6.jar",
+                "https://maven.google.com/org/apache/maven/maven-artifact/3.8.6/maven-artifact-3.8.6.jar"
+              ],
+              "downloaded_file_path": "org/apache/maven/maven-artifact/3.8.6/maven-artifact-3.8.6.jar"
+            }
+          },
+          "com_google_auto_value_auto_value_annotations_1_9": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_auto_value_auto_value_annotations_1_9",
+              "sha256": "fa5469f4c44ee598a2d8f033ab0a9dcbc6498a0c5e0c998dfa0c2adf51358044",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/auto/value/auto-value-annotations/1.9/auto-value-annotations-1.9.jar"
+              ],
+              "downloaded_file_path": "com/google/auto/value/auto-value-annotations/1.9/auto-value-annotations-1.9.jar"
+            }
+          },
+          "com_google_errorprone_error_prone_annotations_2_22_0": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_errorprone_error_prone_annotations_2_22_0",
+              "sha256": "82a027b86541f58d1f9ee020cdf6bebe82acc7a267d3c53a2ea5cd6335932bbd",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/errorprone/error_prone_annotations/2.22.0/error_prone_annotations-2.22.0.jar"
+              ],
+              "downloaded_file_path": "com/google/errorprone/error_prone_annotations/2.22.0/error_prone_annotations-2.22.0.jar"
+            }
+          },
+          "software_amazon_awssdk_apache_client_2_17_183": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~software_amazon_awssdk_apache_client_2_17_183",
+              "sha256": "78ceae502fce6a97bbe5ff8f6a010a52ab7ea3ae66cb1a4122e18185fce45022",
+              "urls": [
+                "https://repo1.maven.org/maven2/software/amazon/awssdk/apache-client/2.17.183/apache-client-2.17.183.jar",
+                "https://maven.google.com/software/amazon/awssdk/apache-client/2.17.183/apache-client-2.17.183.jar"
+              ],
+              "downloaded_file_path": "software/amazon/awssdk/apache-client/2.17.183/apache-client-2.17.183.jar"
+            }
+          },
+          "software_amazon_awssdk_arns_2_17_183": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~software_amazon_awssdk_arns_2_17_183",
+              "sha256": "659a185e191d66c71de81209490e66abeaccae208ea7b2831a738670823447aa",
+              "urls": [
+                "https://repo1.maven.org/maven2/software/amazon/awssdk/arns/2.17.183/arns-2.17.183.jar",
+                "https://maven.google.com/software/amazon/awssdk/arns/2.17.183/arns-2.17.183.jar"
+              ],
+              "downloaded_file_path": "software/amazon/awssdk/arns/2.17.183/arns-2.17.183.jar"
+            }
+          },
+          "org_jetbrains_kotlin_kotlin_stdlib_common_1_4_32": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~org_jetbrains_kotlin_kotlin_stdlib_common_1_4_32",
+              "sha256": "e1ff6f55ee9e7591dcc633f7757bac25a7edb1cc7f738b37ec652f10f66a4145",
+              "urls": [
+                "https://dl.google.com/android/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.4.32/kotlin-stdlib-common-1.4.32.jar",
+                "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.4.32/kotlin-stdlib-common-1.4.32.jar"
+              ],
+              "downloaded_file_path": "org/jetbrains/kotlin/kotlin-stdlib-common/1.4.32/kotlin-stdlib-common-1.4.32.jar"
+            }
+          },
+          "org_jetbrains_intellij_deps_trove4j_1_0_20181211": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~org_jetbrains_intellij_deps_trove4j_1_0_20181211",
+              "sha256": "affb7c85a3c87bdcf69ff1dbb84de11f63dc931293934bc08cd7ab18de083601",
+              "urls": [
+                "https://dl.google.com/android/maven2/org/jetbrains/intellij/deps/trove4j/1.0.20181211/trove4j-1.0.20181211.jar",
+                "https://repo1.maven.org/maven2/org/jetbrains/intellij/deps/trove4j/1.0.20181211/trove4j-1.0.20181211.jar"
+              ],
+              "downloaded_file_path": "org/jetbrains/intellij/deps/trove4j/1.0.20181211/trove4j-1.0.20181211.jar"
+            }
+          },
+          "org_jetbrains_kotlin_kotlin_stdlib_jdk8_1_4_32": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~org_jetbrains_kotlin_kotlin_stdlib_jdk8_1_4_32",
+              "sha256": "adc43e54757b106e0cd7b3b7aa257dff471b61efdabe067fc02b2f57e2396262",
+              "urls": [
+                "https://dl.google.com/android/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.4.32/kotlin-stdlib-jdk8-1.4.32.jar",
+                "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.4.32/kotlin-stdlib-jdk8-1.4.32.jar"
+              ],
+              "downloaded_file_path": "org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.4.32/kotlin-stdlib-jdk8-1.4.32.jar"
+            }
+          },
+          "javax_inject_javax_inject_1": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~javax_inject_javax_inject_1",
+              "sha256": "91c77044a50c481636c32d916fd89c9118a72195390452c81065080f957de7ff",
+              "urls": [
+                "https://repo1.maven.org/maven2/javax/inject/javax.inject/1/javax.inject-1.jar"
+              ],
+              "downloaded_file_path": "javax/inject/javax.inject/1/javax.inject-1.jar"
+            }
+          },
+          "tools_profiler_async_profiler_2_9": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~tools_profiler_async_profiler_2_9",
+              "sha256": "6c4e993c28cf2882964cac82a0f96e81a325840043884526565017b2f62c5ba4",
+              "urls": [
+                "https://repo1.maven.org/maven2/tools/profiler/async-profiler/2.9/async-profiler-2.9.jar"
+              ],
+              "downloaded_file_path": "tools/profiler/async-profiler/2.9/async-profiler-2.9.jar"
+            }
+          },
+          "commons_codec_commons_codec_1_11": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~commons_codec_commons_codec_1_11",
+              "sha256": "e599d5318e97aa48f42136a2927e6dfa4e8881dff0e6c8e3109ddbbff51d7b7d",
+              "urls": [
+                "https://repo1.maven.org/maven2/commons-codec/commons-codec/1.11/commons-codec-1.11.jar",
+                "https://maven.google.com/commons-codec/commons-codec/1.11/commons-codec-1.11.jar"
+              ],
+              "downloaded_file_path": "commons-codec/commons-codec/1.11/commons-codec-1.11.jar"
+            }
+          },
+          "commons_codec_commons_codec_1_10": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~commons_codec_commons_codec_1_10",
+              "sha256": "4241dfa94e711d435f29a4604a3e2de5c4aa3c165e23bd066be6fc1fc4309569",
+              "urls": [
+                "https://dl.google.com/android/maven2/commons-codec/commons-codec/1.10/commons-codec-1.10.jar",
+                "https://repo1.maven.org/maven2/commons-codec/commons-codec/1.10/commons-codec-1.10.jar"
+              ],
+              "downloaded_file_path": "commons-codec/commons-codec/1.10/commons-codec-1.10.jar"
+            }
+          },
+          "com_google_android_annotations_4_1_1_4": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_android_annotations_4_1_1_4",
+              "sha256": "ba734e1e84c09d615af6a09d33034b4f0442f8772dec120efb376d86a565ae15",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4.jar"
+              ],
+              "downloaded_file_path": "com/google/android/annotations/4.1.1.4/annotations-4.1.1.4.jar"
+            }
+          },
+          "xml_apis_xml_apis_1_4_01": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~xml_apis_xml_apis_1_4_01",
+              "sha256": "a840968176645684bb01aed376e067ab39614885f9eee44abe35a5f20ebe7fad",
+              "urls": [
+                "https://dl.google.com/android/maven2/xml-apis/xml-apis/1.4.01/xml-apis-1.4.01.jar",
+                "https://repo1.maven.org/maven2/xml-apis/xml-apis/1.4.01/xml-apis-1.4.01.jar"
+              ],
+              "downloaded_file_path": "xml-apis/xml-apis/1.4.01/xml-apis-1.4.01.jar"
+            }
+          },
+          "com_android_tools_build_jetifier_jetifier_core_1_0_0_beta02": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_android_tools_build_jetifier_jetifier_core_1_0_0_beta02",
+              "sha256": "ef61f84302f8b41dce3858c1fc7e7a90ec74a263a0213b1f65e80c56145a4793",
+              "urls": [
+                "https://dl.google.com/android/maven2/com/android/tools/build/jetifier/jetifier-core/1.0.0-beta02/jetifier-core-1.0.0-beta02.jar",
+                "https://repo1.maven.org/maven2/com/android/tools/build/jetifier/jetifier-core/1.0.0-beta02/jetifier-core-1.0.0-beta02.jar"
+              ],
+              "downloaded_file_path": "com/android/tools/build/jetifier/jetifier-core/1.0.0-beta02/jetifier-core-1.0.0-beta02.jar"
+            }
+          },
+          "software_amazon_awssdk_json_utils_2_17_183": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~software_amazon_awssdk_json_utils_2_17_183",
+              "sha256": "51ab7f550adc06afcb49f5270cdf690f1bfaaee243abaa5d978095e2a1e4e1a5",
+              "urls": [
+                "https://repo1.maven.org/maven2/software/amazon/awssdk/json-utils/2.17.183/json-utils-2.17.183.jar",
+                "https://maven.google.com/software/amazon/awssdk/json-utils/2.17.183/json-utils-2.17.183.jar"
+              ],
+              "downloaded_file_path": "software/amazon/awssdk/json-utils/2.17.183/json-utils-2.17.183.jar"
+            }
+          },
+          "org_codehaus_plexus_plexus_utils_3_3_1": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~org_codehaus_plexus_plexus_utils_3_3_1",
+              "sha256": "4b570fcdbe5a894f249d2eb9b929358a9c88c3e548d227a80010461930222f2a",
+              "urls": [
+                "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/3.3.1/plexus-utils-3.3.1.jar",
+                "https://maven.google.com/org/codehaus/plexus/plexus-utils/3.3.1/plexus-utils-3.3.1.jar"
+              ],
+              "downloaded_file_path": "org/codehaus/plexus/plexus-utils/3.3.1/plexus-utils-3.3.1.jar"
+            }
+          },
+          "org_glassfish_jaxb_txw2_2_3_2": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~org_glassfish_jaxb_txw2_2_3_2",
+              "sha256": "4a6a9f483388d461b81aa9a28c685b8b74c0597993bf1884b04eddbca95f48fe",
+              "urls": [
+                "https://dl.google.com/android/maven2/org/glassfish/jaxb/txw2/2.3.2/txw2-2.3.2.jar",
+                "https://repo1.maven.org/maven2/org/glassfish/jaxb/txw2/2.3.2/txw2-2.3.2.jar"
+              ],
+              "downloaded_file_path": "org/glassfish/jaxb/txw2/2.3.2/txw2-2.3.2.jar"
+            }
+          },
+          "org_yaml_snakeyaml_1_28": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~org_yaml_snakeyaml_1_28",
+              "sha256": "35446a1421435d45e4c6ac0de3b5378527d5cc2446c07183e24447730ce1fffa",
+              "urls": [
+                "https://repo1.maven.org/maven2/org/yaml/snakeyaml/1.28/snakeyaml-1.28.jar"
+              ],
+              "downloaded_file_path": "org/yaml/snakeyaml/1.28/snakeyaml-1.28.jar"
+            }
+          },
+          "io_netty_netty_transport_native_epoll_jar_linux_aarch_64_4_1_93_Final": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~io_netty_netty_transport_native_epoll_jar_linux_aarch_64_4_1_93_Final",
+              "sha256": "cca126fd095563fa67288300b6ac2ef4a92e623600e9a3273382211de364695d",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/netty/netty-transport-native-epoll/4.1.93.Final/netty-transport-native-epoll-4.1.93.Final-linux-aarch_64.jar"
+              ],
+              "downloaded_file_path": "io/netty/netty-transport-native-epoll/4.1.93.Final/netty-transport-native-epoll-4.1.93.Final-linux-aarch_64.jar"
+            }
+          },
+          "com_android_tools_build_aapt2_proto_7_0_0_beta04_7396180": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_android_tools_build_aapt2_proto_7_0_0_beta04_7396180",
+              "sha256": "1ca4f1b0f550c6c25f63c1916da84f6e7a92c66b7ad38ab1d5d49a20552a5984",
+              "urls": [
+                "https://dl.google.com/android/maven2/com/android/tools/build/aapt2-proto/7.0.0-beta04-7396180/aapt2-proto-7.0.0-beta04-7396180.jar",
+                "https://repo1.maven.org/maven2/com/android/tools/build/aapt2-proto/7.0.0-beta04-7396180/aapt2-proto-7.0.0-beta04-7396180.jar"
+              ],
+              "downloaded_file_path": "com/android/tools/build/aapt2-proto/7.0.0-beta04-7396180/aapt2-proto-7.0.0-beta04-7396180.jar"
+            }
+          },
+          "com_google_protobuf_protobuf_java_3_13_0": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~com_google_protobuf_protobuf_java_3_13_0",
+              "sha256": "97d5b2758408690c0dc276238707492a0b6a4d71206311b6c442cdc26c5973ff",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/protobuf/protobuf-java/3.13.0/protobuf-java-3.13.0.jar",
+                "https://maven.google.com/com/google/protobuf/protobuf-java/3.13.0/protobuf-java-3.13.0.jar"
+              ],
+              "downloaded_file_path": "com/google/protobuf/protobuf-java/3.13.0/protobuf-java-3.13.0.jar"
+            }
+          },
+          "net_java_dev_jna_jna_5_6_0": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~net_java_dev_jna_jna_5_6_0",
+              "sha256": "5557e235a8aa2f9766d5dc609d67948f2a8832c2d796cea9ef1d6cbe0b3b7eaf",
+              "urls": [
+                "https://dl.google.com/android/maven2/net/java/dev/jna/jna/5.6.0/jna-5.6.0.jar",
+                "https://repo1.maven.org/maven2/net/java/dev/jna/jna/5.6.0/jna-5.6.0.jar"
+              ],
+              "downloaded_file_path": "net/java/dev/jna/jna/5.6.0/jna-5.6.0.jar"
+            }
+          },
+          "software_amazon_awssdk_sdk_core_2_17_183": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~maven~software_amazon_awssdk_sdk_core_2_17_183",
+              "sha256": "677e9cc90fdd82c1f40f97b99cb115b13ad6c3f58beeeab1c061af6954d64c77",
+              "urls": [
+                "https://repo1.maven.org/maven2/software/amazon/awssdk/sdk-core/2.17.183/sdk-core-2.17.183.jar",
+                "https://maven.google.com/software/amazon/awssdk/sdk-core/2.17.183/sdk-core-2.17.183.jar"
+              ],
+              "downloaded_file_path": "software/amazon/awssdk/sdk-core/2.17.183/sdk-core-2.17.183.jar"
+            }
+          }
+        }
+      }
+    },
+    "@rules_jvm_external~5.2//:non-module-deps.bzl%non_module_deps": {
+      "general": {
+        "bzlTransitiveDigest": "QlnkwH7xmrau2+KLjoV5wWr0r3Ne+JfXhrHUVpwVloQ=",
+        "accumulatedFileDigests": {},
+        "envVariables": {},
+        "generatedRepoSpecs": {
+          "io_bazel_rules_kotlin": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_jvm_external~5.2~non_module_deps~io_bazel_rules_kotlin",
+              "sha256": "946747acdbeae799b085d12b240ec346f775ac65236dfcf18aa0cd7300f6de78",
+              "urls": [
+                "https://github.com/bazelbuild/rules_kotlin/releases/download/v1.7.0-RC-2/rules_kotlin_release.tgz"
+              ]
+            }
+          }
+        }
+      }
+    },
+    "@rules_python~0.26.0//python/extensions:pip.bzl%pip": {
+      "os:osx,arch:aarch64": {
+        "bzlTransitiveDigest": "E4QgOqZbBS/oj8Ee3OTJc/aHg+JLL1isQX37e9bF+jc=",
+        "accumulatedFileDigests": {
+          "@@//:requirements.txt": "ff12967a755bb8e9b4c92524f6471a99e14c30474a3d428547c55745ec8f23a0"
+        },
+        "envVariables": {},
+        "generatedRepoSpecs": {
+          "bazel_pip_dev_deps": {
+            "bzlFile": "@@rules_python~0.26.0//python/pip_install:pip_repository.bzl",
+            "ruleClassName": "pip_hub_repository_bzlmod",
+            "attributes": {
+              "name": "rules_python~0.26.0~pip~bazel_pip_dev_deps",
+              "repo_name": "bazel_pip_dev_deps",
+              "whl_map": {
+                "bazel_runfiles": [
+                  "3.8.18"
+                ]
+              },
+              "default_version": "3.8.18"
+            }
+          },
+          "bazel_pip_dev_deps_38_bazel_runfiles": {
+            "bzlFile": "@@rules_python~0.26.0//python/pip_install:pip_repository.bzl",
+            "ruleClassName": "whl_library",
+            "attributes": {
+              "name": "rules_python~0.26.0~pip~bazel_pip_dev_deps_38_bazel_runfiles",
+              "requirement": "bazel-runfiles==0.24.0",
+              "repo": "bazel_pip_dev_deps_38",
+              "repo_prefix": "bazel_pip_dev_deps_38_",
+              "python_interpreter": "",
+              "python_interpreter_target": "@@rules_python~0.26.0~python~python_3_8_aarch64-apple-darwin//:bin/python3",
+              "quiet": true,
+              "timeout": 600,
+              "isolated": true,
+              "extra_pip_args": [],
+              "download_only": false,
+              "pip_data_exclude": [],
+              "enable_implicit_namespace_pkgs": false,
+              "environment": {}
+            }
+          }
+        }
+      },
+      "os:osx,arch:x86_64": {
+        "bzlTransitiveDigest": "5EamR6lYbDoZchZjoF0opxKmFTBnPc4IRBqvtfKzQBg=",
+        "accumulatedFileDigests": {
+          "@@//:requirements.txt": "ff12967a755bb8e9b4c92524f6471a99e14c30474a3d428547c55745ec8f23a0"
+        },
+        "envVariables": {},
+        "generatedRepoSpecs": {
+          "bazel_pip_dev_deps": {
+            "bzlFile": "@@rules_python~0.26.0//python/pip_install:pip_repository.bzl",
+            "ruleClassName": "pip_hub_repository_bzlmod",
+            "attributes": {
+              "name": "rules_python~0.26.0~pip~bazel_pip_dev_deps",
+              "repo_name": "bazel_pip_dev_deps",
+              "whl_map": {
+                "bazel_runfiles": [
+                  "3.8.18"
+                ]
+              },
+              "default_version": "3.8.18"
+            }
+          },
+          "bazel_pip_dev_deps_38_bazel_runfiles": {
+            "bzlFile": "@@rules_python~0.26.0//python/pip_install:pip_repository.bzl",
+            "ruleClassName": "whl_library",
+            "attributes": {
+              "name": "rules_python~0.26.0~pip~bazel_pip_dev_deps_38_bazel_runfiles",
+              "requirement": "bazel-runfiles==0.24.0",
+              "repo": "bazel_pip_dev_deps_38",
+              "repo_prefix": "bazel_pip_dev_deps_38_",
+              "python_interpreter": "",
+              "python_interpreter_target": "@@rules_python~0.26.0~python~python_3_8_x86_64-apple-darwin//:bin/python3",
+              "quiet": true,
+              "timeout": 600,
+              "isolated": true,
+              "extra_pip_args": [],
+              "download_only": false,
+              "pip_data_exclude": [],
+              "enable_implicit_namespace_pkgs": false,
+              "environment": {}
+            }
+          }
+        }
+      },
+      "os:windows,arch:amd64": {
+        "bzlTransitiveDigest": "TXSsRggvq8p1Am/XZURcY+/3pp6aMvMI4CIzUjNNoVc=",
+        "accumulatedFileDigests": {
+          "@@//:requirements.txt": "ff12967a755bb8e9b4c92524f6471a99e14c30474a3d428547c55745ec8f23a0"
+        },
+        "envVariables": {},
+        "generatedRepoSpecs": {
+          "bazel_pip_dev_deps": {
+            "bzlFile": "@@rules_python~0.26.0//python/pip_install:pip_repository.bzl",
+            "ruleClassName": "pip_hub_repository_bzlmod",
+            "attributes": {
+              "name": "rules_python~0.26.0~pip~bazel_pip_dev_deps",
+              "repo_name": "bazel_pip_dev_deps",
+              "whl_map": {
+                "bazel_runfiles": [
+                  "3.8.18"
+                ]
+              },
+              "default_version": "3.8.18"
+            }
+          },
+          "bazel_pip_dev_deps_38_bazel_runfiles": {
+            "bzlFile": "@@rules_python~0.26.0//python/pip_install:pip_repository.bzl",
+            "ruleClassName": "whl_library",
+            "attributes": {
+              "name": "rules_python~0.26.0~pip~bazel_pip_dev_deps_38_bazel_runfiles",
+              "requirement": "bazel-runfiles==0.24.0",
+              "repo": "bazel_pip_dev_deps_38",
+              "repo_prefix": "bazel_pip_dev_deps_38_",
+              "python_interpreter": "",
+              "python_interpreter_target": "@@rules_python~0.26.0~python~python_3_8_x86_64-pc-windows-msvc//:python.exe",
+              "quiet": true,
+              "timeout": 600,
+              "isolated": true,
+              "extra_pip_args": [],
+              "download_only": false,
+              "pip_data_exclude": [],
+              "enable_implicit_namespace_pkgs": false,
+              "environment": {}
+            }
+          }
+        }
+      },
+      "os:linux,arch:amd64": {
+        "bzlTransitiveDigest": "8ozZeXZLMP2XAUvOsoOqqAh+f3capth/BEC9p7XrFHQ=",
+        "accumulatedFileDigests": {
+          "@@//:requirements.txt": "ff12967a755bb8e9b4c92524f6471a99e14c30474a3d428547c55745ec8f23a0"
+        },
+        "envVariables": {},
+        "generatedRepoSpecs": {
+          "bazel_pip_dev_deps": {
+            "bzlFile": "@@rules_python~0.26.0//python/pip_install:pip_repository.bzl",
+            "ruleClassName": "pip_hub_repository_bzlmod",
+            "attributes": {
+              "name": "rules_python~0.26.0~pip~bazel_pip_dev_deps",
+              "repo_name": "bazel_pip_dev_deps",
+              "whl_map": {
+                "bazel_runfiles": [
+                  "3.8.18"
+                ]
+              },
+              "default_version": "3.8.18"
+            }
+          },
+          "bazel_pip_dev_deps_38_bazel_runfiles": {
+            "bzlFile": "@@rules_python~0.26.0//python/pip_install:pip_repository.bzl",
+            "ruleClassName": "whl_library",
+            "attributes": {
+              "name": "rules_python~0.26.0~pip~bazel_pip_dev_deps_38_bazel_runfiles",
+              "requirement": "bazel-runfiles==0.24.0",
+              "repo": "bazel_pip_dev_deps_38",
+              "repo_prefix": "bazel_pip_dev_deps_38_",
+              "python_interpreter": "",
+              "python_interpreter_target": "@@rules_python~0.26.0~python~python_3_8_x86_64-unknown-linux-gnu//:bin/python3",
+              "quiet": true,
+              "timeout": 600,
+              "isolated": true,
+              "extra_pip_args": [],
+              "download_only": false,
+              "pip_data_exclude": [],
+              "enable_implicit_namespace_pkgs": false,
+              "environment": {}
+            }
+          }
+        }
+      }
+    },
+    "@rules_python~0.26.0//python/extensions:python.bzl%python": {
+      "general": {
+        "bzlTransitiveDigest": "xlkyXQiU87j2f+jKiO4buHXyNexVt0a6ildROtqkRMA=",
+        "accumulatedFileDigests": {},
+        "envVariables": {},
+        "generatedRepoSpecs": {
+          "python_3_11_s390x-unknown-linux-gnu": {
+            "bzlFile": "@@rules_python~0.26.0//python:repositories.bzl",
+            "ruleClassName": "python_repository",
+            "attributes": {
+              "name": "rules_python~0.26.0~python~python_3_11_s390x-unknown-linux-gnu",
+              "sha256": "f9f19823dba3209cedc4647b00f46ed0177242917db20fb7fb539970e384531c",
+              "patches": [],
+              "platform": "s390x-unknown-linux-gnu",
+              "python_version": "3.11.6",
+              "release_filename": "20231002/cpython-3.11.6+20231002-s390x-unknown-linux-gnu-install_only.tar.gz",
+              "urls": [
+                "https://github.com/indygreg/python-build-standalone/releases/download/20231002/cpython-3.11.6+20231002-s390x-unknown-linux-gnu-install_only.tar.gz"
+              ],
+              "distutils_content": "",
+              "strip_prefix": "python",
+              "coverage_tool": "",
+              "ignore_root_user_error": false
+            }
+          },
+          "python_3_8_aarch64-apple-darwin": {
+            "bzlFile": "@@rules_python~0.26.0//python:repositories.bzl",
+            "ruleClassName": "python_repository",
+            "attributes": {
+              "name": "rules_python~0.26.0~python~python_3_8_aarch64-apple-darwin",
+              "sha256": "1825b1f7220bc93ff143f2e70b5c6a79c6469e0eeb40824e07a7277f59aabfda",
+              "patches": [],
+              "platform": "aarch64-apple-darwin",
+              "python_version": "3.8.18",
+              "release_filename": "20231002/cpython-3.8.18+20231002-aarch64-apple-darwin-install_only.tar.gz",
+              "urls": [
+                "https://github.com/indygreg/python-build-standalone/releases/download/20231002/cpython-3.8.18+20231002-aarch64-apple-darwin-install_only.tar.gz"
+              ],
+              "distutils_content": "",
+              "strip_prefix": "python",
+              "coverage_tool": "",
+              "ignore_root_user_error": false
+            }
+          },
+          "python_3_11_aarch64-unknown-linux-gnu": {
+            "bzlFile": "@@rules_python~0.26.0//python:repositories.bzl",
+            "ruleClassName": "python_repository",
+            "attributes": {
+              "name": "rules_python~0.26.0~python~python_3_11_aarch64-unknown-linux-gnu",
+              "sha256": "3e26a672df17708c4dc928475a5974c3fb3a34a9b45c65fb4bd1e50504cc84ec",
+              "patches": [],
+              "platform": "aarch64-unknown-linux-gnu",
+              "python_version": "3.11.6",
+              "release_filename": "20231002/cpython-3.11.6+20231002-aarch64-unknown-linux-gnu-install_only.tar.gz",
+              "urls": [
+                "https://github.com/indygreg/python-build-standalone/releases/download/20231002/cpython-3.11.6+20231002-aarch64-unknown-linux-gnu-install_only.tar.gz"
+              ],
+              "distutils_content": "",
+              "strip_prefix": "python",
+              "coverage_tool": "",
+              "ignore_root_user_error": false
+            }
+          },
+          "python_3_11_aarch64-apple-darwin": {
+            "bzlFile": "@@rules_python~0.26.0//python:repositories.bzl",
+            "ruleClassName": "python_repository",
+            "attributes": {
+              "name": "rules_python~0.26.0~python~python_3_11_aarch64-apple-darwin",
+              "sha256": "916c35125b5d8323a21526d7a9154ca626453f63d0878e95b9f613a95006c990",
+              "patches": [],
+              "platform": "aarch64-apple-darwin",
+              "python_version": "3.11.6",
+              "release_filename": "20231002/cpython-3.11.6+20231002-aarch64-apple-darwin-install_only.tar.gz",
+              "urls": [
+                "https://github.com/indygreg/python-build-standalone/releases/download/20231002/cpython-3.11.6+20231002-aarch64-apple-darwin-install_only.tar.gz"
+              ],
+              "distutils_content": "",
+              "strip_prefix": "python",
+              "coverage_tool": "",
+              "ignore_root_user_error": false
+            }
+          },
+          "pythons_hub": {
+            "bzlFile": "@@rules_python~0.26.0//python/extensions/private:pythons_hub.bzl",
+            "ruleClassName": "hub_repo",
+            "attributes": {
+              "name": "rules_python~0.26.0~python~pythons_hub",
+              "default_python_version": "3.8",
+              "toolchain_prefixes": [
+                "_0000_python_3_11_",
+                "_0001_python_3_8_"
+              ],
+              "toolchain_python_versions": [
+                "3.11",
+                "3.8"
+              ],
+              "toolchain_set_python_version_constraints": [
+                "True",
+                "False"
+              ],
+              "toolchain_user_repository_names": [
+                "python_3_11",
+                "python_3_8"
+              ]
+            }
+          },
+          "python_3_8_aarch64-unknown-linux-gnu": {
+            "bzlFile": "@@rules_python~0.26.0//python:repositories.bzl",
+            "ruleClassName": "python_repository",
+            "attributes": {
+              "name": "rules_python~0.26.0~python~python_3_8_aarch64-unknown-linux-gnu",
+              "sha256": "236a300f386ead02ca98dbddbc026ff4ef4de6701a394106e291ff8b75445ee1",
+              "patches": [],
+              "platform": "aarch64-unknown-linux-gnu",
+              "python_version": "3.8.18",
+              "release_filename": "20231002/cpython-3.8.18+20231002-aarch64-unknown-linux-gnu-install_only.tar.gz",
+              "urls": [
+                "https://github.com/indygreg/python-build-standalone/releases/download/20231002/cpython-3.8.18+20231002-aarch64-unknown-linux-gnu-install_only.tar.gz"
+              ],
+              "distutils_content": "",
+              "strip_prefix": "python",
+              "coverage_tool": "",
+              "ignore_root_user_error": false
+            }
+          },
+          "python_3_8": {
+            "bzlFile": "@@rules_python~0.26.0//python/private:toolchains_repo.bzl",
+            "ruleClassName": "toolchain_aliases",
+            "attributes": {
+              "name": "rules_python~0.26.0~python~python_3_8",
+              "python_version": "3.8.18",
+              "user_repository_name": "python_3_8"
+            }
+          },
+          "python_3_11_x86_64-pc-windows-msvc": {
+            "bzlFile": "@@rules_python~0.26.0//python:repositories.bzl",
+            "ruleClassName": "python_repository",
+            "attributes": {
+              "name": "rules_python~0.26.0~python~python_3_11_x86_64-pc-windows-msvc",
+              "sha256": "3933545e6d41462dd6a47e44133ea40995bc6efeed8c2e4cbdf1a699303e95ea",
+              "patches": [],
+              "platform": "x86_64-pc-windows-msvc",
+              "python_version": "3.11.6",
+              "release_filename": "20231002/cpython-3.11.6+20231002-x86_64-pc-windows-msvc-shared-install_only.tar.gz",
+              "urls": [
+                "https://github.com/indygreg/python-build-standalone/releases/download/20231002/cpython-3.11.6+20231002-x86_64-pc-windows-msvc-shared-install_only.tar.gz"
+              ],
+              "distutils_content": "",
+              "strip_prefix": "python",
+              "coverage_tool": "",
+              "ignore_root_user_error": false
+            }
+          },
+          "python_3_8_x86_64-apple-darwin": {
+            "bzlFile": "@@rules_python~0.26.0//python:repositories.bzl",
+            "ruleClassName": "python_repository",
+            "attributes": {
+              "name": "rules_python~0.26.0~python~python_3_8_x86_64-apple-darwin",
+              "sha256": "fcf04532e644644213977242cd724fe5e84c0a5ac92ae038e07f1b01b474fca3",
+              "patches": [],
+              "platform": "x86_64-apple-darwin",
+              "python_version": "3.8.18",
+              "release_filename": "20231002/cpython-3.8.18+20231002-x86_64-apple-darwin-install_only.tar.gz",
+              "urls": [
+                "https://github.com/indygreg/python-build-standalone/releases/download/20231002/cpython-3.8.18+20231002-x86_64-apple-darwin-install_only.tar.gz"
+              ],
+              "distutils_content": "",
+              "strip_prefix": "python",
+              "coverage_tool": "",
+              "ignore_root_user_error": false
+            }
+          },
+          "python_3_8_x86_64-pc-windows-msvc": {
+            "bzlFile": "@@rules_python~0.26.0//python:repositories.bzl",
+            "ruleClassName": "python_repository",
+            "attributes": {
+              "name": "rules_python~0.26.0~python~python_3_8_x86_64-pc-windows-msvc",
+              "sha256": "a9d203e78caed94de368d154e841610cef6f6b484738573f4ae9059d37e898a5",
+              "patches": [],
+              "platform": "x86_64-pc-windows-msvc",
+              "python_version": "3.8.18",
+              "release_filename": "20231002/cpython-3.8.18+20231002-x86_64-pc-windows-msvc-shared-install_only.tar.gz",
+              "urls": [
+                "https://github.com/indygreg/python-build-standalone/releases/download/20231002/cpython-3.8.18+20231002-x86_64-pc-windows-msvc-shared-install_only.tar.gz"
+              ],
+              "distutils_content": "",
+              "strip_prefix": "python",
+              "coverage_tool": "",
+              "ignore_root_user_error": false
+            }
+          },
+          "python_3_11": {
+            "bzlFile": "@@rules_python~0.26.0//python/private:toolchains_repo.bzl",
+            "ruleClassName": "toolchain_aliases",
+            "attributes": {
+              "name": "rules_python~0.26.0~python~python_3_11",
+              "python_version": "3.11.6",
+              "user_repository_name": "python_3_11"
+            }
+          },
+          "python_3_11_ppc64le-unknown-linux-gnu": {
+            "bzlFile": "@@rules_python~0.26.0//python:repositories.bzl",
+            "ruleClassName": "python_repository",
+            "attributes": {
+              "name": "rules_python~0.26.0~python~python_3_11_ppc64le-unknown-linux-gnu",
+              "sha256": "7937035f690a624dba4d014ffd20c342e843dd46f89b0b0a1e5726b85deb8eaf",
+              "patches": [],
+              "platform": "ppc64le-unknown-linux-gnu",
+              "python_version": "3.11.6",
+              "release_filename": "20231002/cpython-3.11.6+20231002-ppc64le-unknown-linux-gnu-install_only.tar.gz",
+              "urls": [
+                "https://github.com/indygreg/python-build-standalone/releases/download/20231002/cpython-3.11.6+20231002-ppc64le-unknown-linux-gnu-install_only.tar.gz"
+              ],
+              "distutils_content": "",
+              "strip_prefix": "python",
+              "coverage_tool": "",
+              "ignore_root_user_error": false
+            }
+          },
+          "python_3_11_x86_64-apple-darwin": {
+            "bzlFile": "@@rules_python~0.26.0//python:repositories.bzl",
+            "ruleClassName": "python_repository",
+            "attributes": {
+              "name": "rules_python~0.26.0~python~python_3_11_x86_64-apple-darwin",
+              "sha256": "178cb1716c2abc25cb56ae915096c1a083e60abeba57af001996e8bc6ce1a371",
+              "patches": [],
+              "platform": "x86_64-apple-darwin",
+              "python_version": "3.11.6",
+              "release_filename": "20231002/cpython-3.11.6+20231002-x86_64-apple-darwin-install_only.tar.gz",
+              "urls": [
+                "https://github.com/indygreg/python-build-standalone/releases/download/20231002/cpython-3.11.6+20231002-x86_64-apple-darwin-install_only.tar.gz"
+              ],
+              "distutils_content": "",
+              "strip_prefix": "python",
+              "coverage_tool": "",
+              "ignore_root_user_error": false
+            }
+          },
+          "python_versions": {
+            "bzlFile": "@@rules_python~0.26.0//python/private:toolchains_repo.bzl",
+            "ruleClassName": "multi_toolchain_aliases",
+            "attributes": {
+              "name": "rules_python~0.26.0~python~python_versions",
+              "python_versions": {
+                "3.8": "python_3_8",
+                "3.11": "python_3_11"
+              }
+            }
+          },
+          "python_3_8_x86_64-unknown-linux-gnu": {
+            "bzlFile": "@@rules_python~0.26.0//python:repositories.bzl",
+            "ruleClassName": "python_repository",
+            "attributes": {
+              "name": "rules_python~0.26.0~python~python_3_8_x86_64-unknown-linux-gnu",
+              "sha256": "1e8a3babd1500111359b0f5675d770984bcbcb2cc8890b117394f0ed342fb9ec",
+              "patches": [],
+              "platform": "x86_64-unknown-linux-gnu",
+              "python_version": "3.8.18",
+              "release_filename": "20231002/cpython-3.8.18+20231002-x86_64-unknown-linux-gnu-install_only.tar.gz",
+              "urls": [
+                "https://github.com/indygreg/python-build-standalone/releases/download/20231002/cpython-3.8.18+20231002-x86_64-unknown-linux-gnu-install_only.tar.gz"
+              ],
+              "distutils_content": "",
+              "strip_prefix": "python",
+              "coverage_tool": "",
+              "ignore_root_user_error": false
+            }
+          },
+          "python_3_11_x86_64-unknown-linux-gnu": {
+            "bzlFile": "@@rules_python~0.26.0//python:repositories.bzl",
+            "ruleClassName": "python_repository",
+            "attributes": {
+              "name": "rules_python~0.26.0~python~python_3_11_x86_64-unknown-linux-gnu",
+              "sha256": "ee37a7eae6e80148c7e3abc56e48a397c1664f044920463ad0df0fc706eacea8",
+              "patches": [],
+              "platform": "x86_64-unknown-linux-gnu",
+              "python_version": "3.11.6",
+              "release_filename": "20231002/cpython-3.11.6+20231002-x86_64-unknown-linux-gnu-install_only.tar.gz",
+              "urls": [
+                "https://github.com/indygreg/python-build-standalone/releases/download/20231002/cpython-3.11.6+20231002-x86_64-unknown-linux-gnu-install_only.tar.gz"
+              ],
+              "distutils_content": "",
+              "strip_prefix": "python",
+              "coverage_tool": "",
+              "ignore_root_user_error": false
+            }
+          }
+        }
+      }
+    },
+    "@rules_python~0.26.0//python/extensions/private:internal_deps.bzl%internal_deps": {
+      "general": {
+        "bzlTransitiveDigest": "+RIu4LoHAUtbbEXVX84ChFRN1Rqdyonp+wk0SJE5eHA=",
+        "accumulatedFileDigests": {},
+        "envVariables": {},
+        "generatedRepoSpecs": {
+          "pypi__wheel": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_python~0.26.0~internal_deps~pypi__wheel",
+              "url": "https://files.pythonhosted.org/packages/b8/8b/31273bf66016be6ad22bb7345c37ff350276cfd46e389a0c2ac5da9d9073/wheel-0.41.2-py3-none-any.whl",
+              "sha256": "75909db2664838d015e3d9139004ee16711748a52c8f336b52882266540215d8",
+              "type": "zip",
+              "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:defs.bzl\", \"py_library\")\n\npy_library(\n    name = \"lib\",\n    srcs = glob([\"**/*.py\"]),\n    data = glob([\"**/*\"], exclude=[\n        # These entries include those put into user-installed dependencies by\n        # data_exclude in /python/pip_install/tools/bazel.py\n        # to avoid non-determinism following pip install's behavior.\n        \"**/*.py\",\n        \"**/*.pyc\",\n        \"**/*.pyc.*\",  # During pyc creation, temp files named *.pyc.NNN are created\n        \"**/* *\",\n        \"**/*.dist-info/RECORD\",\n        \"BUILD\",\n        \"WORKSPACE\",\n    ]),\n    # This makes this directory a top-level in the python import\n    # search path for anything that depends on this.\n    imports = [\".\"],\n)\n"
+            }
+          },
+          "pypi__click": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_python~0.26.0~internal_deps~pypi__click",
+              "url": "https://files.pythonhosted.org/packages/00/2e/d53fa4befbf2cfa713304affc7ca780ce4fc1fd8710527771b58311a3229/click-8.1.7-py3-none-any.whl",
+              "sha256": "ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28",
+              "type": "zip",
+              "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:defs.bzl\", \"py_library\")\n\npy_library(\n    name = \"lib\",\n    srcs = glob([\"**/*.py\"]),\n    data = glob([\"**/*\"], exclude=[\n        # These entries include those put into user-installed dependencies by\n        # data_exclude in /python/pip_install/tools/bazel.py\n        # to avoid non-determinism following pip install's behavior.\n        \"**/*.py\",\n        \"**/*.pyc\",\n        \"**/*.pyc.*\",  # During pyc creation, temp files named *.pyc.NNN are created\n        \"**/* *\",\n        \"**/*.dist-info/RECORD\",\n        \"BUILD\",\n        \"WORKSPACE\",\n    ]),\n    # This makes this directory a top-level in the python import\n    # search path for anything that depends on this.\n    imports = [\".\"],\n)\n"
+            }
+          },
+          "pypi__importlib_metadata": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_python~0.26.0~internal_deps~pypi__importlib_metadata",
+              "url": "https://files.pythonhosted.org/packages/cc/37/db7ba97e676af155f5fcb1a35466f446eadc9104e25b83366e8088c9c926/importlib_metadata-6.8.0-py3-none-any.whl",
+              "sha256": "3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb",
+              "type": "zip",
+              "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:defs.bzl\", \"py_library\")\n\npy_library(\n    name = \"lib\",\n    srcs = glob([\"**/*.py\"]),\n    data = glob([\"**/*\"], exclude=[\n        # These entries include those put into user-installed dependencies by\n        # data_exclude in /python/pip_install/tools/bazel.py\n        # to avoid non-determinism following pip install's behavior.\n        \"**/*.py\",\n        \"**/*.pyc\",\n        \"**/*.pyc.*\",  # During pyc creation, temp files named *.pyc.NNN are created\n        \"**/* *\",\n        \"**/*.dist-info/RECORD\",\n        \"BUILD\",\n        \"WORKSPACE\",\n    ]),\n    # This makes this directory a top-level in the python import\n    # search path for anything that depends on this.\n    imports = [\".\"],\n)\n"
+            }
+          },
+          "pypi__pyproject_hooks": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_python~0.26.0~internal_deps~pypi__pyproject_hooks",
+              "url": "https://files.pythonhosted.org/packages/d5/ea/9ae603de7fbb3df820b23a70f6aff92bf8c7770043254ad8d2dc9d6bcba4/pyproject_hooks-1.0.0-py3-none-any.whl",
+              "sha256": "283c11acd6b928d2f6a7c73fa0d01cb2bdc5f07c57a2eeb6e83d5e56b97976f8",
+              "type": "zip",
+              "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:defs.bzl\", \"py_library\")\n\npy_library(\n    name = \"lib\",\n    srcs = glob([\"**/*.py\"]),\n    data = glob([\"**/*\"], exclude=[\n        # These entries include those put into user-installed dependencies by\n        # data_exclude in /python/pip_install/tools/bazel.py\n        # to avoid non-determinism following pip install's behavior.\n        \"**/*.py\",\n        \"**/*.pyc\",\n        \"**/*.pyc.*\",  # During pyc creation, temp files named *.pyc.NNN are created\n        \"**/* *\",\n        \"**/*.dist-info/RECORD\",\n        \"BUILD\",\n        \"WORKSPACE\",\n    ]),\n    # This makes this directory a top-level in the python import\n    # search path for anything that depends on this.\n    imports = [\".\"],\n)\n"
+            }
+          },
+          "pypi__pep517": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_python~0.26.0~internal_deps~pypi__pep517",
+              "url": "https://files.pythonhosted.org/packages/ee/2f/ef63e64e9429111e73d3d6cbee80591672d16f2725e648ebc52096f3d323/pep517-0.13.0-py3-none-any.whl",
+              "sha256": "4ba4446d80aed5b5eac6509ade100bff3e7943a8489de249654a5ae9b33ee35b",
+              "type": "zip",
+              "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:defs.bzl\", \"py_library\")\n\npy_library(\n    name = \"lib\",\n    srcs = glob([\"**/*.py\"]),\n    data = glob([\"**/*\"], exclude=[\n        # These entries include those put into user-installed dependencies by\n        # data_exclude in /python/pip_install/tools/bazel.py\n        # to avoid non-determinism following pip install's behavior.\n        \"**/*.py\",\n        \"**/*.pyc\",\n        \"**/*.pyc.*\",  # During pyc creation, temp files named *.pyc.NNN are created\n        \"**/* *\",\n        \"**/*.dist-info/RECORD\",\n        \"BUILD\",\n        \"WORKSPACE\",\n    ]),\n    # This makes this directory a top-level in the python import\n    # search path for anything that depends on this.\n    imports = [\".\"],\n)\n"
+            }
+          },
+          "pypi__packaging": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_python~0.26.0~internal_deps~pypi__packaging",
+              "url": "https://files.pythonhosted.org/packages/ab/c3/57f0601a2d4fe15de7a553c00adbc901425661bf048f2a22dfc500caf121/packaging-23.1-py3-none-any.whl",
+              "sha256": "994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61",
+              "type": "zip",
+              "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:defs.bzl\", \"py_library\")\n\npy_library(\n    name = \"lib\",\n    srcs = glob([\"**/*.py\"]),\n    data = glob([\"**/*\"], exclude=[\n        # These entries include those put into user-installed dependencies by\n        # data_exclude in /python/pip_install/tools/bazel.py\n        # to avoid non-determinism following pip install's behavior.\n        \"**/*.py\",\n        \"**/*.pyc\",\n        \"**/*.pyc.*\",  # During pyc creation, temp files named *.pyc.NNN are created\n        \"**/* *\",\n        \"**/*.dist-info/RECORD\",\n        \"BUILD\",\n        \"WORKSPACE\",\n    ]),\n    # This makes this directory a top-level in the python import\n    # search path for anything that depends on this.\n    imports = [\".\"],\n)\n"
+            }
+          },
+          "pypi__pip_tools": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_python~0.26.0~internal_deps~pypi__pip_tools",
+              "url": "https://files.pythonhosted.org/packages/e8/df/47e6267c6b5cdae867adbdd84b437393e6202ce4322de0a5e0b92960e1d6/pip_tools-7.3.0-py3-none-any.whl",
+              "sha256": "8717693288720a8c6ebd07149c93ab0be1fced0b5191df9e9decd3263e20d85e",
+              "type": "zip",
+              "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:defs.bzl\", \"py_library\")\n\npy_library(\n    name = \"lib\",\n    srcs = glob([\"**/*.py\"]),\n    data = glob([\"**/*\"], exclude=[\n        # These entries include those put into user-installed dependencies by\n        # data_exclude in /python/pip_install/tools/bazel.py\n        # to avoid non-determinism following pip install's behavior.\n        \"**/*.py\",\n        \"**/*.pyc\",\n        \"**/*.pyc.*\",  # During pyc creation, temp files named *.pyc.NNN are created\n        \"**/* *\",\n        \"**/*.dist-info/RECORD\",\n        \"BUILD\",\n        \"WORKSPACE\",\n    ]),\n    # This makes this directory a top-level in the python import\n    # search path for anything that depends on this.\n    imports = [\".\"],\n)\n"
+            }
+          },
+          "pypi__setuptools": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_python~0.26.0~internal_deps~pypi__setuptools",
+              "url": "https://files.pythonhosted.org/packages/4f/ab/0bcfebdfc3bfa8554b2b2c97a555569c4c1ebc74ea288741ea8326c51906/setuptools-68.1.2-py3-none-any.whl",
+              "sha256": "3d8083eed2d13afc9426f227b24fd1659489ec107c0e86cec2ffdde5c92e790b",
+              "type": "zip",
+              "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:defs.bzl\", \"py_library\")\n\npy_library(\n    name = \"lib\",\n    srcs = glob([\"**/*.py\"]),\n    data = glob([\"**/*\"], exclude=[\n        # These entries include those put into user-installed dependencies by\n        # data_exclude in /python/pip_install/tools/bazel.py\n        # to avoid non-determinism following pip install's behavior.\n        \"**/*.py\",\n        \"**/*.pyc\",\n        \"**/*.pyc.*\",  # During pyc creation, temp files named *.pyc.NNN are created\n        \"**/* *\",\n        \"**/*.dist-info/RECORD\",\n        \"BUILD\",\n        \"WORKSPACE\",\n    ]),\n    # This makes this directory a top-level in the python import\n    # search path for anything that depends on this.\n    imports = [\".\"],\n)\n"
+            }
+          },
+          "pypi__zipp": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_python~0.26.0~internal_deps~pypi__zipp",
+              "url": "https://files.pythonhosted.org/packages/8c/08/d3006317aefe25ea79d3b76c9650afabaf6d63d1c8443b236e7405447503/zipp-3.16.2-py3-none-any.whl",
+              "sha256": "679e51dd4403591b2d6838a48de3d283f3d188412a9782faadf845f298736ba0",
+              "type": "zip",
+              "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:defs.bzl\", \"py_library\")\n\npy_library(\n    name = \"lib\",\n    srcs = glob([\"**/*.py\"]),\n    data = glob([\"**/*\"], exclude=[\n        # These entries include those put into user-installed dependencies by\n        # data_exclude in /python/pip_install/tools/bazel.py\n        # to avoid non-determinism following pip install's behavior.\n        \"**/*.py\",\n        \"**/*.pyc\",\n        \"**/*.pyc.*\",  # During pyc creation, temp files named *.pyc.NNN are created\n        \"**/* *\",\n        \"**/*.dist-info/RECORD\",\n        \"BUILD\",\n        \"WORKSPACE\",\n    ]),\n    # This makes this directory a top-level in the python import\n    # search path for anything that depends on this.\n    imports = [\".\"],\n)\n"
+            }
+          },
+          "pypi__colorama": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_python~0.26.0~internal_deps~pypi__colorama",
+              "url": "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl",
+              "sha256": "4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6",
+              "type": "zip",
+              "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:defs.bzl\", \"py_library\")\n\npy_library(\n    name = \"lib\",\n    srcs = glob([\"**/*.py\"]),\n    data = glob([\"**/*\"], exclude=[\n        # These entries include those put into user-installed dependencies by\n        # data_exclude in /python/pip_install/tools/bazel.py\n        # to avoid non-determinism following pip install's behavior.\n        \"**/*.py\",\n        \"**/*.pyc\",\n        \"**/*.pyc.*\",  # During pyc creation, temp files named *.pyc.NNN are created\n        \"**/* *\",\n        \"**/*.dist-info/RECORD\",\n        \"BUILD\",\n        \"WORKSPACE\",\n    ]),\n    # This makes this directory a top-level in the python import\n    # search path for anything that depends on this.\n    imports = [\".\"],\n)\n"
+            }
+          },
+          "pypi__build": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_python~0.26.0~internal_deps~pypi__build",
+              "url": "https://files.pythonhosted.org/packages/58/91/17b00d5fac63d3dca605f1b8269ba3c65e98059e1fd99d00283e42a454f0/build-0.10.0-py3-none-any.whl",
+              "sha256": "af266720050a66c893a6096a2f410989eeac74ff9a68ba194b3f6473e8e26171",
+              "type": "zip",
+              "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:defs.bzl\", \"py_library\")\n\npy_library(\n    name = \"lib\",\n    srcs = glob([\"**/*.py\"]),\n    data = glob([\"**/*\"], exclude=[\n        # These entries include those put into user-installed dependencies by\n        # data_exclude in /python/pip_install/tools/bazel.py\n        # to avoid non-determinism following pip install's behavior.\n        \"**/*.py\",\n        \"**/*.pyc\",\n        \"**/*.pyc.*\",  # During pyc creation, temp files named *.pyc.NNN are created\n        \"**/* *\",\n        \"**/*.dist-info/RECORD\",\n        \"BUILD\",\n        \"WORKSPACE\",\n    ]),\n    # This makes this directory a top-level in the python import\n    # search path for anything that depends on this.\n    imports = [\".\"],\n)\n"
+            }
+          },
+          "rules_python_internal": {
+            "bzlFile": "@@rules_python~0.26.0//python/private:internal_config_repo.bzl",
+            "ruleClassName": "internal_config_repo",
+            "attributes": {
+              "name": "rules_python~0.26.0~internal_deps~rules_python_internal"
+            }
+          },
+          "pypi__pip": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_python~0.26.0~internal_deps~pypi__pip",
+              "url": "https://files.pythonhosted.org/packages/50/c2/e06851e8cc28dcad7c155f4753da8833ac06a5c704c109313b8d5a62968a/pip-23.2.1-py3-none-any.whl",
+              "sha256": "7ccf472345f20d35bdc9d1841ff5f313260c2c33fe417f48c30ac46cccabf5be",
+              "type": "zip",
+              "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:defs.bzl\", \"py_library\")\n\npy_library(\n    name = \"lib\",\n    srcs = glob([\"**/*.py\"]),\n    data = glob([\"**/*\"], exclude=[\n        # These entries include those put into user-installed dependencies by\n        # data_exclude in /python/pip_install/tools/bazel.py\n        # to avoid non-determinism following pip install's behavior.\n        \"**/*.py\",\n        \"**/*.pyc\",\n        \"**/*.pyc.*\",  # During pyc creation, temp files named *.pyc.NNN are created\n        \"**/* *\",\n        \"**/*.dist-info/RECORD\",\n        \"BUILD\",\n        \"WORKSPACE\",\n    ]),\n    # This makes this directory a top-level in the python import\n    # search path for anything that depends on this.\n    imports = [\".\"],\n)\n"
+            }
+          },
+          "pypi__installer": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_python~0.26.0~internal_deps~pypi__installer",
+              "url": "https://files.pythonhosted.org/packages/e5/ca/1172b6638d52f2d6caa2dd262ec4c811ba59eee96d54a7701930726bce18/installer-0.7.0-py3-none-any.whl",
+              "sha256": "05d1933f0a5ba7d8d6296bb6d5018e7c94fa473ceb10cf198a92ccea19c27b53",
+              "type": "zip",
+              "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:defs.bzl\", \"py_library\")\n\npy_library(\n    name = \"lib\",\n    srcs = glob([\"**/*.py\"]),\n    data = glob([\"**/*\"], exclude=[\n        # These entries include those put into user-installed dependencies by\n        # data_exclude in /python/pip_install/tools/bazel.py\n        # to avoid non-determinism following pip install's behavior.\n        \"**/*.py\",\n        \"**/*.pyc\",\n        \"**/*.pyc.*\",  # During pyc creation, temp files named *.pyc.NNN are created\n        \"**/* *\",\n        \"**/*.dist-info/RECORD\",\n        \"BUILD\",\n        \"WORKSPACE\",\n    ]),\n    # This makes this directory a top-level in the python import\n    # search path for anything that depends on this.\n    imports = [\".\"],\n)\n"
+            }
+          },
+          "pypi__more_itertools": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_python~0.26.0~internal_deps~pypi__more_itertools",
+              "url": "https://files.pythonhosted.org/packages/5a/cb/6dce742ea14e47d6f565589e859ad225f2a5de576d7696e0623b784e226b/more_itertools-10.1.0-py3-none-any.whl",
+              "sha256": "64e0735fcfdc6f3464ea133afe8ea4483b1c5fe3a3d69852e6503b43a0b222e6",
+              "type": "zip",
+              "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:defs.bzl\", \"py_library\")\n\npy_library(\n    name = \"lib\",\n    srcs = glob([\"**/*.py\"]),\n    data = glob([\"**/*\"], exclude=[\n        # These entries include those put into user-installed dependencies by\n        # data_exclude in /python/pip_install/tools/bazel.py\n        # to avoid non-determinism following pip install's behavior.\n        \"**/*.py\",\n        \"**/*.pyc\",\n        \"**/*.pyc.*\",  # During pyc creation, temp files named *.pyc.NNN are created\n        \"**/* *\",\n        \"**/*.dist-info/RECORD\",\n        \"BUILD\",\n        \"WORKSPACE\",\n    ]),\n    # This makes this directory a top-level in the python import\n    # search path for anything that depends on this.\n    imports = [\".\"],\n)\n"
+            }
+          },
+          "pypi__tomli": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_python~0.26.0~internal_deps~pypi__tomli",
+              "url": "https://files.pythonhosted.org/packages/97/75/10a9ebee3fd790d20926a90a2547f0bf78f371b2f13aa822c759680ca7b9/tomli-2.0.1-py3-none-any.whl",
+              "sha256": "939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc",
+              "type": "zip",
+              "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:defs.bzl\", \"py_library\")\n\npy_library(\n    name = \"lib\",\n    srcs = glob([\"**/*.py\"]),\n    data = glob([\"**/*\"], exclude=[\n        # These entries include those put into user-installed dependencies by\n        # data_exclude in /python/pip_install/tools/bazel.py\n        # to avoid non-determinism following pip install's behavior.\n        \"**/*.py\",\n        \"**/*.pyc\",\n        \"**/*.pyc.*\",  # During pyc creation, temp files named *.pyc.NNN are created\n        \"**/* *\",\n        \"**/*.dist-info/RECORD\",\n        \"BUILD\",\n        \"WORKSPACE\",\n    ]),\n    # This makes this directory a top-level in the python import\n    # search path for anything that depends on this.\n    imports = [\".\"],\n)\n"
+            }
+          }
+        }
+      }
+    }
+  }
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_7/bazel-repository-cache.nix b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_7/bazel-repository-cache.nix
new file mode 100644
index 000000000000..7ca026d0ada5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_7/bazel-repository-cache.nix
@@ -0,0 +1,139 @@
+{ lib
+, rnix-hashes
+, runCommand
+, fetchurl
+  # The path to the right MODULE.bazel.lock
+, lockfile
+  # A predicate used to select only some dependencies based on their name
+, requiredDepNamePredicate ? _: true
+, canonicalIds ? true
+}:
+let
+  modules = builtins.fromJSON (builtins.readFile lockfile);
+  modulesVersion = modules.lockFileVersion;
+
+  # a foldl' for json values
+  foldlJSON = op: acc: value:
+    let
+      # preorder, visit the current node first
+      acc' = op acc value;
+
+      # then visit child values, ignoring attribute names
+      children =
+        if builtins.isList value then
+          lib.foldl' (foldlJSON op) acc' value
+        else if builtins.isAttrs value then
+          lib.foldlAttrs (_acc: _name: foldlJSON op _acc) acc' value
+        else
+          acc';
+    in
+    # like foldl', force evaluation of intermediate results
+    builtins.seq acc' children;
+
+  # remove the "--" prefix, abusing undocumented negative substring length
+  sanitize = str:
+    if modulesVersion < 3
+    then builtins.substring 2 (-1) str
+    else str;
+
+  # We take any "attributes" object that has a "sha256" field. Every value
+  # under "attributes" is assumed to be an object, and all the "attributes"
+  # with a "sha256" field are assumed to have either a "urls" or "url" field.
+  #
+  # We add them to the `acc`umulator:
+  #
+  #    acc // {
+  #      "ffad2b06ef2e09d040...fc8e33706bb01634" = fetchurl {
+  #        name = "source";
+  #        sha256 = "ffad2b06ef2e09d040...fc8e33706bb01634";
+  #        urls = [
+  #          "https://mirror.bazel.build/github.com/golang/library.zip",
+  #          "https://github.com/golang/library.zip"
+  #        ];
+  #      };
+  #    }
+  #
+  # !REMINDER! This works on a best-effort basis, so try to keep it from
+  # failing loudly. Prefer warning traces.
+  extract_source = f: acc: value:
+    let
+      attrs = value.attributes;
+      entry = hash: urls: name: {
+        ${hash} = fetchurl {
+          name = "source"; # just like fetch*, to get some deduplication
+          inherit urls;
+          sha256 = hash;
+          passthru.sha256 = hash;
+          passthru.source_name = name;
+          passthru.urls = urls;
+        };
+      };
+      insert = acc: hash: urls:
+        let
+          validUrls = builtins.isList urls
+            && builtins.all (url: builtins.isString url && builtins.substring 0 4 url == "http") urls;
+          validName = builtins.isString attrs.name;
+          validHash = builtins.isString hash;
+          valid = validUrls && validName && validHash;
+        in
+        if valid then acc // entry hash urls attrs.name
+        else acc;
+      withToplevelValue = acc: insert acc
+        (attrs.integrity or attrs.sha256)
+        (attrs.urls or [ attrs.url ]);
+      # for http_file patches
+      withRemotePatches = acc: lib.foldlAttrs
+        (acc: url: hash: insert acc hash [ url ])
+        acc
+        (attrs.remote_patches or { });
+      # for _distdir_tar
+      withArchives = acc: lib.foldl'
+        (acc: archive: insert acc attrs.sha256.${archive} attrs.urls.${archive})
+        acc
+        (attrs.archives or [ ]);
+      addSources = acc: withToplevelValue (withRemotePatches (withArchives acc));
+    in
+    if builtins.isAttrs value && value ? attributes
+      && builtins.isAttrs attrs && attrs ? name
+      && (attrs ? sha256 || attrs ? integrity)
+      && (attrs ? urls || attrs ? url)
+      && f attrs.name
+    then addSources acc
+    else acc;
+
+  requiredSourcePredicate = n: requiredDepNamePredicate (sanitize n);
+  requiredDeps = foldlJSON (extract_source requiredSourcePredicate) { } modules;
+
+  command = ''
+    mkdir -p $out/content_addressable/sha256
+    cd $out
+  '' + lib.concatMapStrings
+    (drv: ''
+      filename=$(basename "${lib.head drv.urls}")
+      echo Bundling $filename ${lib.optionalString (drv?source_name) "from ${drv.source_name}"}
+
+      # 1. --repository_cache format:
+      # 1.a. A file under a content-hash directory
+      hash=$(${rnix-hashes}/bin/rnix-hashes --encoding BASE16 ${drv.sha256} | cut -f 2)
+      mkdir -p content_addressable/sha256/$hash
+      ln -sfn ${drv} content_addressable/sha256/$hash/file
+
+      # 1.b. a canonicalId marker based on the download urls
+      # Bazel uses these to avoid reusing a stale hash when the urls have changed.
+      canonicalId="${lib.concatStringsSep " " drv.urls}"
+      canonicalIdHash=$(echo -n "$canonicalId" | sha256sum | cut -d" " -f1)
+      echo -n "$canonicalId" > content_addressable/sha256/$hash/id-$canonicalIdHash
+
+      # 2. --distdir format:
+      # Just a file with the right basename
+      # Mostly to keep old tests happy, and because symlinks cost nothing.
+      # This is brittle because of expected file name conflicts
+      ln -sn ${drv} $filename || true
+    '')
+    (builtins.attrValues requiredDeps)
+  ;
+
+  repository_cache = runCommand "bazel-repository-cache" { } command;
+
+in
+repository_cache
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_7/cpp-test-MODULE.bazel b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_7/cpp-test-MODULE.bazel
new file mode 100644
index 000000000000..5356fb5d6710
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_7/cpp-test-MODULE.bazel
@@ -0,0 +1,7 @@
+###############################################################################
+# Bazel now uses Bzlmod by default to manage external dependencies.
+# Please consider migrating your external dependencies from WORKSPACE to MODULE.bazel.
+#
+# For more details, please check https://github.com/bazelbuild/bazel/issues/18958
+###############################################################################
+
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_7/cpp-test-MODULE.bazel.lock b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_7/cpp-test-MODULE.bazel.lock
new file mode 100644
index 000000000000..95f59a45f857
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_7/cpp-test-MODULE.bazel.lock
@@ -0,0 +1,1367 @@
+{
+  "lockFileVersion": 3,
+  "moduleFileHash": "88511df1b260515dce141aec0a1990a64de221731dfb656746b7ae1395acf57f",
+  "flags": {
+    "cmdRegistries": [
+      "https://bcr.bazel.build/"
+    ],
+    "cmdModuleOverrides": {},
+    "allowedYankedVersions": [],
+    "envVarAllowedYankedVersions": "",
+    "ignoreDevDependency": false,
+    "directDependenciesMode": "WARNING",
+    "compatibilityMode": "ERROR"
+  },
+  "localOverrideHashes": {
+    "bazel_tools": "922ea6752dc9105de5af957f7a99a6933c0a6a712d23df6aad16a9c399f7e787"
+  },
+  "moduleDepGraph": {
+    "<root>": {
+      "name": "",
+      "version": "",
+      "key": "<root>",
+      "repoName": "",
+      "executionPlatformsToRegister": [],
+      "toolchainsToRegister": [],
+      "extensionUsages": [],
+      "deps": {
+        "bazel_tools": "bazel_tools@_",
+        "local_config_platform": "local_config_platform@_"
+      }
+    },
+    "bazel_tools@_": {
+      "name": "bazel_tools",
+      "version": "",
+      "key": "bazel_tools@_",
+      "repoName": "bazel_tools",
+      "executionPlatformsToRegister": [],
+      "toolchainsToRegister": [
+        "@local_config_cc_toolchains//:all",
+        "@local_config_sh//:local_sh_toolchain"
+      ],
+      "extensionUsages": [
+        {
+          "extensionBzlFile": "@bazel_tools//tools/cpp:cc_configure.bzl",
+          "extensionName": "cc_configure_extension",
+          "usingModule": "bazel_tools@_",
+          "location": {
+            "file": "@@bazel_tools//:MODULE.bazel",
+            "line": 17,
+            "column": 29
+          },
+          "imports": {
+            "local_config_cc": "local_config_cc",
+            "local_config_cc_toolchains": "local_config_cc_toolchains"
+          },
+          "devImports": [],
+          "tags": [],
+          "hasDevUseExtension": false,
+          "hasNonDevUseExtension": true
+        },
+        {
+          "extensionBzlFile": "@bazel_tools//tools/osx:xcode_configure.bzl",
+          "extensionName": "xcode_configure_extension",
+          "usingModule": "bazel_tools@_",
+          "location": {
+            "file": "@@bazel_tools//:MODULE.bazel",
+            "line": 21,
+            "column": 32
+          },
+          "imports": {
+            "local_config_xcode": "local_config_xcode"
+          },
+          "devImports": [],
+          "tags": [],
+          "hasDevUseExtension": false,
+          "hasNonDevUseExtension": true
+        },
+        {
+          "extensionBzlFile": "@rules_java//java:extensions.bzl",
+          "extensionName": "toolchains",
+          "usingModule": "bazel_tools@_",
+          "location": {
+            "file": "@@bazel_tools//:MODULE.bazel",
+            "line": 24,
+            "column": 32
+          },
+          "imports": {
+            "local_jdk": "local_jdk",
+            "remote_java_tools": "remote_java_tools",
+            "remote_java_tools_linux": "remote_java_tools_linux",
+            "remote_java_tools_windows": "remote_java_tools_windows",
+            "remote_java_tools_darwin_x86_64": "remote_java_tools_darwin_x86_64",
+            "remote_java_tools_darwin_arm64": "remote_java_tools_darwin_arm64"
+          },
+          "devImports": [],
+          "tags": [],
+          "hasDevUseExtension": false,
+          "hasNonDevUseExtension": true
+        },
+        {
+          "extensionBzlFile": "@bazel_tools//tools/sh:sh_configure.bzl",
+          "extensionName": "sh_configure_extension",
+          "usingModule": "bazel_tools@_",
+          "location": {
+            "file": "@@bazel_tools//:MODULE.bazel",
+            "line": 35,
+            "column": 39
+          },
+          "imports": {
+            "local_config_sh": "local_config_sh"
+          },
+          "devImports": [],
+          "tags": [],
+          "hasDevUseExtension": false,
+          "hasNonDevUseExtension": true
+        },
+        {
+          "extensionBzlFile": "@bazel_tools//tools/test:extensions.bzl",
+          "extensionName": "remote_coverage_tools_extension",
+          "usingModule": "bazel_tools@_",
+          "location": {
+            "file": "@@bazel_tools//:MODULE.bazel",
+            "line": 39,
+            "column": 48
+          },
+          "imports": {
+            "remote_coverage_tools": "remote_coverage_tools"
+          },
+          "devImports": [],
+          "tags": [],
+          "hasDevUseExtension": false,
+          "hasNonDevUseExtension": true
+        },
+        {
+          "extensionBzlFile": "@bazel_tools//tools/android:android_extensions.bzl",
+          "extensionName": "remote_android_tools_extensions",
+          "usingModule": "bazel_tools@_",
+          "location": {
+            "file": "@@bazel_tools//:MODULE.bazel",
+            "line": 42,
+            "column": 42
+          },
+          "imports": {
+            "android_gmaven_r8": "android_gmaven_r8",
+            "android_tools": "android_tools"
+          },
+          "devImports": [],
+          "tags": [],
+          "hasDevUseExtension": false,
+          "hasNonDevUseExtension": true
+        }
+      ],
+      "deps": {
+        "rules_cc": "rules_cc@0.0.9",
+        "rules_java": "rules_java@7.1.0",
+        "rules_license": "rules_license@0.0.7",
+        "rules_proto": "rules_proto@4.0.0",
+        "rules_python": "rules_python@0.4.0",
+        "platforms": "platforms@0.0.7",
+        "com_google_protobuf": "protobuf@3.19.6",
+        "zlib": "zlib@1.3",
+        "build_bazel_apple_support": "apple_support@1.5.0",
+        "local_config_platform": "local_config_platform@_"
+      }
+    },
+    "local_config_platform@_": {
+      "name": "local_config_platform",
+      "version": "",
+      "key": "local_config_platform@_",
+      "repoName": "local_config_platform",
+      "executionPlatformsToRegister": [],
+      "toolchainsToRegister": [],
+      "extensionUsages": [],
+      "deps": {
+        "platforms": "platforms@0.0.7",
+        "bazel_tools": "bazel_tools@_"
+      }
+    },
+    "rules_cc@0.0.9": {
+      "name": "rules_cc",
+      "version": "0.0.9",
+      "key": "rules_cc@0.0.9",
+      "repoName": "rules_cc",
+      "executionPlatformsToRegister": [],
+      "toolchainsToRegister": [
+        "@local_config_cc_toolchains//:all"
+      ],
+      "extensionUsages": [
+        {
+          "extensionBzlFile": "@bazel_tools//tools/cpp:cc_configure.bzl",
+          "extensionName": "cc_configure_extension",
+          "usingModule": "rules_cc@0.0.9",
+          "location": {
+            "file": "https://bcr.bazel.build/modules/rules_cc/0.0.9/MODULE.bazel",
+            "line": 9,
+            "column": 29
+          },
+          "imports": {
+            "local_config_cc_toolchains": "local_config_cc_toolchains"
+          },
+          "devImports": [],
+          "tags": [],
+          "hasDevUseExtension": false,
+          "hasNonDevUseExtension": true
+        }
+      ],
+      "deps": {
+        "platforms": "platforms@0.0.7",
+        "bazel_tools": "bazel_tools@_",
+        "local_config_platform": "local_config_platform@_"
+      },
+      "repoSpec": {
+        "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl",
+        "ruleClassName": "http_archive",
+        "attributes": {
+          "name": "rules_cc~0.0.9",
+          "urls": [
+            "https://github.com/bazelbuild/rules_cc/releases/download/0.0.9/rules_cc-0.0.9.tar.gz"
+          ],
+          "integrity": "sha256-IDeHW5pEVtzkp50RKorohbvEqtlo5lh9ym5k86CQDN8=",
+          "strip_prefix": "rules_cc-0.0.9",
+          "remote_patches": {
+            "https://bcr.bazel.build/modules/rules_cc/0.0.9/patches/module_dot_bazel_version.patch": "sha256-mM+qzOI0SgAdaJBlWOSMwMPKpaA9b7R37Hj/tp5bb4g="
+          },
+          "remote_patch_strip": 0
+        }
+      }
+    },
+    "rules_java@7.1.0": {
+      "name": "rules_java",
+      "version": "7.1.0",
+      "key": "rules_java@7.1.0",
+      "repoName": "rules_java",
+      "executionPlatformsToRegister": [],
+      "toolchainsToRegister": [
+        "//toolchains:all",
+        "@local_jdk//:runtime_toolchain_definition",
+        "@local_jdk//:bootstrap_runtime_toolchain_definition",
+        "@remotejdk11_linux_toolchain_config_repo//:all",
+        "@remotejdk11_linux_aarch64_toolchain_config_repo//:all",
+        "@remotejdk11_linux_ppc64le_toolchain_config_repo//:all",
+        "@remotejdk11_linux_s390x_toolchain_config_repo//:all",
+        "@remotejdk11_macos_toolchain_config_repo//:all",
+        "@remotejdk11_macos_aarch64_toolchain_config_repo//:all",
+        "@remotejdk11_win_toolchain_config_repo//:all",
+        "@remotejdk11_win_arm64_toolchain_config_repo//:all",
+        "@remotejdk17_linux_toolchain_config_repo//:all",
+        "@remotejdk17_linux_aarch64_toolchain_config_repo//:all",
+        "@remotejdk17_linux_ppc64le_toolchain_config_repo//:all",
+        "@remotejdk17_linux_s390x_toolchain_config_repo//:all",
+        "@remotejdk17_macos_toolchain_config_repo//:all",
+        "@remotejdk17_macos_aarch64_toolchain_config_repo//:all",
+        "@remotejdk17_win_toolchain_config_repo//:all",
+        "@remotejdk17_win_arm64_toolchain_config_repo//:all",
+        "@remotejdk21_linux_toolchain_config_repo//:all",
+        "@remotejdk21_linux_aarch64_toolchain_config_repo//:all",
+        "@remotejdk21_macos_toolchain_config_repo//:all",
+        "@remotejdk21_macos_aarch64_toolchain_config_repo//:all",
+        "@remotejdk21_win_toolchain_config_repo//:all"
+      ],
+      "extensionUsages": [
+        {
+          "extensionBzlFile": "@rules_java//java:extensions.bzl",
+          "extensionName": "toolchains",
+          "usingModule": "rules_java@7.1.0",
+          "location": {
+            "file": "https://bcr.bazel.build/modules/rules_java/7.1.0/MODULE.bazel",
+            "line": 19,
+            "column": 27
+          },
+          "imports": {
+            "remote_java_tools": "remote_java_tools",
+            "remote_java_tools_linux": "remote_java_tools_linux",
+            "remote_java_tools_windows": "remote_java_tools_windows",
+            "remote_java_tools_darwin_x86_64": "remote_java_tools_darwin_x86_64",
+            "remote_java_tools_darwin_arm64": "remote_java_tools_darwin_arm64",
+            "local_jdk": "local_jdk",
+            "remotejdk11_linux_toolchain_config_repo": "remotejdk11_linux_toolchain_config_repo",
+            "remotejdk11_linux_aarch64_toolchain_config_repo": "remotejdk11_linux_aarch64_toolchain_config_repo",
+            "remotejdk11_linux_ppc64le_toolchain_config_repo": "remotejdk11_linux_ppc64le_toolchain_config_repo",
+            "remotejdk11_linux_s390x_toolchain_config_repo": "remotejdk11_linux_s390x_toolchain_config_repo",
+            "remotejdk11_macos_toolchain_config_repo": "remotejdk11_macos_toolchain_config_repo",
+            "remotejdk11_macos_aarch64_toolchain_config_repo": "remotejdk11_macos_aarch64_toolchain_config_repo",
+            "remotejdk11_win_toolchain_config_repo": "remotejdk11_win_toolchain_config_repo",
+            "remotejdk11_win_arm64_toolchain_config_repo": "remotejdk11_win_arm64_toolchain_config_repo",
+            "remotejdk17_linux_toolchain_config_repo": "remotejdk17_linux_toolchain_config_repo",
+            "remotejdk17_linux_aarch64_toolchain_config_repo": "remotejdk17_linux_aarch64_toolchain_config_repo",
+            "remotejdk17_linux_ppc64le_toolchain_config_repo": "remotejdk17_linux_ppc64le_toolchain_config_repo",
+            "remotejdk17_linux_s390x_toolchain_config_repo": "remotejdk17_linux_s390x_toolchain_config_repo",
+            "remotejdk17_macos_toolchain_config_repo": "remotejdk17_macos_toolchain_config_repo",
+            "remotejdk17_macos_aarch64_toolchain_config_repo": "remotejdk17_macos_aarch64_toolchain_config_repo",
+            "remotejdk17_win_toolchain_config_repo": "remotejdk17_win_toolchain_config_repo",
+            "remotejdk17_win_arm64_toolchain_config_repo": "remotejdk17_win_arm64_toolchain_config_repo",
+            "remotejdk21_linux_toolchain_config_repo": "remotejdk21_linux_toolchain_config_repo",
+            "remotejdk21_linux_aarch64_toolchain_config_repo": "remotejdk21_linux_aarch64_toolchain_config_repo",
+            "remotejdk21_macos_toolchain_config_repo": "remotejdk21_macos_toolchain_config_repo",
+            "remotejdk21_macos_aarch64_toolchain_config_repo": "remotejdk21_macos_aarch64_toolchain_config_repo",
+            "remotejdk21_win_toolchain_config_repo": "remotejdk21_win_toolchain_config_repo"
+          },
+          "devImports": [],
+          "tags": [],
+          "hasDevUseExtension": false,
+          "hasNonDevUseExtension": true
+        }
+      ],
+      "deps": {
+        "platforms": "platforms@0.0.7",
+        "rules_cc": "rules_cc@0.0.9",
+        "bazel_skylib": "bazel_skylib@1.3.0",
+        "rules_proto": "rules_proto@4.0.0",
+        "rules_license": "rules_license@0.0.7",
+        "bazel_tools": "bazel_tools@_",
+        "local_config_platform": "local_config_platform@_"
+      },
+      "repoSpec": {
+        "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl",
+        "ruleClassName": "http_archive",
+        "attributes": {
+          "name": "rules_java~7.1.0",
+          "urls": [
+            "https://github.com/bazelbuild/rules_java/releases/download/7.1.0/rules_java-7.1.0.tar.gz"
+          ],
+          "integrity": "sha256-o3pOX2OrgnFuXdau75iO2EYcegC46TYnImKJn1h81OE=",
+          "strip_prefix": "",
+          "remote_patches": {},
+          "remote_patch_strip": 0
+        }
+      }
+    },
+    "rules_license@0.0.7": {
+      "name": "rules_license",
+      "version": "0.0.7",
+      "key": "rules_license@0.0.7",
+      "repoName": "rules_license",
+      "executionPlatformsToRegister": [],
+      "toolchainsToRegister": [],
+      "extensionUsages": [],
+      "deps": {
+        "bazel_tools": "bazel_tools@_",
+        "local_config_platform": "local_config_platform@_"
+      },
+      "repoSpec": {
+        "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl",
+        "ruleClassName": "http_archive",
+        "attributes": {
+          "name": "rules_license~0.0.7",
+          "urls": [
+            "https://github.com/bazelbuild/rules_license/releases/download/0.0.7/rules_license-0.0.7.tar.gz"
+          ],
+          "integrity": "sha256-RTHezLkTY5ww5cdRKgVNXYdWmNrrddjPkPKEN1/nw2A=",
+          "strip_prefix": "",
+          "remote_patches": {},
+          "remote_patch_strip": 0
+        }
+      }
+    },
+    "rules_proto@4.0.0": {
+      "name": "rules_proto",
+      "version": "4.0.0",
+      "key": "rules_proto@4.0.0",
+      "repoName": "rules_proto",
+      "executionPlatformsToRegister": [],
+      "toolchainsToRegister": [],
+      "extensionUsages": [],
+      "deps": {
+        "bazel_skylib": "bazel_skylib@1.3.0",
+        "rules_cc": "rules_cc@0.0.9",
+        "bazel_tools": "bazel_tools@_",
+        "local_config_platform": "local_config_platform@_"
+      },
+      "repoSpec": {
+        "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl",
+        "ruleClassName": "http_archive",
+        "attributes": {
+          "name": "rules_proto~4.0.0",
+          "urls": [
+            "https://github.com/bazelbuild/rules_proto/archive/refs/tags/4.0.0.zip"
+          ],
+          "integrity": "sha256-Lr5z6xyuRA19pNtRYMGjKaynwQpck4H/lwYyVjyhoq4=",
+          "strip_prefix": "rules_proto-4.0.0",
+          "remote_patches": {
+            "https://bcr.bazel.build/modules/rules_proto/4.0.0/patches/module_dot_bazel.patch": "sha256-MclJO7tIAM2ElDAmscNId9pKTpOuDGHgVlW/9VBOIp0="
+          },
+          "remote_patch_strip": 0
+        }
+      }
+    },
+    "rules_python@0.4.0": {
+      "name": "rules_python",
+      "version": "0.4.0",
+      "key": "rules_python@0.4.0",
+      "repoName": "rules_python",
+      "executionPlatformsToRegister": [],
+      "toolchainsToRegister": [
+        "@bazel_tools//tools/python:autodetecting_toolchain"
+      ],
+      "extensionUsages": [
+        {
+          "extensionBzlFile": "@rules_python//bzlmod:extensions.bzl",
+          "extensionName": "pip_install",
+          "usingModule": "rules_python@0.4.0",
+          "location": {
+            "file": "https://bcr.bazel.build/modules/rules_python/0.4.0/MODULE.bazel",
+            "line": 7,
+            "column": 28
+          },
+          "imports": {
+            "pypi__click": "pypi__click",
+            "pypi__pip": "pypi__pip",
+            "pypi__pip_tools": "pypi__pip_tools",
+            "pypi__pkginfo": "pypi__pkginfo",
+            "pypi__setuptools": "pypi__setuptools",
+            "pypi__wheel": "pypi__wheel"
+          },
+          "devImports": [],
+          "tags": [],
+          "hasDevUseExtension": false,
+          "hasNonDevUseExtension": true
+        }
+      ],
+      "deps": {
+        "bazel_tools": "bazel_tools@_",
+        "local_config_platform": "local_config_platform@_"
+      },
+      "repoSpec": {
+        "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl",
+        "ruleClassName": "http_archive",
+        "attributes": {
+          "name": "rules_python~0.4.0",
+          "urls": [
+            "https://github.com/bazelbuild/rules_python/releases/download/0.4.0/rules_python-0.4.0.tar.gz"
+          ],
+          "integrity": "sha256-lUqom0kb5KCDMEosuDgBnIuMNyCnq7nEy4GseiQjDOo=",
+          "strip_prefix": "",
+          "remote_patches": {
+            "https://bcr.bazel.build/modules/rules_python/0.4.0/patches/propagate_pip_install_dependencies.patch": "sha256-v7S/dem/mixg63MF4KoRGDA4KEol9ab/tIVp+6Xq0D0=",
+            "https://bcr.bazel.build/modules/rules_python/0.4.0/patches/module_dot_bazel.patch": "sha256-kG4VIfWxQazzTuh50mvsx6pmyoRVA4lfH5rkto/Oq+Y="
+          },
+          "remote_patch_strip": 1
+        }
+      }
+    },
+    "platforms@0.0.7": {
+      "name": "platforms",
+      "version": "0.0.7",
+      "key": "platforms@0.0.7",
+      "repoName": "platforms",
+      "executionPlatformsToRegister": [],
+      "toolchainsToRegister": [],
+      "extensionUsages": [],
+      "deps": {
+        "rules_license": "rules_license@0.0.7",
+        "bazel_tools": "bazel_tools@_",
+        "local_config_platform": "local_config_platform@_"
+      },
+      "repoSpec": {
+        "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl",
+        "ruleClassName": "http_archive",
+        "attributes": {
+          "name": "platforms",
+          "urls": [
+            "https://github.com/bazelbuild/platforms/releases/download/0.0.7/platforms-0.0.7.tar.gz"
+          ],
+          "integrity": "sha256-OlYcmee9vpFzqmU/1Xn+hJ8djWc5V4CrR3Cx84FDHVE=",
+          "strip_prefix": "",
+          "remote_patches": {},
+          "remote_patch_strip": 0
+        }
+      }
+    },
+    "protobuf@3.19.6": {
+      "name": "protobuf",
+      "version": "3.19.6",
+      "key": "protobuf@3.19.6",
+      "repoName": "protobuf",
+      "executionPlatformsToRegister": [],
+      "toolchainsToRegister": [],
+      "extensionUsages": [],
+      "deps": {
+        "bazel_skylib": "bazel_skylib@1.3.0",
+        "zlib": "zlib@1.3",
+        "rules_python": "rules_python@0.4.0",
+        "rules_cc": "rules_cc@0.0.9",
+        "rules_proto": "rules_proto@4.0.0",
+        "rules_java": "rules_java@7.1.0",
+        "bazel_tools": "bazel_tools@_",
+        "local_config_platform": "local_config_platform@_"
+      },
+      "repoSpec": {
+        "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl",
+        "ruleClassName": "http_archive",
+        "attributes": {
+          "name": "protobuf~3.19.6",
+          "urls": [
+            "https://github.com/protocolbuffers/protobuf/archive/refs/tags/v3.19.6.zip"
+          ],
+          "integrity": "sha256-OH4sVZuyx8G8N5jE5s/wFTgaebJ1hpavy/johzC0c4k=",
+          "strip_prefix": "protobuf-3.19.6",
+          "remote_patches": {
+            "https://bcr.bazel.build/modules/protobuf/3.19.6/patches/relative_repo_names.patch": "sha256-w/5gw/zGv8NFId+669hcdw1Uus2lxgYpulATHIwIByI=",
+            "https://bcr.bazel.build/modules/protobuf/3.19.6/patches/remove_dependency_on_rules_jvm_external.patch": "sha256-THUTnVgEBmjA0W7fKzIyZOVG58DnW9HQTkr4D2zKUUc=",
+            "https://bcr.bazel.build/modules/protobuf/3.19.6/patches/add_module_dot_bazel_for_examples.patch": "sha256-s/b1gi3baK3LsXefI2rQilhmkb2R5jVJdnT6zEcdfHY=",
+            "https://bcr.bazel.build/modules/protobuf/3.19.6/patches/module_dot_bazel.patch": "sha256-S0DEni8zgx7rHscW3z/rCEubQnYec0XhNet640cw0h4="
+          },
+          "remote_patch_strip": 1
+        }
+      }
+    },
+    "zlib@1.3": {
+      "name": "zlib",
+      "version": "1.3",
+      "key": "zlib@1.3",
+      "repoName": "zlib",
+      "executionPlatformsToRegister": [],
+      "toolchainsToRegister": [],
+      "extensionUsages": [],
+      "deps": {
+        "platforms": "platforms@0.0.7",
+        "rules_cc": "rules_cc@0.0.9",
+        "bazel_tools": "bazel_tools@_",
+        "local_config_platform": "local_config_platform@_"
+      },
+      "repoSpec": {
+        "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl",
+        "ruleClassName": "http_archive",
+        "attributes": {
+          "name": "zlib~1.3",
+          "urls": [
+            "https://github.com/madler/zlib/releases/download/v1.3/zlib-1.3.tar.gz"
+          ],
+          "integrity": "sha256-/wukwpIBPbwnUws6geH5qBPNOd4Byl4Pi/NVcC76WT4=",
+          "strip_prefix": "zlib-1.3",
+          "remote_patches": {
+            "https://bcr.bazel.build/modules/zlib/1.3/patches/add_build_file.patch": "sha256-Ei+FYaaOo7A3jTKunMEodTI0Uw5NXQyZEcboMC8JskY=",
+            "https://bcr.bazel.build/modules/zlib/1.3/patches/module_dot_bazel.patch": "sha256-fPWLM+2xaF/kuy+kZc1YTfW6hNjrkG400Ho7gckuyJk="
+          },
+          "remote_patch_strip": 0
+        }
+      }
+    },
+    "apple_support@1.5.0": {
+      "name": "apple_support",
+      "version": "1.5.0",
+      "key": "apple_support@1.5.0",
+      "repoName": "build_bazel_apple_support",
+      "executionPlatformsToRegister": [],
+      "toolchainsToRegister": [
+        "@local_config_apple_cc_toolchains//:all"
+      ],
+      "extensionUsages": [
+        {
+          "extensionBzlFile": "@build_bazel_apple_support//crosstool:setup.bzl",
+          "extensionName": "apple_cc_configure_extension",
+          "usingModule": "apple_support@1.5.0",
+          "location": {
+            "file": "https://bcr.bazel.build/modules/apple_support/1.5.0/MODULE.bazel",
+            "line": 17,
+            "column": 35
+          },
+          "imports": {
+            "local_config_apple_cc": "local_config_apple_cc",
+            "local_config_apple_cc_toolchains": "local_config_apple_cc_toolchains"
+          },
+          "devImports": [],
+          "tags": [],
+          "hasDevUseExtension": false,
+          "hasNonDevUseExtension": true
+        }
+      ],
+      "deps": {
+        "bazel_skylib": "bazel_skylib@1.3.0",
+        "platforms": "platforms@0.0.7",
+        "bazel_tools": "bazel_tools@_",
+        "local_config_platform": "local_config_platform@_"
+      },
+      "repoSpec": {
+        "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl",
+        "ruleClassName": "http_archive",
+        "attributes": {
+          "name": "apple_support~1.5.0",
+          "urls": [
+            "https://github.com/bazelbuild/apple_support/releases/download/1.5.0/apple_support.1.5.0.tar.gz"
+          ],
+          "integrity": "sha256-miM41vja0yRPgj8txghKA+TQ+7J8qJLclw5okNW0gYQ=",
+          "strip_prefix": "",
+          "remote_patches": {},
+          "remote_patch_strip": 0
+        }
+      }
+    },
+    "bazel_skylib@1.3.0": {
+      "name": "bazel_skylib",
+      "version": "1.3.0",
+      "key": "bazel_skylib@1.3.0",
+      "repoName": "bazel_skylib",
+      "executionPlatformsToRegister": [],
+      "toolchainsToRegister": [
+        "//toolchains/unittest:cmd_toolchain",
+        "//toolchains/unittest:bash_toolchain"
+      ],
+      "extensionUsages": [],
+      "deps": {
+        "platforms": "platforms@0.0.7",
+        "bazel_tools": "bazel_tools@_",
+        "local_config_platform": "local_config_platform@_"
+      },
+      "repoSpec": {
+        "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl",
+        "ruleClassName": "http_archive",
+        "attributes": {
+          "name": "bazel_skylib~1.3.0",
+          "urls": [
+            "https://github.com/bazelbuild/bazel-skylib/releases/download/1.3.0/bazel-skylib-1.3.0.tar.gz"
+          ],
+          "integrity": "sha256-dNVE2W9KW7Yw1GXKi7z+Ix41lOWq5X4e2/F6brPKJQY=",
+          "strip_prefix": "",
+          "remote_patches": {},
+          "remote_patch_strip": 0
+        }
+      }
+    }
+  },
+  "moduleExtensions": {
+    "@@apple_support~1.5.0//crosstool:setup.bzl%apple_cc_configure_extension": {
+      "general": {
+        "bzlTransitiveDigest": "pMLFCYaRPkgXPQ8vtuNkMfiHfPmRBy6QJfnid4sWfv0=",
+        "accumulatedFileDigests": {},
+        "envVariables": {},
+        "generatedRepoSpecs": {
+          "local_config_apple_cc": {
+            "bzlFile": "@@apple_support~1.5.0//crosstool:setup.bzl",
+            "ruleClassName": "_apple_cc_autoconf",
+            "attributes": {
+              "name": "apple_support~1.5.0~apple_cc_configure_extension~local_config_apple_cc"
+            }
+          },
+          "local_config_apple_cc_toolchains": {
+            "bzlFile": "@@apple_support~1.5.0//crosstool:setup.bzl",
+            "ruleClassName": "_apple_cc_autoconf_toolchains",
+            "attributes": {
+              "name": "apple_support~1.5.0~apple_cc_configure_extension~local_config_apple_cc_toolchains"
+            }
+          }
+        }
+      }
+    },
+    "@@bazel_tools//tools/android:android_extensions.bzl%remote_android_tools_extensions": {
+      "general": {
+        "bzlTransitiveDigest": "iz3RFYDcsjupaT10sdSPAhA44WL3eDYkTEnYThllj1w=",
+        "accumulatedFileDigests": {},
+        "envVariables": {},
+        "generatedRepoSpecs": {
+          "android_tools": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "bazel_tools~remote_android_tools_extensions~android_tools",
+              "sha256": "2b661a761a735b41c41b3a78089f4fc1982626c76ddb944604ae3ff8c545d3c2",
+              "url": "https://mirror.bazel.build/bazel_android_tools/android_tools_pkg-0.30.0.tar"
+            }
+          },
+          "android_gmaven_r8": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_jar",
+            "attributes": {
+              "name": "bazel_tools~remote_android_tools_extensions~android_gmaven_r8",
+              "sha256": "57a696749695a09381a87bc2f08c3a8ed06a717a5caa3ef878a3077e0d3af19d",
+              "url": "https://maven.google.com/com/android/tools/r8/8.1.56/r8-8.1.56.jar"
+            }
+          }
+        }
+      }
+    },
+    "@@bazel_tools//tools/cpp:cc_configure.bzl%cc_configure_extension": {
+      "general": {
+        "bzlTransitiveDigest": "O9sf6ilKWU9Veed02jG9o2HM/xgV/UAyciuFBuxrFRY=",
+        "accumulatedFileDigests": {},
+        "envVariables": {},
+        "generatedRepoSpecs": {
+          "local_config_cc": {
+            "bzlFile": "@@bazel_tools//tools/cpp:cc_configure.bzl",
+            "ruleClassName": "cc_autoconf",
+            "attributes": {
+              "name": "bazel_tools~cc_configure_extension~local_config_cc"
+            }
+          },
+          "local_config_cc_toolchains": {
+            "bzlFile": "@@bazel_tools//tools/cpp:cc_configure.bzl",
+            "ruleClassName": "cc_autoconf_toolchains",
+            "attributes": {
+              "name": "bazel_tools~cc_configure_extension~local_config_cc_toolchains"
+            }
+          }
+        }
+      }
+    },
+    "@@bazel_tools//tools/osx:xcode_configure.bzl%xcode_configure_extension": {
+      "general": {
+        "bzlTransitiveDigest": "Qh2bWTU6QW6wkrd87qrU4YeY+SG37Nvw3A0PR4Y0L2Y=",
+        "accumulatedFileDigests": {},
+        "envVariables": {},
+        "generatedRepoSpecs": {
+          "local_config_xcode": {
+            "bzlFile": "@@bazel_tools//tools/osx:xcode_configure.bzl",
+            "ruleClassName": "xcode_autoconf",
+            "attributes": {
+              "name": "bazel_tools~xcode_configure_extension~local_config_xcode",
+              "xcode_locator": "@bazel_tools//tools/osx:xcode_locator.m",
+              "remote_xcode": ""
+            }
+          }
+        }
+      }
+    },
+    "@@bazel_tools//tools/sh:sh_configure.bzl%sh_configure_extension": {
+      "general": {
+        "bzlTransitiveDigest": "hp4NgmNjEg5+xgvzfh6L83bt9/aiiWETuNpwNuF1MSU=",
+        "accumulatedFileDigests": {},
+        "envVariables": {},
+        "generatedRepoSpecs": {
+          "local_config_sh": {
+            "bzlFile": "@@bazel_tools//tools/sh:sh_configure.bzl",
+            "ruleClassName": "sh_config",
+            "attributes": {
+              "name": "bazel_tools~sh_configure_extension~local_config_sh"
+            }
+          }
+        }
+      }
+    },
+    "@@bazel_tools//tools/test:extensions.bzl%remote_coverage_tools_extension": {
+      "general": {
+        "bzlTransitiveDigest": "cizrA62cv8WUgb0cCmx5B6PRijtr/I4TAWxg/4caNGU=",
+        "accumulatedFileDigests": {},
+        "envVariables": {},
+        "generatedRepoSpecs": {
+          "remote_coverage_tools": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "bazel_tools~remote_coverage_tools_extension~remote_coverage_tools",
+              "sha256": "7006375f6756819b7013ca875eab70a541cf7d89142d9c511ed78ea4fefa38af",
+              "urls": [
+                "https://mirror.bazel.build/bazel_coverage_output_generator/releases/coverage_output_generator-v2.6.zip"
+              ]
+            }
+          }
+        }
+      }
+    },
+    "@@rules_java~7.1.0//java:extensions.bzl%toolchains": {
+      "general": {
+        "bzlTransitiveDigest": "iUIRqCK7tkhvcDJCAfPPqSd06IHG0a8HQD0xeQyVAqw=",
+        "accumulatedFileDigests": {},
+        "envVariables": {},
+        "generatedRepoSpecs": {
+          "remotejdk21_linux_toolchain_config_repo": {
+            "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl",
+            "ruleClassName": "_toolchain_config",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk21_linux_toolchain_config_repo",
+              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_21\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"21\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"//conditions:default\": \":prefix_version_setting\",\n    }),\n    visibility = [\"//visibility:private\"],\n)\ntoolchain(\n    name = \"toolchain\",\n    target_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:x86_64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n    toolchain = \"@remotejdk21_linux//:jdk\",\n)\ntoolchain(\n    name = \"bootstrap_runtime_toolchain\",\n    # These constraints are not required for correctness, but prevent fetches of remote JDK for\n    # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n    # the same configuration, this constraint will not result in toolchain resolution failures.\n    exec_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:x86_64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n    toolchain = \"@remotejdk21_linux//:jdk\",\n)\n"
+            }
+          },
+          "remotejdk17_linux_s390x_toolchain_config_repo": {
+            "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl",
+            "ruleClassName": "_toolchain_config",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk17_linux_s390x_toolchain_config_repo",
+              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_17\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"17\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"//conditions:default\": \":prefix_version_setting\",\n    }),\n    visibility = [\"//visibility:private\"],\n)\ntoolchain(\n    name = \"toolchain\",\n    target_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:s390x\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n    toolchain = \"@remotejdk17_linux_s390x//:jdk\",\n)\ntoolchain(\n    name = \"bootstrap_runtime_toolchain\",\n    # These constraints are not required for correctness, but prevent fetches of remote JDK for\n    # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n    # the same configuration, this constraint will not result in toolchain resolution failures.\n    exec_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:s390x\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n    toolchain = \"@remotejdk17_linux_s390x//:jdk\",\n)\n"
+            }
+          },
+          "remotejdk17_macos_toolchain_config_repo": {
+            "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl",
+            "ruleClassName": "_toolchain_config",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk17_macos_toolchain_config_repo",
+              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_17\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"17\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"//conditions:default\": \":prefix_version_setting\",\n    }),\n    visibility = [\"//visibility:private\"],\n)\ntoolchain(\n    name = \"toolchain\",\n    target_compatible_with = [\"@platforms//os:macos\", \"@platforms//cpu:x86_64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n    toolchain = \"@remotejdk17_macos//:jdk\",\n)\ntoolchain(\n    name = \"bootstrap_runtime_toolchain\",\n    # These constraints are not required for correctness, but prevent fetches of remote JDK for\n    # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n    # the same configuration, this constraint will not result in toolchain resolution failures.\n    exec_compatible_with = [\"@platforms//os:macos\", \"@platforms//cpu:x86_64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n    toolchain = \"@remotejdk17_macos//:jdk\",\n)\n"
+            }
+          },
+          "remotejdk21_macos_aarch64_toolchain_config_repo": {
+            "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl",
+            "ruleClassName": "_toolchain_config",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk21_macos_aarch64_toolchain_config_repo",
+              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_21\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"21\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"//conditions:default\": \":prefix_version_setting\",\n    }),\n    visibility = [\"//visibility:private\"],\n)\ntoolchain(\n    name = \"toolchain\",\n    target_compatible_with = [\"@platforms//os:macos\", \"@platforms//cpu:aarch64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n    toolchain = \"@remotejdk21_macos_aarch64//:jdk\",\n)\ntoolchain(\n    name = \"bootstrap_runtime_toolchain\",\n    # These constraints are not required for correctness, but prevent fetches of remote JDK for\n    # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n    # the same configuration, this constraint will not result in toolchain resolution failures.\n    exec_compatible_with = [\"@platforms//os:macos\", \"@platforms//cpu:aarch64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n    toolchain = \"@remotejdk21_macos_aarch64//:jdk\",\n)\n"
+            }
+          },
+          "remotejdk17_linux_aarch64_toolchain_config_repo": {
+            "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl",
+            "ruleClassName": "_toolchain_config",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk17_linux_aarch64_toolchain_config_repo",
+              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_17\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"17\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"//conditions:default\": \":prefix_version_setting\",\n    }),\n    visibility = [\"//visibility:private\"],\n)\ntoolchain(\n    name = \"toolchain\",\n    target_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:aarch64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n    toolchain = \"@remotejdk17_linux_aarch64//:jdk\",\n)\ntoolchain(\n    name = \"bootstrap_runtime_toolchain\",\n    # These constraints are not required for correctness, but prevent fetches of remote JDK for\n    # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n    # the same configuration, this constraint will not result in toolchain resolution failures.\n    exec_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:aarch64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n    toolchain = \"@remotejdk17_linux_aarch64//:jdk\",\n)\n"
+            }
+          },
+          "remotejdk21_macos_aarch64": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk21_macos_aarch64",
+              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        exclude = [\"jre/bin/plugin2/**\"],\n    ),\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n# This folder holds security policies.\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\", \"release\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre\",\n    ],\n    # Provide the 'java` binary explicitly so that the correct path is used by\n    # Bazel even when the host platform differs from the execution platform.\n    # Exactly one of the two globs will be empty depending on the host platform.\n    # When --incompatible_disallow_empty_glob is enabled, each individual empty\n    # glob will fail without allow_empty = True, even if the overall result is\n    # non-empty.\n    java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n    version = 21,\n)\n",
+              "sha256": "2a7a99a3ea263dbd8d32a67d1e6e363ba8b25c645c826f5e167a02bbafaff1fa",
+              "strip_prefix": "zulu21.28.85-ca-jdk21.0.0-macosx_aarch64",
+              "urls": [
+                "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu21.28.85-ca-jdk21.0.0-macosx_aarch64.tar.gz",
+                "https://cdn.azul.com/zulu/bin/zulu21.28.85-ca-jdk21.0.0-macosx_aarch64.tar.gz"
+              ]
+            }
+          },
+          "remotejdk17_linux_toolchain_config_repo": {
+            "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl",
+            "ruleClassName": "_toolchain_config",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk17_linux_toolchain_config_repo",
+              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_17\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"17\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"//conditions:default\": \":prefix_version_setting\",\n    }),\n    visibility = [\"//visibility:private\"],\n)\ntoolchain(\n    name = \"toolchain\",\n    target_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:x86_64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n    toolchain = \"@remotejdk17_linux//:jdk\",\n)\ntoolchain(\n    name = \"bootstrap_runtime_toolchain\",\n    # These constraints are not required for correctness, but prevent fetches of remote JDK for\n    # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n    # the same configuration, this constraint will not result in toolchain resolution failures.\n    exec_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:x86_64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n    toolchain = \"@remotejdk17_linux//:jdk\",\n)\n"
+            }
+          },
+          "remotejdk17_macos_aarch64": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk17_macos_aarch64",
+              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        exclude = [\"jre/bin/plugin2/**\"],\n    ),\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n# This folder holds security policies.\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\", \"release\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre\",\n    ],\n    # Provide the 'java` binary explicitly so that the correct path is used by\n    # Bazel even when the host platform differs from the execution platform.\n    # Exactly one of the two globs will be empty depending on the host platform.\n    # When --incompatible_disallow_empty_glob is enabled, each individual empty\n    # glob will fail without allow_empty = True, even if the overall result is\n    # non-empty.\n    java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n    version = 17,\n)\n",
+              "sha256": "314b04568ec0ae9b36ba03c9cbd42adc9e1265f74678923b19297d66eb84dcca",
+              "strip_prefix": "zulu17.44.53-ca-jdk17.0.8.1-macosx_aarch64",
+              "urls": [
+                "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.44.53-ca-jdk17.0.8.1-macosx_aarch64.tar.gz",
+                "https://cdn.azul.com/zulu/bin/zulu17.44.53-ca-jdk17.0.8.1-macosx_aarch64.tar.gz"
+              ]
+            }
+          },
+          "remote_java_tools_windows": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remote_java_tools_windows",
+              "sha256": "c5c70c214a350f12cbf52da8270fa43ba629b795f3dd328028a38f8f0d39c2a1",
+              "urls": [
+                "https://mirror.bazel.build/bazel_java_tools/releases/java/v13.1/java_tools_windows-v13.1.zip",
+                "https://github.com/bazelbuild/java_tools/releases/download/java_v13.1/java_tools_windows-v13.1.zip"
+              ]
+            }
+          },
+          "remotejdk11_win": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk11_win",
+              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        exclude = [\"jre/bin/plugin2/**\"],\n    ),\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n# This folder holds security policies.\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\", \"release\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre\",\n    ],\n    # Provide the 'java` binary explicitly so that the correct path is used by\n    # Bazel even when the host platform differs from the execution platform.\n    # Exactly one of the two globs will be empty depending on the host platform.\n    # When --incompatible_disallow_empty_glob is enabled, each individual empty\n    # glob will fail without allow_empty = True, even if the overall result is\n    # non-empty.\n    java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n    version = 11,\n)\n",
+              "sha256": "43408193ce2fa0862819495b5ae8541085b95660153f2adcf91a52d3a1710e83",
+              "strip_prefix": "zulu11.66.15-ca-jdk11.0.20-win_x64",
+              "urls": [
+                "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu11.66.15-ca-jdk11.0.20-win_x64.zip",
+                "https://cdn.azul.com/zulu/bin/zulu11.66.15-ca-jdk11.0.20-win_x64.zip"
+              ]
+            }
+          },
+          "remotejdk11_win_toolchain_config_repo": {
+            "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl",
+            "ruleClassName": "_toolchain_config",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk11_win_toolchain_config_repo",
+              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_11\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"11\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"//conditions:default\": \":prefix_version_setting\",\n    }),\n    visibility = [\"//visibility:private\"],\n)\ntoolchain(\n    name = \"toolchain\",\n    target_compatible_with = [\"@platforms//os:windows\", \"@platforms//cpu:x86_64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n    toolchain = \"@remotejdk11_win//:jdk\",\n)\ntoolchain(\n    name = \"bootstrap_runtime_toolchain\",\n    # These constraints are not required for correctness, but prevent fetches of remote JDK for\n    # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n    # the same configuration, this constraint will not result in toolchain resolution failures.\n    exec_compatible_with = [\"@platforms//os:windows\", \"@platforms//cpu:x86_64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n    toolchain = \"@remotejdk11_win//:jdk\",\n)\n"
+            }
+          },
+          "remotejdk11_linux_aarch64": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk11_linux_aarch64",
+              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        exclude = [\"jre/bin/plugin2/**\"],\n    ),\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n# This folder holds security policies.\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\", \"release\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre\",\n    ],\n    # Provide the 'java` binary explicitly so that the correct path is used by\n    # Bazel even when the host platform differs from the execution platform.\n    # Exactly one of the two globs will be empty depending on the host platform.\n    # When --incompatible_disallow_empty_glob is enabled, each individual empty\n    # glob will fail without allow_empty = True, even if the overall result is\n    # non-empty.\n    java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n    version = 11,\n)\n",
+              "sha256": "54174439f2b3fddd11f1048c397fe7bb45d4c9d66d452d6889b013d04d21c4de",
+              "strip_prefix": "zulu11.66.15-ca-jdk11.0.20-linux_aarch64",
+              "urls": [
+                "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu11.66.15-ca-jdk11.0.20-linux_aarch64.tar.gz",
+                "https://cdn.azul.com/zulu/bin/zulu11.66.15-ca-jdk11.0.20-linux_aarch64.tar.gz"
+              ]
+            }
+          },
+          "remotejdk17_linux": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk17_linux",
+              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        exclude = [\"jre/bin/plugin2/**\"],\n    ),\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n# This folder holds security policies.\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\", \"release\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre\",\n    ],\n    # Provide the 'java` binary explicitly so that the correct path is used by\n    # Bazel even when the host platform differs from the execution platform.\n    # Exactly one of the two globs will be empty depending on the host platform.\n    # When --incompatible_disallow_empty_glob is enabled, each individual empty\n    # glob will fail without allow_empty = True, even if the overall result is\n    # non-empty.\n    java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n    version = 17,\n)\n",
+              "sha256": "b9482f2304a1a68a614dfacddcf29569a72f0fac32e6c74f83dc1b9a157b8340",
+              "strip_prefix": "zulu17.44.53-ca-jdk17.0.8.1-linux_x64",
+              "urls": [
+                "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.44.53-ca-jdk17.0.8.1-linux_x64.tar.gz",
+                "https://cdn.azul.com/zulu/bin/zulu17.44.53-ca-jdk17.0.8.1-linux_x64.tar.gz"
+              ]
+            }
+          },
+          "remotejdk11_linux_s390x_toolchain_config_repo": {
+            "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl",
+            "ruleClassName": "_toolchain_config",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk11_linux_s390x_toolchain_config_repo",
+              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_11\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"11\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"//conditions:default\": \":prefix_version_setting\",\n    }),\n    visibility = [\"//visibility:private\"],\n)\ntoolchain(\n    name = \"toolchain\",\n    target_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:s390x\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n    toolchain = \"@remotejdk11_linux_s390x//:jdk\",\n)\ntoolchain(\n    name = \"bootstrap_runtime_toolchain\",\n    # These constraints are not required for correctness, but prevent fetches of remote JDK for\n    # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n    # the same configuration, this constraint will not result in toolchain resolution failures.\n    exec_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:s390x\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n    toolchain = \"@remotejdk11_linux_s390x//:jdk\",\n)\n"
+            }
+          },
+          "remotejdk11_linux_toolchain_config_repo": {
+            "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl",
+            "ruleClassName": "_toolchain_config",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk11_linux_toolchain_config_repo",
+              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_11\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"11\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"//conditions:default\": \":prefix_version_setting\",\n    }),\n    visibility = [\"//visibility:private\"],\n)\ntoolchain(\n    name = \"toolchain\",\n    target_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:x86_64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n    toolchain = \"@remotejdk11_linux//:jdk\",\n)\ntoolchain(\n    name = \"bootstrap_runtime_toolchain\",\n    # These constraints are not required for correctness, but prevent fetches of remote JDK for\n    # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n    # the same configuration, this constraint will not result in toolchain resolution failures.\n    exec_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:x86_64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n    toolchain = \"@remotejdk11_linux//:jdk\",\n)\n"
+            }
+          },
+          "remotejdk11_macos": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk11_macos",
+              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        exclude = [\"jre/bin/plugin2/**\"],\n    ),\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n# This folder holds security policies.\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\", \"release\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre\",\n    ],\n    # Provide the 'java` binary explicitly so that the correct path is used by\n    # Bazel even when the host platform differs from the execution platform.\n    # Exactly one of the two globs will be empty depending on the host platform.\n    # When --incompatible_disallow_empty_glob is enabled, each individual empty\n    # glob will fail without allow_empty = True, even if the overall result is\n    # non-empty.\n    java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n    version = 11,\n)\n",
+              "sha256": "bcaab11cfe586fae7583c6d9d311c64384354fb2638eb9a012eca4c3f1a1d9fd",
+              "strip_prefix": "zulu11.66.15-ca-jdk11.0.20-macosx_x64",
+              "urls": [
+                "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu11.66.15-ca-jdk11.0.20-macosx_x64.tar.gz",
+                "https://cdn.azul.com/zulu/bin/zulu11.66.15-ca-jdk11.0.20-macosx_x64.tar.gz"
+              ]
+            }
+          },
+          "remotejdk11_win_arm64": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk11_win_arm64",
+              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        exclude = [\"jre/bin/plugin2/**\"],\n    ),\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n# This folder holds security policies.\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\", \"release\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre\",\n    ],\n    # Provide the 'java` binary explicitly so that the correct path is used by\n    # Bazel even when the host platform differs from the execution platform.\n    # Exactly one of the two globs will be empty depending on the host platform.\n    # When --incompatible_disallow_empty_glob is enabled, each individual empty\n    # glob will fail without allow_empty = True, even if the overall result is\n    # non-empty.\n    java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n    version = 11,\n)\n",
+              "sha256": "b8a28e6e767d90acf793ea6f5bed0bb595ba0ba5ebdf8b99f395266161e53ec2",
+              "strip_prefix": "jdk-11.0.13+8",
+              "urls": [
+                "https://mirror.bazel.build/aka.ms/download-jdk/microsoft-jdk-11.0.13.8.1-windows-aarch64.zip"
+              ]
+            }
+          },
+          "remotejdk17_macos": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk17_macos",
+              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        exclude = [\"jre/bin/plugin2/**\"],\n    ),\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n# This folder holds security policies.\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\", \"release\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre\",\n    ],\n    # Provide the 'java` binary explicitly so that the correct path is used by\n    # Bazel even when the host platform differs from the execution platform.\n    # Exactly one of the two globs will be empty depending on the host platform.\n    # When --incompatible_disallow_empty_glob is enabled, each individual empty\n    # glob will fail without allow_empty = True, even if the overall result is\n    # non-empty.\n    java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n    version = 17,\n)\n",
+              "sha256": "640453e8afe8ffe0fb4dceb4535fb50db9c283c64665eebb0ba68b19e65f4b1f",
+              "strip_prefix": "zulu17.44.53-ca-jdk17.0.8.1-macosx_x64",
+              "urls": [
+                "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.44.53-ca-jdk17.0.8.1-macosx_x64.tar.gz",
+                "https://cdn.azul.com/zulu/bin/zulu17.44.53-ca-jdk17.0.8.1-macosx_x64.tar.gz"
+              ]
+            }
+          },
+          "remotejdk21_macos": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk21_macos",
+              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        exclude = [\"jre/bin/plugin2/**\"],\n    ),\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n# This folder holds security policies.\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\", \"release\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre\",\n    ],\n    # Provide the 'java` binary explicitly so that the correct path is used by\n    # Bazel even when the host platform differs from the execution platform.\n    # Exactly one of the two globs will be empty depending on the host platform.\n    # When --incompatible_disallow_empty_glob is enabled, each individual empty\n    # glob will fail without allow_empty = True, even if the overall result is\n    # non-empty.\n    java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n    version = 21,\n)\n",
+              "sha256": "9639b87db586d0c89f7a9892ae47f421e442c64b97baebdff31788fbe23265bd",
+              "strip_prefix": "zulu21.28.85-ca-jdk21.0.0-macosx_x64",
+              "urls": [
+                "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu21.28.85-ca-jdk21.0.0-macosx_x64.tar.gz",
+                "https://cdn.azul.com/zulu/bin/zulu21.28.85-ca-jdk21.0.0-macosx_x64.tar.gz"
+              ]
+            }
+          },
+          "remotejdk21_macos_toolchain_config_repo": {
+            "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl",
+            "ruleClassName": "_toolchain_config",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk21_macos_toolchain_config_repo",
+              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_21\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"21\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"//conditions:default\": \":prefix_version_setting\",\n    }),\n    visibility = [\"//visibility:private\"],\n)\ntoolchain(\n    name = \"toolchain\",\n    target_compatible_with = [\"@platforms//os:macos\", \"@platforms//cpu:x86_64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n    toolchain = \"@remotejdk21_macos//:jdk\",\n)\ntoolchain(\n    name = \"bootstrap_runtime_toolchain\",\n    # These constraints are not required for correctness, but prevent fetches of remote JDK for\n    # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n    # the same configuration, this constraint will not result in toolchain resolution failures.\n    exec_compatible_with = [\"@platforms//os:macos\", \"@platforms//cpu:x86_64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n    toolchain = \"@remotejdk21_macos//:jdk\",\n)\n"
+            }
+          },
+          "remotejdk17_macos_aarch64_toolchain_config_repo": {
+            "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl",
+            "ruleClassName": "_toolchain_config",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk17_macos_aarch64_toolchain_config_repo",
+              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_17\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"17\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"//conditions:default\": \":prefix_version_setting\",\n    }),\n    visibility = [\"//visibility:private\"],\n)\ntoolchain(\n    name = \"toolchain\",\n    target_compatible_with = [\"@platforms//os:macos\", \"@platforms//cpu:aarch64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n    toolchain = \"@remotejdk17_macos_aarch64//:jdk\",\n)\ntoolchain(\n    name = \"bootstrap_runtime_toolchain\",\n    # These constraints are not required for correctness, but prevent fetches of remote JDK for\n    # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n    # the same configuration, this constraint will not result in toolchain resolution failures.\n    exec_compatible_with = [\"@platforms//os:macos\", \"@platforms//cpu:aarch64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n    toolchain = \"@remotejdk17_macos_aarch64//:jdk\",\n)\n"
+            }
+          },
+          "remotejdk17_win": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk17_win",
+              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        exclude = [\"jre/bin/plugin2/**\"],\n    ),\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n# This folder holds security policies.\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\", \"release\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre\",\n    ],\n    # Provide the 'java` binary explicitly so that the correct path is used by\n    # Bazel even when the host platform differs from the execution platform.\n    # Exactly one of the two globs will be empty depending on the host platform.\n    # When --incompatible_disallow_empty_glob is enabled, each individual empty\n    # glob will fail without allow_empty = True, even if the overall result is\n    # non-empty.\n    java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n    version = 17,\n)\n",
+              "sha256": "192f2afca57701de6ec496234f7e45d971bf623ff66b8ee4a5c81582054e5637",
+              "strip_prefix": "zulu17.44.53-ca-jdk17.0.8.1-win_x64",
+              "urls": [
+                "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.44.53-ca-jdk17.0.8.1-win_x64.zip",
+                "https://cdn.azul.com/zulu/bin/zulu17.44.53-ca-jdk17.0.8.1-win_x64.zip"
+              ]
+            }
+          },
+          "remotejdk11_macos_aarch64_toolchain_config_repo": {
+            "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl",
+            "ruleClassName": "_toolchain_config",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk11_macos_aarch64_toolchain_config_repo",
+              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_11\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"11\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"//conditions:default\": \":prefix_version_setting\",\n    }),\n    visibility = [\"//visibility:private\"],\n)\ntoolchain(\n    name = \"toolchain\",\n    target_compatible_with = [\"@platforms//os:macos\", \"@platforms//cpu:aarch64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n    toolchain = \"@remotejdk11_macos_aarch64//:jdk\",\n)\ntoolchain(\n    name = \"bootstrap_runtime_toolchain\",\n    # These constraints are not required for correctness, but prevent fetches of remote JDK for\n    # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n    # the same configuration, this constraint will not result in toolchain resolution failures.\n    exec_compatible_with = [\"@platforms//os:macos\", \"@platforms//cpu:aarch64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n    toolchain = \"@remotejdk11_macos_aarch64//:jdk\",\n)\n"
+            }
+          },
+          "remotejdk11_linux_ppc64le_toolchain_config_repo": {
+            "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl",
+            "ruleClassName": "_toolchain_config",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk11_linux_ppc64le_toolchain_config_repo",
+              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_11\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"11\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"//conditions:default\": \":prefix_version_setting\",\n    }),\n    visibility = [\"//visibility:private\"],\n)\ntoolchain(\n    name = \"toolchain\",\n    target_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:ppc\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n    toolchain = \"@remotejdk11_linux_ppc64le//:jdk\",\n)\ntoolchain(\n    name = \"bootstrap_runtime_toolchain\",\n    # These constraints are not required for correctness, but prevent fetches of remote JDK for\n    # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n    # the same configuration, this constraint will not result in toolchain resolution failures.\n    exec_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:ppc\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n    toolchain = \"@remotejdk11_linux_ppc64le//:jdk\",\n)\n"
+            }
+          },
+          "remotejdk21_linux": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk21_linux",
+              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        exclude = [\"jre/bin/plugin2/**\"],\n    ),\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n# This folder holds security policies.\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\", \"release\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre\",\n    ],\n    # Provide the 'java` binary explicitly so that the correct path is used by\n    # Bazel even when the host platform differs from the execution platform.\n    # Exactly one of the two globs will be empty depending on the host platform.\n    # When --incompatible_disallow_empty_glob is enabled, each individual empty\n    # glob will fail without allow_empty = True, even if the overall result is\n    # non-empty.\n    java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n    version = 21,\n)\n",
+              "sha256": "0c0eadfbdc47a7ca64aeab51b9c061f71b6e4d25d2d87674512e9b6387e9e3a6",
+              "strip_prefix": "zulu21.28.85-ca-jdk21.0.0-linux_x64",
+              "urls": [
+                "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu21.28.85-ca-jdk21.0.0-linux_x64.tar.gz",
+                "https://cdn.azul.com/zulu/bin/zulu21.28.85-ca-jdk21.0.0-linux_x64.tar.gz"
+              ]
+            }
+          },
+          "remote_java_tools_linux": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remote_java_tools_linux",
+              "sha256": "d134da9b04c9023fb6e56a5d4bffccee73f7bc9572ddc4e747778dacccd7a5a7",
+              "urls": [
+                "https://mirror.bazel.build/bazel_java_tools/releases/java/v13.1/java_tools_linux-v13.1.zip",
+                "https://github.com/bazelbuild/java_tools/releases/download/java_v13.1/java_tools_linux-v13.1.zip"
+              ]
+            }
+          },
+          "remotejdk21_win": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk21_win",
+              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        exclude = [\"jre/bin/plugin2/**\"],\n    ),\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n# This folder holds security policies.\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\", \"release\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre\",\n    ],\n    # Provide the 'java` binary explicitly so that the correct path is used by\n    # Bazel even when the host platform differs from the execution platform.\n    # Exactly one of the two globs will be empty depending on the host platform.\n    # When --incompatible_disallow_empty_glob is enabled, each individual empty\n    # glob will fail without allow_empty = True, even if the overall result is\n    # non-empty.\n    java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n    version = 21,\n)\n",
+              "sha256": "e9959d500a0d9a7694ac243baf657761479da132f0f94720cbffd092150bd802",
+              "strip_prefix": "zulu21.28.85-ca-jdk21.0.0-win_x64",
+              "urls": [
+                "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu21.28.85-ca-jdk21.0.0-win_x64.zip",
+                "https://cdn.azul.com/zulu/bin/zulu21.28.85-ca-jdk21.0.0-win_x64.zip"
+              ]
+            }
+          },
+          "remotejdk21_linux_aarch64": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk21_linux_aarch64",
+              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        exclude = [\"jre/bin/plugin2/**\"],\n    ),\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n# This folder holds security policies.\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\", \"release\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre\",\n    ],\n    # Provide the 'java` binary explicitly so that the correct path is used by\n    # Bazel even when the host platform differs from the execution platform.\n    # Exactly one of the two globs will be empty depending on the host platform.\n    # When --incompatible_disallow_empty_glob is enabled, each individual empty\n    # glob will fail without allow_empty = True, even if the overall result is\n    # non-empty.\n    java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n    version = 21,\n)\n",
+              "sha256": "1fb64b8036c5d463d8ab59af06bf5b6b006811e6012e3b0eb6bccf57f1c55835",
+              "strip_prefix": "zulu21.28.85-ca-jdk21.0.0-linux_aarch64",
+              "urls": [
+                "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu21.28.85-ca-jdk21.0.0-linux_aarch64.tar.gz",
+                "https://cdn.azul.com/zulu/bin/zulu21.28.85-ca-jdk21.0.0-linux_aarch64.tar.gz"
+              ]
+            }
+          },
+          "remotejdk11_linux_aarch64_toolchain_config_repo": {
+            "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl",
+            "ruleClassName": "_toolchain_config",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk11_linux_aarch64_toolchain_config_repo",
+              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_11\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"11\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"//conditions:default\": \":prefix_version_setting\",\n    }),\n    visibility = [\"//visibility:private\"],\n)\ntoolchain(\n    name = \"toolchain\",\n    target_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:aarch64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n    toolchain = \"@remotejdk11_linux_aarch64//:jdk\",\n)\ntoolchain(\n    name = \"bootstrap_runtime_toolchain\",\n    # These constraints are not required for correctness, but prevent fetches of remote JDK for\n    # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n    # the same configuration, this constraint will not result in toolchain resolution failures.\n    exec_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:aarch64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n    toolchain = \"@remotejdk11_linux_aarch64//:jdk\",\n)\n"
+            }
+          },
+          "remotejdk11_linux_s390x": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk11_linux_s390x",
+              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        exclude = [\"jre/bin/plugin2/**\"],\n    ),\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n# This folder holds security policies.\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\", \"release\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre\",\n    ],\n    # Provide the 'java` binary explicitly so that the correct path is used by\n    # Bazel even when the host platform differs from the execution platform.\n    # Exactly one of the two globs will be empty depending on the host platform.\n    # When --incompatible_disallow_empty_glob is enabled, each individual empty\n    # glob will fail without allow_empty = True, even if the overall result is\n    # non-empty.\n    java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n    version = 11,\n)\n",
+              "sha256": "a58fc0361966af0a5d5a31a2d8a208e3c9bb0f54f345596fd80b99ea9a39788b",
+              "strip_prefix": "jdk-11.0.15+10",
+              "urls": [
+                "https://mirror.bazel.build/github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.15+10/OpenJDK11U-jdk_s390x_linux_hotspot_11.0.15_10.tar.gz",
+                "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.15+10/OpenJDK11U-jdk_s390x_linux_hotspot_11.0.15_10.tar.gz"
+              ]
+            }
+          },
+          "remotejdk17_linux_aarch64": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk17_linux_aarch64",
+              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        exclude = [\"jre/bin/plugin2/**\"],\n    ),\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n# This folder holds security policies.\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\", \"release\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre\",\n    ],\n    # Provide the 'java` binary explicitly so that the correct path is used by\n    # Bazel even when the host platform differs from the execution platform.\n    # Exactly one of the two globs will be empty depending on the host platform.\n    # When --incompatible_disallow_empty_glob is enabled, each individual empty\n    # glob will fail without allow_empty = True, even if the overall result is\n    # non-empty.\n    java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n    version = 17,\n)\n",
+              "sha256": "6531cef61e416d5a7b691555c8cf2bdff689201b8a001ff45ab6740062b44313",
+              "strip_prefix": "zulu17.44.53-ca-jdk17.0.8.1-linux_aarch64",
+              "urls": [
+                "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.44.53-ca-jdk17.0.8.1-linux_aarch64.tar.gz",
+                "https://cdn.azul.com/zulu/bin/zulu17.44.53-ca-jdk17.0.8.1-linux_aarch64.tar.gz"
+              ]
+            }
+          },
+          "remotejdk17_win_arm64_toolchain_config_repo": {
+            "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl",
+            "ruleClassName": "_toolchain_config",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk17_win_arm64_toolchain_config_repo",
+              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_17\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"17\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"//conditions:default\": \":prefix_version_setting\",\n    }),\n    visibility = [\"//visibility:private\"],\n)\ntoolchain(\n    name = \"toolchain\",\n    target_compatible_with = [\"@platforms//os:windows\", \"@platforms//cpu:arm64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n    toolchain = \"@remotejdk17_win_arm64//:jdk\",\n)\ntoolchain(\n    name = \"bootstrap_runtime_toolchain\",\n    # These constraints are not required for correctness, but prevent fetches of remote JDK for\n    # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n    # the same configuration, this constraint will not result in toolchain resolution failures.\n    exec_compatible_with = [\"@platforms//os:windows\", \"@platforms//cpu:arm64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n    toolchain = \"@remotejdk17_win_arm64//:jdk\",\n)\n"
+            }
+          },
+          "remotejdk11_linux": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk11_linux",
+              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        exclude = [\"jre/bin/plugin2/**\"],\n    ),\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n# This folder holds security policies.\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\", \"release\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre\",\n    ],\n    # Provide the 'java` binary explicitly so that the correct path is used by\n    # Bazel even when the host platform differs from the execution platform.\n    # Exactly one of the two globs will be empty depending on the host platform.\n    # When --incompatible_disallow_empty_glob is enabled, each individual empty\n    # glob will fail without allow_empty = True, even if the overall result is\n    # non-empty.\n    java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n    version = 11,\n)\n",
+              "sha256": "a34b404f87a08a61148b38e1416d837189e1df7a040d949e743633daf4695a3c",
+              "strip_prefix": "zulu11.66.15-ca-jdk11.0.20-linux_x64",
+              "urls": [
+                "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu11.66.15-ca-jdk11.0.20-linux_x64.tar.gz",
+                "https://cdn.azul.com/zulu/bin/zulu11.66.15-ca-jdk11.0.20-linux_x64.tar.gz"
+              ]
+            }
+          },
+          "remotejdk11_macos_toolchain_config_repo": {
+            "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl",
+            "ruleClassName": "_toolchain_config",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk11_macos_toolchain_config_repo",
+              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_11\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"11\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"//conditions:default\": \":prefix_version_setting\",\n    }),\n    visibility = [\"//visibility:private\"],\n)\ntoolchain(\n    name = \"toolchain\",\n    target_compatible_with = [\"@platforms//os:macos\", \"@platforms//cpu:x86_64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n    toolchain = \"@remotejdk11_macos//:jdk\",\n)\ntoolchain(\n    name = \"bootstrap_runtime_toolchain\",\n    # These constraints are not required for correctness, but prevent fetches of remote JDK for\n    # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n    # the same configuration, this constraint will not result in toolchain resolution failures.\n    exec_compatible_with = [\"@platforms//os:macos\", \"@platforms//cpu:x86_64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n    toolchain = \"@remotejdk11_macos//:jdk\",\n)\n"
+            }
+          },
+          "remotejdk17_linux_ppc64le_toolchain_config_repo": {
+            "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl",
+            "ruleClassName": "_toolchain_config",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk17_linux_ppc64le_toolchain_config_repo",
+              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_17\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"17\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"//conditions:default\": \":prefix_version_setting\",\n    }),\n    visibility = [\"//visibility:private\"],\n)\ntoolchain(\n    name = \"toolchain\",\n    target_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:ppc\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n    toolchain = \"@remotejdk17_linux_ppc64le//:jdk\",\n)\ntoolchain(\n    name = \"bootstrap_runtime_toolchain\",\n    # These constraints are not required for correctness, but prevent fetches of remote JDK for\n    # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n    # the same configuration, this constraint will not result in toolchain resolution failures.\n    exec_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:ppc\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n    toolchain = \"@remotejdk17_linux_ppc64le//:jdk\",\n)\n"
+            }
+          },
+          "remotejdk17_win_arm64": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk17_win_arm64",
+              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        exclude = [\"jre/bin/plugin2/**\"],\n    ),\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n# This folder holds security policies.\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\", \"release\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre\",\n    ],\n    # Provide the 'java` binary explicitly so that the correct path is used by\n    # Bazel even when the host platform differs from the execution platform.\n    # Exactly one of the two globs will be empty depending on the host platform.\n    # When --incompatible_disallow_empty_glob is enabled, each individual empty\n    # glob will fail without allow_empty = True, even if the overall result is\n    # non-empty.\n    java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n    version = 17,\n)\n",
+              "sha256": "6802c99eae0d788e21f52d03cab2e2b3bf42bc334ca03cbf19f71eb70ee19f85",
+              "strip_prefix": "zulu17.44.53-ca-jdk17.0.8.1-win_aarch64",
+              "urls": [
+                "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.44.53-ca-jdk17.0.8.1-win_aarch64.zip",
+                "https://cdn.azul.com/zulu/bin/zulu17.44.53-ca-jdk17.0.8.1-win_aarch64.zip"
+              ]
+            }
+          },
+          "remote_java_tools_darwin_arm64": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remote_java_tools_darwin_arm64",
+              "sha256": "dab5bb87ec43e980faea6e1cec14bafb217b8e2f5346f53aa784fd715929a930",
+              "urls": [
+                "https://mirror.bazel.build/bazel_java_tools/releases/java/v13.1/java_tools_darwin_arm64-v13.1.zip",
+                "https://github.com/bazelbuild/java_tools/releases/download/java_v13.1/java_tools_darwin_arm64-v13.1.zip"
+              ]
+            }
+          },
+          "remotejdk17_linux_ppc64le": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk17_linux_ppc64le",
+              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        exclude = [\"jre/bin/plugin2/**\"],\n    ),\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n# This folder holds security policies.\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\", \"release\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre\",\n    ],\n    # Provide the 'java` binary explicitly so that the correct path is used by\n    # Bazel even when the host platform differs from the execution platform.\n    # Exactly one of the two globs will be empty depending on the host platform.\n    # When --incompatible_disallow_empty_glob is enabled, each individual empty\n    # glob will fail without allow_empty = True, even if the overall result is\n    # non-empty.\n    java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n    version = 17,\n)\n",
+              "sha256": "00a4c07603d0218cd678461b5b3b7e25b3253102da4022d31fc35907f21a2efd",
+              "strip_prefix": "jdk-17.0.8.1+1",
+              "urls": [
+                "https://mirror.bazel.build/github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.8.1%2B1/OpenJDK17U-jdk_ppc64le_linux_hotspot_17.0.8.1_1.tar.gz",
+                "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.8.1%2B1/OpenJDK17U-jdk_ppc64le_linux_hotspot_17.0.8.1_1.tar.gz"
+              ]
+            }
+          },
+          "remotejdk21_linux_aarch64_toolchain_config_repo": {
+            "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl",
+            "ruleClassName": "_toolchain_config",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk21_linux_aarch64_toolchain_config_repo",
+              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_21\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"21\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"//conditions:default\": \":prefix_version_setting\",\n    }),\n    visibility = [\"//visibility:private\"],\n)\ntoolchain(\n    name = \"toolchain\",\n    target_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:aarch64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n    toolchain = \"@remotejdk21_linux_aarch64//:jdk\",\n)\ntoolchain(\n    name = \"bootstrap_runtime_toolchain\",\n    # These constraints are not required for correctness, but prevent fetches of remote JDK for\n    # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n    # the same configuration, this constraint will not result in toolchain resolution failures.\n    exec_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:aarch64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n    toolchain = \"@remotejdk21_linux_aarch64//:jdk\",\n)\n"
+            }
+          },
+          "remotejdk11_win_arm64_toolchain_config_repo": {
+            "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl",
+            "ruleClassName": "_toolchain_config",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk11_win_arm64_toolchain_config_repo",
+              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_11\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"11\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"//conditions:default\": \":prefix_version_setting\",\n    }),\n    visibility = [\"//visibility:private\"],\n)\ntoolchain(\n    name = \"toolchain\",\n    target_compatible_with = [\"@platforms//os:windows\", \"@platforms//cpu:arm64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n    toolchain = \"@remotejdk11_win_arm64//:jdk\",\n)\ntoolchain(\n    name = \"bootstrap_runtime_toolchain\",\n    # These constraints are not required for correctness, but prevent fetches of remote JDK for\n    # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n    # the same configuration, this constraint will not result in toolchain resolution failures.\n    exec_compatible_with = [\"@platforms//os:windows\", \"@platforms//cpu:arm64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n    toolchain = \"@remotejdk11_win_arm64//:jdk\",\n)\n"
+            }
+          },
+          "local_jdk": {
+            "bzlFile": "@@rules_java~7.1.0//toolchains:local_java_repository.bzl",
+            "ruleClassName": "_local_java_repository_rule",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~local_jdk",
+              "java_home": "",
+              "version": "",
+              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        exclude = [\"jre/bin/plugin2/**\"],\n    ),\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n# This folder holds security policies.\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\", \"release\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre\",\n    ],\n    # Provide the 'java` binary explicitly so that the correct path is used by\n    # Bazel even when the host platform differs from the execution platform.\n    # Exactly one of the two globs will be empty depending on the host platform.\n    # When --incompatible_disallow_empty_glob is enabled, each individual empty\n    # glob will fail without allow_empty = True, even if the overall result is\n    # non-empty.\n    java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n    version = {RUNTIME_VERSION},\n)\n"
+            }
+          },
+          "remote_java_tools_darwin_x86_64": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remote_java_tools_darwin_x86_64",
+              "sha256": "0db40d8505a2b65ef0ed46e4256757807db8162f7acff16225be57c1d5726dbc",
+              "urls": [
+                "https://mirror.bazel.build/bazel_java_tools/releases/java/v13.1/java_tools_darwin_x86_64-v13.1.zip",
+                "https://github.com/bazelbuild/java_tools/releases/download/java_v13.1/java_tools_darwin_x86_64-v13.1.zip"
+              ]
+            }
+          },
+          "remote_java_tools": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remote_java_tools",
+              "sha256": "286bdbbd66e616fc4ed3f90101418729a73baa7e8c23a98ffbef558f74c0ad14",
+              "urls": [
+                "https://mirror.bazel.build/bazel_java_tools/releases/java/v13.1/java_tools-v13.1.zip",
+                "https://github.com/bazelbuild/java_tools/releases/download/java_v13.1/java_tools-v13.1.zip"
+              ]
+            }
+          },
+          "remotejdk17_linux_s390x": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk17_linux_s390x",
+              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        exclude = [\"jre/bin/plugin2/**\"],\n    ),\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n# This folder holds security policies.\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\", \"release\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre\",\n    ],\n    # Provide the 'java` binary explicitly so that the correct path is used by\n    # Bazel even when the host platform differs from the execution platform.\n    # Exactly one of the two globs will be empty depending on the host platform.\n    # When --incompatible_disallow_empty_glob is enabled, each individual empty\n    # glob will fail without allow_empty = True, even if the overall result is\n    # non-empty.\n    java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n    version = 17,\n)\n",
+              "sha256": "ffacba69c6843d7ca70d572489d6cc7ab7ae52c60f0852cedf4cf0d248b6fc37",
+              "strip_prefix": "jdk-17.0.8.1+1",
+              "urls": [
+                "https://mirror.bazel.build/github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.8.1%2B1/OpenJDK17U-jdk_s390x_linux_hotspot_17.0.8.1_1.tar.gz",
+                "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.8.1%2B1/OpenJDK17U-jdk_s390x_linux_hotspot_17.0.8.1_1.tar.gz"
+              ]
+            }
+          },
+          "remotejdk17_win_toolchain_config_repo": {
+            "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl",
+            "ruleClassName": "_toolchain_config",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk17_win_toolchain_config_repo",
+              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_17\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"17\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"//conditions:default\": \":prefix_version_setting\",\n    }),\n    visibility = [\"//visibility:private\"],\n)\ntoolchain(\n    name = \"toolchain\",\n    target_compatible_with = [\"@platforms//os:windows\", \"@platforms//cpu:x86_64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n    toolchain = \"@remotejdk17_win//:jdk\",\n)\ntoolchain(\n    name = \"bootstrap_runtime_toolchain\",\n    # These constraints are not required for correctness, but prevent fetches of remote JDK for\n    # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n    # the same configuration, this constraint will not result in toolchain resolution failures.\n    exec_compatible_with = [\"@platforms//os:windows\", \"@platforms//cpu:x86_64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n    toolchain = \"@remotejdk17_win//:jdk\",\n)\n"
+            }
+          },
+          "remotejdk11_linux_ppc64le": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk11_linux_ppc64le",
+              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        exclude = [\"jre/bin/plugin2/**\"],\n    ),\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n# This folder holds security policies.\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\", \"release\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre\",\n    ],\n    # Provide the 'java` binary explicitly so that the correct path is used by\n    # Bazel even when the host platform differs from the execution platform.\n    # Exactly one of the two globs will be empty depending on the host platform.\n    # When --incompatible_disallow_empty_glob is enabled, each individual empty\n    # glob will fail without allow_empty = True, even if the overall result is\n    # non-empty.\n    java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n    version = 11,\n)\n",
+              "sha256": "a8fba686f6eb8ae1d1a9566821dbd5a85a1108b96ad857fdbac5c1e4649fc56f",
+              "strip_prefix": "jdk-11.0.15+10",
+              "urls": [
+                "https://mirror.bazel.build/github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.15+10/OpenJDK11U-jdk_ppc64le_linux_hotspot_11.0.15_10.tar.gz",
+                "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.15+10/OpenJDK11U-jdk_ppc64le_linux_hotspot_11.0.15_10.tar.gz"
+              ]
+            }
+          },
+          "remotejdk11_macos_aarch64": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk11_macos_aarch64",
+              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        exclude = [\"jre/bin/plugin2/**\"],\n    ),\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n# This folder holds security policies.\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\", \"release\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre\",\n    ],\n    # Provide the 'java` binary explicitly so that the correct path is used by\n    # Bazel even when the host platform differs from the execution platform.\n    # Exactly one of the two globs will be empty depending on the host platform.\n    # When --incompatible_disallow_empty_glob is enabled, each individual empty\n    # glob will fail without allow_empty = True, even if the overall result is\n    # non-empty.\n    java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n    version = 11,\n)\n",
+              "sha256": "7632bc29f8a4b7d492b93f3bc75a7b61630894db85d136456035ab2a24d38885",
+              "strip_prefix": "zulu11.66.15-ca-jdk11.0.20-macosx_aarch64",
+              "urls": [
+                "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu11.66.15-ca-jdk11.0.20-macosx_aarch64.tar.gz",
+                "https://cdn.azul.com/zulu/bin/zulu11.66.15-ca-jdk11.0.20-macosx_aarch64.tar.gz"
+              ]
+            }
+          },
+          "remotejdk21_win_toolchain_config_repo": {
+            "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl",
+            "ruleClassName": "_toolchain_config",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk21_win_toolchain_config_repo",
+              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_21\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"21\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"//conditions:default\": \":prefix_version_setting\",\n    }),\n    visibility = [\"//visibility:private\"],\n)\ntoolchain(\n    name = \"toolchain\",\n    target_compatible_with = [\"@platforms//os:windows\", \"@platforms//cpu:x86_64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n    toolchain = \"@remotejdk21_win//:jdk\",\n)\ntoolchain(\n    name = \"bootstrap_runtime_toolchain\",\n    # These constraints are not required for correctness, but prevent fetches of remote JDK for\n    # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n    # the same configuration, this constraint will not result in toolchain resolution failures.\n    exec_compatible_with = [\"@platforms//os:windows\", \"@platforms//cpu:x86_64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n    toolchain = \"@remotejdk21_win//:jdk\",\n)\n"
+            }
+          }
+        }
+      }
+    },
+    "@@rules_python~0.4.0//bzlmod:extensions.bzl%pip_install": {
+      "general": {
+        "bzlTransitiveDigest": "rTru6D/C8vlaQDk4HOKyx4U/l6PCnj3Aq/gLraAqHgQ=",
+        "accumulatedFileDigests": {},
+        "envVariables": {},
+        "generatedRepoSpecs": {
+          "pypi__pkginfo": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_python~0.4.0~pip_install~pypi__pkginfo",
+              "url": "https://files.pythonhosted.org/packages/77/83/1ef010f7c4563e218854809c0dff9548de65ebec930921dedf6ee5981f27/pkginfo-1.7.1-py2.py3-none-any.whl",
+              "sha256": "37ecd857b47e5f55949c41ed061eb51a0bee97a87c969219d144c0e023982779",
+              "type": "zip",
+              "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:defs.bzl\", \"py_library\")\n\npy_library(\n    name = \"lib\",\n    srcs = glob([\"**/*.py\"]),\n    data = glob([\"**/*\"], exclude=[\"**/*.py\", \"**/* *\", \"BUILD\", \"WORKSPACE\"]),\n    # This makes this directory a top-level in the python import\n    # search path for anything that depends on this.\n    imports = [\".\"],\n)\n"
+            }
+          },
+          "pypi__wheel": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_python~0.4.0~pip_install~pypi__wheel",
+              "url": "https://files.pythonhosted.org/packages/65/63/39d04c74222770ed1589c0eaba06c05891801219272420b40311cd60c880/wheel-0.36.2-py2.py3-none-any.whl",
+              "sha256": "78b5b185f0e5763c26ca1e324373aadd49182ca90e825f7853f4b2509215dc0e",
+              "type": "zip",
+              "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:defs.bzl\", \"py_library\")\n\npy_library(\n    name = \"lib\",\n    srcs = glob([\"**/*.py\"]),\n    data = glob([\"**/*\"], exclude=[\"**/*.py\", \"**/* *\", \"BUILD\", \"WORKSPACE\"]),\n    # This makes this directory a top-level in the python import\n    # search path for anything that depends on this.\n    imports = [\".\"],\n)\n"
+            }
+          },
+          "pypi__click": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_python~0.4.0~pip_install~pypi__click",
+              "url": "https://files.pythonhosted.org/packages/76/0a/b6c5f311e32aeb3b406e03c079ade51e905ea630fc19d1262a46249c1c86/click-8.0.1-py3-none-any.whl",
+              "sha256": "fba402a4a47334742d782209a7c79bc448911afe1149d07bdabdf480b3e2f4b6",
+              "type": "zip",
+              "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:defs.bzl\", \"py_library\")\n\npy_library(\n    name = \"lib\",\n    srcs = glob([\"**/*.py\"]),\n    data = glob([\"**/*\"], exclude=[\"**/*.py\", \"**/* *\", \"BUILD\", \"WORKSPACE\"]),\n    # This makes this directory a top-level in the python import\n    # search path for anything that depends on this.\n    imports = [\".\"],\n)\n"
+            }
+          },
+          "pypi__pip": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_python~0.4.0~pip_install~pypi__pip",
+              "url": "https://files.pythonhosted.org/packages/47/ca/f0d790b6e18b3a6f3bd5e80c2ee4edbb5807286c21cdd0862ca933f751dd/pip-21.1.3-py3-none-any.whl",
+              "sha256": "78cb760711fedc073246543801c84dc5377affead832e103ad0211f99303a204",
+              "type": "zip",
+              "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:defs.bzl\", \"py_library\")\n\npy_library(\n    name = \"lib\",\n    srcs = glob([\"**/*.py\"]),\n    data = glob([\"**/*\"], exclude=[\"**/*.py\", \"**/* *\", \"BUILD\", \"WORKSPACE\"]),\n    # This makes this directory a top-level in the python import\n    # search path for anything that depends on this.\n    imports = [\".\"],\n)\n"
+            }
+          },
+          "pypi__pip_tools": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_python~0.4.0~pip_install~pypi__pip_tools",
+              "url": "https://files.pythonhosted.org/packages/6d/16/75d65bdccd48bb59a08e2bf167b01d8532f65604270d0a292f0f16b7b022/pip_tools-5.5.0-py2.py3-none-any.whl",
+              "sha256": "10841c1e56c234d610d0466447685b9ea4ee4a2c274f858c0ef3c33d9bd0d985",
+              "type": "zip",
+              "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:defs.bzl\", \"py_library\")\n\npy_library(\n    name = \"lib\",\n    srcs = glob([\"**/*.py\"]),\n    data = glob([\"**/*\"], exclude=[\"**/*.py\", \"**/* *\", \"BUILD\", \"WORKSPACE\"]),\n    # This makes this directory a top-level in the python import\n    # search path for anything that depends on this.\n    imports = [\".\"],\n)\n"
+            }
+          },
+          "pypi__setuptools": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_python~0.4.0~pip_install~pypi__setuptools",
+              "url": "https://files.pythonhosted.org/packages/a2/e1/902fbc2f61ad6243cd3d57ffa195a9eb123021ec912ec5d811acf54a39f8/setuptools-57.1.0-py3-none-any.whl",
+              "sha256": "ddae4c1b9220daf1e32ba9d4e3714df6019c5b583755559be84ff8199f7e1fe3",
+              "type": "zip",
+              "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:defs.bzl\", \"py_library\")\n\npy_library(\n    name = \"lib\",\n    srcs = glob([\"**/*.py\"]),\n    data = glob([\"**/*\"], exclude=[\"**/*.py\", \"**/* *\", \"BUILD\", \"WORKSPACE\"]),\n    # This makes this directory a top-level in the python import\n    # search path for anything that depends on this.\n    imports = [\".\"],\n)\n"
+            }
+          }
+        }
+      }
+    }
+  }
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_7/cpp-test.nix b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_7/cpp-test.nix
new file mode 100644
index 000000000000..15854d524283
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_7/cpp-test.nix
@@ -0,0 +1,89 @@
+{
+  bazel
+, bazel-examples
+, bazelTest
+, callPackage
+, darwin
+, distDir
+, extraBazelArgs ? ""
+, Foundation ? null
+, lib
+, runLocal
+, runtimeShell
+, stdenv
+, symlinkJoin
+, writeScript
+, writeText
+}:
+
+let
+
+  localDistDir = callPackage ./bazel-repository-cache.nix {
+    lockfile = ./cpp-test-MODULE.bazel.lock;
+
+    # Take all the rules_ deps, bazel_ deps and their transitive dependencies,
+    # but none of the platform-specific binaries, as they are large and useless.
+    requiredDepNamePredicate = name:
+      null == builtins.match ".*(macos|osx|linux|win|apple|android|maven).*" name
+      && null != builtins.match "(platforms|com_google_|protobuf|rules_|bazel_).*" name ;
+  };
+
+  mergedDistDir = symlinkJoin {
+    name = "mergedDistDir";
+    paths = [ localDistDir distDir ];
+  };
+
+  toolsBazel = writeScript "bazel" ''
+    #! ${runtimeShell}
+
+    export CXX='${stdenv.cc}/bin/clang++'
+    export LD='${darwin.cctools}/bin/ld'
+    export LIBTOOL='${darwin.cctools}/bin/libtool'
+    export CC='${stdenv.cc}/bin/clang'
+
+    # XXX: hack for macosX, this flags disable bazel usage of xcode
+    # See: https://github.com/bazelbuild/bazel/issues/4231
+    export BAZEL_USE_CPP_ONLY_TOOLCHAIN=1
+
+    exec "$BAZEL_REAL" "$@"
+  '';
+
+  workspaceDir = runLocal "our_workspace" {} (''
+    cp -r ${bazel-examples}/cpp-tutorial/stage3 $out
+    find $out -type d -exec chmod 755 {} \;
+    cp ${./cpp-test-MODULE.bazel} $out/MODULE.bazel
+    cp ${./cpp-test-MODULE.bazel.lock} $out/MODULE.bazel.lock
+    echo > $out/WORSPACE
+  ''
+  + (lib.optionalString stdenv.isDarwin ''
+    mkdir $out/tools
+    cp ${toolsBazel} $out/tools/bazel
+  ''));
+
+  testBazel = bazelTest {
+    name = "bazel-test-cpp";
+    inherit workspaceDir;
+    bazelPkg = bazel;
+    bazelScript = ''
+      ${bazel}/bin/bazel build //... \
+        --enable_bzlmod \
+        --verbose_failures \
+        --repository_cache=${mergedDistDir} \
+        --curses=no \
+    '' + lib.optionalString (stdenv.isDarwin) ''
+        --cxxopt=-x --cxxopt=c++ \
+        --host_cxxopt=-x --host_cxxopt=c++ \
+    '' + lib.optionalString (stdenv.cc.isClang && stdenv ? cc.libcxx.cxxabi.libName) ''
+        --linkopt=-Wl,-l${stdenv.cc.libcxx.cxxabi.libName} \
+        --linkopt=-L${stdenv.cc.libcxx.cxxabi}/lib \
+        --host_linkopt=-Wl,-l${stdenv.cc.libcxx.cxxabi.libName} \
+        --host_linkopt=-L${stdenv.cc.libcxx.cxxabi}/lib \
+    '' + lib.optionalString (stdenv.isDarwin && Foundation != null) ''
+        --linkopt=-Wl,-F${Foundation}/Library/Frameworks \
+        --linkopt=-L${darwin.libobjc}/lib \
+    '' + ''
+
+    '';
+  };
+
+in testBazel
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_7/darwin_sleep.patch b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_7/darwin_sleep.patch
new file mode 100644
index 000000000000..731ede89388a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_7/darwin_sleep.patch
@@ -0,0 +1,56 @@
+diff --git a/src/main/native/darwin/sleep_prevention_jni.cc b/src/main/native/darwin/sleep_prevention_jni.cc
+index 67c35b201e..e50a58320e 100644
+--- a/src/main/native/darwin/sleep_prevention_jni.cc
++++ b/src/main/native/darwin/sleep_prevention_jni.cc
+@@ -33,31 +33,13 @@ static int g_sleep_state_stack = 0;
+ static IOPMAssertionID g_sleep_state_assertion = kIOPMNullAssertionID;
+ 
+ int portable_push_disable_sleep() {
+-  std::lock_guard<std::mutex> lock(g_sleep_state_mutex);
+-  BAZEL_CHECK_GE(g_sleep_state_stack, 0);
+-  if (g_sleep_state_stack == 0) {
+-    BAZEL_CHECK_EQ(g_sleep_state_assertion, kIOPMNullAssertionID);
+-    CFStringRef reasonForActivity = CFSTR("build.bazel");
+-    IOReturn success = IOPMAssertionCreateWithName(
+-        kIOPMAssertionTypeNoIdleSleep, kIOPMAssertionLevelOn, reasonForActivity,
+-        &g_sleep_state_assertion);
+-    BAZEL_CHECK_EQ(success, kIOReturnSuccess);
+-  }
+-  g_sleep_state_stack += 1;
+-  return 0;
++  // Unreliable, disable for now
++  return -1;
+ }
+ 
+ int portable_pop_disable_sleep() {
+-  std::lock_guard<std::mutex> lock(g_sleep_state_mutex);
+-  BAZEL_CHECK_GT(g_sleep_state_stack, 0);
+-  g_sleep_state_stack -= 1;
+-  if (g_sleep_state_stack == 0) {
+-    BAZEL_CHECK_NE(g_sleep_state_assertion, kIOPMNullAssertionID);
+-    IOReturn success = IOPMAssertionRelease(g_sleep_state_assertion);
+-    BAZEL_CHECK_EQ(success, kIOReturnSuccess);
+-    g_sleep_state_assertion = kIOPMNullAssertionID;
+-  }
+-  return 0;
++  // Unreliable, disable for now
++  return -1;
+ }
+ 
+ }  // namespace blaze_jni
+diff --git a/src/main/native/darwin/system_suspension_monitor_jni.cc b/src/main/native/darwin/system_suspension_monitor_jni.cc
+index 3483aa7935..51782986ec 100644
+--- a/src/main/native/darwin/system_suspension_monitor_jni.cc
++++ b/src/main/native/darwin/system_suspension_monitor_jni.cc
+@@ -83,10 +83,7 @@ void portable_start_suspend_monitoring() {
+     // Register to receive system sleep notifications.
+     // Testing needs to be done manually. Use the logging to verify
+     // that sleeps are being caught here.
+-    suspend_state.connect_port = IORegisterForSystemPower(
+-        &suspend_state, &notifyPortRef, SleepCallBack, &notifierObject);
+-    BAZEL_CHECK_NE(suspend_state.connect_port, MACH_PORT_NULL);
+-    IONotificationPortSetDispatchQueue(notifyPortRef, queue);
++    // XXX: Unreliable, disable for now
+ 
+     // Register to deal with SIGCONT.
+     // We register for SIGCONT because we can't catch SIGSTOP.
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_7/default.nix b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_7/default.nix
new file mode 100644
index 000000000000..eb66b676836b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_7/default.nix
@@ -0,0 +1,586 @@
+{ stdenv
+  # nix tooling and utilities
+, callPackage
+, lib
+, fetchurl
+, makeWrapper
+, writeTextFile
+, substituteAll
+, writeShellApplication
+, makeBinaryWrapper
+  # this package (through the fixpoint glass)
+, bazel_self
+  # native build inputs
+, runtimeShell
+, zip
+, unzip
+, bash
+, coreutils
+, which
+, gawk
+, gnused
+, gnutar
+, gnugrep
+, gzip
+, findutils
+, diffutils
+, gnupatch
+, file
+, installShellFiles
+, lndir
+, python3
+  # Apple dependencies
+, cctools
+, libcxx
+, sigtool
+, CoreFoundation
+, CoreServices
+, Foundation
+, IOKit
+  # Allow to independently override the jdks used to build and run respectively
+, buildJdk
+, runJdk
+  # Always assume all markers valid (this is needed because we remove markers; they are non-deterministic).
+  # Also, don't clean up environment variables (so that NIX_ environment variables are passed to compilers).
+, enableNixHacks ? false
+}:
+
+let
+  version = "7.0.0";
+  sourceRoot = ".";
+
+  src = fetchurl {
+    url = "https://github.com/bazelbuild/bazel/releases/download/${version}/bazel-${version}-dist.zip";
+    hash = "sha256-R35U9jdAAfQ5qUcbod6deCTa8SnblVEISezF4ZzogXA=";
+  };
+
+  # Use builtins.fetchurl to avoid IFD, in particular on hydra
+  #lockfile = builtins.fetchurl {
+  #  url = "https://raw.githubusercontent.com/bazelbuild/bazel/release-${version}/MODULE.bazel.lock";
+  #  sha256 = "sha256-5xPpCeWVKVp1s4RVce/GoW2+fH8vniz5G1MNI4uezpc=";
+  #};
+  # Use a local copy of the above lockfile to make ofborg happy.
+  lockfile = ./MODULE.bazel.lock;
+
+  # Two-in-one format
+  distDir = repoCache;
+  repoCache = callPackage ./bazel-repository-cache.nix {
+    inherit lockfile;
+
+    # We use the release tarball that already has everything bundled so we
+    # should not need any extra external deps. But our nonprebuilt java
+    # toolchains hack needs just one non bundled dep.
+    requiredDepNamePredicate = name:
+      null != builtins.match "rules_java~.*~toolchains~remote_java_tools" name;
+  };
+
+  defaultShellUtils =
+    # Keep this list conservative. For more exotic tools, prefer to use
+    # @rules_nixpkgs to pull in tools from the nix repository. Example:
+    #
+    # WORKSPACE:
+    #
+    #     nixpkgs_git_repository(
+    #         name = "nixpkgs",
+    #         revision = "def5124ec8367efdba95a99523dd06d918cb0ae8",
+    #     )
+    #
+    #     # This defines an external Bazel workspace.
+    #     nixpkgs_package(
+    #         name = "bison",
+    #         repositories = { "nixpkgs": "@nixpkgs//:default.nix" },
+    #     )
+    #
+    # some/BUILD.bazel:
+    #
+    #     genrule(
+    #        ...
+    #        cmd = "$(location @bison//:bin/bison) -other -args",
+    #        tools = [
+    #            ...
+    #            "@bison//:bin/bison",
+    #        ],
+    #     )
+    [
+      bash
+      coreutils
+      diffutils
+      file
+      findutils
+      gawk
+      gnugrep
+      gnupatch
+      gnused
+      gnutar
+      gzip
+      python3
+      unzip
+      which
+      zip
+    ];
+
+  defaultShellPath = lib.makeBinPath defaultShellUtils;
+
+  bashWithDefaultShellUtilsSh = writeShellApplication {
+    name = "bash";
+    runtimeInputs = defaultShellUtils;
+    text = ''
+      if [[ "$PATH" == "/no-such-path" ]]; then
+        export PATH=${defaultShellPath}
+      fi
+      exec ${bash}/bin/bash "$@"
+    '';
+  };
+
+  # Script-based interpreters in shebangs aren't guaranteed to work,
+  # especially on MacOS. So let's produce a binary
+  bashWithDefaultShellUtils = stdenv.mkDerivation {
+    name = "bash";
+    src = bashWithDefaultShellUtilsSh;
+    nativeBuildInputs = [ makeBinaryWrapper ];
+    buildPhase = ''
+      makeWrapper ${bashWithDefaultShellUtilsSh}/bin/bash $out/bin/bash
+    '';
+  };
+
+  platforms = lib.platforms.linux ++ lib.platforms.darwin;
+
+  inherit (stdenv.hostPlatform) isDarwin isAarch64;
+
+  system = if isDarwin then "darwin" else "linux";
+
+  # on aarch64 Darwin, `uname -m` returns "arm64"
+  arch = with stdenv.hostPlatform; if isDarwin && isAarch64 then "arm64" else parsed.cpu.name;
+
+  bazelRC = writeTextFile {
+    name = "bazel-rc";
+    text = ''
+      startup --server_javabase=${runJdk}
+
+      # Register nix-specific nonprebuilt java toolchains
+      build --extra_toolchains=@bazel_tools//tools/jdk:all
+      # and set bazel to use them by default
+      build --tool_java_runtime_version=local_jdk
+      build --java_runtime_version=local_jdk
+
+      # load default location for the system wide configuration
+      try-import /etc/bazel.bazelrc
+    '';
+  };
+
+in
+stdenv.mkDerivation rec {
+  pname = "bazel";
+  inherit version src;
+  inherit sourceRoot;
+
+  patches = [
+    # Remote java toolchains do not work on NixOS because they download binaries,
+    # so we need to use the @local_jdk//:jdk
+    # It could in theory be done by registering @local_jdk//:all toolchains,
+    # but these java toolchains still bundle binaries for ijar and stuff. So we
+    # need a nonprebult java toolchain (where ijar and stuff is built from
+    # sources).
+    # There is no such java toolchain, so we introduce one here.
+    # By providing no version information, the toolchain will set itself to the
+    # version of $JAVA_HOME/bin/java, just like the local_jdk does.
+    # To ensure this toolchain gets used, we can set
+    # --{,tool_}java_runtime_version=local_jdk and rely on the fact no java
+    # toolchain registered by default uses the local_jdk, making the selection
+    # unambiguous.
+    # This toolchain has the advantage that it can use any ambiant java jdk,
+    # not only a given, fixed version. It allows bazel to work correctly in any
+    # environment where JAVA_HOME is set to the right java version, like inside
+    # nix derivations.
+    # However, this patch breaks bazel hermeticity, by picking the ambiant java
+    # version instead of the more hermetic remote_jdk prebuilt binaries that
+    # rules_java provide by default. It also requires the user to have a
+    # JAVA_HOME set to the exact version required by the project.
+    # With more code, we could define java toolchains for all the java versions
+    # supported by the jdk as in rules_java's
+    # toolchains/local_java_repository.bzl, but this is not implemented here.
+    # To recover vanilla behavior, non NixOS users can set
+    # --{,tool_}java_runtime_version=remote_jdk, effectively reverting the
+    # effect of this patch and the fake system bazelrc.
+    ./java_toolchain.patch
+
+    # Bazel integrates with apple IOKit to inhibit and track system sleep.
+    # Inside the darwin sandbox, these API calls are blocked, and bazel
+    # crashes. It seems possible to allow these APIs inside the sandbox, but it
+    # feels simpler to patch bazel not to use it at all. So our bazel is
+    # incapable of preventing system sleep, which is a small price to pay to
+    # guarantee that it will always run in any nix context.
+    #
+    # See also ./bazel_darwin_sandbox.patch in bazel_5. That patch uses
+    # NIX_BUILD_TOP env var to conditionnally disable sleep features inside the
+    # sandbox. Oddly, bazel_6 does not need that patch :-/.
+    #
+    # If you want to investigate the sandbox profile path,
+    # IORegisterForSystemPower can be allowed with
+    #
+    #     propagatedSandboxProfile = ''
+    #       (allow iokit-open (iokit-user-client-class "RootDomainUserClient"))
+    #     '';
+    #
+    # I do not know yet how to allow IOPMAssertion{CreateWithName,Release}
+    ./darwin_sleep.patch
+
+    # Fix DARWIN_XCODE_LOCATOR_COMPILE_COMMAND by removing multi-arch support.
+    # Nixpkgs toolcahins do not support that (yet?) and get confused.
+    # Also add an explicit /usr/bin prefix that will be patched below.
+    ./xcode_locator.patch
+
+    # On Darwin, the last argument to gcc is coming up as an empty string. i.e: ''
+    # This is breaking the build of any C target. This patch removes the last
+    # argument if it's found to be an empty string.
+    ../trim-last-argument-to-gcc-if-empty.patch
+
+    # --experimental_strict_action_env (which may one day become the default
+    # see bazelbuild/bazel#2574) hardcodes the default
+    # action environment to a non hermetic value (e.g. "/usr/local/bin").
+    # This is non hermetic on non-nixos systems. On NixOS, bazel cannot find the required binaries.
+    # So we are replacing this bazel paths by defaultShellPath,
+    # improving hermeticity and making it work in nixos.
+    (substituteAll {
+      src = ../strict_action_env.patch;
+      strictActionEnvPatch = defaultShellPath;
+    })
+
+    # bazel reads its system bazelrc in /etc
+    # override this path to a builtin one
+    (substituteAll {
+      src = ../bazel_rc.patch;
+      bazelSystemBazelRCPath = bazelRC;
+    })
+  ]
+  # See enableNixHacks argument above.
+  ++ lib.optional enableNixHacks ./nix-hacks.patch;
+
+  postPatch =
+    let
+      # Workaround for https://github.com/NixOS/nixpkgs/issues/166205
+      nixpkgs166205ldflag = lib.optionalString stdenv.cc.isClang "-l${stdenv.cc.libcxx.cxxabi.libName}";
+      darwinPatches = ''
+        bazelLinkFlags () {
+          eval set -- "$NIX_LDFLAGS"
+          local flag
+          for flag in "$@"; do
+            printf ' -Wl,%s' "$flag"
+          done
+        }
+
+        # Explicitly configure gcov since we don't have it on Darwin, so autodetection fails
+        export GCOV=${coreutils}/bin/false
+
+        # Framework search paths aren't added by bintools hook
+        # https://github.com/NixOS/nixpkgs/pull/41914
+        export NIX_LDFLAGS+=" -F${CoreFoundation}/Library/Frameworks -F${CoreServices}/Library/Frameworks -F${Foundation}/Library/Frameworks -F${IOKit}/Library/Frameworks ${nixpkgs166205ldflag}"
+
+        # libcxx includes aren't added by libcxx hook
+        # https://github.com/NixOS/nixpkgs/pull/41589
+        export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -isystem ${lib.getDev libcxx}/include/c++/v1"
+        # for CLang 16 compatibility in external/upb dependency
+        export NIX_CFLAGS_COMPILE+=" -Wno-gnu-offsetof-extensions"
+
+        # This variable is used by bazel to propagate env vars for homebrew,
+        # which is exactly what we need too.
+        export HOMEBREW_RUBY_PATH="foo"
+
+        # don't use system installed Xcode to run clang, use Nix clang instead
+        sed -i -E \
+          -e "s;/usr/bin/xcrun (--sdk macosx )?clang;${stdenv.cc}/bin/clang $NIX_CFLAGS_COMPILE $(bazelLinkFlags) -framework CoreFoundation;g" \
+          -e "s;/usr/bin/codesign;CODESIGN_ALLOCATE=${cctools}/bin/${cctools.targetPrefix}codesign_allocate ${sigtool}/bin/codesign;" \
+          scripts/bootstrap/compile.sh \
+          tools/osx/BUILD
+
+        # nixpkgs's libSystem cannot use pthread headers directly, must import GCD headers instead
+        sed -i -e "/#include <pthread\/spawn.h>/i #include <dispatch/dispatch.h>" src/main/cpp/blaze_util_darwin.cc
+
+        # XXX: What do these do ?
+        sed -i -e 's;"/usr/bin/libtool";_find_generic(repository_ctx, "libtool", "LIBTOOL", overriden_tools);g' tools/cpp/unix_cc_configure.bzl
+        wrappers=( tools/cpp/osx_cc_wrapper.sh.tpl )
+        for wrapper in "''${wrappers[@]}"; do
+          sedVerbose $wrapper \
+            -e "s,/usr/bin/xcrun install_name_tool,${cctools}/bin/install_name_tool,g"
+        done
+      '';
+
+      genericPatches = ''
+        # unzip builtins_bzl.zip so the contents get patched
+        builtins_bzl=src/main/java/com/google/devtools/build/lib/bazel/rules/builtins_bzl
+        unzip ''${builtins_bzl}.zip -d ''${builtins_bzl}_zip >/dev/null
+        rm ''${builtins_bzl}.zip
+        builtins_bzl=''${builtins_bzl}_zip/builtins_bzl
+
+        # md5sum is part of coreutils
+        sed -i 's|/sbin/md5|md5sum|g' src/BUILD third_party/ijar/test/testenv.sh
+
+        echo
+        echo "Substituting */bin/* hardcoded paths in src/main/java/com/google/devtools"
+        # Prefilter the files with grep for speed
+        grep -rlZ /bin/ \
+          src/main/java/com/google/devtools \
+          src/main/starlark/builtins_bzl/common/python \
+          tools \
+        | while IFS="" read -r -d "" path; do
+          # If you add more replacements here, you must change the grep above!
+          # Only files containing /bin are taken into account.
+          sedVerbose "$path" \
+            -e 's!/usr/local/bin/bash!${bashWithDefaultShellUtils}/bin/bash!g' \
+            -e 's!/usr/bin/bash!${bashWithDefaultShellUtils}/bin/bash!g' \
+            -e 's!/bin/bash!${bashWithDefaultShellUtils}/bin/bash!g' \
+            -e 's!/usr/bin/env bash!${bashWithDefaultShellUtils}/bin/bash!g' \
+            -e 's!/usr/bin/env python2!${python3}/bin/python!g' \
+            -e 's!/usr/bin/env python!${python3}/bin/python!g' \
+            -e 's!/usr/bin/env!${coreutils}/bin/env!g' \
+            -e 's!/bin/true!${coreutils}/bin/true!g'
+        done
+
+        # Fixup scripts that generate scripts. Not fixed up by patchShebangs below.
+        sedVerbose scripts/bootstrap/compile.sh \
+          -e 's!/bin/bash!${bashWithDefaultShellUtils}/bin/bash!g' \
+          -e 's!shasum -a 256!sha256sum!g'
+
+        # Augment bundled repository_cache with our extra paths
+        ${lndir}/bin/lndir ${repoCache}/content_addressable \
+          $PWD/derived/repository_cache/content_addressable
+
+        # Add required flags to bazel command line.
+        # XXX: It would suit a bazelrc file better, but I found no way to pass it.
+        #      It seems that bazel bootstrapping ignores it.
+        #      Passing EXTRA_BAZEL_ARGS is tricky due to quoting.
+        sedVerbose compile.sh \
+          -e "/bazel_build /a\  --verbose_failures \\\\" \
+          -e "/bazel_build /a\  --curses=no \\\\" \
+          -e "/bazel_build /a\  --features=-layering_check \\\\" \
+          -e "/bazel_build /a\  --experimental_strict_java_deps=off \\\\" \
+          -e "/bazel_build /a\  --strict_proto_deps=off \\\\" \
+          -e "/bazel_build /a\  --toolchain_resolution_debug='@bazel_tools//tools/jdk:(runtime_)?toolchain_type' \\\\" \
+          -e "/bazel_build /a\  --tool_java_runtime_version=local_jdk_17 \\\\" \
+          -e "/bazel_build /a\  --java_runtime_version=local_jdk_17 \\\\" \
+          -e "/bazel_build /a\  --tool_java_language_version=17 \\\\" \
+          -e "/bazel_build /a\  --java_language_version=17 \\\\" \
+          -e "/bazel_build /a\  --extra_toolchains=@bazel_tools//tools/jdk:all \\\\" \
+
+        # Also build parser_deploy.jar with bootstrap bazel
+        # TODO: Turn into a proper patch
+        sedVerbose compile.sh \
+          -e 's!bazel_build !bazel_build src/tools/execlog:parser_deploy.jar !' \
+          -e 's!clear_log!cp $(get_bazel_bin_path)/src/tools/execlog/parser_deploy.jar output\nclear_log!'
+
+        # append the PATH with defaultShellPath in tools/bash/runfiles/runfiles.bash
+        echo "PATH=\$PATH:${defaultShellPath}" >> runfiles.bash.tmp
+        cat tools/bash/runfiles/runfiles.bash >> runfiles.bash.tmp
+        mv runfiles.bash.tmp tools/bash/runfiles/runfiles.bash
+
+        # reconstruct the now patched builtins_bzl.zip
+        pushd src/main/java/com/google/devtools/build/lib/bazel/rules/builtins_bzl_zip &>/dev/null
+          zip ../builtins_bzl.zip $(find builtins_bzl -type f) >/dev/null
+          rm -rf builtins_bzl
+        popd &>/dev/null
+        rmdir src/main/java/com/google/devtools/build/lib/bazel/rules/builtins_bzl_zip
+
+        patchShebangs . >/dev/null
+      '';
+    in
+    ''
+      function sedVerbose() {
+        local path=$1; shift;
+        sed -i".bak-nix" "$path" "$@"
+        diff -U0 "$path.bak-nix" "$path" | sed "s/^/  /" || true
+        rm -f "$path.bak-nix"
+      }
+    ''
+    + lib.optionalString stdenv.hostPlatform.isDarwin darwinPatches
+    + genericPatches;
+
+  meta = with lib; {
+    homepage = "https://github.com/bazelbuild/bazel/";
+    description = "Build tool that builds code quickly and reliably";
+    sourceProvenance = with sourceTypes; [
+      fromSource
+      binaryBytecode # source bundles dependencies as jars
+    ];
+    license = licenses.asl20;
+    maintainers = lib.teams.bazel.members;
+    inherit platforms;
+  };
+
+  # Bazel starts a local server and needs to bind a local address.
+  __darwinAllowLocalNetworking = true;
+
+  buildInputs = [ buildJdk bashWithDefaultShellUtils ] ++ defaultShellUtils;
+
+  # when a command can’t be found in a bazel build, you might also
+  # need to add it to `defaultShellPath`.
+  nativeBuildInputs = [
+    installShellFiles
+    makeWrapper
+    python3
+    unzip
+    which
+    zip
+    python3.pkgs.absl-py # Needed to build fish completion
+  ] ++ lib.optionals (stdenv.isDarwin) [
+    cctools
+    libcxx
+    Foundation
+    CoreFoundation
+    CoreServices
+  ];
+
+  # Bazel makes extensive use of symlinks in the WORKSPACE.
+  # This causes problems with infinite symlinks if the build output is in the same location as the
+  # Bazel WORKSPACE. This is why before executing the build, the source code is moved into a
+  # subdirectory.
+  # Failing to do this causes "infinite symlink expansion detected"
+  preBuildPhases = [ "preBuildPhase" ];
+  preBuildPhase = ''
+    mkdir bazel_src
+    shopt -s dotglob extglob
+    mv !(bazel_src) bazel_src
+  '';
+  buildPhase = ''
+    runHook preBuild
+
+    # Increasing memory during compilation might be necessary.
+    # export BAZEL_JAVAC_OPTS="-J-Xmx2g -J-Xms200m"
+
+    # If EMBED_LABEL isn't set, it'd be auto-detected from CHANGELOG.md
+    # and `git rev-parse --short HEAD` which would result in
+    # "3.7.0- (@non-git)" due to non-git build and incomplete changelog.
+    # Actual bazel releases use scripts/release/common.sh which is based
+    # on branch/tag information which we don't have with tarball releases.
+    # Note that .bazelversion is always correct and is based on bazel-*
+    # executable name, version checks should work fine
+    export EMBED_LABEL="${version}- (@non-git)"
+    echo "Stage 1 - Running bazel bootstrap script"
+    ${bash}/bin/bash ./bazel_src/compile.sh
+
+    # XXX: get rid of this, or move it to another stage.
+    # It is plain annoying when builds fail.
+    echo "Stage 2 - Generate bazel completions"
+    ${bash}/bin/bash ./bazel_src/scripts/generate_bash_completion.sh \
+        --bazel=./bazel_src/output/bazel \
+        --output=./bazel_src/output/bazel-complete.bash \
+        --prepend=./bazel_src/scripts/bazel-complete-header.bash \
+        --prepend=./bazel_src/scripts/bazel-complete-template.bash
+    ${python3}/bin/python3 ./bazel_src/scripts/generate_fish_completion.py \
+        --bazel=./bazel_src/output/bazel \
+        --output=./bazel_src/output/bazel-complete.fish
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+
+    # official wrapper scripts that searches for $WORKSPACE_ROOT/tools/bazel if
+    # it can’t find something in tools, it calls
+    # $out/bin/bazel-{version}-{os_arch} The binary _must_ exist with this
+    # naming if your project contains a .bazelversion file.
+    cp ./bazel_src/scripts/packages/bazel.sh $out/bin/bazel
+    versionned_bazel="$out/bin/bazel-${version}-${system}-${arch}"
+    mv ./bazel_src/output/bazel "$versionned_bazel"
+    wrapProgram "$versionned_bazel" --suffix PATH : ${defaultShellPath}
+
+    mkdir $out/share
+    cp ./bazel_src/output/parser_deploy.jar $out/share/parser_deploy.jar
+    cat <<EOF > $out/bin/bazel-execlog
+    #!${runtimeShell} -e
+    ${runJdk}/bin/java -jar $out/share/parser_deploy.jar \$@
+    EOF
+    chmod +x $out/bin/bazel-execlog
+
+    # shell completion files
+    installShellCompletion --bash \
+      --name bazel.bash \
+      ./bazel_src/output/bazel-complete.bash
+    installShellCompletion --zsh \
+      --name _bazel \
+      ./bazel_src/scripts/zsh_completion/_bazel
+    installShellCompletion --fish \
+      --name bazel.fish \
+      ./bazel_src/output/bazel-complete.fish
+  '';
+
+  installCheckPhase = ''
+    export TEST_TMPDIR=$(pwd)
+
+    hello_test () {
+      $out/bin/bazel test \
+        --test_output=errors \
+        examples/cpp:hello-success_test \
+        examples/java-native/src/test/java/com/example/myproject:hello
+    }
+
+    cd ./bazel_src
+
+    # If .bazelversion file is present in dist files and doesn't match `bazel` version
+    # running `bazel` command within bazel_src will fail.
+    # Let's remove .bazelversion within the test, if present it is meant to indicate bazel version
+    # to compile bazel with, not version of bazel to be built and tested.
+    rm -f .bazelversion
+
+    # test whether $WORKSPACE_ROOT/tools/bazel works
+
+    mkdir -p tools
+    cat > tools/bazel <<"EOF"
+    #!${runtimeShell} -e
+    exit 1
+    EOF
+    chmod +x tools/bazel
+
+    # first call should fail if tools/bazel is used
+    ! hello_test
+
+    cat > tools/bazel <<"EOF"
+    #!${runtimeShell} -e
+    exec "$BAZEL_REAL" "$@"
+    EOF
+
+    # second call succeeds because it defers to $out/bin/bazel-{version}-{os_arch}
+    hello_test
+
+    ## Test that the GSON serialisation files are present
+    gson_classes=$(unzip -l $(bazel info install_base)/A-server.jar | grep GsonTypeAdapter.class | wc -l)
+    if [ "$gson_classes" -lt 10 ]; then
+      echo "Missing GsonTypeAdapter classes in A-server.jar. Lockfile generation will not work"
+      exit 1
+    fi
+
+    runHook postInstall
+  '';
+
+  # Save paths to hardcoded dependencies so Nix can detect them.
+  # This is needed because the templates get tar’d up into a .jar.
+  postFixup = ''
+    mkdir -p $out/nix-support
+    echo "${defaultShellPath}" >> $out/nix-support/depends
+    # The string literal specifying the path to the bazel-rc file is sometimes
+    # stored non-contiguously in the binary due to gcc optimisations, which leads
+    # Nix to miss the hash when scanning for dependencies
+    echo "${bazelRC}" >> $out/nix-support/depends
+  '' + lib.optionalString stdenv.isDarwin ''
+    echo "${cctools}" >> $out/nix-support/depends
+  '';
+
+  dontStrip = true;
+  dontPatchELF = true;
+
+  passthru = {
+    # Additional tests that check bazel’s functionality. Execute
+    #
+    #     nix-build . -A bazel_7.tests
+    #
+    # in the nixpkgs checkout root to exercise them locally.
+    tests = callPackage ./tests.nix {
+      inherit Foundation bazel_self lockfile repoCache;
+    };
+
+    # For ease of debugging
+    inherit distDir repoCache lockfile;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_7/java-test.nix b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_7/java-test.nix
new file mode 100644
index 000000000000..2b231dc52a6e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_7/java-test.nix
@@ -0,0 +1,89 @@
+{ bazel
+, bazelTest
+, bazel-examples
+, stdenv
+, symlinkJoin
+, callPackage
+, darwin
+, extraBazelArgs ? ""
+, lib
+, openjdk8
+, jdk11_headless
+, runLocal
+, runtimeShell
+, writeScript
+, writeText
+, repoCache ? "unused"
+, distDir
+}:
+
+let
+
+  localDistDir = callPackage ./bazel-repository-cache.nix {
+    lockfile = ./cpp-test-MODULE.bazel.lock;
+
+    # Take all the rules_ deps, bazel_ deps and their transitive dependencies,
+    # but none of the platform-specific binaries, as they are large and useless.
+    requiredDepNamePredicate = name:
+      null == builtins.match ".*(macos|osx|linux|win|apple|android|maven).*" name
+      && null != builtins.match "(platforms|com_google_|protobuf|rules_|bazel_).*" name ;
+  };
+
+  mergedDistDir = symlinkJoin {
+    name = "mergedDistDir";
+    paths = [ localDistDir distDir ];
+  };
+
+  toolsBazel = writeScript "bazel" ''
+    #! ${runtimeShell}
+
+    export CXX='${stdenv.cc}/bin/clang++'
+    export LD='${darwin.cctools}/bin/ld'
+    export LIBTOOL='${darwin.cctools}/bin/libtool'
+    export CC='${stdenv.cc}/bin/clang'
+
+    # XXX: hack for macosX, this flags disable bazel usage of xcode
+    # See: https://github.com/bazelbuild/bazel/issues/4231
+    export BAZEL_USE_CPP_ONLY_TOOLCHAIN=1
+
+    exec "$BAZEL_REAL" "$@"
+  '';
+
+  workspaceDir = runLocal "our_workspace" {} (''
+    cp -r ${bazel-examples}/java-tutorial $out
+    find $out -type d -exec chmod 755 {} \;
+    cp ${./cpp-test-MODULE.bazel} $out/MODULE.bazel
+    cp ${./cpp-test-MODULE.bazel.lock} $out/MODULE.bazel.lock
+  ''
+  + (lib.optionalString stdenv.isDarwin ''
+    mkdir $out/tools
+    cp ${toolsBazel} $out/tools/bazel
+  ''));
+
+  testBazel = bazelTest {
+    name = "bazel-test-java";
+    inherit workspaceDir;
+    bazelPkg = bazel;
+    buildInputs = [ (if lib.strings.versionOlder bazel.version "5.0.0" then openjdk8 else jdk11_headless) ];
+    bazelScript = ''
+      ${bazel}/bin/bazel \
+        run \
+        --announce_rc \
+        ${lib.optionalString (lib.strings.versionOlder "5.0.0" bazel.version)
+          "--toolchain_resolution_debug='@bazel_tools//tools/jdk:(runtime_)?toolchain_type'"
+        } \
+        --distdir=${mergedDistDir} \
+        --repository_cache=${mergedDistDir} \
+        --verbose_failures \
+        --curses=no \
+        --strict_java_deps=off \
+        //:ProjectRunner \
+    '' + lib.optionalString (lib.strings.versionOlder bazel.version "5.0.0") ''
+        --host_javabase='@local_jdk//:jdk' \
+        --java_toolchain='@bazel_tools//tools/jdk:toolchain_hostjdk8' \
+        --javabase='@local_jdk//:jdk' \
+    '' + extraBazelArgs;
+  };
+
+in testBazel
+
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_7/java_toolchain.patch b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_7/java_toolchain.patch
new file mode 100644
index 000000000000..fa7bed8ac151
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_7/java_toolchain.patch
@@ -0,0 +1,30 @@
+diff --git a/tools/jdk/BUILD.tools b/tools/jdk/BUILD.tools
+index a8af76e90c..7f8b030f63 100644
+--- a/tools/jdk/BUILD.tools
++++ b/tools/jdk/BUILD.tools
+@@ -146,6 +146,25 @@ py_test(
+     ],
+ )
+ 
++##### Nonprebuilt toolchains definitions for NixOS and nix build sandboxes ####
++
++load("@rules_java//toolchains:default_java_toolchain.bzl", "default_java_toolchain", "NONPREBUILT_TOOLCHAIN_CONFIGURATION")
++
++[
++    default_java_toolchain(
++        name = "nonprebuilt_toolchain_java" + str(version),
++        configuration = NONPREBUILT_TOOLCHAIN_CONFIGURATION,
++        java_runtime = "@local_jdk//:jdk",
++        source_version = str(version),
++        target_version = str(version),
++    )
++    # Ideally we would only define toolchains for the java versions that the
++    # local jdk supports. But we cannot access this information in a BUILD
++    # file, and this is a hack anyway, so just pick a large enough upper bound.
++    # At the current pace, java <= 30 should cover all realeases until 2028.
++    for version in range(8, 31)
++]
++
+ #### Aliases to rules_java to keep backward-compatibility (begin) ####
+ 
+ TARGET_NAMES = [
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_7/nix-hacks.patch b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_7/nix-hacks.patch
new file mode 100644
index 000000000000..3c3fc57e0fc0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_7/nix-hacks.patch
@@ -0,0 +1,51 @@
+diff --git a/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorFunction.java b/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorFunction.java
+index 845c8b6aa3..6f07298bd0 100644
+--- a/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorFunction.java
++++ b/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorFunction.java
+@@ -171,14 +171,8 @@ public final class RepositoryDelegatorFunction implements SkyFunction {
+ 
+     DigestWriter digestWriter = new DigestWriter(directories, repositoryName, rule);
+     if (shouldUseCachedRepos(env, handler, repoRoot, rule)) {
+-      // Make sure marker file is up-to-date; correctly describes the current repository state
+-      byte[] markerHash = digestWriter.areRepositoryAndMarkerFileConsistent(handler, env);
+-      if (env.valuesMissing()) {
+-        return null;
+-      }
+-      if (markerHash != null) {
+-        return RepositoryDirectoryValue.builder().setPath(repoRoot).setDigest(markerHash).build();
+-      }
++      // Nix hack: Always consider cached dirs as up-to-date
++      return RepositoryDirectoryValue.builder().setPath(repoRoot).setDigest(digestWriter.writeMarkerFile()).build();
+     }
+ 
+     /* At this point: This is a force fetch, a local repository, OR The repository cache is old or
+@@ -512,11 +506,12 @@ public final class RepositoryDelegatorFunction implements SkyFunction {
+         builder.append(escape(key)).append(" ").append(escape(value)).append("\n");
+       }
+       String content = builder.toString();
+-      try {
+-        FileSystemUtils.writeContent(markerPath, UTF_8, content);
+-      } catch (IOException e) {
+-        throw new RepositoryFunctionException(e, Transience.TRANSIENT);
+-      }
++      // Nix hack: Do not write these pesky marker files
++      //try {
++      //  FileSystemUtils.writeContent(markerPath, UTF_8, content);
++      //} catch (IOException e) {
++      //  throw new RepositoryFunctionException(e, Transience.TRANSIENT);
++      //}
+       return new Fingerprint().addString(content).digestAndReset();
+     }
+ 
+diff --git a/src/main/java/com/google/devtools/build/lib/shell/JavaSubprocessFactory.java b/src/main/java/com/google/devtools/build/lib/shell/JavaSubprocessFactory.java
+index 649647c5f2..64d05b530c 100644
+--- a/src/main/java/com/google/devtools/build/lib/shell/JavaSubprocessFactory.java
++++ b/src/main/java/com/google/devtools/build/lib/shell/JavaSubprocessFactory.java
+@@ -165,7 +165,6 @@ public class JavaSubprocessFactory implements SubprocessFactory {
+     }
+     builder.command(argv);
+     if (params.getEnv() != null) {
+-      builder.environment().clear();
+       builder.environment().putAll(params.getEnv());
+     }
+ 
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_7/protobuf-test.MODULE.bazel.lock b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_7/protobuf-test.MODULE.bazel.lock
new file mode 100644
index 000000000000..399b8f72d3e2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_7/protobuf-test.MODULE.bazel.lock
@@ -0,0 +1,2803 @@
+{
+  "lockFileVersion": 3,
+  "moduleFileHash": "80605390be5478a274618e3f8fd7c7a7e1ce3036e086e1e1593ceba1b132b7f2",
+  "flags": {
+    "cmdRegistries": [
+      "https://bcr.bazel.build/"
+    ],
+    "cmdModuleOverrides": {},
+    "allowedYankedVersions": [],
+    "envVarAllowedYankedVersions": "",
+    "ignoreDevDependency": false,
+    "directDependenciesMode": "WARNING",
+    "compatibilityMode": "ERROR"
+  },
+  "localOverrideHashes": {
+    "bazel_tools": "922ea6752dc9105de5af957f7a99a6933c0a6a712d23df6aad16a9c399f7e787"
+  },
+  "moduleDepGraph": {
+    "<root>": {
+      "name": "",
+      "version": "",
+      "key": "<root>",
+      "repoName": "",
+      "executionPlatformsToRegister": [],
+      "toolchainsToRegister": [],
+      "extensionUsages": [],
+      "deps": {
+        "rules_proto": "rules_proto@5.3.0-21.7",
+        "protobuf": "protobuf@21.7",
+        "zlib": "zlib@1.3",
+        "bazel_tools": "bazel_tools@_",
+        "local_config_platform": "local_config_platform@_"
+      }
+    },
+    "rules_proto@5.3.0-21.7": {
+      "name": "rules_proto",
+      "version": "5.3.0-21.7",
+      "key": "rules_proto@5.3.0-21.7",
+      "repoName": "rules_proto",
+      "executionPlatformsToRegister": [],
+      "toolchainsToRegister": [],
+      "extensionUsages": [],
+      "deps": {
+        "bazel_skylib": "bazel_skylib@1.3.0",
+        "com_google_protobuf": "protobuf@21.7",
+        "rules_cc": "rules_cc@0.0.9",
+        "bazel_tools": "bazel_tools@_",
+        "local_config_platform": "local_config_platform@_"
+      },
+      "repoSpec": {
+        "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl",
+        "ruleClassName": "http_archive",
+        "attributes": {
+          "name": "rules_proto~5.3.0-21.7",
+          "urls": [
+            "https://github.com/bazelbuild/rules_proto/archive/refs/tags/5.3.0-21.7.tar.gz"
+          ],
+          "integrity": "sha256-3D+yBqLLNEG0heseQjFlsjEjWh6psDG0Qzz3vB+kYN0=",
+          "strip_prefix": "rules_proto-5.3.0-21.7",
+          "remote_patches": {},
+          "remote_patch_strip": 0
+        }
+      }
+    },
+    "protobuf@21.7": {
+      "name": "protobuf",
+      "version": "21.7",
+      "key": "protobuf@21.7",
+      "repoName": "protobuf",
+      "executionPlatformsToRegister": [],
+      "toolchainsToRegister": [],
+      "extensionUsages": [
+        {
+          "extensionBzlFile": "@rules_jvm_external//:extensions.bzl",
+          "extensionName": "maven",
+          "usingModule": "protobuf@21.7",
+          "location": {
+            "file": "https://bcr.bazel.build/modules/protobuf/21.7/MODULE.bazel",
+            "line": 22,
+            "column": 22
+          },
+          "imports": {
+            "maven": "maven"
+          },
+          "devImports": [],
+          "tags": [
+            {
+              "tagName": "install",
+              "attributeValues": {
+                "name": "maven",
+                "artifacts": [
+                  "com.google.code.findbugs:jsr305:3.0.2",
+                  "com.google.code.gson:gson:2.8.9",
+                  "com.google.errorprone:error_prone_annotations:2.3.2",
+                  "com.google.j2objc:j2objc-annotations:1.3",
+                  "com.google.guava:guava:31.1-jre",
+                  "com.google.guava:guava-testlib:31.1-jre",
+                  "com.google.truth:truth:1.1.2",
+                  "junit:junit:4.13.2",
+                  "org.mockito:mockito-core:4.3.1"
+                ]
+              },
+              "devDependency": false,
+              "location": {
+                "file": "https://bcr.bazel.build/modules/protobuf/21.7/MODULE.bazel",
+                "line": 24,
+                "column": 14
+              }
+            }
+          ],
+          "hasDevUseExtension": false,
+          "hasNonDevUseExtension": true
+        }
+      ],
+      "deps": {
+        "bazel_skylib": "bazel_skylib@1.3.0",
+        "rules_python": "rules_python@0.10.2",
+        "rules_cc": "rules_cc@0.0.9",
+        "rules_proto": "rules_proto@5.3.0-21.7",
+        "rules_java": "rules_java@7.1.0",
+        "rules_pkg": "rules_pkg@0.7.0",
+        "com_google_abseil": "abseil-cpp@20211102.0",
+        "zlib": "zlib@1.3",
+        "upb": "upb@0.0.0-20220923-a547704",
+        "rules_jvm_external": "rules_jvm_external@4.4.2",
+        "com_google_googletest": "googletest@1.11.0",
+        "bazel_tools": "bazel_tools@_",
+        "local_config_platform": "local_config_platform@_"
+      },
+      "repoSpec": {
+        "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl",
+        "ruleClassName": "http_archive",
+        "attributes": {
+          "name": "protobuf~21.7",
+          "urls": [
+            "https://github.com/protocolbuffers/protobuf/releases/download/v21.7/protobuf-all-21.7.zip"
+          ],
+          "integrity": "sha256-VJOiH17T/FAuZv7GuUScBqVRztYwAvpIkDxA36jeeko=",
+          "strip_prefix": "protobuf-21.7",
+          "remote_patches": {
+            "https://bcr.bazel.build/modules/protobuf/21.7/patches/add_module_dot_bazel.patch": "sha256-q3V2+eq0v2XF0z8z+V+QF4cynD6JvHI1y3kI/+rzl5s=",
+            "https://bcr.bazel.build/modules/protobuf/21.7/patches/add_module_dot_bazel_for_examples.patch": "sha256-O7YP6s3lo/1opUiO0jqXYORNHdZ/2q3hjz1QGy8QdIU=",
+            "https://bcr.bazel.build/modules/protobuf/21.7/patches/relative_repo_names.patch": "sha256-RK9RjW8T5UJNG7flIrnFiNE9vKwWB+8uWWtJqXYT0w4=",
+            "https://bcr.bazel.build/modules/protobuf/21.7/patches/add_missing_files.patch": "sha256-Hyne4DG2u5bXcWHNxNMirA2QFAe/2Cl8oMm1XJdkQIY="
+          },
+          "remote_patch_strip": 1
+        }
+      }
+    },
+    "zlib@1.3": {
+      "name": "zlib",
+      "version": "1.3",
+      "key": "zlib@1.3",
+      "repoName": "zlib",
+      "executionPlatformsToRegister": [],
+      "toolchainsToRegister": [],
+      "extensionUsages": [],
+      "deps": {
+        "platforms": "platforms@0.0.7",
+        "rules_cc": "rules_cc@0.0.9",
+        "bazel_tools": "bazel_tools@_",
+        "local_config_platform": "local_config_platform@_"
+      },
+      "repoSpec": {
+        "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl",
+        "ruleClassName": "http_archive",
+        "attributes": {
+          "name": "zlib~1.3",
+          "urls": [
+            "https://github.com/madler/zlib/releases/download/v1.3/zlib-1.3.tar.gz"
+          ],
+          "integrity": "sha256-/wukwpIBPbwnUws6geH5qBPNOd4Byl4Pi/NVcC76WT4=",
+          "strip_prefix": "zlib-1.3",
+          "remote_patches": {
+            "https://bcr.bazel.build/modules/zlib/1.3/patches/add_build_file.patch": "sha256-Ei+FYaaOo7A3jTKunMEodTI0Uw5NXQyZEcboMC8JskY=",
+            "https://bcr.bazel.build/modules/zlib/1.3/patches/module_dot_bazel.patch": "sha256-fPWLM+2xaF/kuy+kZc1YTfW6hNjrkG400Ho7gckuyJk="
+          },
+          "remote_patch_strip": 0
+        }
+      }
+    },
+    "bazel_tools@_": {
+      "name": "bazel_tools",
+      "version": "",
+      "key": "bazel_tools@_",
+      "repoName": "bazel_tools",
+      "executionPlatformsToRegister": [],
+      "toolchainsToRegister": [
+        "@local_config_cc_toolchains//:all",
+        "@local_config_sh//:local_sh_toolchain"
+      ],
+      "extensionUsages": [
+        {
+          "extensionBzlFile": "@bazel_tools//tools/cpp:cc_configure.bzl",
+          "extensionName": "cc_configure_extension",
+          "usingModule": "bazel_tools@_",
+          "location": {
+            "file": "@@bazel_tools//:MODULE.bazel",
+            "line": 17,
+            "column": 29
+          },
+          "imports": {
+            "local_config_cc": "local_config_cc",
+            "local_config_cc_toolchains": "local_config_cc_toolchains"
+          },
+          "devImports": [],
+          "tags": [],
+          "hasDevUseExtension": false,
+          "hasNonDevUseExtension": true
+        },
+        {
+          "extensionBzlFile": "@bazel_tools//tools/osx:xcode_configure.bzl",
+          "extensionName": "xcode_configure_extension",
+          "usingModule": "bazel_tools@_",
+          "location": {
+            "file": "@@bazel_tools//:MODULE.bazel",
+            "line": 21,
+            "column": 32
+          },
+          "imports": {
+            "local_config_xcode": "local_config_xcode"
+          },
+          "devImports": [],
+          "tags": [],
+          "hasDevUseExtension": false,
+          "hasNonDevUseExtension": true
+        },
+        {
+          "extensionBzlFile": "@rules_java//java:extensions.bzl",
+          "extensionName": "toolchains",
+          "usingModule": "bazel_tools@_",
+          "location": {
+            "file": "@@bazel_tools//:MODULE.bazel",
+            "line": 24,
+            "column": 32
+          },
+          "imports": {
+            "local_jdk": "local_jdk",
+            "remote_java_tools": "remote_java_tools",
+            "remote_java_tools_linux": "remote_java_tools_linux",
+            "remote_java_tools_windows": "remote_java_tools_windows",
+            "remote_java_tools_darwin_x86_64": "remote_java_tools_darwin_x86_64",
+            "remote_java_tools_darwin_arm64": "remote_java_tools_darwin_arm64"
+          },
+          "devImports": [],
+          "tags": [],
+          "hasDevUseExtension": false,
+          "hasNonDevUseExtension": true
+        },
+        {
+          "extensionBzlFile": "@bazel_tools//tools/sh:sh_configure.bzl",
+          "extensionName": "sh_configure_extension",
+          "usingModule": "bazel_tools@_",
+          "location": {
+            "file": "@@bazel_tools//:MODULE.bazel",
+            "line": 35,
+            "column": 39
+          },
+          "imports": {
+            "local_config_sh": "local_config_sh"
+          },
+          "devImports": [],
+          "tags": [],
+          "hasDevUseExtension": false,
+          "hasNonDevUseExtension": true
+        },
+        {
+          "extensionBzlFile": "@bazel_tools//tools/test:extensions.bzl",
+          "extensionName": "remote_coverage_tools_extension",
+          "usingModule": "bazel_tools@_",
+          "location": {
+            "file": "@@bazel_tools//:MODULE.bazel",
+            "line": 39,
+            "column": 48
+          },
+          "imports": {
+            "remote_coverage_tools": "remote_coverage_tools"
+          },
+          "devImports": [],
+          "tags": [],
+          "hasDevUseExtension": false,
+          "hasNonDevUseExtension": true
+        },
+        {
+          "extensionBzlFile": "@bazel_tools//tools/android:android_extensions.bzl",
+          "extensionName": "remote_android_tools_extensions",
+          "usingModule": "bazel_tools@_",
+          "location": {
+            "file": "@@bazel_tools//:MODULE.bazel",
+            "line": 42,
+            "column": 42
+          },
+          "imports": {
+            "android_gmaven_r8": "android_gmaven_r8",
+            "android_tools": "android_tools"
+          },
+          "devImports": [],
+          "tags": [],
+          "hasDevUseExtension": false,
+          "hasNonDevUseExtension": true
+        }
+      ],
+      "deps": {
+        "rules_cc": "rules_cc@0.0.9",
+        "rules_java": "rules_java@7.1.0",
+        "rules_license": "rules_license@0.0.7",
+        "rules_proto": "rules_proto@5.3.0-21.7",
+        "rules_python": "rules_python@0.10.2",
+        "platforms": "platforms@0.0.7",
+        "com_google_protobuf": "protobuf@21.7",
+        "zlib": "zlib@1.3",
+        "build_bazel_apple_support": "apple_support@1.5.0",
+        "local_config_platform": "local_config_platform@_"
+      }
+    },
+    "local_config_platform@_": {
+      "name": "local_config_platform",
+      "version": "",
+      "key": "local_config_platform@_",
+      "repoName": "local_config_platform",
+      "executionPlatformsToRegister": [],
+      "toolchainsToRegister": [],
+      "extensionUsages": [],
+      "deps": {
+        "platforms": "platforms@0.0.7",
+        "bazel_tools": "bazel_tools@_"
+      }
+    },
+    "bazel_skylib@1.3.0": {
+      "name": "bazel_skylib",
+      "version": "1.3.0",
+      "key": "bazel_skylib@1.3.0",
+      "repoName": "bazel_skylib",
+      "executionPlatformsToRegister": [],
+      "toolchainsToRegister": [
+        "//toolchains/unittest:cmd_toolchain",
+        "//toolchains/unittest:bash_toolchain"
+      ],
+      "extensionUsages": [],
+      "deps": {
+        "platforms": "platforms@0.0.7",
+        "bazel_tools": "bazel_tools@_",
+        "local_config_platform": "local_config_platform@_"
+      },
+      "repoSpec": {
+        "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl",
+        "ruleClassName": "http_archive",
+        "attributes": {
+          "name": "bazel_skylib~1.3.0",
+          "urls": [
+            "https://github.com/bazelbuild/bazel-skylib/releases/download/1.3.0/bazel-skylib-1.3.0.tar.gz"
+          ],
+          "integrity": "sha256-dNVE2W9KW7Yw1GXKi7z+Ix41lOWq5X4e2/F6brPKJQY=",
+          "strip_prefix": "",
+          "remote_patches": {},
+          "remote_patch_strip": 0
+        }
+      }
+    },
+    "rules_cc@0.0.9": {
+      "name": "rules_cc",
+      "version": "0.0.9",
+      "key": "rules_cc@0.0.9",
+      "repoName": "rules_cc",
+      "executionPlatformsToRegister": [],
+      "toolchainsToRegister": [
+        "@local_config_cc_toolchains//:all"
+      ],
+      "extensionUsages": [
+        {
+          "extensionBzlFile": "@bazel_tools//tools/cpp:cc_configure.bzl",
+          "extensionName": "cc_configure_extension",
+          "usingModule": "rules_cc@0.0.9",
+          "location": {
+            "file": "https://bcr.bazel.build/modules/rules_cc/0.0.9/MODULE.bazel",
+            "line": 9,
+            "column": 29
+          },
+          "imports": {
+            "local_config_cc_toolchains": "local_config_cc_toolchains"
+          },
+          "devImports": [],
+          "tags": [],
+          "hasDevUseExtension": false,
+          "hasNonDevUseExtension": true
+        }
+      ],
+      "deps": {
+        "platforms": "platforms@0.0.7",
+        "bazel_tools": "bazel_tools@_",
+        "local_config_platform": "local_config_platform@_"
+      },
+      "repoSpec": {
+        "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl",
+        "ruleClassName": "http_archive",
+        "attributes": {
+          "name": "rules_cc~0.0.9",
+          "urls": [
+            "https://github.com/bazelbuild/rules_cc/releases/download/0.0.9/rules_cc-0.0.9.tar.gz"
+          ],
+          "integrity": "sha256-IDeHW5pEVtzkp50RKorohbvEqtlo5lh9ym5k86CQDN8=",
+          "strip_prefix": "rules_cc-0.0.9",
+          "remote_patches": {
+            "https://bcr.bazel.build/modules/rules_cc/0.0.9/patches/module_dot_bazel_version.patch": "sha256-mM+qzOI0SgAdaJBlWOSMwMPKpaA9b7R37Hj/tp5bb4g="
+          },
+          "remote_patch_strip": 0
+        }
+      }
+    },
+    "rules_python@0.10.2": {
+      "name": "rules_python",
+      "version": "0.10.2",
+      "key": "rules_python@0.10.2",
+      "repoName": "rules_python",
+      "executionPlatformsToRegister": [],
+      "toolchainsToRegister": [
+        "@bazel_tools//tools/python:autodetecting_toolchain"
+      ],
+      "extensionUsages": [
+        {
+          "extensionBzlFile": "@rules_python//python:extensions.bzl",
+          "extensionName": "pip_install",
+          "usingModule": "rules_python@0.10.2",
+          "location": {
+            "file": "https://bcr.bazel.build/modules/rules_python/0.10.2/MODULE.bazel",
+            "line": 7,
+            "column": 28
+          },
+          "imports": {
+            "pypi__click": "pypi__click",
+            "pypi__colorama": "pypi__colorama",
+            "pypi__installer": "pypi__installer",
+            "pypi__pep517": "pypi__pep517",
+            "pypi__pip": "pypi__pip",
+            "pypi__pip_tools": "pypi__pip_tools",
+            "pypi__setuptools": "pypi__setuptools",
+            "pypi__tomli": "pypi__tomli",
+            "pypi__wheel": "pypi__wheel"
+          },
+          "devImports": [],
+          "tags": [],
+          "hasDevUseExtension": false,
+          "hasNonDevUseExtension": true
+        }
+      ],
+      "deps": {
+        "bazel_tools": "bazel_tools@_",
+        "local_config_platform": "local_config_platform@_"
+      },
+      "repoSpec": {
+        "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl",
+        "ruleClassName": "http_archive",
+        "attributes": {
+          "name": "rules_python~0.10.2",
+          "urls": [
+            "https://github.com/bazelbuild/rules_python/archive/refs/tags/0.10.2.tar.gz"
+          ],
+          "integrity": "sha256-o6bpn0l74In4HsCCiC5AJGv9Q19S9OgvN+iUSbBFc/Y=",
+          "strip_prefix": "rules_python-0.10.2",
+          "remote_patches": {
+            "https://bcr.bazel.build/modules/rules_python/0.10.2/patches/module_dot_bazel.patch": "sha256-TScILAmXmmMtjJIwhLrgNZgqGPs6G3OAzXaLXLDNFrA="
+          },
+          "remote_patch_strip": 0
+        }
+      }
+    },
+    "rules_java@7.1.0": {
+      "name": "rules_java",
+      "version": "7.1.0",
+      "key": "rules_java@7.1.0",
+      "repoName": "rules_java",
+      "executionPlatformsToRegister": [],
+      "toolchainsToRegister": [
+        "//toolchains:all",
+        "@local_jdk//:runtime_toolchain_definition",
+        "@local_jdk//:bootstrap_runtime_toolchain_definition",
+        "@remotejdk11_linux_toolchain_config_repo//:all",
+        "@remotejdk11_linux_aarch64_toolchain_config_repo//:all",
+        "@remotejdk11_linux_ppc64le_toolchain_config_repo//:all",
+        "@remotejdk11_linux_s390x_toolchain_config_repo//:all",
+        "@remotejdk11_macos_toolchain_config_repo//:all",
+        "@remotejdk11_macos_aarch64_toolchain_config_repo//:all",
+        "@remotejdk11_win_toolchain_config_repo//:all",
+        "@remotejdk11_win_arm64_toolchain_config_repo//:all",
+        "@remotejdk17_linux_toolchain_config_repo//:all",
+        "@remotejdk17_linux_aarch64_toolchain_config_repo//:all",
+        "@remotejdk17_linux_ppc64le_toolchain_config_repo//:all",
+        "@remotejdk17_linux_s390x_toolchain_config_repo//:all",
+        "@remotejdk17_macos_toolchain_config_repo//:all",
+        "@remotejdk17_macos_aarch64_toolchain_config_repo//:all",
+        "@remotejdk17_win_toolchain_config_repo//:all",
+        "@remotejdk17_win_arm64_toolchain_config_repo//:all",
+        "@remotejdk21_linux_toolchain_config_repo//:all",
+        "@remotejdk21_linux_aarch64_toolchain_config_repo//:all",
+        "@remotejdk21_macos_toolchain_config_repo//:all",
+        "@remotejdk21_macos_aarch64_toolchain_config_repo//:all",
+        "@remotejdk21_win_toolchain_config_repo//:all"
+      ],
+      "extensionUsages": [
+        {
+          "extensionBzlFile": "@rules_java//java:extensions.bzl",
+          "extensionName": "toolchains",
+          "usingModule": "rules_java@7.1.0",
+          "location": {
+            "file": "https://bcr.bazel.build/modules/rules_java/7.1.0/MODULE.bazel",
+            "line": 19,
+            "column": 27
+          },
+          "imports": {
+            "remote_java_tools": "remote_java_tools",
+            "remote_java_tools_linux": "remote_java_tools_linux",
+            "remote_java_tools_windows": "remote_java_tools_windows",
+            "remote_java_tools_darwin_x86_64": "remote_java_tools_darwin_x86_64",
+            "remote_java_tools_darwin_arm64": "remote_java_tools_darwin_arm64",
+            "local_jdk": "local_jdk",
+            "remotejdk11_linux_toolchain_config_repo": "remotejdk11_linux_toolchain_config_repo",
+            "remotejdk11_linux_aarch64_toolchain_config_repo": "remotejdk11_linux_aarch64_toolchain_config_repo",
+            "remotejdk11_linux_ppc64le_toolchain_config_repo": "remotejdk11_linux_ppc64le_toolchain_config_repo",
+            "remotejdk11_linux_s390x_toolchain_config_repo": "remotejdk11_linux_s390x_toolchain_config_repo",
+            "remotejdk11_macos_toolchain_config_repo": "remotejdk11_macos_toolchain_config_repo",
+            "remotejdk11_macos_aarch64_toolchain_config_repo": "remotejdk11_macos_aarch64_toolchain_config_repo",
+            "remotejdk11_win_toolchain_config_repo": "remotejdk11_win_toolchain_config_repo",
+            "remotejdk11_win_arm64_toolchain_config_repo": "remotejdk11_win_arm64_toolchain_config_repo",
+            "remotejdk17_linux_toolchain_config_repo": "remotejdk17_linux_toolchain_config_repo",
+            "remotejdk17_linux_aarch64_toolchain_config_repo": "remotejdk17_linux_aarch64_toolchain_config_repo",
+            "remotejdk17_linux_ppc64le_toolchain_config_repo": "remotejdk17_linux_ppc64le_toolchain_config_repo",
+            "remotejdk17_linux_s390x_toolchain_config_repo": "remotejdk17_linux_s390x_toolchain_config_repo",
+            "remotejdk17_macos_toolchain_config_repo": "remotejdk17_macos_toolchain_config_repo",
+            "remotejdk17_macos_aarch64_toolchain_config_repo": "remotejdk17_macos_aarch64_toolchain_config_repo",
+            "remotejdk17_win_toolchain_config_repo": "remotejdk17_win_toolchain_config_repo",
+            "remotejdk17_win_arm64_toolchain_config_repo": "remotejdk17_win_arm64_toolchain_config_repo",
+            "remotejdk21_linux_toolchain_config_repo": "remotejdk21_linux_toolchain_config_repo",
+            "remotejdk21_linux_aarch64_toolchain_config_repo": "remotejdk21_linux_aarch64_toolchain_config_repo",
+            "remotejdk21_macos_toolchain_config_repo": "remotejdk21_macos_toolchain_config_repo",
+            "remotejdk21_macos_aarch64_toolchain_config_repo": "remotejdk21_macos_aarch64_toolchain_config_repo",
+            "remotejdk21_win_toolchain_config_repo": "remotejdk21_win_toolchain_config_repo"
+          },
+          "devImports": [],
+          "tags": [],
+          "hasDevUseExtension": false,
+          "hasNonDevUseExtension": true
+        }
+      ],
+      "deps": {
+        "platforms": "platforms@0.0.7",
+        "rules_cc": "rules_cc@0.0.9",
+        "bazel_skylib": "bazel_skylib@1.3.0",
+        "rules_proto": "rules_proto@5.3.0-21.7",
+        "rules_license": "rules_license@0.0.7",
+        "bazel_tools": "bazel_tools@_",
+        "local_config_platform": "local_config_platform@_"
+      },
+      "repoSpec": {
+        "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl",
+        "ruleClassName": "http_archive",
+        "attributes": {
+          "name": "rules_java~7.1.0",
+          "urls": [
+            "https://github.com/bazelbuild/rules_java/releases/download/7.1.0/rules_java-7.1.0.tar.gz"
+          ],
+          "integrity": "sha256-o3pOX2OrgnFuXdau75iO2EYcegC46TYnImKJn1h81OE=",
+          "strip_prefix": "",
+          "remote_patches": {},
+          "remote_patch_strip": 0
+        }
+      }
+    },
+    "rules_pkg@0.7.0": {
+      "name": "rules_pkg",
+      "version": "0.7.0",
+      "key": "rules_pkg@0.7.0",
+      "repoName": "rules_pkg",
+      "executionPlatformsToRegister": [],
+      "toolchainsToRegister": [],
+      "extensionUsages": [],
+      "deps": {
+        "rules_python": "rules_python@0.10.2",
+        "bazel_skylib": "bazel_skylib@1.3.0",
+        "rules_license": "rules_license@0.0.7",
+        "bazel_tools": "bazel_tools@_",
+        "local_config_platform": "local_config_platform@_"
+      },
+      "repoSpec": {
+        "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl",
+        "ruleClassName": "http_archive",
+        "attributes": {
+          "name": "rules_pkg~0.7.0",
+          "urls": [
+            "https://github.com/bazelbuild/rules_pkg/releases/download/0.7.0/rules_pkg-0.7.0.tar.gz"
+          ],
+          "integrity": "sha256-iimOgydi7aGDBZfWT+fbWBeKqEzVkm121bdE1lWJQcI=",
+          "strip_prefix": "",
+          "remote_patches": {
+            "https://bcr.bazel.build/modules/rules_pkg/0.7.0/patches/module_dot_bazel.patch": "sha256-4OaEPZwYF6iC71ZTDg6MJ7LLqX7ZA0/kK4mT+4xKqiE="
+          },
+          "remote_patch_strip": 0
+        }
+      }
+    },
+    "abseil-cpp@20211102.0": {
+      "name": "abseil-cpp",
+      "version": "20211102.0",
+      "key": "abseil-cpp@20211102.0",
+      "repoName": "abseil-cpp",
+      "executionPlatformsToRegister": [],
+      "toolchainsToRegister": [],
+      "extensionUsages": [],
+      "deps": {
+        "rules_cc": "rules_cc@0.0.9",
+        "platforms": "platforms@0.0.7",
+        "bazel_tools": "bazel_tools@_",
+        "local_config_platform": "local_config_platform@_"
+      },
+      "repoSpec": {
+        "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl",
+        "ruleClassName": "http_archive",
+        "attributes": {
+          "name": "abseil-cpp~20211102.0",
+          "urls": [
+            "https://github.com/abseil/abseil-cpp/archive/refs/tags/20211102.0.tar.gz"
+          ],
+          "integrity": "sha256-3PcbnLqNwMqZQMSzFqDHlr6Pq0KwcLtrfKtitI8OZsQ=",
+          "strip_prefix": "abseil-cpp-20211102.0",
+          "remote_patches": {
+            "https://bcr.bazel.build/modules/abseil-cpp/20211102.0/patches/module_dot_bazel.patch": "sha256-4izqopgGCey4jVZzl/w3M2GVPNohjh2B5TmbThZNvPY="
+          },
+          "remote_patch_strip": 0
+        }
+      }
+    },
+    "upb@0.0.0-20220923-a547704": {
+      "name": "upb",
+      "version": "0.0.0-20220923-a547704",
+      "key": "upb@0.0.0-20220923-a547704",
+      "repoName": "upb",
+      "executionPlatformsToRegister": [],
+      "toolchainsToRegister": [],
+      "extensionUsages": [],
+      "deps": {
+        "bazel_skylib": "bazel_skylib@1.3.0",
+        "rules_proto": "rules_proto@5.3.0-21.7",
+        "com_google_protobuf": "protobuf@21.7",
+        "com_google_absl": "abseil-cpp@20211102.0",
+        "platforms": "platforms@0.0.7",
+        "bazel_tools": "bazel_tools@_",
+        "local_config_platform": "local_config_platform@_"
+      },
+      "repoSpec": {
+        "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl",
+        "ruleClassName": "http_archive",
+        "attributes": {
+          "name": "upb~0.0.0-20220923-a547704",
+          "urls": [
+            "https://github.com/protocolbuffers/upb/archive/a5477045acaa34586420942098f5fecd3570f577.tar.gz"
+          ],
+          "integrity": "sha256-z39x6v+QskwaKLSWRan/A6mmwecTQpHOcJActj5zZLU=",
+          "strip_prefix": "upb-a5477045acaa34586420942098f5fecd3570f577",
+          "remote_patches": {
+            "https://bcr.bazel.build/modules/upb/0.0.0-20220923-a547704/patches/module_dot_bazel.patch": "sha256-wH4mNS6ZYy+8uC0HoAft/c7SDsq2Kxf+J8dUakXhaB0="
+          },
+          "remote_patch_strip": 0
+        }
+      }
+    },
+    "rules_jvm_external@4.4.2": {
+      "name": "rules_jvm_external",
+      "version": "4.4.2",
+      "key": "rules_jvm_external@4.4.2",
+      "repoName": "rules_jvm_external",
+      "executionPlatformsToRegister": [],
+      "toolchainsToRegister": [],
+      "extensionUsages": [
+        {
+          "extensionBzlFile": "@rules_jvm_external//:non-module-deps.bzl",
+          "extensionName": "non_module_deps",
+          "usingModule": "rules_jvm_external@4.4.2",
+          "location": {
+            "file": "https://bcr.bazel.build/modules/rules_jvm_external/4.4.2/MODULE.bazel",
+            "line": 9,
+            "column": 32
+          },
+          "imports": {
+            "io_bazel_rules_kotlin": "io_bazel_rules_kotlin"
+          },
+          "devImports": [],
+          "tags": [],
+          "hasDevUseExtension": false,
+          "hasNonDevUseExtension": true
+        },
+        {
+          "extensionBzlFile": ":extensions.bzl",
+          "extensionName": "maven",
+          "usingModule": "rules_jvm_external@4.4.2",
+          "location": {
+            "file": "https://bcr.bazel.build/modules/rules_jvm_external/4.4.2/MODULE.bazel",
+            "line": 16,
+            "column": 22
+          },
+          "imports": {
+            "rules_jvm_external_deps": "rules_jvm_external_deps"
+          },
+          "devImports": [],
+          "tags": [
+            {
+              "tagName": "install",
+              "attributeValues": {
+                "name": "rules_jvm_external_deps",
+                "artifacts": [
+                  "com.google.cloud:google-cloud-core:1.93.10",
+                  "com.google.cloud:google-cloud-storage:1.113.4",
+                  "com.google.code.gson:gson:2.9.0",
+                  "org.apache.maven:maven-artifact:3.8.6",
+                  "software.amazon.awssdk:s3:2.17.183"
+                ],
+                "lock_file": "@rules_jvm_external//:rules_jvm_external_deps_install.json"
+              },
+              "devDependency": false,
+              "location": {
+                "file": "https://bcr.bazel.build/modules/rules_jvm_external/4.4.2/MODULE.bazel",
+                "line": 18,
+                "column": 14
+              }
+            }
+          ],
+          "hasDevUseExtension": false,
+          "hasNonDevUseExtension": true
+        }
+      ],
+      "deps": {
+        "bazel_skylib": "bazel_skylib@1.3.0",
+        "io_bazel_stardoc": "stardoc@0.5.1",
+        "bazel_tools": "bazel_tools@_",
+        "local_config_platform": "local_config_platform@_"
+      },
+      "repoSpec": {
+        "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl",
+        "ruleClassName": "http_archive",
+        "attributes": {
+          "name": "rules_jvm_external~4.4.2",
+          "urls": [
+            "https://github.com/bazelbuild/rules_jvm_external/archive/refs/tags/4.4.2.zip"
+          ],
+          "integrity": "sha256-c1YC9QgT6y6pPKP15DsZWb2AshO4NqB6YqKddXZwt3s=",
+          "strip_prefix": "rules_jvm_external-4.4.2",
+          "remote_patches": {},
+          "remote_patch_strip": 0
+        }
+      }
+    },
+    "googletest@1.11.0": {
+      "name": "googletest",
+      "version": "1.11.0",
+      "key": "googletest@1.11.0",
+      "repoName": "googletest",
+      "executionPlatformsToRegister": [],
+      "toolchainsToRegister": [],
+      "extensionUsages": [],
+      "deps": {
+        "com_google_absl": "abseil-cpp@20211102.0",
+        "platforms": "platforms@0.0.7",
+        "rules_cc": "rules_cc@0.0.9",
+        "bazel_tools": "bazel_tools@_",
+        "local_config_platform": "local_config_platform@_"
+      },
+      "repoSpec": {
+        "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl",
+        "ruleClassName": "http_archive",
+        "attributes": {
+          "name": "googletest~1.11.0",
+          "urls": [
+            "https://github.com/google/googletest/archive/refs/tags/release-1.11.0.tar.gz"
+          ],
+          "integrity": "sha256-tIcL8SH/d5W6INILzdhie44Ijy0dqymaAxwQNO3ck9U=",
+          "strip_prefix": "googletest-release-1.11.0",
+          "remote_patches": {
+            "https://bcr.bazel.build/modules/googletest/1.11.0/patches/module_dot_bazel.patch": "sha256-HuahEdI/n8KCI071sN3CEziX+7qP/Ec77IWayYunLP0="
+          },
+          "remote_patch_strip": 0
+        }
+      }
+    },
+    "platforms@0.0.7": {
+      "name": "platforms",
+      "version": "0.0.7",
+      "key": "platforms@0.0.7",
+      "repoName": "platforms",
+      "executionPlatformsToRegister": [],
+      "toolchainsToRegister": [],
+      "extensionUsages": [],
+      "deps": {
+        "rules_license": "rules_license@0.0.7",
+        "bazel_tools": "bazel_tools@_",
+        "local_config_platform": "local_config_platform@_"
+      },
+      "repoSpec": {
+        "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl",
+        "ruleClassName": "http_archive",
+        "attributes": {
+          "name": "platforms",
+          "urls": [
+            "https://github.com/bazelbuild/platforms/releases/download/0.0.7/platforms-0.0.7.tar.gz"
+          ],
+          "integrity": "sha256-OlYcmee9vpFzqmU/1Xn+hJ8djWc5V4CrR3Cx84FDHVE=",
+          "strip_prefix": "",
+          "remote_patches": {},
+          "remote_patch_strip": 0
+        }
+      }
+    },
+    "rules_license@0.0.7": {
+      "name": "rules_license",
+      "version": "0.0.7",
+      "key": "rules_license@0.0.7",
+      "repoName": "rules_license",
+      "executionPlatformsToRegister": [],
+      "toolchainsToRegister": [],
+      "extensionUsages": [],
+      "deps": {
+        "bazel_tools": "bazel_tools@_",
+        "local_config_platform": "local_config_platform@_"
+      },
+      "repoSpec": {
+        "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl",
+        "ruleClassName": "http_archive",
+        "attributes": {
+          "name": "rules_license~0.0.7",
+          "urls": [
+            "https://github.com/bazelbuild/rules_license/releases/download/0.0.7/rules_license-0.0.7.tar.gz"
+          ],
+          "integrity": "sha256-RTHezLkTY5ww5cdRKgVNXYdWmNrrddjPkPKEN1/nw2A=",
+          "strip_prefix": "",
+          "remote_patches": {},
+          "remote_patch_strip": 0
+        }
+      }
+    },
+    "apple_support@1.5.0": {
+      "name": "apple_support",
+      "version": "1.5.0",
+      "key": "apple_support@1.5.0",
+      "repoName": "build_bazel_apple_support",
+      "executionPlatformsToRegister": [],
+      "toolchainsToRegister": [
+        "@local_config_apple_cc_toolchains//:all"
+      ],
+      "extensionUsages": [
+        {
+          "extensionBzlFile": "@build_bazel_apple_support//crosstool:setup.bzl",
+          "extensionName": "apple_cc_configure_extension",
+          "usingModule": "apple_support@1.5.0",
+          "location": {
+            "file": "https://bcr.bazel.build/modules/apple_support/1.5.0/MODULE.bazel",
+            "line": 17,
+            "column": 35
+          },
+          "imports": {
+            "local_config_apple_cc": "local_config_apple_cc",
+            "local_config_apple_cc_toolchains": "local_config_apple_cc_toolchains"
+          },
+          "devImports": [],
+          "tags": [],
+          "hasDevUseExtension": false,
+          "hasNonDevUseExtension": true
+        }
+      ],
+      "deps": {
+        "bazel_skylib": "bazel_skylib@1.3.0",
+        "platforms": "platforms@0.0.7",
+        "bazel_tools": "bazel_tools@_",
+        "local_config_platform": "local_config_platform@_"
+      },
+      "repoSpec": {
+        "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl",
+        "ruleClassName": "http_archive",
+        "attributes": {
+          "name": "apple_support~1.5.0",
+          "urls": [
+            "https://github.com/bazelbuild/apple_support/releases/download/1.5.0/apple_support.1.5.0.tar.gz"
+          ],
+          "integrity": "sha256-miM41vja0yRPgj8txghKA+TQ+7J8qJLclw5okNW0gYQ=",
+          "strip_prefix": "",
+          "remote_patches": {},
+          "remote_patch_strip": 0
+        }
+      }
+    },
+    "stardoc@0.5.1": {
+      "name": "stardoc",
+      "version": "0.5.1",
+      "key": "stardoc@0.5.1",
+      "repoName": "stardoc",
+      "executionPlatformsToRegister": [],
+      "toolchainsToRegister": [],
+      "extensionUsages": [],
+      "deps": {
+        "bazel_skylib": "bazel_skylib@1.3.0",
+        "rules_java": "rules_java@7.1.0",
+        "bazel_tools": "bazel_tools@_",
+        "local_config_platform": "local_config_platform@_"
+      },
+      "repoSpec": {
+        "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl",
+        "ruleClassName": "http_archive",
+        "attributes": {
+          "name": "stardoc~0.5.1",
+          "urls": [
+            "https://github.com/bazelbuild/stardoc/releases/download/0.5.1/stardoc-0.5.1.tar.gz"
+          ],
+          "integrity": "sha256-qoFNrgrEALurLoiB+ZFcb0fElmS/CHxAmhX5BDjSwj4=",
+          "strip_prefix": "",
+          "remote_patches": {
+            "https://bcr.bazel.build/modules/stardoc/0.5.1/patches/module_dot_bazel.patch": "sha256-UAULCuTpJE7SG0YrR9XLjMfxMRmbP+za3uW9ONZ5rjI="
+          },
+          "remote_patch_strip": 0
+        }
+      }
+    }
+  },
+  "moduleExtensions": {
+    "@@apple_support~1.5.0//crosstool:setup.bzl%apple_cc_configure_extension": {
+      "general": {
+        "bzlTransitiveDigest": "pMLFCYaRPkgXPQ8vtuNkMfiHfPmRBy6QJfnid4sWfv0=",
+        "accumulatedFileDigests": {},
+        "envVariables": {},
+        "generatedRepoSpecs": {
+          "local_config_apple_cc": {
+            "bzlFile": "@@apple_support~1.5.0//crosstool:setup.bzl",
+            "ruleClassName": "_apple_cc_autoconf",
+            "attributes": {
+              "name": "apple_support~1.5.0~apple_cc_configure_extension~local_config_apple_cc"
+            }
+          },
+          "local_config_apple_cc_toolchains": {
+            "bzlFile": "@@apple_support~1.5.0//crosstool:setup.bzl",
+            "ruleClassName": "_apple_cc_autoconf_toolchains",
+            "attributes": {
+              "name": "apple_support~1.5.0~apple_cc_configure_extension~local_config_apple_cc_toolchains"
+            }
+          }
+        }
+      }
+    },
+    "@@bazel_tools//tools/android:android_extensions.bzl%remote_android_tools_extensions": {
+      "general": {
+        "bzlTransitiveDigest": "iz3RFYDcsjupaT10sdSPAhA44WL3eDYkTEnYThllj1w=",
+        "accumulatedFileDigests": {},
+        "envVariables": {},
+        "generatedRepoSpecs": {
+          "android_tools": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "bazel_tools~remote_android_tools_extensions~android_tools",
+              "sha256": "2b661a761a735b41c41b3a78089f4fc1982626c76ddb944604ae3ff8c545d3c2",
+              "url": "https://mirror.bazel.build/bazel_android_tools/android_tools_pkg-0.30.0.tar"
+            }
+          },
+          "android_gmaven_r8": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_jar",
+            "attributes": {
+              "name": "bazel_tools~remote_android_tools_extensions~android_gmaven_r8",
+              "sha256": "57a696749695a09381a87bc2f08c3a8ed06a717a5caa3ef878a3077e0d3af19d",
+              "url": "https://maven.google.com/com/android/tools/r8/8.1.56/r8-8.1.56.jar"
+            }
+          }
+        }
+      }
+    },
+    "@@bazel_tools//tools/cpp:cc_configure.bzl%cc_configure_extension": {
+      "general": {
+        "bzlTransitiveDigest": "O9sf6ilKWU9Veed02jG9o2HM/xgV/UAyciuFBuxrFRY=",
+        "accumulatedFileDigests": {},
+        "envVariables": {},
+        "generatedRepoSpecs": {
+          "local_config_cc": {
+            "bzlFile": "@@bazel_tools//tools/cpp:cc_configure.bzl",
+            "ruleClassName": "cc_autoconf",
+            "attributes": {
+              "name": "bazel_tools~cc_configure_extension~local_config_cc"
+            }
+          },
+          "local_config_cc_toolchains": {
+            "bzlFile": "@@bazel_tools//tools/cpp:cc_configure.bzl",
+            "ruleClassName": "cc_autoconf_toolchains",
+            "attributes": {
+              "name": "bazel_tools~cc_configure_extension~local_config_cc_toolchains"
+            }
+          }
+        }
+      }
+    },
+    "@@bazel_tools//tools/osx:xcode_configure.bzl%xcode_configure_extension": {
+      "general": {
+        "bzlTransitiveDigest": "Qh2bWTU6QW6wkrd87qrU4YeY+SG37Nvw3A0PR4Y0L2Y=",
+        "accumulatedFileDigests": {},
+        "envVariables": {},
+        "generatedRepoSpecs": {
+          "local_config_xcode": {
+            "bzlFile": "@@bazel_tools//tools/osx:xcode_configure.bzl",
+            "ruleClassName": "xcode_autoconf",
+            "attributes": {
+              "name": "bazel_tools~xcode_configure_extension~local_config_xcode",
+              "xcode_locator": "@bazel_tools//tools/osx:xcode_locator.m",
+              "remote_xcode": ""
+            }
+          }
+        }
+      }
+    },
+    "@@bazel_tools//tools/sh:sh_configure.bzl%sh_configure_extension": {
+      "general": {
+        "bzlTransitiveDigest": "hp4NgmNjEg5+xgvzfh6L83bt9/aiiWETuNpwNuF1MSU=",
+        "accumulatedFileDigests": {},
+        "envVariables": {},
+        "generatedRepoSpecs": {
+          "local_config_sh": {
+            "bzlFile": "@@bazel_tools//tools/sh:sh_configure.bzl",
+            "ruleClassName": "sh_config",
+            "attributes": {
+              "name": "bazel_tools~sh_configure_extension~local_config_sh"
+            }
+          }
+        }
+      }
+    },
+    "@@bazel_tools//tools/test:extensions.bzl%remote_coverage_tools_extension": {
+      "general": {
+        "bzlTransitiveDigest": "cizrA62cv8WUgb0cCmx5B6PRijtr/I4TAWxg/4caNGU=",
+        "accumulatedFileDigests": {},
+        "envVariables": {},
+        "generatedRepoSpecs": {
+          "remote_coverage_tools": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "bazel_tools~remote_coverage_tools_extension~remote_coverage_tools",
+              "sha256": "7006375f6756819b7013ca875eab70a541cf7d89142d9c511ed78ea4fefa38af",
+              "urls": [
+                "https://mirror.bazel.build/bazel_coverage_output_generator/releases/coverage_output_generator-v2.6.zip"
+              ]
+            }
+          }
+        }
+      }
+    },
+    "@@rules_java~7.1.0//java:extensions.bzl%toolchains": {
+      "general": {
+        "bzlTransitiveDigest": "iUIRqCK7tkhvcDJCAfPPqSd06IHG0a8HQD0xeQyVAqw=",
+        "accumulatedFileDigests": {},
+        "envVariables": {},
+        "generatedRepoSpecs": {
+          "remotejdk21_linux_toolchain_config_repo": {
+            "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl",
+            "ruleClassName": "_toolchain_config",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk21_linux_toolchain_config_repo",
+              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_21\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"21\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"//conditions:default\": \":prefix_version_setting\",\n    }),\n    visibility = [\"//visibility:private\"],\n)\ntoolchain(\n    name = \"toolchain\",\n    target_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:x86_64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n    toolchain = \"@remotejdk21_linux//:jdk\",\n)\ntoolchain(\n    name = \"bootstrap_runtime_toolchain\",\n    # These constraints are not required for correctness, but prevent fetches of remote JDK for\n    # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n    # the same configuration, this constraint will not result in toolchain resolution failures.\n    exec_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:x86_64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n    toolchain = \"@remotejdk21_linux//:jdk\",\n)\n"
+            }
+          },
+          "remotejdk17_linux_s390x_toolchain_config_repo": {
+            "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl",
+            "ruleClassName": "_toolchain_config",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk17_linux_s390x_toolchain_config_repo",
+              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_17\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"17\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"//conditions:default\": \":prefix_version_setting\",\n    }),\n    visibility = [\"//visibility:private\"],\n)\ntoolchain(\n    name = \"toolchain\",\n    target_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:s390x\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n    toolchain = \"@remotejdk17_linux_s390x//:jdk\",\n)\ntoolchain(\n    name = \"bootstrap_runtime_toolchain\",\n    # These constraints are not required for correctness, but prevent fetches of remote JDK for\n    # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n    # the same configuration, this constraint will not result in toolchain resolution failures.\n    exec_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:s390x\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n    toolchain = \"@remotejdk17_linux_s390x//:jdk\",\n)\n"
+            }
+          },
+          "remotejdk17_macos_toolchain_config_repo": {
+            "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl",
+            "ruleClassName": "_toolchain_config",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk17_macos_toolchain_config_repo",
+              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_17\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"17\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"//conditions:default\": \":prefix_version_setting\",\n    }),\n    visibility = [\"//visibility:private\"],\n)\ntoolchain(\n    name = \"toolchain\",\n    target_compatible_with = [\"@platforms//os:macos\", \"@platforms//cpu:x86_64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n    toolchain = \"@remotejdk17_macos//:jdk\",\n)\ntoolchain(\n    name = \"bootstrap_runtime_toolchain\",\n    # These constraints are not required for correctness, but prevent fetches of remote JDK for\n    # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n    # the same configuration, this constraint will not result in toolchain resolution failures.\n    exec_compatible_with = [\"@platforms//os:macos\", \"@platforms//cpu:x86_64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n    toolchain = \"@remotejdk17_macos//:jdk\",\n)\n"
+            }
+          },
+          "remotejdk21_macos_aarch64_toolchain_config_repo": {
+            "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl",
+            "ruleClassName": "_toolchain_config",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk21_macos_aarch64_toolchain_config_repo",
+              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_21\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"21\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"//conditions:default\": \":prefix_version_setting\",\n    }),\n    visibility = [\"//visibility:private\"],\n)\ntoolchain(\n    name = \"toolchain\",\n    target_compatible_with = [\"@platforms//os:macos\", \"@platforms//cpu:aarch64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n    toolchain = \"@remotejdk21_macos_aarch64//:jdk\",\n)\ntoolchain(\n    name = \"bootstrap_runtime_toolchain\",\n    # These constraints are not required for correctness, but prevent fetches of remote JDK for\n    # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n    # the same configuration, this constraint will not result in toolchain resolution failures.\n    exec_compatible_with = [\"@platforms//os:macos\", \"@platforms//cpu:aarch64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n    toolchain = \"@remotejdk21_macos_aarch64//:jdk\",\n)\n"
+            }
+          },
+          "remotejdk17_linux_aarch64_toolchain_config_repo": {
+            "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl",
+            "ruleClassName": "_toolchain_config",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk17_linux_aarch64_toolchain_config_repo",
+              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_17\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"17\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"//conditions:default\": \":prefix_version_setting\",\n    }),\n    visibility = [\"//visibility:private\"],\n)\ntoolchain(\n    name = \"toolchain\",\n    target_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:aarch64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n    toolchain = \"@remotejdk17_linux_aarch64//:jdk\",\n)\ntoolchain(\n    name = \"bootstrap_runtime_toolchain\",\n    # These constraints are not required for correctness, but prevent fetches of remote JDK for\n    # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n    # the same configuration, this constraint will not result in toolchain resolution failures.\n    exec_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:aarch64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n    toolchain = \"@remotejdk17_linux_aarch64//:jdk\",\n)\n"
+            }
+          },
+          "remotejdk21_macos_aarch64": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk21_macos_aarch64",
+              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        exclude = [\"jre/bin/plugin2/**\"],\n    ),\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n# This folder holds security policies.\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\", \"release\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre\",\n    ],\n    # Provide the 'java` binary explicitly so that the correct path is used by\n    # Bazel even when the host platform differs from the execution platform.\n    # Exactly one of the two globs will be empty depending on the host platform.\n    # When --incompatible_disallow_empty_glob is enabled, each individual empty\n    # glob will fail without allow_empty = True, even if the overall result is\n    # non-empty.\n    java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n    version = 21,\n)\n",
+              "sha256": "2a7a99a3ea263dbd8d32a67d1e6e363ba8b25c645c826f5e167a02bbafaff1fa",
+              "strip_prefix": "zulu21.28.85-ca-jdk21.0.0-macosx_aarch64",
+              "urls": [
+                "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu21.28.85-ca-jdk21.0.0-macosx_aarch64.tar.gz",
+                "https://cdn.azul.com/zulu/bin/zulu21.28.85-ca-jdk21.0.0-macosx_aarch64.tar.gz"
+              ]
+            }
+          },
+          "remotejdk17_linux_toolchain_config_repo": {
+            "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl",
+            "ruleClassName": "_toolchain_config",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk17_linux_toolchain_config_repo",
+              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_17\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"17\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"//conditions:default\": \":prefix_version_setting\",\n    }),\n    visibility = [\"//visibility:private\"],\n)\ntoolchain(\n    name = \"toolchain\",\n    target_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:x86_64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n    toolchain = \"@remotejdk17_linux//:jdk\",\n)\ntoolchain(\n    name = \"bootstrap_runtime_toolchain\",\n    # These constraints are not required for correctness, but prevent fetches of remote JDK for\n    # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n    # the same configuration, this constraint will not result in toolchain resolution failures.\n    exec_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:x86_64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n    toolchain = \"@remotejdk17_linux//:jdk\",\n)\n"
+            }
+          },
+          "remotejdk17_macos_aarch64": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk17_macos_aarch64",
+              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        exclude = [\"jre/bin/plugin2/**\"],\n    ),\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n# This folder holds security policies.\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\", \"release\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre\",\n    ],\n    # Provide the 'java` binary explicitly so that the correct path is used by\n    # Bazel even when the host platform differs from the execution platform.\n    # Exactly one of the two globs will be empty depending on the host platform.\n    # When --incompatible_disallow_empty_glob is enabled, each individual empty\n    # glob will fail without allow_empty = True, even if the overall result is\n    # non-empty.\n    java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n    version = 17,\n)\n",
+              "sha256": "314b04568ec0ae9b36ba03c9cbd42adc9e1265f74678923b19297d66eb84dcca",
+              "strip_prefix": "zulu17.44.53-ca-jdk17.0.8.1-macosx_aarch64",
+              "urls": [
+                "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.44.53-ca-jdk17.0.8.1-macosx_aarch64.tar.gz",
+                "https://cdn.azul.com/zulu/bin/zulu17.44.53-ca-jdk17.0.8.1-macosx_aarch64.tar.gz"
+              ]
+            }
+          },
+          "remote_java_tools_windows": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remote_java_tools_windows",
+              "sha256": "c5c70c214a350f12cbf52da8270fa43ba629b795f3dd328028a38f8f0d39c2a1",
+              "urls": [
+                "https://mirror.bazel.build/bazel_java_tools/releases/java/v13.1/java_tools_windows-v13.1.zip",
+                "https://github.com/bazelbuild/java_tools/releases/download/java_v13.1/java_tools_windows-v13.1.zip"
+              ]
+            }
+          },
+          "remotejdk11_win": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk11_win",
+              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        exclude = [\"jre/bin/plugin2/**\"],\n    ),\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n# This folder holds security policies.\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\", \"release\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre\",\n    ],\n    # Provide the 'java` binary explicitly so that the correct path is used by\n    # Bazel even when the host platform differs from the execution platform.\n    # Exactly one of the two globs will be empty depending on the host platform.\n    # When --incompatible_disallow_empty_glob is enabled, each individual empty\n    # glob will fail without allow_empty = True, even if the overall result is\n    # non-empty.\n    java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n    version = 11,\n)\n",
+              "sha256": "43408193ce2fa0862819495b5ae8541085b95660153f2adcf91a52d3a1710e83",
+              "strip_prefix": "zulu11.66.15-ca-jdk11.0.20-win_x64",
+              "urls": [
+                "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu11.66.15-ca-jdk11.0.20-win_x64.zip",
+                "https://cdn.azul.com/zulu/bin/zulu11.66.15-ca-jdk11.0.20-win_x64.zip"
+              ]
+            }
+          },
+          "remotejdk11_win_toolchain_config_repo": {
+            "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl",
+            "ruleClassName": "_toolchain_config",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk11_win_toolchain_config_repo",
+              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_11\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"11\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"//conditions:default\": \":prefix_version_setting\",\n    }),\n    visibility = [\"//visibility:private\"],\n)\ntoolchain(\n    name = \"toolchain\",\n    target_compatible_with = [\"@platforms//os:windows\", \"@platforms//cpu:x86_64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n    toolchain = \"@remotejdk11_win//:jdk\",\n)\ntoolchain(\n    name = \"bootstrap_runtime_toolchain\",\n    # These constraints are not required for correctness, but prevent fetches of remote JDK for\n    # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n    # the same configuration, this constraint will not result in toolchain resolution failures.\n    exec_compatible_with = [\"@platforms//os:windows\", \"@platforms//cpu:x86_64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n    toolchain = \"@remotejdk11_win//:jdk\",\n)\n"
+            }
+          },
+          "remotejdk11_linux_aarch64": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk11_linux_aarch64",
+              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        exclude = [\"jre/bin/plugin2/**\"],\n    ),\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n# This folder holds security policies.\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\", \"release\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre\",\n    ],\n    # Provide the 'java` binary explicitly so that the correct path is used by\n    # Bazel even when the host platform differs from the execution platform.\n    # Exactly one of the two globs will be empty depending on the host platform.\n    # When --incompatible_disallow_empty_glob is enabled, each individual empty\n    # glob will fail without allow_empty = True, even if the overall result is\n    # non-empty.\n    java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n    version = 11,\n)\n",
+              "sha256": "54174439f2b3fddd11f1048c397fe7bb45d4c9d66d452d6889b013d04d21c4de",
+              "strip_prefix": "zulu11.66.15-ca-jdk11.0.20-linux_aarch64",
+              "urls": [
+                "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu11.66.15-ca-jdk11.0.20-linux_aarch64.tar.gz",
+                "https://cdn.azul.com/zulu/bin/zulu11.66.15-ca-jdk11.0.20-linux_aarch64.tar.gz"
+              ]
+            }
+          },
+          "remotejdk17_linux": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk17_linux",
+              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        exclude = [\"jre/bin/plugin2/**\"],\n    ),\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n# This folder holds security policies.\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\", \"release\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre\",\n    ],\n    # Provide the 'java` binary explicitly so that the correct path is used by\n    # Bazel even when the host platform differs from the execution platform.\n    # Exactly one of the two globs will be empty depending on the host platform.\n    # When --incompatible_disallow_empty_glob is enabled, each individual empty\n    # glob will fail without allow_empty = True, even if the overall result is\n    # non-empty.\n    java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n    version = 17,\n)\n",
+              "sha256": "b9482f2304a1a68a614dfacddcf29569a72f0fac32e6c74f83dc1b9a157b8340",
+              "strip_prefix": "zulu17.44.53-ca-jdk17.0.8.1-linux_x64",
+              "urls": [
+                "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.44.53-ca-jdk17.0.8.1-linux_x64.tar.gz",
+                "https://cdn.azul.com/zulu/bin/zulu17.44.53-ca-jdk17.0.8.1-linux_x64.tar.gz"
+              ]
+            }
+          },
+          "remotejdk11_linux_s390x_toolchain_config_repo": {
+            "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl",
+            "ruleClassName": "_toolchain_config",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk11_linux_s390x_toolchain_config_repo",
+              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_11\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"11\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"//conditions:default\": \":prefix_version_setting\",\n    }),\n    visibility = [\"//visibility:private\"],\n)\ntoolchain(\n    name = \"toolchain\",\n    target_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:s390x\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n    toolchain = \"@remotejdk11_linux_s390x//:jdk\",\n)\ntoolchain(\n    name = \"bootstrap_runtime_toolchain\",\n    # These constraints are not required for correctness, but prevent fetches of remote JDK for\n    # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n    # the same configuration, this constraint will not result in toolchain resolution failures.\n    exec_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:s390x\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n    toolchain = \"@remotejdk11_linux_s390x//:jdk\",\n)\n"
+            }
+          },
+          "remotejdk11_linux_toolchain_config_repo": {
+            "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl",
+            "ruleClassName": "_toolchain_config",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk11_linux_toolchain_config_repo",
+              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_11\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"11\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"//conditions:default\": \":prefix_version_setting\",\n    }),\n    visibility = [\"//visibility:private\"],\n)\ntoolchain(\n    name = \"toolchain\",\n    target_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:x86_64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n    toolchain = \"@remotejdk11_linux//:jdk\",\n)\ntoolchain(\n    name = \"bootstrap_runtime_toolchain\",\n    # These constraints are not required for correctness, but prevent fetches of remote JDK for\n    # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n    # the same configuration, this constraint will not result in toolchain resolution failures.\n    exec_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:x86_64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n    toolchain = \"@remotejdk11_linux//:jdk\",\n)\n"
+            }
+          },
+          "remotejdk11_macos": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk11_macos",
+              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        exclude = [\"jre/bin/plugin2/**\"],\n    ),\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n# This folder holds security policies.\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\", \"release\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre\",\n    ],\n    # Provide the 'java` binary explicitly so that the correct path is used by\n    # Bazel even when the host platform differs from the execution platform.\n    # Exactly one of the two globs will be empty depending on the host platform.\n    # When --incompatible_disallow_empty_glob is enabled, each individual empty\n    # glob will fail without allow_empty = True, even if the overall result is\n    # non-empty.\n    java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n    version = 11,\n)\n",
+              "sha256": "bcaab11cfe586fae7583c6d9d311c64384354fb2638eb9a012eca4c3f1a1d9fd",
+              "strip_prefix": "zulu11.66.15-ca-jdk11.0.20-macosx_x64",
+              "urls": [
+                "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu11.66.15-ca-jdk11.0.20-macosx_x64.tar.gz",
+                "https://cdn.azul.com/zulu/bin/zulu11.66.15-ca-jdk11.0.20-macosx_x64.tar.gz"
+              ]
+            }
+          },
+          "remotejdk11_win_arm64": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk11_win_arm64",
+              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        exclude = [\"jre/bin/plugin2/**\"],\n    ),\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n# This folder holds security policies.\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\", \"release\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre\",\n    ],\n    # Provide the 'java` binary explicitly so that the correct path is used by\n    # Bazel even when the host platform differs from the execution platform.\n    # Exactly one of the two globs will be empty depending on the host platform.\n    # When --incompatible_disallow_empty_glob is enabled, each individual empty\n    # glob will fail without allow_empty = True, even if the overall result is\n    # non-empty.\n    java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n    version = 11,\n)\n",
+              "sha256": "b8a28e6e767d90acf793ea6f5bed0bb595ba0ba5ebdf8b99f395266161e53ec2",
+              "strip_prefix": "jdk-11.0.13+8",
+              "urls": [
+                "https://mirror.bazel.build/aka.ms/download-jdk/microsoft-jdk-11.0.13.8.1-windows-aarch64.zip"
+              ]
+            }
+          },
+          "remotejdk17_macos": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk17_macos",
+              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        exclude = [\"jre/bin/plugin2/**\"],\n    ),\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n# This folder holds security policies.\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\", \"release\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre\",\n    ],\n    # Provide the 'java` binary explicitly so that the correct path is used by\n    # Bazel even when the host platform differs from the execution platform.\n    # Exactly one of the two globs will be empty depending on the host platform.\n    # When --incompatible_disallow_empty_glob is enabled, each individual empty\n    # glob will fail without allow_empty = True, even if the overall result is\n    # non-empty.\n    java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n    version = 17,\n)\n",
+              "sha256": "640453e8afe8ffe0fb4dceb4535fb50db9c283c64665eebb0ba68b19e65f4b1f",
+              "strip_prefix": "zulu17.44.53-ca-jdk17.0.8.1-macosx_x64",
+              "urls": [
+                "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.44.53-ca-jdk17.0.8.1-macosx_x64.tar.gz",
+                "https://cdn.azul.com/zulu/bin/zulu17.44.53-ca-jdk17.0.8.1-macosx_x64.tar.gz"
+              ]
+            }
+          },
+          "remotejdk21_macos": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk21_macos",
+              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        exclude = [\"jre/bin/plugin2/**\"],\n    ),\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n# This folder holds security policies.\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\", \"release\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre\",\n    ],\n    # Provide the 'java` binary explicitly so that the correct path is used by\n    # Bazel even when the host platform differs from the execution platform.\n    # Exactly one of the two globs will be empty depending on the host platform.\n    # When --incompatible_disallow_empty_glob is enabled, each individual empty\n    # glob will fail without allow_empty = True, even if the overall result is\n    # non-empty.\n    java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n    version = 21,\n)\n",
+              "sha256": "9639b87db586d0c89f7a9892ae47f421e442c64b97baebdff31788fbe23265bd",
+              "strip_prefix": "zulu21.28.85-ca-jdk21.0.0-macosx_x64",
+              "urls": [
+                "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu21.28.85-ca-jdk21.0.0-macosx_x64.tar.gz",
+                "https://cdn.azul.com/zulu/bin/zulu21.28.85-ca-jdk21.0.0-macosx_x64.tar.gz"
+              ]
+            }
+          },
+          "remotejdk21_macos_toolchain_config_repo": {
+            "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl",
+            "ruleClassName": "_toolchain_config",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk21_macos_toolchain_config_repo",
+              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_21\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"21\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"//conditions:default\": \":prefix_version_setting\",\n    }),\n    visibility = [\"//visibility:private\"],\n)\ntoolchain(\n    name = \"toolchain\",\n    target_compatible_with = [\"@platforms//os:macos\", \"@platforms//cpu:x86_64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n    toolchain = \"@remotejdk21_macos//:jdk\",\n)\ntoolchain(\n    name = \"bootstrap_runtime_toolchain\",\n    # These constraints are not required for correctness, but prevent fetches of remote JDK for\n    # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n    # the same configuration, this constraint will not result in toolchain resolution failures.\n    exec_compatible_with = [\"@platforms//os:macos\", \"@platforms//cpu:x86_64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n    toolchain = \"@remotejdk21_macos//:jdk\",\n)\n"
+            }
+          },
+          "remotejdk17_macos_aarch64_toolchain_config_repo": {
+            "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl",
+            "ruleClassName": "_toolchain_config",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk17_macos_aarch64_toolchain_config_repo",
+              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_17\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"17\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"//conditions:default\": \":prefix_version_setting\",\n    }),\n    visibility = [\"//visibility:private\"],\n)\ntoolchain(\n    name = \"toolchain\",\n    target_compatible_with = [\"@platforms//os:macos\", \"@platforms//cpu:aarch64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n    toolchain = \"@remotejdk17_macos_aarch64//:jdk\",\n)\ntoolchain(\n    name = \"bootstrap_runtime_toolchain\",\n    # These constraints are not required for correctness, but prevent fetches of remote JDK for\n    # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n    # the same configuration, this constraint will not result in toolchain resolution failures.\n    exec_compatible_with = [\"@platforms//os:macos\", \"@platforms//cpu:aarch64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n    toolchain = \"@remotejdk17_macos_aarch64//:jdk\",\n)\n"
+            }
+          },
+          "remotejdk17_win": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk17_win",
+              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        exclude = [\"jre/bin/plugin2/**\"],\n    ),\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n# This folder holds security policies.\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\", \"release\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre\",\n    ],\n    # Provide the 'java` binary explicitly so that the correct path is used by\n    # Bazel even when the host platform differs from the execution platform.\n    # Exactly one of the two globs will be empty depending on the host platform.\n    # When --incompatible_disallow_empty_glob is enabled, each individual empty\n    # glob will fail without allow_empty = True, even if the overall result is\n    # non-empty.\n    java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n    version = 17,\n)\n",
+              "sha256": "192f2afca57701de6ec496234f7e45d971bf623ff66b8ee4a5c81582054e5637",
+              "strip_prefix": "zulu17.44.53-ca-jdk17.0.8.1-win_x64",
+              "urls": [
+                "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.44.53-ca-jdk17.0.8.1-win_x64.zip",
+                "https://cdn.azul.com/zulu/bin/zulu17.44.53-ca-jdk17.0.8.1-win_x64.zip"
+              ]
+            }
+          },
+          "remotejdk11_macos_aarch64_toolchain_config_repo": {
+            "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl",
+            "ruleClassName": "_toolchain_config",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk11_macos_aarch64_toolchain_config_repo",
+              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_11\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"11\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"//conditions:default\": \":prefix_version_setting\",\n    }),\n    visibility = [\"//visibility:private\"],\n)\ntoolchain(\n    name = \"toolchain\",\n    target_compatible_with = [\"@platforms//os:macos\", \"@platforms//cpu:aarch64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n    toolchain = \"@remotejdk11_macos_aarch64//:jdk\",\n)\ntoolchain(\n    name = \"bootstrap_runtime_toolchain\",\n    # These constraints are not required for correctness, but prevent fetches of remote JDK for\n    # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n    # the same configuration, this constraint will not result in toolchain resolution failures.\n    exec_compatible_with = [\"@platforms//os:macos\", \"@platforms//cpu:aarch64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n    toolchain = \"@remotejdk11_macos_aarch64//:jdk\",\n)\n"
+            }
+          },
+          "remotejdk11_linux_ppc64le_toolchain_config_repo": {
+            "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl",
+            "ruleClassName": "_toolchain_config",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk11_linux_ppc64le_toolchain_config_repo",
+              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_11\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"11\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"//conditions:default\": \":prefix_version_setting\",\n    }),\n    visibility = [\"//visibility:private\"],\n)\ntoolchain(\n    name = \"toolchain\",\n    target_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:ppc\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n    toolchain = \"@remotejdk11_linux_ppc64le//:jdk\",\n)\ntoolchain(\n    name = \"bootstrap_runtime_toolchain\",\n    # These constraints are not required for correctness, but prevent fetches of remote JDK for\n    # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n    # the same configuration, this constraint will not result in toolchain resolution failures.\n    exec_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:ppc\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n    toolchain = \"@remotejdk11_linux_ppc64le//:jdk\",\n)\n"
+            }
+          },
+          "remotejdk21_linux": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk21_linux",
+              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        exclude = [\"jre/bin/plugin2/**\"],\n    ),\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n# This folder holds security policies.\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\", \"release\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre\",\n    ],\n    # Provide the 'java` binary explicitly so that the correct path is used by\n    # Bazel even when the host platform differs from the execution platform.\n    # Exactly one of the two globs will be empty depending on the host platform.\n    # When --incompatible_disallow_empty_glob is enabled, each individual empty\n    # glob will fail without allow_empty = True, even if the overall result is\n    # non-empty.\n    java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n    version = 21,\n)\n",
+              "sha256": "0c0eadfbdc47a7ca64aeab51b9c061f71b6e4d25d2d87674512e9b6387e9e3a6",
+              "strip_prefix": "zulu21.28.85-ca-jdk21.0.0-linux_x64",
+              "urls": [
+                "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu21.28.85-ca-jdk21.0.0-linux_x64.tar.gz",
+                "https://cdn.azul.com/zulu/bin/zulu21.28.85-ca-jdk21.0.0-linux_x64.tar.gz"
+              ]
+            }
+          },
+          "remote_java_tools_linux": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remote_java_tools_linux",
+              "sha256": "d134da9b04c9023fb6e56a5d4bffccee73f7bc9572ddc4e747778dacccd7a5a7",
+              "urls": [
+                "https://mirror.bazel.build/bazel_java_tools/releases/java/v13.1/java_tools_linux-v13.1.zip",
+                "https://github.com/bazelbuild/java_tools/releases/download/java_v13.1/java_tools_linux-v13.1.zip"
+              ]
+            }
+          },
+          "remotejdk21_win": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk21_win",
+              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        exclude = [\"jre/bin/plugin2/**\"],\n    ),\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n# This folder holds security policies.\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\", \"release\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre\",\n    ],\n    # Provide the 'java` binary explicitly so that the correct path is used by\n    # Bazel even when the host platform differs from the execution platform.\n    # Exactly one of the two globs will be empty depending on the host platform.\n    # When --incompatible_disallow_empty_glob is enabled, each individual empty\n    # glob will fail without allow_empty = True, even if the overall result is\n    # non-empty.\n    java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n    version = 21,\n)\n",
+              "sha256": "e9959d500a0d9a7694ac243baf657761479da132f0f94720cbffd092150bd802",
+              "strip_prefix": "zulu21.28.85-ca-jdk21.0.0-win_x64",
+              "urls": [
+                "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu21.28.85-ca-jdk21.0.0-win_x64.zip",
+                "https://cdn.azul.com/zulu/bin/zulu21.28.85-ca-jdk21.0.0-win_x64.zip"
+              ]
+            }
+          },
+          "remotejdk21_linux_aarch64": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk21_linux_aarch64",
+              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        exclude = [\"jre/bin/plugin2/**\"],\n    ),\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n# This folder holds security policies.\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\", \"release\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre\",\n    ],\n    # Provide the 'java` binary explicitly so that the correct path is used by\n    # Bazel even when the host platform differs from the execution platform.\n    # Exactly one of the two globs will be empty depending on the host platform.\n    # When --incompatible_disallow_empty_glob is enabled, each individual empty\n    # glob will fail without allow_empty = True, even if the overall result is\n    # non-empty.\n    java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n    version = 21,\n)\n",
+              "sha256": "1fb64b8036c5d463d8ab59af06bf5b6b006811e6012e3b0eb6bccf57f1c55835",
+              "strip_prefix": "zulu21.28.85-ca-jdk21.0.0-linux_aarch64",
+              "urls": [
+                "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu21.28.85-ca-jdk21.0.0-linux_aarch64.tar.gz",
+                "https://cdn.azul.com/zulu/bin/zulu21.28.85-ca-jdk21.0.0-linux_aarch64.tar.gz"
+              ]
+            }
+          },
+          "remotejdk11_linux_aarch64_toolchain_config_repo": {
+            "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl",
+            "ruleClassName": "_toolchain_config",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk11_linux_aarch64_toolchain_config_repo",
+              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_11\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"11\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"//conditions:default\": \":prefix_version_setting\",\n    }),\n    visibility = [\"//visibility:private\"],\n)\ntoolchain(\n    name = \"toolchain\",\n    target_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:aarch64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n    toolchain = \"@remotejdk11_linux_aarch64//:jdk\",\n)\ntoolchain(\n    name = \"bootstrap_runtime_toolchain\",\n    # These constraints are not required for correctness, but prevent fetches of remote JDK for\n    # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n    # the same configuration, this constraint will not result in toolchain resolution failures.\n    exec_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:aarch64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n    toolchain = \"@remotejdk11_linux_aarch64//:jdk\",\n)\n"
+            }
+          },
+          "remotejdk11_linux_s390x": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk11_linux_s390x",
+              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        exclude = [\"jre/bin/plugin2/**\"],\n    ),\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n# This folder holds security policies.\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\", \"release\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre\",\n    ],\n    # Provide the 'java` binary explicitly so that the correct path is used by\n    # Bazel even when the host platform differs from the execution platform.\n    # Exactly one of the two globs will be empty depending on the host platform.\n    # When --incompatible_disallow_empty_glob is enabled, each individual empty\n    # glob will fail without allow_empty = True, even if the overall result is\n    # non-empty.\n    java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n    version = 11,\n)\n",
+              "sha256": "a58fc0361966af0a5d5a31a2d8a208e3c9bb0f54f345596fd80b99ea9a39788b",
+              "strip_prefix": "jdk-11.0.15+10",
+              "urls": [
+                "https://mirror.bazel.build/github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.15+10/OpenJDK11U-jdk_s390x_linux_hotspot_11.0.15_10.tar.gz",
+                "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.15+10/OpenJDK11U-jdk_s390x_linux_hotspot_11.0.15_10.tar.gz"
+              ]
+            }
+          },
+          "remotejdk17_linux_aarch64": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk17_linux_aarch64",
+              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        exclude = [\"jre/bin/plugin2/**\"],\n    ),\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n# This folder holds security policies.\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\", \"release\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre\",\n    ],\n    # Provide the 'java` binary explicitly so that the correct path is used by\n    # Bazel even when the host platform differs from the execution platform.\n    # Exactly one of the two globs will be empty depending on the host platform.\n    # When --incompatible_disallow_empty_glob is enabled, each individual empty\n    # glob will fail without allow_empty = True, even if the overall result is\n    # non-empty.\n    java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n    version = 17,\n)\n",
+              "sha256": "6531cef61e416d5a7b691555c8cf2bdff689201b8a001ff45ab6740062b44313",
+              "strip_prefix": "zulu17.44.53-ca-jdk17.0.8.1-linux_aarch64",
+              "urls": [
+                "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.44.53-ca-jdk17.0.8.1-linux_aarch64.tar.gz",
+                "https://cdn.azul.com/zulu/bin/zulu17.44.53-ca-jdk17.0.8.1-linux_aarch64.tar.gz"
+              ]
+            }
+          },
+          "remotejdk17_win_arm64_toolchain_config_repo": {
+            "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl",
+            "ruleClassName": "_toolchain_config",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk17_win_arm64_toolchain_config_repo",
+              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_17\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"17\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"//conditions:default\": \":prefix_version_setting\",\n    }),\n    visibility = [\"//visibility:private\"],\n)\ntoolchain(\n    name = \"toolchain\",\n    target_compatible_with = [\"@platforms//os:windows\", \"@platforms//cpu:arm64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n    toolchain = \"@remotejdk17_win_arm64//:jdk\",\n)\ntoolchain(\n    name = \"bootstrap_runtime_toolchain\",\n    # These constraints are not required for correctness, but prevent fetches of remote JDK for\n    # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n    # the same configuration, this constraint will not result in toolchain resolution failures.\n    exec_compatible_with = [\"@platforms//os:windows\", \"@platforms//cpu:arm64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n    toolchain = \"@remotejdk17_win_arm64//:jdk\",\n)\n"
+            }
+          },
+          "remotejdk11_linux": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk11_linux",
+              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        exclude = [\"jre/bin/plugin2/**\"],\n    ),\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n# This folder holds security policies.\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\", \"release\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre\",\n    ],\n    # Provide the 'java` binary explicitly so that the correct path is used by\n    # Bazel even when the host platform differs from the execution platform.\n    # Exactly one of the two globs will be empty depending on the host platform.\n    # When --incompatible_disallow_empty_glob is enabled, each individual empty\n    # glob will fail without allow_empty = True, even if the overall result is\n    # non-empty.\n    java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n    version = 11,\n)\n",
+              "sha256": "a34b404f87a08a61148b38e1416d837189e1df7a040d949e743633daf4695a3c",
+              "strip_prefix": "zulu11.66.15-ca-jdk11.0.20-linux_x64",
+              "urls": [
+                "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu11.66.15-ca-jdk11.0.20-linux_x64.tar.gz",
+                "https://cdn.azul.com/zulu/bin/zulu11.66.15-ca-jdk11.0.20-linux_x64.tar.gz"
+              ]
+            }
+          },
+          "remotejdk11_macos_toolchain_config_repo": {
+            "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl",
+            "ruleClassName": "_toolchain_config",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk11_macos_toolchain_config_repo",
+              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_11\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"11\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"//conditions:default\": \":prefix_version_setting\",\n    }),\n    visibility = [\"//visibility:private\"],\n)\ntoolchain(\n    name = \"toolchain\",\n    target_compatible_with = [\"@platforms//os:macos\", \"@platforms//cpu:x86_64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n    toolchain = \"@remotejdk11_macos//:jdk\",\n)\ntoolchain(\n    name = \"bootstrap_runtime_toolchain\",\n    # These constraints are not required for correctness, but prevent fetches of remote JDK for\n    # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n    # the same configuration, this constraint will not result in toolchain resolution failures.\n    exec_compatible_with = [\"@platforms//os:macos\", \"@platforms//cpu:x86_64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n    toolchain = \"@remotejdk11_macos//:jdk\",\n)\n"
+            }
+          },
+          "remotejdk17_linux_ppc64le_toolchain_config_repo": {
+            "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl",
+            "ruleClassName": "_toolchain_config",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk17_linux_ppc64le_toolchain_config_repo",
+              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_17\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"17\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"//conditions:default\": \":prefix_version_setting\",\n    }),\n    visibility = [\"//visibility:private\"],\n)\ntoolchain(\n    name = \"toolchain\",\n    target_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:ppc\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n    toolchain = \"@remotejdk17_linux_ppc64le//:jdk\",\n)\ntoolchain(\n    name = \"bootstrap_runtime_toolchain\",\n    # These constraints are not required for correctness, but prevent fetches of remote JDK for\n    # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n    # the same configuration, this constraint will not result in toolchain resolution failures.\n    exec_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:ppc\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n    toolchain = \"@remotejdk17_linux_ppc64le//:jdk\",\n)\n"
+            }
+          },
+          "remotejdk17_win_arm64": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk17_win_arm64",
+              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        exclude = [\"jre/bin/plugin2/**\"],\n    ),\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n# This folder holds security policies.\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\", \"release\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre\",\n    ],\n    # Provide the 'java` binary explicitly so that the correct path is used by\n    # Bazel even when the host platform differs from the execution platform.\n    # Exactly one of the two globs will be empty depending on the host platform.\n    # When --incompatible_disallow_empty_glob is enabled, each individual empty\n    # glob will fail without allow_empty = True, even if the overall result is\n    # non-empty.\n    java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n    version = 17,\n)\n",
+              "sha256": "6802c99eae0d788e21f52d03cab2e2b3bf42bc334ca03cbf19f71eb70ee19f85",
+              "strip_prefix": "zulu17.44.53-ca-jdk17.0.8.1-win_aarch64",
+              "urls": [
+                "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.44.53-ca-jdk17.0.8.1-win_aarch64.zip",
+                "https://cdn.azul.com/zulu/bin/zulu17.44.53-ca-jdk17.0.8.1-win_aarch64.zip"
+              ]
+            }
+          },
+          "remote_java_tools_darwin_arm64": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remote_java_tools_darwin_arm64",
+              "sha256": "dab5bb87ec43e980faea6e1cec14bafb217b8e2f5346f53aa784fd715929a930",
+              "urls": [
+                "https://mirror.bazel.build/bazel_java_tools/releases/java/v13.1/java_tools_darwin_arm64-v13.1.zip",
+                "https://github.com/bazelbuild/java_tools/releases/download/java_v13.1/java_tools_darwin_arm64-v13.1.zip"
+              ]
+            }
+          },
+          "remotejdk17_linux_ppc64le": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk17_linux_ppc64le",
+              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        exclude = [\"jre/bin/plugin2/**\"],\n    ),\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n# This folder holds security policies.\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\", \"release\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre\",\n    ],\n    # Provide the 'java` binary explicitly so that the correct path is used by\n    # Bazel even when the host platform differs from the execution platform.\n    # Exactly one of the two globs will be empty depending on the host platform.\n    # When --incompatible_disallow_empty_glob is enabled, each individual empty\n    # glob will fail without allow_empty = True, even if the overall result is\n    # non-empty.\n    java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n    version = 17,\n)\n",
+              "sha256": "00a4c07603d0218cd678461b5b3b7e25b3253102da4022d31fc35907f21a2efd",
+              "strip_prefix": "jdk-17.0.8.1+1",
+              "urls": [
+                "https://mirror.bazel.build/github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.8.1%2B1/OpenJDK17U-jdk_ppc64le_linux_hotspot_17.0.8.1_1.tar.gz",
+                "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.8.1%2B1/OpenJDK17U-jdk_ppc64le_linux_hotspot_17.0.8.1_1.tar.gz"
+              ]
+            }
+          },
+          "remotejdk21_linux_aarch64_toolchain_config_repo": {
+            "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl",
+            "ruleClassName": "_toolchain_config",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk21_linux_aarch64_toolchain_config_repo",
+              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_21\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"21\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"//conditions:default\": \":prefix_version_setting\",\n    }),\n    visibility = [\"//visibility:private\"],\n)\ntoolchain(\n    name = \"toolchain\",\n    target_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:aarch64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n    toolchain = \"@remotejdk21_linux_aarch64//:jdk\",\n)\ntoolchain(\n    name = \"bootstrap_runtime_toolchain\",\n    # These constraints are not required for correctness, but prevent fetches of remote JDK for\n    # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n    # the same configuration, this constraint will not result in toolchain resolution failures.\n    exec_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:aarch64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n    toolchain = \"@remotejdk21_linux_aarch64//:jdk\",\n)\n"
+            }
+          },
+          "remotejdk11_win_arm64_toolchain_config_repo": {
+            "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl",
+            "ruleClassName": "_toolchain_config",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk11_win_arm64_toolchain_config_repo",
+              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_11\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"11\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"//conditions:default\": \":prefix_version_setting\",\n    }),\n    visibility = [\"//visibility:private\"],\n)\ntoolchain(\n    name = \"toolchain\",\n    target_compatible_with = [\"@platforms//os:windows\", \"@platforms//cpu:arm64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n    toolchain = \"@remotejdk11_win_arm64//:jdk\",\n)\ntoolchain(\n    name = \"bootstrap_runtime_toolchain\",\n    # These constraints are not required for correctness, but prevent fetches of remote JDK for\n    # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n    # the same configuration, this constraint will not result in toolchain resolution failures.\n    exec_compatible_with = [\"@platforms//os:windows\", \"@platforms//cpu:arm64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n    toolchain = \"@remotejdk11_win_arm64//:jdk\",\n)\n"
+            }
+          },
+          "local_jdk": {
+            "bzlFile": "@@rules_java~7.1.0//toolchains:local_java_repository.bzl",
+            "ruleClassName": "_local_java_repository_rule",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~local_jdk",
+              "java_home": "",
+              "version": "",
+              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        exclude = [\"jre/bin/plugin2/**\"],\n    ),\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n# This folder holds security policies.\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\", \"release\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre\",\n    ],\n    # Provide the 'java` binary explicitly so that the correct path is used by\n    # Bazel even when the host platform differs from the execution platform.\n    # Exactly one of the two globs will be empty depending on the host platform.\n    # When --incompatible_disallow_empty_glob is enabled, each individual empty\n    # glob will fail without allow_empty = True, even if the overall result is\n    # non-empty.\n    java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n    version = {RUNTIME_VERSION},\n)\n"
+            }
+          },
+          "remote_java_tools_darwin_x86_64": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remote_java_tools_darwin_x86_64",
+              "sha256": "0db40d8505a2b65ef0ed46e4256757807db8162f7acff16225be57c1d5726dbc",
+              "urls": [
+                "https://mirror.bazel.build/bazel_java_tools/releases/java/v13.1/java_tools_darwin_x86_64-v13.1.zip",
+                "https://github.com/bazelbuild/java_tools/releases/download/java_v13.1/java_tools_darwin_x86_64-v13.1.zip"
+              ]
+            }
+          },
+          "remote_java_tools": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remote_java_tools",
+              "sha256": "286bdbbd66e616fc4ed3f90101418729a73baa7e8c23a98ffbef558f74c0ad14",
+              "urls": [
+                "https://mirror.bazel.build/bazel_java_tools/releases/java/v13.1/java_tools-v13.1.zip",
+                "https://github.com/bazelbuild/java_tools/releases/download/java_v13.1/java_tools-v13.1.zip"
+              ]
+            }
+          },
+          "remotejdk17_linux_s390x": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk17_linux_s390x",
+              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        exclude = [\"jre/bin/plugin2/**\"],\n    ),\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n# This folder holds security policies.\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\", \"release\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre\",\n    ],\n    # Provide the 'java` binary explicitly so that the correct path is used by\n    # Bazel even when the host platform differs from the execution platform.\n    # Exactly one of the two globs will be empty depending on the host platform.\n    # When --incompatible_disallow_empty_glob is enabled, each individual empty\n    # glob will fail without allow_empty = True, even if the overall result is\n    # non-empty.\n    java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n    version = 17,\n)\n",
+              "sha256": "ffacba69c6843d7ca70d572489d6cc7ab7ae52c60f0852cedf4cf0d248b6fc37",
+              "strip_prefix": "jdk-17.0.8.1+1",
+              "urls": [
+                "https://mirror.bazel.build/github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.8.1%2B1/OpenJDK17U-jdk_s390x_linux_hotspot_17.0.8.1_1.tar.gz",
+                "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.8.1%2B1/OpenJDK17U-jdk_s390x_linux_hotspot_17.0.8.1_1.tar.gz"
+              ]
+            }
+          },
+          "remotejdk17_win_toolchain_config_repo": {
+            "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl",
+            "ruleClassName": "_toolchain_config",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk17_win_toolchain_config_repo",
+              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_17\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"17\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"//conditions:default\": \":prefix_version_setting\",\n    }),\n    visibility = [\"//visibility:private\"],\n)\ntoolchain(\n    name = \"toolchain\",\n    target_compatible_with = [\"@platforms//os:windows\", \"@platforms//cpu:x86_64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n    toolchain = \"@remotejdk17_win//:jdk\",\n)\ntoolchain(\n    name = \"bootstrap_runtime_toolchain\",\n    # These constraints are not required for correctness, but prevent fetches of remote JDK for\n    # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n    # the same configuration, this constraint will not result in toolchain resolution failures.\n    exec_compatible_with = [\"@platforms//os:windows\", \"@platforms//cpu:x86_64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n    toolchain = \"@remotejdk17_win//:jdk\",\n)\n"
+            }
+          },
+          "remotejdk11_linux_ppc64le": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk11_linux_ppc64le",
+              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        exclude = [\"jre/bin/plugin2/**\"],\n    ),\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n# This folder holds security policies.\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\", \"release\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre\",\n    ],\n    # Provide the 'java` binary explicitly so that the correct path is used by\n    # Bazel even when the host platform differs from the execution platform.\n    # Exactly one of the two globs will be empty depending on the host platform.\n    # When --incompatible_disallow_empty_glob is enabled, each individual empty\n    # glob will fail without allow_empty = True, even if the overall result is\n    # non-empty.\n    java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n    version = 11,\n)\n",
+              "sha256": "a8fba686f6eb8ae1d1a9566821dbd5a85a1108b96ad857fdbac5c1e4649fc56f",
+              "strip_prefix": "jdk-11.0.15+10",
+              "urls": [
+                "https://mirror.bazel.build/github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.15+10/OpenJDK11U-jdk_ppc64le_linux_hotspot_11.0.15_10.tar.gz",
+                "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.15+10/OpenJDK11U-jdk_ppc64le_linux_hotspot_11.0.15_10.tar.gz"
+              ]
+            }
+          },
+          "remotejdk11_macos_aarch64": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk11_macos_aarch64",
+              "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n    name = \"jre\",\n    srcs = glob(\n        [\n            \"jre/bin/**\",\n            \"jre/lib/**\",\n        ],\n        allow_empty = True,\n        # In some configurations, Java browser plugin is considered harmful and\n        # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n        # so do not include it in JRE on Windows.\n        exclude = [\"jre/bin/plugin2/**\"],\n    ),\n)\n\nfilegroup(\n    name = \"jdk-bin\",\n    srcs = glob(\n        [\"bin/**\"],\n        # The JDK on Windows sometimes contains a directory called\n        # \"%systemroot%\", which is not a valid label.\n        exclude = [\"**/*%*/**\"],\n    ),\n)\n\n# This folder holds security policies.\nfilegroup(\n    name = \"jdk-conf\",\n    srcs = glob(\n        [\"conf/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-include\",\n    srcs = glob(\n        [\"include/**\"],\n        allow_empty = True,\n    ),\n)\n\nfilegroup(\n    name = \"jdk-lib\",\n    srcs = glob(\n        [\"lib/**\", \"release\"],\n        allow_empty = True,\n        exclude = [\n            \"lib/missioncontrol/**\",\n            \"lib/visualvm/**\",\n        ],\n    ),\n)\n\njava_runtime(\n    name = \"jdk\",\n    srcs = [\n        \":jdk-bin\",\n        \":jdk-conf\",\n        \":jdk-include\",\n        \":jdk-lib\",\n        \":jre\",\n    ],\n    # Provide the 'java` binary explicitly so that the correct path is used by\n    # Bazel even when the host platform differs from the execution platform.\n    # Exactly one of the two globs will be empty depending on the host platform.\n    # When --incompatible_disallow_empty_glob is enabled, each individual empty\n    # glob will fail without allow_empty = True, even if the overall result is\n    # non-empty.\n    java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n    version = 11,\n)\n",
+              "sha256": "7632bc29f8a4b7d492b93f3bc75a7b61630894db85d136456035ab2a24d38885",
+              "strip_prefix": "zulu11.66.15-ca-jdk11.0.20-macosx_aarch64",
+              "urls": [
+                "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu11.66.15-ca-jdk11.0.20-macosx_aarch64.tar.gz",
+                "https://cdn.azul.com/zulu/bin/zulu11.66.15-ca-jdk11.0.20-macosx_aarch64.tar.gz"
+              ]
+            }
+          },
+          "remotejdk21_win_toolchain_config_repo": {
+            "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl",
+            "ruleClassName": "_toolchain_config",
+            "attributes": {
+              "name": "rules_java~7.1.0~toolchains~remotejdk21_win_toolchain_config_repo",
+              "build_file": "\nconfig_setting(\n    name = \"prefix_version_setting\",\n    values = {\"java_runtime_version\": \"remotejdk_21\"},\n    visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n    name = \"version_setting\",\n    values = {\"java_runtime_version\": \"21\"},\n    visibility = [\"//visibility:private\"],\n)\nalias(\n    name = \"version_or_prefix_version_setting\",\n    actual = select({\n        \":version_setting\": \":version_setting\",\n        \"//conditions:default\": \":prefix_version_setting\",\n    }),\n    visibility = [\"//visibility:private\"],\n)\ntoolchain(\n    name = \"toolchain\",\n    target_compatible_with = [\"@platforms//os:windows\", \"@platforms//cpu:x86_64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n    toolchain = \"@remotejdk21_win//:jdk\",\n)\ntoolchain(\n    name = \"bootstrap_runtime_toolchain\",\n    # These constraints are not required for correctness, but prevent fetches of remote JDK for\n    # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n    # the same configuration, this constraint will not result in toolchain resolution failures.\n    exec_compatible_with = [\"@platforms//os:windows\", \"@platforms//cpu:x86_64\"],\n    target_settings = [\":version_or_prefix_version_setting\"],\n    toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n    toolchain = \"@remotejdk21_win//:jdk\",\n)\n"
+            }
+          }
+        }
+      }
+    },
+    "@@rules_jvm_external~4.4.2//:extensions.bzl%maven": {
+      "general": {
+        "bzlTransitiveDigest": "SNZtnmBkSzitA86+iyWV+lsMoWqTaHkbJeV673xyy3k=",
+        "accumulatedFileDigests": {
+          "@@rules_jvm_external~4.4.2//:rules_jvm_external_deps_install.json": "10442a5ae27d9ff4c2003e5ab71643bf0d8b48dcf968b4173fa274c3232a8c06"
+        },
+        "envVariables": {},
+        "generatedRepoSpecs": {
+          "org_slf4j_slf4j_api_1_7_30": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~org_slf4j_slf4j_api_1_7_30",
+              "sha256": "cdba07964d1bb40a0761485c6b1e8c2f8fd9eb1d19c53928ac0d7f9510105c57",
+              "urls": [
+                "https://repo1.maven.org/maven2/org/slf4j/slf4j-api/1.7.30/slf4j-api-1.7.30.jar",
+                "https://maven.google.com/org/slf4j/slf4j-api/1.7.30/slf4j-api-1.7.30.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/org/slf4j/slf4j-api/1.7.30/slf4j-api-1.7.30.jar"
+            }
+          },
+          "com_google_api_grpc_proto_google_common_protos_2_0_1": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~com_google_api_grpc_proto_google_common_protos_2_0_1",
+              "sha256": "5ce71656118618731e34a5d4c61aa3a031be23446dc7de8b5a5e77b66ebcd6ef",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/api/grpc/proto-google-common-protos/2.0.1/proto-google-common-protos-2.0.1.jar",
+                "https://maven.google.com/com/google/api/grpc/proto-google-common-protos/2.0.1/proto-google-common-protos-2.0.1.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/com/google/api/grpc/proto-google-common-protos/2.0.1/proto-google-common-protos-2.0.1.jar"
+            }
+          },
+          "com_google_api_gax_1_60_0": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~com_google_api_gax_1_60_0",
+              "sha256": "02f37d4ff1a7b8d71dff8064cf9568aa4f4b61bcc4485085d16130f32afa5a79",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/api/gax/1.60.0/gax-1.60.0.jar",
+                "https://maven.google.com/com/google/api/gax/1.60.0/gax-1.60.0.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/com/google/api/gax/1.60.0/gax-1.60.0.jar"
+            }
+          },
+          "com_google_guava_failureaccess_1_0_1": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~com_google_guava_failureaccess_1_0_1",
+              "sha256": "a171ee4c734dd2da837e4b16be9df4661afab72a41adaf31eb84dfdaf936ca26",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar",
+                "https://maven.google.com/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar"
+            }
+          },
+          "commons_logging_commons_logging_1_2": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~commons_logging_commons_logging_1_2",
+              "sha256": "daddea1ea0be0f56978ab3006b8ac92834afeefbd9b7e4e6316fca57df0fa636",
+              "urls": [
+                "https://repo1.maven.org/maven2/commons-logging/commons-logging/1.2/commons-logging-1.2.jar",
+                "https://maven.google.com/commons-logging/commons-logging/1.2/commons-logging-1.2.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/commons-logging/commons-logging/1.2/commons-logging-1.2.jar"
+            }
+          },
+          "com_google_http_client_google_http_client_appengine_1_38_0": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~com_google_http_client_google_http_client_appengine_1_38_0",
+              "sha256": "f97b495fd97ac3a3d59099eb2b55025f4948230da15a076f189b9cff37c6b4d2",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/http-client/google-http-client-appengine/1.38.0/google-http-client-appengine-1.38.0.jar",
+                "https://maven.google.com/com/google/http-client/google-http-client-appengine/1.38.0/google-http-client-appengine-1.38.0.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/com/google/http-client/google-http-client-appengine/1.38.0/google-http-client-appengine-1.38.0.jar"
+            }
+          },
+          "com_google_cloud_google_cloud_storage_1_113_4": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~com_google_cloud_google_cloud_storage_1_113_4",
+              "sha256": "796833e9bdab80c40bbc820e65087eb8f28c6bfbca194d2e3e00d98cb5bc55d6",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/cloud/google-cloud-storage/1.113.4/google-cloud-storage-1.113.4.jar",
+                "https://maven.google.com/com/google/cloud/google-cloud-storage/1.113.4/google-cloud-storage-1.113.4.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/com/google/cloud/google-cloud-storage/1.113.4/google-cloud-storage-1.113.4.jar"
+            }
+          },
+          "io_grpc_grpc_context_1_33_1": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~io_grpc_grpc_context_1_33_1",
+              "sha256": "99b8aea2b614fe0e61c3676e681259dc43c2de7f64620998e1a8435eb2976496",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/grpc/grpc-context/1.33.1/grpc-context-1.33.1.jar",
+                "https://maven.google.com/io/grpc/grpc-context/1.33.1/grpc-context-1.33.1.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/io/grpc/grpc-context/1.33.1/grpc-context-1.33.1.jar"
+            }
+          },
+          "com_google_api_grpc_proto_google_iam_v1_1_0_3": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~com_google_api_grpc_proto_google_iam_v1_1_0_3",
+              "sha256": "64cee7383a97e846da8d8e160e6c8fe30561e507260552c59e6ccfc81301fdc8",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/api/grpc/proto-google-iam-v1/1.0.3/proto-google-iam-v1-1.0.3.jar",
+                "https://maven.google.com/com/google/api/grpc/proto-google-iam-v1/1.0.3/proto-google-iam-v1-1.0.3.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/com/google/api/grpc/proto-google-iam-v1/1.0.3/proto-google-iam-v1-1.0.3.jar"
+            }
+          },
+          "com_google_api_api_common_1_10_1": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~com_google_api_api_common_1_10_1",
+              "sha256": "2a033f24bb620383eda440ad307cb8077cfec1c7eadc684d65216123a1b9613a",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/api/api-common/1.10.1/api-common-1.10.1.jar",
+                "https://maven.google.com/com/google/api/api-common/1.10.1/api-common-1.10.1.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/com/google/api/api-common/1.10.1/api-common-1.10.1.jar"
+            }
+          },
+          "com_google_auth_google_auth_library_oauth2_http_0_22_0": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~com_google_auth_google_auth_library_oauth2_http_0_22_0",
+              "sha256": "1722d895c42dc42ea1d1f392ddbec1fbb28f7a979022c3a6c29acc39cc777ad1",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/auth/google-auth-library-oauth2-http/0.22.0/google-auth-library-oauth2-http-0.22.0.jar",
+                "https://maven.google.com/com/google/auth/google-auth-library-oauth2-http/0.22.0/google-auth-library-oauth2-http-0.22.0.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/com/google/auth/google-auth-library-oauth2-http/0.22.0/google-auth-library-oauth2-http-0.22.0.jar"
+            }
+          },
+          "com_typesafe_netty_netty_reactive_streams_2_0_5": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~com_typesafe_netty_netty_reactive_streams_2_0_5",
+              "sha256": "f949849fc8ee75fde468ba3a35df2e04577fa31a2940b83b2a7dc9d14dac13d6",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/typesafe/netty/netty-reactive-streams/2.0.5/netty-reactive-streams-2.0.5.jar",
+                "https://maven.google.com/com/typesafe/netty/netty-reactive-streams/2.0.5/netty-reactive-streams-2.0.5.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/com/typesafe/netty/netty-reactive-streams/2.0.5/netty-reactive-streams-2.0.5.jar"
+            }
+          },
+          "com_typesafe_netty_netty_reactive_streams_http_2_0_5": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~com_typesafe_netty_netty_reactive_streams_http_2_0_5",
+              "sha256": "b39224751ad936758176e9d994230380ade5e9079e7c8ad778e3995779bcf303",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/typesafe/netty/netty-reactive-streams-http/2.0.5/netty-reactive-streams-http-2.0.5.jar",
+                "https://maven.google.com/com/typesafe/netty/netty-reactive-streams-http/2.0.5/netty-reactive-streams-http-2.0.5.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/com/typesafe/netty/netty-reactive-streams-http/2.0.5/netty-reactive-streams-http-2.0.5.jar"
+            }
+          },
+          "javax_annotation_javax_annotation_api_1_3_2": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~javax_annotation_javax_annotation_api_1_3_2",
+              "sha256": "e04ba5195bcd555dc95650f7cc614d151e4bcd52d29a10b8aa2197f3ab89ab9b",
+              "urls": [
+                "https://repo1.maven.org/maven2/javax/annotation/javax.annotation-api/1.3.2/javax.annotation-api-1.3.2.jar",
+                "https://maven.google.com/javax/annotation/javax.annotation-api/1.3.2/javax.annotation-api-1.3.2.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/javax/annotation/javax.annotation-api/1.3.2/javax.annotation-api-1.3.2.jar"
+            }
+          },
+          "com_google_j2objc_j2objc_annotations_1_3": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~com_google_j2objc_j2objc_annotations_1_3",
+              "sha256": "21af30c92267bd6122c0e0b4d20cccb6641a37eaf956c6540ec471d584e64a7b",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar",
+                "https://maven.google.com/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar"
+            }
+          },
+          "software_amazon_awssdk_metrics_spi_2_17_183": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~software_amazon_awssdk_metrics_spi_2_17_183",
+              "sha256": "08a11dc8c4ba464beafbcc7ac05b8c724c1ccb93da99482e82a68540ac704e4a",
+              "urls": [
+                "https://repo1.maven.org/maven2/software/amazon/awssdk/metrics-spi/2.17.183/metrics-spi-2.17.183.jar",
+                "https://maven.google.com/software/amazon/awssdk/metrics-spi/2.17.183/metrics-spi-2.17.183.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/software/amazon/awssdk/metrics-spi/2.17.183/metrics-spi-2.17.183.jar"
+            }
+          },
+          "org_reactivestreams_reactive_streams_1_0_3": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~org_reactivestreams_reactive_streams_1_0_3",
+              "sha256": "1dee0481072d19c929b623e155e14d2f6085dc011529a0a0dbefc84cf571d865",
+              "urls": [
+                "https://repo1.maven.org/maven2/org/reactivestreams/reactive-streams/1.0.3/reactive-streams-1.0.3.jar",
+                "https://maven.google.com/org/reactivestreams/reactive-streams/1.0.3/reactive-streams-1.0.3.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/org/reactivestreams/reactive-streams/1.0.3/reactive-streams-1.0.3.jar"
+            }
+          },
+          "com_google_http_client_google_http_client_jackson2_1_38_0": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~com_google_http_client_google_http_client_jackson2_1_38_0",
+              "sha256": "e6504a82425fcc2168a4ca4175138ddcc085168daed8cdedb86d8f6fdc296e1e",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/http-client/google-http-client-jackson2/1.38.0/google-http-client-jackson2-1.38.0.jar",
+                "https://maven.google.com/com/google/http-client/google-http-client-jackson2/1.38.0/google-http-client-jackson2-1.38.0.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/com/google/http-client/google-http-client-jackson2/1.38.0/google-http-client-jackson2-1.38.0.jar"
+            }
+          },
+          "io_netty_netty_transport_4_1_72_Final": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~io_netty_netty_transport_4_1_72_Final",
+              "sha256": "c5fb68e9a65b6e8a516adfcb9fa323479ee7b4d9449d8a529d2ecab3d3711d5a",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/netty/netty-transport/4.1.72.Final/netty-transport-4.1.72.Final.jar",
+                "https://maven.google.com/io/netty/netty-transport/4.1.72.Final/netty-transport-4.1.72.Final.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/io/netty/netty-transport/4.1.72.Final/netty-transport-4.1.72.Final.jar"
+            }
+          },
+          "io_netty_netty_codec_http2_4_1_72_Final": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~io_netty_netty_codec_http2_4_1_72_Final",
+              "sha256": "c89a70500f59e8563e720aaa808263a514bd9e2bd91ba84eab8c2ccb45f234b2",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/netty/netty-codec-http2/4.1.72.Final/netty-codec-http2-4.1.72.Final.jar",
+                "https://maven.google.com/io/netty/netty-codec-http2/4.1.72.Final/netty-codec-http2-4.1.72.Final.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/io/netty/netty-codec-http2/4.1.72.Final/netty-codec-http2-4.1.72.Final.jar"
+            }
+          },
+          "io_opencensus_opencensus_api_0_24_0": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~io_opencensus_opencensus_api_0_24_0",
+              "sha256": "f561b1cc2673844288e596ddf5bb6596868a8472fd2cb8993953fc5c034b2352",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/opencensus/opencensus-api/0.24.0/opencensus-api-0.24.0.jar",
+                "https://maven.google.com/io/opencensus/opencensus-api/0.24.0/opencensus-api-0.24.0.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/io/opencensus/opencensus-api/0.24.0/opencensus-api-0.24.0.jar"
+            }
+          },
+          "rules_jvm_external_deps": {
+            "bzlFile": "@@rules_jvm_external~4.4.2//:coursier.bzl",
+            "ruleClassName": "pinned_coursier_fetch",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~rules_jvm_external_deps",
+              "repositories": [
+                "{ \"repo_url\": \"https://repo1.maven.org/maven2\" }"
+              ],
+              "artifacts": [
+                "{\"artifact\":\"google-cloud-core\",\"group\":\"com.google.cloud\",\"version\":\"1.93.10\"}",
+                "{\"artifact\":\"google-cloud-storage\",\"group\":\"com.google.cloud\",\"version\":\"1.113.4\"}",
+                "{\"artifact\":\"gson\",\"group\":\"com.google.code.gson\",\"version\":\"2.9.0\"}",
+                "{\"artifact\":\"maven-artifact\",\"group\":\"org.apache.maven\",\"version\":\"3.8.6\"}",
+                "{\"artifact\":\"s3\",\"group\":\"software.amazon.awssdk\",\"version\":\"2.17.183\"}"
+              ],
+              "fetch_sources": true,
+              "fetch_javadoc": false,
+              "generate_compat_repositories": false,
+              "maven_install_json": "@@rules_jvm_external~4.4.2//:rules_jvm_external_deps_install.json",
+              "override_targets": {},
+              "strict_visibility": false,
+              "strict_visibility_value": [
+                "@@//visibility:private"
+              ],
+              "jetify": false,
+              "jetify_include_list": [
+                "*"
+              ],
+              "additional_netrc_lines": [],
+              "fail_if_repin_required": false,
+              "use_starlark_android_rules": false,
+              "aar_import_bzl_label": "@build_bazel_rules_android//android:rules.bzl",
+              "duplicate_version_warning": "warn"
+            }
+          },
+          "org_threeten_threetenbp_1_5_0": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~org_threeten_threetenbp_1_5_0",
+              "sha256": "dcf9c0f940739f2a825cd8626ff27113459a2f6eb18797c7152f93fff69c264f",
+              "urls": [
+                "https://repo1.maven.org/maven2/org/threeten/threetenbp/1.5.0/threetenbp-1.5.0.jar",
+                "https://maven.google.com/org/threeten/threetenbp/1.5.0/threetenbp-1.5.0.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/org/threeten/threetenbp/1.5.0/threetenbp-1.5.0.jar"
+            }
+          },
+          "software_amazon_awssdk_http_client_spi_2_17_183": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~software_amazon_awssdk_http_client_spi_2_17_183",
+              "sha256": "fe7120f175df9e47ebcc5d946d7f40110faf2ba0a30364f3b935d5b8a5a6c3c6",
+              "urls": [
+                "https://repo1.maven.org/maven2/software/amazon/awssdk/http-client-spi/2.17.183/http-client-spi-2.17.183.jar",
+                "https://maven.google.com/software/amazon/awssdk/http-client-spi/2.17.183/http-client-spi-2.17.183.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/software/amazon/awssdk/http-client-spi/2.17.183/http-client-spi-2.17.183.jar"
+            }
+          },
+          "software_amazon_awssdk_third_party_jackson_core_2_17_183": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~software_amazon_awssdk_third_party_jackson_core_2_17_183",
+              "sha256": "1bc27c9960993c20e1ab058012dd1ae04c875eec9f0f08f2b2ca41e578dee9a4",
+              "urls": [
+                "https://repo1.maven.org/maven2/software/amazon/awssdk/third-party-jackson-core/2.17.183/third-party-jackson-core-2.17.183.jar",
+                "https://maven.google.com/software/amazon/awssdk/third-party-jackson-core/2.17.183/third-party-jackson-core-2.17.183.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/software/amazon/awssdk/third-party-jackson-core/2.17.183/third-party-jackson-core-2.17.183.jar"
+            }
+          },
+          "software_amazon_eventstream_eventstream_1_0_1": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~software_amazon_eventstream_eventstream_1_0_1",
+              "sha256": "0c37d8e696117f02c302191b8110b0d0eb20fa412fce34c3a269ec73c16ce822",
+              "urls": [
+                "https://repo1.maven.org/maven2/software/amazon/eventstream/eventstream/1.0.1/eventstream-1.0.1.jar",
+                "https://maven.google.com/software/amazon/eventstream/eventstream/1.0.1/eventstream-1.0.1.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/software/amazon/eventstream/eventstream/1.0.1/eventstream-1.0.1.jar"
+            }
+          },
+          "com_google_oauth_client_google_oauth_client_1_31_1": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~com_google_oauth_client_google_oauth_client_1_31_1",
+              "sha256": "4ed4e2948251dbda66ce251bd7f3b32cd8570055e5cdb165a3c7aea8f43da0ff",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/oauth-client/google-oauth-client/1.31.1/google-oauth-client-1.31.1.jar",
+                "https://maven.google.com/com/google/oauth-client/google-oauth-client/1.31.1/google-oauth-client-1.31.1.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/com/google/oauth-client/google-oauth-client/1.31.1/google-oauth-client-1.31.1.jar"
+            }
+          },
+          "maven": {
+            "bzlFile": "@@rules_jvm_external~4.4.2//:coursier.bzl",
+            "ruleClassName": "coursier_fetch",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~maven",
+              "repositories": [
+                "{ \"repo_url\": \"https://repo1.maven.org/maven2\" }"
+              ],
+              "artifacts": [
+                "{\"artifact\":\"jsr305\",\"group\":\"com.google.code.findbugs\",\"version\":\"3.0.2\"}",
+                "{\"artifact\":\"gson\",\"group\":\"com.google.code.gson\",\"version\":\"2.8.9\"}",
+                "{\"artifact\":\"error_prone_annotations\",\"group\":\"com.google.errorprone\",\"version\":\"2.3.2\"}",
+                "{\"artifact\":\"j2objc-annotations\",\"group\":\"com.google.j2objc\",\"version\":\"1.3\"}",
+                "{\"artifact\":\"guava\",\"group\":\"com.google.guava\",\"version\":\"31.1-jre\"}",
+                "{\"artifact\":\"guava-testlib\",\"group\":\"com.google.guava\",\"version\":\"31.1-jre\"}",
+                "{\"artifact\":\"truth\",\"group\":\"com.google.truth\",\"version\":\"1.1.2\"}",
+                "{\"artifact\":\"junit\",\"group\":\"junit\",\"version\":\"4.13.2\"}",
+                "{\"artifact\":\"mockito-core\",\"group\":\"org.mockito\",\"version\":\"4.3.1\"}"
+              ],
+              "fail_on_missing_checksum": true,
+              "fetch_sources": true,
+              "fetch_javadoc": false,
+              "use_unsafe_shared_cache": false,
+              "excluded_artifacts": [],
+              "generate_compat_repositories": false,
+              "version_conflict_policy": "default",
+              "override_targets": {},
+              "strict_visibility": false,
+              "strict_visibility_value": [
+                "@@//visibility:private"
+              ],
+              "resolve_timeout": 600,
+              "jetify": false,
+              "jetify_include_list": [
+                "*"
+              ],
+              "use_starlark_android_rules": false,
+              "aar_import_bzl_label": "@build_bazel_rules_android//android:rules.bzl",
+              "duplicate_version_warning": "warn"
+            }
+          },
+          "software_amazon_awssdk_aws_xml_protocol_2_17_183": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~software_amazon_awssdk_aws_xml_protocol_2_17_183",
+              "sha256": "566bba05d49256fa6994efd68fa625ae05a62ea45ee74bb9130d20ea20988363",
+              "urls": [
+                "https://repo1.maven.org/maven2/software/amazon/awssdk/aws-xml-protocol/2.17.183/aws-xml-protocol-2.17.183.jar",
+                "https://maven.google.com/software/amazon/awssdk/aws-xml-protocol/2.17.183/aws-xml-protocol-2.17.183.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/software/amazon/awssdk/aws-xml-protocol/2.17.183/aws-xml-protocol-2.17.183.jar"
+            }
+          },
+          "software_amazon_awssdk_annotations_2_17_183": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~software_amazon_awssdk_annotations_2_17_183",
+              "sha256": "8e4d72361ca805a0bd8bbd9017cd7ff77c8d170f2dd469c7d52d5653330bb3fd",
+              "urls": [
+                "https://repo1.maven.org/maven2/software/amazon/awssdk/annotations/2.17.183/annotations-2.17.183.jar",
+                "https://maven.google.com/software/amazon/awssdk/annotations/2.17.183/annotations-2.17.183.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/software/amazon/awssdk/annotations/2.17.183/annotations-2.17.183.jar"
+            }
+          },
+          "software_amazon_awssdk_netty_nio_client_2_17_183": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~software_amazon_awssdk_netty_nio_client_2_17_183",
+              "sha256": "a6d356f364c56d7b90006b0b7e503b8630010993a5587ce42e74b10b8dca2238",
+              "urls": [
+                "https://repo1.maven.org/maven2/software/amazon/awssdk/netty-nio-client/2.17.183/netty-nio-client-2.17.183.jar",
+                "https://maven.google.com/software/amazon/awssdk/netty-nio-client/2.17.183/netty-nio-client-2.17.183.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/software/amazon/awssdk/netty-nio-client/2.17.183/netty-nio-client-2.17.183.jar"
+            }
+          },
+          "com_google_auto_value_auto_value_annotations_1_7_4": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~com_google_auto_value_auto_value_annotations_1_7_4",
+              "sha256": "fedd59b0b4986c342f6ab2d182f2a4ee9fceb2c7e2d5bdc4dc764c92394a23d3",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/auto/value/auto-value-annotations/1.7.4/auto-value-annotations-1.7.4.jar",
+                "https://maven.google.com/com/google/auto/value/auto-value-annotations/1.7.4/auto-value-annotations-1.7.4.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/com/google/auto/value/auto-value-annotations/1.7.4/auto-value-annotations-1.7.4.jar"
+            }
+          },
+          "io_netty_netty_transport_native_unix_common_4_1_72_Final": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~io_netty_netty_transport_native_unix_common_4_1_72_Final",
+              "sha256": "6f8f1cc29b5a234eeee9439a63eb3f03a5994aa540ff555cb0b2c88cefaf6877",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/netty/netty-transport-native-unix-common/4.1.72.Final/netty-transport-native-unix-common-4.1.72.Final.jar",
+                "https://maven.google.com/io/netty/netty-transport-native-unix-common/4.1.72.Final/netty-transport-native-unix-common-4.1.72.Final.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/io/netty/netty-transport-native-unix-common/4.1.72.Final/netty-transport-native-unix-common-4.1.72.Final.jar"
+            }
+          },
+          "io_opencensus_opencensus_contrib_http_util_0_24_0": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~io_opencensus_opencensus_contrib_http_util_0_24_0",
+              "sha256": "7155273bbb1ed3d477ea33cf19d7bbc0b285ff395f43b29ae576722cf247000f",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/opencensus/opencensus-contrib-http-util/0.24.0/opencensus-contrib-http-util-0.24.0.jar",
+                "https://maven.google.com/io/opencensus/opencensus-contrib-http-util/0.24.0/opencensus-contrib-http-util-0.24.0.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/io/opencensus/opencensus-contrib-http-util/0.24.0/opencensus-contrib-http-util-0.24.0.jar"
+            }
+          },
+          "com_fasterxml_jackson_core_jackson_core_2_11_3": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~com_fasterxml_jackson_core_jackson_core_2_11_3",
+              "sha256": "78cd0a6b936232e06dd3e38da8a0345348a09cd1ff9c4d844c6ee72c75cfc402",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-core/2.11.3/jackson-core-2.11.3.jar",
+                "https://maven.google.com/com/fasterxml/jackson/core/jackson-core/2.11.3/jackson-core-2.11.3.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-core/2.11.3/jackson-core-2.11.3.jar"
+            }
+          },
+          "com_google_cloud_google_cloud_core_1_93_10": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~com_google_cloud_google_cloud_core_1_93_10",
+              "sha256": "832d74eca66f4601e162a8460d6f59f50d1d23f93c18b02654423b6b0d67c6ea",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/cloud/google-cloud-core/1.93.10/google-cloud-core-1.93.10.jar",
+                "https://maven.google.com/com/google/cloud/google-cloud-core/1.93.10/google-cloud-core-1.93.10.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/com/google/cloud/google-cloud-core/1.93.10/google-cloud-core-1.93.10.jar"
+            }
+          },
+          "com_google_auth_google_auth_library_credentials_0_22_0": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~com_google_auth_google_auth_library_credentials_0_22_0",
+              "sha256": "42c76031276de5b520909e9faf88c5b3c9a722d69ee9cfdafedb1c52c355dfc5",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/auth/google-auth-library-credentials/0.22.0/google-auth-library-credentials-0.22.0.jar",
+                "https://maven.google.com/com/google/auth/google-auth-library-credentials/0.22.0/google-auth-library-credentials-0.22.0.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/com/google/auth/google-auth-library-credentials/0.22.0/google-auth-library-credentials-0.22.0.jar"
+            }
+          },
+          "com_google_guava_guava_30_0_android": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~com_google_guava_guava_30_0_android",
+              "sha256": "3345c82c2cc70a0053e8db9031edc6d71625ef0dea6a2c8f5ebd6cb76d2bf843",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/guava/guava/30.0-android/guava-30.0-android.jar",
+                "https://maven.google.com/com/google/guava/guava/30.0-android/guava-30.0-android.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/com/google/guava/guava/30.0-android/guava-30.0-android.jar"
+            }
+          },
+          "software_amazon_awssdk_profiles_2_17_183": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~software_amazon_awssdk_profiles_2_17_183",
+              "sha256": "78833b32fde3f1c5320373b9ea955c1bbc28f2c904010791c4784e610193ee56",
+              "urls": [
+                "https://repo1.maven.org/maven2/software/amazon/awssdk/profiles/2.17.183/profiles-2.17.183.jar",
+                "https://maven.google.com/software/amazon/awssdk/profiles/2.17.183/profiles-2.17.183.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/software/amazon/awssdk/profiles/2.17.183/profiles-2.17.183.jar"
+            }
+          },
+          "org_apache_httpcomponents_httpcore_4_4_13": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~org_apache_httpcomponents_httpcore_4_4_13",
+              "sha256": "e06e89d40943245fcfa39ec537cdbfce3762aecde8f9c597780d2b00c2b43424",
+              "urls": [
+                "https://repo1.maven.org/maven2/org/apache/httpcomponents/httpcore/4.4.13/httpcore-4.4.13.jar",
+                "https://maven.google.com/org/apache/httpcomponents/httpcore/4.4.13/httpcore-4.4.13.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/org/apache/httpcomponents/httpcore/4.4.13/httpcore-4.4.13.jar"
+            }
+          },
+          "io_netty_netty_common_4_1_72_Final": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~io_netty_netty_common_4_1_72_Final",
+              "sha256": "8adb4c291260ceb2859a68c49f0adeed36bf49587608e2b81ecff6aaf06025e9",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/netty/netty-common/4.1.72.Final/netty-common-4.1.72.Final.jar",
+                "https://maven.google.com/io/netty/netty-common/4.1.72.Final/netty-common-4.1.72.Final.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/io/netty/netty-common/4.1.72.Final/netty-common-4.1.72.Final.jar"
+            }
+          },
+          "io_netty_netty_transport_classes_epoll_4_1_72_Final": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~io_netty_netty_transport_classes_epoll_4_1_72_Final",
+              "sha256": "e1528a9751c1285aa7beaf3a1eb0597151716426ce38598ac9bc0891209b9e68",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/netty/netty-transport-classes-epoll/4.1.72.Final/netty-transport-classes-epoll-4.1.72.Final.jar",
+                "https://maven.google.com/io/netty/netty-transport-classes-epoll/4.1.72.Final/netty-transport-classes-epoll-4.1.72.Final.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/io/netty/netty-transport-classes-epoll/4.1.72.Final/netty-transport-classes-epoll-4.1.72.Final.jar"
+            }
+          },
+          "com_google_cloud_google_cloud_core_http_1_93_10": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~com_google_cloud_google_cloud_core_http_1_93_10",
+              "sha256": "81ac67c14c7c4244d2b7db2607ad352416aca8d3bb2adf338964e8fea25b1b3c",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/cloud/google-cloud-core-http/1.93.10/google-cloud-core-http-1.93.10.jar",
+                "https://maven.google.com/com/google/cloud/google-cloud-core-http/1.93.10/google-cloud-core-http-1.93.10.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/com/google/cloud/google-cloud-core-http/1.93.10/google-cloud-core-http-1.93.10.jar"
+            }
+          },
+          "software_amazon_awssdk_utils_2_17_183": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~software_amazon_awssdk_utils_2_17_183",
+              "sha256": "7bd849bb5aa71bfdf6b849643736ecab3a7b3f204795804eefe5754104231ec6",
+              "urls": [
+                "https://repo1.maven.org/maven2/software/amazon/awssdk/utils/2.17.183/utils-2.17.183.jar",
+                "https://maven.google.com/software/amazon/awssdk/utils/2.17.183/utils-2.17.183.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/software/amazon/awssdk/utils/2.17.183/utils-2.17.183.jar"
+            }
+          },
+          "org_apache_commons_commons_lang3_3_8_1": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~org_apache_commons_commons_lang3_3_8_1",
+              "sha256": "dac807f65b07698ff39b1b07bfef3d87ae3fd46d91bbf8a2bc02b2a831616f68",
+              "urls": [
+                "https://repo1.maven.org/maven2/org/apache/commons/commons-lang3/3.8.1/commons-lang3-3.8.1.jar",
+                "https://maven.google.com/org/apache/commons/commons-lang3/3.8.1/commons-lang3-3.8.1.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/org/apache/commons/commons-lang3/3.8.1/commons-lang3-3.8.1.jar"
+            }
+          },
+          "software_amazon_awssdk_aws_core_2_17_183": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~software_amazon_awssdk_aws_core_2_17_183",
+              "sha256": "bccbdbea689a665a702ff19828662d87fb7fe81529df13f02ef1e4c474ea9f93",
+              "urls": [
+                "https://repo1.maven.org/maven2/software/amazon/awssdk/aws-core/2.17.183/aws-core-2.17.183.jar",
+                "https://maven.google.com/software/amazon/awssdk/aws-core/2.17.183/aws-core-2.17.183.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/software/amazon/awssdk/aws-core/2.17.183/aws-core-2.17.183.jar"
+            }
+          },
+          "com_google_api_gax_httpjson_0_77_0": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~com_google_api_gax_httpjson_0_77_0",
+              "sha256": "fd4dae47fa016d3b26e8d90b67ddc6c23c4c06e8bcdf085c70310ab7ef324bd6",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/api/gax-httpjson/0.77.0/gax-httpjson-0.77.0.jar",
+                "https://maven.google.com/com/google/api/gax-httpjson/0.77.0/gax-httpjson-0.77.0.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/com/google/api/gax-httpjson/0.77.0/gax-httpjson-0.77.0.jar"
+            }
+          },
+          "unpinned_rules_jvm_external_deps": {
+            "bzlFile": "@@rules_jvm_external~4.4.2//:coursier.bzl",
+            "ruleClassName": "coursier_fetch",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~unpinned_rules_jvm_external_deps",
+              "repositories": [
+                "{ \"repo_url\": \"https://repo1.maven.org/maven2\" }"
+              ],
+              "artifacts": [
+                "{\"artifact\":\"google-cloud-core\",\"group\":\"com.google.cloud\",\"version\":\"1.93.10\"}",
+                "{\"artifact\":\"google-cloud-storage\",\"group\":\"com.google.cloud\",\"version\":\"1.113.4\"}",
+                "{\"artifact\":\"gson\",\"group\":\"com.google.code.gson\",\"version\":\"2.9.0\"}",
+                "{\"artifact\":\"maven-artifact\",\"group\":\"org.apache.maven\",\"version\":\"3.8.6\"}",
+                "{\"artifact\":\"s3\",\"group\":\"software.amazon.awssdk\",\"version\":\"2.17.183\"}"
+              ],
+              "fail_on_missing_checksum": true,
+              "fetch_sources": true,
+              "fetch_javadoc": false,
+              "use_unsafe_shared_cache": false,
+              "excluded_artifacts": [],
+              "generate_compat_repositories": false,
+              "version_conflict_policy": "default",
+              "override_targets": {},
+              "strict_visibility": false,
+              "strict_visibility_value": [
+                "@@//visibility:private"
+              ],
+              "maven_install_json": "@@rules_jvm_external~4.4.2//:rules_jvm_external_deps_install.json",
+              "resolve_timeout": 600,
+              "jetify": false,
+              "jetify_include_list": [
+                "*"
+              ],
+              "use_starlark_android_rules": false,
+              "aar_import_bzl_label": "@build_bazel_rules_android//android:rules.bzl",
+              "duplicate_version_warning": "warn"
+            }
+          },
+          "software_amazon_awssdk_regions_2_17_183": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~software_amazon_awssdk_regions_2_17_183",
+              "sha256": "d3079395f3ffc07d04ffcce16fca29fb5968197f6e9ea3dbff6be297102b40a5",
+              "urls": [
+                "https://repo1.maven.org/maven2/software/amazon/awssdk/regions/2.17.183/regions-2.17.183.jar",
+                "https://maven.google.com/software/amazon/awssdk/regions/2.17.183/regions-2.17.183.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/software/amazon/awssdk/regions/2.17.183/regions-2.17.183.jar"
+            }
+          },
+          "com_google_errorprone_error_prone_annotations_2_4_0": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~com_google_errorprone_error_prone_annotations_2_4_0",
+              "sha256": "5f2a0648230a662e8be049df308d583d7369f13af683e44ddf5829b6d741a228",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/errorprone/error_prone_annotations/2.4.0/error_prone_annotations-2.4.0.jar",
+                "https://maven.google.com/com/google/errorprone/error_prone_annotations/2.4.0/error_prone_annotations-2.4.0.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/com/google/errorprone/error_prone_annotations/2.4.0/error_prone_annotations-2.4.0.jar"
+            }
+          },
+          "io_netty_netty_handler_4_1_72_Final": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~io_netty_netty_handler_4_1_72_Final",
+              "sha256": "9cb6012af7e06361d738ac4e3bdc49a158f8cf87d9dee0f2744056b7d99c28d5",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/netty/netty-handler/4.1.72.Final/netty-handler-4.1.72.Final.jar",
+                "https://maven.google.com/io/netty/netty-handler/4.1.72.Final/netty-handler-4.1.72.Final.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/io/netty/netty-handler/4.1.72.Final/netty-handler-4.1.72.Final.jar"
+            }
+          },
+          "software_amazon_awssdk_aws_query_protocol_2_17_183": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~software_amazon_awssdk_aws_query_protocol_2_17_183",
+              "sha256": "4dace03c76f80f3dec920cb3dedb2a95984c4366ef4fda728660cb90bed74848",
+              "urls": [
+                "https://repo1.maven.org/maven2/software/amazon/awssdk/aws-query-protocol/2.17.183/aws-query-protocol-2.17.183.jar",
+                "https://maven.google.com/software/amazon/awssdk/aws-query-protocol/2.17.183/aws-query-protocol-2.17.183.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/software/amazon/awssdk/aws-query-protocol/2.17.183/aws-query-protocol-2.17.183.jar"
+            }
+          },
+          "io_netty_netty_codec_http_4_1_72_Final": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~io_netty_netty_codec_http_4_1_72_Final",
+              "sha256": "fa6fec88010bfaf6a7415b5364671b6b18ffb6b35a986ab97b423fd8c3a0174b",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/netty/netty-codec-http/4.1.72.Final/netty-codec-http-4.1.72.Final.jar",
+                "https://maven.google.com/io/netty/netty-codec-http/4.1.72.Final/netty-codec-http-4.1.72.Final.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/io/netty/netty-codec-http/4.1.72.Final/netty-codec-http-4.1.72.Final.jar"
+            }
+          },
+          "io_netty_netty_resolver_4_1_72_Final": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~io_netty_netty_resolver_4_1_72_Final",
+              "sha256": "6474598aab7cc9d8d6cfa06c05bd1b19adbf7f8451dbdd73070b33a6c60b1b90",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/netty/netty-resolver/4.1.72.Final/netty-resolver-4.1.72.Final.jar",
+                "https://maven.google.com/io/netty/netty-resolver/4.1.72.Final/netty-resolver-4.1.72.Final.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/io/netty/netty-resolver/4.1.72.Final/netty-resolver-4.1.72.Final.jar"
+            }
+          },
+          "software_amazon_awssdk_protocol_core_2_17_183": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~software_amazon_awssdk_protocol_core_2_17_183",
+              "sha256": "10e7c4faa1f05e2d73055d0390dbd0bb6450e2e6cb85beda051b1e4693c826ce",
+              "urls": [
+                "https://repo1.maven.org/maven2/software/amazon/awssdk/protocol-core/2.17.183/protocol-core-2.17.183.jar",
+                "https://maven.google.com/software/amazon/awssdk/protocol-core/2.17.183/protocol-core-2.17.183.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/software/amazon/awssdk/protocol-core/2.17.183/protocol-core-2.17.183.jar"
+            }
+          },
+          "org_checkerframework_checker_compat_qual_2_5_5": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~org_checkerframework_checker_compat_qual_2_5_5",
+              "sha256": "11d134b245e9cacc474514d2d66b5b8618f8039a1465cdc55bbc0b34e0008b7a",
+              "urls": [
+                "https://repo1.maven.org/maven2/org/checkerframework/checker-compat-qual/2.5.5/checker-compat-qual-2.5.5.jar",
+                "https://maven.google.com/org/checkerframework/checker-compat-qual/2.5.5/checker-compat-qual-2.5.5.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/org/checkerframework/checker-compat-qual/2.5.5/checker-compat-qual-2.5.5.jar"
+            }
+          },
+          "com_google_apis_google_api_services_storage_v1_rev20200927_1_30_10": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~com_google_apis_google_api_services_storage_v1_rev20200927_1_30_10",
+              "sha256": "52d26a9d105f8d8a0850807285f307a76cea8f3e0cdb2be4d3b15b1adfa77351",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/apis/google-api-services-storage/v1-rev20200927-1.30.10/google-api-services-storage-v1-rev20200927-1.30.10.jar",
+                "https://maven.google.com/com/google/apis/google-api-services-storage/v1-rev20200927-1.30.10/google-api-services-storage-v1-rev20200927-1.30.10.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/com/google/apis/google-api-services-storage/v1-rev20200927-1.30.10/google-api-services-storage-v1-rev20200927-1.30.10.jar"
+            }
+          },
+          "com_google_api_client_google_api_client_1_30_11": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~com_google_api_client_google_api_client_1_30_11",
+              "sha256": "ee6f97865cc7de6c7c80955c3f37372cf3887bd75e4fc06f1058a6b4cd9bf4da",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/api-client/google-api-client/1.30.11/google-api-client-1.30.11.jar",
+                "https://maven.google.com/com/google/api-client/google-api-client/1.30.11/google-api-client-1.30.11.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/com/google/api-client/google-api-client/1.30.11/google-api-client-1.30.11.jar"
+            }
+          },
+          "software_amazon_awssdk_s3_2_17_183": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~software_amazon_awssdk_s3_2_17_183",
+              "sha256": "ab073b91107a9e4ed9f030314077d137fe627e055ad895fabb036980a050e360",
+              "urls": [
+                "https://repo1.maven.org/maven2/software/amazon/awssdk/s3/2.17.183/s3-2.17.183.jar",
+                "https://maven.google.com/software/amazon/awssdk/s3/2.17.183/s3-2.17.183.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/software/amazon/awssdk/s3/2.17.183/s3-2.17.183.jar"
+            }
+          },
+          "org_apache_maven_maven_artifact_3_8_6": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~org_apache_maven_maven_artifact_3_8_6",
+              "sha256": "de22a4c6f54fe31276a823b1bbd3adfd6823529e732f431b5eff0852c2b9252b",
+              "urls": [
+                "https://repo1.maven.org/maven2/org/apache/maven/maven-artifact/3.8.6/maven-artifact-3.8.6.jar",
+                "https://maven.google.com/org/apache/maven/maven-artifact/3.8.6/maven-artifact-3.8.6.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/org/apache/maven/maven-artifact/3.8.6/maven-artifact-3.8.6.jar"
+            }
+          },
+          "org_apache_httpcomponents_httpclient_4_5_13": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~org_apache_httpcomponents_httpclient_4_5_13",
+              "sha256": "6fe9026a566c6a5001608cf3fc32196641f6c1e5e1986d1037ccdbd5f31ef743",
+              "urls": [
+                "https://repo1.maven.org/maven2/org/apache/httpcomponents/httpclient/4.5.13/httpclient-4.5.13.jar",
+                "https://maven.google.com/org/apache/httpcomponents/httpclient/4.5.13/httpclient-4.5.13.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/org/apache/httpcomponents/httpclient/4.5.13/httpclient-4.5.13.jar"
+            }
+          },
+          "com_google_guava_listenablefuture_9999_0_empty_to_avoid_conflict_with_guava": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~com_google_guava_listenablefuture_9999_0_empty_to_avoid_conflict_with_guava",
+              "sha256": "b372a037d4230aa57fbeffdef30fd6123f9c0c2db85d0aced00c91b974f33f99",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar",
+                "https://maven.google.com/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar"
+            }
+          },
+          "com_google_http_client_google_http_client_1_38_0": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~com_google_http_client_google_http_client_1_38_0",
+              "sha256": "411f4a42519b6b78bdc0fcfdf74c9edcef0ee97afa4a667abe04045a508d6302",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/http-client/google-http-client/1.38.0/google-http-client-1.38.0.jar",
+                "https://maven.google.com/com/google/http-client/google-http-client/1.38.0/google-http-client-1.38.0.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/com/google/http-client/google-http-client/1.38.0/google-http-client-1.38.0.jar"
+            }
+          },
+          "software_amazon_awssdk_apache_client_2_17_183": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~software_amazon_awssdk_apache_client_2_17_183",
+              "sha256": "78ceae502fce6a97bbe5ff8f6a010a52ab7ea3ae66cb1a4122e18185fce45022",
+              "urls": [
+                "https://repo1.maven.org/maven2/software/amazon/awssdk/apache-client/2.17.183/apache-client-2.17.183.jar",
+                "https://maven.google.com/software/amazon/awssdk/apache-client/2.17.183/apache-client-2.17.183.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/software/amazon/awssdk/apache-client/2.17.183/apache-client-2.17.183.jar"
+            }
+          },
+          "software_amazon_awssdk_arns_2_17_183": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~software_amazon_awssdk_arns_2_17_183",
+              "sha256": "659a185e191d66c71de81209490e66abeaccae208ea7b2831a738670823447aa",
+              "urls": [
+                "https://repo1.maven.org/maven2/software/amazon/awssdk/arns/2.17.183/arns-2.17.183.jar",
+                "https://maven.google.com/software/amazon/awssdk/arns/2.17.183/arns-2.17.183.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/software/amazon/awssdk/arns/2.17.183/arns-2.17.183.jar"
+            }
+          },
+          "com_google_code_gson_gson_2_9_0": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~com_google_code_gson_gson_2_9_0",
+              "sha256": "c96d60551331a196dac54b745aa642cd078ef89b6f267146b705f2c2cbef052d",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/code/gson/gson/2.9.0/gson-2.9.0.jar",
+                "https://maven.google.com/com/google/code/gson/gson/2.9.0/gson-2.9.0.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/com/google/code/gson/gson/2.9.0/gson-2.9.0.jar"
+            }
+          },
+          "io_netty_netty_buffer_4_1_72_Final": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~io_netty_netty_buffer_4_1_72_Final",
+              "sha256": "568ff7cd9d8e2284ec980730c88924f686642929f8f219a74518b4e64755f3a1",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/netty/netty-buffer/4.1.72.Final/netty-buffer-4.1.72.Final.jar",
+                "https://maven.google.com/io/netty/netty-buffer/4.1.72.Final/netty-buffer-4.1.72.Final.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/io/netty/netty-buffer/4.1.72.Final/netty-buffer-4.1.72.Final.jar"
+            }
+          },
+          "com_google_code_findbugs_jsr305_3_0_2": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~com_google_code_findbugs_jsr305_3_0_2",
+              "sha256": "766ad2a0783f2687962c8ad74ceecc38a28b9f72a2d085ee438b7813e928d0c7",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar",
+                "https://maven.google.com/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar"
+            }
+          },
+          "commons_codec_commons_codec_1_11": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~commons_codec_commons_codec_1_11",
+              "sha256": "e599d5318e97aa48f42136a2927e6dfa4e8881dff0e6c8e3109ddbbff51d7b7d",
+              "urls": [
+                "https://repo1.maven.org/maven2/commons-codec/commons-codec/1.11/commons-codec-1.11.jar",
+                "https://maven.google.com/commons-codec/commons-codec/1.11/commons-codec-1.11.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/commons-codec/commons-codec/1.11/commons-codec-1.11.jar"
+            }
+          },
+          "software_amazon_awssdk_auth_2_17_183": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~software_amazon_awssdk_auth_2_17_183",
+              "sha256": "8820c6636e5c14efc29399fb5565ce50212b0c1f4ed720a025a2c402d54e0978",
+              "urls": [
+                "https://repo1.maven.org/maven2/software/amazon/awssdk/auth/2.17.183/auth-2.17.183.jar",
+                "https://maven.google.com/software/amazon/awssdk/auth/2.17.183/auth-2.17.183.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/software/amazon/awssdk/auth/2.17.183/auth-2.17.183.jar"
+            }
+          },
+          "software_amazon_awssdk_json_utils_2_17_183": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~software_amazon_awssdk_json_utils_2_17_183",
+              "sha256": "51ab7f550adc06afcb49f5270cdf690f1bfaaee243abaa5d978095e2a1e4e1a5",
+              "urls": [
+                "https://repo1.maven.org/maven2/software/amazon/awssdk/json-utils/2.17.183/json-utils-2.17.183.jar",
+                "https://maven.google.com/software/amazon/awssdk/json-utils/2.17.183/json-utils-2.17.183.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/software/amazon/awssdk/json-utils/2.17.183/json-utils-2.17.183.jar"
+            }
+          },
+          "org_codehaus_plexus_plexus_utils_3_3_1": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~org_codehaus_plexus_plexus_utils_3_3_1",
+              "sha256": "4b570fcdbe5a894f249d2eb9b929358a9c88c3e548d227a80010461930222f2a",
+              "urls": [
+                "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/3.3.1/plexus-utils-3.3.1.jar",
+                "https://maven.google.com/org/codehaus/plexus/plexus-utils/3.3.1/plexus-utils-3.3.1.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/3.3.1/plexus-utils-3.3.1.jar"
+            }
+          },
+          "com_google_protobuf_protobuf_java_util_3_13_0": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~com_google_protobuf_protobuf_java_util_3_13_0",
+              "sha256": "d9de66b8c9445905dfa7064f6d5213d47ce88a20d34e21d83c4a94a229e14e62",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/protobuf/protobuf-java-util/3.13.0/protobuf-java-util-3.13.0.jar",
+                "https://maven.google.com/com/google/protobuf/protobuf-java-util/3.13.0/protobuf-java-util-3.13.0.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/com/google/protobuf/protobuf-java-util/3.13.0/protobuf-java-util-3.13.0.jar"
+            }
+          },
+          "io_netty_netty_codec_4_1_72_Final": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~io_netty_netty_codec_4_1_72_Final",
+              "sha256": "5d8591ca271a1e9c224e8de3873aa9936acb581ee0db514e7dc18523df36d16c",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/netty/netty-codec/4.1.72.Final/netty-codec-4.1.72.Final.jar",
+                "https://maven.google.com/io/netty/netty-codec/4.1.72.Final/netty-codec-4.1.72.Final.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/io/netty/netty-codec/4.1.72.Final/netty-codec-4.1.72.Final.jar"
+            }
+          },
+          "com_google_protobuf_protobuf_java_3_13_0": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~com_google_protobuf_protobuf_java_3_13_0",
+              "sha256": "97d5b2758408690c0dc276238707492a0b6a4d71206311b6c442cdc26c5973ff",
+              "urls": [
+                "https://repo1.maven.org/maven2/com/google/protobuf/protobuf-java/3.13.0/protobuf-java-3.13.0.jar",
+                "https://maven.google.com/com/google/protobuf/protobuf-java/3.13.0/protobuf-java-3.13.0.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/com/google/protobuf/protobuf-java/3.13.0/protobuf-java-3.13.0.jar"
+            }
+          },
+          "io_netty_netty_tcnative_classes_2_0_46_Final": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~io_netty_netty_tcnative_classes_2_0_46_Final",
+              "sha256": "d3ec888dcc4ac7915bf88b417c5e04fd354f4311032a748a6882df09347eed9a",
+              "urls": [
+                "https://repo1.maven.org/maven2/io/netty/netty-tcnative-classes/2.0.46.Final/netty-tcnative-classes-2.0.46.Final.jar",
+                "https://maven.google.com/io/netty/netty-tcnative-classes/2.0.46.Final/netty-tcnative-classes-2.0.46.Final.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/io/netty/netty-tcnative-classes/2.0.46.Final/netty-tcnative-classes-2.0.46.Final.jar"
+            }
+          },
+          "software_amazon_awssdk_sdk_core_2_17_183": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_file",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~maven~software_amazon_awssdk_sdk_core_2_17_183",
+              "sha256": "677e9cc90fdd82c1f40f97b99cb115b13ad6c3f58beeeab1c061af6954d64c77",
+              "urls": [
+                "https://repo1.maven.org/maven2/software/amazon/awssdk/sdk-core/2.17.183/sdk-core-2.17.183.jar",
+                "https://maven.google.com/software/amazon/awssdk/sdk-core/2.17.183/sdk-core-2.17.183.jar"
+              ],
+              "downloaded_file_path": "v1/https/repo1.maven.org/maven2/software/amazon/awssdk/sdk-core/2.17.183/sdk-core-2.17.183.jar"
+            }
+          }
+        }
+      }
+    },
+    "@@rules_jvm_external~4.4.2//:non-module-deps.bzl%non_module_deps": {
+      "general": {
+        "bzlTransitiveDigest": "/rh2kt+7d77UiyuaTMepsRWJdj6Aot4FxGP6oW8S+U0=",
+        "accumulatedFileDigests": {},
+        "envVariables": {},
+        "generatedRepoSpecs": {
+          "io_bazel_rules_kotlin": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_jvm_external~4.4.2~non_module_deps~io_bazel_rules_kotlin",
+              "sha256": "946747acdbeae799b085d12b240ec346f775ac65236dfcf18aa0cd7300f6de78",
+              "urls": [
+                "https://github.com/bazelbuild/rules_kotlin/releases/download/v1.7.0-RC-2/rules_kotlin_release.tgz"
+              ]
+            }
+          }
+        }
+      }
+    },
+    "@@rules_python~0.10.2//python:extensions.bzl%pip_install": {
+      "general": {
+        "bzlTransitiveDigest": "CBgAHij2PzinIkeOkoRJcllj6whJIQ5eOHaHNfKikpU=",
+        "accumulatedFileDigests": {},
+        "envVariables": {},
+        "generatedRepoSpecs": {
+          "pypi__colorama": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_python~0.10.2~pip_install~pypi__colorama",
+              "url": "https://files.pythonhosted.org/packages/44/98/5b86278fbbf250d239ae0ecb724f8572af1c91f4a11edf4d36a206189440/colorama-0.4.4-py2.py3-none-any.whl",
+              "sha256": "9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2",
+              "type": "zip",
+              "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:defs.bzl\", \"py_library\")\n\npy_library(\n    name = \"lib\",\n    srcs = glob([\"**/*.py\"]),\n    data = glob([\"**/*\"], exclude=[\"**/*.py\", \"**/* *\", \"BUILD\", \"WORKSPACE\"]),\n    # This makes this directory a top-level in the python import\n    # search path for anything that depends on this.\n    imports = [\".\"],\n)\n"
+            }
+          },
+          "pypi__wheel": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_python~0.10.2~pip_install~pypi__wheel",
+              "url": "https://files.pythonhosted.org/packages/27/d6/003e593296a85fd6ed616ed962795b2f87709c3eee2bca4f6d0fe55c6d00/wheel-0.37.1-py2.py3-none-any.whl",
+              "sha256": "4bdcd7d840138086126cd09254dc6195fb4fc6f01c050a1d7236f2630db1d22a",
+              "type": "zip",
+              "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:defs.bzl\", \"py_library\")\n\npy_library(\n    name = \"lib\",\n    srcs = glob([\"**/*.py\"]),\n    data = glob([\"**/*\"], exclude=[\"**/*.py\", \"**/* *\", \"BUILD\", \"WORKSPACE\"]),\n    # This makes this directory a top-level in the python import\n    # search path for anything that depends on this.\n    imports = [\".\"],\n)\n"
+            }
+          },
+          "pypi__click": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_python~0.10.2~pip_install~pypi__click",
+              "url": "https://files.pythonhosted.org/packages/76/0a/b6c5f311e32aeb3b406e03c079ade51e905ea630fc19d1262a46249c1c86/click-8.0.1-py3-none-any.whl",
+              "sha256": "fba402a4a47334742d782209a7c79bc448911afe1149d07bdabdf480b3e2f4b6",
+              "type": "zip",
+              "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:defs.bzl\", \"py_library\")\n\npy_library(\n    name = \"lib\",\n    srcs = glob([\"**/*.py\"]),\n    data = glob([\"**/*\"], exclude=[\"**/*.py\", \"**/* *\", \"BUILD\", \"WORKSPACE\"]),\n    # This makes this directory a top-level in the python import\n    # search path for anything that depends on this.\n    imports = [\".\"],\n)\n"
+            }
+          },
+          "pypi__pep517": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_python~0.10.2~pip_install~pypi__pep517",
+              "url": "https://files.pythonhosted.org/packages/f4/67/846c08e18fefb265a66e6fd5a34269d649b779718d9bf59622085dabd370/pep517-0.12.0-py2.py3-none-any.whl",
+              "sha256": "dd884c326898e2c6e11f9e0b64940606a93eb10ea022a2e067959f3a110cf161",
+              "type": "zip",
+              "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:defs.bzl\", \"py_library\")\n\npy_library(\n    name = \"lib\",\n    srcs = glob([\"**/*.py\"]),\n    data = glob([\"**/*\"], exclude=[\"**/*.py\", \"**/* *\", \"BUILD\", \"WORKSPACE\"]),\n    # This makes this directory a top-level in the python import\n    # search path for anything that depends on this.\n    imports = [\".\"],\n)\n"
+            }
+          },
+          "pypi__pip": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_python~0.10.2~pip_install~pypi__pip",
+              "url": "https://files.pythonhosted.org/packages/96/2f/caec18213f6a67852f6997fb0673ae08d2e93d1b81573edb93ba4ef06970/pip-22.1.2-py3-none-any.whl",
+              "sha256": "a3edacb89022ef5258bf61852728bf866632a394da837ca49eb4303635835f17",
+              "type": "zip",
+              "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:defs.bzl\", \"py_library\")\n\npy_library(\n    name = \"lib\",\n    srcs = glob([\"**/*.py\"]),\n    data = glob([\"**/*\"], exclude=[\"**/*.py\", \"**/* *\", \"BUILD\", \"WORKSPACE\"]),\n    # This makes this directory a top-level in the python import\n    # search path for anything that depends on this.\n    imports = [\".\"],\n)\n"
+            }
+          },
+          "pypi__installer": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_python~0.10.2~pip_install~pypi__installer",
+              "url": "https://files.pythonhosted.org/packages/1b/21/3e6ebd12d8dccc55bcb7338db462c75ac86dbd0ac7439ac114616b21667b/installer-0.5.1-py3-none-any.whl",
+              "sha256": "1d6c8d916ed82771945b9c813699e6f57424ded970c9d8bf16bbc23e1e826ed3",
+              "type": "zip",
+              "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:defs.bzl\", \"py_library\")\n\npy_library(\n    name = \"lib\",\n    srcs = glob([\"**/*.py\"]),\n    data = glob([\"**/*\"], exclude=[\"**/*.py\", \"**/* *\", \"BUILD\", \"WORKSPACE\"]),\n    # This makes this directory a top-level in the python import\n    # search path for anything that depends on this.\n    imports = [\".\"],\n)\n"
+            }
+          },
+          "pypi__pip_tools": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_python~0.10.2~pip_install~pypi__pip_tools",
+              "url": "https://files.pythonhosted.org/packages/fe/5c/8995799b0ccf832906b4968b4eb2045beb9b3de79e96e6b1a6e4fc4e6974/pip_tools-6.6.2-py3-none-any.whl",
+              "sha256": "6b486548e5a139e30e4c4a225b3b7c2d46942a9f6d1a91143c21b1de4d02fd9b",
+              "type": "zip",
+              "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:defs.bzl\", \"py_library\")\n\npy_library(\n    name = \"lib\",\n    srcs = glob([\"**/*.py\"]),\n    data = glob([\"**/*\"], exclude=[\"**/*.py\", \"**/* *\", \"BUILD\", \"WORKSPACE\"]),\n    # This makes this directory a top-level in the python import\n    # search path for anything that depends on this.\n    imports = [\".\"],\n)\n"
+            }
+          },
+          "pypi__setuptools": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_python~0.10.2~pip_install~pypi__setuptools",
+              "url": "https://files.pythonhosted.org/packages/7c/5b/3d92b9f0f7ca1645cba48c080b54fe7d8b1033a4e5720091d1631c4266db/setuptools-60.10.0-py3-none-any.whl",
+              "sha256": "782ef48d58982ddb49920c11a0c5c9c0b02e7d7d1c2ad0aa44e1a1e133051c96",
+              "type": "zip",
+              "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:defs.bzl\", \"py_library\")\n\npy_library(\n    name = \"lib\",\n    srcs = glob([\"**/*.py\"]),\n    data = glob([\"**/*\"], exclude=[\"**/*.py\", \"**/* *\", \"BUILD\", \"WORKSPACE\"]),\n    # This makes this directory a top-level in the python import\n    # search path for anything that depends on this.\n    imports = [\".\"],\n)\n"
+            }
+          },
+          "pypi__tomli": {
+            "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
+            "ruleClassName": "http_archive",
+            "attributes": {
+              "name": "rules_python~0.10.2~pip_install~pypi__tomli",
+              "url": "https://files.pythonhosted.org/packages/97/75/10a9ebee3fd790d20926a90a2547f0bf78f371b2f13aa822c759680ca7b9/tomli-2.0.1-py3-none-any.whl",
+              "sha256": "939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc",
+              "type": "zip",
+              "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:defs.bzl\", \"py_library\")\n\npy_library(\n    name = \"lib\",\n    srcs = glob([\"**/*.py\"]),\n    data = glob([\"**/*\"], exclude=[\"**/*.py\", \"**/* *\", \"BUILD\", \"WORKSPACE\"]),\n    # This makes this directory a top-level in the python import\n    # search path for anything that depends on this.\n    imports = [\".\"],\n)\n"
+            }
+          }
+        }
+      }
+    }
+  }
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_7/protobuf-test.nix b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_7/protobuf-test.nix
new file mode 100644
index 000000000000..d50de32d4a3e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_7/protobuf-test.nix
@@ -0,0 +1,171 @@
+{ bazel
+, Foundation
+, bazelTest
+, callPackage
+, darwin
+, distDir
+, extraBazelArgs ? ""
+, fetchFromGitHub
+, fetchurl
+, jdk11_headless
+, lib
+, libtool
+, lndir
+, openjdk8
+, repoCache
+, runLocal
+, runtimeShell
+, stdenv
+, symlinkJoin
+, tree
+, writeScript
+, writeText
+}:
+
+# This test uses bzlmod because I could not make it work without it.
+# This is good, because we have at least one test with bzlmod enabled.
+# However, we have to create our own lockfile, wich is quite a big file by
+# itself.
+
+let
+  # To update the lockfile, run
+  #    $ nix-shell -A bazel_7.tests.vanilla.protobuf
+  #    [nix-shell]$ genericBuild # (wait a bit for failure, or kill it)
+  #    [nix-shell]$ rm -f MODULE.bazel.lock
+  #    [nix-shell]$ bazel mod deps --lockfile_mode=update
+  #    [nix-shell]$ cp MODULE.bazel.lock $HERE/protobuf-test.MODULE.bazel.lock
+  lockfile = ./protobuf-test.MODULE.bazel.lock;
+
+  protobufRepoCache = callPackage ./bazel-repository-cache.nix {
+    # We are somewhat lucky that bazel's own lockfile works for our tests.
+    # Use extraDeps if the tests need things that are not in that lockfile.
+    # But most test dependencies are bazel's builtin deps, so that at least aligns.
+    inherit lockfile;
+
+    # Remove platform-specific binaries, as they are large and useless.
+    requiredDepNamePredicate = name:
+      null == builtins.match ".*(macos|osx|linux|win|android|maven).*" name;
+  };
+
+  mergedRepoCache = symlinkJoin {
+    name = "mergedDistDir";
+    paths = [ protobufRepoCache distDir ];
+  };
+
+  MODULE = writeText "MODULE.bazel" ''
+    bazel_dep(name = "rules_proto", version = "5.3.0-21.7")
+    bazel_dep(name = "protobuf", version = "21.7")
+    bazel_dep(name = "zlib", version = "1.3")
+  '';
+
+  WORKSPACE = writeText "WORKSPACE" ''
+    # Empty, we use bzlmod instead
+  '';
+
+  personProto = writeText "person.proto" ''
+    syntax = "proto3";
+
+    package person;
+
+    message Person {
+      string name = 1;
+      int32 id = 2;
+      string email = 3;
+    }
+  '';
+
+  personBUILD = writeText "BUILD" ''
+    load("@rules_proto//proto:defs.bzl", "proto_library")
+
+    proto_library(
+        name = "person_proto",
+        srcs = ["person.proto"],
+        visibility = ["//visibility:public"],
+    )
+
+    java_proto_library(
+        name = "person_java_proto",
+        deps = [":person_proto"],
+    )
+
+    cc_proto_library(
+        name = "person_cc_proto",
+        deps = [":person_proto"],
+    )
+  '';
+
+  toolsBazel = writeScript "bazel" ''
+    #! ${runtimeShell}
+
+    export CXX='${stdenv.cc}/bin/clang++'
+    export LD='${darwin.cctools}/bin/ld'
+    export LIBTOOL='${darwin.cctools}/bin/libtool'
+    export CC='${stdenv.cc}/bin/clang'
+
+    # XXX: hack for macosX, this flags disable bazel usage of xcode
+    # See: https://github.com/bazelbuild/bazel/issues/4231
+    export BAZEL_USE_CPP_ONLY_TOOLCHAIN=1
+
+    export HOMEBREW_RUBY_PATH="foo"
+
+    exec "$BAZEL_REAL" "$@"
+  '';
+
+  workspaceDir = runLocal "our_workspace" { } (''
+    mkdir $out
+    cp ${MODULE} $out/MODULE.bazel
+    cp ${./protobuf-test.MODULE.bazel.lock} $out/MODULE.bazel.lock
+    #cp ${WORKSPACE} $out/WORKSPACE
+    touch $out/WORKSPACE
+    touch $out/BUILD.bazel
+    mkdir $out/person
+    cp ${personProto} $out/person/person.proto
+    cp ${personBUILD} $out/person/BUILD.bazel
+  ''
+  + (lib.optionalString stdenv.isDarwin ''
+    echo 'tools bazel created'
+    mkdir $out/tools
+    install ${toolsBazel} $out/tools/bazel
+  ''));
+
+  testBazel = bazelTest {
+    name = "bazel-test-protocol-buffers";
+    inherit workspaceDir;
+    bazelPkg = bazel;
+    buildInputs = [
+      (if lib.strings.versionOlder bazel.version "5.0.0" then openjdk8 else jdk11_headless)
+      tree
+      bazel
+    ]
+    ++ lib.optionals stdenv.hostPlatform.isDarwin [
+      Foundation
+      darwin.objc4
+    ];
+
+    bazelScript = ''
+      ${bazel}/bin/bazel \
+        build \
+        --repository_cache=${mergedRepoCache} \
+        ${extraBazelArgs} \
+        --enable_bzlmod \
+        --lockfile_mode=error \
+        --verbose_failures \
+        //... \
+    '' + lib.optionalString (lib.strings.versionOlder bazel.version "5.0.0") ''
+        --host_javabase='@local_jdk//:jdk' \
+        --java_toolchain='@bazel_tools//tools/jdk:toolchain_hostjdk8' \
+        --javabase='@local_jdk//:jdk' \
+    '' + lib.optionalString (stdenv.isDarwin) ''
+        --cxxopt=-x --cxxopt=c++ --host_cxxopt=-x --host_cxxopt=c++ \
+    '' + lib.optionalString (stdenv.cc.isClang && stdenv ? cc.libcxx.cxxabi.libName) ''
+        --linkopt=-Wl,-l${stdenv.cc.libcxx.cxxabi.libName} \
+        --linkopt=-L${stdenv.cc.libcxx.cxxabi}/lib \
+        --host_linkopt=-Wl,-l${stdenv.cc.libcxx.cxxabi.libName} \
+        --host_linkopt=-L${stdenv.cc.libcxx.cxxabi}/lib \
+    '' + ''
+
+    '';
+  };
+
+in
+testBazel
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_7/strict_proto_deps.patch b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_7/strict_proto_deps.patch
new file mode 100644
index 000000000000..009798c6f735
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_7/strict_proto_deps.patch
@@ -0,0 +1,21 @@
+diff --git a/src/main/starlark/builtins_bzl/common/java/proto/java_proto_library.bzl b/src/main/starlark/builtins_bzl/common/java/proto/java_proto_library.bzl
+index e2118aabea..6a33f03472 100644
+--- a/src/main/starlark/builtins_bzl/common/java/proto/java_proto_library.bzl
++++ b/src/main/starlark/builtins_bzl/common/java/proto/java_proto_library.bzl
+@@ -117,6 +117,7 @@ def java_compile_for_protos(ctx, output_jar_suffix, source_jar = None, deps = []
+             deps = deps,
+             exports = exports,
+             output_source_jar = source_jar,
++            strict_deps = ctx.fragments.proto.strict_proto_deps(),
+             injecting_rule_kind = injecting_rule_kind,
+             javac_opts = java_toolchain.compatible_javacopts("proto"),
+             enable_jspecify = False,
+@@ -140,7 +141,7 @@ bazel_java_proto_aspect = aspect(
+     attr_aspects = ["deps", "exports"],
+     required_providers = [ProtoInfo],
+     provides = [JavaInfo, JavaProtoAspectInfo],
+-    fragments = ["java"],
++    fragments = ["java", "proto"],
+ )
+ 
+ def bazel_java_proto_library_rule(ctx):
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_7/tests.nix b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_7/tests.nix
new file mode 100644
index 000000000000..0976d1c2d5a6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_7/tests.nix
@@ -0,0 +1,173 @@
+{ lib
+  # tooling
+, callPackage
+, fetchFromGitHub
+, newScope
+, recurseIntoAttrs
+, runCommandCC
+, stdenv
+  # inputs
+, Foundation
+, bazel_self
+, lr
+, xe
+, lockfile
+, ...
+}:
+let
+  inherit (stdenv.hostPlatform) isDarwin;
+
+  testsDistDir = testsRepoCache;
+  testsRepoCache = callPackage ./bazel-repository-cache.nix {
+    # Bazel builtin tools versions are hard-coded in bazel. If the project
+    # lockfile has not been generated by the same bazel version as this one
+    # then it may be missing depeendencies for builtin tools. Export
+    # dependencies from baazel itself here, and let projects also import their
+    # own if need be. It's just a symlinkJoin after all. See ./cpp-test.nix
+    inherit lockfile;
+
+    # Take all the rules_ deps, bazel_ deps and their transitive dependencies,
+    # but none of the platform-specific binaries, as they are large and useless.
+    requiredDepNamePredicate = name:
+      name == "_main~bazel_build_deps~workspace_repo_cache"
+      || null == builtins.match ".*(macos|osx|linux|win|android|maven).*" name
+      && null != builtins.match "(platforms|com_google_|protobuf|rules_|.*bazel_|apple_support).*" name;
+  };
+
+  runLocal = name: attrs: script:
+    let
+      attrs' = removeAttrs attrs [ "buildInputs" ];
+      buildInputs = attrs.buildInputs or [ ];
+    in
+    runCommandCC name
+      ({
+        inherit buildInputs;
+        preferLocalBuild = true;
+        meta.platforms = bazel_self.meta.platforms;
+      } // attrs')
+      script;
+
+  # bazel wants to extract itself into $install_dir/install every time it runs,
+  # so let’s do that only once.
+  extracted = bazelPkg:
+    let
+      install_dir =
+        # `install_base` field printed by `bazel info`, minus the hash.
+        # yes, this path is kinda magic. Sorry.
+        "$HOME/.cache/bazel/_bazel_nixbld";
+    in
+    runLocal "bazel-extracted-homedir" { passthru.install_dir = install_dir; } ''
+      export HOME=$(mktemp -d)
+      touch WORKSPACE # yeah, everything sucks
+      install_base="$(${bazelPkg}/bin/bazel info install_base)"
+      # assert it’s actually below install_dir
+      [[ "$install_base" =~ ${install_dir} ]] \
+        || (echo "oh no! $install_base but we are \
+      trying to copy ${install_dir} to $out instead!"; exit 1)
+      cp -R ${install_dir} $out
+    '';
+
+  bazelTest = { name, bazelScript, workspaceDir, bazelPkg, buildInputs ? [ ] }:
+    runLocal name
+      {
+        inherit buildInputs;
+        # Necessary for the tests to pass on Darwin with sandbox enabled.
+        __darwinAllowLocalNetworking = true;
+      }
+      ''
+        # Bazel needs a real home for self-extraction and internal cache
+        mkdir bazel_home
+        export HOME=$PWD/bazel_home
+
+        ${# Concurrent bazel invocations have the same workspace path.
+          # On darwin, for some reason, it means they access and corrupt the
+          # same outputRoot, outputUserRoot and outputBase
+          # Ensure they use build-local outputRoot by setting TEST_TMPDIR
+          lib.optionalString isDarwin ''
+            export TEST_TMPDIR=$HOME/.cache/bazel
+          ''
+        }
+        ${# Speed-up tests by caching bazel extraction.
+          # Except on Darwin, because nobody knows how Darwin works.
+          let bazelExtracted = extracted bazelPkg;
+          in lib.optionalString (!isDarwin) ''
+            mkdir -p ${bazelExtracted.install_dir}
+            cp -R ${bazelExtracted}/install ${bazelExtracted.install_dir}
+
+            # https://stackoverflow.com/questions/47775668/bazel-how-to-skip-corrupt-installation-on-centos6
+            # Bazel checks whether the mtime of the install dir files
+            # is >9 years in the future, otherwise it extracts itself again.
+            # see PosixFileMTime::IsUntampered in src/main/cpp/util
+            # What the hell bazel.
+            ${lr}/bin/lr -0 -U ${bazelExtracted.install_dir} | ${xe}/bin/xe -N0 -0 touch --date="9 years 6 months" {}
+          ''
+        }
+        ${# Note https://github.com/bazelbuild/bazel/issues/5763#issuecomment-456374609
+          # about why to create a subdir for the workspace.
+          '' cp -r ${workspaceDir} wd && chmod ug+rw -R wd && cd wd ''
+        }
+        ${# run the actual test snippet
+          bazelScript
+        }
+        ${# Try to keep darwin clean of our garbage
+          lib.optionalString isDarwin ''
+            rm -rf $HOME || true
+          ''
+        }
+
+        touch $out
+      '';
+
+  bazel-examples = fetchFromGitHub {
+    owner = "bazelbuild";
+    repo = "examples";
+    rev = "93564e1f1e7a3c39d6a94acee12b8d7b74de3491";
+    hash = "sha256-DaPKp7Sn5uvfZRjdDx6grot3g3B7trqCyL0TRIdwg98=";
+  };
+
+  callBazelTests = bazel:
+    let
+      callBazelTest = newScope {
+        inherit runLocal bazelTest bazel-examples;
+        inherit Foundation;
+        inherit bazel;
+        distDir = testsDistDir;
+        extraBazelArgs = "--noenable_bzlmod";
+        repoCache = testsRepoCache;
+      };
+    in
+    recurseIntoAttrs (
+      (lib.optionalAttrs (!isDarwin) {
+        # `extracted` doesn’t work on darwin
+        shebang = callBazelTest ../shebang-test.nix {
+          inherit extracted;
+          extraBazelArgs = "--noenable_bzlmod";
+        };
+      }) // {
+        bashTools = callBazelTest ../bash-tools-test.nix { };
+        cpp = callBazelTest ./cpp-test.nix {
+          extraBazelArgs = "";
+        };
+        java = callBazelTest ./java-test.nix { };
+        pythonBinPath = callBazelTest ../python-bin-path-test.nix { };
+        protobuf = callBazelTest ./protobuf-test.nix { };
+      }
+    );
+
+  bazelWithNixHacks = bazel_self.override { enableNixHacks = true; };
+
+in
+recurseIntoAttrs {
+  distDir = testsDistDir;
+  testsRepoCache = testsRepoCache;
+
+  vanilla = callBazelTests bazel_self;
+  withNixHacks = callBazelTests bazelWithNixHacks;
+
+  # add some downstream packages using buildBazelPackage
+  downstream = recurseIntoAttrs ({
+    # TODO: fix bazel-watcher build with bazel 7, or find other packages
+    #inherit bazel-watcher;
+  });
+}
+
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_7/trim-last-argument-to-gcc-if-empty.patch b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_7/trim-last-argument-to-gcc-if-empty.patch
new file mode 100644
index 000000000000..c4a68218a0f8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_7/trim-last-argument-to-gcc-if-empty.patch
@@ -0,0 +1,17 @@
+diff --git a/tools/cpp/osx_cc_wrapper.sh.tpl b/tools/cpp/osx_cc_wrapper.sh.tpl
+index 8264090c29..b7b9e8537a 100644
+--- a/tools/cpp/osx_cc_wrapper.sh.tpl
++++ b/tools/cpp/osx_cc_wrapper.sh.tpl
+@@ -64,7 +64,11 @@ done
+ %{env}
+ 
+ # Call the C++ compiler
+-%{cc} "$@"
++if [[ ${*: -1} = "" ]]; then
++    %{cc} "${@:0:$#}"
++else
++    %{cc} "$@"
++fi
+ 
+ function get_library_path() {
+     for libdir in ${LIB_DIRS}; do
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_7/xcode_locator.patch b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_7/xcode_locator.patch
new file mode 100644
index 000000000000..c954de9d9e2a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_7/xcode_locator.patch
@@ -0,0 +1,13 @@
+--- a/tools/osx/BUILD
++++ b/tools/osx/BUILD
+@@ -28,8 +28,8 @@ exports_files([
+ 
+ DARWIN_XCODE_LOCATOR_COMPILE_COMMAND = """
+   /usr/bin/xcrun --sdk macosx clang -mmacosx-version-min=10.13 -fobjc-arc -framework CoreServices \
+-      -framework Foundation -arch arm64 -arch x86_64 -Wl,-no_adhoc_codesign -Wl,-no_uuid -o $@ $< && \
++      -framework Foundation                          -Wl,-no_adhoc_codesign -Wl,-no_uuid -o $@ $< && \
+-  env -i codesign --identifier $@ --force --sign - $@
++  /usr/bin/env -i /usr/bin/codesign --identifier $@ --force --sign - $@
+ """
+ 
+ genrule(
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_darwin_sandbox.patch b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_darwin_sandbox.patch
new file mode 100644
index 000000000000..87e6c99287fb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_darwin_sandbox.patch
@@ -0,0 +1,11 @@
+diff -ru a/src/main/native/unix_jni_darwin.cc b/src/main/native/unix_jni_darwin.cc
+--- a/src/main/native/unix_jni_darwin.cc	1980-01-01 00:00:00.000000000 -0500
++++ b/src/main/native/unix_jni_darwin.cc	2021-11-27 20:35:29.000000000 -0500
+@@ -270,6 +270,7 @@
+ }
+ 
+ int portable_suspend_count() {
++  if (getenv("NIX_BUILD_TOP")) return 0;
+   static dispatch_once_t once_token;
+   static SuspendState suspend_state;
+   dispatch_once(&once_token, ^{
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_rc.patch b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_rc.patch
new file mode 100644
index 000000000000..a599ac3ec723
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_rc.patch
@@ -0,0 +1,13 @@
+diff --git a/src/main/cpp/option_processor.cc b/src/main/cpp/option_processor.cc
+index 8f8f15685f..a7ae52d1e4 100644
+--- a/src/main/cpp/option_processor.cc
++++ b/src/main/cpp/option_processor.cc
+@@ -56,7 +56,7 @@ OptionProcessor::OptionProcessor(
+     : workspace_layout_(workspace_layout),
+       startup_options_(std::move(default_startup_options)),
+       parse_options_called_(false),
+-      system_bazelrc_path_(BAZEL_SYSTEM_BAZELRC_PATH) {}
++      system_bazelrc_path_("@bazelSystemBazelRCPath@") {}
+ 
+ OptionProcessor::OptionProcessor(
+     const WorkspaceLayout* workspace_layout,
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/buildtools/default.nix b/nixpkgs/pkgs/development/tools/build-managers/bazel/buildtools/default.nix
new file mode 100644
index 000000000000..f22e7c3c22af
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/buildtools/default.nix
@@ -0,0 +1,37 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "bazel-buildtools";
+  version = "6.4.0";
+
+  src = fetchFromGitHub {
+    owner = "bazelbuild";
+    repo = "buildtools";
+    rev = "v${version}";
+    hash = "sha256-k4qbveJ1BORnwjOIZcJLWIGVMRjCAqVhISggQ/VTzA4=";
+  };
+
+  vendorHash = "sha256-DigTREfI6I48wxRpGp/bfH1NbUZ4E1B5UTQXpI0LY1A=";
+
+  preBuild = ''
+    rm -r warn/docs
+  '';
+
+  proxyVendor = true;
+
+  doCheck = false;
+
+  excludedPackages = [ "generatetables" ];
+
+  ldflags = [ "-s" "-w" "-X main.buildVersion=${version}" "-X main.buildScmRevision=${src.rev}" ];
+
+  meta = with lib; {
+    description = "Tools for working with Google's bazel buildtool. Includes buildifier, buildozer, and unused_deps";
+    homepage = "https://github.com/bazelbuild/buildtools";
+    changelog = "https://github.com/bazelbuild/buildtools/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers;
+      [ elasticdog uri-canva marsam ]
+      ++ lib.teams.bazel.members;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/cpp-test.nix b/nixpkgs/pkgs/development/tools/build-managers/bazel/cpp-test.nix
new file mode 100644
index 000000000000..8129c3235f36
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/cpp-test.nix
@@ -0,0 +1,62 @@
+{
+  bazel
+, bazelTest
+, bazel-examples
+, stdenv
+, darwin
+, extraBazelArgs ? ""
+, lib
+, runLocal
+, runtimeShell
+, writeScript
+, writeText
+, distDir
+, Foundation ? null
+}:
+
+let
+
+  toolsBazel = writeScript "bazel" ''
+    #! ${runtimeShell}
+
+    export CXX='${stdenv.cc}/bin/clang++'
+    export LD='${darwin.cctools}/bin/ld'
+    export LIBTOOL='${darwin.cctools}/bin/libtool'
+    export CC='${stdenv.cc}/bin/clang'
+
+    # XXX: hack for macosX, this flags disable bazel usage of xcode
+    # See: https://github.com/bazelbuild/bazel/issues/4231
+    export BAZEL_USE_CPP_ONLY_TOOLCHAIN=1
+
+    exec "$BAZEL_REAL" "$@"
+  '';
+
+  workspaceDir = runLocal "our_workspace" {} (''
+    cp -r ${bazel-examples}/cpp-tutorial/stage3 $out
+    find $out -type d -exec chmod 755 {} \;
+  ''
+  + (lib.optionalString stdenv.isDarwin ''
+    mkdir $out/tools
+    cp ${toolsBazel} $out/tools/bazel
+  ''));
+
+  testBazel = bazelTest {
+    name = "bazel-test-cpp";
+    inherit workspaceDir;
+    bazelPkg = bazel;
+    bazelScript = ''
+      ${bazel}/bin/bazel build //... \
+        --verbose_failures \
+        --distdir=${distDir} \
+        --curses=no \
+        ${extraBazelArgs} \
+    '' + lib.optionalString (stdenv.isDarwin) ''
+        --cxxopt=-x --cxxopt=c++ --host_cxxopt=-x --host_cxxopt=c++ \
+        --linkopt=-stdlib=libc++ --host_linkopt=-stdlib=libc++ \
+    '' + lib.optionalString (stdenv.isDarwin && Foundation != null) ''
+        --linkopt=-Wl,-F${Foundation}/Library/Frameworks \
+        --linkopt=-L${darwin.libobjc}/lib \
+    '';
+  };
+
+in testBazel
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/java-test.nix b/nixpkgs/pkgs/development/tools/build-managers/bazel/java-test.nix
new file mode 100644
index 000000000000..91fade474d6f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/java-test.nix
@@ -0,0 +1,68 @@
+{ bazel
+, bazelTest
+, bazel-examples
+, stdenv
+, darwin
+, extraBazelArgs ? ""
+, lib
+, openjdk8
+, jdk11_headless
+, runLocal
+, runtimeShell
+, writeScript
+, writeText
+, distDir
+}:
+
+let
+
+  toolsBazel = writeScript "bazel" ''
+    #! ${runtimeShell}
+
+    export CXX='${stdenv.cc}/bin/clang++'
+    export LD='${darwin.cctools}/bin/ld'
+    export LIBTOOL='${darwin.cctools}/bin/libtool'
+    export CC='${stdenv.cc}/bin/clang'
+
+    # XXX: hack for macosX, this flags disable bazel usage of xcode
+    # See: https://github.com/bazelbuild/bazel/issues/4231
+    export BAZEL_USE_CPP_ONLY_TOOLCHAIN=1
+
+    exec "$BAZEL_REAL" "$@"
+  '';
+
+  workspaceDir = runLocal "our_workspace" {} (''
+    cp -r ${bazel-examples}/java-tutorial $out
+    find $out -type d -exec chmod 755 {} \;
+  ''
+  + (lib.optionalString stdenv.isDarwin ''
+    mkdir $out/tools
+    cp ${toolsBazel} $out/tools/bazel
+  ''));
+
+  testBazel = bazelTest {
+    name = "bazel-test-java";
+    inherit workspaceDir;
+    bazelPkg = bazel;
+    buildInputs = [ (if lib.strings.versionOlder bazel.version "5.0.0" then openjdk8 else jdk11_headless) ];
+    bazelScript = ''
+      ${bazel}/bin/bazel \
+        run \
+        --announce_rc \
+        ${lib.optionalString (lib.strings.versionOlder "5.0.0" bazel.version)
+          "--toolchain_resolution_debug='@bazel_tools//tools/jdk:(runtime_)?toolchain_type'"
+        } \
+        --distdir=${distDir} \
+        --verbose_failures \
+        --curses=no \
+        --strict_java_deps=off \
+        //:ProjectRunner \
+    '' + lib.optionalString (lib.strings.versionOlder bazel.version "5.0.0") ''
+        --host_javabase='@local_jdk//:jdk' \
+        --java_toolchain='@bazel_tools//tools/jdk:toolchain_hostjdk8' \
+        --javabase='@local_jdk//:jdk' \
+    '' + extraBazelArgs;
+  };
+
+in testBazel
+
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/nix-hacks.patch b/nixpkgs/pkgs/development/tools/build-managers/bazel/nix-hacks.patch
new file mode 100644
index 000000000000..95f07646802e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/nix-hacks.patch
@@ -0,0 +1,43 @@
+diff --git a/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorFunction.java b/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorFunction.java
+index 8e772005cd..6ffa1c919c 100644
+--- a/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorFunction.java
++++ b/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorFunction.java
+@@ -432,25 +432,7 @@ public final class RepositoryDelegatorFunction implements SkyFunction {
+       String content;
+       try {
+         content = FileSystemUtils.readContent(markerPath, StandardCharsets.UTF_8);
+-        String markerRuleKey = readMarkerFile(content, markerData);
+-        boolean verified = false;
+-        if (Preconditions.checkNotNull(ruleKey).equals(markerRuleKey)
+-            && Objects.equals(
+-                markerData.get(MANAGED_DIRECTORIES_MARKER),
+-                this.markerData.get(MANAGED_DIRECTORIES_MARKER))) {
+-          verified = handler.verifyMarkerData(rule, markerData, env);
+-          if (env.valuesMissing()) {
+-            return null;
+-          }
+-        }
+-
+-        if (verified) {
+-          return new Fingerprint().addString(content).digestAndReset();
+-        } else {
+-          // So that we are in a consistent state if something happens while fetching the repository
+-          markerPath.delete();
+-          return null;
+-        }
++        return new Fingerprint().addString(content).digestAndReset();
+       } catch (IOException e) {
+         throw new RepositoryFunctionException(e, Transience.TRANSIENT);
+       }
+diff --git a/src/main/java/com/google/devtools/build/lib/shell/JavaSubprocessFactory.java b/src/main/java/com/google/devtools/build/lib/shell/JavaSubprocessFactory.java
+index c282d57ab6..f9b0c08627 100644
+--- a/src/main/java/com/google/devtools/build/lib/shell/JavaSubprocessFactory.java
++++ b/src/main/java/com/google/devtools/build/lib/shell/JavaSubprocessFactory.java
+@@ -146,7 +146,6 @@ public class JavaSubprocessFactory implements SubprocessFactory {
+     ProcessBuilder builder = new ProcessBuilder();
+     builder.command(params.getArgv());
+     if (params.getEnv() != null) {
+-      builder.environment().clear();
+       builder.environment().putAll(params.getEnv());
+     }
+ 
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/protobuf-test.nix b/nixpkgs/pkgs/development/tools/build-managers/bazel/protobuf-test.nix
new file mode 100644
index 000000000000..cc78fca6a47c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/protobuf-test.nix
@@ -0,0 +1,187 @@
+{
+  bazel
+, bazelTest
+, fetchFromGitHub
+, fetchurl
+, stdenv
+, darwin
+, lib
+, openjdk8
+, jdk11_headless
+, runLocal
+, runtimeShell
+, writeScript
+, writeText
+, distDir
+}:
+
+let
+  com_google_protobuf = fetchFromGitHub {
+    owner = "protocolbuffers";
+    repo = "protobuf";
+    rev = "v3.13.0";
+    sha256 = "1nqsvi2yfr93kiwlinz8z7c68ilg1j75b2vcpzxzvripxx5h6xhd";
+  };
+
+  bazel_skylib = fetchFromGitHub {
+    owner = "bazelbuild";
+    repo = "bazel-skylib";
+    rev = "2ec2e6d715e993d96ad6222770805b5bd25399ae";
+    sha256 = "1z2r2vx6kj102zvp3j032djyv99ski1x1sl4i3p6mswnzrzna86s";
+  };
+
+  rules_python = fetchFromGitHub {
+    owner = "bazelbuild";
+    repo = "rules_python";
+    rev = "c8c79aae9aa1b61d199ad03d5fe06338febd0774";
+    sha256 = "1zn58wv5wcylpi0xj7riw34i1jjpqahanxx8y9srwrv0v93b6pqz";
+  };
+
+  rules_proto = fetchFromGitHub {
+    owner = "bazelbuild";
+    repo = "rules_proto";
+    rev = "a0761ed101b939e19d83b2da5f59034bffc19c12";
+    sha256 = "09lqfj5fxm1fywxr5w8pnpqd859gb6751jka9fhxjxjzs33glhqf";
+  };
+
+  net_zlib = fetchurl rec {
+    url = "https://zlib.net/zlib-1.2.11.tar.gz";
+    sha256 = "c3e5e9fdd5004dcb542feda5ee4f0ff0744628baf8ed2dd5d66f8ca1197cb1a1";
+
+    passthru.sha256 = sha256;
+  };
+
+  WORKSPACE = writeText "WORKSPACE" ''
+    workspace(name = "our_workspace")
+
+    load("//:proto-support.bzl", "protobuf_deps")
+    protobuf_deps()
+    load("@rules_proto//proto:repositories.bzl", "rules_proto_toolchains")
+    rules_proto_toolchains()
+    '';
+
+  protoSupport = writeText "proto-support.bzl" ''
+    """Load dependencies needed to compile the protobuf library as a 3rd-party consumer."""
+
+    load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
+
+    def protobuf_deps():
+        """Loads common dependencies needed to compile the protobuf library."""
+
+        if "zlib" not in native.existing_rules():
+            # proto_library, cc_proto_library, and java_proto_library rules implicitly
+            # depend on @com_google_protobuf for protoc and proto runtimes.
+            # This statement defines the @com_google_protobuf repo.
+            native.local_repository(
+                name = "com_google_protobuf",
+                path = "${com_google_protobuf}",
+            )
+            native.local_repository(
+                name = "bazel_skylib",
+                path = "${bazel_skylib}",
+            )
+            native.local_repository(
+                name = "rules_proto",
+                path = "${rules_proto}",
+            )
+            native.local_repository(
+                name = "rules_python",
+                path = "${rules_python}",
+            )
+
+            http_archive(
+                name = "zlib",
+                build_file = "@com_google_protobuf//:third_party/zlib.BUILD",
+                sha256 = "${net_zlib.sha256}",
+                strip_prefix = "zlib-1.2.11",
+                urls = ["file://${net_zlib}"],
+            )
+  '';
+
+  personProto = writeText "person.proto" ''
+    syntax = "proto3";
+
+    package person;
+
+    message Person {
+      string name = 1;
+      int32 id = 2;
+      string email = 3;
+    }
+  '';
+
+  personBUILD = writeText "BUILD" ''
+    load("@rules_proto//proto:defs.bzl", "proto_library")
+
+    proto_library(
+        name = "person_proto",
+        srcs = ["person.proto"],
+        visibility = ["//visibility:public"],
+    )
+
+    java_proto_library(
+        name = "person_java_proto",
+        deps = [":person_proto"],
+    )
+
+    cc_proto_library(
+        name = "person_cc_proto",
+        deps = [":person_proto"],
+    )
+  '';
+
+  toolsBazel = writeScript "bazel" ''
+    #! ${runtimeShell}
+
+    export CXX='${stdenv.cc}/bin/clang++'
+    export LD='${darwin.cctools}/bin/ld'
+    export LIBTOOL='${darwin.cctools}/bin/libtool'
+    export CC='${stdenv.cc}/bin/clang'
+
+    # XXX: hack for macosX, this flags disable bazel usage of xcode
+    # See: https://github.com/bazelbuild/bazel/issues/4231
+    export BAZEL_USE_CPP_ONLY_TOOLCHAIN=1
+
+    exec "$BAZEL_REAL" "$@"
+  '';
+
+  workspaceDir = runLocal "our_workspace" {} (''
+    mkdir $out
+    cp ${WORKSPACE} $out/WORKSPACE
+    touch $out/BUILD.bazel
+    cp ${protoSupport} $out/proto-support.bzl
+    mkdir $out/person
+    cp ${personProto} $out/person/person.proto
+    cp ${personBUILD} $out/person/BUILD.bazel
+  ''
+  + (lib.optionalString stdenv.isDarwin ''
+    mkdir $out/tools
+    cp ${toolsBazel} $out/tools/bazel
+  ''));
+
+  testBazel = bazelTest {
+    name = "bazel-test-protocol-buffers";
+    inherit workspaceDir;
+    bazelPkg = bazel;
+    buildInputs = [ (if lib.strings.versionOlder bazel.version "5.0.0" then openjdk8 else jdk11_headless) ];
+    bazelScript = ''
+      ${bazel}/bin/bazel \
+        build \
+        --distdir=${distDir} \
+        --verbose_failures \
+        --curses=no \
+        --subcommands \
+        --strict_java_deps=off \
+        --strict_proto_deps=off \
+        //... \
+    '' + lib.optionalString (lib.strings.versionOlder bazel.version "5.0.0") ''
+        --host_javabase='@local_jdk//:jdk' \
+        --java_toolchain='@bazel_tools//tools/jdk:toolchain_hostjdk8' \
+        --javabase='@local_jdk//:jdk' \
+    '' + lib.optionalString (stdenv.isDarwin) ''
+        --cxxopt=-x --cxxopt=c++ --host_cxxopt=-x --host_cxxopt=c++ \
+        --linkopt=-stdlib=libc++ --host_linkopt=-stdlib=libc++ \
+    '';
+  };
+
+in testBazel
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/python-bin-path-test.nix b/nixpkgs/pkgs/development/tools/build-managers/bazel/python-bin-path-test.nix
new file mode 100644
index 000000000000..bd0f71a5d979
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/python-bin-path-test.nix
@@ -0,0 +1,86 @@
+{
+  bazel
+, bazelTest
+, stdenv
+, darwin
+, extraBazelArgs ? ""
+, lib
+, runLocal
+, runtimeShell
+, writeScript
+, writeText
+, distDir
+}:
+
+let
+  toolsBazel = writeScript "bazel" ''
+    #! ${runtimeShell}
+
+    export CXX='${stdenv.cc}/bin/clang++'
+    export LD='${darwin.cctools}/bin/ld'
+    export LIBTOOL='${darwin.cctools}/bin/libtool'
+    export CC='${stdenv.cc}/bin/clang'
+
+    # XXX: hack for macosX, this flags disable bazel usage of xcode
+    # See: https://github.com/bazelbuild/bazel/issues/4231
+    export BAZEL_USE_CPP_ONLY_TOOLCHAIN=1
+
+    exec "$BAZEL_REAL" "$@"
+  '';
+
+  WORKSPACE = writeText "WORKSPACE" ''
+    workspace(name = "our_workspace")
+  '';
+
+  pythonLib = writeText "lib.py" ''
+    def foo():
+      return 43
+  '';
+
+  pythonBin = writeText "bin.py" ''
+    from lib import foo
+
+    assert foo() == 43
+  '';
+
+  pythonBUILD = writeText "BUILD" ''
+    py_library(
+      name = "lib",
+      srcs = [ "lib.py" ],
+    )
+
+    py_binary(
+      name = "bin",
+      srcs = [ "bin.py" ],
+      imports = [ "." ],
+      deps = [ ":lib" ],
+    )
+  '';
+
+  workspaceDir = runLocal "our_workspace" {} (''
+    mkdir $out
+    cp ${WORKSPACE} $out/WORKSPACE
+    mkdir $out/python
+    cp ${pythonLib} $out/python/lib.py
+    cp ${pythonBin} $out/python/bin.py
+    cp ${pythonBUILD} $out/python/BUILD.bazel
+  ''
+  + (lib.optionalString stdenv.isDarwin ''
+    mkdir $out/tools
+    cp ${toolsBazel} $out/tools/bazel
+  ''));
+
+  testBazel = bazelTest {
+    name = "bazel-test-builtin-rules";
+    inherit workspaceDir;
+    bazelPkg = bazel;
+    bazelScript = ''
+      ${bazel}/bin/bazel \
+        run \
+        --distdir=${distDir} \
+        ${extraBazelArgs} \
+        //python:bin
+    '';
+  };
+
+in testBazel
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/shebang-test.nix b/nixpkgs/pkgs/development/tools/build-managers/bazel/shebang-test.nix
new file mode 100644
index 000000000000..d316b4650ddf
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/shebang-test.nix
@@ -0,0 +1,58 @@
+{
+  bazel
+, bazelTest
+, extracted
+, ripgrep
+, runLocal
+, unzip
+, ...
+}:
+
+# Tests that all shebangs are patched appropriately.
+# #!/usr/bin/... should be replaced by Nix store references.
+# #!.../bin/env python should be replaced by Nix store reference to the python interpreter.
+
+let
+
+  workspaceDir = runLocal "our_workspace" {} "mkdir $out";
+
+  testBazel = bazelTest {
+    name = "bazel-test-shebangs";
+    inherit workspaceDir;
+    bazelPkg = bazel;
+    bazelScript = ''
+      set -ueo pipefail
+      FAIL=
+      check_shebangs() {
+        local dir="$1"
+        { rg -e '#!/usr/bin' -e '#![^[:space:]]*/bin/env' $dir -e && echo && FAIL=1; } || true
+      }
+      extract() {
+        local dir="$1"
+        find "$dir" -type f '(' -name '*.zip' -or -name '*.jar' ')' -print0 \
+        | while IFS="" read -r -d "" zip ; do
+          echo "Extracting $zip"
+          local unzipped="$zip-UNPACKED"
+          mkdir -p "$unzipped"
+          unzip -qq $zip -d "$unzipped"
+          extract "$unzipped"
+          rm -rf "$unzipped" "$zip" || true
+        done
+        check_shebangs "$dir"
+      }
+
+      mkdir install_root
+      cp --no-preserve=all -r ${extracted bazel}/install/*/* install_root/
+      extract ./install_root
+
+      if [[ $FAIL = 1 ]]; then
+        echo "Found files in the bazel distribution with illegal shebangs." >&2
+        echo "Replace those by explicit Nix store paths." >&2
+        echo "Python scripts should not use \`bin/env python' but the Python interpreter's store path." >&2
+        exit 1
+      fi
+    '';
+    buildInputs = [ unzip ripgrep ];
+  };
+
+in testBazel
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/strict_action_env.patch b/nixpkgs/pkgs/development/tools/build-managers/bazel/strict_action_env.patch
new file mode 100644
index 000000000000..1402c20f6bdb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/strict_action_env.patch
@@ -0,0 +1,13 @@
+diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java
+index a70b5559bc..10bdffe961 100644
+--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java
++++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java
+@@ -466,7 +466,7 @@ public class BazelRuleClassProvider {
+       // Note that --action_env does not propagate to the host config, so it is not a viable
+       // workaround when a genrule is itself built in the host config (e.g. nested genrules). See
+       // #8536.
+-      return "/bin:/usr/bin:/usr/local/bin";
++      return "@strictActionEnvPatch@";
+     }
+
+     String newPath = "";
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/trim-last-argument-to-gcc-if-empty.patch b/nixpkgs/pkgs/development/tools/build-managers/bazel/trim-last-argument-to-gcc-if-empty.patch
new file mode 100644
index 000000000000..b93b252f3638
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/trim-last-argument-to-gcc-if-empty.patch
@@ -0,0 +1,37 @@
+From 177b4720d6fbaa7fdd17e5e11b2c79ac8f246786 Mon Sep 17 00:00:00 2001
+From: "Wael M. Nasreddine" <wael.nasreddine@gmail.com>
+Date: Thu, 27 Jun 2019 21:08:51 -0700
+Subject: [PATCH] Trim last argument to gcc if empty, on Darwin
+
+On Darwin, the last argument to GCC is coming up as an empty string.
+This is breaking the build of proto_library targets. However, I was not
+able to reproduce with the example cpp project[0].
+
+This commit removes the last argument if it's an empty string. This is
+not a problem on Linux.
+
+[0]: https://github.com/bazelbuild/examples/tree/master/cpp-tutorial/stage3
+---
+ tools/cpp/osx_cc_wrapper.sh.tpl | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/tools/cpp/osx_cc_wrapper.sh.tpl b/tools/cpp/osx_cc_wrapper.sh.tpl
+index 4c85cd9b6b..6c611e3d25 100644
+--- a/tools/cpp/osx_cc_wrapper.sh.tpl
++++ b/tools/cpp/osx_cc_wrapper.sh.tpl
+@@ -53,7 +53,11 @@ done
+ %{env}
+ 
+ # Call the C++ compiler
+-%{cc} "$@"
++if [[ ${*: -1} = "" ]]; then
++    %{cc} "${@:0:$#}"
++else
++    %{cc} "$@"
++fi
+ 
+ function get_library_path() {
+     for libdir in ${LIB_DIRS}; do
+-- 
+2.19.2
+
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/update-srcDeps.py b/nixpkgs/pkgs/development/tools/build-managers/bazel/update-srcDeps.py
new file mode 100755
index 000000000000..4105aeeb11bc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/update-srcDeps.py
@@ -0,0 +1,62 @@
+#!/usr/bin/env python3
+import sys
+import json
+
+if len(sys.argv) == 1:
+    print("usage: ./this-script WORKSPACE", file=sys.stderr)
+    print("Takes the bazel WORKSPACE file and reads all archives into a json dict (by evaling it as python code)", file=sys.stderr)
+    print("Hail Eris.", file=sys.stderr)
+    sys.exit(1)
+
+http_archives = []
+
+# just the kw args are the dict { name, sha256, urls … }
+def http_archive(**kw):
+    http_archives.append(kw)
+# like http_file
+def http_file(**kw):
+    http_archives.append(kw)
+
+# this is inverted from http_archive/http_file and bundles multiple archives
+def distdir_tar(**kw):
+    for archive_name in kw['archives']:
+        http_archives.append({
+            "name": archive_name,
+            "sha256": kw['sha256'][archive_name],
+            "urls": kw['urls'][archive_name]
+        })
+
+# stubs for symbols we are not interested in
+# might need to be expanded if new bazel releases add symbols to the workspace
+def workspace(name): pass
+def load(*args): pass
+def bind(**kw): pass
+def list_source_repository(**kw): pass
+def new_local_repository(**kw): pass
+def local_repository(**kw): pass
+DOC_VERSIONS = []
+def stardoc_repositories(**kw): pass
+def skydoc_repositories(**kw): pass
+def rules_sass_dependencies(**kw): pass
+def node_repositories(**kw): pass
+def sass_repositories(**kw): pass
+def register_execution_platforms(*args): pass
+def rbe_autoconfig(*args, **kw): pass
+def rules_pkg_dependencies(*args, **kw): pass
+def winsdk_configure(*args, **kw): pass
+def register_local_rc_exe_toolchains(*args, **kw): pass
+def register_toolchains(*args, **kw): pass
+def debian_deps(): pass
+def grpc_deps(): pass
+def grpc_extra_deps(): pass
+def bazel_skylib_workspace(): pass
+
+# execute the WORKSPACE like it was python code in this module,
+# using all the function stubs from above.
+with open(sys.argv[1]) as f:
+    exec(f.read())
+
+# transform to a dict with the names as keys
+d = { el['name']: el for el in http_archives }
+
+print(json.dumps(d, sort_keys=True, indent=4))
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bear/default.nix b/nixpkgs/pkgs/development/tools/build-managers/bear/default.nix
new file mode 100644
index 000000000000..431f7b1773f6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bear/default.nix
@@ -0,0 +1,93 @@
+{ lib, stdenv
+, fetchFromGitHub
+, fetchpatch
+, cmake
+, ninja
+, pkg-config
+, grpc
+, protobuf
+, openssl
+, nlohmann_json
+, gtest
+, spdlog
+, c-ares
+, zlib
+, sqlite
+, re2
+, lit
+, python3
+, coreutils
+}:
+
+stdenv.mkDerivation rec {
+  pname = "bear";
+  version = "3.1.3";
+
+  src = fetchFromGitHub {
+    owner = "rizsotto";
+    repo = pname;
+    rev = version;
+    hash = "sha256-1nZPzgLWcmaRkOUXdm16IW2Nw/p1w8GBGEfZX/v+En0=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    ninja
+    pkg-config
+
+    # Used for functional tests, which run during buildPhase.
+    lit
+    python3
+  ];
+
+  buildInputs = [
+    grpc
+    protobuf
+    openssl
+    nlohmann_json
+    gtest
+    spdlog
+    c-ares
+    zlib
+    sqlite
+    re2
+  ];
+
+  cmakeFlags = [
+    # Build system and generated files concatenate install prefix and
+    # CMAKE_INSTALL_{BIN,LIB}DIR, which breaks if these are absolute paths.
+    "-DCMAKE_INSTALL_BINDIR=bin"
+    "-DCMAKE_INSTALL_LIBDIR=lib"
+    (lib.cmakeBool "ENABLE_UNIT_TESTS" false)
+    (lib.cmakeBool "ENABLE_FUNC_TESTS" false)
+  ];
+
+  patches = [
+    # Fix toolchain environment variable handling and the Darwin SIP check.
+    ./fix-functional-tests.patch
+  ];
+
+  postPatch = ''
+    patchShebangs test/bin
+
+    # /usr/bin/env is used in test commands and embedded scripts.
+    find test -name '*.sh' \
+      -exec sed -ie 's|/usr/bin/env|${coreutils}/bin/env|g' {} +
+  '';
+
+  # Functional tests use loopback networking.
+  __darwinAllowLocalNetworking = true;
+
+  meta = with lib; {
+    description = "Tool that generates a compilation database for clang tooling";
+    longDescription = ''
+      Note: the bear command is very useful to generate compilation commands
+      e.g. for YouCompleteMe.  You just enter your development nix-shell
+      and run `bear make`.  It's not perfect, but it gets a long way.
+    '';
+    homepage = "https://github.com/rizsotto/Bear";
+    license = licenses.gpl3Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ babariviere ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bear/fix-functional-tests.patch b/nixpkgs/pkgs/development/tools/build-managers/bear/fix-functional-tests.patch
new file mode 100644
index 000000000000..99d64f26d077
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bear/fix-functional-tests.patch
@@ -0,0 +1,32 @@
+diff --git a/test/lit.cfg b/test/lit.cfg
+index 118c979..b69fecc 100644
+--- a/test/lit.cfg
++++ b/test/lit.cfg
+@@ -207,13 +207,8 @@ def is_preload_disabled():
+     if is_windows:
+         return True
+     elif sys.platform == 'darwin':
+-        command = ['csrutil', 'status']
+-        pattern = re.compile(r'System Integrity Protection status:\s+enabled')
+-        try:
+-            output = subprocess.check_output(command, stderr=subprocess.STDOUT)
+-            return any(pattern.match(line) for line in output.decode('utf-8').splitlines())
+-        except (OSError, subprocess.CalledProcessError):
+-            return False
++        # csrutil(8) isn't available in the Nix build sandbox.
++        return True
+     else:
+         return False
+ 
+@@ -221,6 +216,11 @@ def is_preload_disabled():
+ if not is_preload_disabled():
+     config.available_features.add('preload')
+ 
++# Preserve the variables required for the Nix toolchain wrappers.
++for var, value in os.environ.items():
++    if var.startswith('NIX_'):
++        config.environment[var] = value
++
+ print(config.substitutions)
+ print(config.environment)
+ print(config.available_features)
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bloop/default.nix b/nixpkgs/pkgs/development/tools/build-managers/bloop/default.nix
new file mode 100644
index 000000000000..362fce432ecd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bloop/default.nix
@@ -0,0 +1,72 @@
+{ stdenv
+, fetchurl
+, autoPatchelfHook
+, installShellFiles
+, makeWrapper
+, jre
+, lib
+, zlib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "bloop";
+  version = "1.5.13";
+
+  platform =
+    if stdenv.isLinux && stdenv.isx86_64 then "x86_64-pc-linux"
+    else if stdenv.isDarwin && stdenv.isx86_64 then "x86_64-apple-darwin"
+    else throw "unsupported platform";
+
+  bloop-bash = fetchurl {
+    url = "https://github.com/scalacenter/bloop/releases/download/v${version}/bash-completions";
+    sha256 = "sha256-2mt+zUEJvQ/5ixxFLZ3Z0m7uDSj/YE9sg/uNMjamvdE=";
+  };
+
+  bloop-fish = fetchurl {
+    url = "https://github.com/scalacenter/bloop/releases/download/v${version}/fish-completions";
+    sha256 = "sha256-eFESR6iPHRDViGv+Fk3sCvPgVAhk2L1gCG4LnfXO/v4=";
+  };
+
+  bloop-zsh = fetchurl {
+    url = "https://github.com/scalacenter/bloop/releases/download/v${version}/zsh-completions";
+    sha256 = "sha256-WNMsPwBfd5EjeRbRtc06lCEVI2FVoLfrqL82OR0G7/c=";
+  };
+
+  bloop-binary = fetchurl rec {
+    url = "https://github.com/scalacenter/bloop/releases/download/v${version}/bloop-${platform}";
+    sha256 =
+      if stdenv.isLinux && stdenv.isx86_64 then "sha256-OgOkkQ2uv1/mutlajfnbKe9YUtWCilaiWef6fZ7m0Qk="
+      else if stdenv.isDarwin && stdenv.isx86_64 then "sha256-Xp0FF8/5NQG14OhZgQ7PZTyDC5hNG9q5Qq5q3JlQxA0="
+      else throw "unsupported platform";
+  };
+
+  dontUnpack = true;
+  nativeBuildInputs = [ installShellFiles makeWrapper ]
+    ++ lib.optional stdenv.isLinux autoPatchelfHook;
+  buildInputs = [ stdenv.cc.cc.lib zlib ];
+  propagatedBuildInputs = [ jre ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -D -m 0755 ${bloop-binary} $out/.bloop-wrapped
+
+    makeWrapper $out/.bloop-wrapped $out/bin/bloop
+
+    #Install completions
+    installShellCompletion --name bloop --bash ${bloop-bash}
+    installShellCompletion --name _bloop --zsh ${bloop-zsh}
+    installShellCompletion --name bloop.fish --fish ${bloop-fish}
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://scalacenter.github.io/bloop/";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.asl20;
+    description = "A Scala build server and command-line tool to make the compile and test developer workflows fast and productive in a build-tool-agnostic way";
+    platforms = [ "x86_64-linux" "x86_64-darwin" ];
+    maintainers = with maintainers; [ kubukoz tomahna ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bob/default.nix b/nixpkgs/pkgs/development/tools/build-managers/bob/default.nix
new file mode 100644
index 000000000000..97e67ce97798
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bob/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, buildGoModule, fetchFromGitHub, installShellFiles }:
+
+buildGoModule rec {
+  pname = "bob";
+  version = "0.8.2";
+
+  src = fetchFromGitHub {
+    owner = "benchkram";
+    repo = pname;
+    rev = version;
+    hash = "sha256-zmWfOLBb+GWw9v6LdCC7/WaP1Wz7UipPwqkmI1+rG8Q=";
+  };
+
+  ldflags = [ "-s" "-w" "-X main.Version=${version}" ];
+
+  vendorHash = "sha256-S1XUgjdSVTWXehOLCxXcvj0SH12cxqvYadVlCw/saF4=";
+
+  excludedPackages = [ "example/server-db" "test/e2e" "tui-example" ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = lib.optionalString (stdenv.buildPlatform.canExecute stdenv.hostPlatform) ''
+    installShellCompletion --cmd bob \
+      --bash <($out/bin/bob completion) \
+      --zsh <($out/bin/bob completion -z)
+  '';
+
+  # tests require network access
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A build system for microservices";
+    homepage = "https://bob.build";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ zuzuleinen ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/boot/builder.sh b/nixpkgs/pkgs/development/tools/build-managers/boot/builder.sh
new file mode 100644
index 000000000000..4506e3f0f861
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/boot/builder.sh
@@ -0,0 +1,14 @@
+if [ -e "$NIX_ATTRS_SH_FILE" ]; then . "$NIX_ATTRS_SH_FILE"; elif [ -f .attrs.sh ]; then . .attrs.sh; fi
+source $stdenv/setup
+
+boot_bin=$out/bin/boot
+
+mkdir -pv $(dirname $boot_bin)
+cp -v $src $boot_bin
+chmod -v 755 $boot_bin
+
+patchShebangs $boot_bin
+
+sed -i \
+    -e "s;\${BOOT_JAVA_COMMAND:-java};\${BOOT_JAVA_COMMAND:-${jdk}/bin/java};g" \
+    $boot_bin
diff --git a/nixpkgs/pkgs/development/tools/build-managers/boot/default.nix b/nixpkgs/pkgs/development/tools/build-managers/boot/default.nix
new file mode 100644
index 000000000000..1590906206c1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/boot/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchurl, jdk }:
+
+stdenv.mkDerivation rec {
+  version = "2.7.2";
+  pname = "boot";
+
+  src = fetchurl {
+    url = "https://github.com/boot-clj/boot-bin/releases/download/${version}/boot.sh";
+    sha256 = "1hqp3xxmsj5vkym0l3blhlaq9g3w0lhjgmp37g6y3rr741znkk8c";
+  };
+
+  inherit jdk;
+
+  builder = ./builder.sh;
+
+  propagatedBuildInputs = [ jdk ];
+
+  meta = with lib; {
+    description = "Build tooling for Clojure";
+    homepage = "https://boot-clj.github.io/";
+    license = licenses.epl10;
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = with maintainers; [ ragge ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/buck/default.nix b/nixpkgs/pkgs/development/tools/build-managers/buck/default.nix
new file mode 100644
index 000000000000..d283e1e321db
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/buck/default.nix
@@ -0,0 +1,46 @@
+{ lib, stdenv, fetchFromGitHub, jdk8, ant, python3, watchman, bash, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "buck";
+  version = "2022.05.05.01";
+
+  src = fetchFromGitHub {
+    owner = "facebook";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "15v4sk1l43pgd5jxr5lxnh0ks6vb3xk5253n66s7vvsnph48j14q";
+  };
+
+  patches = [ ./pex-mtime.patch ];
+
+  postPatch = ''
+    grep -l -r '/bin/bash' --null | xargs -0 sed -i -e "s!/bin/bash!${bash}/bin/bash!g"
+  '';
+
+  nativeBuildInputs = [ makeWrapper python3 jdk8 ant watchman ];
+
+  buildPhase = ''
+    # Set correct version, see https://github.com/facebook/buck/issues/2607
+    echo v${version} > .buckrelease
+
+    ant
+
+    PYTHONDONTWRITEBYTECODE=true ./bin/buck build -c buck.release_version=${version} buck
+  '';
+
+  installPhase = ''
+    install -D -m755 buck-out/gen/*/programs/buck.pex $out/bin/buck
+    wrapProgram $out/bin/buck \
+      --prefix PATH : "${lib.makeBinPath [ jdk8 watchman python3 ]}"
+  '';
+
+  meta = with lib; {
+    homepage = "https://buck.build/";
+    description = "A high-performance build tool";
+    maintainers = [ maintainers.jgertm maintainers.marsam ];
+    license = licenses.asl20;
+    platforms = platforms.all;
+    # https://github.com/facebook/buck/issues/2666
+    broken = stdenv.isDarwin && stdenv.isAarch64;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/buck/pex-mtime.patch b/nixpkgs/pkgs/development/tools/build-managers/buck/pex-mtime.patch
new file mode 100644
index 000000000000..b8726e64a604
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/buck/pex-mtime.patch
@@ -0,0 +1,13 @@
+diff --git a/third-party/py/pex/pex/common.py b/third-party/py/pex/pex/common.py
+index 76459ce23..eff411b20 100644
+--- a/third-party/py/pex/pex/common.py
++++ b/third-party/py/pex/pex/common.py
+@@ -328,4 +328,7 @@ class Chroot(object):
+   def zip(self, filename, mode='wb'):
+     with contextlib.closing(zipfile.ZipFile(filename, mode)) as zf:
+       for f in sorted(self.files()):
+-        zf.write(os.path.join(self.chroot, f), arcname=f, compress_type=zipfile.ZIP_DEFLATED)
++        path = os.path.join(self.chroot, f)
++        instant = 615532801
++        os.utime(path, (instant, instant))
++        zf.write(path, arcname=f, compress_type=zipfile.ZIP_DEFLATED)
diff --git a/nixpkgs/pkgs/development/tools/build-managers/buck2/default.nix b/nixpkgs/pkgs/development/tools/build-managers/buck2/default.nix
new file mode 100644
index 000000000000..20b1d184e8e1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/buck2/default.nix
@@ -0,0 +1,120 @@
+{ fetchurl, lib, stdenv, zstd
+, testers, buck2 # for passthru.tests
+}:
+
+# NOTE (aseipp): buck2 uses a precompiled binary build for good reason — the
+# upstream codebase extensively uses unstable `rustc` nightly features, and as a
+# result can't be built upstream in any sane manner. it is only ever tested and
+# integrated against a single version of the compiler, which produces all usable
+# binaries. you shouldn't try to workaround this or get clever and think you can
+# patch it to work; just accept it for now. it is extremely unlikely buck2 will
+# build with a stable compiler anytime soon; see related upstream issues:
+#
+#   - NixOS/nixpkgs#226677
+#   - NixOS/nixpkgs#232471
+#   - facebook/buck2#265
+#   - facebook/buck2#322
+#
+# worth noting: it *is* possible to build buck2 from source using
+# buildRustPackage, and it works fine, but only if you are using flakes and can
+# import `rust-overlay` from somewhere else to vendor your compiler. See
+# nixos/nixpkgs#226677 for more information about that.
+
+# NOTE (aseipp): this expression is mostly automated, and you are STRONGLY
+# RECOMMENDED to use to nix-update for updating this expression when new
+# releases come out, which runs the sibling `update.sh` script.
+#
+# from the root of the nixpkgs git repository, run:
+#
+#    nix-shell maintainers/scripts/update.nix \
+#      --argstr commit true \
+#      --argstr package buck2
+
+let
+
+  # build hashes, which correspond to the hashes of the precompiled binaries
+  # procued by GitHub Actions. this also includes the hash for a download of a
+  # compatible buck2-prelude
+  buildHashes = builtins.fromJSON (builtins.readFile ./hashes.json);
+
+  # our version of buck2; this should be a git tag
+  version = "2024-01-15";
+
+  # the platform-specific, statically linked binary — which is also
+  # zstd-compressed
+  src =
+    let
+      suffix = {
+        # map our platform name to the rust toolchain suffix
+        # NOTE (aseipp): must be synchronized with update.sh!
+        x86_64-darwin  = "x86_64-apple-darwin";
+        aarch64-darwin = "aarch64-apple-darwin";
+        x86_64-linux   = "x86_64-unknown-linux-musl";
+        aarch64-linux  = "aarch64-unknown-linux-musl";
+      }."${stdenv.hostPlatform.system}" or (throw "Unsupported system: ${stdenv.hostPlatform.system}");
+
+      name = "buck2-${version}-${suffix}.zst";
+      hash = buildHashes."${stdenv.hostPlatform.system}";
+      url = "https://github.com/facebook/buck2/releases/download/${version}/buck2-${suffix}.zst";
+    in fetchurl { inherit name url hash; };
+
+  # compatible version of buck2 prelude; this is exported via passthru.prelude
+  # for downstream consumers to use when they need to automate any kind of
+  # tooling
+  prelude-src =
+    let
+      prelude-hash = "ccf6f5d1693cfa215b60212cf9863d27c6fd6a69";
+      name = "buck2-prelude-${version}.tar.gz";
+      hash = buildHashes."_prelude";
+      url = "https://github.com/facebook/buck2-prelude/archive/${prelude-hash}.tar.gz";
+    in fetchurl { inherit name url hash; };
+
+in stdenv.mkDerivation {
+  pname = "buck2";
+  version = "unstable-${version}"; # TODO (aseipp): kill 'unstable' once a non-prerelease is made
+  inherit src;
+
+  nativeBuildInputs = [ zstd ];
+
+  doCheck = true;
+  dontConfigure = true;
+  dontStrip = true;
+
+  unpackPhase = "unzstd ${src} -o ./buck2";
+  buildPhase = "chmod +x ./buck2";
+  checkPhase = "./buck2 --version";
+  installPhase = ''
+    mkdir -p $out/bin
+    install -D buck2 $out/bin/buck2
+  '';
+
+  passthru = {
+    prelude = prelude-src;
+
+    updateScript = ./update.sh;
+    tests = testers.testVersion {
+      package = buck2;
+
+      # NOTE (aseipp): the buck2 --version command doesn't actually print out
+      # the given version tagged in the release, but a hash, but not the git
+      # hash; the entire version logic is bizarrely specific to buck2, and needs
+      # to be reworked the open source build to behave like expected. in the
+      # mean time, it *does* always print out 'buck2 <hash>...' so we can just
+      # match on "buck2"
+      version = "buck2";
+    };
+  };
+
+  meta = with lib; {
+    description = "Fast, hermetic, multi-language build system";
+    homepage = "https://buck2.build";
+    changelog = "https://github.com/facebook/buck2/releases/tag/${version}";
+    license = with licenses; [ asl20 /* or */ mit ];
+    mainProgram = "buck2";
+    maintainers = with maintainers; [ thoughtpolice ];
+    platforms = [
+      "x86_64-linux" "aarch64-linux"
+      "x86_64-darwin" "aarch64-darwin"
+    ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/buck2/hashes.json b/nixpkgs/pkgs/development/tools/build-managers/buck2/hashes.json
new file mode 100644
index 000000000000..687a2f585f02
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/buck2/hashes.json
@@ -0,0 +1,7 @@
+{ "_comment": "@generated by pkgs/development/tools/build-managers/buck2/update.sh"
+, "_prelude": "sha256-Bsd545xKass+Sua1sTFRNJgOokaHS62AKvhiLuqL58w="
+, "x86_64-linux": "sha256-Oxgz96x9INVDybJIRlBvIa76V7ngUxYh9Uo6Hdo/3pQ="
+, "x86_64-darwin": "sha256-tOlp6LKdQZg6TK2Ki8yf/e38Ibrx3fDrzOzC6bzGtrQ="
+, "aarch64-linux": "sha256-LmMbh/4tckZN1J8GJzMt8GyPmQbk3zc9DwXqJ004O7c="
+, "aarch64-darwin": "sha256-qsdHCxtJzu+UMVl1AcQh3cgDWQAITQNJEnfEN9A1W5M="
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/buck2/update.sh b/nixpkgs/pkgs/development/tools/build-managers/buck2/update.sh
new file mode 100755
index 000000000000..179ab6f3601d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/buck2/update.sh
@@ -0,0 +1,51 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -I nixpkgs=./. -i bash -p curl jq nix-prefetch common-updater-scripts nix coreutils
+# shellcheck shell=bash
+set -euo pipefail
+
+VERSION=$(curl -s https://api.github.com/repos/facebook/buck2/releases \
+  | jq -r 'sort_by(.created_at) | reverse |
+           (map
+             (select ((.prerelease == true) and (.name != "latest"))) |
+             first
+           ) | .name')
+PRELUDE_HASH=$(curl -sLo - "https://github.com/facebook/buck2/releases/download/${VERSION}/prelude_hash")
+PRELUDE_DL_URL="https://github.com/facebook/buck2-prelude/archive/${PRELUDE_HASH}.tar.gz"
+
+echo "Latest buck2 prerelease: $VERSION"
+echo "Compatible buck2-prelude hash: $PRELUDE_HASH"
+
+ARCHS=(
+    "x86_64-linux:x86_64-unknown-linux-musl"
+    "x86_64-darwin:x86_64-apple-darwin"
+    "aarch64-linux:aarch64-unknown-linux-musl"
+    "aarch64-darwin:aarch64-apple-darwin"
+)
+
+NFILE=pkgs/development/tools/build-managers/buck2/default.nix
+HFILE=pkgs/development/tools/build-managers/buck2/hashes.json
+rm -f "$HFILE" && touch "$HFILE"
+
+PRELUDE_SHA256HASH="$(nix-prefetch-url --type sha256 "$PRELUDE_DL_URL")"
+PRELUDE_SRIHASH="$(nix hash to-sri --type sha256 "$PRELUDE_SHA256HASH")"
+
+printf "{ \"_comment\": \"@generated by pkgs/development/tools/build-managers/buck2/update.sh\"\n" >> "$HFILE"
+printf ", \"_prelude\": \"$PRELUDE_SRIHASH\"\n" >> "$HFILE"
+
+for arch in "${ARCHS[@]}"; do
+    IFS=: read -r arch_name arch_target <<< "$arch"
+    sha256hash="$(nix-prefetch-url --type sha256 "https://github.com/facebook/buck2/releases/download/${VERSION}/buck2-${arch_target}.zst")"
+    srihash="$(nix hash to-sri --type sha256 "$sha256hash")"
+    echo ", \"$arch_name\": \"$srihash\"" >> "$HFILE"
+done
+echo "}" >> "$HFILE"
+
+sed -i \
+  '0,/version\s*=\s*".*";/s//version = "'"$VERSION"'";/' \
+  "$NFILE"
+
+sed -i \
+  '0,/prelude-hash\s*=\s*".*";/s//prelude-hash = "'"$PRELUDE_HASH"'";/' \
+  "$NFILE"
+
+echo "Done; wrote $HFILE and updated version in $NFILE."
diff --git a/nixpkgs/pkgs/development/tools/build-managers/build2/bdep.nix b/nixpkgs/pkgs/development/tools/build-managers/build2/bdep.nix
new file mode 100644
index 000000000000..904217e29d3a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/build2/bdep.nix
@@ -0,0 +1,50 @@
+{ lib, stdenv
+, build2
+, fetchurl
+, libbpkg
+, libbutl
+, libodb
+, libodb-sqlite
+, enableShared ? !stdenv.hostPlatform.isStatic
+, enableStatic ? !enableShared
+}:
+
+stdenv.mkDerivation rec {
+  pname = "bdep";
+  version = "0.16.0";
+
+  outputs = [ "out" "doc" "man" ];
+  src = fetchurl {
+    url = "https://pkg.cppget.org/1/alpha/build2/bdep-${version}.tar.gz";
+    hash = "sha256-5w8Ng8TS8g+Nkbixn5txg4FGi57TSfc6ii+2wh8apCo=";
+  };
+
+  strictDeps = true;
+  nativeBuildInputs = [
+    build2
+  ];
+  buildInputs = [
+    libbpkg
+    libbutl
+    libodb
+    libodb-sqlite
+  ];
+
+  build2ConfigureFlags = [
+    "config.bin.lib=${build2.configSharedStatic enableShared enableStatic}"
+  ];
+
+  meta = with lib; {
+    description = "build2 project dependency manager";
+    # https://build2.org/bdep/doc/bdep.xhtml
+    longDescription = ''
+      The build2 project dependency manager is used to manage the dependencies
+      of a project during development.
+    '';
+    homepage = "https://build2.org/";
+    changelog = "https://git.build2.org/cgit/bdep/tree/NEWS";
+    license = licenses.mit;
+    maintainers = with maintainers; [ r-burns ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/build2/bootstrap.nix b/nixpkgs/pkgs/development/tools/build-managers/build2/bootstrap.nix
new file mode 100644
index 000000000000..0e1297506d4a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/build2/bootstrap.nix
@@ -0,0 +1,54 @@
+{ lib, stdenv
+, fetchurl
+, pkgs
+, buildPackages
+, fixDarwinDylibNames
+}:
+stdenv.mkDerivation rec {
+  pname = "build2-bootstrap";
+  version = "0.16.0";
+  src = fetchurl {
+    url = "https://download.build2.org/${version}/build2-toolchain-${version}.tar.xz";
+    hash = "sha256-I3k/aCoXsdlcgLvYSSRHNe1Zo+JzYVKapIZdJ3b/itw=";
+  };
+  patches = [
+    # Pick up sysdirs from NIX_LDFLAGS
+    ./nix-ldflags-sysdirs.patch
+  ];
+
+  sourceRoot = "build2-toolchain-${version}/build2";
+  makefile = "bootstrap.gmake";
+  enableParallelBuilding = true;
+
+  setupHook = ./setup-hook.sh;
+
+  strictDeps = true;
+
+  propagatedBuildInputs = lib.optionals stdenv.targetPlatform.isDarwin [
+    fixDarwinDylibNames
+
+    # Build2 needs to use lld on Darwin because it creates thin archives when it detects `llvm-ar`,
+    # which ld64 does not support.
+    (lib.getBin buildPackages.llvmPackages_16.lld)
+  ];
+
+  doCheck = true;
+  checkPhase = ''
+    runHook preCheck
+    build2/b-boot --version
+    runHook postCheck
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    install -D build2/b-boot $out/bin/b
+    runHook postInstall
+  '';
+
+  postFixup = ''
+    substituteInPlace $out/nix-support/setup-hook \
+      --subst-var-by isTargetDarwin '${toString stdenv.targetPlatform.isDarwin}'
+  '';
+
+  inherit (pkgs.build2) passthru;
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/build2/bpkg.nix b/nixpkgs/pkgs/development/tools/build-managers/build2/bpkg.nix
new file mode 100644
index 000000000000..60b9d820ac2f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/build2/bpkg.nix
@@ -0,0 +1,69 @@
+{ lib, stdenv
+, build2
+, fetchurl
+, git
+, libbpkg
+, libbutl
+, libodb
+, libodb-sqlite
+, openssl
+, enableShared ? !stdenv.hostPlatform.isStatic
+, enableStatic ? !enableShared
+}:
+
+stdenv.mkDerivation rec {
+  pname = "bpkg";
+  version = "0.16.0";
+
+  outputs = [ "out" "doc" "man" ];
+
+  src = fetchurl {
+    url = "https://pkg.cppget.org/1/alpha/build2/bpkg-${version}.tar.gz";
+    hash = "sha256-sxzVidVL8dpoH82IevcwjcIWj4LQzliGv9zasTYqeok=";
+  };
+
+  strictDeps = true;
+  nativeBuildInputs = [
+    build2
+  ];
+  buildInputs = [
+    build2
+    libbpkg
+    libbutl
+    libodb
+    libodb-sqlite
+  ];
+  nativeCheckInputs = [
+    git
+    openssl
+  ];
+
+  doCheck = !stdenv.isDarwin; # tests hang
+
+  # Failing test
+  postPatch = ''
+    rm tests/rep-create.testscript
+  '';
+
+  build2ConfigureFlags = [
+    "config.bin.lib=${build2.configSharedStatic enableShared enableStatic}"
+  ];
+
+  postInstall = lib.optionalString stdenv.isDarwin ''
+    install_name_tool -add_rpath '${lib.getLib build2}/lib' "''${!outputBin}/bin/bpkg"
+  '';
+
+  meta = with lib; {
+    description = "build2 package dependency manager";
+    # https://build2.org/bpkg/doc/bpkg.xhtml
+    longDescription = ''
+      The build2 package dependency manager is used to manipulate build
+      configurations, packages, and repositories.
+    '';
+    homepage = "https://build2.org/";
+    changelog = "https://git.build2.org/cgit/bpkg/tree/NEWS";
+    license = licenses.mit;
+    maintainers = with maintainers; [ r-burns ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/build2/default.nix b/nixpkgs/pkgs/development/tools/build-managers/build2/default.nix
new file mode 100644
index 000000000000..bbe1739392fe
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/build2/default.nix
@@ -0,0 +1,110 @@
+{ stdenv, lib
+, build2
+, fetchurl
+, fixDarwinDylibNames
+, libbutl
+, libpkgconf
+, buildPackages
+, enableShared ? !stdenv.hostPlatform.isStatic
+, enableStatic ? !enableShared
+}:
+let
+  configSharedStatic = enableShared: enableStatic:
+    if enableShared && enableStatic then "both"
+    else if enableShared then "shared"
+    else if enableStatic then "static"
+    else throw "neither shared nor static libraries requested";
+in
+stdenv.mkDerivation rec {
+  pname = "build2";
+  version = "0.16.0";
+
+  outputs = [ "out" "dev" "doc" "man" ];
+
+  setupHook = ./setup-hook.sh;
+
+  src = fetchurl {
+    url = "https://pkg.cppget.org/1/alpha/build2/build2-${version}.tar.gz";
+    hash = "sha256-ZK4+UACsAs51bC1dE0sIxmCiHlH3pYGPWJNsl61oSOY=";
+  };
+
+  patches = [
+    # Remove any build/host config entries which refer to nix store paths
+    ./remove-config-store-paths.patch
+    # Pick up sysdirs from NIX_LDFLAGS
+    ./nix-ldflags-sysdirs.patch
+  ];
+
+  strictDeps = true;
+  nativeBuildInputs = [
+    build2
+  ];
+  disallowedReferences = [
+    build2
+    libbutl.dev
+    libpkgconf.dev
+  ];
+  buildInputs = [
+    libbutl
+    libpkgconf
+  ];
+
+  # Build2 uses @rpath on darwin
+  # https://github.com/build2/build2/issues/166
+  # N.B. this only adjusts the install_name after all libraries are installed;
+  # packages containing multiple interdependent libraries may have
+  # LC_LOAD_DYLIB entries containing @rpath, requiring manual fixup
+  propagatedBuildInputs = lib.optionals stdenv.targetPlatform.isDarwin [
+    fixDarwinDylibNames
+
+    # Build2 needs to use lld on Darwin because it creates thin archives when it detects `llvm-ar`,
+    # which ld64 does not support.
+    (lib.getBin buildPackages.llvmPackages_16.lld)
+  ];
+
+  postPatch = ''
+    patchShebangs --build tests/bash/testscript
+  '';
+
+  build2ConfigureFlags = [
+    "config.bin.lib=${configSharedStatic enableShared enableStatic}"
+    "config.cc.poptions+=-I${lib.getDev libpkgconf}/include/pkgconf"
+    "config.build2.libpkgconf=true"
+  ];
+
+  postInstall = lib.optionalString stdenv.isDarwin ''
+    install_name_tool -add_rpath "''${!outputLib}/lib" "''${!outputBin}/bin/b"
+  '';
+
+  postFixup = ''
+    substituteInPlace $dev/nix-support/setup-hook \
+      --subst-var-by isTargetDarwin '${toString stdenv.targetPlatform.isDarwin}'
+  '';
+
+  passthru = {
+    bootstrap = build2;
+    inherit configSharedStatic;
+  };
+
+  meta = with lib; {
+    homepage = "https://www.build2.org/";
+    description = "build2 build system";
+    license = licenses.mit;
+    longDescription = ''
+      build2 is an open source (MIT), cross-platform build toolchain
+      that aims to approximate Rust Cargo's convenience for developing
+      and packaging C/C++ projects while providing more depth and
+      flexibility, especially in the build system.
+
+      build2 is a hierarchy of tools consisting of a general-purpose
+      build system, package manager (for package consumption), and
+      project manager (for project development). It is primarily aimed
+      at C/C++ projects as well as mixed-language projects involving
+      one of these languages (see bash and rust modules, for example).
+    '';
+    changelog = "https://git.build2.org/cgit/build2/tree/NEWS";
+    platforms = platforms.all;
+    maintainers = with maintainers; [ hiro98 r-burns ];
+    mainProgram = "b";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/build2/nix-ldflags-sysdirs.patch b/nixpkgs/pkgs/development/tools/build-managers/build2/nix-ldflags-sysdirs.patch
new file mode 100644
index 000000000000..4a1013f16e01
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/build2/nix-ldflags-sysdirs.patch
@@ -0,0 +1,42 @@
+diff --git a/libbuild2/cc/common.cxx b/libbuild2/cc/common.cxx
+index f848003c..0f14f9a5 100644
+--- a/libbuild2/cc/common.cxx
++++ b/libbuild2/cc/common.cxx
+@@ -966,6 +966,17 @@ namespace build2
+     void
+     msvc_extract_library_search_dirs (const strings&, dir_paths&); // msvc.cxx
+ 
++    static strings split (const string& s, const char delim) {
++      stringstream ss (s);
++      string item;
++      strings result;
++
++      while (getline (ss, item, delim)) {
++        result.push_back (item);
++      }
++      return result;
++    }
++
+     dir_paths common::
+     extract_library_search_dirs (const scope& bs) const
+     {
+@@ -987,8 +998,19 @@ namespace build2
+           msvc_extract_library_search_dirs (v, r);
+         else
+           gcc_extract_library_search_dirs (v, r);
++
+       };
+ 
++      // NIX_LDFLAGS are implicitly used when linking,
++      // so its -L flags effectively specify system dirs.
++      // However, they are only enabled when actually linking and are thus
++      // not detected by build2, so we need to manually pick them up here.
++      if (auto s = getenv ("NIX_LDFLAGS")) {
++        // TODO: do we need more robust args splitting here? e.g. shlex.split
++        auto args = split (s.value (), ' ');
++        gcc_extract_library_search_dirs (args, r);
++      }
++
+       // Note that the compiler mode options are in sys_lib_dirs.
+       //
+       if (auto l = bs[c_loptions]) extract (*l, c_loptions);
diff --git a/nixpkgs/pkgs/development/tools/build-managers/build2/remove-config-store-paths.patch b/nixpkgs/pkgs/development/tools/build-managers/build2/remove-config-store-paths.patch
new file mode 100644
index 000000000000..6eeed0eb061b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/build2/remove-config-store-paths.patch
@@ -0,0 +1,14 @@
+--- a/libbuild2/buildfile
++++ b/libbuild2/buildfile
+@@ -86,8 +86,11 @@ build2_config_lines = [strings]
+ host_config_lines = [strings]
+ 
+ for l: $regex.replace_lines(                                                   \
++  $regex.replace_lines(                                                        \
+   $config.save(),                                                              \
+   '^( *(#|(config\.(test[. ]|dist\.|install\.chroot|config\.hermetic))).*|)$', \
++  [null], return_lines),                                                       \
++  '^.*'$getenv(NIX_STORE)'/[a-z0-9]{32}-.*$',                                  \
+   [null])
+ {
+   build2_config_lines += $l
diff --git a/nixpkgs/pkgs/development/tools/build-managers/build2/setup-hook.sh b/nixpkgs/pkgs/development/tools/build-managers/build2/setup-hook.sh
new file mode 100644
index 000000000000..1259fabc0548
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/build2/setup-hook.sh
@@ -0,0 +1,91 @@
+build2ConfigurePhase() {
+    runHook preConfigure
+
+    local flagsArray=(
+        "config.c=$CC"
+        "config.cxx=$CXX"
+        "config.cc.coptions+=-O2"
+        "config.cc.poptions+=-DNDEBUG"
+        "config.install.root=$prefix"
+        "config.install.bin=${!outputBin}/bin"
+        "config.install.doc=${!outputDoc}/share/doc/${shareDocName}"
+        "config.install.exec_root=${!outputBin}"
+        "config.install.include=${!outputInclude}/include"
+        "config.install.lib=${!outputLib}/lib"
+        "config.install.libexec=${!outputLib}/libexec"
+        "config.install.man=${!outputDoc}/share/man"
+        "config.install.sbin=${!outputBin}/sbin"
+        "config.install.bin.mode=755"
+        $build2ConfigureFlags "${build2ConfigureFlagsArray[@]}"
+    )
+
+    if [ -n "@isTargetDarwin@" ]; then
+        flagsArray+=("config.bin.ld=ld64-lld")
+        flagsArray+=("config.cc.loptions+=-fuse-ld=lld")
+        flagsArray+=("config.cc.loptions+=-headerpad_max_install_names")
+    fi
+
+    echo 'configure flags' "${flagsArray[@]}"
+
+    b configure "${flagsArray[@]}"
+
+    runHook postConfigure
+}
+
+build2BuildPhase() {
+    runHook preBuild
+
+    local flagsArray=(
+        $build2BuildFlags "${build2BuildFlagsArray[@]}"
+    )
+
+    echo 'build flags' "${flagsArray[@]}"
+    b "${flagsArray[@]}"
+
+    runHook postBuild
+}
+
+build2CheckPhase() {
+    runHook preCheck
+
+    local flagsArray=(
+        $build2CheckFlags "${build2CheckFlags[@]}"
+    )
+
+    echo 'check flags' "${flagsArray[@]}"
+
+    b test ${build2Dir:-.} "${flagsArray[@]}"
+
+    runHook postCheck
+}
+
+build2InstallPhase() {
+    runHook preInstall
+
+    local flagsArray=(
+        $build2InstallFlags "${build2InstallFlagsArray[@]}"
+        ${installTargets:-}
+    )
+
+    echo 'install flags' "${flagsArray[@]}"
+    b install "${flagsArray[@]}"
+
+    runHook postInstall
+}
+
+if [ -z "${dontUseBuild2Configure-}" -a -z "${configurePhase-}" ]; then
+    setOutputFlags=
+    configurePhase=build2ConfigurePhase
+fi
+
+if [ -z "${dontUseBuild2Build-}" -a -z "${buildPhase-}" ]; then
+    buildPhase=build2BuildPhase
+fi
+
+if [ -z "${dontUseBuild2Check-}" -a -z "${checkPhase-}" ]; then
+    checkPhase=build2CheckPhase
+fi
+
+if [ -z "${dontUseBuild2Install-}" -a -z "${installPhase-}" ]; then
+    installPhase=build2InstallPhase
+fi
diff --git a/nixpkgs/pkgs/development/tools/build-managers/colormake/default.nix b/nixpkgs/pkgs/development/tools/build-managers/colormake/default.nix
new file mode 100644
index 000000000000..251268a449d4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/colormake/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub, perl }:
+
+stdenv.mkDerivation {
+  pname = "colormake";
+  version = "2.1.0";
+
+  buildInputs = [ perl ];
+
+  src = fetchFromGitHub {
+    owner = "pagekite";
+    repo = "Colormake";
+    rev = "66544f40d";
+    sha256 = "8e714c5540305d169989d9387dbac47b8b9fb2cfb424af7bcd412bfe684dc6d7";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp -fa colormake.pl colormake colormake-short clmake clmake-short $out/bin
+  '';
+
+  meta = with lib; {
+    description = "Simple wrapper around make to colorize the output";
+    homepage = "https://bre.klaki.net/programs/colormake/";
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ bhipple ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/conan/default.nix b/nixpkgs/pkgs/development/tools/build-managers/conan/default.nix
new file mode 100644
index 000000000000..7226d4e3340a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/conan/default.nix
@@ -0,0 +1,115 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, git
+, pkg-config
+, xcbuild
+, python3
+, zlib
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "conan";
+  version = "2.0.17";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "conan-io";
+    repo = "conan";
+    rev = "refs/tags/${version}";
+    hash = "sha256-liCeGe0WBW+tOjW81cqrFUiOEWYhlqsBVgns6SxjPNM=";
+  };
+
+  nativeBuildInputs = with python3.pkgs; [
+    pythonRelaxDepsHook
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    bottle
+    colorama
+    python-dateutil
+    distro
+    fasteners
+    jinja2
+    patch-ng
+    pluginbase
+    pygments
+    pyjwt
+    pylint # Not in `requirements.txt` but used in hooks, see https://github.com/conan-io/conan/pull/6152
+    pyyaml
+    requests
+    tqdm
+    urllib3
+  ] ++ lib.optionals stdenv.isDarwin [
+    idna
+    cryptography
+    pyopenssl
+  ];
+
+  nativeCheckInputs = [
+    git
+    pkg-config
+    zlib
+  ] ++ lib.optionals (stdenv.isDarwin) [
+    xcbuild.xcrun
+  ] ++ (with python3.pkgs; [
+    mock
+    parameterized
+    pytest-xdist
+    pytestCheckHook
+    webtest
+  ]);
+
+  __darwinAllowLocalNetworking = true;
+
+  pythonImportsCheck = [
+    "conan"
+  ];
+
+  pytestFlagsArray = [
+    "-n"
+    "$NIX_BUILD_CORES"
+  ];
+
+  disabledTests = [
+    # Tests require network access
+    "TestFTP"
+  ] ++ lib.optionals stdenv.isDarwin [
+    # Rejects paths containing nix
+    "test_conditional_os"
+    # Requires Apple Clang
+    "test_detect_default_compilers"
+    "test_detect_default_in_mac_os_using_gcc_as_default"
+    # Incompatible with darwin.xattr and xcbuild from nixpkgs
+    "test_dot_files"
+    "test_xcrun"
+    "test_xcrun_in_required_by_tool_requires"
+    "test_xcrun_in_tool_requires"
+  ];
+
+  disabledTestPaths = [
+    # Requires cmake, meson, autotools, apt-get, etc.
+    "conans/test/functional/command/new_test.py"
+    "conans/test/functional/command/test_install_deploy.py"
+    "conans/test/functional/graph/test_transitive_build_scripts.py"
+    "conans/test/functional/layout/test_editable_cmake_components.py"
+    "conans/test/functional/layout/test_editable_cmake.py"
+    "conans/test/functional/layout/test_in_subfolder.py"
+    "conans/test/functional/layout/test_source_folder.py"
+    "conans/test/functional/toolchains/"
+    "conans/test/functional/tools_versions_test.py"
+    "conans/test/functional/tools/scm/test_git.py"
+    "conans/test/functional/tools/system/package_manager_test.py"
+    "conans/test/functional/util/test_cmd_args_to_string.py"
+    "conans/test/integration/command_v2/list_test.py"
+    "conans/test/unittests/tools/env/test_env_files.py"
+  ];
+
+  meta = with lib; {
+    description = "Decentralized and portable C/C++ package manager";
+    homepage = "https://conan.io";
+    changelog = "https://github.com/conan-io/conan/releases/tag/${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ HaoZeke ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/corrosion/default.nix b/nixpkgs/pkgs/development/tools/build-managers/corrosion/default.nix
new file mode 100644
index 000000000000..22222a8f88cf
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/corrosion/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cargo
+, cmake
+, rustPlatform
+, rustc
+, libiconv
+}:
+
+stdenv.mkDerivation rec {
+  pname = "corrosion";
+  version = "0.4.7";
+
+  src = fetchFromGitHub {
+    owner = "corrosion-rs";
+    repo = "corrosion";
+    rev = "v${version}";
+    hash = "sha256-6jjcBBc1gtMG2sYppOIRa/tYjmUgW4kFxAuoGj7Tpgw=";
+  };
+
+  cargoRoot = "generator";
+
+  cargoDeps = rustPlatform.fetchCargoTarball {
+    inherit src;
+    sourceRoot = "${src.name}/${cargoRoot}";
+    name = "${pname}-${version}";
+    hash = "sha256-M5Wnx+SfVvdhC5bHVZa0Di2up3Qt5z1jog8yxIKvG/Y=";
+  };
+
+  buildInputs = lib.optional stdenv.isDarwin libiconv;
+
+  nativeBuildInputs = [
+    cmake
+    rustPlatform.cargoSetupHook
+    cargo
+    rustc
+  ];
+
+  meta = with lib; {
+    description = "Tool for integrating Rust into an existing CMake project";
+    homepage = "https://github.com/corrosion-rs/corrosion";
+    changelog = "https://github.com/corrosion-rs/corrosion/blob/${src.rev}/RELEASES.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dotlambda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/drake/Gemfile b/nixpkgs/pkgs/development/tools/build-managers/drake/Gemfile
new file mode 100644
index 000000000000..ddb13a65c165
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/drake/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'drake'
diff --git a/nixpkgs/pkgs/development/tools/build-managers/drake/Gemfile.lock b/nixpkgs/pkgs/development/tools/build-managers/drake/Gemfile.lock
new file mode 100644
index 000000000000..466133010e04
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/drake/Gemfile.lock
@@ -0,0 +1,15 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    comp_tree (1.1.3)
+    drake (0.9.2.0.3.1)
+      comp_tree (>= 1.1.3)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  drake
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/development/tools/build-managers/drake/default.nix b/nixpkgs/pkgs/development/tools/build-managers/drake/default.nix
new file mode 100644
index 000000000000..2f753c82521e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/drake/default.nix
@@ -0,0 +1,17 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "drake";
+  gemdir = ./.;
+  exes = [ "drake" ];
+
+  passthru.updateScript = bundlerUpdateScript "drake";
+
+  meta = with lib; {
+    description = "A branch of Rake supporting automatic parallelizing of tasks";
+    homepage = "http://quix.github.io/rake/";
+    maintainers = with maintainers; [ romildo manveru nicknovitski ];
+    license = licenses.mit;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/drake/gemset.nix b/nixpkgs/pkgs/development/tools/build-managers/drake/gemset.nix
new file mode 100644
index 000000000000..09b3bc7ec061
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/drake/gemset.nix
@@ -0,0 +1,23 @@
+{
+  comp_tree = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0dj9lkfxcczn67l1j12dcxswrfxxd1zgxa344zk6vqs2gwwhy9m9";
+      type = "gem";
+    };
+    version = "1.1.3";
+  };
+  drake = {
+    dependencies = ["comp_tree"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09gkmdshwdmdnkdxi03dv4rk1dip0wdv6dx14wscrmi0jyk86yag";
+      type = "gem";
+    };
+    version = "0.9.2.0.3.1";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/dub/default.nix b/nixpkgs/pkgs/development/tools/build-managers/dub/default.nix
new file mode 100644
index 000000000000..8c9261628bfe
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/dub/default.nix
@@ -0,0 +1,157 @@
+{ lib, stdenv, fetchFromGitHub, curl, libevent, rsync, ldc, dcompiler ? ldc }:
+
+assert dcompiler != null;
+
+stdenv.mkDerivation rec {
+  pname = "dub";
+  version = "1.33.0";
+
+  enableParallelBuilding = true;
+
+  src = fetchFromGitHub {
+    owner = "dlang";
+    repo = "dub";
+    rev = "v${version}";
+    sha256 = "sha256-4Mha7WF6cg3DIccfpvOnheuvgfziv/7wo8iFsPXO4yY=";
+  };
+
+  dubvar = "\\$DUB";
+  postPatch = ''
+    patchShebangs test
+
+
+    # Can be removed with https://github.com/dlang/dub/pull/1368
+    substituteInPlace test/fetchzip.sh \
+        --replace "dub remove" "\"${dubvar}\" remove"
+  '';
+
+  nativeBuildInputs = [ dcompiler libevent rsync ];
+  buildInputs = [ curl ];
+
+  buildPhase = ''
+    for dc_ in dmd ldmd2 gdmd; do
+      echo "... check for D compiler $dc_ ..."
+      dc=$(type -P $dc_ || echo "")
+      if [ ! "$dc" == "" ]; then
+        break
+      fi
+    done
+    if [ "$dc" == "" ]; then
+      exit "Error: could not find D compiler"
+    fi
+    echo "$dc_ found and used as D compiler to build $pname"
+    $dc ./build.d
+    ./build
+  '';
+
+  doCheck = !stdenv.isDarwin;
+
+  checkPhase = ''
+    export DUB=$NIX_BUILD_TOP/source/bin/dub
+    export PATH=$PATH:$NIX_BUILD_TOP/source/bin/
+    export DC=${dcompiler.out}/bin/${if dcompiler.pname=="ldc" then "ldc2" else dcompiler.pname}
+    echo "DC out --> $DC"
+    export HOME=$TMP
+
+    rm -rf test/issue502-root-import
+    rm test/issue674-concurrent-dub.sh
+    rm test/issue672-upgrade-optional.sh
+    rm test/issue990-download-optional-selected.sh
+    rm test/issue877-auto-fetch-package-on-run.sh
+    rm test/issue1037-better-dependency-messages.sh
+    rm test/issue1416-maven-repo-pkg-supplier.sh
+    rm test/issue1180-local-cache-broken.sh
+    rm test/issue1574-addcommand.sh
+    rm test/issue1524-maven-upgrade-dependency-tree.sh
+    rm test/issue1773-lint.sh
+
+    rm test/ddox.sh
+    rm test/fetchzip.sh
+    rm test/feat663-search.sh
+    rm -rf test/git-dependency
+    rm test/interactive-remove.sh
+    rm test/timeout.sh
+    rm test/version-spec.sh
+    rm test/0-init-multi.sh
+    rm test/0-init-multi-json.sh
+    rm test/4-describe-data-1-list.sh
+    rm test/4-describe-data-3-zero-delim.sh
+    rm test/4-describe-import-paths.sh
+    rm test/4-describe-string-import-paths.sh
+    rm test/4-describe-json.sh
+    rm test/5-convert-stdout.sh
+    rm test/issue1003-check-empty-ld-flags.sh
+    rm test/issue103-single-file-package.sh
+    rm test/issue1040-run-with-ver.sh
+    rm test/issue1091-bogus-rebuild.sh
+    rm test/issue1194-warn-wrong-subconfig.sh
+    rm test/issue1277.sh
+    rm test/issue1372-ignore-files-in-hidden-dirs.sh
+    rm test/issue1447-build-settings-vars.sh
+    rm test/issue1531-toolchain-requirements.sh
+    rm test/issue346-redundant-flags.sh
+    rm test/issue361-optional-deps.sh
+    rm test/issue564-invalid-upgrade-dependency.sh
+    rm test/issue586-subpack-dep.sh
+    rm test/issue616-describe-vs-generate-commands.sh
+    rm test/issue686-multiple-march.sh
+    rm test/issue813-fixed-dependency.sh
+    rm test/issue813-pure-sub-dependency.sh
+    rm test/issue820-extra-fields-after-convert.sh
+    rm test/issue923-subpackage-deps.sh
+    rm test/single-file-sdl-default-name.sh
+    rm test/subpackage-common-with-sourcefile-globbing.sh
+    rm test/issue934-path-dep.sh
+    rm -r test/issue2258-dynLib-exe-dep # requires files below
+    rm -r test/1-dynLib-simple
+    rm -r test/1-exec-simple-package-json
+    rm -r test/1-exec-simple
+    rm -r test/1-staticLib-simple
+    rm -r test/2-dynLib-dep
+    rm -r test/2-staticLib-dep
+    rm -r test/2-dynLib-with-staticLib-dep
+    rm -r test/2-sourceLib-dep/
+    rm -r test/3-copyFiles
+    rm -r test/custom-source-main-bug487
+    rm -r test/custom-unittest
+    rm -r test/issue1262-version-inheritance-diamond
+    rm -r test/issue1003-check-empty-ld-flags
+    rm -r test/ignore-hidden-1
+    rm -r test/ignore-hidden-2
+    rm -r test/issue1427-betterC
+    rm -r test/issue130-unicode-*
+    rm -r test/issue1262-version-inheritance
+    rm -r test/issue1372-ignore-files-in-hidden-dirs
+    rm -r test/issue1350-transitive-none-deps
+    rm -r test/issue1775
+    rm -r test/issue1447-build-settings-vars
+    rm -r test/issue1408-inherit-linker-files
+    rm -r test/issue1551-var-escaping
+    rm -r test/issue754-path-selection-fail
+    rm -r test/issue1788-incomplete-string-import-override
+    rm -r test/subpackage-ref
+    rm -r test/issue777-bogus-path-dependency
+    rm -r test/issue959-path-based-subpack-dep
+    rm -r test/issue97-targettype-none-nodeps
+    rm -r test/issue97-targettype-none-onerecipe
+    rm -r test/path-subpackage-ref
+    rm -r test/sdl-package-simple
+    rm -r test/dpath-variable # requires execution of dpath-variable.sh
+    rm -r test/use-c-sources
+
+    ./test/run-unittest.sh
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp bin/dub $out/bin
+  '';
+
+  meta = with lib; {
+    description = "Package and build manager for D applications and libraries";
+    homepage = "https://code.dlang.org/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ThomasMader jtbx ];
+    platforms = [ "x86_64-linux" "i686-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/ekam/default.nix b/nixpkgs/pkgs/development/tools/build-managers/ekam/default.nix
new file mode 100644
index 000000000000..9247a2b21302
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/ekam/default.nix
@@ -0,0 +1,67 @@
+{ lib, stdenv, fetchFromGitHub, capnproto }:
+
+stdenv.mkDerivation {
+  pname = "ekam";
+  version = "unstable-2021-09-18";
+
+  src = fetchFromGitHub {
+    owner = "capnproto";
+    repo = "ekam";
+    rev = "77c338f8bd8f4a2ce1e6199b2a52363f1fccf388";
+    sha256 = "0q4bizlb1ykzdp4ca0kld6xm5ml9q866xrj3ijffcnyiyqr51qr8";
+  };
+
+  # The capnproto *source* is required to build ekam.
+  # https://github.com/capnproto/ekam/issues/5
+  #
+  # Specifically, the git version of the source is required, as
+  # capnproto release tarballs do not include ekam rule files.
+  postUnpack = ''
+    mkdir -p $sourceRoot/deps
+    cp -r ${capnproto.src} $sourceRoot/deps/capnproto
+  '';
+
+  postPatch = ''
+    # A single capnproto test file expects to be able to write to
+    # /var/tmp.  We change it to use /tmp because /var is not available
+    # under nix-build.
+    substituteInPlace deps/capnproto/c++/src/kj/filesystem-disk-test.c++ \
+      --replace "/var/tmp" "/tmp"
+  '';
+
+  # NIX_ENFORCE_PURITY prevents ld from linking against anything outside
+  # of the nix store -- but ekam builds capnp locally and links against it,
+  # so that causes the build to fail. So, we turn this off.
+  #
+  # See: https://nixos.wiki/wiki/Development_environment_with_nix-shell#Troubleshooting
+  preBuild = ''
+    unset NIX_ENFORCE_PURITY
+  '';
+
+  makeFlags = [
+    "PARALLEL=$(NIX_BUILD_CORES)"
+  ];
+
+  installPhase = ''
+    mkdir $out
+    cp -r bin $out
+
+    # Remove capnproto tools; there's a separate nix package for that.
+    rm $out/bin/capnp*
+    # Don't distribute ekam-bootstrap, which is not needed outside this build.
+    rm $out/bin/ekam-bootstrap
+  '';
+
+  meta = with lib; {
+    description = ''Build system ("make" in reverse)'';
+    longDescription = ''
+      Ekam ("make" spelled backwards) is a build system which automatically
+      figures out what to build and how to build it purely based on the
+      source code. No separate "makefile" is needed.
+    '';
+    homepage = "https://github.com/capnproto/ekam";
+    license = licenses.asl20;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.garrison ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/fac/default.nix b/nixpkgs/pkgs/development/tools/build-managers/fac/default.nix
new file mode 100644
index 000000000000..c5253edb53e9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/fac/default.nix
@@ -0,0 +1,53 @@
+{ lib, stdenv, rustPlatform, fetchCrate, git, CoreServices }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "fac-build";
+  version = "0.5.4";
+
+  src = fetchCrate {
+    inherit version;
+    crateName = "fac";
+    sha256 = "sha256-+JJVuKUdnjJoQJ4a2EE0O6jZdVoFxPwbPgfD2LfiDPI=";
+  };
+
+
+  buildInputs = lib.optionals stdenv.isDarwin [ CoreServices ];
+  cargoSha256 = "sha256-XT4FQVE+buORuZAFZK5Qnf/Fl3QSvw4SHUuCzWhxUdk=";
+
+  # fac includes a unit test called ls_files_works which assumes it's
+  # running in a git repo. Nix's sandbox runs cargo build outside git,
+  # so this test won't work.
+  checkFlagsArray = [ "--skip=ls_files_works" ];
+
+  # fac calls git at runtime, expecting it to be in the PATH,
+  # so we need to patch it to call git by absolute path instead.
+  postPatch = ''
+    substituteInPlace src/git.rs \
+        --replace 'std::process::Command::new("git")' \
+        'std::process::Command::new("${git}/bin/git")'
+    substituteInPlace tests/lib.rs \
+        --replace 'std::process::Command::new("git")' \
+        'std::process::Command::new("${git}/bin/git")'
+  '';
+
+  meta = with lib; {
+    broken = (stdenv.isLinux && stdenv.isAarch64);
+    description = ''
+      A build system that uses ptrace to handle dependencies automatically
+    '';
+    longDescription = ''
+      Fac is a general-purpose build system inspired by make that utilizes
+      ptrace to ensure that all dependences are enumerated and that all
+      source files are added to a (git) repo. An important feature of fac
+      is that it automatically handles dependencies, rather than either
+      complaining about them or giving an incorrect build. Currently, fac
+      only runs on linux systems, but on those systems it is incredibly
+      easy to use!
+    '';
+    homepage = "https://physics.oregonstate.edu/~roundyd/fac";
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ dpercy ];
+    mainProgram = "fac";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/gn/default.nix b/nixpkgs/pkgs/development/tools/build-managers/gn/default.nix
new file mode 100644
index 000000000000..508a821d7495
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/gn/default.nix
@@ -0,0 +1,10 @@
+{ callPackage, ... } @ args:
+
+callPackage ./generic.nix args {
+  # Note: Please use the recommended version for Chromium, e.g.:
+  # https://git.archlinux.org/svntogit/packages.git/tree/trunk/chromium-gn-version.sh?h=packages/gn
+  rev = "fd3d768bcfd44a8d9639fe278581bd9851d0ce3a";
+  revNum = "1718"; # git describe HEAD --match initial-commit | cut -d- -f3
+  version = "2020-03-09";
+  sha256 = "1asc14y8by7qcn10vbk467hvx93s30pif8r0brissl0sihsaqazr";
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/gn/generic.nix b/nixpkgs/pkgs/development/tools/build-managers/gn/generic.nix
new file mode 100644
index 000000000000..bb72e4bb20b4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/gn/generic.nix
@@ -0,0 +1,61 @@
+{ stdenv, lib, fetchgit, darwin, writeText
+, ninja, python3
+, disable-warnings-if-gcc13
+, ...
+}:
+
+{ rev, revNum, version, sha256 }:
+
+let
+  revShort = builtins.substring 0 7 rev;
+  lastCommitPosition = writeText "last_commit_position.h" ''
+    #ifndef OUT_LAST_COMMIT_POSITION_H_
+    #define OUT_LAST_COMMIT_POSITION_H_
+
+    #define LAST_COMMIT_POSITION_NUM ${revNum}
+    #define LAST_COMMIT_POSITION "${revNum} (${revShort})"
+
+    #endif  // OUT_LAST_COMMIT_POSITION_H_
+  '';
+
+in disable-warnings-if-gcc13 (stdenv.mkDerivation {
+  pname = "gn-unstable";
+  inherit version;
+
+  src = fetchgit {
+    # Note: The TAR-Archives (+archive/${rev}.tar.gz) are not deterministic!
+    url = "https://gn.googlesource.com/gn";
+    inherit rev sha256;
+  };
+
+  nativeBuildInputs = [ ninja python3 ];
+  buildInputs = lib.optionals stdenv.isDarwin (with darwin; with apple_sdk.frameworks; [
+    libobjc
+    cctools
+
+    # frameworks
+    ApplicationServices
+    Foundation
+    AppKit
+  ]);
+
+  buildPhase = ''
+    python build/gen.py --no-last-commit-position
+    ln -s ${lastCommitPosition} out/last_commit_position.h
+    ninja -j $NIX_BUILD_CORES -C out gn
+  '';
+
+  installPhase = ''
+    install -vD out/gn "$out/bin/gn"
+  '';
+
+  setupHook = ./setup-hook.sh;
+
+  meta = with lib; {
+    description = "A meta-build system that generates build files for Ninja";
+    homepage = "https://gn.googlesource.com/gn";
+    license = licenses.bsd3;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ stesie matthewbauer primeos ];
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/build-managers/gn/rev1924.nix b/nixpkgs/pkgs/development/tools/build-managers/gn/rev1924.nix
new file mode 100644
index 000000000000..1b17328f2e09
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/gn/rev1924.nix
@@ -0,0 +1,8 @@
+{ callPackage, ... } @ args:
+
+callPackage ./generic.nix args {
+  rev = "24e2f7df92641de0351a96096fb2c490b2436bb8";
+  revNum = "1924"; # git describe HEAD --match initial-commit | cut -d- -f3
+  version = "2021-08-08";
+  sha256 = "1lwkyhfhw0zd7daqz466n7x5cddf0danr799h4jg3s0yvd4galjl";
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/gn/setup-hook.sh b/nixpkgs/pkgs/development/tools/build-managers/gn/setup-hook.sh
new file mode 100644
index 000000000000..850f18948cad
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/gn/setup-hook.sh
@@ -0,0 +1,14 @@
+gnConfigurePhase() {
+    runHook preConfigure
+
+    echo "gn flags: $gnFlags ${gnFlagsArray[@]}"
+
+    gn gen out/Release --args="$gnFlags ${gnFlagsArray[@]}"
+    cd out/Release/
+
+    runHook postConfigure
+}
+
+if [ -z "${dontUseGnConfigure-}" -a -z "${configurePhase-}" ]; then
+    configurePhase=gnConfigurePhase
+fi
diff --git a/nixpkgs/pkgs/development/tools/build-managers/gnumake/0001-No-impure-bin-sh.patch b/nixpkgs/pkgs/development/tools/build-managers/gnumake/0001-No-impure-bin-sh.patch
new file mode 100644
index 000000000000..58ee2d6fe09b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/gnumake/0001-No-impure-bin-sh.patch
@@ -0,0 +1,35 @@
+From e00a5257a6ca5fedbf68b09eee7df3502971a057 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?J=C3=B6rg=20Thalheim?= <joerg@thalheim.io>
+Date: Sat, 24 Apr 2021 10:11:40 +0200
+Subject: [PATCH 1/2] No impure bin sh
+
+default_shell is used to populuate default shell used to execute jobs.
+Unless SHELL is set to a different value this would be /bin/sh.
+Our stdenv provides sh in form of bash anyway. Having this value not
+hard-coded has some advantages:
+
+- It would ensure that on all systems it uses sh from its PATH rather
+  than /bin/sh, which helps as different systems might have different
+  shells there (bash vs. dash)
+- In the past I had issues with LD_PRELOAD with BEAR, where /bin/sh
+  used a different glibc than BEAR which came from my development shell.
+---
+ src/job.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/job.c b/src/job.c
+index ae1f18b..6b4ddb3 100644
+--- a/src/job.c
++++ b/src/job.c
+@@ -77,7 +77,7 @@ char * vms_strsignal (int status);
+ 
+ #else
+ 
+-const char *default_shell = "/bin/sh";
++const char *default_shell = "sh";
+ int batch_mode_shell = 0;
+ 
+ #endif
+-- 
+2.31.1
+
diff --git a/nixpkgs/pkgs/development/tools/build-managers/gnumake/0002-remove-impure-dirs.patch b/nixpkgs/pkgs/development/tools/build-managers/gnumake/0002-remove-impure-dirs.patch
new file mode 100644
index 000000000000..e62aee7d9993
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/gnumake/0002-remove-impure-dirs.patch
@@ -0,0 +1,40 @@
+From 795d63d3c8b5c0dbb7e544954f75507b371b7228 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?J=C3=B6rg=20Thalheim?= <joerg@thalheim.io>
+Date: Sat, 24 Apr 2021 10:20:16 +0200
+Subject: [PATCH 2/2] remove impure dirs
+
+---
+ src/read.c   | 3 ---
+ src/remake.c | 2 --
+ 2 files changed, 5 deletions(-)
+
+diff --git a/src/read.c b/src/read.c
+index fa197fb..defacfb 100644
+--- a/src/read.c
++++ b/src/read.c
+@@ -109,9 +109,6 @@ static const char *default_include_directories[] =
+ #endif
+     INCLUDEDIR,
+ #ifndef _AMIGA
+-    "/usr/gnu/include",
+-    "/usr/local/include",
+-    "/usr/include",
+ #endif
+     0
+   };
+diff --git a/src/remake.c b/src/remake.c
+index fb237c5..94bff7d 100644
+--- a/src/remake.c
++++ b/src/remake.c
+@@ -1601,8 +1601,6 @@ library_search (const char *lib, FILE_TIMESTAMP *mtime_ptr)
+   static const char *dirs[] =
+     {
+ #ifndef _AMIGA
+-      "/lib",
+-      "/usr/lib",
+ #endif
+ #if defined(WINDOWS32) && !defined(LIBDIR)
+ /*
+-- 
+2.31.1
+
diff --git a/nixpkgs/pkgs/development/tools/build-managers/gnumake/4.2/default.nix b/nixpkgs/pkgs/development/tools/build-managers/gnumake/4.2/default.nix
new file mode 100644
index 000000000000..21e9abd04f20
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/gnumake/4.2/default.nix
@@ -0,0 +1,61 @@
+{ lib, stdenv, fetchurl, guileSupport ? false, pkg-config ? null , guile ? null }:
+
+assert guileSupport -> ( pkg-config != null && guile != null );
+
+stdenv.mkDerivation rec {
+  pname = "gnumake";
+  version = "4.2.1";
+
+  src = fetchurl {
+    url = "mirror://gnu/make/make-${version}.tar.bz2";
+    sha256 = "12f5zzyq2w56g95nni65hc0g5p7154033y2f3qmjvd016szn5qnn";
+  };
+
+  patchFlags = [ "-p0" ];
+  patches = [
+    # Purity: don't look for library dependencies (of the form `-lfoo') in /lib
+    # and /usr/lib. It's a stupid feature anyway. Likewise, when searching for
+    # included Makefiles, don't look in /usr/include and friends.
+    ./impure-dirs.patch
+    ./pselect.patch
+    # Fix support for glibc 2.27's glob, inspired by http://www.linuxfromscratch.org/lfs/view/8.2/chapter05/make.html
+    ./glibc-2.27-glob.patch
+    ./glibc-2.33-glob.patch
+  ];
+
+  nativeBuildInputs = lib.optionals guileSupport [ pkg-config ];
+  buildInputs = lib.optionals guileSupport [ guile ];
+
+  configureFlags = lib.optional guileSupport "--with-guile"
+
+    # Make uses this test to decide whether it should keep track of
+    # subseconds. Apple made this possible with APFS and macOS 10.13.
+    # However, we still support macOS 10.11 and 10.12. Binaries built
+    # in Nixpkgs will be unable to use futimens to set mtime less than
+    # a second. So, tell Make to ignore nanoseconds in mtime here by
+    # overriding the autoconf test for the struct.
+    # See https://github.com/NixOS/nixpkgs/issues/51221 for discussion.
+    ++ lib.optional stdenv.isDarwin "ac_cv_struct_st_mtim_nsec=no";
+
+  outputs = [ "out" "man" "info" ];
+
+  meta = with lib; {
+    description = "A tool to control the generation of non-source files from sources";
+    longDescription = ''
+      Make is a tool which controls the generation of executables and
+      other non-source files of a program from the program's source files.
+
+      Make gets its knowledge of how to build your program from a file
+      called the makefile, which lists each of the non-source files and
+      how to compute it from other files. When you write a program, you
+      should write a makefile for it, so that it is possible to use Make
+      to build and install the program.
+    '';
+    homepage = "https://www.gnu.org/software/make/";
+
+    license = licenses.gpl3Plus;
+    maintainers = [ maintainers.vrthra ];
+    mainProgram = "make";
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/gnumake/4.2/glibc-2.27-glob.patch b/nixpkgs/pkgs/development/tools/build-managers/gnumake/4.2/glibc-2.27-glob.patch
new file mode 100644
index 000000000000..186212d0d298
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/gnumake/4.2/glibc-2.27-glob.patch
@@ -0,0 +1,32 @@
+diff -Naur glob/glob.c glob/glob.c
+--- glob/glob.c	2013-10-20 13:14:38.000000000 -0400
++++ glob/glob.c	2018-03-16 14:32:38.483496170 -0400
+@@ -208,28 +208,9 @@
+ #endif /* __GNU_LIBRARY__ || __DJGPP__ */
+ 
+ 
+-#if !defined __alloca && !defined __GNU_LIBRARY__
+-
+-# ifdef	__GNUC__
+-#  undef alloca
+-#  define alloca(n)	__builtin_alloca (n)
+-# else	/* Not GCC.  */
+-#  ifdef HAVE_ALLOCA_H
+ #   include <alloca.h>
+-#  else	/* Not HAVE_ALLOCA_H.  */
+-#   ifndef _AIX
+-#    ifdef WINDOWS32
+-#     include <malloc.h>
+-#    else
+-extern char *alloca ();
+-#    endif /* WINDOWS32 */
+-#   endif /* Not _AIX.  */
+-#  endif /* sparc or HAVE_ALLOCA_H.  */
+-# endif	/* GCC.  */
+-
+ # define __alloca	alloca
+ 
+-#endif
+ 
+ #ifndef __GNU_LIBRARY__
+ # define __stat stat
diff --git a/nixpkgs/pkgs/development/tools/build-managers/gnumake/4.2/glibc-2.33-glob.patch b/nixpkgs/pkgs/development/tools/build-managers/gnumake/4.2/glibc-2.33-glob.patch
new file mode 100644
index 000000000000..d3e424d1c499
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/gnumake/4.2/glibc-2.33-glob.patch
@@ -0,0 +1,17 @@
+diff --git glob/glob.c glob/glob.c
+index 924f2b3..d4ef0c5 100644
+--- glob/glob.c
++++ glob/glob.c
+@@ -212,8 +212,8 @@ my_realloc (p, n)
+ # define __alloca	alloca
+ 
+ 
+-#ifndef __GNU_LIBRARY__
+ # define __stat stat
++#ifndef __GNU_LIBRARY__
+ # ifdef STAT_MACROS_BROKEN
+ #  undef S_ISDIR
+ # endif
+-- 
+2.31.1
+
diff --git a/nixpkgs/pkgs/development/tools/build-managers/gnumake/4.2/impure-dirs.patch b/nixpkgs/pkgs/development/tools/build-managers/gnumake/4.2/impure-dirs.patch
new file mode 100644
index 000000000000..f6646f1d0126
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/gnumake/4.2/impure-dirs.patch
@@ -0,0 +1,34 @@
+diff -rc read.c read.c
+*** read.c	2006-03-17 15:24:20.000000000 +0100
+--- read.c	2007-05-24 17:16:31.000000000 +0200
+***************
+*** 99,107 ****
+--- 99,109 ----
+  #endif
+      INCLUDEDIR,
+  #ifndef _AMIGA
++ #if 0    
+      "/usr/gnu/include",
+      "/usr/local/include",
+      "/usr/include",
++ #endif    
+  #endif
+      0
+    };
+diff -rc reremake.c
+*** remake.c	2006-03-20 03:36:37.000000000 +0100
+--- remake.c	2007-05-24 17:06:54.000000000 +0200
+***************
+*** 1452,1460 ****
+--- 1452,1462 ----
+    static char *dirs[] =
+      {
+  #ifndef _AMIGA
++ #if 0
+        "/lib",
+        "/usr/lib",
+  #endif
++ #endif
+  #if defined(WINDOWS32) && !defined(LIBDIR)
+  /*
+   * This is completely up to the user at product install time. Just define
diff --git a/nixpkgs/pkgs/development/tools/build-managers/gnumake/4.2/pselect.patch b/nixpkgs/pkgs/development/tools/build-managers/gnumake/4.2/pselect.patch
new file mode 100644
index 000000000000..5a03acb2f7ca
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/gnumake/4.2/pselect.patch
@@ -0,0 +1,170 @@
+From b552b05251980f693c729e251f93f5225b400714 Mon Sep 17 00:00:00 2001
+From: Paul Smith <psmith@gnu.org>
+Date: Sat, 3 Jun 2017 16:20:51 -0400
+Subject: [SV 51159] Use a non-blocking read with pselect to avoid hangs.
+
+* posixos.c (set_blocking): Set blocking on a file descriptor.
+(jobserver_setup): Set non-blocking on the jobserver read side.
+(jobserver_parse_auth): Ditto.
+(jobserver_acquire_all): Set blocking to avoid a busy-wait loop.
+(jobserver_acquire): If the non-blocking read() returns without
+taking a token then try again.
+---
+ posixos.c | 97 ++++++++++++++++++++++++++++++++++++++++++++++-----------------
+ 1 file changed, 71 insertions(+), 26 deletions(-)
+
+diff --git posixos.c posixos.c
+index e642d7f..dbafa51 100644
+--- posixos.c
++++ posixos.c
+@@ -62,6 +62,24 @@ make_job_rfd (void)
+ #endif
+ }
+ 
++static void
++set_blocking (int fd, int blocking)
++{
++  // If we're not using pselect() don't change the blocking
++#ifdef HAVE_PSELECT
++  int flags;
++  EINTRLOOP (flags, fcntl (fd, F_GETFL));
++  if (flags >= 0)
++    {
++      int r;
++      flags = blocking ? (flags & ~O_NONBLOCK) : (flags | O_NONBLOCK);
++      EINTRLOOP (r, fcntl (fd, F_SETFL, flags));
++      if (r < 0)
++        pfatal_with_name ("fcntl(O_NONBLOCK)");
++    }
++#endif
++}
++
+ unsigned int
+ jobserver_setup (int slots)
+ {
+@@ -86,6 +104,9 @@ jobserver_setup (int slots)
+         pfatal_with_name (_("init jobserver pipe"));
+     }
+ 
++  /* When using pselect() we want the read to be non-blocking.  */
++  set_blocking (job_fds[0], 0);
++
+   return 1;
+ }
+ 
+@@ -121,6 +142,9 @@ jobserver_parse_auth (const char *auth)
+       return 0;
+     }
+ 
++  /* When using pselect() we want the read to be non-blocking.  */
++  set_blocking (job_fds[0], 0);
++
+   return 1;
+ }
+ 
+@@ -169,7 +193,10 @@ jobserver_acquire_all (void)
+ {
+   unsigned int tokens = 0;
+ 
+-  /* Close the write side, so the read() won't hang.  */
++  /* Use blocking reads to wait for all outstanding jobs.  */
++  set_blocking (job_fds[0], 1);
++
++  /* Close the write side, so the read() won't hang forever.  */
+   close (job_fds[1]);
+   job_fds[1] = -1;
+ 
+@@ -236,18 +263,12 @@ jobserver_pre_acquire (void)
+ unsigned int
+ jobserver_acquire (int timeout)
+ {
+-  sigset_t empty;
+-  fd_set readfds;
+   struct timespec spec;
+   struct timespec *specp = NULL;
+-  int r;
+-  char intake;
++  sigset_t empty;
+ 
+   sigemptyset (&empty);
+ 
+-  FD_ZERO (&readfds);
+-  FD_SET (job_fds[0], &readfds);
+-
+   if (timeout)
+     {
+       /* Alarm after one second (is this too granular?)  */
+@@ -256,28 +277,52 @@ jobserver_acquire (int timeout)
+       specp = &spec;
+     }
+ 
+-  r = pselect (job_fds[0]+1, &readfds, NULL, NULL, specp, &empty);
+-
+-  if (r == -1)
++  while (1)
+     {
+-      /* Better be SIGCHLD.  */
+-      if (errno != EINTR)
+-        pfatal_with_name (_("pselect jobs pipe"));
+-      return 0;
+-    }
++      fd_set readfds;
++      int r;
++      char intake;
+ 
+-  if (r == 0)
+-    /* Timeout.  */
+-    return 0;
++      FD_ZERO (&readfds);
++      FD_SET (job_fds[0], &readfds);
+ 
+-  /* The read FD is ready: read it!  */
+-  EINTRLOOP (r, read (job_fds[0], &intake, 1));
+-  if (r < 0)
+-    pfatal_with_name (_("read jobs pipe"));
++      r = pselect (job_fds[0]+1, &readfds, NULL, NULL, specp, &empty);
++      if (r < 0)
++        switch (errno)
++          {
++          case EINTR:
++            /* SIGCHLD will show up as an EINTR.  */
++            return 0;
++
++          case EBADF:
++            /* Someone closed the jobs pipe.
++               That shouldn't happen but if it does we're done.  */
++              O (fatal, NILF, _("job server shut down"));
+ 
+-  /* What does it mean if read() returns 0?  It shouldn't happen because only
+-     the master make can reap all the tokens and close the write side...??  */
+-  return r > 0;
++          default:
++            pfatal_with_name (_("pselect jobs pipe"));
++          }
++
++      if (r == 0)
++        /* Timeout.  */
++        return 0;
++
++      /* The read FD is ready: read it!  This is non-blocking.  */
++      EINTRLOOP (r, read (job_fds[0], &intake, 1));
++
++      if (r < 0)
++        {
++          /* Someone sniped our token!  Try again.  */
++          if (errno == EAGAIN)
++            continue;
++
++          pfatal_with_name (_("read jobs pipe"));
++        }
++
++      /* read() should never return 0: only the master make can reap all the
++         tokens and close the write side...??  */
++      return r > 0;
++    }
+ }
+ 
+ #else
+-- 
+cgit v1.0-41-gc330
+
diff --git a/nixpkgs/pkgs/development/tools/build-managers/gnumake/default.nix b/nixpkgs/pkgs/development/tools/build-managers/gnumake/default.nix
new file mode 100644
index 000000000000..774ea50f8623
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/gnumake/default.nix
@@ -0,0 +1,75 @@
+{ lib
+, stdenv
+, fetchurl
+, guileSupport ? false, guile
+# avoid guile depend on bootstrap to prevent dependency cycles
+, inBootstrap ? false
+, pkg-config
+, gnumake
+}:
+
+let
+  guileEnabled = guileSupport && !inBootstrap;
+in
+
+stdenv.mkDerivation rec {
+  pname = "gnumake";
+  version = "4.4.1";
+
+  src = fetchurl {
+    url = "mirror://gnu/make/make-${version}.tar.gz";
+    sha256 = "sha256-3Rb7HWe/q3mnL16DkHNcSePo5wtJRaFasfgd23hlj7M=";
+  };
+
+  # to update apply these patches with `git am *.patch` to https://git.savannah.gnu.org/git/make.git
+  patches = [
+    # Replaces /bin/sh with sh, see patch file for reasoning
+    ./0001-No-impure-bin-sh.patch
+    # Purity: don't look for library dependencies (of the form `-lfoo') in /lib
+    # and /usr/lib. It's a stupid feature anyway. Likewise, when searching for
+    # included Makefiles, don't look in /usr/include and friends.
+    ./0002-remove-impure-dirs.patch
+  ];
+
+  nativeBuildInputs = lib.optionals guileEnabled [ pkg-config ];
+  buildInputs = lib.optionals guileEnabled [ guile ];
+
+  configureFlags = lib.optional guileEnabled "--with-guile"
+
+    # Make uses this test to decide whether it should keep track of
+    # subseconds. Apple made this possible with APFS and macOS 10.13.
+    # However, we still support macOS 10.11 and 10.12. Binaries built
+    # in Nixpkgs will be unable to use futimens to set mtime less than
+    # a second. So, tell Make to ignore nanoseconds in mtime here by
+    # overriding the autoconf test for the struct.
+    # See https://github.com/NixOS/nixpkgs/issues/51221 for discussion.
+    ++ lib.optional stdenv.isDarwin "ac_cv_struct_st_mtim_nsec=no";
+
+  outputs = [ "out" "man" "info" ];
+  separateDebugInfo = true;
+
+  passthru.tests = {
+    # make sure that the override doesn't break bootstrapping
+    gnumakeWithGuile = gnumake.override { guileSupport = true; };
+  };
+
+  meta = with lib; {
+    description = "A tool to control the generation of non-source files from sources";
+    longDescription = ''
+      Make is a tool which controls the generation of executables and
+      other non-source files of a program from the program's source files.
+
+      Make gets its knowledge of how to build your program from a file
+      called the makefile, which lists each of the non-source files and
+      how to compute it from other files. When you write a program, you
+      should write a makefile for it, so that it is possible to use Make
+      to build and install the program.
+    '';
+    homepage = "https://www.gnu.org/software/make/";
+
+    license = licenses.gpl3Plus;
+    maintainers = [ maintainers.vrthra ];
+    mainProgram = "make";
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/gprbuild/boot.nix b/nixpkgs/pkgs/development/tools/build-managers/gprbuild/boot.nix
new file mode 100644
index 000000000000..4207b3649594
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/gprbuild/boot.nix
@@ -0,0 +1,97 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, gnat
+, which
+, xmlada # for src
+}:
+
+let
+  version = "24.0.0";
+
+  gprConfigKbSrc = fetchFromGitHub {
+    name = "gprconfig-kb-${version}-src";
+    owner = "AdaCore";
+    repo = "gprconfig_kb";
+    rev = "v${version}";
+    sha256 = "1vnjv2q63l8nq2w4wya75m40isvs78j5ss9b5ga3zx3cpdx3xh09";
+  };
+in
+
+stdenv.mkDerivation {
+  pname = "gprbuild-boot";
+  inherit version;
+
+  src = fetchFromGitHub {
+    name = "gprbuild-${version}";
+    owner = "AdaCore";
+    repo = "gprbuild";
+    rev = "v${version}";
+    sha256 = "096a43453z2xknn6x4hyk2ldp2wh0qhfdfmzsrks50zqcvmkq4v7";
+  };
+
+  nativeBuildInputs = [
+    gnat
+    which
+  ];
+
+  postPatch = ''
+    # The Makefile uses gprbuild to build gprbuild which
+    # we can't do at this point, delete it to prevent the
+    # default phases from failing.
+    rm Makefile
+
+    # make sure bootstrap script runs
+    patchShebangs --build bootstrap.sh
+  '';
+
+  # This setupHook populates GPR_PROJECT_PATH which is used by
+  # gprbuild to find dependencies. It works quite similar to
+  # the pkg-config setupHook in the sense that it also splits
+  # dependencies into GPR_PROJECT_PATH and GPR_PROJECT_PATH_FOR_BUILD,
+  # but gprbuild itself doesn't support this, so we'll need to
+  # introducing a wrapper for it in the future remains TODO.
+  # For the moment this doesn't matter since we have no situation
+  # were gprbuild is used to build something used at build time.
+  setupHooks = [
+    ./gpr-project-path-hook.sh
+  ] ++ lib.optionals stdenv.targetPlatform.isDarwin [
+    # This setupHook replaces the paths of shared libraries starting
+    # with @rpath with the absolute paths on Darwin, so that the
+    # binaries can be run without additional setup.
+    ./gpr-project-darwin-rpath-hook.sh
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    ./bootstrap.sh \
+      --with-xmlada=${xmlada.src} \
+      --with-kb=${gprConfigKbSrc} \
+      --prefix=$out
+
+    # Install custom compiler description which can detect nixpkgs'
+    # GNAT wrapper as a proper Ada compiler. The default compiler
+    # description expects the runtime library to be installed in
+    # the same prefix which isn't the case for nixpkgs. As a
+    # result, it would detect the unwrapped GNAT as a proper
+    # compiler which is unable to produce working binaries.
+    #
+    # Our compiler description is very similar to the upstream
+    # GNAT description except that we use a symlink in $out/nix-support
+    # created by the cc-wrapper to find the associated runtime
+    # libraries and use gnatmake instead of gnatls to find GNAT's
+    # bin directory.
+    install -m644 ${./nixpkgs-gnat.xml} $out/share/gprconfig/nixpkgs-gnat.xml
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Multi-language extensible build tool";
+    homepage = "https://github.com/AdaCore/gprbuild";
+    license = licenses.gpl3Plus;
+    maintainers = [ maintainers.sternenseemann ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/gprbuild/default.nix b/nixpkgs/pkgs/development/tools/build-managers/gprbuild/default.nix
new file mode 100644
index 000000000000..aad115701263
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/gprbuild/default.nix
@@ -0,0 +1,64 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch
+, gprbuild-boot
+, which
+, gnat
+, xmlada
+}:
+
+stdenv.mkDerivation {
+  pname = "gprbuild";
+
+  # See ./boot.nix for an explanation of the gprbuild setupHook,
+  # our custom knowledge base entry and the situation wrt a
+  # (future) gprbuild wrapper.
+  inherit (gprbuild-boot)
+    version
+    src
+    setupHooks
+    meta
+    ;
+
+  nativeBuildInputs = [
+    gnat
+    gprbuild-boot
+    which
+  ];
+
+  propagatedBuildInputs = [
+    xmlada
+  ];
+
+  makeFlags = [
+    "ENABLE_SHARED=${if stdenv.hostPlatform.isStatic then "no" else "yes"}"
+    "PROCESSORS=$(NIX_BUILD_CORES)"
+    # confusingly, for gprbuild --target is autoconf --host
+    "TARGET=${stdenv.hostPlatform.config}"
+    "prefix=${placeholder "out"}"
+  ] ++ lib.optionals (!stdenv.hostPlatform.isStatic) [
+    "LIBRARY_TYPE=relocatable"
+  ];
+
+  # Fixes gprbuild being linked statically always. Based on the AUR's patch:
+  # https://aur.archlinux.org/cgit/aur.git/plain/0001-Makefile-build-relocatable-instead-of-static-binary.patch?h=gprbuild&id=bac524c76cd59c68fb91ef4dfcbe427357b9f850
+  patches = lib.optionals (!stdenv.hostPlatform.isStatic) [
+    ./gprbuild-relocatable-build.patch
+  ];
+
+  buildFlags = [ "all" "libgpr.build" ];
+
+  installFlags = [ "all" "libgpr.install" ];
+
+  # link gprconfig_kb db from gprbuild-boot into build dir,
+  # the install process copies its contents to $out
+  preInstall = ''
+    ln -sf ${gprbuild-boot}/share/gprconfig share/gprconfig
+  '';
+
+  # no need for the install script
+  postInstall = ''
+    rm $out/doinstall
+  '';
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/gprbuild/gpr-project-darwin-rpath-hook.sh b/nixpkgs/pkgs/development/tools/build-managers/gprbuild/gpr-project-darwin-rpath-hook.sh
new file mode 100644
index 000000000000..73be2eb5960a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/gprbuild/gpr-project-darwin-rpath-hook.sh
@@ -0,0 +1,10 @@
+fixGprProjectDarwinRpath() {
+    for f in $(find $out -type f -executable); do
+        install_name_tool -id $f $f || true
+        for rpath in $(otool -L $f | grep @rpath | awk '{print $1}'); do
+            install_name_tool -change $rpath ${!outputLib}/lib/$(basename $rpath) $f || true
+        done
+    done
+}
+
+preFixupPhases+=" fixGprProjectDarwinRpath"
diff --git a/nixpkgs/pkgs/development/tools/build-managers/gprbuild/gpr-project-path-hook.sh b/nixpkgs/pkgs/development/tools/build-managers/gprbuild/gpr-project-path-hook.sh
new file mode 100644
index 000000000000..f98b2ab9e58d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/gprbuild/gpr-project-path-hook.sh
@@ -0,0 +1,8 @@
+addAdaObjectsPath() {
+    local role_post
+    getHostRoleEnvHook
+
+    addToSearchPath "GPR_PROJECT_PATH${role_post}" "$1/share/gpr"
+}
+
+addEnvHooks "$targetOffset" addAdaObjectsPath
diff --git a/nixpkgs/pkgs/development/tools/build-managers/gprbuild/gprbuild-relocatable-build.patch b/nixpkgs/pkgs/development/tools/build-managers/gprbuild/gprbuild-relocatable-build.patch
new file mode 100644
index 000000000000..f49478f6e38c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/gprbuild/gprbuild-relocatable-build.patch
@@ -0,0 +1,13 @@
+diff --git a/Makefile b/Makefile
+index 8c542078..e91cef5e 100644
+--- a/Makefile
++++ b/Makefile
+@@ -82,7 +82,7 @@ LIB_INSTALLER=gprinstall -p -f --target=$(TARGET) $(RBD) "--prefix=${prefix}"
+ CLEANER=gprclean -q $(RBD)
+ 
+ GPRBUILD_BUILDER=$(BUILDER) $(GPRBUILD_GPR) \
+-	-XLIBRARY_TYPE=static -XXMLADA_BUILD=static
++	-XLIBRARY_TYPE=relocatable -XXMLADA_BUILD=relocatable
+ LIBGPR_BUILDER=$(BUILDER) $(GPR_GPR) $(LIBGPR_OS)
+ LIBGPR_INSTALLER=$(LIB_INSTALLER) $(GPR_GPR) $(LIBGPR_OS) -XBUILD=${BUILD} \
+ 	--install-name=gpr \
diff --git a/nixpkgs/pkgs/development/tools/build-managers/gprbuild/nixpkgs-gnat.xml b/nixpkgs/pkgs/development/tools/build-managers/gprbuild/nixpkgs-gnat.xml
new file mode 100644
index 000000000000..ead88dc365c1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/gprbuild/nixpkgs-gnat.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" ?>
+<gprconfig>
+  <!-- This differs from the default GNAT compiler description
+       in the following ways:
+
+       * gnatmake is used over gnatls to detect the GNAT version
+         since the latter is not part of the wrapper.
+       * to find the runtime libraries, we rely on the symlink
+         ../nix-support/gprconfig-gnat-unwrapped which is a
+         gprconfig-specific addition to the cc-wrapper we employ
+         for Ada compilers (which is only GNAT at the moment).
+
+       For documentation on this file format and its use refer to
+       https://docs.adacore.com/gprbuild-docs/html/gprbuild_ug/companion_tools.html#the-gprconfig-knowledge-base
+  -->
+  <compiler_description>
+    <!-- We would like to name this something different, so users
+         of gprconfig know this is something custom, nixpkgs-related,
+         but unfortunately the knowledge base depends on the name of
+         the compiler for e. g. linker settings.
+    -->
+    <name>GNAT</name>
+    <executable prefix="1">(.*-.*-.*)?gnatmake</executable>
+    <version>
+      <external>${PREFIX}gnatmake -v</external>
+      <grep regexp="^GNATMAKE.+?(\d+(\.\d+)?)" group="1"></grep>
+    </version>
+    <languages>Ada</languages>
+    <variable name="gcc_version">
+      <external>${PREFIX}gcc -v</external>
+      <grep regexp="^[-\w]*gcc \S+ (\S+)" group="1"></grep>
+    </variable>
+    <!-- The ada runtime libraries and objects are only part of the unwrapped
+         GNAT derivation. We can't symlink them into the wrapper derivation
+         (at least not the canonical location) since that screws with linking
+         against libraries distributed with gcc.
+
+         As a workaround, we create a symlink to the unwrapped GNAT's "out"
+         output in the cc-wrapper which we can read into a variable here and
+         use to find GNAT's Ada runtime.
+    -->
+    <variable name="gnat_unwrapped">
+      <external>readlink -n ${PATH}/../nix-support/gprconfig-gnat-unwrapped</external>
+    </variable>
+    <runtimes default="default,kernel,native">
+       <directory group="default" >$gnat_unwrapped/lib/gcc(-lib)?/$TARGET/$gcc_version/adalib/</directory>
+       <directory group="default" contents="^rts-">$gnat_unwrapped/lib/gcc(-lib)?/$TARGET/$gcc_version/ada_object_path</directory>
+       <directory group="2" >$gnat_unwrapped/lib/gcc(-lib)?/$TARGET/$gcc_version/rts-(.*)/adalib/</directory>
+       <directory group="1" >$gnat_unwrapped/$TARGET/lib/gnat/(.*)/adalib/</directory>
+    </runtimes>
+    <target>
+      <external>${PREFIX}gcc -dumpmachine</external>
+      <grep regexp="[^\r\n]+"></grep>
+    </target>
+  </compiler_description>
+</gprconfig>
diff --git a/nixpkgs/pkgs/development/tools/build-managers/gradle/default.nix b/nixpkgs/pkgs/development/tools/build-managers/gradle/default.nix
new file mode 100644
index 000000000000..dbed4115ebd1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/gradle/default.nix
@@ -0,0 +1,150 @@
+{ jdk11, jdk17, jdk21 }:
+
+rec {
+  gen =
+
+    { version, nativeVersion, hash,
+
+      # The default JDK/JRE that will be used for derived Gradle packages.
+      # A current LTS version of a JDK is a good choice.
+      defaultJava,
+
+      # The platforms supported by this Gradle package.
+      # Gradle Native-Platform ships some binaries that
+      # are compatible only with specific platforms.
+      # As of 2022-04 this affects platform compatibility
+      # of multiple Gradle releases, so this is used as default.
+      # See https://github.com/gradle/native-platform#supported-platforms
+      platforms ? [
+        "aarch64-darwin"
+        "aarch64-linux"
+        "i686-windows"
+        "x86_64-cygwin"
+        "x86_64-darwin"
+        "x86_64-linux"
+        "x86_64-windows"
+      ]
+    }:
+
+    { lib, stdenv, fetchurl, makeWrapper, unzip, ncurses5, ncurses6,
+
+      # The JDK/JRE used for running Gradle.
+      java ? defaultJava,
+
+      # Additional JDK/JREs to be registered as toolchains.
+      # See https://docs.gradle.org/current/userguide/toolchains.html
+      javaToolchains ? [ ]
+    }:
+
+    stdenv.mkDerivation rec {
+      pname = "gradle";
+      inherit version;
+
+      src = fetchurl {
+        inherit hash;
+        url =
+          "https://services.gradle.org/distributions/gradle-${version}-bin.zip";
+      };
+
+      dontBuild = true;
+
+      nativeBuildInputs = [ makeWrapper unzip ];
+      buildInputs = [ java ];
+
+      installPhase = with builtins;
+        let
+          toolchain = rec {
+            prefix = x: "JAVA_TOOLCHAIN_NIX_${toString x}";
+            varDefs  = (lib.imap0 (i: x: "${prefix i} ${x}") javaToolchains);
+            varNames = lib.imap0 (i: x: prefix i) javaToolchains;
+            property = " -Porg.gradle.java.installations.fromEnv='${
+                 concatStringsSep "," varNames
+               }'";
+          };
+          varDefs = concatStringsSep "\n" (map (x: "  --set ${x} \\")
+            ([ "JAVA_HOME ${java}" ] ++ toolchain.varDefs));
+        in ''
+          mkdir -pv $out/lib/gradle/
+          cp -rv lib/ $out/lib/gradle/
+
+          gradle_launcher_jar=$(echo $out/lib/gradle/lib/gradle-launcher-*.jar)
+          test -f $gradle_launcher_jar
+          makeWrapper ${java}/bin/java $out/bin/gradle \
+            ${varDefs}
+            --add-flags "-classpath $gradle_launcher_jar org.gradle.launcher.GradleMain${toolchain.property}"
+        '';
+
+      dontFixup = !stdenv.isLinux;
+
+      fixupPhase = let arch = if stdenv.is64bit then "amd64" else "i386";
+      in ''
+        for variant in "" "-ncurses5" "-ncurses6"; do
+          mkdir "patching$variant"
+          pushd "patching$variant"
+          jar xf $out/lib/gradle/lib/native-platform-linux-${arch}$variant-${nativeVersion}.jar
+          patchelf \
+            --set-rpath "${stdenv.cc.cc.lib}/lib64:${lib.makeLibraryPath [ stdenv.cc.cc ncurses5 ncurses6 ]}" \
+            net/rubygrapefruit/platform/linux-${arch}$variant/libnative-platform*.so
+          jar cf native-platform-linux-${arch}$variant-${nativeVersion}.jar .
+          mv native-platform-linux-${arch}$variant-${nativeVersion}.jar $out/lib/gradle/lib/
+          popd
+        done
+
+        # The scanner doesn't pick up the runtime dependency in the jar.
+        # Manually add a reference where it will be found.
+        mkdir $out/nix-support
+        echo ${stdenv.cc.cc} > $out/nix-support/manual-runtime-dependencies
+        # Gradle will refuse to start without _both_ 5 and 6 versions of ncurses.
+        echo ${ncurses5} >> $out/nix-support/manual-runtime-dependencies
+        echo ${ncurses6} >> $out/nix-support/manual-runtime-dependencies
+      '';
+
+      meta = with lib; {
+        inherit platforms;
+        description = "Enterprise-grade build system";
+        longDescription = ''
+          Gradle is a build system which offers you ease, power and freedom.
+          You can choose the balance for yourself. It has powerful multi-project
+          build support. It has a layer on top of Ivy that provides a
+          build-by-convention integration for Ivy. It gives you always the choice
+          between the flexibility of Ant and the convenience of a
+          build-by-convention behavior.
+        '';
+        homepage = "https://www.gradle.org/";
+        changelog = "https://docs.gradle.org/${version}/release-notes.html";
+        downloadPage = "https://gradle.org/next-steps/?version=${version}";
+        sourceProvenance = with sourceTypes; [
+          binaryBytecode
+          binaryNativeCode
+        ];
+        license = licenses.asl20;
+        maintainers = with maintainers; [ lorenzleutgeb liff ];
+        mainProgram = "gradle";
+      };
+    };
+
+  # NOTE: Default JDKs that are hardcoded below must be LTS versions
+  # and respect the compatibility matrix at
+  # https://docs.gradle.org/current/userguide/compatibility.html
+
+  gradle_8 = gen {
+    version = "8.6";
+    nativeVersion = "0.22-milestone-25";
+    hash = "sha256-ljHVPPPnS/pyaJOu4fiZT+5OBgxAEzWUbbohVvRA8kw=";
+    defaultJava = jdk21;
+  };
+
+  gradle_7 = gen {
+    version = "7.6.4";
+    nativeVersion = "0.22-milestone-25";
+    hash = "sha256-vtHaM8yg9VerE2kcd/OLtnOIEZ5HlNET4FEDm4Cvm7E=";
+    defaultJava = jdk17;
+  };
+
+  gradle_6 = gen {
+    version = "6.9.4";
+    nativeVersion = "0.22-milestone-20";
+    hash = "sha256-PiQCKFON6fGHcqV06ZoLqVnoPW7zUQFDgazZYxeBOJo=";
+    defaultJava = jdk11;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/gradle/update.sh b/nixpkgs/pkgs/development/tools/build-managers/gradle/update.sh
new file mode 100755
index 000000000000..0d6b78a66525
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/gradle/update.sh
@@ -0,0 +1,67 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p nix-prefetch curl jq
+
+# Generates Gradle release specs from GitHub Releases.
+#
+# As of 2021-11, this script has very poor error handling,
+# it is expected to be run by maintainers as one-off job
+# only.
+#
+# NOTE: The earliest Gradle release that has a
+# corresponding entry as GitHub Release is 6.8-rc-1.
+
+for v in $(curl -s "https://api.github.com/repos/gradle/gradle/releases" | jq -r '.[].tag_name' | sort -n -r)
+do
+    # Tag names and download filenames are not the same,
+    # we modify the tag name slightly to translate it
+    # to the naming scheme of download filenames.
+    # This translation assumes a tag naming scheme.
+    # As of 2021-11 it works from 6.8-rc-1 to 7.3-rc-3.
+
+    # Remove first letter (assumed to be "v").
+    v=${v:1}
+
+    # To lower case.
+    v=${v,,}
+
+    # Add dash after "rc".
+    v=${v/-rc/-rc-}
+
+    # Remove trailing ".0"
+    v=${v%.0}
+
+    # Remove trailing ".0" for release candidates.
+    v=${v/.0-rc/-rc}
+
+    f="gradle-${v}-spec.nix"
+
+    if [[ -n "$1" && "$1" != "$v" ]]
+    then
+        echo "$v SKIP (nomatch)"
+        continue
+    elif [ "$1" == "" ] && [ -f "$f" ]
+    then
+        echo "$v SKIP (exists)"
+        continue
+    fi
+
+    url="https://services.gradle.org/distributions/gradle-${v}-bin.zip"
+    read -d "\n" gradle_hash gradle_path < <(nix-prefetch-url --print-path $url)
+
+    # Prefix and suffix for "native-platform" dependency.
+    gradle_native_prefix="gradle-$v/lib/native-platform-"
+    gradle_native_suffix=".jar"
+    tmp=$(mktemp)
+    zipinfo -1 "$gradle_path" "$gradle_native_prefix*$gradle_native_suffix" > $tmp
+    gradle_native=$(cat $tmp | head -n1)
+    gradle_native=${gradle_native#"$gradle_native_prefix"}
+    gradle_native=${gradle_native%"$gradle_native_suffix"}
+
+    # Supported architectures
+    #grep -Pho "(linux|osx)-\w+" $tmp | sort | uniq
+    rm -f $tmp
+
+    echo -e "{\\n  version = \"$v\";\\n  nativeVersion = \"$gradle_native\";\\n  sha256 = \"$gradle_hash\";\\n}" > $f
+
+    echo "$v DONE"
+done
diff --git a/nixpkgs/pkgs/development/tools/build-managers/gup/default.nix b/nixpkgs/pkgs/development/tools/build-managers/gup/default.nix
new file mode 100644
index 000000000000..202fdf4d296f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/gup/default.nix
@@ -0,0 +1,44 @@
+{ stdenv, fetchFromGitHub, nix-update-source, lib, python3
+, which, runtimeShell, pylint }:
+stdenv.mkDerivation rec {
+  version = "0.9.0";
+  src = fetchFromGitHub {
+    owner = "timbertson";
+    repo = "gup";
+    rev = "version-${version}";
+    sha256 = "12ck047jminfwb4cfzmvfc9dpxg25xian11jgly534rlcbmgmkgq";
+  };
+  pname = "gup";
+  nativeBuildInputs = [ python3 which pylint ];
+  buildInputs = [ python3 ];
+  strictDeps = true;
+  buildPhase = "make python";
+  installPhase = ''
+    mkdir $out
+    cp -r python/bin $out/bin
+  '';
+  passthru.updateScript = [
+    runtimeShell
+    "-c"
+    ''
+      set -e
+      echo
+      cd ${toString ./.}
+      ${nix-update-source}/bin/nix-update-source \
+        --prompt version \
+        --replace-attr version \
+        --set owner timbertson \
+        --set repo gup \
+        --set type fetchFromGitHub \
+        --set rev 'version-{version}' \
+        --modify-nix default.nix
+    ''
+  ];
+  meta = {
+    inherit (src.meta) homepage;
+    description = "A better make, inspired by djb's redo";
+    license = lib.licenses.lgpl2Plus;
+    maintainers = [ lib.maintainers.timbertson ];
+    platforms = lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/icmake/default.nix b/nixpkgs/pkgs/development/tools/build-managers/icmake/default.nix
new file mode 100644
index 000000000000..6320646974ad
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/icmake/default.nix
@@ -0,0 +1,46 @@
+{ lib, stdenv, fetchFromGitLab, makeWrapper, gcc, ncurses }:
+
+stdenv.mkDerivation rec {
+  pname = "icmake";
+  version = "9.03.01";
+
+  src = fetchFromGitLab {
+    sha256 = "05r0a69w0hv2qhjpb2bxd0lmp2vv5r2d4iggg6ly4miam0i318jy";
+    rev = version;
+    repo = "icmake";
+    owner = "fbb-git";
+  };
+
+
+  setSourceRoot = ''
+    sourceRoot=$(echo */icmake)
+  '';
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ gcc ];
+
+  preConfigure = ''
+    patchShebangs ./
+    substituteInPlace INSTALL.im --replace "usr/" ""
+  '';
+
+  buildPhase = ''
+    ./icm_prepare $out
+    ./icm_bootstrap x
+  '';
+
+  installPhase = ''
+    ./icm_install all /
+
+    wrapProgram $out/bin/icmbuild \
+     --prefix PATH : ${ncurses}/bin
+  '';
+
+  meta = with lib; {
+    description = "A program maintenance (make) utility using a C-like grammar";
+    homepage = "https://fbb-git.gitlab.io/icmake/";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ pSub ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/jam/default.nix b/nixpkgs/pkgs/development/tools/build-managers/jam/default.nix
new file mode 100644
index 000000000000..bf06954df4de
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/jam/default.nix
@@ -0,0 +1,118 @@
+{ lib, stdenv, fetchurl, bison, buildPackages, pkgsBuildTarget }:
+
+let
+  mkJam = { pname, version, src, meta ? { } }: stdenv.mkDerivation {
+    inherit pname version src;
+
+    depsBuildBuild = [ buildPackages.stdenv.cc ];
+    nativeBuildInputs = [ bison ];
+
+    # Jam uses c89 conventions
+    env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.cc.isClang "-std=c89";
+
+    # Jambase expects ar to have flags.
+    preConfigure = ''
+      export AR="$AR rc"
+    '';
+
+    # When cross-compiling, we need to set the preprocessor macros
+    # OSMAJOR/OSMINOR/OSPLAT to the values from the target platform, not the
+    # host platform. This looks a little ridiculous because the vast majority of
+    # build tools don't embed target-specific information into their binary, but
+    # in this case we behave more like a compiler than a make(1)-alike.
+    postPatch = lib.optionalString (stdenv.hostPlatform != stdenv.targetPlatform) ''
+      cat >>jam.h <<EOF
+      #undef OSMAJOR
+      #undef OSMINOR
+      #undef OSPLAT
+      $(
+        ${pkgsBuildTarget.targetPackages.stdenv.cc}/bin/${pkgsBuildTarget.targetPackages.stdenv.cc.targetPrefix}cc -E -dM jam.h \
+          | grep -E '^#define (OSMAJOR|OSMINOR|OSPLAT) '
+      )
+      EOF
+    '';
+
+    LOCATE_TARGET = "bin.unix";
+
+    buildPhase = ''
+      runHook preBuild
+      make $makeFlags jam0
+      ./jam0 -j$NIX_BUILD_CORES -sCC=${buildPackages.stdenv.cc.targetPrefix}cc jambase.c
+      ./jam0 -j$NIX_BUILD_CORES
+      runHook postBuild
+    '';
+
+    installPhase = ''
+      runHook preInstall
+      mkdir -p $out/bin $out/doc/jam
+      cp bin.unix/jam $out/bin/jam
+      cp *.html $out/doc/jam
+      runHook postInstall
+    '';
+
+    enableParallelBuilding = true;
+
+    meta = with lib; {
+      license = licenses.free;
+      mainProgram = "jam";
+      platforms = platforms.unix;
+    } // meta;
+  };
+in
+{
+  jam = let
+    pname = "jam";
+    version = "2.6.1";
+
+    base = mkJam {
+      inherit pname version;
+
+      src = fetchurl {
+        url = "https://swarm.workshop.perforce.com/projects/perforce_software-jam/download/main/${pname}-${version}.tar";
+        sha256 = "19xkvkpycxfsncxvin6yqrql3x3z9ypc1j8kzls5k659q4kv5rmc";
+      };
+
+      meta = with lib; {
+        description = "Just Another Make";
+        homepage = "https://www.perforce.com/resources/documentation/jam";
+        maintainers = with maintainers; [ impl orivej ];
+      };
+    };
+  in base.overrideAttrs (oldAttrs: {
+    makeFlags = (oldAttrs.makeFlags or []) ++ [
+      "CC=${buildPackages.stdenv.cc.targetPrefix}cc"
+    ];
+  });
+
+  ftjam = let
+    pname = "ftjam";
+    version = "2.5.2";
+
+    base = mkJam {
+      inherit pname version;
+
+      src = fetchurl {
+        url = "https://downloads.sourceforge.net/project/freetype/${pname}/${version}/${pname}-${version}.tar.bz2";
+        hash = "sha256-6JdzUAqSkS3pGOn+v/q+S2vOedaa8ZRDX04DK4ptZqM=";
+      };
+
+      meta = with lib; {
+        description = "FreeType's enhanced, backwards-compatible Jam clone";
+        homepage = "https://freetype.org/jam/";
+        maintainers = with maintainers; [ AndersonTorres impl ];
+      };
+    };
+  in base.overrideAttrs (oldAttrs: {
+    postPatch = (oldAttrs.postPatch or "") + ''
+      substituteInPlace Jamfile --replace strip ${stdenv.cc.targetPrefix}strip
+    '';
+
+    # Doesn't understand how to cross compile once bootstrapped, so we'll just
+    # use the Makefile for the bootstrapping portion.
+    configurePlatforms = [ "build" "target" ];
+    configureFlags = (oldAttrs.configureFlags or []) ++ [
+      "CC=${buildPackages.stdenv.cc.targetPrefix}cc"
+      "--host=${stdenv.buildPlatform.config}"
+    ];
+  });
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/kati/default.nix b/nixpkgs/pkgs/development/tools/build-managers/kati/default.nix
new file mode 100644
index 000000000000..ed5923e74d0a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/kati/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation {
+  pname = "kati-unstable";
+  version = "2019-09-23";
+
+  src = fetchFromGitHub {
+    owner = "google";
+    repo = "kati";
+    rev = "9da3296746a0cd55b38ebebf91e7f57105a4c36f";
+    sha256 = "0s5dfhgpcbx12b1fqmm8p0jpvrhgrnl9qywv1ksbwhw3pfp7j866";
+  };
+
+  patches = [ ./version.patch ];
+
+  installPhase = ''
+    install -D ckati $out/bin/ckati
+  '';
+
+  meta = with lib; {
+    description = "An experimental GNU make clone";
+    homepage = "https://github.com/google/kati";
+    platforms = platforms.all;
+    license = licenses.asl20;
+    maintainers = with maintainers; [ danielfullmer ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/kati/version.patch b/nixpkgs/pkgs/development/tools/build-managers/kati/version.patch
new file mode 100644
index 000000000000..1821ac6bbb73
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/kati/version.patch
@@ -0,0 +1,19 @@
+diff --git a/Makefile.ckati b/Makefile.ckati
+index e4067bb..15518f3 100644
+--- a/Makefile.ckati
++++ b/Makefile.ckati
+@@ -102,14 +102,8 @@ $(KATI_CXX_TEST_EXES): $(KATI_BIN_PATH)/%: $(KATI_INTERMEDIATES_PATH)/%.o
+ 	$(KATI_LD) $^ -o $@ $(KATI_LIBS)
+ 
+ # Rule to generate version.cc
+-KATI_GIT_DIR := $(shell git -C $(KATI_SRC_PATH) rev-parse --show-toplevel)
+-ifneq ($(KATI_GIT_DIR),)
+-KATI_VERSION_DEPS := $(KATI_GIT_DIR)/.git/HEAD $(KATI_GIT_DIR)/.git/index
+-KATI_VERSION := $(shell git -C $(KATI_GIT_DIR) rev-parse HEAD)
+-else
+ KATI_VERSION_DEPS :=
+ KATI_VERSION := unknown
+-endif
+ $(KATI_INTERMEDIATES_PATH)/version.cc: $(KATI_VERSION_DEPS)
+ 	@mkdir -p $(dir $@)
+ 	echo '// +build ignore' > $@
diff --git a/nixpkgs/pkgs/development/tools/build-managers/knit/default.nix b/nixpkgs/pkgs/development/tools/build-managers/knit/default.nix
new file mode 100644
index 000000000000..df2898239b78
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/knit/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "knit";
+  version = "1.1.1";
+
+  src = fetchFromGitHub {
+    owner = "zyedidia";
+    repo = "knit";
+    rev = "v${version}";
+    hash = "sha256-zxwEJnQZpOEJhV7jx2ClS3XmMfGBiq8AHR26TOIBJVw=";
+  };
+
+  vendorHash = "sha256-+IZFydwchHIMIvYmIgZ0uJKjW4aVBFuj3SQk58I0z/g=";
+
+  subPackages = [
+    "cmd/knit"
+  ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/zyedidia/knit/info.Version=${version}"
+  ];
+
+  meta = with lib; {
+    description = "A simple and flexible build tool using Lua, similar to make/mk";
+    homepage = "https://github.com/zyedidia/knit";
+    changelog = "https://github.com/zyedidia/knit/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ DrSensor ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/leiningen/default.nix b/nixpkgs/pkgs/development/tools/build-managers/leiningen/default.nix
new file mode 100644
index 000000000000..168b4688343c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/leiningen/default.nix
@@ -0,0 +1,63 @@
+{ lib, stdenv, fetchurl, makeWrapper
+, coreutils, jdk, rlwrap, gnupg }:
+
+stdenv.mkDerivation rec {
+  pname = "leiningen";
+  version = "2.10.0";
+
+  src = fetchurl {
+    url = "https://codeberg.org/leiningen/leiningen/raw/tag/${version}/bin/lein-pkg";
+    hash = "sha256-sXV86UHky/Fcv2Sbe09BM2XmEtqJLSKEHsFyg5G7Zq8=";
+  };
+
+  # Check https://codeberg.org/leiningen/leiningen/releases to get the URL for the new version
+  jarsrc = fetchurl {
+    url = "https://codeberg.org/attachments/43cebda5-a7c2-405b-b641-5143a00051b5";
+    hash = "sha256-0nKZutNAdawoZNC9BVn4NcbixHbAsKKDvL21dP2tuzQ=";
+  };
+
+  JARNAME = "${pname}-${version}-standalone.jar";
+
+  dontUnpack = true;
+
+  nativeBuildInputs = [ makeWrapper ];
+  propagatedBuildInputs = [ jdk ];
+
+  # the jar is not in share/java, because it's a standalone jar and should
+  # never be picked up by set-java-classpath.sh
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin $out/share
+    cp -v $src $out/bin/lein
+    cp -v $jarsrc $out/share/$JARNAME
+
+    runHook postInstall
+  '';
+
+  fixupPhase = ''
+    runHook preFixup
+
+    chmod +x $out/bin/lein
+    patchShebangs $out/bin/lein
+    substituteInPlace $out/bin/lein \
+      --replace 'LEIN_JAR=/usr/share/java/leiningen-$LEIN_VERSION-standalone.jar' "LEIN_JAR=$out/share/$JARNAME"
+    wrapProgram $out/bin/lein \
+      --prefix PATH ":" "${lib.makeBinPath [ rlwrap coreutils ]}" \
+      --set LEIN_GPG ${gnupg}/bin/gpg \
+      --set JAVA_CMD ${jdk}/bin/java
+
+    runHook postFixup
+  '';
+
+  meta = {
+    homepage = "https://leiningen.org/";
+    description = "Project automation for Clojure";
+    sourceProvenance = with lib.sourceTypes; [ binaryBytecode ];
+    license = lib.licenses.epl10;
+    platforms = jdk.meta.platforms;
+    maintainers = with lib.maintainers; [ ];
+    mainProgram = "lein";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/mage/default.nix b/nixpkgs/pkgs/development/tools/build-managers/mage/default.nix
new file mode 100644
index 000000000000..2fdf1418f8ff
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/mage/default.nix
@@ -0,0 +1,30 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+buildGoModule rec {
+  pname = "mage";
+  version = "1.15.0";
+
+  src = fetchFromGitHub {
+    owner = "magefile";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-aZPv3+F4VMiThjR0nFP+mKQLI9zKj2jaOawClROnT34=";
+  };
+
+  vendorHash = null;
+
+  doCheck = false;
+
+  ldflags = [
+    "-X github.com/magefile/mage/mage.commitHash=v${version}"
+    "-X github.com/magefile/mage/mage.gitTag=v${version}"
+    "-X github.com/magefile/mage/mage.timestamp=1970-01-01T00:00:00Z"
+  ];
+
+  meta = with lib; {
+    description = "A Make/Rake-like Build Tool Using Go";
+    homepage = "https://magefile.org/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ swdunlop ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/mill/default.nix b/nixpkgs/pkgs/development/tools/build-managers/mill/default.nix
new file mode 100644
index 000000000000..761aea9cafa2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/mill/default.nix
@@ -0,0 +1,52 @@
+{ lib, stdenv, fetchurl, jre, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "mill";
+  version = "0.11.6";
+
+  src = fetchurl {
+    url = "https://github.com/com-lihaoyi/mill/releases/download/${version}/${version}-assembly";
+    hash = "sha256-vGhjnOKvR2RdgFx3WsM217SO9gcKZknPaf7LKo3SJPU=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  dontUnpack = true;
+  dontConfigure = true;
+  dontBuild = true;
+
+  # this is mostly downloading a pre-built artifact
+  preferLocal = true;
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm555 "$src" "$out/bin/.mill-wrapped"
+    # can't use wrapProgram because it sets --argv0
+    makeWrapper "$out/bin/.mill-wrapped" "$out/bin/mill" \
+      --prefix PATH : "${jre}/bin" \
+      --set JAVA_HOME "${jre}"
+    runHook postInstall
+  '';
+
+  doInstallCheck = true;
+  # The default release is a script which will do an impure download
+  # just ensure that the application can run without network
+  installCheckPhase = ''
+    $out/bin/mill --help > /dev/null
+  '';
+
+  meta = with lib; {
+    homepage = "https://com-lihaoyi.github.io/mill/";
+    license = licenses.mit;
+    description = "A build tool for Scala, Java and more";
+    longDescription = ''
+      Mill is a build tool borrowing ideas from modern tools like Bazel, to let you build
+      your projects in a way that's simple, fast, and predictable. Mill has built in
+      support for the Scala programming language, and can serve as a replacement for
+      SBT, but can also be extended to support any other language or platform via
+      modules (written in Java or Scala) or through an external subprocesses.
+    '';
+    maintainers = with maintainers; [ scalavision zenithal ];
+    platforms = lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/moon/default.nix b/nixpkgs/pkgs/development/tools/build-managers/moon/default.nix
new file mode 100644
index 000000000000..b8dc4d27b2b9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/moon/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, darwin
+, stdenv
+, openssl
+, pkg-config
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "moon";
+  version = "1.20.1";
+
+  src = fetchFromGitHub {
+    owner = "moonrepo";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-wAY5jifyjK5jp5nlrwt/Krp96in06SnayTKx8inrf0A=";
+  };
+
+  cargoHash = "sha256-qfDw+zmhk0M3gItiB7qfgiQCBRvOYBOirJFMyNRr714=";
+
+  env = {
+    RUSTFLAGS = "-C strip=symbols";
+    OPENSSL_NO_VENDOR = 1;
+  };
+
+  buildInputs = [ openssl ] ++
+    lib.optionals stdenv.isDarwin [
+      darwin.apple_sdk.frameworks.Security
+      darwin.apple_sdk.frameworks.SystemConfiguration
+  ];
+  nativeBuildInputs = [ pkg-config ];
+
+  # Some tests fail, because test using internet connection and install NodeJS by example
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A task runner and repo management tool for the web ecosystem, written in Rust";
+    homepage = "https://github.com/moonrepo/moon";
+    license = licenses.mit;
+    maintainers = with maintainers; [ flemzord ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/msbuild/create-deps.sh b/nixpkgs/pkgs/development/tools/build-managers/msbuild/create-deps.sh
new file mode 100755
index 000000000000..c9bd4ba7eb6a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/msbuild/create-deps.sh
@@ -0,0 +1,57 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p jq -p xmlstarlet -p curl
+set -euo pipefail
+
+cat << EOL
+{ fetchurl }: [
+EOL
+
+mapfile -t repos < <(
+    xmlstarlet sel -t -v 'configuration/packageSources/add/@value' -n NuGet.config |
+        while IFS= read index
+        do
+            curl --compressed -fsL "$index" | \
+                jq -r '.resources[] | select(."@type" == "PackageBaseAddress/3.0.0")."@id"'
+        done
+    )
+
+find .packages fake-home/.nuget/packages -name \*.nupkg -printf '%P\n' | sort -u |
+    while IFS= read file
+    do
+        packagedir=$(dirname $file)
+        version=$(basename $packagedir)
+        package=$(dirname $packagedir)
+
+        found=false
+        for repo in "${repos[@]}"
+        do
+            url="$repo$package/$version/$package.$version.nupkg"
+            if curl -fsL "$url" -o /dev/null
+            then
+                found=true
+                break
+            fi
+        done
+
+        if ! $found
+        then
+            echo "couldn't find $package $version" >&2
+            exit 1
+        fi
+
+        sha256=$(nix-prefetch-url "$url" 2>/dev/null)
+        cat << EOL
+  {
+    name = "$package";
+    version = "$version";
+    src = fetchurl {
+      url = "$url";
+      sha256 = "$sha256";
+    };
+  }
+EOL
+    done
+
+cat << EOL
+]
+EOL
diff --git a/nixpkgs/pkgs/development/tools/build-managers/msbuild/default.nix b/nixpkgs/pkgs/development/tools/build-managers/msbuild/default.nix
new file mode 100644
index 000000000000..1b561470af79
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/msbuild/default.nix
@@ -0,0 +1,162 @@
+{ lib, stdenv, fetchurl, fetchpatch, makeWrapper, glibcLocales, mono, nuget, unzip, dotnetCorePackages, writeText, roslyn }:
+
+let
+
+  dotnet-sdk = dotnetCorePackages.sdk_6_0;
+
+  xplat = fetchurl {
+    url = "https://github.com/mono/msbuild/releases/download/v16.9.0/mono_msbuild_6.12.0.137.zip";
+    sha256 = "1wnzbdpk4s9bmawlh359ak2b8zi0sgx1qvcjnvfncr1wsck53v7q";
+  };
+
+  deps = map (package: package.src)
+    (import ./deps.nix { inherit fetchurl; });
+
+  nuget-config = writeText "NuGet.config" ''
+    <?xml version="1.0" encoding="utf-8"?>
+    <configuration>
+      <packageSources>
+        <clear />
+      </packageSources>
+    </configuration>
+  '';
+
+  inherit (stdenv.hostPlatform.extensions) sharedLibrary;
+
+in
+
+stdenv.mkDerivation rec {
+  pname = "msbuild";
+  version = "16.10.1+xamarinxplat.2021.05.26.14.00";
+
+  src = fetchurl {
+    url = "https://download.mono-project.com/sources/msbuild/msbuild-${version}.tar.xz";
+    sha256 = "05ghqqkdj4s3d0xkp7mkdzjig5zj3k6ajx71j0g2wv6rdbvg6899";
+  };
+
+  nativeBuildInputs = [
+    dotnet-sdk
+    mono
+    unzip
+    makeWrapper
+  ];
+
+  buildInputs = [
+    nuget
+    glibcLocales
+  ];
+
+  # https://github.com/NixOS/nixpkgs/issues/38991
+  # bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
+  LOCALE_ARCHIVE = lib.optionalString stdenv.isLinux
+      "${glibcLocales}/lib/locale/locale-archive";
+
+  postPatch = ''
+    # not patchShebangs, there is /bin/bash in the body of the script as well
+    substituteInPlace ./eng/cibuild_bootstrapped_msbuild.sh --replace /bin/bash ${stdenv.shell}
+
+    patchShebangs eng/*.sh mono/build/*.sh
+
+    sed -i -e "/<\/projectImportSearchPaths>/a <property name=\"MSBuildExtensionsPath\" value=\"$out/lib/mono/xbuild\"/>" \
+      src/MSBuild/app.config
+
+    # license check is case sensitive
+    mv LICENSE license.bak && mv license.bak license
+  '';
+
+  buildPhase = ''
+    # nuget would otherwise try to base itself in /homeless-shelter
+    export HOME=$(pwd)/fake-home
+
+    cp ${nuget-config} NuGet.config
+    nuget sources Add -Name nixos -Source $(pwd)/nixos
+
+    for package in ${toString deps}; do
+      nuget add $package -Source nixos
+    done
+
+    mkdir -p artifacts
+    unzip ${xplat} -d artifacts
+    mv artifacts/msbuild artifacts/mono-msbuild
+    chmod +x artifacts/mono-msbuild/MSBuild.dll
+
+    # The provided libhostfxr.dylib is for x86_64-darwin, so we remove it
+    rm artifacts/mono-msbuild/SdkResolvers/Microsoft.DotNet.MSBuildSdkResolver/libhostfxr.dylib
+
+    ln -s $(find ${dotnet-sdk} -name libhostfxr${sharedLibrary}) artifacts/mono-msbuild/SdkResolvers/Microsoft.DotNet.MSBuildSdkResolver/
+
+    # overwrite the file
+    echo "#!${stdenv.shell}" > eng/common/dotnet-install.sh
+    echo "#!${stdenv.shell}" > mono/build/get_sdk_files.sh
+
+    # Prevent msbuild from downloading a new libhostfxr
+    echo "#!${stdenv.shell}" > mono/build/extract_and_copy_hostfxr.sh
+
+    mkdir -p mono/dotnet-overlay/msbuild-bin
+    cp ${dotnet-sdk}/sdk/*/{Microsoft.NETCoreSdk.BundledVersions.props,RuntimeIdentifierGraph.json} mono/dotnet-overlay/msbuild-bin
+
+    # DisableNerdbankVersioning https://gitter.im/Microsoft/msbuild/archives/2018/06/27?at=5b33dbc4ce3b0f268d489bfa
+    # TODO there are some (many?) failing tests
+    ./eng/cibuild_bootstrapped_msbuild.sh --host_type mono --configuration Release --skip_tests /p:DisableNerdbankVersioning=true
+    patchShebangs stage1/mono-msbuild/msbuild
+  '';
+
+  installPhase = ''
+    stage1/mono-msbuild/msbuild mono/build/install.proj /p:MonoInstallPrefix="$out" /p:Configuration=Release-MONO
+
+    ln -s ${roslyn}/lib/dotnet/microsoft.net.compilers.toolset/*/tasks/net472 $out/lib/mono/msbuild/Current/bin/Roslyn
+
+    makeWrapper ${mono}/bin/mono $out/bin/msbuild \
+      --set-default MONO_GC_PARAMS "nursery-size=64m" \
+      --add-flags "$out/lib/mono/msbuild/15.0/bin/MSBuild.dll"
+
+    ln -s $(find ${dotnet-sdk} -name libhostfxr${sharedLibrary}) $out/lib/mono/msbuild/Current/bin/SdkResolvers/Microsoft.DotNet.MSBuildSdkResolver/
+  '';
+
+  doInstallCheck = true;
+
+  # https://docs.microsoft.com/cs-cz/visualstudio/msbuild/walkthrough-creating-an-msbuild-project-file-from-scratch?view=vs-2019
+  installCheckPhase = ''
+    cat > Helloworld.cs <<EOF
+using System;
+
+class HelloWorld
+{
+    static void Main()
+    {
+#if DebugConfig
+        Console.WriteLine("WE ARE IN THE DEBUG CONFIGURATION");
+#endif
+
+        Console.WriteLine("Hello, world!");
+    }
+}
+EOF
+
+    cat > Helloworld.csproj <<EOF
+<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Compile Include="Helloworld.cs" />
+  </ItemGroup>
+  <Target Name="Build">
+    <Csc Sources="@(Compile)"/>
+  </Target>
+</Project>
+EOF
+
+    $out/bin/msbuild Helloworld.csproj -t:Build
+    ${mono}/bin/mono Helloworld.exe | grep "Hello, world!"
+  '';
+
+  meta = with lib; {
+    description = "Mono version of Microsoft Build Engine, the build platform for .NET, and Visual Studio";
+    homepage = "https://github.com/mono/msbuild";
+    sourceProvenance = with sourceTypes; [
+      fromSource
+      binaryNativeCode  # dependencies
+    ];
+    license = licenses.mit;
+    maintainers = with maintainers; [ jdanek ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/msbuild/deps.nix b/nixpkgs/pkgs/development/tools/build-managers/msbuild/deps.nix
new file mode 100644
index 000000000000..4a006428a505
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/msbuild/deps.nix
@@ -0,0 +1,1842 @@
+{ fetchurl }: [
+  {
+    name = "benchmarkdotnet";
+    version = "0.12.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/benchmarkdotnet/0.12.1/benchmarkdotnet.0.12.1.nupkg";
+      sha256 = "0whk81a0v70lkhcd9yffls6vnqnc63hw6jfx8mr7iqp02jbrb15w";
+    };
+  }
+  {
+    name = "benchmarkdotnet.annotations";
+    version = "0.12.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/benchmarkdotnet.annotations/0.12.1/benchmarkdotnet.annotations.0.12.1.nupkg";
+      sha256 = "061v8zdp69a80vb9gf5n8di2qqz6bwj2215shgsw40i0s8j3flw3";
+    };
+  }
+  {
+    name = "commandlineparser";
+    version = "2.4.3";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/commandlineparser/2.4.3/commandlineparser.2.4.3.nupkg";
+      sha256 = "1aca3q25n3dg55v4j3kzlzfzd5k2jpy6zhp8x7g74pdfdqzrhg55";
+    };
+  }
+  {
+    name = "fsharp.net.sdk";
+    version = "1.0.4-bundled-0100";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/fsharp.net.sdk/1.0.4-bundled-0100/fsharp.net.sdk.1.0.4-bundled-0100.nupkg";
+      sha256 = "06hydwby6pzqzzcxmz4z8v5hiiylhzldl7ggfvr4c5xhpb6bcl78";
+    };
+  }
+  {
+    name = "iced";
+    version = "1.4.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/iced/1.4.0/iced.1.4.0.nupkg";
+      sha256 = "1l8l20clb56vfsjcpspz0z4f3gy3mr2nwilbb8wjlr5fhx6g23n9";
+    };
+  }
+  {
+    name = "illink.tasks";
+    version = "0.1.6-prerelease.20175.2";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/7d9f5c21-0d79-403f-bfe3-9a4506529760/nuget/v3/flat2/illink.tasks/0.1.6-prerelease.20175.2/illink.tasks.0.1.6-prerelease.20175.2.nupkg";
+      sha256 = "0s4fk48m255n3figh0nnw8cp40qk33khq56sjqnippbk8n6w487z";
+    };
+  }
+  {
+    name = "jnm2.referenceassemblies.net35";
+    version = "1.0.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/jnm2.referenceassemblies.net35/1.0.1/jnm2.referenceassemblies.net35.1.0.1.nupkg";
+      sha256 = "10dplszwicqnjyxbxkyc3cs0kzqvcrf73pmbxxd0rmqnakz23a7c";
+    };
+  }
+  {
+    name = "largeaddressaware";
+    version = "1.0.5";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/largeaddressaware/1.0.5/largeaddressaware.1.0.5.nupkg";
+      sha256 = "0hsjh3m3wr5bfy82bzn606iin35ps03lzfrn3hvjgcn1w68d6291";
+    };
+  }
+  {
+    name = "microbuild.core";
+    version = "0.2.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/microbuild.core/0.2.0/microbuild.core.0.2.0.nupkg";
+      sha256 = "0q4s45jskbyxfx4ay6znnvv94zma2wd85b8rwmwszd2nb0xl3194";
+    };
+  }
+  {
+    name = "microbuild.core.sentinel";
+    version = "1.0.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/1a5f89f6-d8da-4080-b15f-242650c914a8/nuget/v3/flat2/microbuild.core.sentinel/1.0.0/microbuild.core.sentinel.1.0.0.nupkg";
+      sha256 = "035kqx5fkapql108n222lz8psvxk04mv3dy1qg3h08i4b8j3dy8i";
+    };
+  }
+  {
+    name = "microsoft.bcl.asyncinterfaces";
+    version = "1.1.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/microsoft.bcl.asyncinterfaces/1.1.0/microsoft.bcl.asyncinterfaces.1.1.0.nupkg";
+      sha256 = "1dq5yw7cy6s42193yl4iqscfw5vzkjkgv0zyy32scr4jza6ni1a1";
+    };
+  }
+  {
+    name = "microsoft.build";
+    version = "14.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/microsoft.build/14.3.0/microsoft.build.14.3.0.nupkg";
+      sha256 = "1zamn3p8xxi0wsjlpln0y71ncb977f3fp08mvaz4wmbmi76nr0rz";
+    };
+  }
+  {
+    name = "microsoft.build.centralpackageversions";
+    version = "2.0.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/microsoft.build.centralpackageversions/2.0.1/microsoft.build.centralpackageversions.2.0.1.nupkg";
+      sha256 = "17cjiaj2b98q8s89168g42jb8rhwm6062jcbv57rbkdiiwdsn55k";
+    };
+  }
+  {
+    name = "microsoft.build.framework";
+    version = "14.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/microsoft.build.framework/14.3.0/microsoft.build.framework.14.3.0.nupkg";
+      sha256 = "0r7y1i7dbr3pb53fdrh268hyi627w85nzv2iblwyg8dzkfxraafd";
+    };
+  }
+  {
+    name = "microsoft.build.framework";
+    version = "15.5.180";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/microsoft.build.framework/15.5.180/microsoft.build.framework.15.5.180.nupkg";
+      sha256 = "064y3a711ikx9pm9d2wyms4i3k4f9hfvn3vymhwygg7yv7gcj92z";
+    };
+  }
+  {
+    name = "microsoft.build.nugetsdkresolver";
+    version = "5.9.1-rc.8";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/microsoft.build.nugetsdkresolver/5.9.1-rc.8/microsoft.build.nugetsdkresolver.5.9.1-rc.8.nupkg";
+      sha256 = "1dgxkal27rqlnz0ppbmbg4v7yla5wb9s2djk5cb6bpsqy2ngd88d";
+    };
+  }
+  {
+    name = "microsoft.build.tasks.git";
+    version = "1.1.0-beta-20206-02";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/1a5f89f6-d8da-4080-b15f-242650c914a8/nuget/v3/flat2/microsoft.build.tasks.git/1.1.0-beta-20206-02/microsoft.build.tasks.git.1.1.0-beta-20206-02.nupkg";
+      sha256 = "1gwlhvqlkvs5c7qjky726alf71xflbh3x970g3dypfczi0y6gccx";
+    };
+  }
+  {
+    name = "microsoft.build.utilities.core";
+    version = "14.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/microsoft.build.utilities.core/14.3.0/microsoft.build.utilities.core.14.3.0.nupkg";
+      sha256 = "0351nsnx12nzkss6vaqwwh7d7car7hrgyh0vyd4bl83c4x3ls1kb";
+    };
+  }
+  {
+    name = "microsoft.build.utilities.core";
+    version = "15.5.180";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/microsoft.build.utilities.core/15.5.180/microsoft.build.utilities.core.15.5.180.nupkg";
+      sha256 = "0c4bjhaqgc98bchln8p5d2p1vyn8qrha2b8gpn2l7bnznbcrd630";
+    };
+  }
+  {
+    name = "microsoft.codeanalysis.analyzers";
+    version = "2.6.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/microsoft.codeanalysis.analyzers/2.6.1/microsoft.codeanalysis.analyzers.2.6.1.nupkg";
+      sha256 = "1plk343h9fyxg08b9bcnlqyaq00cbnc1v73pj9nbcyphmgf5bqfp";
+    };
+  }
+  {
+    name = "microsoft.codeanalysis.build.tasks";
+    version = "3.9.0-5.21112.8";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/microsoft.codeanalysis.build.tasks/3.9.0-5.21112.8/microsoft.codeanalysis.build.tasks.3.9.0-5.21112.8.nupkg";
+      sha256 = "18wvmkpvp1yq288xryap3v07clhs36xiw6vyk4j59i2aqnjjnmc7";
+    };
+  }
+  {
+    name = "microsoft.codeanalysis.common";
+    version = "2.10.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/microsoft.codeanalysis.common/2.10.0/microsoft.codeanalysis.common.2.10.0.nupkg";
+      sha256 = "1l690xqrhmkasns5ghz0vqj8n2xyl5yrwan5gs52hwfxdwahqaaj";
+    };
+  }
+  {
+    name = "microsoft.codeanalysis.csharp";
+    version = "2.10.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/microsoft.codeanalysis.csharp/2.10.0/microsoft.codeanalysis.csharp.2.10.0.nupkg";
+      sha256 = "0saabsr81crawdzs2cnzyjp5cgg2hk5k6q7n0i0pxghswb0m4dxk";
+    };
+  }
+  {
+    name = "microsoft.codecoverage";
+    version = "16.6.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/microsoft.codecoverage/16.6.1/microsoft.codecoverage.16.6.1.nupkg";
+      sha256 = "01ffm4nflqdb93vq4xl0j3377x360fgx6c6h12mpkcy85ixbv3rl";
+    };
+  }
+  {
+    name = "microsoft.diagnostics.netcore.client";
+    version = "0.2.61701";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/microsoft.diagnostics.netcore.client/0.2.61701/microsoft.diagnostics.netcore.client.0.2.61701.nupkg";
+      sha256 = "1ic1607jj4ln8dbibf1fz5v9svk9x2kqlgvhndc6ijaqnbc4wcr1";
+    };
+  }
+  {
+    name = "microsoft.diagnostics.runtime";
+    version = "1.1.57604";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/microsoft.diagnostics.runtime/1.1.57604/microsoft.diagnostics.runtime.1.1.57604.nupkg";
+      sha256 = "1gm9gsg3h9ipcvwzp7jfns030c4b6l4cpkpyx9ccphlax9mvmfsi";
+    };
+  }
+  {
+    name = "microsoft.diagnostics.tracing.traceevent";
+    version = "2.0.49";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/microsoft.diagnostics.tracing.traceevent/2.0.49/microsoft.diagnostics.tracing.traceevent.2.0.49.nupkg";
+      sha256 = "08ww98l9a4cx52h3y8w1x5vzl4jf02a66wf9z1j2py406wjifja9";
+    };
+  }
+  {
+    name = "microsoft.dotnet.arcade.sdk";
+    version = "5.0.0-beta.21226.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/1a5f89f6-d8da-4080-b15f-242650c914a8/nuget/v3/flat2/microsoft.dotnet.arcade.sdk/5.0.0-beta.21226.1/microsoft.dotnet.arcade.sdk.5.0.0-beta.21226.1.nupkg";
+      sha256 = "1d7pczd99cladgmblq8g1dqw88n3aqg7rf8bpsabqrjjrz0pfi43";
+    };
+  }
+  {
+    name = "microsoft.dotnet.msbuildsdkresolver";
+    version = "5.0.300-servicing.21267.11";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/a8a526e9-91b3-4569-ba2d-ff08dbb7c110/nuget/v3/flat2/microsoft.dotnet.msbuildsdkresolver/5.0.300-servicing.21267.11/microsoft.dotnet.msbuildsdkresolver.5.0.300-servicing.21267.11.nupkg";
+      sha256 = "1jgg2akhpgfndqfdcyvm7b83nxva9h86nivc7p6dw8rcvazffbp5";
+    };
+  }
+  {
+    name = "microsoft.dotnet.platformabstractions";
+    version = "2.1.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/microsoft.dotnet.platformabstractions/2.1.0/microsoft.dotnet.platformabstractions.2.1.0.nupkg";
+      sha256 = "1qydvyyinj3b5mraazjal3n2k7jqhn05b6n1a2f3qjkqkxi63dmy";
+    };
+  }
+  {
+    name = "microsoft.dotnet.signtool";
+    version = "5.0.0-beta.21226.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/1a5f89f6-d8da-4080-b15f-242650c914a8/nuget/v3/flat2/microsoft.dotnet.signtool/5.0.0-beta.21226.1/microsoft.dotnet.signtool.5.0.0-beta.21226.1.nupkg";
+      sha256 = "1jd3648n3i9i1njx8wb9g8i29s3n5srx3whdhvrkwjm9g5n11gbj";
+    };
+  }
+  {
+    name = "microsoft.net.build.extensions";
+    version = "3.1.400-preview.20365.20";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d5f6139d-6136-4228-8b2d-9676e9e4eb3d/nuget/v3/flat2/microsoft.net.build.extensions/3.1.400-preview.20365.20/microsoft.net.build.extensions.3.1.400-preview.20365.20.nupkg";
+      sha256 = "1vmcj7p7jsr1lbkbxqqjsixkaxdazr5nwhhp1q402dgky9cayhd5";
+    };
+  }
+  {
+    name = "microsoft.net.compilers.toolset";
+    version = "3.9.0-5.21112.8";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/microsoft.net.compilers.toolset/3.9.0-5.21112.8/microsoft.net.compilers.toolset.3.9.0-5.21112.8.nupkg";
+      sha256 = "1drcxgay9ylhs6dr3alnxr4lfapzlr86w3mpwp0gn58mfj5m0g1h";
+    };
+  }
+  {
+    name = "microsoft.netcore.platforms";
+    version = "1.0.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/microsoft.netcore.platforms/1.0.1/microsoft.netcore.platforms.1.0.1.nupkg";
+      sha256 = "01al6cfxp68dscl15z7rxfw9zvhm64dncsw09a1vmdkacsa2v6lr";
+    };
+  }
+  {
+    name = "microsoft.netcore.platforms";
+    version = "1.1.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/microsoft.netcore.platforms/1.1.0/microsoft.netcore.platforms.1.1.0.nupkg";
+      sha256 = "08vh1r12g6ykjygq5d3vq09zylgb84l63k49jc4v8faw9g93iqqm";
+    };
+  }
+  {
+    name = "microsoft.netcore.targets";
+    version = "1.0.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/microsoft.netcore.targets/1.0.1/microsoft.netcore.targets.1.0.1.nupkg";
+      sha256 = "0ppdkwy6s9p7x9jix3v4402wb171cdiibq7js7i13nxpdky7074p";
+    };
+  }
+  {
+    name = "microsoft.netcore.targets";
+    version = "1.1.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/microsoft.netcore.targets/1.1.0/microsoft.netcore.targets.1.1.0.nupkg";
+      sha256 = "193xwf33fbm0ni3idxzbr5fdq3i2dlfgihsac9jj7whj0gd902nh";
+    };
+  }
+  {
+    name = "microsoft.netframework.referenceassemblies";
+    version = "1.0.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/microsoft.netframework.referenceassemblies/1.0.0/microsoft.netframework.referenceassemblies.1.0.0.nupkg";
+      sha256 = "0na724xhvqm63vq9y18fl9jw9q2v99bdwr353378s5fsi11qzxp9";
+    };
+  }
+  {
+    name = "microsoft.netframework.referenceassemblies.net45";
+    version = "1.0.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/microsoft.netframework.referenceassemblies.net45/1.0.0/microsoft.netframework.referenceassemblies.net45.1.0.0.nupkg";
+      sha256 = "1ipafi0zjrnzsfmwsisgp8z6m26cbw7vb3jj501nvz3v97b7d7lv";
+    };
+  }
+  {
+    name = "microsoft.netframework.referenceassemblies.net472";
+    version = "1.0.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/microsoft.netframework.referenceassemblies.net472/1.0.0/microsoft.netframework.referenceassemblies.net472.1.0.0.nupkg";
+      sha256 = "1bqinq2nxnpqxziypg1sqy3ly0nymxxjpn8fwkn3rl4vl6gdg3rc";
+    };
+  }
+  {
+    name = "microsoft.net.sdk";
+    version = "3.1.400-preview.20365.20";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d5f6139d-6136-4228-8b2d-9676e9e4eb3d/nuget/v3/flat2/microsoft.net.sdk/3.1.400-preview.20365.20/microsoft.net.sdk.3.1.400-preview.20365.20.nupkg";
+      sha256 = "02ann6rsnc6wl84wsk2fz7dpxcp5sq0b6jm3vv23av4b1f86f82y";
+    };
+  }
+  {
+    name = "microsoft.net.sdk.publish";
+    version = "3.1.300-servicing.20216.7";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d5f6139d-6136-4228-8b2d-9676e9e4eb3d/nuget/v3/flat2/microsoft.net.sdk.publish/3.1.300-servicing.20216.7/microsoft.net.sdk.publish.3.1.300-servicing.20216.7.nupkg";
+      sha256 = "1xivqihp2zrkmd4f65fgh9hn9ix75sqklbnanqlfk9dq67wscp41";
+    };
+  }
+  {
+    name = "microsoft.net.sdk.razor";
+    version = "3.1.6";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/microsoft.net.sdk.razor/3.1.6/microsoft.net.sdk.razor.3.1.6.nupkg";
+      sha256 = "1vw0zi0lq52frivq8mgfvm79rfx0v492q6fci1jls1zwwjk0v9ia";
+    };
+  }
+  {
+    name = "microsoft.net.sdk.web";
+    version = "3.1.300-servicing.20216.7";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d5f6139d-6136-4228-8b2d-9676e9e4eb3d/nuget/v3/flat2/microsoft.net.sdk.web/3.1.300-servicing.20216.7/microsoft.net.sdk.web.3.1.300-servicing.20216.7.nupkg";
+      sha256 = "001jd2iwww0vb5x5dii915z82syh1aj48n62bn8zi1d3chwacr51";
+    };
+  }
+  {
+    name = "microsoft.net.sdk.web.projectsystem";
+    version = "3.1.300-servicing.20216.7";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d5f6139d-6136-4228-8b2d-9676e9e4eb3d/nuget/v3/flat2/microsoft.net.sdk.web.projectsystem/3.1.300-servicing.20216.7/microsoft.net.sdk.web.projectsystem.3.1.300-servicing.20216.7.nupkg";
+      sha256 = "0601mix6l18h8afxxgdbbv695d0sjskady209z52sf4bvf4h4kal";
+    };
+  }
+  {
+    name = "microsoft.net.test.sdk";
+    version = "16.6.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/microsoft.net.test.sdk/16.6.1/microsoft.net.test.sdk.16.6.1.nupkg";
+      sha256 = "0jjdg468jc6pv2z764f3xc19lcr772nzjm9cjfqq3bqw8vkpzmhv";
+    };
+  }
+  {
+    name = "microsoft.sourcelink.azurerepos.git";
+    version = "1.1.0-beta-20206-02";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/1a5f89f6-d8da-4080-b15f-242650c914a8/nuget/v3/flat2/microsoft.sourcelink.azurerepos.git/1.1.0-beta-20206-02/microsoft.sourcelink.azurerepos.git.1.1.0-beta-20206-02.nupkg";
+      sha256 = "00hfjh8d3z5np51qgr1s3q4j7bl34mfiypf7nbxcmxa7cyj0rg65";
+    };
+  }
+  {
+    name = "microsoft.sourcelink.common";
+    version = "1.1.0-beta-20206-02";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/1a5f89f6-d8da-4080-b15f-242650c914a8/nuget/v3/flat2/microsoft.sourcelink.common/1.1.0-beta-20206-02/microsoft.sourcelink.common.1.1.0-beta-20206-02.nupkg";
+      sha256 = "1qv0k0apxv3j1pccki2rzakjfb0868hmg0968da0639f75s3glr9";
+    };
+  }
+  {
+    name = "microsoft.sourcelink.github";
+    version = "1.1.0-beta-20206-02";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/1a5f89f6-d8da-4080-b15f-242650c914a8/nuget/v3/flat2/microsoft.sourcelink.github/1.1.0-beta-20206-02/microsoft.sourcelink.github.1.1.0-beta-20206-02.nupkg";
+      sha256 = "0q1mgjjkwxvzn5v29pqiyg0j0jwi5qc0q04za9k1x138kliq2iba";
+    };
+  }
+  {
+    name = "microsoft.symboluploader.build.task";
+    version = "1.1.145102";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/1a5f89f6-d8da-4080-b15f-242650c914a8/nuget/v3/flat2/microsoft.symboluploader.build.task/1.1.145102/microsoft.symboluploader.build.task.1.1.145102.nupkg";
+      sha256 = "1nmd0cgj3kp2n1k8bzvvq7cfbpbrvk1k6mx9lpnzh1bv7v67rvm2";
+    };
+  }
+  {
+    name = "microsoft.visualstudio.sdk.embedinteroptypes";
+    version = "15.0.15";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/microsoft.visualstudio.sdk.embedinteroptypes/15.0.15/microsoft.visualstudio.sdk.embedinteroptypes.15.0.15.nupkg";
+      sha256 = "0chr3slzzcanwcyd9isx4gichqzmfh4zd3h83piw0r4xsww1wmpd";
+    };
+  }
+  {
+    name = "microsoft.visualstudio.setup.configuration.interop";
+    version = "1.16.30";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/microsoft.visualstudio.setup.configuration.interop/1.16.30/microsoft.visualstudio.setup.configuration.interop.1.16.30.nupkg";
+      sha256 = "14022lx03vdcqlvbbdmbsxg5pqfx1rfq2jywxlyaz9v68cvsb0g4";
+    };
+  }
+  {
+    name = "microsoft.web.xdt";
+    version = "3.0.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/microsoft.web.xdt/3.0.0/microsoft.web.xdt.3.0.0.nupkg";
+      sha256 = "18biff0hglccy34909zm9hc4lr9p8n2p155snq1dddp0av6m448n";
+    };
+  }
+  {
+    name = "microsoft.win32.primitives";
+    version = "4.0.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/microsoft.win32.primitives/4.0.1/microsoft.win32.primitives.4.0.1.nupkg";
+      sha256 = "1n8ap0cmljbqskxpf8fjzn7kh1vvlndsa75k01qig26mbw97k2q7";
+    };
+  }
+  {
+    name = "microsoft.win32.primitives";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/microsoft.win32.primitives/4.3.0/microsoft.win32.primitives.4.3.0.nupkg";
+      sha256 = "0j0c1wj4ndj21zsgivsc24whiya605603kxrbiw6wkfdync464wq";
+    };
+  }
+  {
+    name = "microsoft.win32.registry";
+    version = "4.5.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/microsoft.win32.registry/4.5.0/microsoft.win32.registry.4.5.0.nupkg";
+      sha256 = "1zapbz161ji8h82xiajgriq6zgzmb1f3ar517p2h63plhsq5gh2q";
+    };
+  }
+  {
+    name = "netstandard.library";
+    version = "1.6.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/netstandard.library/1.6.1/netstandard.library.1.6.1.nupkg";
+      sha256 = "1z70wvsx2d847a2cjfii7b83pjfs34q05gb037fdjikv5kbagml8";
+    };
+  }
+  {
+    name = "newtonsoft.json";
+    version = "11.0.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/newtonsoft.json/11.0.1/newtonsoft.json.11.0.1.nupkg";
+      sha256 = "1z68j07if1xf71lbsrgbia52r812i2dv541sy44ph4dzjjp7pd4m";
+    };
+  }
+  {
+    name = "newtonsoft.json";
+    version = "9.0.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/newtonsoft.json/9.0.1/newtonsoft.json.9.0.1.nupkg";
+      sha256 = "0mcy0i7pnfpqm4pcaiyzzji4g0c8i3a5gjz28rrr28110np8304r";
+    };
+  }
+  {
+    name = "nuget.build.tasks";
+    version = "5.9.1-rc.8";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/nuget.build.tasks/5.9.1-rc.8/nuget.build.tasks.5.9.1-rc.8.nupkg";
+      sha256 = "0610dh53gqmzbl70jxmn9jbvl0lv70qanis1q20rxnnyq6s2xb75";
+    };
+  }
+  {
+    name = "nuget.build.tasks.pack";
+    version = "5.9.1-rc.8";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/nuget.build.tasks.pack/5.9.1-rc.8/nuget.build.tasks.pack.5.9.1-rc.8.nupkg";
+      sha256 = "10qkdv165vz71z8ir3161ggaarbqk51gwg8n51iwxa5inz4y22lj";
+    };
+  }
+  {
+    name = "nuget.commandline";
+    version = "4.1.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/nuget.commandline/4.1.0/nuget.commandline.4.1.0.nupkg";
+      sha256 = "03ik0rcdl7vdwxa9fx5cgl98yzb45swr08jmrnjk1ympjqvf94s1";
+    };
+  }
+  {
+    name = "nuget.commands";
+    version = "5.9.1-rc.8";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/nuget.commands/5.9.1-rc.8/nuget.commands.5.9.1-rc.8.nupkg";
+      sha256 = "0rdziczdkrqwl6wjqs4w29c460kc69v9z2pghqjlkag25c7hqwlr";
+    };
+  }
+  {
+    name = "nuget.common";
+    version = "5.9.1-rc.8";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/nuget.common/5.9.1-rc.8/nuget.common.5.9.1-rc.8.nupkg";
+      sha256 = "056b1h4fvik6z2qc2s6qzz0s4acbipc50af14fbr7hd9h2fxya4c";
+    };
+  }
+  {
+    name = "nuget.configuration";
+    version = "5.9.1-rc.8";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/nuget.configuration/5.9.1-rc.8/nuget.configuration.5.9.1-rc.8.nupkg";
+      sha256 = "0x8vigf0sfp6kf1i98xcr4k84vci596x16hmajdm0zgv3p1w2kvk";
+    };
+  }
+  {
+    name = "nuget.credentials";
+    version = "5.9.1-rc.8";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/nuget.credentials/5.9.1-rc.8/nuget.credentials.5.9.1-rc.8.nupkg";
+      sha256 = "128vsgz4rfrp17ys7vbc978y6inmvki93mswm82qvphxymsyrc6v";
+    };
+  }
+  {
+    name = "nuget.dependencyresolver.core";
+    version = "5.9.1-rc.8";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/nuget.dependencyresolver.core/5.9.1-rc.8/nuget.dependencyresolver.core.5.9.1-rc.8.nupkg";
+      sha256 = "1q9a97s1z3a6fb4p82ag2lqnzl53895prbqwlbvckdw9c3rpz3gc";
+    };
+  }
+  {
+    name = "nuget.frameworks";
+    version = "5.9.1-rc.8";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/nuget.frameworks/5.9.1-rc.8/nuget.frameworks.5.9.1-rc.8.nupkg";
+      sha256 = "1n3mp9ns79yq4dwgj7h2av3b485mzgsw0qlj8z7p47krwlzp5hiv";
+    };
+  }
+  {
+    name = "nuget.librarymodel";
+    version = "5.9.1-rc.8";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/nuget.librarymodel/5.9.1-rc.8/nuget.librarymodel.5.9.1-rc.8.nupkg";
+      sha256 = "0sy8422c94wcg8ka85lnawq26mpixl79avk9m6y44lshrpga5v4v";
+    };
+  }
+  {
+    name = "nuget.packagemanagement";
+    version = "5.9.1-rc.8";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/nuget.packagemanagement/5.9.1-rc.8/nuget.packagemanagement.5.9.1-rc.8.nupkg";
+      sha256 = "0mcxdqq3hfhxyn99pp5b5x2cd8rrmw6z616cbd9y0s9j0i6hm4pg";
+    };
+  }
+  {
+    name = "nuget.packaging";
+    version = "5.9.1-rc.8";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/nuget.packaging/5.9.1-rc.8/nuget.packaging.5.9.1-rc.8.nupkg";
+      sha256 = "0x9c3v741nn6m2xgidna88fa4xj5avhv6asj73hqv4pzpdprlrhv";
+    };
+  }
+  {
+    name = "nuget.projectmodel";
+    version = "5.9.1-rc.8";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/nuget.projectmodel/5.9.1-rc.8/nuget.projectmodel.5.9.1-rc.8.nupkg";
+      sha256 = "1xjh7isw467nkc7dkfj3wlw69vi2cns66z152jrzjdmxmia3i3pv";
+    };
+  }
+  {
+    name = "nuget.protocol";
+    version = "5.9.1-rc.8";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/nuget.protocol/5.9.1-rc.8/nuget.protocol.5.9.1-rc.8.nupkg";
+      sha256 = "1rnrxzaciqhhgwd4by0dhkvfrm1h161vvmkvlcwaz2589sqq2dzq";
+    };
+  }
+  {
+    name = "nuget.resolver";
+    version = "5.9.1-rc.8";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/nuget.resolver/5.9.1-rc.8/nuget.resolver.5.9.1-rc.8.nupkg";
+      sha256 = "0q6dqg0d5f9y7ynwqmzkzwl6yan94azvm0cd385k210y8wn4364v";
+    };
+  }
+  {
+    name = "nuget.versioning";
+    version = "5.9.1-rc.8";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/nuget.versioning/5.9.1-rc.8/nuget.versioning.5.9.1-rc.8.nupkg";
+      sha256 = "1vv7z122ilsk2rsvjm6j3hpifb45g8wa1mgnq1kwi9k8b2dbb6vv";
+    };
+  }
+  {
+    name = "perfolizer";
+    version = "0.2.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/perfolizer/0.2.1/perfolizer.0.2.1.nupkg";
+      sha256 = "012aqqi3y3nfikqmn26yajpwd52c04zlzp0p91iyslw7mf26qncy";
+    };
+  }
+  {
+    name = "runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl/4.3.0/runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg";
+      sha256 = "16rnxzpk5dpbbl1x354yrlsbvwylrq456xzpsha1n9y3glnhyx9d";
+    };
+  }
+  {
+    name = "runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl/4.3.0/runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg";
+      sha256 = "0hkg03sgm2wyq8nqk6dbm9jh5vcq57ry42lkqdmfklrw89lsmr59";
+    };
+  }
+  {
+    name = "runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl/4.3.0/runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg";
+      sha256 = "0c2p354hjx58xhhz7wv6div8xpi90sc6ibdm40qin21bvi7ymcaa";
+    };
+  }
+  {
+    name = "runtime.native.system";
+    version = "4.0.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/runtime.native.system/4.0.0/runtime.native.system.4.0.0.nupkg";
+      sha256 = "1ppk69xk59ggacj9n7g6fyxvzmk1g5p4fkijm0d7xqfkig98qrkf";
+    };
+  }
+  {
+    name = "runtime.native.system";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/runtime.native.system/4.3.0/runtime.native.system.4.3.0.nupkg";
+      sha256 = "15hgf6zaq9b8br2wi1i3x0zvmk410nlmsmva9p0bbg73v6hml5k4";
+    };
+  }
+  {
+    name = "runtime.native.system.io.compression";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/runtime.native.system.io.compression/4.3.0/runtime.native.system.io.compression.4.3.0.nupkg";
+      sha256 = "1vvivbqsk6y4hzcid27pqpm5bsi6sc50hvqwbcx8aap5ifrxfs8d";
+    };
+  }
+  {
+    name = "runtime.native.system.security.cryptography.openssl";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/runtime.native.system.security.cryptography.openssl/4.3.0/runtime.native.system.security.cryptography.openssl.4.3.0.nupkg";
+      sha256 = "18pzfdlwsg2nb1jjjjzyb5qlgy6xjxzmhnfaijq5s2jw3cm3ab97";
+    };
+  }
+  {
+    name = "runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl/4.3.0/runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg";
+      sha256 = "0qyynf9nz5i7pc26cwhgi8j62ps27sqmf78ijcfgzab50z9g8ay3";
+    };
+  }
+  {
+    name = "runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl/4.3.0/runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg";
+      sha256 = "1klrs545awhayryma6l7g2pvnp9xy4z0r1i40r80zb45q3i9nbyf";
+    };
+  }
+  {
+    name = "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl/4.3.0/runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg";
+      sha256 = "0zcxjv5pckplvkg0r6mw3asggm7aqzbdjimhvsasb0cgm59x09l3";
+    };
+  }
+  {
+    name = "runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl/4.3.0/runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg";
+      sha256 = "0vhynn79ih7hw7cwjazn87rm9z9fj0rvxgzlab36jybgcpcgphsn";
+    };
+  }
+  {
+    name = "runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl/4.3.0/runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg";
+      sha256 = "160p68l2c7cqmyqjwxydcvgw7lvl1cr0znkw8fp24d1by9mqc8p3";
+    };
+  }
+  {
+    name = "runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl/4.3.0/runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg";
+      sha256 = "15zrc8fgd8zx28hdghcj5f5i34wf3l6bq5177075m2bc2j34jrqy";
+    };
+  }
+  {
+    name = "runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl/4.3.0/runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg";
+      sha256 = "1p4dgxax6p7rlgj4q73k73rslcnz4wdcv8q2flg1s8ygwcm58ld5";
+    };
+  }
+  {
+    name = "shouldly";
+    version = "3.0.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/shouldly/3.0.0/shouldly.3.0.0.nupkg";
+      sha256 = "1hg28w898kl84rx57sclb2z9b76v5hxlwxig1xnb6fr81aahzlw3";
+    };
+  }
+  {
+    name = "sn";
+    version = "1.0.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/1a5f89f6-d8da-4080-b15f-242650c914a8/nuget/v3/flat2/sn/1.0.0/sn.1.0.0.nupkg";
+      sha256 = "1012fcdc6vq2355v86h434s6p2nnqgpdapb7p25l4h39g5q8p1qs";
+    };
+  }
+  {
+    name = "system.appcontext";
+    version = "4.1.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.appcontext/4.1.0/system.appcontext.4.1.0.nupkg";
+      sha256 = "0fv3cma1jp4vgj7a8hqc9n7hr1f1kjp541s6z0q1r6nazb4iz9mz";
+    };
+  }
+  {
+    name = "system.appcontext";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.appcontext/4.3.0/system.appcontext.4.3.0.nupkg";
+      sha256 = "1649qvy3dar900z3g817h17nl8jp4ka5vcfmsr05kh0fshn7j3ya";
+    };
+  }
+  {
+    name = "system.buffers";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.buffers/4.3.0/system.buffers.4.3.0.nupkg";
+      sha256 = "0fgns20ispwrfqll4q1zc1waqcmylb3zc50ys9x8zlwxh9pmd9jy";
+    };
+  }
+  {
+    name = "system.buffers";
+    version = "4.4.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.buffers/4.4.0/system.buffers.4.4.0.nupkg";
+      sha256 = "183f8063w8zqn99pv0ni0nnwh7fgx46qzxamwnans55hhs2l0g19";
+    };
+  }
+  {
+    name = "system.buffers";
+    version = "4.5.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.buffers/4.5.0/system.buffers.4.5.0.nupkg";
+      sha256 = "1ywfqn4md6g3iilpxjn5dsr0f5lx6z0yvhqp4pgjcamygg73cz2c";
+    };
+  }
+  {
+    name = "system.buffers";
+    version = "4.5.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.buffers/4.5.1/system.buffers.4.5.1.nupkg";
+      sha256 = "04kb1mdrlcixj9zh1xdi5as0k0qi8byr5mi3p3jcxx72qz93s2y3";
+    };
+  }
+  {
+    name = "system.collections";
+    version = "4.0.11";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.collections/4.0.11/system.collections.4.0.11.nupkg";
+      sha256 = "1ga40f5lrwldiyw6vy67d0sg7jd7ww6kgwbksm19wrvq9hr0bsm6";
+    };
+  }
+  {
+    name = "system.collections";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.collections/4.3.0/system.collections.4.3.0.nupkg";
+      sha256 = "19r4y64dqyrq6k4706dnyhhw7fs24kpp3awak7whzss39dakpxk9";
+    };
+  }
+  {
+    name = "system.collections.concurrent";
+    version = "4.0.12";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.collections.concurrent/4.0.12/system.collections.concurrent.4.0.12.nupkg";
+      sha256 = "07y08kvrzpak873pmyxs129g1ch8l27zmg51pcyj2jvq03n0r0fc";
+    };
+  }
+  {
+    name = "system.collections.concurrent";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.collections.concurrent/4.3.0/system.collections.concurrent.4.3.0.nupkg";
+      sha256 = "0wi10md9aq33jrkh2c24wr2n9hrpyamsdhsxdcnf43b7y86kkii8";
+    };
+  }
+  {
+    name = "system.collections.immutable";
+    version = "1.2.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.collections.immutable/1.2.0/system.collections.immutable.1.2.0.nupkg";
+      sha256 = "1jm4pc666yiy7af1mcf7766v710gp0h40p228ghj6bavx7xfa38m";
+    };
+  }
+  {
+    name = "system.collections.immutable";
+    version = "1.5.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.collections.immutable/1.5.0/system.collections.immutable.1.5.0.nupkg";
+      sha256 = "1d5gjn5afnrf461jlxzawcvihz195gayqpcfbv6dd7pxa9ialn06";
+    };
+  }
+  {
+    name = "system.collections.immutable";
+    version = "5.0.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.collections.immutable/5.0.0/system.collections.immutable.5.0.0.nupkg";
+      sha256 = "1kvcllagxz2q92g81zkz81djkn2lid25ayjfgjalncyc68i15p0r";
+    };
+  }
+  {
+    name = "system.collections.nongeneric";
+    version = "4.0.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.collections.nongeneric/4.0.1/system.collections.nongeneric.4.0.1.nupkg";
+      sha256 = "19994r5y5bpdhj7di6w047apvil8lh06lh2c2yv9zc4fc5g9bl4d";
+    };
+  }
+  {
+    name = "system.configuration.configurationmanager";
+    version = "4.7.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.configuration.configurationmanager/4.7.0/system.configuration.configurationmanager.4.7.0.nupkg";
+      sha256 = "0pav0n21ghf2ax6fiwjbng29f27wkb4a2ddma0cqx04s97yyk25d";
+    };
+  }
+  {
+    name = "system.console";
+    version = "4.0.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.console/4.0.0/system.console.4.0.0.nupkg";
+      sha256 = "0ynxqbc3z1nwbrc11hkkpw9skw116z4y9wjzn7id49p9yi7mzmlf";
+    };
+  }
+  {
+    name = "system.console";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.console/4.3.0/system.console.4.3.0.nupkg";
+      sha256 = "1flr7a9x920mr5cjsqmsy9wgnv3lvd0h1g521pdr1lkb2qycy7ay";
+    };
+  }
+  {
+    name = "system.diagnostics.debug";
+    version = "4.0.11";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.diagnostics.debug/4.0.11/system.diagnostics.debug.4.0.11.nupkg";
+      sha256 = "0gmjghrqmlgzxivd2xl50ncbglb7ljzb66rlx8ws6dv8jm0d5siz";
+    };
+  }
+  {
+    name = "system.diagnostics.debug";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.diagnostics.debug/4.3.0/system.diagnostics.debug.4.3.0.nupkg";
+      sha256 = "00yjlf19wjydyr6cfviaph3vsjzg3d5nvnya26i2fvfg53sknh3y";
+    };
+  }
+  {
+    name = "system.diagnostics.diagnosticsource";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.diagnostics.diagnosticsource/4.3.0/system.diagnostics.diagnosticsource.4.3.0.nupkg";
+      sha256 = "0z6m3pbiy0qw6rn3n209rrzf9x1k4002zh90vwcrsym09ipm2liq";
+    };
+  }
+  {
+    name = "system.diagnostics.fileversioninfo";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.diagnostics.fileversioninfo/4.3.0/system.diagnostics.fileversioninfo.4.3.0.nupkg";
+      sha256 = "094hx249lb3vb336q7dg3v257hbxvz2jnalj695l7cg5kxzqwai7";
+    };
+  }
+  {
+    name = "system.diagnostics.process";
+    version = "4.1.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.diagnostics.process/4.1.0/system.diagnostics.process.4.1.0.nupkg";
+      sha256 = "061lrcs7xribrmq7kab908lww6kn2xn1w3rdc41q189y0jibl19s";
+    };
+  }
+  {
+    name = "system.diagnostics.stacktrace";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.diagnostics.stacktrace/4.3.0/system.diagnostics.stacktrace.4.3.0.nupkg";
+      sha256 = "0ash4h9k0m7xsm0yl79r0ixrdz369h7y922wipp5gladmlbvpyjd";
+    };
+  }
+  {
+    name = "system.diagnostics.tools";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.diagnostics.tools/4.3.0/system.diagnostics.tools.4.3.0.nupkg";
+      sha256 = "0in3pic3s2ddyibi8cvgl102zmvp9r9mchh82ns9f0ms4basylw1";
+    };
+  }
+  {
+    name = "system.diagnostics.tracesource";
+    version = "4.0.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.diagnostics.tracesource/4.0.0/system.diagnostics.tracesource.4.0.0.nupkg";
+      sha256 = "1mc7r72xznczzf6mz62dm8xhdi14if1h8qgx353xvhz89qyxsa3h";
+    };
+  }
+  {
+    name = "system.diagnostics.tracing";
+    version = "4.1.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.diagnostics.tracing/4.1.0/system.diagnostics.tracing.4.1.0.nupkg";
+      sha256 = "1d2r76v1x610x61ahfpigda89gd13qydz6vbwzhpqlyvq8jj6394";
+    };
+  }
+  {
+    name = "system.diagnostics.tracing";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.diagnostics.tracing/4.3.0/system.diagnostics.tracing.4.3.0.nupkg";
+      sha256 = "1m3bx6c2s958qligl67q7grkwfz3w53hpy7nc97mh6f7j5k168c4";
+    };
+  }
+  {
+    name = "system.dynamic.runtime";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.dynamic.runtime/4.3.0/system.dynamic.runtime.4.3.0.nupkg";
+      sha256 = "1d951hrvrpndk7insiag80qxjbf2y0y39y8h5hnq9612ws661glk";
+    };
+  }
+  {
+    name = "system.globalization";
+    version = "4.0.11";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.globalization/4.0.11/system.globalization.4.0.11.nupkg";
+      sha256 = "070c5jbas2v7smm660zaf1gh0489xanjqymkvafcs4f8cdrs1d5d";
+    };
+  }
+  {
+    name = "system.globalization";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.globalization/4.3.0/system.globalization.4.3.0.nupkg";
+      sha256 = "1cp68vv683n6ic2zqh2s1fn4c2sd87g5hpp6l4d4nj4536jz98ki";
+    };
+  }
+  {
+    name = "system.globalization.calendars";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.globalization.calendars/4.3.0/system.globalization.calendars.4.3.0.nupkg";
+      sha256 = "1xwl230bkakzzkrggy1l1lxmm3xlhk4bq2pkv790j5lm8g887lxq";
+    };
+  }
+  {
+    name = "system.io";
+    version = "4.1.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.io/4.1.0/system.io.4.1.0.nupkg";
+      sha256 = "1g0yb8p11vfd0kbkyzlfsbsp5z44lwsvyc0h3dpw6vqnbi035ajp";
+    };
+  }
+  {
+    name = "system.io";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.io/4.3.0/system.io.4.3.0.nupkg";
+      sha256 = "05l9qdrzhm4s5dixmx68kxwif4l99ll5gqmh7rqgw554fx0agv5f";
+    };
+  }
+  {
+    name = "system.io.compression";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.io.compression/4.3.0/system.io.compression.4.3.0.nupkg";
+      sha256 = "084zc82yi6yllgda0zkgl2ys48sypiswbiwrv7irb3r0ai1fp4vz";
+    };
+  }
+  {
+    name = "system.io.compression.zipfile";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.io.compression.zipfile/4.3.0/system.io.compression.zipfile.4.3.0.nupkg";
+      sha256 = "1yxy5pq4dnsm9hlkg9ysh5f6bf3fahqqb6p8668ndy5c0lk7w2ar";
+    };
+  }
+  {
+    name = "system.io.filesystem";
+    version = "4.0.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.io.filesystem/4.0.1/system.io.filesystem.4.0.1.nupkg";
+      sha256 = "0kgfpw6w4djqra3w5crrg8xivbanh1w9dh3qapb28q060wb9flp1";
+    };
+  }
+  {
+    name = "system.io.filesystem";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.io.filesystem/4.3.0/system.io.filesystem.4.3.0.nupkg";
+      sha256 = "0z2dfrbra9i6y16mm9v1v6k47f0fm617vlb7s5iybjjsz6g1ilmw";
+    };
+  }
+  {
+    name = "system.io.filesystem.primitives";
+    version = "4.0.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.io.filesystem.primitives/4.0.1/system.io.filesystem.primitives.4.0.1.nupkg";
+      sha256 = "1s0mniajj3lvbyf7vfb5shp4ink5yibsx945k6lvxa96r8la1612";
+    };
+  }
+  {
+    name = "system.io.filesystem.primitives";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.io.filesystem.primitives/4.3.0/system.io.filesystem.primitives.4.3.0.nupkg";
+      sha256 = "0j6ndgglcf4brg2lz4wzsh1av1gh8xrzdsn9f0yznskhqn1xzj9c";
+    };
+  }
+  {
+    name = "system.linq";
+    version = "4.1.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.linq/4.1.0/system.linq.4.1.0.nupkg";
+      sha256 = "1ppg83svb39hj4hpp5k7kcryzrf3sfnm08vxd5sm2drrijsla2k5";
+    };
+  }
+  {
+    name = "system.linq";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.linq/4.3.0/system.linq.4.3.0.nupkg";
+      sha256 = "1w0gmba695rbr80l1k2h4mrwzbzsyfl2z4klmpbsvsg5pm4a56s7";
+    };
+  }
+  {
+    name = "system.linq.expressions";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.linq.expressions/4.3.0/system.linq.expressions.4.3.0.nupkg";
+      sha256 = "0ky2nrcvh70rqq88m9a5yqabsl4fyd17bpr63iy2mbivjs2nyypv";
+    };
+  }
+  {
+    name = "system.management";
+    version = "4.5.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.management/4.5.0/system.management.4.5.0.nupkg";
+      sha256 = "19z5x23n21xi94bgl531l9hrm64nyw9d5fpd7klfvr5xfsbh9jwr";
+    };
+  }
+  {
+    name = "system.memory";
+    version = "4.5.3";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.memory/4.5.3/system.memory.4.5.3.nupkg";
+      sha256 = "0naqahm3wljxb5a911d37mwjqjdxv9l0b49p5dmfyijvni2ppy8a";
+    };
+  }
+  {
+    name = "system.memory";
+    version = "4.5.4";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.memory/4.5.4/system.memory.4.5.4.nupkg";
+      sha256 = "14gbbs22mcxwggn0fcfs1b062521azb9fbb7c113x0mq6dzq9h6y";
+    };
+  }
+  {
+    name = "system.net.http";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.net.http/4.3.0/system.net.http.4.3.0.nupkg";
+      sha256 = "1i4gc757xqrzflbk7kc5ksn20kwwfjhw9w7pgdkn19y3cgnl302j";
+    };
+  }
+  {
+    name = "system.net.primitives";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.net.primitives/4.3.0/system.net.primitives.4.3.0.nupkg";
+      sha256 = "0c87k50rmdgmxx7df2khd9qj7q35j9rzdmm2572cc55dygmdk3ii";
+    };
+  }
+  {
+    name = "system.net.sockets";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.net.sockets/4.3.0/system.net.sockets.4.3.0.nupkg";
+      sha256 = "1ssa65k6chcgi6mfmzrznvqaxk8jp0gvl77xhf1hbzakjnpxspla";
+    };
+  }
+  {
+    name = "system.numerics.vectors";
+    version = "4.4.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.numerics.vectors/4.4.0/system.numerics.vectors.4.4.0.nupkg";
+      sha256 = "0rdvma399070b0i46c4qq1h2yvjj3k013sqzkilz4bz5cwmx1rba";
+    };
+  }
+  {
+    name = "system.numerics.vectors";
+    version = "4.5.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.numerics.vectors/4.5.0/system.numerics.vectors.4.5.0.nupkg";
+      sha256 = "1kzrj37yzawf1b19jq0253rcs8hsq1l2q8g69d7ipnhzb0h97m59";
+    };
+  }
+  {
+    name = "system.objectmodel";
+    version = "4.0.12";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.objectmodel/4.0.12/system.objectmodel.4.0.12.nupkg";
+      sha256 = "1sybkfi60a4588xn34nd9a58png36i0xr4y4v4kqpg8wlvy5krrj";
+    };
+  }
+  {
+    name = "system.objectmodel";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.objectmodel/4.3.0/system.objectmodel.4.3.0.nupkg";
+      sha256 = "191p63zy5rpqx7dnrb3h7prvgixmk168fhvvkkvhlazncf8r3nc2";
+    };
+  }
+  {
+    name = "system.private.datacontractserialization";
+    version = "4.1.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.private.datacontractserialization/4.1.1/system.private.datacontractserialization.4.1.1.nupkg";
+      sha256 = "1xk9wvgzipssp1393nsg4n16zbr5481k03nkdlj954hzq5jkx89r";
+    };
+  }
+  {
+    name = "system.reflection";
+    version = "4.1.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.reflection/4.1.0/system.reflection.4.1.0.nupkg";
+      sha256 = "1js89429pfw79mxvbzp8p3q93il6rdff332hddhzi5wqglc4gml9";
+    };
+  }
+  {
+    name = "system.reflection";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.reflection/4.3.0/system.reflection.4.3.0.nupkg";
+      sha256 = "0xl55k0mw8cd8ra6dxzh974nxif58s3k1rjv1vbd7gjbjr39j11m";
+    };
+  }
+  {
+    name = "system.reflection.emit";
+    version = "4.0.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.reflection.emit/4.0.1/system.reflection.emit.4.0.1.nupkg";
+      sha256 = "0ydqcsvh6smi41gyaakglnv252625hf29f7kywy2c70nhii2ylqp";
+    };
+  }
+  {
+    name = "system.reflection.emit";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.reflection.emit/4.3.0/system.reflection.emit.4.3.0.nupkg";
+      sha256 = "11f8y3qfysfcrscjpjym9msk7lsfxkk4fmz9qq95kn3jd0769f74";
+    };
+  }
+  {
+    name = "system.reflection.emit.ilgeneration";
+    version = "4.0.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.reflection.emit.ilgeneration/4.0.1/system.reflection.emit.ilgeneration.4.0.1.nupkg";
+      sha256 = "1pcd2ig6bg144y10w7yxgc9d22r7c7ww7qn1frdfwgxr24j9wvv0";
+    };
+  }
+  {
+    name = "system.reflection.emit.lightweight";
+    version = "4.0.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.reflection.emit.lightweight/4.0.1/system.reflection.emit.lightweight.4.0.1.nupkg";
+      sha256 = "1s4b043zdbx9k39lfhvsk68msv1nxbidhkq6nbm27q7sf8xcsnxr";
+    };
+  }
+  {
+    name = "system.reflection.emit.lightweight";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.reflection.emit.lightweight/4.3.0/system.reflection.emit.lightweight.4.3.0.nupkg";
+      sha256 = "0ql7lcakycrvzgi9kxz1b3lljd990az1x6c4jsiwcacrvimpib5c";
+    };
+  }
+  {
+    name = "system.reflection.extensions";
+    version = "4.0.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.reflection.extensions/4.0.1/system.reflection.extensions.4.0.1.nupkg";
+      sha256 = "0m7wqwq0zqq9gbpiqvgk3sr92cbrw7cp3xn53xvw7zj6rz6fdirn";
+    };
+  }
+  {
+    name = "system.reflection.extensions";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.reflection.extensions/4.3.0/system.reflection.extensions.4.3.0.nupkg";
+      sha256 = "02bly8bdc98gs22lqsfx9xicblszr2yan7v2mmw3g7hy6miq5hwq";
+    };
+  }
+  {
+    name = "system.reflection.metadata";
+    version = "1.6.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.reflection.metadata/1.6.0/system.reflection.metadata.1.6.0.nupkg";
+      sha256 = "1wdbavrrkajy7qbdblpbpbalbdl48q3h34cchz24gvdgyrlf15r4";
+    };
+  }
+  {
+    name = "system.reflection.metadata";
+    version = "5.0.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.reflection.metadata/5.0.0/system.reflection.metadata.5.0.0.nupkg";
+      sha256 = "17qsl5nanlqk9iz0l5wijdn6ka632fs1m1fvx18dfgswm258r3ss";
+    };
+  }
+  {
+    name = "system.reflection.primitives";
+    version = "4.0.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.reflection.primitives/4.0.1/system.reflection.primitives.4.0.1.nupkg";
+      sha256 = "1bangaabhsl4k9fg8khn83wm6yial8ik1sza7401621jc6jrym28";
+    };
+  }
+  {
+    name = "system.reflection.primitives";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.reflection.primitives/4.3.0/system.reflection.primitives.4.3.0.nupkg";
+      sha256 = "04xqa33bld78yv5r93a8n76shvc8wwcdgr1qvvjh959g3rc31276";
+    };
+  }
+  {
+    name = "system.reflection.typeextensions";
+    version = "4.1.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.reflection.typeextensions/4.1.0/system.reflection.typeextensions.4.1.0.nupkg";
+      sha256 = "1bjli8a7sc7jlxqgcagl9nh8axzfl11f4ld3rjqsyxc516iijij7";
+    };
+  }
+  {
+    name = "system.resources.extensions";
+    version = "4.6.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.resources.extensions/4.6.0/system.resources.extensions.4.6.0.nupkg";
+      sha256 = "0inch9jgchgmsg3xjivbhh9mpin40mhdd8dgf4i1p3g42i0hzc0j";
+    };
+  }
+  {
+    name = "system.resources.reader";
+    version = "4.0.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.resources.reader/4.0.0/system.resources.reader.4.0.0.nupkg";
+      sha256 = "1jafi73dcf1lalrir46manq3iy6xnxk2z7gpdpwg4wqql7dv3ril";
+    };
+  }
+  {
+    name = "system.resources.resourcemanager";
+    version = "4.0.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.resources.resourcemanager/4.0.1/system.resources.resourcemanager.4.0.1.nupkg";
+      sha256 = "0b4i7mncaf8cnai85jv3wnw6hps140cxz8vylv2bik6wyzgvz7bi";
+    };
+  }
+  {
+    name = "system.resources.resourcemanager";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.resources.resourcemanager/4.3.0/system.resources.resourcemanager.4.3.0.nupkg";
+      sha256 = "0sjqlzsryb0mg4y4xzf35xi523s4is4hz9q4qgdvlvgivl7qxn49";
+    };
+  }
+  {
+    name = "system.runtime";
+    version = "4.1.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.runtime/4.1.0/system.runtime.4.1.0.nupkg";
+      sha256 = "02hdkgk13rvsd6r9yafbwzss8kr55wnj8d5c7xjnp8gqrwc8sn0m";
+    };
+  }
+  {
+    name = "system.runtime";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.runtime/4.3.0/system.runtime.4.3.0.nupkg";
+      sha256 = "066ixvgbf2c929kgknshcxqj6539ax7b9m570cp8n179cpfkapz7";
+    };
+  }
+  {
+    name = "system.runtime.compilerservices.unsafe";
+    version = "5.0.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.runtime.compilerservices.unsafe/5.0.0/system.runtime.compilerservices.unsafe.5.0.0.nupkg";
+      sha256 = "02k25ivn50dmqx5jn8hawwmz24yf0454fjd823qk6lygj9513q4x";
+    };
+  }
+  {
+    name = "system.runtime.extensions";
+    version = "4.1.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.runtime.extensions/4.1.0/system.runtime.extensions.4.1.0.nupkg";
+      sha256 = "0rw4rm4vsm3h3szxp9iijc3ksyviwsv6f63dng3vhqyg4vjdkc2z";
+    };
+  }
+  {
+    name = "system.runtime.extensions";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.runtime.extensions/4.3.0/system.runtime.extensions.4.3.0.nupkg";
+      sha256 = "1ykp3dnhwvm48nap8q23893hagf665k0kn3cbgsqpwzbijdcgc60";
+    };
+  }
+  {
+    name = "system.runtime.handles";
+    version = "4.0.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.runtime.handles/4.0.1/system.runtime.handles.4.0.1.nupkg";
+      sha256 = "1g0zrdi5508v49pfm3iii2hn6nm00bgvfpjq1zxknfjrxxa20r4g";
+    };
+  }
+  {
+    name = "system.runtime.handles";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.runtime.handles/4.3.0/system.runtime.handles.4.3.0.nupkg";
+      sha256 = "0sw2gfj2xr7sw9qjn0j3l9yw07x73lcs97p8xfc9w1x9h5g5m7i8";
+    };
+  }
+  {
+    name = "system.runtime.interopservices";
+    version = "4.1.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.runtime.interopservices/4.1.0/system.runtime.interopservices.4.1.0.nupkg";
+      sha256 = "01kxqppx3dr3b6b286xafqilv4s2n0gqvfgzfd4z943ga9i81is1";
+    };
+  }
+  {
+    name = "system.runtime.interopservices";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.runtime.interopservices/4.3.0/system.runtime.interopservices.4.3.0.nupkg";
+      sha256 = "00hywrn4g7hva1b2qri2s6rabzwgxnbpw9zfxmz28z09cpwwgh7j";
+    };
+  }
+  {
+    name = "system.runtime.interopservices.runtimeinformation";
+    version = "4.0.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.runtime.interopservices.runtimeinformation/4.0.0/system.runtime.interopservices.runtimeinformation.4.0.0.nupkg";
+      sha256 = "0glmvarf3jz5xh22iy3w9v3wyragcm4hfdr17v90vs7vcrm7fgp6";
+    };
+  }
+  {
+    name = "system.runtime.interopservices.runtimeinformation";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.runtime.interopservices.runtimeinformation/4.3.0/system.runtime.interopservices.runtimeinformation.4.3.0.nupkg";
+      sha256 = "0q18r1sh4vn7bvqgd6dmqlw5v28flbpj349mkdish2vjyvmnb2ii";
+    };
+  }
+  {
+    name = "system.runtime.numerics";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.runtime.numerics/4.3.0/system.runtime.numerics.4.3.0.nupkg";
+      sha256 = "19rav39sr5dky7afygh309qamqqmi9kcwvz3i0c5700v0c5cg61z";
+    };
+  }
+  {
+    name = "system.runtime.serialization.primitives";
+    version = "4.1.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.runtime.serialization.primitives/4.1.1/system.runtime.serialization.primitives.4.1.1.nupkg";
+      sha256 = "042rfjixknlr6r10vx2pgf56yming8lkjikamg3g4v29ikk78h7k";
+    };
+  }
+  {
+    name = "system.runtime.serialization.xml";
+    version = "4.1.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.runtime.serialization.xml/4.1.1/system.runtime.serialization.xml.4.1.1.nupkg";
+      sha256 = "11747an5gbz821pwahaim3v82gghshnj9b5c4cw539xg5a3gq7rk";
+    };
+  }
+  {
+    name = "system.security.accesscontrol";
+    version = "4.5.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.security.accesscontrol/4.5.0/system.security.accesscontrol.4.5.0.nupkg";
+      sha256 = "1wvwanz33fzzbnd2jalar0p0z3x0ba53vzx1kazlskp7pwyhlnq0";
+    };
+  }
+  {
+    name = "system.security.accesscontrol";
+    version = "4.7.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.security.accesscontrol/4.7.0/system.security.accesscontrol.4.7.0.nupkg";
+      sha256 = "0n0k0w44flkd8j0xw7g3g3vhw7dijfm51f75xkm1qxnbh4y45mpz";
+    };
+  }
+  {
+    name = "system.security.cryptography.algorithms";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.security.cryptography.algorithms/4.3.0/system.security.cryptography.algorithms.4.3.0.nupkg";
+      sha256 = "03sq183pfl5kp7gkvq77myv7kbpdnq3y0xj7vi4q1kaw54sny0ml";
+    };
+  }
+  {
+    name = "system.security.cryptography.encoding";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.security.cryptography.encoding/4.3.0/system.security.cryptography.encoding.4.3.0.nupkg";
+      sha256 = "1jr6w70igqn07k5zs1ph6xja97hxnb3mqbspdrff6cvssgrixs32";
+    };
+  }
+  {
+    name = "system.security.cryptography.primitives";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.security.cryptography.primitives/4.3.0/system.security.cryptography.primitives.4.3.0.nupkg";
+      sha256 = "0pyzncsv48zwly3lw4f2dayqswcfvdwq2nz0dgwmi7fj3pn64wby";
+    };
+  }
+  {
+    name = "system.security.cryptography.x509certificates";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.security.cryptography.x509certificates/4.3.0/system.security.cryptography.x509certificates.4.3.0.nupkg";
+      sha256 = "0valjcz5wksbvijylxijjxb1mp38mdhv03r533vnx1q3ikzdav9h";
+    };
+  }
+  {
+    name = "system.security.permissions";
+    version = "4.7.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.security.permissions/4.7.0/system.security.permissions.4.7.0.nupkg";
+      sha256 = "13f366sj36jwbvld957gk2q64k2xbj48r8b0k9avrri2nlq1fs04";
+    };
+  }
+  {
+    name = "system.security.principal.windows";
+    version = "4.5.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.security.principal.windows/4.5.0/system.security.principal.windows.4.5.0.nupkg";
+      sha256 = "0rmj89wsl5yzwh0kqjgx45vzf694v9p92r4x4q6yxldk1cv1hi86";
+    };
+  }
+  {
+    name = "system.security.principal.windows";
+    version = "4.7.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.security.principal.windows/4.7.0/system.security.principal.windows.4.7.0.nupkg";
+      sha256 = "1a56ls5a9sr3ya0nr086sdpa9qv0abv31dd6fp27maqa9zclqq5d";
+    };
+  }
+  {
+    name = "system.text.encoding";
+    version = "4.0.11";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.text.encoding/4.0.11/system.text.encoding.4.0.11.nupkg";
+      sha256 = "1dyqv0hijg265dwxg6l7aiv74102d6xjiwplh2ar1ly6xfaa4iiw";
+    };
+  }
+  {
+    name = "system.text.encoding";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.text.encoding/4.3.0/system.text.encoding.4.3.0.nupkg";
+      sha256 = "1f04lkir4iladpp51sdgmis9dj4y8v08cka0mbmsy0frc9a4gjqr";
+    };
+  }
+  {
+    name = "system.text.encoding.codepages";
+    version = "4.0.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.text.encoding.codepages/4.0.1/system.text.encoding.codepages.4.0.1.nupkg";
+      sha256 = "00wpm3b9y0k996rm9whxprngm8l500ajmzgy2ip9pgwk0icp06y3";
+    };
+  }
+  {
+    name = "system.text.encoding.codepages";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.text.encoding.codepages/4.3.0/system.text.encoding.codepages.4.3.0.nupkg";
+      sha256 = "0lgxg1gn7pg7j0f942pfdc9q7wamzxsgq3ng248ikdasxz0iadkv";
+    };
+  }
+  {
+    name = "system.text.encoding.extensions";
+    version = "4.0.11";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.text.encoding.extensions/4.0.11/system.text.encoding.extensions.4.0.11.nupkg";
+      sha256 = "08nsfrpiwsg9x5ml4xyl3zyvjfdi4mvbqf93kjdh11j4fwkznizs";
+    };
+  }
+  {
+    name = "system.text.encoding.extensions";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.text.encoding.extensions/4.3.0/system.text.encoding.extensions.4.3.0.nupkg";
+      sha256 = "11q1y8hh5hrp5a3kw25cb6l00v5l5dvirkz8jr3sq00h1xgcgrxy";
+    };
+  }
+  {
+    name = "system.text.encodings.web";
+    version = "4.7.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.text.encodings.web/4.7.0/system.text.encodings.web.4.7.0.nupkg";
+      sha256 = "0sd3bihfar5rwm6nib4lhyys306nkm02qvk6p6sgzmnlfmma2wn3";
+    };
+  }
+  {
+    name = "system.text.json";
+    version = "4.7.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.text.json/4.7.0/system.text.json.4.7.0.nupkg";
+      sha256 = "0fp3xrysccm5dkaac4yb51d793vywxks978kkl5x4db9gw29rfdr";
+    };
+  }
+  {
+    name = "system.text.regularexpressions";
+    version = "4.1.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.text.regularexpressions/4.1.0/system.text.regularexpressions.4.1.0.nupkg";
+      sha256 = "1mw7vfkkyd04yn2fbhm38msk7dz2xwvib14ygjsb8dq2lcvr18y7";
+    };
+  }
+  {
+    name = "system.text.regularexpressions";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.text.regularexpressions/4.3.0/system.text.regularexpressions.4.3.0.nupkg";
+      sha256 = "1bgq51k7fwld0njylfn7qc5fmwrk2137gdq7djqdsw347paa9c2l";
+    };
+  }
+  {
+    name = "system.threading";
+    version = "4.0.11";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.threading/4.0.11/system.threading.4.0.11.nupkg";
+      sha256 = "19x946h926bzvbsgj28csn46gak2crv2skpwsx80hbgazmkgb1ls";
+    };
+  }
+  {
+    name = "system.threading";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.threading/4.3.0/system.threading.4.3.0.nupkg";
+      sha256 = "0rw9wfamvhayp5zh3j7p1yfmx9b5khbf4q50d8k5rk993rskfd34";
+    };
+  }
+  {
+    name = "system.threading.tasks";
+    version = "4.0.11";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.threading.tasks/4.0.11/system.threading.tasks.4.0.11.nupkg";
+      sha256 = "0nr1r41rak82qfa5m0lhk9mp0k93bvfd7bbd9sdzwx9mb36g28p5";
+    };
+  }
+  {
+    name = "system.threading.tasks";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.threading.tasks/4.3.0/system.threading.tasks.4.3.0.nupkg";
+      sha256 = "134z3v9abw3a6jsw17xl3f6hqjpak5l682k2vz39spj4kmydg6k7";
+    };
+  }
+  {
+    name = "system.threading.tasks.dataflow";
+    version = "4.9.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.threading.tasks.dataflow/4.9.0/system.threading.tasks.dataflow.4.9.0.nupkg";
+      sha256 = "1g6s9pjg4z8iy98df60y9a01imdqy59zd767vz74rrng78jl2dk5";
+    };
+  }
+  {
+    name = "system.threading.tasks.extensions";
+    version = "4.0.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.threading.tasks.extensions/4.0.0/system.threading.tasks.extensions.4.0.0.nupkg";
+      sha256 = "1cb51z062mvc2i8blpzmpn9d9mm4y307xrwi65di8ri18cz5r1zr";
+    };
+  }
+  {
+    name = "system.threading.tasks.extensions";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.threading.tasks.extensions/4.3.0/system.threading.tasks.extensions.4.3.0.nupkg";
+      sha256 = "1xxcx2xh8jin360yjwm4x4cf5y3a2bwpn2ygkfkwkicz7zk50s2z";
+    };
+  }
+  {
+    name = "system.threading.tasks.extensions";
+    version = "4.5.2";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.threading.tasks.extensions/4.5.2/system.threading.tasks.extensions.4.5.2.nupkg";
+      sha256 = "1sh63dz0dymqcwmprp0nadm77b83vmm7lyllpv578c397bslb8hj";
+    };
+  }
+  {
+    name = "system.threading.tasks.parallel";
+    version = "4.0.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.threading.tasks.parallel/4.0.1/system.threading.tasks.parallel.4.0.1.nupkg";
+      sha256 = "114wdg32hr46dfsnns3pgs67kcha5jn47p5gg0mhxfn5vrkr2p75";
+    };
+  }
+  {
+    name = "system.threading.tasks.parallel";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.threading.tasks.parallel/4.3.0/system.threading.tasks.parallel.4.3.0.nupkg";
+      sha256 = "1rr3qa4hxwyj531s4nb3bwrxnxxwz617i0n9gh6x7nr7dd3ayzgh";
+    };
+  }
+  {
+    name = "system.threading.thread";
+    version = "4.0.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.threading.thread/4.0.0/system.threading.thread.4.0.0.nupkg";
+      sha256 = "1gxxm5fl36pjjpnx1k688dcw8m9l7nmf802nxis6swdaw8k54jzc";
+    };
+  }
+  {
+    name = "system.threading.thread";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.threading.thread/4.3.0/system.threading.thread.4.3.0.nupkg";
+      sha256 = "0y2xiwdfcph7znm2ysxanrhbqqss6a3shi1z3c779pj2s523mjx4";
+    };
+  }
+  {
+    name = "system.threading.timer";
+    version = "4.0.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.threading.timer/4.0.1/system.threading.timer.4.0.1.nupkg";
+      sha256 = "15n54f1f8nn3mjcjrlzdg6q3520571y012mx7v991x2fvp73lmg6";
+    };
+  }
+  {
+    name = "system.threading.timer";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.threading.timer/4.3.0/system.threading.timer.4.3.0.nupkg";
+      sha256 = "1nx773nsx6z5whv8kaa1wjh037id2f1cxhb69pvgv12hd2b6qs56";
+    };
+  }
+  {
+    name = "system.valuetuple";
+    version = "4.5.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.valuetuple/4.5.0/system.valuetuple.4.5.0.nupkg";
+      sha256 = "00k8ja51d0f9wrq4vv5z2jhq8hy31kac2rg0rv06prylcybzl8cy";
+    };
+  }
+  {
+    name = "system.xml.readerwriter";
+    version = "4.0.11";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.xml.readerwriter/4.0.11/system.xml.readerwriter.4.0.11.nupkg";
+      sha256 = "0c6ky1jk5ada9m94wcadih98l6k1fvf6vi7vhn1msjixaha419l5";
+    };
+  }
+  {
+    name = "system.xml.readerwriter";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.xml.readerwriter/4.3.0/system.xml.readerwriter.4.3.0.nupkg";
+      sha256 = "0c47yllxifzmh8gq6rq6l36zzvw4kjvlszkqa9wq3fr59n0hl3s1";
+    };
+  }
+  {
+    name = "system.xml.xdocument";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.xml.xdocument/4.3.0/system.xml.xdocument.4.3.0.nupkg";
+      sha256 = "08h8fm4l77n0nd4i4fk2386y809bfbwqb7ih9d7564ifcxr5ssxd";
+    };
+  }
+  {
+    name = "system.xml.xmldocument";
+    version = "4.0.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.xml.xmldocument/4.0.1/system.xml.xmldocument.4.0.1.nupkg";
+      sha256 = "0ihsnkvyc76r4dcky7v3ansnbyqjzkbyyia0ir5zvqirzan0bnl1";
+    };
+  }
+  {
+    name = "system.xml.xmldocument";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.xml.xmldocument/4.3.0/system.xml.xmldocument.4.3.0.nupkg";
+      sha256 = "0bmz1l06dihx52jxjr22dyv5mxv6pj4852lx68grjm7bivhrbfwi";
+    };
+  }
+  {
+    name = "system.xml.xmlserializer";
+    version = "4.0.11";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.xml.xmlserializer/4.0.11/system.xml.xmlserializer.4.0.11.nupkg";
+      sha256 = "01nzc3gdslw90qfykq4qzr2mdnqxjl4sj0wp3fixiwdmlmvpib5z";
+    };
+  }
+  {
+    name = "system.xml.xpath";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.xml.xpath/4.3.0/system.xml.xpath.4.3.0.nupkg";
+      sha256 = "1cv2m0p70774a0sd1zxc8fm8jk3i5zk2bla3riqvi8gsm0r4kpci";
+    };
+  }
+  {
+    name = "system.xml.xpath.xdocument";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.xml.xpath.xdocument/4.3.0/system.xml.xpath.xdocument.4.3.0.nupkg";
+      sha256 = "1wxckyb7n1pi433xzz0qcwcbl1swpra64065mbwwi8dhdc4kiabn";
+    };
+  }
+  {
+    name = "vswhere";
+    version = "2.6.7";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/vswhere/2.6.7/vswhere.2.6.7.nupkg";
+      sha256 = "0h4k5i96p7633zzf4xsv7615f9x72rr5qr7b9934ri2y6gshfcwk";
+    };
+  }
+  {
+    name = "xlifftasks";
+    version = "1.0.0-beta.20502.2";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/1a5f89f6-d8da-4080-b15f-242650c914a8/nuget/v3/flat2/xlifftasks/1.0.0-beta.20502.2/xlifftasks.1.0.0-beta.20502.2.nupkg";
+      sha256 = "17k3dagcxhblzjbh00jsvc150rn7xqp3s3fw2qp1pyjj204y8a90";
+    };
+  }
+  {
+    name = "xunit";
+    version = "2.4.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/xunit/2.4.1/xunit.2.4.1.nupkg";
+      sha256 = "0xf3kaywpg15flqaqfgywqyychzk15kz0kz34j21rcv78q9ywq20";
+    };
+  }
+  {
+    name = "xunit.abstractions";
+    version = "2.0.3";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/xunit.abstractions/2.0.3/xunit.abstractions.2.0.3.nupkg";
+      sha256 = "00wl8qksgkxld76fgir3ycc5rjqv1sqds6x8yx40927q5py74gfh";
+    };
+  }
+  {
+    name = "xunit.analyzers";
+    version = "0.10.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/xunit.analyzers/0.10.0/xunit.analyzers.0.10.0.nupkg";
+      sha256 = "15n02q3akyqbvkp8nq75a8rd66d4ax0rx8fhdcn8j78pi235jm7j";
+    };
+  }
+  {
+    name = "xunit.assert";
+    version = "2.4.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/xunit.assert/2.4.1/xunit.assert.2.4.1.nupkg";
+      sha256 = "1imynzh80wxq2rp9sc4gxs4x1nriil88f72ilhj5q0m44qqmqpc6";
+    };
+  }
+  {
+    name = "xunit.core";
+    version = "2.4.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/xunit.core/2.4.1/xunit.core.2.4.1.nupkg";
+      sha256 = "1nnb3j4kzmycaw1g76ii4rfqkvg6l8gqh18falwp8g28h802019a";
+    };
+  }
+  {
+    name = "xunit.extensibility.core";
+    version = "2.4.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/xunit.extensibility.core/2.4.1/xunit.extensibility.core.2.4.1.nupkg";
+      sha256 = "103qsijmnip2pnbhciqyk2jyhdm6snindg5z2s57kqf5pcx9a050";
+    };
+  }
+  {
+    name = "xunit.extensibility.execution";
+    version = "2.4.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/xunit.extensibility.execution/2.4.1/xunit.extensibility.execution.2.4.1.nupkg";
+      sha256 = "1pbilxh1gp2ywm5idfl0klhl4gb16j86ib4x83p8raql1dv88qia";
+    };
+  }
+  {
+    name = "xunit.runner.console";
+    version = "2.4.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/xunit.runner.console/2.4.1/xunit.runner.console.2.4.1.nupkg";
+      sha256 = "13ykz9anhz72xc4q6byvdfwrp54hlcbl6zsfapwfhnzyvfgb9w13";
+    };
+  }
+  {
+    name = "xunit.runner.visualstudio";
+    version = "2.4.3";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/xunit.runner.visualstudio/2.4.3/xunit.runner.visualstudio.2.4.3.nupkg";
+      sha256 = "0j1d0rbcm7pp6dypi61sjxp8l22sv261252z55b243l39jgv2rp3";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/development/tools/build-managers/muon/default.nix b/nixpkgs/pkgs/development/tools/build-managers/muon/default.nix
new file mode 100644
index 000000000000..92593bb60e5f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/muon/default.nix
@@ -0,0 +1,139 @@
+{ lib
+, stdenv
+, fetchFromSourcehut
+, fetchurl
+, curl
+, libarchive
+, libpkgconf
+, pkgconf
+, python3
+, samurai
+, scdoc
+, zlib
+, embedSamurai ? false
+, buildDocs ? true
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "muon"
+          + lib.optionalString embedSamurai "-embedded-samurai";
+  version = "0.2.0";
+
+  src = fetchFromSourcehut {
+    name = "muon-src";
+    owner = "~lattis";
+    repo = "muon";
+    rev = finalAttrs.version;
+    hash = "sha256-ZHWyUV/BqM3ihauXDqDVkZURDDbBiRcEzptyGQmw94I=";
+  };
+
+  outputs = [ "out" ] ++ lib.optionals buildDocs [ "man" ];
+
+  nativeBuildInputs = [
+    pkgconf
+    samurai
+  ]
+  ++ lib.optionals buildDocs [
+    (python3.withPackages (ps: [ ps.pyyaml ]))
+    scdoc
+  ];
+
+  buildInputs = [
+    curl
+    libarchive
+    libpkgconf
+    samurai
+    zlib
+  ];
+
+  strictDeps = true;
+
+  postUnpack = let
+    # URLs manually extracted from subprojects directory
+    meson-docs-wrap = fetchurl {
+      name = "meson-docs-wrap";
+      url = "https://mochiro.moe/wrap/meson-docs-1.0.1-19-gdd8d4ee22.tar.gz";
+      hash = "sha256-jHSPdLFR5jUeds4e+hLZ6JOblor5iuCV5cIwoc4K9gI=";
+    };
+
+    samurai-wrap = fetchurl {
+      name = "samurai-wrap";
+      url = "https://mochiro.moe/wrap/samurai-1.2-32-g81cef5d.tar.gz";
+      hash = "sha256-aPMAtScqweGljvOLaTuR6B0A0GQQQrVbRviXY4dpCoc=";
+  };
+  in ''
+    pushd $sourceRoot/subprojects
+    ${lib.optionalString buildDocs "tar xvf ${meson-docs-wrap}"}
+    ${lib.optionalString embedSamurai "tar xvf ${samurai-wrap}"}
+    popd
+  '';
+
+  postPatch = ''
+    patchShebangs bootstrap.sh
+  ''
+  + lib.optionalString buildDocs ''
+    patchShebangs subprojects/meson-docs/docs/genrefman.py
+  '';
+
+  # tests try to access "~"
+  postConfigure = ''
+    export HOME=$(mktemp -d)
+  '';
+
+  buildPhase = let
+    muonBool = lib.mesonBool;
+    muonEnable = lib.mesonEnable;
+
+    cmdlineForMuon = lib.concatStringsSep " " [
+      (muonBool "static" stdenv.targetPlatform.isStatic)
+      (muonEnable "docs" buildDocs)
+      (muonEnable "samurai" embedSamurai)
+    ];
+    cmdlineForSamu = "-j$NIX_BUILD_CORES";
+  in ''
+    runHook preBuild
+
+    ./bootstrap.sh stage-1
+
+    ./stage-1/muon setup ${cmdlineForMuon} stage-2
+    samu ${cmdlineForSamu} -C stage-2
+
+    stage-2/muon setup -Dprefix=$out ${cmdlineForMuon} stage-3
+    samu ${cmdlineForSamu} -C stage-3
+
+    runHook postBuild
+  '';
+
+  # tests are failing because they don't find Python
+  doCheck = false;
+
+  checkPhase = ''
+    runHook preCheck
+
+    ./stage-3/muon -C stage-3 test
+
+    runHook postCheck
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    stage-3/muon -C stage-3 install
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://muon.build/";
+    description = "An implementation of Meson build system in C99";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ AndersonTorres ];
+    platforms = platforms.unix;
+    broken = stdenv.isDarwin; # typical `ar failure`
+    mainProgram = "muon";
+  };
+})
+# TODO LIST:
+# 1. automate sources acquisition (especially wraps)
+# 2. setup hook
+# 3. tests
diff --git a/nixpkgs/pkgs/development/tools/build-managers/ninja/default.nix b/nixpkgs/pkgs/development/tools/build-managers/ninja/default.nix
new file mode 100644
index 000000000000..7c2c79bf9e92
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/ninja/default.nix
@@ -0,0 +1,107 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch
+, asciidoc
+, docbook_xml_dtd_45
+, docbook_xsl
+, installShellFiles
+, libxslt
+, python3
+, re2c
+, buildPackages
+, buildDocs ? true
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ninja";
+  version = "1.11.1";
+
+  src = fetchFromGitHub {
+    owner = "ninja-build";
+    repo = "ninja";
+    rev = "v${version}";
+    hash = "sha256-LvV/Fi2ARXBkfyA1paCRmLUwCh/rTyz+tGMg2/qEepI=";
+  };
+
+  depsBuildBuild = [ buildPackages.stdenv.cc ];
+
+  nativeBuildInputs = [
+    python3
+    re2c
+    installShellFiles
+  ]
+  ++ lib.optionals buildDocs [
+    asciidoc
+    docbook_xml_dtd_45
+    docbook_xsl
+    libxslt.bin
+  ];
+
+  patches = lib.optionals stdenv.is32bit [
+    # Otherwise ninja may fail on some files in a larger FS.
+    (fetchpatch {
+      name = "stat64.patch";
+      url = "https://github.com/ninja-build/ninja/commit/7bba11ae704efc84cac5fde5e9be53f653f237d1.diff";
+      hash = "sha256-tINS57xLh1lwnYFWCQs5OudfgtIShaOh5zbmv7w5BnQ=";
+    })
+  ];
+
+  postPatch = ''
+    # write rebuild args to file after bootstrap
+    substituteInPlace configure.py --replace "subprocess.check_call(rebuild_args)" "open('rebuild_args','w').write(rebuild_args[0])"
+  '';
+
+  buildPhase = ''
+    runHook preBuild
+
+    # for list of env vars
+    # see https://github.com/ninja-build/ninja/blob/v1.11.1/configure.py#L264
+    CXX="$CXX_FOR_BUILD" \
+    AR="$AR_FOR_BUILD" \
+    CFLAGS="$CFLAGS_FOR_BUILD" \
+    CXXFLAGS="$CXXFLAGS_FOR_BUILD" \
+    LDFLAGS="$LDFLAGS_FOR_BUILD" \
+    python configure.py --bootstrap
+    python configure.py
+
+    source rebuild_args
+  '' + lib.optionalString buildDocs ''
+    # "./ninja -vn manual" output copied here to support cross compilation.
+    asciidoc -b docbook -d book -o build/manual.xml doc/manual.asciidoc
+    xsltproc --nonet doc/docbook.xsl build/manual.xml > doc/manual.html
+  '' + ''
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm555 -t $out/bin ninja
+    installShellCompletion --name ninja \
+      --bash misc/bash-completion \
+      --zsh misc/zsh-completion
+  '' + lib.optionalString buildDocs ''
+    install -Dm444 -t $out/share/doc/ninja doc/manual.asciidoc doc/manual.html
+  '' + ''
+
+    runHook postInstall
+  '';
+
+  setupHook = ./setup-hook.sh;
+
+  meta = with lib; {
+    description = "Small build system with a focus on speed";
+    longDescription = ''
+      Ninja is a small build system with a focus on speed. It differs from
+      other build systems in two major respects: it is designed to have its
+      input files generated by a higher-level build system, and it is designed
+      to run builds as fast as possible.
+    '';
+    homepage = "https://ninja-build.org/";
+    license = licenses.asl20;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ thoughtpolice bjornfor orivej ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/ninja/setup-hook.sh b/nixpkgs/pkgs/development/tools/build-managers/ninja/setup-hook.sh
new file mode 100644
index 000000000000..7fa5e4675f39
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/ninja/setup-hook.sh
@@ -0,0 +1,86 @@
+ninjaBuildPhase() {
+    runHook preBuild
+
+    local buildCores=1
+
+    # Parallel building is enabled by default.
+    if [ "${enableParallelBuilding-1}" ]; then
+        buildCores="$NIX_BUILD_CORES"
+    fi
+
+    local flagsArray=(
+        -j$buildCores
+        $ninjaFlags "${ninjaFlagsArray[@]}"
+    )
+
+    echoCmd 'build flags' "${flagsArray[@]}"
+    TERM=dumb ninja "${flagsArray[@]}"
+
+    runHook postBuild
+}
+
+ninjaCheckPhase() {
+    runHook preCheck
+
+    if [ -z "${checkTarget:-}" ]; then
+        if ninja -t query test >/dev/null 2>&1; then
+            checkTarget=test
+        fi
+    fi
+
+    if [ -z "${checkTarget:-}" ]; then
+        echo "no test target found in ninja, doing nothing"
+    else
+        local buildCores=1
+
+        if [ "${enableParallelChecking-1}" ]; then
+            buildCores="$NIX_BUILD_CORES"
+        fi
+
+        local flagsArray=(
+            -j$buildCores
+            $ninjaFlags "${ninjaFlagsArray[@]}"
+            $checkTarget
+        )
+
+        echoCmd 'check flags' "${flagsArray[@]}"
+        TERM=dumb ninja "${flagsArray[@]}"
+    fi
+
+    runHook postCheck
+}
+
+ninjaInstallPhase() {
+    runHook preInstall
+
+    local buildCores=1
+
+    # Parallel building is enabled by default.
+    if [ "${enableParallelInstalling-1}" ]; then
+        buildCores="$NIX_BUILD_CORES"
+    fi
+
+    # shellcheck disable=SC2086
+    local flagsArray=(
+        -j$buildCores
+        $ninjaFlags "${ninjaFlagsArray[@]}"
+        ${installTargets:-install}
+    )
+
+    echoCmd 'install flags' "${flagsArray[@]}"
+    TERM=dumb ninja "${flagsArray[@]}"
+
+    runHook postInstall
+}
+
+if [ -z "${dontUseNinjaBuild-}" -a -z "${buildPhase-}" ]; then
+    buildPhase=ninjaBuildPhase
+fi
+
+if [ -z "${dontUseNinjaCheck-}" -a -z "${checkPhase-}" ]; then
+    checkPhase=ninjaCheckPhase
+fi
+
+if [ -z "${dontUseNinjaInstall-}" -a -z "${installPhase-}" ]; then
+    installPhase=ninjaInstallPhase
+fi
diff --git a/nixpkgs/pkgs/development/tools/build-managers/qbs/default.nix b/nixpkgs/pkgs/development/tools/build-managers/qbs/default.nix
new file mode 100644
index 000000000000..9d1305f77675
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/qbs/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromGitHub, qmake, qtbase, qtscript }:
+
+stdenv.mkDerivation rec {
+  pname = "qbs";
+
+  version = "1.24.1";
+
+  src = fetchFromGitHub {
+    owner = "qbs";
+    repo = "qbs";
+    rev = "v${version}";
+    sha256 = "sha256-nL7UZh29Oecu3RvXYg5xsin2IvPWpApleLH37sEdSAI=";
+  };
+
+  nativeBuildInputs = [ qmake ];
+
+  dontWrapQtApps = true;
+
+  qmakeFlags = [ "QBS_INSTALL_PREFIX=$(out)" "qbs.pro" ];
+
+  buildInputs = [ qtbase qtscript ];
+
+  meta = with lib; {
+    description = "A tool that helps simplify the build process for developing projects across multiple platforms";
+    homepage = "https://wiki.qt.io/Qbs";
+    license = licenses.lgpl3;
+    maintainers = with maintainers; [ expipiplus1 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/rake/Gemfile b/nixpkgs/pkgs/development/tools/build-managers/rake/Gemfile
new file mode 100644
index 000000000000..bd1ff6faa65c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/rake/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'rake'
diff --git a/nixpkgs/pkgs/development/tools/build-managers/rake/Gemfile.lock b/nixpkgs/pkgs/development/tools/build-managers/rake/Gemfile.lock
new file mode 100644
index 000000000000..5082e8b0c44c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/rake/Gemfile.lock
@@ -0,0 +1,13 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    rake (13.1.0)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  rake
+
+BUNDLED WITH
+   2.5.3
diff --git a/nixpkgs/pkgs/development/tools/build-managers/rake/default.nix b/nixpkgs/pkgs/development/tools/build-managers/rake/default.nix
new file mode 100644
index 000000000000..d2f0a264ba74
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/rake/default.nix
@@ -0,0 +1,17 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "rake";
+  gemdir = ./.;
+  exes = [ "rake" ];
+
+  passthru.updateScript = bundlerUpdateScript "rake";
+
+  meta = with lib; {
+    description = "A software task management and build automation tool";
+    homepage = "https://github.com/ruby/rake";
+    license  = with licenses; mit;
+    maintainers = with maintainers; [ manveru nicknovitski ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/rake/gemset.nix b/nixpkgs/pkgs/development/tools/build-managers/rake/gemset.nix
new file mode 100644
index 000000000000..e384c801699c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/rake/gemset.nix
@@ -0,0 +1,12 @@
+{
+  rake = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ilr853hawi09626axx0mps4rkkmxcs54mapz9jnqvpnlwd3wsmy";
+      type = "gem";
+    };
+    version = "13.1.0";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/rebar/default.nix b/nixpkgs/pkgs/development/tools/build-managers/rebar/default.nix
new file mode 100644
index 000000000000..2bdafa5fcfb0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/rebar/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchFromGitHub, erlang }:
+
+stdenv.mkDerivation rec {
+  pname = "rebar";
+  version = "2.6.4";
+
+  src = fetchFromGitHub {
+    owner = "rebar";
+    repo = "rebar";
+    rev = version;
+    sha256 = "sha256-okvG7X2uHtZ1p+HUoFOmslrWvYjk0QWBAvAMAW2E40c=";
+  };
+
+  buildInputs = [ erlang ];
+
+  buildPhase = "escript bootstrap";
+  installPhase = ''
+    mkdir -p $out/bin
+    cp rebar $out/bin/rebar
+  '';
+
+  meta = {
+    homepage = "https://github.com/rebar/rebar";
+    description = "Erlang build tool that makes it easy to compile and test Erlang applications, port drivers and releases";
+
+    longDescription = ''
+      rebar is a self-contained Erlang script, so it's easy to
+      distribute or even embed directly in a project. Where possible,
+      rebar uses standard Erlang/OTP conventions for project
+      structures, thus minimizing the amount of build configuration
+      work. rebar also provides dependency management, enabling
+      application writers to easily re-use common libraries from a
+      variety of locations (git, hg, etc).
+    '';
+
+    platforms = lib.platforms.unix;
+    license = lib.licenses.asl20;
+    maintainers = lib.teams.beam.members;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/rebar3/default.nix b/nixpkgs/pkgs/development/tools/build-managers/rebar3/default.nix
new file mode 100644
index 000000000000..b39a9537ee4c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/rebar3/default.nix
@@ -0,0 +1,143 @@
+{ lib, stdenv, fetchFromGitHub, fetchgit,
+  fetchHex, erlang, makeWrapper,
+  writeScript, common-updater-scripts, coreutils, git, gnused, nix, rebar3-nix }:
+
+let
+  version = "3.22.1";
+  owner = "erlang";
+  deps = import ./rebar-deps.nix { inherit fetchFromGitHub fetchgit fetchHex; };
+  rebar3 = stdenv.mkDerivation rec {
+    pname = "rebar3";
+    inherit version erlang;
+
+    # How to obtain `sha256`:
+    # nix-prefetch-url --unpack https://github.com/erlang/rebar3/archive/${version}.tar.gz
+    src = fetchFromGitHub {
+      inherit owner;
+      repo = pname;
+      rev = version;
+      sha256 = "bSsDNuwG3LLvBS7P/Ft0rpM/atwy36JonwP0fPRsEis=";
+    };
+
+    buildInputs = [ erlang ];
+
+    postPatch = ''
+      mkdir -p _checkouts _build/default/lib/
+
+      ${toString (lib.mapAttrsToList (k: v: ''
+        cp -R --no-preserve=mode ${v} _checkouts/${k}
+      '') deps)}
+
+      # Bootstrap script expects the dependencies in _build/default/lib
+      # TODO: Make it accept checkouts?
+      for i in _checkouts/* ; do
+          ln -s $(pwd)/$i $(pwd)/_build/default/lib/
+      done
+    '';
+
+    buildPhase = ''
+      HOME=. escript bootstrap
+    '';
+
+    checkPhase = ''
+      HOME=. escript ./rebar3 ct
+    '';
+
+    doCheck = true;
+
+    installPhase = ''
+      mkdir -p $out/bin
+      cp rebar3 $out/bin/rebar3
+    '';
+
+    meta = {
+      homepage = "https://github.com/rebar/rebar3";
+      description = "Erlang build tool that makes it easy to compile and test Erlang applications, port drivers and releases";
+
+      longDescription = ''
+        rebar is a self-contained Erlang script, so it's easy to distribute or
+        even embed directly in a project. Where possible, rebar uses standard
+        Erlang/OTP conventions for project structures, thus minimizing the amount
+        of build configuration work. rebar also provides dependency management,
+        enabling application writers to easily re-use common libraries from a
+        variety of locations (hex.pm, git, hg, and so on).
+        '';
+
+      platforms = lib.platforms.unix;
+      maintainers = lib.teams.beam.members;
+      license = lib.licenses.asl20;
+    };
+
+    passthru.updateScript = writeScript "update.sh" ''
+      #!${stdenv.shell}
+      set -ox errexit
+      PATH=${
+        lib.makeBinPath [
+          common-updater-scripts
+          coreutils
+          git
+          gnused
+          nix
+          (rebar3WithPlugins { globalPlugins = [rebar3-nix]; })
+        ]
+      }
+      latest=$(list-git-tags | sed -n '/[\d\.]\+/p' | sort -V | tail -1)
+      if [ "$latest" != "${version}" ]; then
+        nixpkgs="$(git rev-parse --show-toplevel)"
+        nix_path="$nixpkgs/pkgs/development/tools/build-managers/rebar3"
+        update-source-version rebar3 "$latest" --version-key=version --print-changes --file="$nix_path/default.nix"
+        tmpdir=$(mktemp -d)
+        cp -R $(nix-build $nixpkgs --no-out-link -A rebar3.src)/* "$tmpdir"
+        (cd "$tmpdir" && rebar3 as test nix lock -o "$nix_path/rebar-deps.nix")
+      else
+        echo "rebar3 is already up-to-date"
+      fi
+    '';
+  };
+
+  # Alias rebar3 so we can use it as default parameter below
+  _rebar3 = rebar3;
+
+  rebar3WithPlugins = { plugins ? [ ], globalPlugins ? [ ], rebar3 ? _rebar3 }:
+    let
+      pluginLibDirs = map (p: "${p}/lib/erlang/lib") (lib.unique (plugins ++ globalPlugins));
+      globalPluginNames = lib.unique (map (p: p.packageName) globalPlugins);
+      rebar3Patched = (rebar3.overrideAttrs (old: {
+
+        # skip-plugins.patch is necessary because otherwise rebar3 will always
+        # try to fetch plugins if they are not already present in _build.
+        #
+        # global-deps.patch makes it possible to use REBAR_GLOBAL_PLUGINS to
+        # instruct rebar3 to always load a certain plugin. It is necessary since
+        # REBAR_GLOBAL_CONFIG_DIR doesn't seem to work for this.
+        patches = [ ./skip-plugins.patch ./global-plugins.patch ];
+
+        # our patches cause the tests to fail
+        doCheck = false;
+      }));
+    in stdenv.mkDerivation {
+      pname = "rebar3-with-plugins";
+      inherit (rebar3) version;
+      nativeBuildInputs = [ erlang makeWrapper ];
+      unpackPhase = "true";
+
+      # Here we extract the rebar3 escript (like `rebar3_prv_local_install.erl`) and
+      # add plugins to the code path.
+
+      installPhase = ''
+        erl -noshell -eval '
+          {ok, Escript} = escript:extract("${rebar3Patched}/bin/rebar3", []),
+          {archive, Archive} = lists:keyfind(archive, 1, Escript),
+          {ok, _} = zip:extract(Archive, [{cwd, "'$out/lib'"}]),
+          init:stop(0)
+        '
+        cp ${./rebar_ignore_deps.erl} rebar_ignore_deps.erl
+        erlc -o $out/lib/rebar/ebin rebar_ignore_deps.erl
+        mkdir -p $out/bin
+        makeWrapper ${erlang}/bin/erl $out/bin/rebar3 \
+          --set REBAR_GLOBAL_PLUGINS "${toString globalPluginNames} rebar_ignore_deps" \
+          --suffix-each ERL_LIBS ":" "$out/lib ${toString pluginLibDirs}" \
+          --add-flags "+sbtu +A1 -noshell -boot start_clean -s rebar3 main -extra"
+      '';
+    };
+in { inherit rebar3 rebar3WithPlugins; }
diff --git a/nixpkgs/pkgs/development/tools/build-managers/rebar3/global-plugins.patch b/nixpkgs/pkgs/development/tools/build-managers/rebar3/global-plugins.patch
new file mode 100644
index 000000000000..80207c197d82
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/rebar3/global-plugins.patch
@@ -0,0 +1,14 @@
+diff --git a/apps/rebar/src/rebar_plugins.erl b/apps/rebar/src/rebar_plugins.erl
+index 469be42e..3a901cbe 100644
+--- a/apps/rebar/src/rebar_plugins.erl
++++ b/apps/rebar/src/rebar_plugins.erl
+@@ -31,7 +31,8 @@ project_plugins_install(State) ->
+ top_level_install(State) ->
+     Profiles = rebar_state:current_profiles(State),
+     lists:foldl(fun(Profile, StateAcc) ->
+-                        Plugins = rebar_state:get(State, {plugins, Profile}, []),
++                        Plugins = rebar_state:get(State, {plugins, Profile}, [])
++                            ++ [list_to_atom(P) || P <- string:lexemes(os:getenv("REBAR_GLOBAL_PLUGINS", ""), " ")],
+                         handle_plugins(Profile, Plugins, StateAcc)
+                 end, State, Profiles).
+ 
diff --git a/nixpkgs/pkgs/development/tools/build-managers/rebar3/rebar-deps.nix b/nixpkgs/pkgs/development/tools/build-managers/rebar3/rebar-deps.nix
new file mode 100644
index 000000000000..7f6be584098d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/rebar3/rebar-deps.nix
@@ -0,0 +1,18 @@
+# Generated by rebar3_nix
+let fetchOnly = { src, ... }: src;
+in { builder ? fetchOnly, fetchHex, fetchgit, fetchFromGitHub, overrides ? (x: y: { }) }:
+let
+  self = packages // (overrides self packages);
+  packages = with self; {
+    meck = builder {
+      name = "meck";
+      version = "0.8.13";
+      src = fetchHex {
+        pkg = "meck";
+        version = "0.8.13";
+        sha256 = "sha256-008BPBVttRrVfMVWiRuXIOahwd9f4uFa+ZnITWzr6xo=";
+      };
+      beamDeps = [ ];
+    };
+  };
+in self
diff --git a/nixpkgs/pkgs/development/tools/build-managers/rebar3/rebar_ignore_deps.erl b/nixpkgs/pkgs/development/tools/build-managers/rebar3/rebar_ignore_deps.erl
new file mode 100644
index 000000000000..3e0ae67c4539
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/rebar3/rebar_ignore_deps.erl
@@ -0,0 +1,43 @@
+%% This module, when loaded as a plugin, overrides the default `install_deps`
+%% provider and erases the dependencies from the rebar3 state, when
+%% REBAR_IGNORE_DEPS is true.
+
+-module(rebar_ignore_deps).
+
+-export([init/1, do/1, format_error/1]).
+
+init(State0) ->
+    case os:getenv("REBAR_IGNORE_DEPS", "") of
+        "" ->
+            {ok, State0};
+        _ ->
+            do_init(State0)
+    end.
+
+do_init(State0) ->
+    State1 = rebar_state:allow_provider_overrides(State0, true),
+    Provider = providers:create(
+                 [
+                  {name, install_deps}, %% override the default install_deps provider
+                  {module, ?MODULE},
+                  {bare, false},
+                  {deps, [app_discovery]},
+                  {example, undefined},
+                  {opts, []},
+                  {short_desc, ""},
+                  {desc, ""}
+                 ]),
+    State2 = rebar_state:add_provider(State1, Provider),
+    {ok, rebar_state:allow_provider_overrides(State2, false)}.
+
+do(State0) ->
+    io:format("Ignoring deps...~n"),
+    Profiles = rebar_state:current_profiles(State0),
+    State = lists:foldl(fun(P, Acc0) ->
+                                 Acc = rebar_state:set(Acc0, {deps, P}, []),
+                                 rebar_state:set(Acc, {parsed_deps, P}, [])
+                         end, State0, Profiles),
+    {ok, State}.
+
+format_error(Reason) ->
+    io_lib:format("~p", [Reason]).
diff --git a/nixpkgs/pkgs/development/tools/build-managers/rebar3/skip-plugins.patch b/nixpkgs/pkgs/development/tools/build-managers/rebar3/skip-plugins.patch
new file mode 100644
index 000000000000..80394f495e83
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/rebar3/skip-plugins.patch
@@ -0,0 +1,80 @@
+diff --git a/apps/rebar/src/rebar_plugins.erl b/apps/rebar/src/rebar_plugins.erl
+index cd5f377c..469be42e 100644
+--- a/apps/rebar/src/rebar_plugins.erl
++++ b/apps/rebar/src/rebar_plugins.erl
+@@ -108,41 +108,9 @@ handle_plugins(Profile, Plugins, State, Upgrade) ->
+     State3 = rebar_state:set(State2, deps_dir, DepsDir),
+     rebar_state:lock(State3, Locks).
+ 
+-handle_plugin(Profile, Plugin, State, SrcPlugins, Upgrade) ->
++handle_plugin(_Profile, Plugin, State, _SrcPlugins, _Upgrade) ->
+     try
+-        %% Inject top-level src plugins as project apps, so that they get skipped
+-        %% by the installation as already seen
+-        ProjectApps = rebar_state:project_apps(State),
+-        State0 = rebar_state:project_apps(State, SrcPlugins),
+-        %% We however have to pick the deps of top-level apps and promote them
+-        %% directly to make sure they are installed if they were not also at the top level
+-        TopDeps = top_level_deps(State, SrcPlugins),
+-        %% Install the plugins
+-        {Apps, State1} = rebar_prv_install_deps:handle_deps_as_profile(Profile, State0, [Plugin|TopDeps], Upgrade),
+-        {no_cycle, Sorted} = rebar_prv_install_deps:find_cycles(SrcPlugins++Apps),
+-        ToBuild = rebar_prv_install_deps:cull_compile(Sorted, []),
+-        %% Return things to normal
+-        State2 = rebar_state:project_apps(State1, ProjectApps),
+-
+-        %% Add already built plugin deps to the code path
+-        ToBuildPaths = [rebar_app_info:ebin_dir(A) || A <- ToBuild],
+-        PreBuiltPaths = [Ebin || A <- Sorted,
+-                                 Ebin <- [rebar_app_info:ebin_dir(A)],
+-                                 not lists:member(Ebin, ToBuildPaths)],
+-        code:add_pathsa(PreBuiltPaths),
+-
+-        %% Build plugin and its deps
+-        build_plugins(ToBuild, Sorted, State2),
+-
+-        %% Add newly built deps and plugin to code path
+-        State3 = rebar_state:update_all_plugin_deps(State2, Sorted),
+-        NewCodePaths = [rebar_app_info:ebin_dir(A) || A <- ToBuild],
+-
+-        %% Store plugin code paths so we can remove them when compiling project apps
+-        State4 = rebar_state:update_code_paths(State3, all_plugin_deps, PreBuiltPaths++NewCodePaths),
+-        rebar_paths:set_paths([plugins], State4),
+-
+-        {plugin_providers(Plugin), State4}
++        {plugin_providers(Plugin), State}
+     catch
+         ?WITH_STACKTRACE(C,T,S)
+             ?DEBUG("~p ~p ~p", [C, T, S]),
+@@ -150,15 +118,6 @@ handle_plugin(Profile, Plugin, State, SrcPlugins, Upgrade) ->
+             {[], State}
+     end.
+ 
+-build_plugins(MustBuildApps, AllApps, State) ->
+-    State1 = rebar_state:deps_to_build(State, MustBuildApps),
+-    State2 = rebar_state:all_deps(State1, AllApps),
+-    State3 = rebar_state:set(State2, deps_dir, ?DEFAULT_PLUGINS_DIR),
+-    {Args, Extra} = rebar_state:command_parsed_args(State),
+-    State4 = rebar_state:command_parsed_args(State3, {[{deps_only, true}|Args], Extra}),
+-    rebar_prv_compile:do(State4),
+-    ok.
+-
+ plugin_providers({Plugin, _, _, _}) when is_atom(Plugin) ->
+     validate_plugin(Plugin);
+ plugin_providers({Plugin, _, _}) when is_atom(Plugin) ->
+@@ -251,15 +210,6 @@ prepare_plugin(AppInfo) ->
+         false -> rebar_app_info:valid(Relocated, undefined) % force revalidation
+     end.
+ 
+-top_level_deps(State, Apps) ->
+-    CurrentProfiles = rebar_state:current_profiles(State),
+-    Keys = lists:append([[{plugins, P}, {deps, P}] || P <- CurrentProfiles]),
+-    RawDeps = lists:foldl(fun(App, Acc) ->
+-        %% Only support the profiles we would with regular plugins?
+-        lists:append([rebar_app_info:get(App, Key, []) || Key <- Keys]) ++ Acc
+-    end, [], Apps),
+-    rebar_utils:tup_dedup(RawDeps).
+-
+ needs_rebuild(AppInfo) ->
+     %% if source files are newer than built files then the code was edited
+     %% and can't be considered valid -- force a rebuild.
diff --git a/nixpkgs/pkgs/development/tools/build-managers/redo-apenwarr/default.nix b/nixpkgs/pkgs/development/tools/build-managers/redo-apenwarr/default.nix
new file mode 100644
index 000000000000..22841cb20d17
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/redo-apenwarr/default.nix
@@ -0,0 +1,73 @@
+{ stdenv, lib, python3, fetchFromGitHub, which, coreutils
+, perl, installShellFiles, gnumake42
+, doCheck ? true
+}: stdenv.mkDerivation rec {
+
+  pname = "redo-apenwarr";
+  version = "0.42d";
+
+  src = fetchFromGitHub rec {
+    owner = "apenwarr";
+    repo = "redo";
+    rev = "${repo}-${version}";
+    sha256 = "/QIMXpVhVLAIJa3LiOlRKzbUztIWZygkWZUKN4Nrh+M=";
+  };
+
+  postPatch = ''
+
+    patchShebangs minimal/do
+
+  '' + lib.optionalString doCheck ''
+    unset CC CXX
+
+    substituteInPlace minimal/do.test \
+      --replace "/bin/pwd" "${coreutils}/bin/pwd"
+
+    substituteInPlace t/105-sympath/all.do \
+      --replace "/bin/pwd" "${coreutils}/bin/pwd"
+
+    substituteInPlace t/all.do \
+      --replace "/bin/ls" "ls"
+
+    substituteInPlace t/110-compile/hello.o.do \
+      --replace "/usr/include" "${lib.getDev stdenv.cc.libc}/include"
+
+    substituteInPlace t/200-shell/nonshelltest.do \
+      --replace "/usr/bin/env perl" "${perl}/bin/perl"
+
+  '';
+
+  inherit doCheck;
+
+  checkTarget = "test";
+
+  outputs = [ "out" "man" ];
+
+  installFlags = [
+    "PREFIX=$(out)"
+    "DESTDIR=/"
+  ];
+
+  nativeBuildInputs = [
+    python3
+    (with python3.pkgs; [ beautifulsoup4 markdown ])
+    which
+    installShellFiles
+    gnumake42 # fails with make 4.4
+  ];
+
+  postInstall = ''
+    installShellCompletion --bash contrib/bash_completion.d/redo
+  '';
+
+  meta = with lib; {
+    description = "Smaller, easier, more powerful, and more reliable than make. An implementation of djb's redo";
+    homepage = "https://github.com/apenwarr/redo";
+    maintainers = with maintainers; [
+      andrewchambers
+      ck3d
+    ];
+    license = licenses.asl20;
+    platforms = python3.meta.platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/redo-c/Makefile b/nixpkgs/pkgs/development/tools/build-managers/redo-c/Makefile
new file mode 100644
index 000000000000..5a1dd74c5b84
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/redo-c/Makefile
@@ -0,0 +1,10 @@
+CFLAGS ?= -Os
+
+all: redo links
+
+links:
+	sh links.do
+
+install:
+	mkdir -p "$(out)/bin"
+	cp --no-dereference redo redo-* "$(out)/bin"
diff --git a/nixpkgs/pkgs/development/tools/build-managers/redo-c/default.nix b/nixpkgs/pkgs/development/tools/build-managers/redo-c/default.nix
new file mode 100644
index 000000000000..14d33cba0395
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/redo-c/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub }:
+stdenv.mkDerivation rec {
+  pname = "redo-c";
+  version = "0.3";
+
+  src = fetchFromGitHub {
+    owner = "leahneukirchen";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-oZcaBgESIaD7/SUBE7luh7axucKTEzXPVkQAQs2NCXE=";
+  };
+
+  postPatch = ''
+    cp '${./Makefile}' Makefile
+  '';
+
+  meta = with lib; {
+    description = "An implementation of the redo build system in portable C with zero dependencies";
+    homepage = "https://github.com/leahneukirchen/redo-c";
+    license = licenses.cc0;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ ck3d ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/redo-sh/default.nix b/nixpkgs/pkgs/development/tools/build-managers/redo-sh/default.nix
new file mode 100644
index 000000000000..093a825723c0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/redo-sh/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchurl, makeWrapper, coreutils }:
+
+stdenv.mkDerivation {
+  version = "4.0.4";
+  pname = "redo-sh";
+
+  src = fetchurl {
+    url = "http://news.dieweltistgarnichtso.net/bin/archives/redo-sh.tar.gz";
+    sha256 = "0d3hz3vy5qmjr9r4f8a5cx9hikpzs8h8f0fsl3dpbialf4wck24g";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  sourceRoot = ".";
+  installPhase = ''
+    mkdir -p "$out/share"
+    mv man "$out/share"
+    mv bin "$out"
+    for p in $out/bin/*; do
+      wrapProgram "$p" --prefix PATH : "$out/bin:${coreutils}/bin"
+    done
+  '';
+
+  meta = with lib; {
+    description = "Redo implementation in Bourne Shell";
+    homepage = "http://news.dieweltistgarnichtso.net/bin/redo-sh.html";
+    license  = licenses.agpl3;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ sternenseemann ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/redo/default.nix b/nixpkgs/pkgs/development/tools/build-managers/redo/default.nix
new file mode 100644
index 000000000000..f16e91d3bfb1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/redo/default.nix
@@ -0,0 +1,29 @@
+{lib, stdenv, fetchurl, perl }:
+
+stdenv.mkDerivation rec {
+  pname = "redo";
+  version = "1.4";
+  src = fetchurl {
+    url = "https://jdebp.eu./Repository/freebsd/${pname}-${version}.tar.gz";
+    sha256 = "1c8gr5h77v4fw78zkhbm9z9adqs3kd7xvxwnmci2zvlf4bqqk4jv";
+  };
+
+  nativeBuildInputs = [ perl /* for pod2man */ ];
+
+  sourceRoot = ".";
+
+  buildPhase = ''
+    ./package/compile
+  '';
+  installPhase = ''
+    ./package/export $out/
+  '';
+
+  meta = {
+    homepage = "https://jdebp.eu./Softwares/redo/";
+    description = "A system for building target files from source files";
+    license = lib.licenses.bsd2;
+    maintainers = [ lib.maintainers.vrthra ];
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/remake/default.nix b/nixpkgs/pkgs/development/tools/build-managers/remake/default.nix
new file mode 100644
index 000000000000..f2589c1e75c6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/remake/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, stdenv
+, fetchurl
+, pkg-config
+, readline
+, guileSupport ? false
+, guile
+}:
+
+stdenv.mkDerivation rec {
+  pname = "remake";
+  remakeVersion = "4.3";
+  dbgVersion = "1.6";
+  version = "${remakeVersion}+dbg-${dbgVersion}";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/bashdb/remake/${version}/remake-${remakeVersion}+dbg-${dbgVersion}.tar.gz";
+    sha256 = "11vvch8bi0yhjfz7gn92b3xmmm0cgi3qfiyhbnnj89frkhbwd87n";
+  };
+
+  patches = [
+    ./glibc-2.27-glob.patch
+  ];
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+  buildInputs = [ readline ]
+    ++ lib.optionals guileSupport [ guile ];
+
+  # make check fails, see https://github.com/rocky/remake/issues/117
+
+  meta = {
+    homepage = "https://bashdb.sourceforge.net/remake/";
+    license = lib.licenses.gpl3Plus;
+    description = "GNU Make with comprehensible tracing and a debugger";
+    platforms = with lib.platforms; linux ++ darwin;
+    maintainers = with lib.maintainers; [ bjornfor shamilton ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/remake/glibc-2.27-glob.patch b/nixpkgs/pkgs/development/tools/build-managers/remake/glibc-2.27-glob.patch
new file mode 100644
index 000000000000..ef876e2fb237
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/remake/glibc-2.27-glob.patch
@@ -0,0 +1,34 @@
+diff --git a/glob/glob.c b/glob/glob.c
+index f3911bcd861..6cb76e8e162 100644
+--- a/glob/glob.c
++++ b/glob/glob.c
+@@ -208,29 +208,8 @@ my_realloc (p, n)
+ #endif /* __GNU_LIBRARY__ || __DJGPP__ */
+ 
+ 
+-#if !defined __alloca && !defined __GNU_LIBRARY__
+-
+-# ifdef	__GNUC__
+-#  undef alloca
+-#  define alloca(n)	__builtin_alloca (n)
+-# else	/* Not GCC.  */
+-#  ifdef HAVE_ALLOCA_H
+-#   include <alloca.h>
+-#  else	/* Not HAVE_ALLOCA_H.  */
+-#   ifndef _AIX
+-#    ifdef WINDOWS32
+-#     include <malloc.h>
+-#    else
+-extern char *alloca ();
+-#    endif /* WINDOWS32 */
+-#   endif /* Not _AIX.  */
+-#  endif /* sparc or HAVE_ALLOCA_H.  */
+-# endif	/* GCC.  */
+-
+ # define __alloca	alloca
+ 
+-#endif
+-
+ #ifndef __GNU_LIBRARY__
+ # define __stat stat
+ # ifdef STAT_MACROS_BROKEN
diff --git a/nixpkgs/pkgs/development/tools/build-managers/samurai/default.nix b/nixpkgs/pkgs/development/tools/build-managers/samurai/default.nix
new file mode 100644
index 000000000000..675160751d1e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/samurai/default.nix
@@ -0,0 +1,59 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch
+}:
+
+stdenv.mkDerivation rec {
+  pname = "samurai";
+  version = "1.2";
+
+  src = fetchFromGitHub {
+    owner = "michaelforney";
+    repo = pname;
+    rev = version;
+    hash = "sha256-RPY3MFlnSDBZ5LOkdWnMiR/CZIBdqIFo9uLU+SAKPBI=";
+  };
+
+  makeFlags = [ "DESTDIR=" "PREFIX=${placeholder "out"}" ];
+
+  patches = [
+    # NULL pointer dereference in writefile() in util.c; remove this at the next
+    # release
+    (fetchpatch {
+      name = "CVE-2021-30218.patch";
+      url = "https://github.com/michaelforney/samurai/commit/e84b6d99c85043fa1ba54851ee500540ec206918.patch";
+      sha256 = "sha256-hyndwj6st4rwOJ35Iu0qL12dR5E6CBvsulvR27PYKMw=";
+    })
+    # NULL pointer dereference in printstatus() in build.c; remove this at the
+    # next release
+    (fetchpatch {
+      name = "CVE-2021-30219.patch";
+      url = "https://github.com/michaelforney/samurai/commit/d2af3bc375e2a77139c3a28d6128c60cd8d08655.patch";
+      sha256 = "sha256-rcdwKjHeq5Oaga9wezdHSg/7ljkynfbnkBc2ciMW5so=";
+    })
+  ];
+
+  meta = with lib; {
+    description = "ninja-compatible build tool written in C";
+    longDescription = ''
+      samurai is a ninja-compatible build tool with a focus on simplicity,
+      speed, and portability.
+
+      It is written in C99, requires various POSIX.1-2008 interfaces, and
+      nowadays implements ninja build language through version 1.9.0 except for
+      Microsoft (R) Visual C++ (TM) dependency handling (deps = msvc).
+
+      It is feature-complete (but not bug-compatible) and supports most of the
+      same options as ninja, using the same format for .ninja_log and
+      .ninja_deps as the original ninja tool, currently version 5 and 4
+      respectively.
+    '';
+    homepage = "https://github.com/michaelforney/samurai";
+    license = with licenses; [ mit asl20 ]; # see LICENSE
+    maintainers = with maintainers; [ dtzWill AndersonTorres ];
+    mainProgram = "samu";
+    platforms = platforms.all;
+  };
+}
+
diff --git a/nixpkgs/pkgs/development/tools/build-managers/sbt-extras/default.nix b/nixpkgs/pkgs/development/tools/build-managers/sbt-extras/default.nix
new file mode 100644
index 000000000000..bd6b512f2842
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/sbt-extras/default.nix
@@ -0,0 +1,78 @@
+{ lib, stdenv, fetchFromGitHub, which, curl, makeWrapper, jdk, writeScript
+, common-updater-scripts, cacert, git, nixfmt, nix, jq, coreutils, gnused }:
+
+stdenv.mkDerivation rec {
+  pname = "sbt-extras";
+  rev = "85c92ae7ebeeeb04cce7e405ad6096ea5fd67b22";
+  version = "2023-10-24";
+
+  src = fetchFromGitHub {
+    owner = "paulp";
+    repo = "sbt-extras";
+    inherit rev;
+    sha256 = "7T0Fw1sfftxRF9cbQRC3sk87cFM/k1yqDHAkemYbIx8=";
+  };
+
+  dontBuild = true;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+
+    substituteInPlace bin/sbt --replace 'declare java_cmd="java"' 'declare java_cmd="${jdk}/bin/java"'
+
+    install bin/sbt $out/bin
+
+    wrapProgram $out/bin/sbt --prefix PATH : ${lib.makeBinPath [ which curl ]}
+
+    runHook postInstall
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/sbt -h >/dev/null
+  '';
+
+  passthru.updateScript = writeScript "update.sh" ''
+     #!${stdenv.shell}
+     set -xo errexit
+     PATH=${
+       lib.makeBinPath [
+         common-updater-scripts
+         curl
+         cacert
+         git
+         nixfmt
+         nix
+         jq
+         coreutils
+         gnused
+       ]
+     }
+    oldVersion="$(nix-instantiate --eval -E "with import ./. {}; lib.getVersion ${pname}" | tr -d '"')"
+     latestSha="$(curl -L -s https://api.github.com/repos/paulp/sbt-extras/commits\?sha\=master\&since\=$oldVersion | jq -r '.[0].sha')"
+    if [ ! "null" = "$latestSha" ]; then
+       nixpkgs="$(git rev-parse --show-toplevel)"
+       default_nix="$nixpkgs/pkgs/development/tools/build-managers/sbt-extras/default.nix"
+       latestDate="$(curl -L -s https://api.github.com/repos/paulp/sbt-extras/commits/$latestSha | jq '.commit.committer.date' | sed 's|"\(.*\)T.*|\1|g')"
+       update-source-version ${pname} "$latestSha" --version-key=rev
+       update-source-version ${pname} "$latestDate" --ignore-same-hash
+       nixfmt "$default_nix"
+     else
+       echo "${pname} is already up-to-date"
+     fi
+  '';
+
+  meta = {
+    description =
+      "A more featureful runner for sbt, the simple/scala/standard build tool";
+    homepage = "https://github.com/paulp/sbt-extras";
+    license = lib.licenses.bsd3;
+    maintainers = with lib.maintainers; [ nequissimus puffnfresh ];
+    mainProgram = "sbt";
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/sbt/default.nix b/nixpkgs/pkgs/development/tools/build-managers/sbt/default.nix
new file mode 100644
index 000000000000..e554268e102a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/sbt/default.nix
@@ -0,0 +1,55 @@
+{ lib
+, stdenv
+, fetchurl
+, jre
+, autoPatchelfHook
+, zlib
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "sbt";
+  version = "1.9.8";
+
+  src = fetchurl {
+    url = "https://github.com/sbt/sbt/releases/download/v${finalAttrs.version}/sbt-${finalAttrs.version}.tgz";
+    hash = "sha256-qG//418Ga2XV4C67SiytHPu0GPgwv19z0n8wc+7K/c0=";
+  };
+
+  postPatch = ''
+    echo -java-home ${jre.home} >>conf/sbtopts
+  '';
+
+  nativeBuildInputs = lib.optionals stdenv.isLinux [ autoPatchelfHook ];
+
+  buildInputs = lib.optionals stdenv.isLinux [
+    stdenv.cc.cc # libstdc++.so.6
+    zlib
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/share/sbt $out/bin
+    cp -ra . $out/share/sbt
+    ln -sT ../share/sbt/bin/sbt $out/bin/sbt
+    ln -sT ../share/sbt/bin/sbtn-${
+      if (stdenv.hostPlatform.isAarch64) then "aarch64" else "x86_64"
+    }-${
+      if (stdenv.isDarwin) then "apple-darwin" else "pc-linux"
+    } $out/bin/sbtn
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://www.scala-sbt.org/";
+    license = licenses.bsd3;
+    sourceProvenance = with sourceTypes; [
+      binaryBytecode
+      binaryNativeCode
+    ];
+    description = "A build tool for Scala, Java and more";
+    maintainers = with maintainers; [ nequissimus kashw2 ];
+    platforms = platforms.unix;
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/build-managers/sbt/scala-native.nix b/nixpkgs/pkgs/development/tools/build-managers/sbt/scala-native.nix
new file mode 100644
index 000000000000..caa9feebb519
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/sbt/scala-native.nix
@@ -0,0 +1,14 @@
+{ lib, sbt, makeWrapper, boehmgc, libunwind, re2, llvmPackages, zlib }:
+
+sbt.overrideAttrs(previousAttrs: {
+  nativeBuildInputs = (previousAttrs.nativeBuildInputs or [ ]) ++ [ makeWrapper ];
+
+  postFixup = (previousAttrs.postFixup or "") + ''
+    wrapProgram $out/bin/sbt \
+      --set CLANG_PATH      "${llvmPackages.clang}/bin/clang" \
+      --set CLANGPP_PATH    "${llvmPackages.clang}/bin/clang" \
+      --set CPATH           "${lib.makeSearchPathOutput "dev" "include" [ re2 zlib boehmgc libunwind llvmPackages.libcxxabi llvmPackages.libcxx ]}/c++/v1" \
+      --set LIBRARY_PATH    "${lib.makeLibraryPath [ re2 zlib boehmgc libunwind llvmPackages.libcxxabi llvmPackages.libcxx ]}" \
+      --set NIX_CFLAGS_LINK "-lc++abi -lc++"
+  '';
+})
diff --git a/nixpkgs/pkgs/development/tools/build-managers/scala-cli/default.nix b/nixpkgs/pkgs/development/tools/build-managers/scala-cli/default.nix
new file mode 100644
index 000000000000..293607bf3d6b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/scala-cli/default.nix
@@ -0,0 +1,87 @@
+{ stdenv
+, coreutils
+, lib
+, installShellFiles
+, zlib
+, autoPatchelfHook
+, fetchurl
+, makeWrapper
+, callPackage
+, jre
+, testers
+, scala-cli
+}:
+
+let
+  pname = "scala-cli";
+  sources = lib.importJSON ./sources.json;
+  inherit (sources) version assets;
+
+  platforms = builtins.attrNames assets;
+in
+stdenv.mkDerivation {
+  inherit pname version;
+  nativeBuildInputs = [ installShellFiles makeWrapper ]
+    ++ lib.optional stdenv.isLinux autoPatchelfHook;
+  buildInputs =
+    assert lib.assertMsg (lib.versionAtLeast jre.version "17.0.0") ''
+      scala-cli requires Java 17 or newer, but ${jre.name} is ${jre.version}
+    '';
+    [ coreutils zlib stdenv.cc.cc ];
+  src =
+    let
+      asset = assets."${stdenv.hostPlatform.system}" or (throw "Unsupported platform ${stdenv.hostPlatform.system}");
+    in
+    fetchurl {
+      url = "https://github.com/Virtuslab/scala-cli/releases/download/v${version}/${asset.asset}";
+      sha256 = asset.sha256;
+    };
+  unpackPhase = ''
+    runHook preUnpack
+    gzip -d < $src > scala-cli
+    runHook postUnpack
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm755 scala-cli $out/bin/.scala-cli-wrapped
+    makeWrapper $out/bin/.scala-cli-wrapped $out/bin/scala-cli \
+      --set JAVA_HOME ${jre.home} \
+      --argv0 "$out/bin/scala-cli"
+    runHook postInstall
+  '';
+
+  # We need to call autopatchelf before generating completions
+  dontAutoPatchelf = true;
+
+  postFixup = lib.optionalString stdenv.isLinux ''
+    autoPatchelf $out
+  '' + ''
+    # hack to ensure the completion function looks right
+    # as $0 is used to generate the compdef directive
+    mkdir temp
+    cp $out/bin/.scala-cli-wrapped temp/scala-cli
+    PATH="./temp:$PATH"
+
+    installShellCompletion --cmd scala-cli \
+      --bash <(scala-cli completions bash) \
+      --zsh <(scala-cli completions zsh)
+  '';
+
+  meta = with lib; {
+    homepage = "https://scala-cli.virtuslab.org";
+    downloadPage = "https://github.com/VirtusLab/scala-cli/releases/v${version}";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.asl20;
+    description = "Command-line tool to interact with the Scala language";
+    maintainers = [ maintainers.kubukoz ];
+    inherit platforms;
+  };
+
+  passthru.updateScript = callPackage ./update.nix { } { inherit platforms pname version; };
+
+  passthru.tests.version = testers.testVersion {
+    package = scala-cli;
+    command = "scala-cli version --offline";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/scala-cli/sources.json b/nixpkgs/pkgs/development/tools/build-managers/scala-cli/sources.json
new file mode 100644
index 000000000000..20718c2c909f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/scala-cli/sources.json
@@ -0,0 +1,21 @@
+{
+  "version": "1.1.1",
+  "assets": {
+    "aarch64-darwin": {
+      "asset": "scala-cli-aarch64-apple-darwin.gz",
+      "sha256": "1sxfwdgqzhxxhgj0kid10iay4sqq9ajndnncxl7jhh2ib59bavj2"
+    },
+    "aarch64-linux": {
+      "asset": "scala-cli-aarch64-pc-linux.gz",
+      "sha256": "1z3xvyjs69iy0y59q2bwpa6blslhc1wdgwrm8xsfd0x8y0dg8kq2"
+    },
+    "x86_64-darwin": {
+      "asset": "scala-cli-x86_64-apple-darwin.gz",
+      "sha256": "05xincadr0y5kly8j058pn41wa6qmqcf6p62s45h881y3ydghxch"
+    },
+    "x86_64-linux": {
+      "asset": "scala-cli-x86_64-pc-linux.gz",
+      "sha256": "0knjkkyw7libqdzw770whrbwdcyr5qabnjw7ayps0k4kql43cyns"
+    }
+  }
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/scala-cli/update.nix b/nixpkgs/pkgs/development/tools/build-managers/scala-cli/update.nix
new file mode 100644
index 000000000000..fd79a1cf3a8b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/scala-cli/update.nix
@@ -0,0 +1,37 @@
+{ lib, curl, writeShellScript, jq, gnused, git, nix, coreutils }: { platforms, pname, version }:
+
+writeShellScript "${pname}-update-script" ''
+  set -o errexit
+  PATH=${lib.makeBinPath [ curl jq gnused git nix coreutils ]}
+
+  latest_version=$(curl -s "https://api.github.com/repos/VirtusLab/scala-cli/releases?per_page=1" | jq ".[0].tag_name" --raw-output | sed 's/^v//')
+
+  if [[ "${version}" = "$latest_version" ]]; then
+      echo "The new version same as the old version."
+      exit 0
+  fi
+
+  nixpkgs=$(git rev-parse --show-toplevel)
+  sources_json="$nixpkgs/pkgs/development/tools/build-managers/scala-cli/sources.json"
+
+  platform_assets=()
+
+  for platform in ${lib.concatStringsSep " " platforms}; do
+    asset=$(jq ".assets.\"$platform\".asset" --raw-output < $sources_json)
+    release_asset_url="https://github.com/Virtuslab/scala-cli/releases/download/v$latest_version/$asset"
+
+    asset_hash=$(nix-prefetch-url "$release_asset_url")
+
+    asset_object=$(jq --compact-output --null-input \
+      --arg asset "$asset" \
+      --arg sha256 "$asset_hash" \
+      --arg platform "$platform" \
+      '{asset: $asset, sha256: $sha256, platform: $platform}')
+    platform_assets+=($asset_object)
+  done
+
+  printf '%s\n' "''${platform_assets[@]}" | \
+    jq -s "map ( { (.platform): . | del(.platform) }) | add" | \
+    jq --arg version $latest_version \
+      '{ version: $version, assets: . }' > $sources_json
+''
diff --git a/nixpkgs/pkgs/development/tools/build-managers/scons/3.1.2.nix b/nixpkgs/pkgs/development/tools/build-managers/scons/3.1.2.nix
new file mode 100644
index 000000000000..0bac0685b0d1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/scons/3.1.2.nix
@@ -0,0 +1,48 @@
+{ lib, fetchFromGitHub, python3 }:
+
+let
+  pname = "scons";
+  version = "3.1.2";
+  src = fetchFromGitHub {
+    owner = "Scons";
+    repo = "scons";
+    rev = version;
+    hash = "sha256-C3U4N7+9vplzoJoevQe5Zeuz0TDmB6/miMwBJLzA3WA=";
+  };
+in
+python3.pkgs.buildPythonApplication {
+  inherit pname version src;
+
+  outputs = [ "out" "man" ];
+
+  preConfigure = ''
+    python bootstrap.py
+    cd build/scons
+  '';
+
+  setupHook = ./setup-hook.sh;
+
+  doCheck = true;
+
+  passthru = {
+    # expose the used python version so tools using this (and extensing scos
+    # with other python modules) can use the exact same python version.
+    inherit python3;
+    python = python3;
+  };
+
+  meta = {
+    description = "An improved, cross-platform substitute for Make";
+    longDescription = ''
+      SCons is an Open Source software construction tool. Think of SCons as an
+      improved, cross-platform substitute for the classic Make utility with
+      integrated functionality similar to autoconf/automake and compiler caches
+      such as ccache. In short, SCons is an easier, more reliable and faster way
+      to build software.
+    '';
+    homepage = "https://scons.org/";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ AndersonTorres ];
+  };
+}
+# TODO: patch to get rid of distutils and other deprecations
diff --git a/nixpkgs/pkgs/development/tools/build-managers/scons/4.1.0.nix b/nixpkgs/pkgs/development/tools/build-managers/scons/4.1.0.nix
new file mode 100644
index 000000000000..f2edf5161aaf
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/scons/4.1.0.nix
@@ -0,0 +1,57 @@
+{ lib, fetchFromGitHub, python3 }:
+
+let
+  pname = "scons";
+  version = "4.1.0";
+  src = fetchFromGitHub {
+    owner = "Scons";
+    repo = "scons";
+    rev = version;
+    hash = "sha256-ldus/9ghqAMB7A+NrHiCQm7saCdIpqzufGCLxWRhYKU=";
+  };
+in
+python3.pkgs.buildPythonApplication {
+  inherit pname version src;
+
+  outputs = [ "out" "man" ];
+
+  postPatch = ''
+    substituteInPlace setup.cfg \
+      --replace "build/dist" "dist"
+  '';
+
+  preConfigure = ''
+    python scripts/scons.py
+  '';
+
+  postInstall = ''
+    mkdir -pv "$man/share/man/man1"
+    mv -v "$out/"*.1 "$man/share/man/man1/"
+  '';
+
+  setupHook = ./setup-hook.sh;
+
+  # The release tarballs don't contain any tests (runtest.py and test/*):
+  doCheck = false;
+
+  passthru = {
+    # expose the used python version so tools using this (and extensing scos
+    # with other python modules) can use the exact same python version.
+    inherit python3;
+    python = python3;
+  };
+
+  meta = {
+    description = "An improved, cross-platform substitute for Make";
+    longDescription = ''
+      SCons is an Open Source software construction tool. Think of SCons as an
+      improved, cross-platform substitute for the classic Make utility with
+      integrated functionality similar to autoconf/automake and compiler caches
+      such as ccache. In short, SCons is an easier, more reliable and faster way
+      to build software.
+    '';
+    homepage = "https://scons.org/";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ AndersonTorres ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/scons/4.5.2.nix b/nixpkgs/pkgs/development/tools/build-managers/scons/4.5.2.nix
new file mode 100644
index 000000000000..f63702cb7ef4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/scons/4.5.2.nix
@@ -0,0 +1,62 @@
+{ lib, fetchFromGitHub, python3 }:
+
+let
+  pname = "scons";
+  version = "4.5.2";
+  src = fetchFromGitHub {
+    owner = "Scons";
+    repo = "scons";
+    rev = version;
+    hash = "sha256-vxJsz24jDsPcttwPXq9+ztc/N7W4Gkydgykk/FLgZLo=";
+  };
+in
+python3.pkgs.buildPythonApplication {
+  inherit pname version src;
+
+  outputs = [ "out" "man" ];
+
+  patches = [
+    ./env.patch
+  ];
+
+  postPatch = ''
+    substituteInPlace setup.cfg \
+      --replace "build/dist" "dist" \
+      --replace "build/doc/man/" ""
+  '';
+
+  preConfigure = ''
+    python scripts/scons.py
+  '';
+
+  postInstall = ''
+    mkdir -p "$man/share/man/man1"
+    mv "$out/"*.1 "$man/share/man/man1/"
+  '';
+
+  setupHook = ./setup-hook.sh;
+
+  # The release tarballs don't contain any tests (runtest.py and test/*):
+  doCheck = false;
+
+  passthru = {
+    # expose the used python version so tools using this (and extensing scos
+    # with other python modules) can use the exact same python version.
+    inherit python3;
+    python = python3;
+  };
+
+  meta = {
+    description = "An improved, cross-platform substitute for Make";
+    longDescription = ''
+      SCons is an Open Source software construction tool. Think of SCons as an
+      improved, cross-platform substitute for the classic Make utility with
+      integrated functionality similar to autoconf/automake and compiler caches
+      such as ccache. In short, SCons is an easier, more reliable and faster way
+      to build software.
+    '';
+    homepage = "https://scons.org/";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ AndersonTorres ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/scons/env.patch b/nixpkgs/pkgs/development/tools/build-managers/scons/env.patch
new file mode 100644
index 000000000000..95615016aed9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/scons/env.patch
@@ -0,0 +1,9 @@
+diff --git a/SCons/Platform/posix.py b/SCons/Platform/posix.py
+index 4c9f8f9ba..d68da1b08 100644
+--- a/SCons/Platform/posix.py
++++ b/SCons/Platform/posix.py
+@@ -30,0 +31 @@ selection method.
++import os
+@@ -87 +88 @@ def generate(env):
+-    env['ENV']['PATH']    = '/usr/local/bin:/opt/bin:/bin:/usr/bin:/snap/bin'
++    env['ENV']['PATH']    = os.environ["PATH"]
diff --git a/nixpkgs/pkgs/development/tools/build-managers/scons/setup-hook.sh b/nixpkgs/pkgs/development/tools/build-managers/scons/setup-hook.sh
new file mode 100644
index 000000000000..bfd8f3cc07b9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/scons/setup-hook.sh
@@ -0,0 +1,87 @@
+# shellcheck shell=bash disable=SC2206
+
+sconsBuildPhase() {
+    runHook preBuild
+
+    if [ -n "$prefix" ]; then
+        mkdir -p "$prefix"
+    fi
+
+    if [ -z "${dontAddPrefix:-}" ] && [ -n "$prefix" ]; then
+        buildFlags="${prefixKey:-prefix=}$prefix $buildFlags"
+    fi
+
+    local flagsArray=(
+      ${enableParallelBuilding:+-j${NIX_BUILD_CORES}}
+      $sconsFlags ${sconsFlagsArray[@]}
+      $buildFlags ${buildFlagsArray[@]}
+    )
+
+    echoCmd 'scons build flags' "${flagsArray[@]}"
+    scons "${flagsArray[@]}"
+
+    runHook postBuild
+}
+
+sconsInstallPhase() {
+    runHook preInstall
+
+    if [ -n "$prefix" ]; then
+        mkdir -p "$prefix"
+    fi
+
+    if [ -z "${dontAddPrefix:-}" ] && [ -n "$prefix" ]; then
+        installFlags="${prefixKey:-prefix=}$prefix $installFlags"
+    fi
+
+    local flagsArray=(
+        ${enableParallelInstalling:+-j${NIX_BUILD_CORES}}
+        $sconsFlags ${sconsFlagsArray[@]}
+        $installFlags ${installFlagsArray[@]}
+        ${installTargets:-install}
+    )
+
+    echoCmd 'scons install flags' "${flagsArray[@]}"
+    scons "${flagsArray[@]}"
+
+    runHook postInstall
+}
+
+sconsCheckPhase() {
+    runHook preCheck
+
+    if [ -z "${checkTarget:-}" ]; then
+        if scons -n check >/dev/null 2>&1; then
+            checkTarget="check"
+        elif scons -n test >/dev/null 2>&1; then
+            checkTarget="test"
+        fi
+    fi
+
+    if [ -z "${checkTarget:-}" ]; then
+        echo "no check/test target found, doing nothing"
+    else
+        local flagsArray=(
+            ${enableParallelChecking:+-j${NIX_BUILD_CORES}}
+            $sconsFlags ${sconsFlagsArray[@]}
+            ${checkFlagsArray[@]}
+        )
+
+        echoCmd 'scons check flags' "${flagsArray[@]}"
+        scons "${flagsArray[@]}"
+    fi
+
+    runHook postCheck
+}
+
+if [ -z "${dontUseSconsBuild-}" ] && [ -z "${buildPhase-}" ]; then
+    buildPhase=sconsBuildPhase
+fi
+
+if [ -z "${dontUseSconsCheck-}" ] && [ -z "${checkPhase-}" ]; then
+    checkPhase=sconsCheckPhase
+fi
+
+if [ -z "${dontUseSconsInstall-}" ] && [ -z "${installPhase-}" ]; then
+    installPhase=sconsInstallPhase
+fi
diff --git a/nixpkgs/pkgs/development/tools/build-managers/shards/default.nix b/nixpkgs/pkgs/development/tools/build-managers/shards/default.nix
new file mode 100644
index 000000000000..721a70d22457
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/shards/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, fetchFromGitHub
+, crystal
+}:
+
+let
+  generic =
+    { version, hash }:
+
+    crystal.buildCrystalPackage {
+      pname = "shards";
+      inherit version;
+
+      src = fetchFromGitHub {
+        owner = "crystal-lang";
+        repo = "shards";
+        rev = "v${version}";
+        inherit hash;
+      };
+
+      # we cannot use `make` or `shards` here as it would introduce a cyclical dependency
+      format = "crystal";
+      shardsFile = ./shards.nix;
+      crystalBinaries.shards.src = "./src/shards.cr";
+
+      # tries to execute git which fails spectacularly
+      doCheck = false;
+
+      meta = with lib; {
+        description = "Dependency manager for the Crystal language";
+        license = licenses.asl20;
+        maintainers = with maintainers; [ peterhoeg ];
+        inherit (crystal.meta) homepage platforms;
+      };
+    };
+
+in
+rec {
+  shards_0_17 = generic {
+    version = "0.17.4";
+    hash = "sha256-DAFKmr57fW2CWiexbP4Mvoqfh9ALpYEZv3NFK4Z4Zo4=";
+  };
+
+  shards = shards_0_17;
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/shards/shards.nix b/nixpkgs/pkgs/development/tools/build-managers/shards/shards.nix
new file mode 100644
index 000000000000..95250acf1945
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/shards/shards.nix
@@ -0,0 +1,8 @@
+{
+  molinillo = {
+    owner = "crystal-lang";
+    repo = "crystal-molinillo";
+    rev = "v0.2.0";
+    sha256 = "0pzi8pbrjn03zgk3kbha2kqqq0crmr8gy98dr05kisafvbghzwnh";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/turtle-build/default.nix b/nixpkgs/pkgs/development/tools/build-managers/turtle-build/default.nix
new file mode 100644
index 000000000000..e1fbd6bf1261
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/turtle-build/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "turtle-build";
+  version = "0.4.8";
+
+  src = fetchFromGitHub {
+    owner = "raviqqe";
+    repo = "turtle-build";
+    rev = "v${version}";
+    hash = "sha256-PDpiLPMyBZzj2nBy76cSC4ab/kyaoZC/Gd2HSaRVHUM=";
+  };
+
+  cargoHash = "sha256-Z9PCnFrUgvF9anfShfU9U7iYISDpzAuJudLq/wN4ONU=";
+
+  meta = with lib; {
+    description = "Ninja-compatible build system for high-level programming languages written in Rust";
+    homepage = "https://github.com/raviqqe/turtle-build";
+    license = with licenses; [ asl20 mit ];
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "turtle";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/waf/default.nix b/nixpkgs/pkgs/development/tools/build-managers/waf/default.nix
new file mode 100644
index 000000000000..de4022ed7d70
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/waf/default.nix
@@ -0,0 +1,80 @@
+{ lib
+, stdenv
+, fetchFromGitLab
+, callPackage
+, ensureNewerSourcesForZipFilesHook
+, python3
+# optional list of extra waf tools, e.g. `[ "doxygen" "pytest" ]`
+, extraTools ? []
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "waf";
+  version = "2.0.26";
+
+  src = fetchFromGitLab {
+    owner = "ita1024";
+    repo = "waf";
+    rev = "waf-${finalAttrs.version}";
+    hash = "sha256-AXDMWlwivJ0Xot6iwuIIlbV2Anz6ieghyOI9jA4yrko=";
+  };
+
+  nativeBuildInputs = [
+    ensureNewerSourcesForZipFilesHook
+    python3
+  ];
+
+  buildInputs = [
+    # waf executable uses `#!/usr/bin/env python`
+    python3
+  ];
+
+  strictDeps = true;
+
+  configurePhase = ''
+    runHook preConfigure
+
+    python waf-light configure
+
+    runHook postConfigure
+  '';
+
+  buildPhase = let
+    extraToolsList =
+      lib.optionalString (extraTools != [])
+        "--tools=\"${lib.concatStringsSep "," extraTools}\"";
+  in
+  ''
+    runHook preBuild
+
+    python waf-light build ${extraToolsList}
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    install -D waf $out/bin/waf
+
+    runHook postInstall
+  '';
+
+  passthru = {
+    inherit python3 extraTools;
+    hook = callPackage ./hook.nix {
+      waf = finalAttrs.finalPackage;
+    };
+  };
+
+  meta = {
+    homepage = "https://waf.io";
+    description = "The meta build system";
+    changelog  = "https://gitlab.com/ita1024/waf/blob/${finalAttrs.version}/ChangeLog";
+    license = lib.licenses.bsd3;
+    mainProgram = "waf";
+    maintainers = with lib.maintainers; [ AndersonTorres vrthra ];
+    inherit (python3.meta) platforms;
+    sourceProvenance = [ lib.sourceTypes.fromSource ];
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/build-managers/waf/hook.nix b/nixpkgs/pkgs/development/tools/build-managers/waf/hook.nix
new file mode 100644
index 000000000000..ac497d227831
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/waf/hook.nix
@@ -0,0 +1,24 @@
+{ lib
+, stdenv
+, pkgs
+, makeSetupHook
+, waf
+}:
+
+makeSetupHook {
+  name = "waf-setup-hook";
+
+  substitutions = {
+    # Sometimes the upstream provides its own waf file; in order to honor it,
+    # waf is not inserted into propagatedBuildInputs, rather it is inserted
+    # directly
+    inherit waf;
+    wafCrossFlags = lib.optionalString (stdenv.hostPlatform.system != stdenv.targetPlatform.system)
+      ''--cross-compile "--cross-execute=${stdenv.targetPlatform.emulator pkgs}"'';
+  };
+
+  meta = {
+    description = "A setup hook for using Waf in Nixpkgs";
+    inherit (waf.meta) maintainers platforms broken;
+  };
+} ./setup-hook.sh
diff --git a/nixpkgs/pkgs/development/tools/build-managers/waf/setup-hook.sh b/nixpkgs/pkgs/development/tools/build-managers/waf/setup-hook.sh
new file mode 100644
index 000000000000..d3e2bf97e682
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/waf/setup-hook.sh
@@ -0,0 +1,94 @@
+# shellcheck shell=bash disable=SC2206
+
+wafConfigurePhase() {
+    runHook preConfigure
+
+    if ! [ -f "${wafPath:=./waf}" ]; then
+        echo "copying waf to $wafPath..."
+        cp @waf@/bin/waf "$wafPath"
+    fi
+
+    if [ -z "${dontAddPrefix:-}" ] && [ -n "$prefix" ]; then
+        local prefixFlag="${prefixKey:---prefix=}$prefix"
+    fi
+
+    if [ -n "${PKG_CONFIG}" ]; then
+      export PKGCONFIG="${PKG_CONFIG}"
+    fi
+
+    local flagsArray=(
+        $prefixFlag
+        $wafConfigureFlags "${wafConfigureFlagsArray[@]}"
+        ${wafConfigureTargets:-configure}
+    )
+
+    if [ -z "${dontAddWafCrossFlags:-}" ]; then
+        flagsArray+=(@wafCrossFlags@)
+    fi
+
+    echoCmd 'waf configure flags' "${flagsArray[@]}"
+    python "$wafPath" "${flagsArray[@]}"
+
+    if ! [[ -v enableParallelBuilding ]]; then
+        enableParallelBuilding=1
+        echo "waf: enabled parallel building"
+    fi
+
+    if ! [[ -v enableParallelInstalling ]]; then
+        enableParallelInstalling=1
+        echo "waf: enabled parallel installing"
+    fi
+
+    runHook postConfigure
+}
+
+wafBuildPhase () {
+    runHook preBuild
+
+    # set to empty if unset
+    : "${wafFlags=}"
+
+    local flagsArray=(
+      ${enableParallelBuilding:+-j ${NIX_BUILD_CORES}}
+      $wafFlags ${wafFlagsArray[@]}
+      $wafBuildFlags ${wafBuildFlagsArray[@]}
+      ${wafBuildTargets:-build}
+    )
+
+    echoCmd 'waf build flags' "${flagsArray[@]}"
+    python "$wafPath" "${flagsArray[@]}"
+
+    runHook postBuild
+}
+
+wafInstallPhase() {
+    runHook preInstall
+
+    if [ -n "$prefix" ]; then
+        mkdir -p "$prefix"
+    fi
+
+    local flagsArray=(
+        ${enableParallelInstalling:+-j ${NIX_BUILD_CORES}}
+        $wafFlags ${wafFlagsArray[@]}
+        $wafInstallFlags ${wafInstallFlagsArray[@]}
+        ${wafInstallTargets:-install}
+    )
+
+    echoCmd 'waf install flags' "${flagsArray[@]}"
+    python "$wafPath" "${flagsArray[@]}"
+
+    runHook postInstall
+}
+
+if [ -z "${dontUseWafConfigure-}" ] && [ -z "${configurePhase-}" ]; then
+    configurePhase=wafConfigurePhase
+fi
+
+if [ -z "${dontUseWafBuild-}" ] && [ -z "${buildPhase-}" ]; then
+    buildPhase=wafBuildPhase
+fi
+
+if [ -z "${dontUseWafInstall-}" ] && [ -z "${installPhase-}" ]; then
+    installPhase=wafInstallPhase
+fi
diff --git a/nixpkgs/pkgs/development/tools/build-managers/xmake/default.nix b/nixpkgs/pkgs/development/tools/build-managers/xmake/default.nix
new file mode 100644
index 000000000000..80c610eaa32b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/xmake/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, stdenv
+, fetchurl
+, pkg-config
+, lua
+, readline
+, ncurses
+, lz4
+, tbox
+, xmake-core-sv
+}:
+
+stdenv.mkDerivation rec {
+  pname = "xmake";
+  version = "2.8.6";
+
+  src = fetchurl {
+    url = "https://github.com/xmake-io/xmake/releases/download/v${version}/xmake-v${version}.tar.gz";
+    hash = "sha256-DmKE6v1RoyNgmCE8CVI39WrK+umoilBAa4gszl6iaz0=";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    lua
+    lua.pkgs.cjson
+    readline
+    ncurses
+    lz4
+    tbox
+    xmake-core-sv
+  ];
+
+  strictDeps = true;
+
+  configureFlags = [ "--external=y" ];
+
+  meta = with lib; {
+    description = "A cross-platform build utility based on Lua";
+    homepage = "https://xmake.io";
+    license = licenses.asl20;
+    platforms = lua.meta.platforms;
+    maintainers = with maintainers; [ rewine ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/development/tools/buildah/default.nix b/nixpkgs/pkgs/development/tools/buildah/default.nix
new file mode 100644
index 000000000000..f67dba03c365
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/buildah/default.nix
@@ -0,0 +1,74 @@
+{ lib
+, stdenv
+, buildGoModule
+, fetchFromGitHub
+, go-md2man
+, installShellFiles
+, pkg-config
+, gpgme
+, lvm2
+, btrfs-progs
+, libapparmor
+, libselinux
+, libseccomp
+, testers
+, buildah
+}:
+
+buildGoModule rec {
+  pname = "buildah";
+  version = "1.34.0";
+
+  src = fetchFromGitHub {
+    owner = "containers";
+    repo = "buildah";
+    rev = "v${version}";
+    hash = "sha256-LX7yc2FnCiquHV/tESJV/VkuUYXbRNSxmMzVpSz/F8w=";
+  };
+
+  outputs = [ "out" "man" ];
+
+  vendorHash = null;
+
+  doCheck = false;
+
+  nativeBuildInputs = [ go-md2man installShellFiles pkg-config ];
+
+  buildInputs = [
+    gpgme
+  ] ++ lib.optionals stdenv.isLinux [
+    btrfs-progs
+    libapparmor
+    libseccomp
+    libselinux
+    lvm2
+  ];
+
+  buildPhase = ''
+    runHook preBuild
+    patchShebangs .
+    make bin/buildah
+    make -C docs GOMD2MAN="go-md2man"
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm755 bin/buildah $out/bin/buildah
+    installShellCompletion --bash contrib/completions/bash/buildah
+    make -C docs install PREFIX="$man"
+    runHook postInstall
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = buildah;
+  };
+
+  meta = with lib; {
+    description = "A tool which facilitates building OCI images";
+    homepage = "https://buildah.io/";
+    changelog = "https://github.com/containers/buildah/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ ] ++ teams.podman.members;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/buildah/wrapper.nix b/nixpkgs/pkgs/development/tools/buildah/wrapper.nix
new file mode 100644
index 000000000000..7b9a672d6993
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/buildah/wrapper.nix
@@ -0,0 +1,67 @@
+{ buildah-unwrapped
+, runCommand
+, makeWrapper
+, symlinkJoin
+, lib
+, stdenv
+, extraPackages ? []
+, runc # Default container runtime
+, crun # Container runtime (default with cgroups v2 for podman/buildah)
+, conmon # Container runtime monitor
+, slirp4netns # User-mode networking for unprivileged namespaces
+, fuse-overlayfs # CoW for images, much faster than default vfs
+, util-linux # nsenter
+, iptables
+, aardvark-dns
+, netavark
+}:
+
+let
+  binPath = lib.makeBinPath ([
+  ] ++ lib.optionals stdenv.isLinux [
+    runc
+    crun
+    conmon
+    slirp4netns
+    fuse-overlayfs
+    util-linux
+    iptables
+  ] ++ extraPackages);
+
+  helpersBin = symlinkJoin {
+    name = "${buildah-unwrapped.pname}-helper-binary-wrapper-${buildah-unwrapped.version}";
+
+    # this only works for some binaries, others may need to be be added to `binPath` or in the modules
+    paths = [
+    ] ++ lib.optionals stdenv.isLinux [
+      aardvark-dns
+      netavark
+    ];
+  };
+
+in runCommand buildah-unwrapped.name {
+  name = "${buildah-unwrapped.pname}-wrapper-${buildah-unwrapped.version}";
+  inherit (buildah-unwrapped) pname version passthru;
+
+  preferLocalBuild = true;
+
+  meta = builtins.removeAttrs buildah-unwrapped.meta [ "outputsToInstall" ];
+
+  outputs = [
+    "out"
+    "man"
+  ];
+
+  nativeBuildInputs = [
+    makeWrapper
+  ];
+
+} ''
+  ln -s ${buildah-unwrapped.man} $man
+
+  mkdir -p $out/bin
+  ln -s ${buildah-unwrapped}/share $out/share
+  makeWrapper ${buildah-unwrapped}/bin/buildah $out/bin/buildah \
+    --set CONTAINERS_HELPER_BINARY_DIR ${helpersBin}/bin \
+    --prefix PATH : ${binPath}
+''
diff --git a/nixpkgs/pkgs/development/tools/buildkit/default.nix b/nixpkgs/pkgs/development/tools/buildkit/default.nix
new file mode 100644
index 000000000000..19f418b543a1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/buildkit/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "buildkit";
+  version = "0.12.5";
+
+  src = fetchFromGitHub {
+    owner = "moby";
+    repo = "buildkit";
+    rev = "v${version}";
+    hash = "sha256-LESaOrUxV/BHGW9JSZfTXpbedp1aegPFWu9/tRx2ArM=";
+  };
+
+  vendorHash = null;
+
+  subPackages = [ "cmd/buildctl" ] ++ lib.optionals stdenv.isLinux [ "cmd/buildkitd" ];
+
+  ldflags = [ "-s" "-w" "-X github.com/moby/buildkit/version.Version=${version}" "-X github.com/moby/buildkit/version.Revision=${src.rev}" ];
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Concurrent, cache-efficient, and Dockerfile-agnostic builder toolkit";
+    homepage = "https://github.com/moby/buildkit";
+    changelog = "https://github.com/moby/buildkit/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ vdemeester marsam developer-guy ];
+    mainProgram = "buildctl";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/buildpack/default.nix b/nixpkgs/pkgs/development/tools/buildpack/default.nix
new file mode 100644
index 000000000000..6cfe8ba348ea
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/buildpack/default.nix
@@ -0,0 +1,36 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles }:
+
+buildGoModule rec {
+  pname = "pack";
+  version = "0.33.1";
+
+  src = fetchFromGitHub {
+    owner = "buildpacks";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-5pQ51T9QO0Lt2XFM8L2liFckxI+Y1x+S73lMF8Vv3A4=";
+  };
+
+  vendorHash = "sha256-UCNpKBsdwWmllgIi/3Dr6lWJLOh6okYwOHmRfRW0iAQ=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  subPackages = [ "cmd/pack" ];
+
+  ldflags = [ "-s" "-w" "-X github.com/buildpacks/pack.Version=${version}" ];
+
+  postInstall = ''
+    installShellCompletion --cmd pack \
+      --zsh $(PACK_HOME=$PWD $out/bin/pack completion --shell zsh) \
+      --bash $(PACK_HOME=$PWD $out/bin/pack completion --shell bash) \
+      --fish $(PACK_HOME=$PWD $out/bin/pack completion --shell fish)
+  '';
+
+  meta = with lib; {
+    homepage = "https://buildpacks.io/";
+    changelog = "https://github.com/buildpacks/pack/releases/tag/v${version}";
+    description = "CLI for building apps using Cloud Native Buildpacks";
+    license = licenses.asl20;
+    maintainers = [ maintainers.marsam ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/bundletool/default.nix b/nixpkgs/pkgs/development/tools/bundletool/default.nix
new file mode 100644
index 000000000000..56c3a72ea7f1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/bundletool/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenvNoCC, fetchurl, makeBinaryWrapper, jre_headless }:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "bundletool";
+  version = "1.15.6";
+
+  src = fetchurl {
+    url = "https://github.com/google/bundletool/releases/download/${version}/bundletool-all-${version}.jar";
+    sha256 = "sha256-OK6KELzazvB+zOghEYjFySs3a+lto4/z7h8s9IlbLLg=";
+  };
+
+  dontUnpack = true;
+
+  nativeBuildInputs = [ makeBinaryWrapper ];
+
+  installPhase = ''
+    runHook preInstall
+    makeWrapper ${jre_headless}/bin/java $out/bin/bundletool --add-flags "-jar $src"
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Command-line tool to manipulate Android App Bundles";
+    homepage = "https://developer.android.com/studio/command-line/bundletool";
+    changelog = "https://github.com/google/bundletool/releases/tag/${version}";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    maintainers = with maintainers; [ marsam ];
+    platforms = jre_headless.meta.platforms;
+    license = licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/bunyan-rs/default.nix b/nixpkgs/pkgs/development/tools/bunyan-rs/default.nix
new file mode 100644
index 000000000000..28f53a148e22
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/bunyan-rs/default.nix
@@ -0,0 +1,26 @@
+{ rustPlatform
+, fetchFromGitHub
+, lib
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "bunyan-rs";
+  version = "0.1.9";
+
+  src = fetchFromGitHub {
+    owner = "LukeMathWalker";
+    repo = "bunyan";
+    rev = "v${version}";
+    sha256 = "sha256-dqhZIwxWBMXS2RgE8YynYrESVyAOIJ9ujAKcp2tDhvA=";
+  };
+
+  cargoSha256 = "sha256-sQ6f8BHGsPFPchFDjNlZimnu9i99SGYf5bYfM1/2Gac=";
+
+  meta = with lib; {
+    description = "A CLI to pretty print logs in bunyan format (Rust port of the original JavaScript bunyan CLI)";
+    homepage = "https://github.com/LukeMathWalker/bunyan";
+    license = with licenses; [ asl20 mit ];
+    maintainers = with maintainers; [ netcrns ];
+    mainProgram = "bunyan";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/butane/default.nix b/nixpkgs/pkgs/development/tools/butane/default.nix
new file mode 100644
index 000000000000..2355b856698d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/butane/default.nix
@@ -0,0 +1,34 @@
+{ lib, fetchFromGitHub, buildGoModule }:
+
+buildGoModule rec {
+  pname = "butane";
+  version = "0.19.0";
+
+  src = fetchFromGitHub {
+    owner = "coreos";
+    repo = "butane";
+    rev = "v${version}";
+    hash = "sha256-v3HJpkfzGFii4hUfKRiFwcBcAObL1ItYw/9t8FO9gss=";
+  };
+
+  vendorHash = null;
+
+  doCheck = false;
+
+  subPackages = [ "internal" ];
+
+  ldflags = [
+    "-X github.com/coreos/butane/internal/version.Raw=v${version}"
+  ];
+
+  postInstall = ''
+    mv $out/bin/{internal,butane}
+  '';
+
+  meta = with lib; {
+    description = "Translates human-readable Butane configs into machine-readable Ignition configs";
+    license = licenses.asl20;
+    homepage = "https://github.com/coreos/butane";
+    maintainers = with maintainers; [ elijahcaine ruuda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/cadre/Gemfile b/nixpkgs/pkgs/development/tools/cadre/Gemfile
new file mode 100644
index 000000000000..aa42f75c95cf
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cadre/Gemfile
@@ -0,0 +1,3 @@
+source 'https://rubygems.org'
+
+gem 'cadre', '=1.0.4'
diff --git a/nixpkgs/pkgs/development/tools/cadre/Gemfile.lock b/nixpkgs/pkgs/development/tools/cadre/Gemfile.lock
new file mode 100644
index 000000000000..5d22e69f31c0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cadre/Gemfile.lock
@@ -0,0 +1,19 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    cadre (1.0.4)
+      thor (>= 0.14, < 1.0)
+      tilt (> 1.0)
+      valise (~> 1.2)
+    thor (0.20.3)
+    tilt (2.0.9)
+    valise (1.2.1)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  cadre (= 1.0.4)
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/development/tools/cadre/default.nix b/nixpkgs/pkgs/development/tools/cadre/default.nix
new file mode 100644
index 000000000000..17b505bf2a9d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cadre/default.nix
@@ -0,0 +1,17 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "cadre";
+  gemdir = ./.;
+  exes = [ "cadre" ];
+
+  passthru.updateScript = bundlerUpdateScript "cadre";
+
+  meta = with lib; {
+    description = "Toolkit to add Ruby development - in-editor coverage, libnotify of test runs";
+    homepage    = "https://github.com/nyarly/cadre";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ nyarly nicknovitski ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/cadre/gemset.nix b/nixpkgs/pkgs/development/tools/cadre/gemset.nix
new file mode 100644
index 000000000000..e98f5c5f3e69
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cadre/gemset.nix
@@ -0,0 +1,35 @@
+{
+  cadre = {
+    dependencies = ["thor" "tilt" "valise"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "07q60s1bm2xar46g00ls5fjkn6dm2kfxhsz9ayblc31x5kr8d83a";
+      type = "gem";
+    };
+    version = "1.0.4";
+  };
+  thor = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1yhrnp9x8qcy5vc7g438amd5j9sw83ih7c30dr6g6slgw9zj3g29";
+      type = "gem";
+    };
+    version = "0.20.3";
+  };
+  tilt = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ca4k0clwf0rkvy7726x4nxpjxkpv67w043i39saxgldxd97zmwz";
+      type = "gem";
+    };
+    version = "2.0.9";
+  };
+  valise = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1arsbmk2gifrhv244qrld7s3202xrnxy6vlc5gqklg70dpsinbn5";
+      type = "gem";
+    };
+    version = "1.2.1";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/cambalache/default.nix b/nixpkgs/pkgs/development/tools/cambalache/default.nix
new file mode 100644
index 000000000000..a6918b0476e4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cambalache/default.nix
@@ -0,0 +1,105 @@
+{ stdenv
+, lib
+, fetchFromGitLab
+, python3
+, meson
+, ninja
+, pkg-config
+, gobject-introspection
+, desktop-file-utils
+, shared-mime-info
+, wrapGAppsHook
+, glib
+, gtk3
+, gtk4
+, gtksourceview4
+, libadwaita
+, libhandy
+, webkitgtk_4_1
+, webkitgtk_6_0
+, nix-update-script
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "cambalache";
+  version = "0.16.0";
+
+  format = "other";
+
+  # Did not fetch submodule since it is only for tests we don't run.
+  src = fetchFromGitLab {
+    domain = "gitlab.gnome.org";
+    owner = "jpu";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-Ha94Ca5a7EUBYuSJvMrLc5895Q2/01/tbKpwlHLmTDc=";
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    gobject-introspection # for setup hook
+    desktop-file-utils # for update-desktop-database
+    shared-mime-info # for update-mime-database
+    wrapGAppsHook
+  ];
+
+  pythonPath = with python3.pkgs; [
+    pygobject3
+    lxml
+  ];
+
+  buildInputs = [
+    glib
+    gtk3
+    gtk4
+    gtksourceview4
+    webkitgtk_4_1
+    webkitgtk_6_0
+    # For extra widgets support.
+    libadwaita
+    libhandy
+  ];
+
+  # Prevent double wrapping.
+  dontWrapGApps = true;
+
+  postPatch = ''
+    patchShebangs postinstall.py
+    # those programs are used at runtime not build time
+    # https://gitlab.gnome.org/jpu/cambalache/-/blob/0.12.1/meson.build#L79-80
+    substituteInPlace ./meson.build \
+      --replace "find_program('broadwayd', required: true)" "" \
+      --replace "find_program('gtk4-broadwayd', required: true)" ""
+  '';
+
+  preFixup = ''
+    # Let python wrapper use GNOME flags.
+    makeWrapperArgs+=(
+      # For broadway daemons
+      --prefix PATH : "${lib.makeBinPath [ gtk3 gtk4 ]}"
+      "''${gappsWrapperArgs[@]}"
+    )
+  '';
+
+  postFixup = ''
+    # Wrap a helper script in an unusual location.
+    wrapPythonProgramsIn "$out/${python3.sitePackages}/cambalache/priv/merengue" "$out $pythonPath"
+  '';
+
+  passthru = {
+    updateScript = nix-update-script { };
+  };
+
+  meta = with lib; {
+    homepage = "https://gitlab.gnome.org/jpu/cambalache";
+    description = "RAD tool for GTK 4 and 3 with data model first philosophy";
+    maintainers = teams.gnome.members;
+    license = with licenses; [
+      lgpl21Only # Cambalache
+      gpl2Only # tools
+    ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/capnproto-java/default.nix b/nixpkgs/pkgs/development/tools/capnproto-java/default.nix
new file mode 100644
index 000000000000..b96aa44a779c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/capnproto-java/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, capnproto, pkg-config }:
+
+stdenv.mkDerivation rec {
+  pname = "capnproto-java";
+  version = "0.1.16";
+
+  src = fetchFromGitHub {
+    owner = "capnproto";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-7uYtRHKsJvbE1b0HbNXGbRXpkUHHLjMDIWLlOUcQWDk=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ capnproto ];
+
+  makeFlags = [ "PREFIX=${placeholder "out"}" ];
+
+  meta = with lib; {
+    description = "Cap'n Proto codegen plugin for Java";
+    longDescription = "Only includes compiler plugin, the Java runtime/library that the generated code will link to must be built separately with Maven.";
+    homepage = "https://dwrensha.github.io/capnproto-java/index.html";
+    license = licenses.mit;
+    maintainers = with maintainers; [ bhipple solson ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/capnproto-rust/default.nix b/nixpkgs/pkgs/development/tools/capnproto-rust/default.nix
new file mode 100644
index 000000000000..e63cca6a5e90
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/capnproto-rust/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, fetchCrate
+, rustPlatform
+, capnproto
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "capnproto-rust";
+  version = "0.17.2";
+
+  src = fetchCrate {
+    crateName = "capnpc";
+    inherit version;
+    hash = "sha256-WVjXVLVoTCAtA8a6+zaX4itAaPCWb2c0trtSsxBopO4=";
+  };
+
+  cargoHash = "sha256-h9YArxHnY14T8eQCS4JVItjaCjv+2dorcOVBir7r6SY=";
+
+  postInstall = ''
+    mkdir -p $out/include/capnp
+    cp rust.capnp $out/include/capnp
+  '';
+
+  nativeCheckInputs = [
+    capnproto
+  ];
+
+  meta = with lib; {
+    description = "Cap'n Proto codegen plugin for Rust";
+    homepage = "https://github.com/capnproto/capnproto-rust";
+    license = licenses.mit;
+    maintainers = with maintainers; [ mikroskeem solson ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/carto/default.nix b/nixpkgs/pkgs/development/tools/carto/default.nix
new file mode 100644
index 000000000000..f48244111a84
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/carto/default.nix
@@ -0,0 +1,29 @@
+{ lib
+, buildNpmPackage
+, fetchFromGitHub
+}:
+
+buildNpmPackage rec {
+  pname = "carto";
+  version = "1.2.0";
+
+  src = fetchFromGitHub {
+    owner = "mapbox";
+    repo = "carto";
+    rev = "v${version}";
+    hash = "sha256-TylMgb2EI52uFmVeMJiQltgNCSh6MutFwUjsYC7gfEA=";
+  };
+
+  npmDepsHash = "sha256-8M9hze71bQWhyxcXeI/EOr0SQ+tx8Lb9LfvnGxYYo0A=";
+
+  dontNpmBuild = true;
+
+  meta = {
+    changelog = "https://github.com/mapbox/carto/blob/${src.rev}/CHANGELOG.md";
+    description = "Mapnik stylesheet compiler";
+    homepage = "https://github.com/mapbox/carto";
+    license = lib.licenses.asl20;
+    mainProgram = "carto";
+    maintainers = with lib.maintainers; [ Luflosi ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/castxml/default.nix b/nixpkgs/pkgs/development/tools/castxml/default.nix
new file mode 100644
index 000000000000..1a7c15d9a963
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/castxml/default.nix
@@ -0,0 +1,71 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, libffi
+, libxml2
+, zlib
+, withManual ? true
+, withHTML ? true
+, llvmPackages
+, python3
+}:
+
+let
+  inherit (llvmPackages) libclang llvm;
+  inherit (python3.pkgs) sphinx;
+in
+stdenv.mkDerivation (finalAttrs: {
+  pname = "castxml";
+  version = "0.6.4";
+
+  src = fetchFromGitHub {
+    owner = "CastXML";
+    repo = "CastXML";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-6xeMkqsFchZxrAsE2DLaIzGU4VMwyDckm00s69wahOo=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    llvm.dev
+  ] ++ lib.optionals (withManual || withHTML) [
+    sphinx
+  ];
+
+  buildInputs = [
+    libclang
+    libffi
+    libxml2
+    zlib
+  ];
+
+  propagatedBuildInputs = [
+    libclang
+  ];
+
+  cmakeFlags = [
+    "-DCLANG_RESOURCE_DIR=${libclang.dev}/"
+    "-DSPHINX_HTML=${if withHTML then "ON" else "OFF"}"
+    "-DSPHINX_MAN=${if withManual then "ON" else "OFF"}"
+  ];
+
+  # 97% tests passed, 97 tests failed out of 2881
+  # mostly because it checks command line and nix append -isystem and all
+  doCheck = false;
+  # -E exclude 4 tests based on names
+  # see https://github.com/CastXML/CastXML/issues/90
+  checkPhase = ''
+    runHook preCheck
+    ctest -E 'cmd.cc-(gnu|msvc)-((c-src-c)|(src-cxx))-cmd'
+    runHook postCheck
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/CastXML/CastXML";
+    description = "C-family Abstract Syntax Tree XML Output";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ AndersonTorres ];
+    platforms = platforms.unix;
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/cbfmt/default.nix b/nixpkgs/pkgs/development/tools/cbfmt/default.nix
new file mode 100644
index 000000000000..17340d7a7a76
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cbfmt/default.nix
@@ -0,0 +1,29 @@
+{ lib, rustPlatform, fetchFromGitHub, stdenv, testers, cbfmt }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cbfmt";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "lukas-reineke";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-/ZvL1ZHXcmE1n+hHvJeSqmnI9nSHJ+zM9lLNx0VQfIE=";
+  };
+
+  cargoSha256 = "sha256-6oZCpjQ8t/QLFhEtF7td8KGI/kFE04pg7OELutsrJKo=";
+
+  # Work around https://github.com/NixOS/nixpkgs/issues/166205.
+  env = lib.optionalAttrs stdenv.cc.isClang { NIX_LDFLAGS = "-l${stdenv.cc.libcxx.cxxabi.libName}"; };
+
+  passthru.tests.version = testers.testVersion {
+    package = cbfmt;
+  };
+
+  meta = with lib; {
+    description = "A tool to format codeblocks inside markdown and org documents";
+    homepage = "https://github.com/lukas-reineke/cbfmt";
+    license = licenses.mit;
+    maintainers = [ maintainers.stehessel ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/cbor-diag/Gemfile b/nixpkgs/pkgs/development/tools/cbor-diag/Gemfile
new file mode 100644
index 000000000000..798e507460eb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cbor-diag/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'cbor-diag'
diff --git a/nixpkgs/pkgs/development/tools/cbor-diag/Gemfile.lock b/nixpkgs/pkgs/development/tools/cbor-diag/Gemfile.lock
new file mode 100644
index 000000000000..27d74a07d515
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cbor-diag/Gemfile.lock
@@ -0,0 +1,27 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    cbor-canonical (0.1.2)
+    cbor-deterministic (0.1.3)
+    cbor-diag (0.8.7)
+      cbor-canonical
+      cbor-deterministic
+      cbor-packed
+      json_pure
+      neatjson
+      treetop (~> 1)
+    cbor-packed (0.1.5)
+    json_pure (2.6.3)
+    neatjson (0.10.5)
+    polyglot (0.3.5)
+    treetop (1.6.12)
+      polyglot (~> 0.3)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  cbor-diag
+
+BUNDLED WITH
+   2.4.20
diff --git a/nixpkgs/pkgs/development/tools/cbor-diag/default.nix b/nixpkgs/pkgs/development/tools/cbor-diag/default.nix
new file mode 100644
index 000000000000..8fe846cef823
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cbor-diag/default.nix
@@ -0,0 +1,35 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "cbor-diag";
+
+  gemdir = ./.;
+
+  exes = [
+    "cbor2diag.rb"
+    "cbor2json.rb"
+    "cbor2pretty.rb"
+    "cbor2yaml.rb"
+    "cborseq2diag.rb"
+    "cborseq2json.rb"
+    "cborseq2neatjson.rb"
+    "cborseq2yaml.rb"
+    "diag2cbor.rb"
+    "diag2pretty.rb"
+    "json2cbor.rb"
+    "json2pretty.rb"
+    "pretty2cbor.rb"
+    "pretty2diag.rb"
+    "yaml2cbor.rb"
+  ];
+
+  passthru.updateScript = bundlerUpdateScript "cbor-diag";
+
+  meta = with lib; {
+    description = "CBOR diagnostic utilities";
+    homepage    = "https://github.com/cabo/cbor-diag";
+    license     = with licenses; asl20;
+    maintainers = with maintainers; [ fdns nicknovitski ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/cbor-diag/gemset.nix b/nixpkgs/pkgs/development/tools/cbor-diag/gemset.nix
new file mode 100644
index 000000000000..ffb06225bfb2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cbor-diag/gemset.nix
@@ -0,0 +1,84 @@
+{
+  cbor-canonical = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fhj51s5d9b9spw096sb0p92bgilw9hrsay383563dh913j2jn11";
+      type = "gem";
+    };
+    version = "0.1.2";
+  };
+  cbor-deterministic = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1w1mg4mn1dhlxlbijxpzja8m8ggrjs0hzkzvnaazw9zm1ji6dpba";
+      type = "gem";
+    };
+    version = "0.1.3";
+  };
+  cbor-diag = {
+    dependencies = ["cbor-canonical" "cbor-deterministic" "cbor-packed" "json_pure" "neatjson" "treetop"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0rwd88xngbjamgydj9rg3wvgl53pfzhal2n702s9afa1yp8mjm51";
+      type = "gem";
+    };
+    version = "0.8.7";
+  };
+  cbor-packed = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1dijyj7rivi39h34f32fx7k4xvngldf569i0372n1z6w01nv761l";
+      type = "gem";
+    };
+    version = "0.1.5";
+  };
+  json_pure = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0kn736pb52j8b9xxq6l8wqp2chs74aa14vfnp0rijjn086m8b4f3";
+      type = "gem";
+    };
+    version = "2.6.3";
+  };
+  neatjson = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0wm1lq8yl6rzysh3wg6fa55w5534k6ppiz0qb7jyvdy582mk5i0s";
+      type = "gem";
+    };
+    version = "0.10.5";
+  };
+  polyglot = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1bqnxwyip623d8pr29rg6m8r0hdg08fpr2yb74f46rn1wgsnxmjr";
+      type = "gem";
+    };
+    version = "0.3.5";
+  };
+  treetop = {
+    dependencies = ["polyglot"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0adc8qblz8ii668r3rksjx83p675iryh52rvdvysimx2hkbasj7d";
+      type = "gem";
+    };
+    version = "1.6.12";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/cddl/Gemfile b/nixpkgs/pkgs/development/tools/cddl/Gemfile
new file mode 100644
index 000000000000..2ba729084f1a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cddl/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'cddl'
diff --git a/nixpkgs/pkgs/development/tools/cddl/Gemfile.lock b/nixpkgs/pkgs/development/tools/cddl/Gemfile.lock
new file mode 100644
index 000000000000..24afe0d41838
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cddl/Gemfile.lock
@@ -0,0 +1,40 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    abnc (0.1.1)
+    abnftt (0.2.4)
+    base32 (0.3.4)
+    cbor-canonical (0.1.2)
+    cbor-deterministic (0.1.3)
+    cbor-diag (0.8.7)
+      cbor-canonical
+      cbor-deterministic
+      cbor-packed
+      json_pure
+      neatjson
+      treetop (~> 1)
+    cbor-packed (0.1.5)
+    cddl (0.10.3)
+      abnc
+      abnftt
+      base32 (~> 0.3)
+      cbor-diag
+      colorize
+      json_pure
+      regexp-examples
+    colorize (1.1.0)
+    json_pure (2.7.1)
+    neatjson (0.10.5)
+    polyglot (0.3.5)
+    regexp-examples (1.5.1)
+    treetop (1.6.12)
+      polyglot (~> 0.3)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  cddl
+
+BUNDLED WITH
+   2.3.25
diff --git a/nixpkgs/pkgs/development/tools/cddl/default.nix b/nixpkgs/pkgs/development/tools/cddl/default.nix
new file mode 100644
index 000000000000..f99e547435ce
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cddl/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, bundlerApp
+, bundlerUpdateScript
+, makeBinaryWrapper
+}:
+
+bundlerApp rec {
+  pname = "cddl";
+
+  gemfile = ./Gemfile;
+  lockfile = ./Gemfile.lock;
+
+  gemset = lib.recursiveUpdate (import ./gemset.nix) ({
+    "cddl" = {
+      dontBuild = false;
+      # setting env vars is not supported by patchShebangs
+      postPatch = ''
+        sed -i 's\#!/usr/bin/env RUBY_THREAD_VM_STACK_SIZE=5000000\#!/usr/bin/env\' bin/cddl
+      '';
+    };
+  });
+
+  exes = [ "cddl" ];
+
+  nativeBuildInputs = [ makeBinaryWrapper ];
+
+  postBuild = ''
+    wrapProgram $out/bin/cddl \
+      --set RUBY_THREAD_VM_STACK_SIZE 5000000
+  '';
+
+  passthru.updateScript = bundlerUpdateScript "cddl";
+
+  meta = with lib; {
+    description = "A parser, generator, and validator for CDDL";
+    homepage    = "https://rubygems.org/gems/cddl";
+    license     = with licenses; mit;
+    maintainers = with maintainers; [ fdns nicknovitski amesgen ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/cddl/gemset.nix b/nixpkgs/pkgs/development/tools/cddl/gemset.nix
new file mode 100644
index 000000000000..1f19c3920bdf
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cddl/gemset.nix
@@ -0,0 +1,145 @@
+{
+  abnc = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0yj09gc9w208wsy0d45vzha4zfwxdpsqvkm9vms0chm4lxdwdg9x";
+      type = "gem";
+    };
+    version = "0.1.1";
+  };
+  abnftt = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1z7ibh0xv9mqk61rvvmz9fnfk6hffvnppqd8fx61vazjhisi9bcs";
+      type = "gem";
+    };
+    version = "0.2.4";
+  };
+  base32 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fjs0l3c5g9qxwp43kcnhc45slx29yjb6m6jxbb2x1krgjmi166b";
+      type = "gem";
+    };
+    version = "0.3.4";
+  };
+  cbor-canonical = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fhj51s5d9b9spw096sb0p92bgilw9hrsay383563dh913j2jn11";
+      type = "gem";
+    };
+    version = "0.1.2";
+  };
+  cbor-deterministic = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1w1mg4mn1dhlxlbijxpzja8m8ggrjs0hzkzvnaazw9zm1ji6dpba";
+      type = "gem";
+    };
+    version = "0.1.3";
+  };
+  cbor-diag = {
+    dependencies = ["cbor-canonical" "cbor-deterministic" "cbor-packed" "json_pure" "neatjson" "treetop"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0rwd88xngbjamgydj9rg3wvgl53pfzhal2n702s9afa1yp8mjm51";
+      type = "gem";
+    };
+    version = "0.8.7";
+  };
+  cbor-packed = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1dijyj7rivi39h34f32fx7k4xvngldf569i0372n1z6w01nv761l";
+      type = "gem";
+    };
+    version = "0.1.5";
+  };
+  cddl = {
+    dependencies = ["abnc" "abnftt" "base32" "cbor-diag" "colorize" "json_pure" "regexp-examples"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1qll1qvn3g75r742kr4da7240zdk2qj4vh325965rrjqp8brz23q";
+      type = "gem";
+    };
+    version = "0.10.3";
+  };
+  colorize = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0dy8ryhcdzgmbvj7jpa1qq3bhhk1m7a2pz6ip0m6dxh30rzj7d9h";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  json_pure = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09w7f7xlcas9irlaavhz0rnh17cjvjmmqm07drgghx5gwjcrar31";
+      type = "gem";
+    };
+    version = "2.7.1";
+  };
+  neatjson = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0wm1lq8yl6rzysh3wg6fa55w5534k6ppiz0qb7jyvdy582mk5i0s";
+      type = "gem";
+    };
+    version = "0.10.5";
+  };
+  polyglot = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1bqnxwyip623d8pr29rg6m8r0hdg08fpr2yb74f46rn1wgsnxmjr";
+      type = "gem";
+    };
+    version = "0.3.5";
+  };
+  regexp-examples = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0wfkwczjn62qq3z96dxk43m0gh6d5cajx9pxkanvk88d3yqnx29v";
+      type = "gem";
+    };
+    version = "1.5.1";
+  };
+  treetop = {
+    dependencies = ["polyglot"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0adc8qblz8ii668r3rksjx83p675iryh52rvdvysimx2hkbasj7d";
+      type = "gem";
+    };
+    version = "1.6.12";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/cdecl/cdecl-2.5-lex.patch b/nixpkgs/pkgs/development/tools/cdecl/cdecl-2.5-lex.patch
new file mode 100644
index 000000000000..ecdee5d544f6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cdecl/cdecl-2.5-lex.patch
@@ -0,0 +1,13 @@
+diff --git a/Makefile b/Makefile
+index 1643b74..8f1ae11 100644
+--- a/Makefile
++++ b/Makefile
+@@ -33,7 +33,7 @@ c++decl: cdgram.c cdlex.c cdecl.c
+ 	rm -f cdecl
+ 
+ cdlex.c: cdlex.l
+-	lex cdlex.l && mv lex.yy.c cdlex.c
++	flex cdlex.l && mv lex.yy.c cdlex.c
+ 
+ cdgram.c: cdgram.y
+ 	yacc cdgram.y && mv y.tab.c cdgram.c
diff --git a/nixpkgs/pkgs/development/tools/cdecl/default.nix b/nixpkgs/pkgs/development/tools/cdecl/default.nix
new file mode 100644
index 000000000000..48870c7d2df1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cdecl/default.nix
@@ -0,0 +1,26 @@
+{lib, stdenv, fetchurl, bison, flex, readline, ncurses, gnused}:
+
+stdenv.mkDerivation rec {
+  pname = "cdecl";
+  version = "2.5";
+  src = fetchurl {
+    url = "https://www.cdecl.org/files/${pname}-blocks-${version}.tar.gz";
+    sha256 = "1b7k0ra30hh8mg8fqv0f0yzkaac6lfg6n376drgbpxg4wwml1rly";
+  };
+
+  patches = [ ./cdecl-2.5-lex.patch ];
+  preBuild = ''
+    ${gnused}/bin/sed 's/getline/cdecl_getline/g' -i cdecl.c;
+    makeFlagsArray=(CFLAGS="-DBSD -DUSE_READLINE -std=gnu89" LIBS=-lreadline);
+    makeFlags="$makeFlags PREFIX=$out BINDIR=$out/bin MANDIR=$out/man1 CATDIR=$out/cat1 CC=$CC";
+    mkdir -p $out/bin;
+  '';
+  buildInputs = [bison flex readline ncurses];
+
+  meta = {
+    description = "Translator English -- C/C++ declarations";
+    license = lib.licenses.publicDomain;
+    maintainers = with lib.maintainers; [ ];
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/cdecrypt/default.nix b/nixpkgs/pkgs/development/tools/cdecrypt/default.nix
new file mode 100644
index 000000000000..bcbe34c886c1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cdecrypt/default.nix
@@ -0,0 +1,29 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+}:
+
+stdenv.mkDerivation rec {
+  pname = "cdecrypt";
+  version = "4.8";
+
+  src = fetchFromGitHub {
+    owner = "VitaSmith";
+    repo = "cdecrypt";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-PyT60RDyp1/Co/7WHC0+KrsnrDeTJ605x1pt4OmlGYg=";
+  };
+
+  installPhase = ''
+    install -Dm755 cdecrypt $out/bin/cdecrypt
+  '';
+
+  meta = with lib; {
+    description = "A utility that decrypts Wii U NUS content files";
+    homepage = "https://github.com/VitaSmith/cdecrypt";
+    changelog = "https://github.com/VitaSmith/cdecrypt/releases/tag/v${version}";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ hughobrien ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ceedling/Gemfile b/nixpkgs/pkgs/development/tools/ceedling/Gemfile
new file mode 100644
index 000000000000..01d6e98e76aa
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ceedling/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'ceedling'
diff --git a/nixpkgs/pkgs/development/tools/ceedling/Gemfile.lock b/nixpkgs/pkgs/development/tools/ceedling/Gemfile.lock
new file mode 100644
index 000000000000..2709a0edab5f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ceedling/Gemfile.lock
@@ -0,0 +1,21 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    ceedling (0.31.1)
+      constructor (~> 2)
+      deep_merge (~> 1.2)
+      rake (>= 12, < 14)
+      thor (~> 0.14)
+    constructor (2.0.0)
+    deep_merge (1.2.2)
+    rake (13.0.6)
+    thor (0.20.3)
+
+PLATFORMS
+  x86_64-linux
+
+DEPENDENCIES
+  ceedling
+
+BUNDLED WITH
+   2.4.17
diff --git a/nixpkgs/pkgs/development/tools/ceedling/default.nix b/nixpkgs/pkgs/development/tools/ceedling/default.nix
new file mode 100644
index 000000000000..5910b47b7424
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ceedling/default.nix
@@ -0,0 +1,16 @@
+{ lib
+, bundlerApp
+}:
+
+bundlerApp {
+  pname = "ceedling";
+  gemdir = ./.;
+  exes = [ "ceedling" ];
+
+  meta = with lib; {
+    description = "A build system for C projects that is something of an extension around Ruby's Rake";
+    homepage    = "http://www.throwtheswitch.org/ceedling";
+    license     = licenses.mit;
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ceedling/gemset.nix b/nixpkgs/pkgs/development/tools/ceedling/gemset.nix
new file mode 100644
index 000000000000..e094c7dd4d67
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ceedling/gemset.nix
@@ -0,0 +1,53 @@
+{
+  ceedling = {
+    dependencies = ["constructor" "deep_merge" "rake" "thor"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1jjvz14dg85v8c4raxvk618rq7f6kyna5148901xciz2zjpm3bri";
+      type = "gem";
+    };
+    version = "0.31.1";
+  };
+  constructor = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "02qmp08kcvi5dkz3lxm5yck9msfwfx1msvrrz9d6z4klc14q889y";
+      type = "gem";
+    };
+    version = "2.0.0";
+  };
+  deep_merge = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0fjn4civid68a3zxnbgyjj6krs3l30dy8b4djpg6fpzrsyix7kl3";
+      type = "gem";
+    };
+    version = "1.2.2";
+  };
+  rake = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15whn7p9nrkxangbs9hh75q585yfn66lv0v2mhj6q6dl6x8bzr2w";
+      type = "gem";
+    };
+    version = "13.0.6";
+  };
+  thor = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1yhrnp9x8qcy5vc7g438amd5j9sw83ih7c30dr6g6slgw9zj3g29";
+      type = "gem";
+    };
+    version = "0.20.3";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/cfn-nag/Gemfile b/nixpkgs/pkgs/development/tools/cfn-nag/Gemfile
new file mode 100644
index 000000000000..5ccc66872d41
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cfn-nag/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'cfn-nag'
diff --git a/nixpkgs/pkgs/development/tools/cfn-nag/Gemfile.lock b/nixpkgs/pkgs/development/tools/cfn-nag/Gemfile.lock
new file mode 100644
index 000000000000..86bfdad86108
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cfn-nag/Gemfile.lock
@@ -0,0 +1,51 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    aws-eventstream (1.2.0)
+    aws-partitions (1.568.0)
+    aws-sdk-core (3.130.0)
+      aws-eventstream (~> 1, >= 1.0.2)
+      aws-partitions (~> 1, >= 1.525.0)
+      aws-sigv4 (~> 1.1)
+      jmespath (~> 1.0)
+    aws-sdk-kms (1.55.0)
+      aws-sdk-core (~> 3, >= 3.127.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-s3 (1.113.0)
+      aws-sdk-core (~> 3, >= 3.127.0)
+      aws-sdk-kms (~> 1)
+      aws-sigv4 (~> 1.4)
+    aws-sigv4 (1.4.0)
+      aws-eventstream (~> 1, >= 1.0.2)
+    cfn-model (0.6.6)
+      kwalify (= 0.7.2)
+      psych (~> 3)
+    cfn-nag (0.8.9)
+      aws-sdk-s3 (~> 1.76)
+      cfn-model (= 0.6.6)
+      lightly (~> 0.3.2)
+      logging (~> 2.2.2)
+      netaddr (~> 2.0.4)
+      optimist (~> 3.0.0)
+      rexml
+    jmespath (1.6.1)
+    kwalify (0.7.2)
+    lightly (0.3.3)
+    little-plugger (1.1.4)
+    logging (2.2.2)
+      little-plugger (~> 1.1)
+      multi_json (~> 1.10)
+    multi_json (1.15.0)
+    netaddr (2.0.5)
+    optimist (3.0.1)
+    psych (3.3.2)
+    rexml (3.2.5)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  cfn-nag
+
+BUNDLED WITH
+   2.2.28
diff --git a/nixpkgs/pkgs/development/tools/cfn-nag/default.nix b/nixpkgs/pkgs/development/tools/cfn-nag/default.nix
new file mode 100644
index 000000000000..4e25f052401d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cfn-nag/default.nix
@@ -0,0 +1,19 @@
+{ lib, bundlerEnv, bundlerUpdateScript, ruby }:
+
+bundlerEnv {
+  pname = "cfn-nag";
+  version = "0.8.9";
+
+  inherit ruby;
+  gemdir = ./.;
+
+  passthru.updateScript = bundlerUpdateScript "cfn-nag";
+
+  meta = with lib; {
+    description = "Linting tool for CloudFormation templates";
+    homepage = "https://github.com/stelligent/cfn_nag";
+    license = licenses.mit;
+    maintainers = with maintainers; [ wolfangaukang ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/cfn-nag/gemset.nix b/nixpkgs/pkgs/development/tools/cfn-nag/gemset.nix
new file mode 100644
index 000000000000..e2e39f7a8137
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cfn-nag/gemset.nix
@@ -0,0 +1,189 @@
+{
+  aws-eventstream = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pyis1nvnbjxk12a43xvgj2gv0mvp4cnkc1gzw0v1018r61399gz";
+      type = "gem";
+    };
+    version = "1.2.0";
+  };
+  aws-partitions = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ap27g6hxcczpb5dj7v0wzxrvywfa2kf3zx69xnjz1qvxf3plw54";
+      type = "gem";
+    };
+    version = "1.568.0";
+  };
+  aws-sdk-core = {
+    dependencies = ["aws-eventstream" "aws-partitions" "aws-sigv4" "jmespath"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "14ymvp06k46gvkpvz5zaqvbvr6wd8vdka5iq25q0wd0fzdx7aivm";
+      type = "gem";
+    };
+    version = "3.130.0";
+  };
+  aws-sdk-kms = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0fmpdll52ng1kfn4r5ndcyppn5553qvvxw87w58m9n70ga3avasi";
+      type = "gem";
+    };
+    version = "1.55.0";
+  };
+  aws-sdk-s3 = {
+    dependencies = ["aws-sdk-core" "aws-sdk-kms" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0iafjly868kdzmpxkv1ndmqm524ik36ibs15mqh145vw32gz7bax";
+      type = "gem";
+    };
+    version = "1.113.0";
+  };
+  aws-sigv4 = {
+    dependencies = ["aws-eventstream"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1wh1y79v0s4zgby2m79bnifk65hwf5pvk2yyrxzn2jkjjq8f8fqa";
+      type = "gem";
+    };
+    version = "1.4.0";
+  };
+  cfn-model = {
+    dependencies = ["kwalify" "psych"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1b3ix36yfnfwyxb4w9ss8a7nc6w15m1wbj3q8rarsqjrs3xj6wjs";
+      type = "gem";
+    };
+    version = "0.6.6";
+  };
+  cfn-nag = {
+    dependencies = ["aws-sdk-s3" "cfn-model" "lightly" "logging" "netaddr" "optimist" "rexml"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "14qlnflxx5chjvda9n2ka2axcfcjbmn9h00cija8k7kvpy1dgqga";
+      type = "gem";
+    };
+    version = "0.8.9";
+  };
+  jmespath = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1mnvb80cdg7fzdcs3xscv21p28w4igk5sj5m7m81xp8v2ks87jj0";
+      type = "gem";
+    };
+    version = "1.6.1";
+  };
+  kwalify = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ngxg3ysq5vip9dn3d32ajc7ly61kdin86hfycm1hkrcvkkn1vjf";
+      type = "gem";
+    };
+    version = "0.7.2";
+  };
+  lightly = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0sgj2r6j7qxb9vqzkx5isjbphi38rplk4h8838am0cjcpq5h3jb3";
+      type = "gem";
+    };
+    version = "0.3.3";
+  };
+  little-plugger = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1frilv82dyxnlg8k1jhrvyd73l6k17mxc5vwxx080r4x1p04gwym";
+      type = "gem";
+    };
+    version = "1.1.4";
+  };
+  logging = {
+    dependencies = ["little-plugger" "multi_json"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "06j6iaj89h9jhkx1x3hlswqrfnqds8br05xb1qra69dpvbdmjcwn";
+      type = "gem";
+    };
+    version = "2.2.2";
+  };
+  multi_json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0pb1g1y3dsiahavspyzkdy39j4q377009f6ix0bh1ag4nqw43l0z";
+      type = "gem";
+    };
+    version = "1.15.0";
+  };
+  netaddr = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0r7nln9xvrralwwhd5s1q4sghp0k9y7g9z5pinzpqkx715xcpdxm";
+      type = "gem";
+    };
+    version = "2.0.5";
+  };
+  optimist = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vg2chy1cfmdj6c1gryl8zvjhhmb3plwgyh1jfnpq4fnfqv7asrk";
+      type = "gem";
+    };
+    version = "3.0.1";
+  };
+  psych = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "10iawnkpa44hcfrapy7yw6zmjn4g1g0y09lw244qiv424f7jasn5";
+      type = "gem";
+    };
+    version = "3.3.2";
+  };
+  rexml = {
+    groups = ["default" "development"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08ximcyfjy94pm1rhcx04ny1vx2sk0x4y185gzn86yfsbzwkng53";
+      type = "gem";
+    };
+    version = "3.2.5";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/changie/default.nix b/nixpkgs/pkgs/development/tools/changie/default.nix
new file mode 100644
index 000000000000..bd52641f2be5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/changie/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+}:
+
+buildGoModule rec {
+  pname = "changie";
+  version = "1.18.0";
+
+  src = fetchFromGitHub {
+    owner = "miniscruff";
+    repo = "changie";
+    rev = "v${version}";
+    hash = "sha256-pZe9T/WALFX5xwCiZKbf8fpaG3wmBJbqgM7FTPqlN2k=";
+  };
+
+  vendorHash = "sha256-SdaDu9LXgelSEXdOCAbtvt1LnrSVpAIoN6MDSjTeEOs=";
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  ldflags = [ "-s" "-w" "-X=main.version=${version}" ];
+
+  postInstall = ''
+    installShellCompletion --cmd changie \
+      --bash <($out/bin/changie completion bash) \
+      --fish <($out/bin/changie completion fish) \
+      --zsh <($out/bin/changie completion zsh)
+  '';
+
+  meta = with lib; {
+    description = "Automated changelog tool for preparing releases with lots of customization options";
+    homepage = "https://changie.dev";
+    changelog = "https://github.com/miniscruff/changie/blob/v${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda matthiasbeyer ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/check-jsonschema/default.nix b/nixpkgs/pkgs/development/tools/check-jsonschema/default.nix
new file mode 100644
index 000000000000..54b6b8926bf1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/check-jsonschema/default.nix
@@ -0,0 +1,49 @@
+{ lib, fetchFromGitHub, python3 }:
+
+with python3.pkgs;
+
+buildPythonApplication rec {
+  pname = "check-jsonschema";
+  version = "0.28.0";
+  format = "setuptools";
+
+  disabled = pythonOlder "3.7";
+
+  src = fetchFromGitHub {
+    owner = "python-jsonschema";
+    repo = "check-jsonschema";
+    rev = "refs/tags/${version}";
+    hash = "sha256-qcY846y8xLEsPfdtzoOfxo5gdggH6Dn3QkQOY7kMwm0=";
+  };
+
+  propagatedBuildInputs = [
+    ruamel-yaml
+    jsonschema
+    requests
+    click
+    regress
+  ];
+
+  nativeCheckInputs = [
+    pytestCheckHook
+    pytest-xdist
+    responses
+  ];
+
+  pythonImportsCheck = [
+    "check_jsonschema"
+    "check_jsonschema.cli"
+  ];
+
+  disabledTests = [
+    "test_schemaloader_yaml_data"
+  ];
+
+  meta = with lib; {
+    description = "A jsonschema CLI and pre-commit hook";
+    homepage = "https://github.com/python-jsonschema/check-jsonschema";
+    changelog = "https://github.com/python-jsonschema/check-jsonschema/blob/${version}/CHANGELOG.rst";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ sudosubin ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/check/default.nix b/nixpkgs/pkgs/development/tools/check/default.nix
new file mode 100644
index 000000000000..8f068c678896
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/check/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, buildGoModule
+, fetchFromGitLab
+}:
+
+buildGoModule rec {
+  pname = "check";
+  version = "unstable-2018-12-24";
+  rev = "ccaba434e62accd51209476ad093810bd27ec150";
+
+  src = fetchFromGitLab {
+    owner = "opennota";
+    repo = "check";
+    inherit rev;
+    sha256 = "sha256-u8U/62LZEn1ffwdGsUCGam4HAk7b2LetomCLZzHuuas=";
+  };
+
+  vendorHash = "sha256-DyysiVYFpncmyCzlHIOEtWlCMpm90AC3gdItI9WinSo=";
+
+  meta = with lib; {
+    description = "A set of utilities for checking Go sources";
+    homepage = "https://gitlab.com/opennota/check";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ kalbasit ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/checkmake/default.nix b/nixpkgs/pkgs/development/tools/checkmake/default.nix
new file mode 100644
index 000000000000..f25a825e37d9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/checkmake/default.nix
@@ -0,0 +1,60 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+, pandoc
+, go
+}:
+
+buildGoModule rec {
+  pname = "checkmake";
+  version = "0.2.2";
+
+  src = fetchFromGitHub {
+    owner = "mrtazz";
+    repo = pname;
+    rev = version;
+    hash = "sha256-Ql8XSQA/w7wT9GbmYOM2vG15GVqj9LxOGIu8Wqp9Wao=";
+  };
+
+  vendorHash = null;
+
+  nativeBuildInputs = [
+    installShellFiles
+    pandoc
+  ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=main.version=${version}"
+    "-X=main.buildTime=1970-01-01T00:00:00Z"
+    "-X=main.builder=nixpkgs"
+    "-X=main.goversion=go${go.version}"
+  ];
+
+  postPatch = ''
+    substituteInPlace man/man1/checkmake.1.md \
+      --replace REPLACE_DATE 1970-01-01T00:00:00Z
+  '';
+
+  postBuild = ''
+    pandoc man/man1/checkmake.1.md -st man -o man/man1/checkmake.1
+  '';
+
+  postInstall = ''
+    installManPage man/man1/checkmake.1
+  '';
+
+  meta = with lib; {
+    description = "Experimental tool for linting and checking Makefiles";
+    homepage = "https://github.com/mrtazz/checkmake";
+    changelog = "https://github.com/mrtazz/checkmake/releases/tag/${src.rev}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ vidbina ];
+    longDescription = ''
+      checkmake is an experimental tool for linting and checking
+      Makefiles. It may not do what you want it to.
+    '';
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/checkmate/default.nix b/nixpkgs/pkgs/development/tools/checkmate/default.nix
new file mode 100644
index 000000000000..82fb04f344b0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/checkmate/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "checkmate";
+  version = "0.9.3";
+
+  src = fetchFromGitHub {
+    owner = "adedayo";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-XzzN4oIG6E4NsMGl4HzFlgAGhkRieRn+jyA0bT8fcrg=";
+  };
+
+  vendorHash = "sha256-D87b/LhHnu8xE0wRdB/wLIuf5NlqrVnKt2WAF29bdZo=";
+
+  subPackages = [ "." ];
+
+  meta = with lib; {
+    description = "Pluggable code security analysis tool";
+    homepage = "https://github.com/adedayo/checkmate";
+    changelog = "https://github.com/adedayo/checkmate/releases/tag/v${version}";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/chit/Cargo.lock b/nixpkgs/pkgs/development/tools/chit/Cargo.lock
new file mode 100644
index 000000000000..1a2b7a766e20
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/chit/Cargo.lock
@@ -0,0 +1,1872 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "addr2line"
+version = "0.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97"
+dependencies = [
+ "gimli",
+]
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "ansi_term"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
+dependencies = [
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "atlatl"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "32bb156841d2e2a888185b5b4f7d93d30efd3a40d1671d9628ab39536adb7ea2"
+dependencies = [
+ "fnv",
+ "num-traits",
+ "serde",
+]
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi 0.1.19",
+ "libc",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "autocfg"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0dde43e75fd43e8a1bf86103336bc699aa8d17ad1be60c76c0bdfd4828e19b78"
+dependencies = [
+ "autocfg 1.1.0",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "backtrace"
+version = "0.3.67"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "233d376d6d185f2a3093e58f283f60f880315b6c60075b01f36b3b85154564ca"
+dependencies = [
+ "addr2line",
+ "cc",
+ "cfg-if 1.0.0",
+ "libc",
+ "miniz_oxide 0.6.2",
+ "object",
+ "rustc-demangle",
+]
+
+[[package]]
+name = "base64"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b25d992356d2eb0ed82172f5248873db5560c4721f564b13cb5193bda5e668e"
+dependencies = [
+ "byteorder",
+]
+
+[[package]]
+name = "bincode"
+version = "1.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "byteorder"
+version = "1.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
+
+[[package]]
+name = "bytes"
+version = "0.4.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c"
+dependencies = [
+ "byteorder",
+ "either",
+ "iovec",
+]
+
+[[package]]
+name = "cc"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
+
+[[package]]
+name = "cfg-if"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "chit"
+version = "0.1.15"
+dependencies = [
+ "clap",
+ "colored",
+ "hyphenation",
+ "openssl",
+ "reqwest",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "textwrap",
+]
+
+[[package]]
+name = "clap"
+version = "2.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c"
+dependencies = [
+ "ansi_term",
+ "atty",
+ "bitflags",
+ "strsim",
+ "textwrap",
+ "unicode-width",
+ "vec_map",
+]
+
+[[package]]
+name = "cloudabi"
+version = "0.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "colored"
+version = "1.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4ffc801dacf156c5854b9df4f425a626539c3a6ef7893cc0c5084a23f0b6c59"
+dependencies = [
+ "atty",
+ "lazy_static",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "cookie"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "888604f00b3db336d2af898ec3c1d5d0ddf5e6d462220f2ededc33a87ac4bbd5"
+dependencies = [
+ "time",
+ "url 1.7.2",
+]
+
+[[package]]
+name = "cookie_store"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46750b3f362965f197996c4448e4a0935e791bf7d6631bfce9ee0af3d24c919c"
+dependencies = [
+ "cookie",
+ "failure",
+ "idna 0.1.5",
+ "log",
+ "publicsuffix",
+ "serde",
+ "serde_json",
+ "time",
+ "try_from",
+ "url 1.7.2",
+]
+
+[[package]]
+name = "core-foundation"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
+
+[[package]]
+name = "crc32fast"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c20ff29ded3204c5106278a81a38f4b482636ed4fa1e6cfbeef193291beb29ed"
+dependencies = [
+ "crossbeam-epoch",
+ "crossbeam-utils",
+ "maybe-uninit",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "058ed274caafc1f60c4997b5fc07bf7dc7cca454af7c6e81edffe5f33f70dace"
+dependencies = [
+ "autocfg 1.1.0",
+ "cfg-if 0.1.10",
+ "crossbeam-utils",
+ "lazy_static",
+ "maybe-uninit",
+ "memoffset",
+ "scopeguard",
+]
+
+[[package]]
+name = "crossbeam-queue"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "774ba60a54c213d409d5353bda12d49cd68d14e45036a285234c8d6f91f92570"
+dependencies = [
+ "cfg-if 0.1.10",
+ "crossbeam-utils",
+ "maybe-uninit",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8"
+dependencies = [
+ "autocfg 1.1.0",
+ "cfg-if 0.1.10",
+ "lazy_static",
+]
+
+[[package]]
+name = "dtoa"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56899898ce76aaf4a0f24d914c97ea6ed976d42fec6ad33fcbb0a1103e07b2b0"
+
+[[package]]
+name = "either"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91"
+
+[[package]]
+name = "encoding_rs"
+version = "0.8.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "errno"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "errno-dragonfly"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "failure"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d32e9bd16cc02eae7db7ef620b392808b89f6a5e16bb3497d159c6b92a0f4f86"
+dependencies = [
+ "backtrace",
+ "failure_derive",
+]
+
+[[package]]
+name = "failure_derive"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa4da3c766cd7a0db8242e326e9e4e081edd567072893ed320008189715366a4"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "synstructure",
+]
+
+[[package]]
+name = "fastrand"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "flate2"
+version = "1.0.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide 0.7.1",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "foreign-types"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+dependencies = [
+ "foreign-types-shared",
+]
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8"
+dependencies = [
+ "percent-encoding 2.2.0",
+]
+
+[[package]]
+name = "fuchsia-cprng"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba"
+
+[[package]]
+name = "fuchsia-zircon"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82"
+dependencies = [
+ "bitflags",
+ "fuchsia-zircon-sys",
+]
+
+[[package]]
+name = "fuchsia-zircon-sys"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7"
+
+[[package]]
+name = "futures"
+version = "0.1.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a471a38ef8ed83cd6e40aa59c1ffe17db6855c18e3604d9c4ed8c08ebc28678"
+
+[[package]]
+name = "futures-cpupool"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab90cde24b3319636588d0c35fe03b1333857621051837ed769faefb4c2162e4"
+dependencies = [
+ "futures",
+ "num_cpus",
+]
+
+[[package]]
+name = "gimli"
+version = "0.27.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad0a93d233ebf96623465aad4046a8d3aa4da22d4f4beba5388838c8a434bbb4"
+
+[[package]]
+name = "h2"
+version = "0.1.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a5b34c246847f938a410a03c5458c7fee2274436675e76d8b903c08efc29c462"
+dependencies = [
+ "byteorder",
+ "bytes",
+ "fnv",
+ "futures",
+ "http",
+ "indexmap",
+ "log",
+ "slab",
+ "string",
+ "tokio-io",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286"
+
+[[package]]
+name = "http"
+version = "0.1.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6ccf5ede3a895d8856620237b2f02972c1bbc78d2965ad7fe8838d4a0ed41f0"
+dependencies = [
+ "bytes",
+ "fnv",
+ "itoa 0.4.8",
+]
+
+[[package]]
+name = "http-body"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6741c859c1b2463a423a1dbce98d418e6c3c3fc720fb0d45528657320920292d"
+dependencies = [
+ "bytes",
+ "futures",
+ "http",
+ "tokio-buf",
+]
+
+[[package]]
+name = "httparse"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
+
+[[package]]
+name = "hyper"
+version = "0.12.36"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c843caf6296fc1f93444735205af9ed4e109a539005abb2564ae1d6fad34c52"
+dependencies = [
+ "bytes",
+ "futures",
+ "futures-cpupool",
+ "h2",
+ "http",
+ "http-body",
+ "httparse",
+ "iovec",
+ "itoa 0.4.8",
+ "log",
+ "net2",
+ "rustc_version",
+ "time",
+ "tokio",
+ "tokio-buf",
+ "tokio-executor",
+ "tokio-io",
+ "tokio-reactor",
+ "tokio-tcp",
+ "tokio-threadpool",
+ "tokio-timer",
+ "want",
+]
+
+[[package]]
+name = "hyper-tls"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a800d6aa50af4b5850b2b0f659625ce9504df908e9733b635720483be26174f"
+dependencies = [
+ "bytes",
+ "futures",
+ "hyper",
+ "native-tls",
+ "tokio-io",
+]
+
+[[package]]
+name = "hyphenation"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0493c6fb308d367d0aed7acd341adbc1c2f216c135073e4b73b652c5d0d6b54c"
+dependencies = [
+ "atlatl",
+ "bincode",
+ "hyphenation_commons",
+ "pocket-resources",
+ "serde",
+]
+
+[[package]]
+name = "hyphenation_commons"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e3461ab51107f7beb8e0c46606d6eb7dfa48880014a29c170afad3ce6b25add"
+dependencies = [
+ "atlatl",
+ "serde",
+]
+
+[[package]]
+name = "idna"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e"
+dependencies = [
+ "matches",
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[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 = "idna"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
+dependencies = [
+ "autocfg 1.1.0",
+ "hashbrown",
+]
+
+[[package]]
+name = "instant"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "io-lifetimes"
+version = "1.0.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220"
+dependencies = [
+ "hermit-abi 0.3.1",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "iovec"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "itoa"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4"
+
+[[package]]
+name = "itoa"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6"
+
+[[package]]
+name = "kernel32-sys"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
+dependencies = [
+ "winapi 0.2.8",
+ "winapi-build",
+]
+
+[[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.144"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b00cc1c228a6782d0f076e7b232802e0c5689d41bb5df366f2a6b6621cfdfe1"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ece97ea872ece730aed82664c424eb4c8291e1ff2480247ccf7409044bc6479f"
+
+[[package]]
+name = "lock_api"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4da24a77a3d8a6d4862d95f72e6fdb9c09a643ecdb402d754004a557f2bec75"
+dependencies = [
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "matches"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5"
+
+[[package]]
+name = "maybe-uninit"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00"
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "memoffset"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "043175f069eda7b85febe4a74abbaeff828d9f8b448515d3151a14a3542811aa"
+dependencies = [
+ "autocfg 1.1.0",
+]
+
+[[package]]
+name = "mime"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
+
+[[package]]
+name = "mime_guess"
+version = "2.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef"
+dependencies = [
+ "mime",
+ "unicase",
+]
+
+[[package]]
+name = "miniz_oxide"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "miniz_oxide"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "mio"
+version = "0.6.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4afd66f5b91bf2a3bc13fad0e21caedac168ca4c707504e75585648ae80e4cc4"
+dependencies = [
+ "cfg-if 0.1.10",
+ "fuchsia-zircon",
+ "fuchsia-zircon-sys",
+ "iovec",
+ "kernel32-sys",
+ "libc",
+ "log",
+ "miow",
+ "net2",
+ "slab",
+ "winapi 0.2.8",
+]
+
+[[package]]
+name = "miow"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ebd808424166322d4a38da87083bfddd3ac4c131334ed55856112eb06d46944d"
+dependencies = [
+ "kernel32-sys",
+ "net2",
+ "winapi 0.2.8",
+ "ws2_32-sys",
+]
+
+[[package]]
+name = "native-tls"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e"
+dependencies = [
+ "lazy_static",
+ "libc",
+ "log",
+ "openssl",
+ "openssl-probe",
+ "openssl-sys",
+ "schannel",
+ "security-framework",
+ "security-framework-sys",
+ "tempfile",
+]
+
+[[package]]
+name = "net2"
+version = "0.2.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "74d0df99cfcd2530b2e694f6e17e7f37b8e26bb23983ac530c0c97408837c631"
+dependencies = [
+ "cfg-if 0.1.10",
+ "libc",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
+dependencies = [
+ "autocfg 1.1.0",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b"
+dependencies = [
+ "hermit-abi 0.2.6",
+ "libc",
+]
+
+[[package]]
+name = "object"
+version = "0.30.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea86265d3d3dcb6a27fc51bd29a4bf387fae9d2986b823079d4986af253eb439"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.17.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3"
+
+[[package]]
+name = "openssl"
+version = "0.10.52"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "01b8574602df80f7b85fdfc5392fa884a4e3b3f4f35402c070ab34c3d3f78d56"
+dependencies = [
+ "bitflags",
+ "cfg-if 1.0.0",
+ "foreign-types",
+ "libc",
+ "once_cell",
+ "openssl-macros",
+ "openssl-sys",
+]
+
+[[package]]
+name = "openssl-macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "openssl-probe"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
+
+[[package]]
+name = "openssl-src"
+version = "111.25.3+1.1.1t"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "924757a6a226bf60da5f7dd0311a34d2b52283dd82ddeb103208ddc66362f80c"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "openssl-sys"
+version = "0.9.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e17f59264b2809d77ae94f0e1ebabc434773f370d6ca667bd223ea10e06cc7e"
+dependencies = [
+ "cc",
+ "libc",
+ "openssl-src",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "parking_lot"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f842b1982eb6c2fe34036a4fbfb06dd185a3f5c8edfaacdf7d1ea10b07de6252"
+dependencies = [
+ "lock_api",
+ "parking_lot_core",
+ "rustc_version",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bda66b810a62be75176a80873726630147a5ca780cd33921e0b5709033e66b0a"
+dependencies = [
+ "cfg-if 0.1.10",
+ "cloudabi",
+ "libc",
+ "redox_syscall 0.1.57",
+ "rustc_version",
+ "smallvec",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831"
+
+[[package]]
+name = "percent-encoding"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
+
+[[package]]
+name = "pocket-resources"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c135f38778ad324d9e9ee68690bac2c1a51f340fdf96ca13e2ab3914eb2e51d8"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.56"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "publicsuffix"
+version = "1.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95b4ce31ff0a27d93c8de1849cf58162283752f065a90d508f1105fa6c9a213f"
+dependencies = [
+ "idna 0.2.3",
+ "url 2.3.1",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f4f29d145265ec1c483c7c654450edde0bfe043d3938d6972630663356d9500"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rand"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca"
+dependencies = [
+ "autocfg 0.1.8",
+ "libc",
+ "rand_chacha",
+ "rand_core 0.4.2",
+ "rand_hc",
+ "rand_isaac",
+ "rand_jitter",
+ "rand_os",
+ "rand_pcg",
+ "rand_xorshift",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef"
+dependencies = [
+ "autocfg 0.1.8",
+ "rand_core 0.3.1",
+]
+
+[[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",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc"
+
+[[package]]
+name = "rand_hc"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4"
+dependencies = [
+ "rand_core 0.3.1",
+]
+
+[[package]]
+name = "rand_isaac"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08"
+dependencies = [
+ "rand_core 0.3.1",
+]
+
+[[package]]
+name = "rand_jitter"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b"
+dependencies = [
+ "libc",
+ "rand_core 0.4.2",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "rand_os"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071"
+dependencies = [
+ "cloudabi",
+ "fuchsia-cprng",
+ "libc",
+ "rand_core 0.4.2",
+ "rdrand",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "rand_pcg"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44"
+dependencies = [
+ "autocfg 0.1.8",
+ "rand_core 0.4.2",
+]
+
+[[package]]
+name = "rand_xorshift"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c"
+dependencies = [
+ "rand_core 0.3.1",
+]
+
+[[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",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.1.57"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce"
+
+[[package]]
+name = "redox_syscall"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "reqwest"
+version = "0.9.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f88643aea3c1343c804950d7bf983bd2067f5ab59db6d613a08e05572f2714ab"
+dependencies = [
+ "base64",
+ "bytes",
+ "cookie",
+ "cookie_store",
+ "encoding_rs",
+ "flate2",
+ "futures",
+ "http",
+ "hyper",
+ "hyper-tls",
+ "log",
+ "mime",
+ "mime_guess",
+ "native-tls",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "time",
+ "tokio",
+ "tokio-executor",
+ "tokio-io",
+ "tokio-threadpool",
+ "tokio-timer",
+ "url 1.7.2",
+ "uuid",
+ "winreg",
+]
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
+
+[[package]]
+name = "rustc_version"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
+dependencies = [
+ "semver",
+]
+
+[[package]]
+name = "rustix"
+version = "0.37.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acf8729d8542766f1b2cf77eb034d52f40d375bb8b615d0b147089946e16613d"
+dependencies = [
+ "bitflags",
+ "errno",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041"
+
+[[package]]
+name = "schannel"
+version = "0.1.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3"
+dependencies = [
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "scopeguard"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+
+[[package]]
+name = "security-framework"
+version = "2.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca2855b3715770894e67cbfa3df957790aa0c9edc3bf06efa1a84d77fa0839d1"
+dependencies = [
+ "bitflags",
+ "core-foundation",
+ "core-foundation-sys",
+ "libc",
+ "security-framework-sys",
+]
+
+[[package]]
+name = "security-framework-sys"
+version = "2.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f51d0c0d83bec45f16480d0ce0058397a69e48fcdc52d1dc8855fb68acbd31a7"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "semver"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
+dependencies = [
+ "semver-parser",
+]
+
+[[package]]
+name = "semver-parser"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
+
+[[package]]
+name = "serde"
+version = "1.0.163"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2113ab51b87a539ae008b5c6c02dc020ffa39afd2d83cffcb3f4eb2722cebec2"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.163"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c805777e3930c8883389c602315a24224bcc738b63905ef87cd1420353ea93e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.96"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1"
+dependencies = [
+ "itoa 1.0.6",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_urlencoded"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "642dd69105886af2efd227f75a520ec9b44a820d65bc133a9131f7d229fd165a"
+dependencies = [
+ "dtoa",
+ "itoa 0.4.8",
+ "serde",
+ "url 1.7.2",
+]
+
+[[package]]
+name = "slab"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d"
+dependencies = [
+ "autocfg 1.1.0",
+]
+
+[[package]]
+name = "smallvec"
+version = "0.6.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b97fcaeba89edba30f044a10c6a3cc39df9c3f17d7cd829dd1446cab35f890e0"
+dependencies = [
+ "maybe-uninit",
+]
+
+[[package]]
+name = "string"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d24114bfcceb867ca7f71a0d3fe45d45619ec47a6fbfa98cb14e14250bfa5d6d"
+dependencies = [
+ "bytes",
+]
+
+[[package]]
+name = "strsim"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a34fcf3e8b60f57e6a14301a2e916d323af98b0ea63c599441eec8558660c822"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "synstructure"
+version = "0.12.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "unicode-xid",
+]
+
+[[package]]
+name = "tempfile"
+version = "3.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998"
+dependencies = [
+ "cfg-if 1.0.0",
+ "fastrand",
+ "redox_syscall 0.3.5",
+ "rustix",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
+dependencies = [
+ "hyphenation",
+ "unicode-width",
+]
+
+[[package]]
+name = "time"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a"
+dependencies = [
+ "libc",
+ "wasi",
+ "winapi 0.3.9",
+]
+
+[[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.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+[[package]]
+name = "tokio"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a09c0b5bb588872ab2f09afa13ee6e9dac11e10a0ec9e8e3ba39a5a5d530af6"
+dependencies = [
+ "bytes",
+ "futures",
+ "mio",
+ "num_cpus",
+ "tokio-current-thread",
+ "tokio-executor",
+ "tokio-io",
+ "tokio-reactor",
+ "tokio-tcp",
+ "tokio-threadpool",
+ "tokio-timer",
+]
+
+[[package]]
+name = "tokio-buf"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fb220f46c53859a4b7ec083e41dec9778ff0b1851c0942b211edb89e0ccdc46"
+dependencies = [
+ "bytes",
+ "either",
+ "futures",
+]
+
+[[package]]
+name = "tokio-current-thread"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1de0e32a83f131e002238d7ccde18211c0a5397f60cbfffcb112868c2e0e20e"
+dependencies = [
+ "futures",
+ "tokio-executor",
+]
+
+[[package]]
+name = "tokio-executor"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb2d1b8f4548dbf5e1f7818512e9c406860678f29c300cdf0ebac72d1a3a1671"
+dependencies = [
+ "crossbeam-utils",
+ "futures",
+]
+
+[[package]]
+name = "tokio-io"
+version = "0.1.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57fc868aae093479e3131e3d165c93b1c7474109d13c90ec0dda2a1bbfff0674"
+dependencies = [
+ "bytes",
+ "futures",
+ "log",
+]
+
+[[package]]
+name = "tokio-reactor"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09bc590ec4ba8ba87652da2068d150dcada2cfa2e07faae270a5e0409aa51351"
+dependencies = [
+ "crossbeam-utils",
+ "futures",
+ "lazy_static",
+ "log",
+ "mio",
+ "num_cpus",
+ "parking_lot",
+ "slab",
+ "tokio-executor",
+ "tokio-io",
+ "tokio-sync",
+]
+
+[[package]]
+name = "tokio-sync"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "edfe50152bc8164fcc456dab7891fa9bf8beaf01c5ee7e1dd43a397c3cf87dee"
+dependencies = [
+ "fnv",
+ "futures",
+]
+
+[[package]]
+name = "tokio-tcp"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "98df18ed66e3b72e742f185882a9e201892407957e45fbff8da17ae7a7c51f72"
+dependencies = [
+ "bytes",
+ "futures",
+ "iovec",
+ "mio",
+ "tokio-io",
+ "tokio-reactor",
+]
+
+[[package]]
+name = "tokio-threadpool"
+version = "0.1.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df720b6581784c118f0eb4310796b12b1d242a7eb95f716a8367855325c25f89"
+dependencies = [
+ "crossbeam-deque",
+ "crossbeam-queue",
+ "crossbeam-utils",
+ "futures",
+ "lazy_static",
+ "log",
+ "num_cpus",
+ "slab",
+ "tokio-executor",
+]
+
+[[package]]
+name = "tokio-timer"
+version = "0.2.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93044f2d313c95ff1cb7809ce9a7a05735b012288a888b62d4434fd58c94f296"
+dependencies = [
+ "crossbeam-utils",
+ "futures",
+ "slab",
+ "tokio-executor",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
+
+[[package]]
+name = "try_from"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "283d3b89e1368717881a9d51dad843cc435380d8109c9e47d38780a324698d8b"
+dependencies = [
+ "cfg-if 0.1.10",
+]
+
+[[package]]
+name = "unicase"
+version = "2.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6"
+dependencies = [
+ "version_check",
+]
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-width"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c"
+
+[[package]]
+name = "url"
+version = "1.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a"
+dependencies = [
+ "idna 0.1.5",
+ "matches",
+ "percent-encoding 1.0.1",
+]
+
+[[package]]
+name = "url"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643"
+dependencies = [
+ "form_urlencoded",
+ "idna 0.3.0",
+ "percent-encoding 2.2.0",
+]
+
+[[package]]
+name = "uuid"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90dbc611eb48397705a6b0f6e917da23ae517e4d127123d2cf7674206627d32a"
+dependencies = [
+ "rand",
+]
+
+[[package]]
+name = "vcpkg"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+
+[[package]]
+name = "vec_map"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "want"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6395efa4784b027708f7451087e647ec73cc74f5d9bc2e418404248d679a230"
+dependencies = [
+ "futures",
+ "log",
+ "try-lock",
+]
+
+[[package]]
+name = "wasi"
+version = "0.10.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
+
+[[package]]
+name = "winapi"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
+
+[[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-build"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
+
+[[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-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows-sys"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
+dependencies = [
+ "windows-targets 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets 0.48.0",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5"
+dependencies = [
+ "windows_aarch64_gnullvm 0.48.0",
+ "windows_aarch64_msvc 0.48.0",
+ "windows_i686_gnu 0.48.0",
+ "windows_i686_msvc 0.48.0",
+ "windows_x86_64_gnu 0.48.0",
+ "windows_x86_64_gnullvm 0.48.0",
+ "windows_x86_64_msvc 0.48.0",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
+
+[[package]]
+name = "winreg"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2986deb581c4fe11b621998a5e53361efe6b48a151178d0cd9eeffa4dc6acc9"
+dependencies = [
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "ws2_32-sys"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e"
+dependencies = [
+ "winapi 0.2.8",
+ "winapi-build",
+]
diff --git a/nixpkgs/pkgs/development/tools/chit/default.nix b/nixpkgs/pkgs/development/tools/chit/default.nix
new file mode 100644
index 000000000000..5abc6e49aa0e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/chit/default.nix
@@ -0,0 +1,55 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, stdenv
+, openssl
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "chit";
+  version = "0.1.15";
+
+  src = fetchFromGitHub {
+    owner = "peterheesterman";
+    repo = pname;
+    rev = version;
+    sha256 = "0iixczy3cad44j2d7zzj8f3lnmp4jwnb0snmwfgiq3vj9wrn28pz";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+  };
+
+  nativeBuildInputs = lib.optionals stdenv.isLinux [ pkg-config ];
+
+  buildInputs = lib.optionals stdenv.isLinux [
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  # update Carg.lock to work with openssl 3
+  postPatch = ''
+    ln -sf ${./Cargo.lock} Cargo.lock
+  '';
+
+  meta = with lib; {
+    description = "Crate help in terminal: A tool for looking up details about rust crates without going to crates.io";
+    longDescription = ''
+      Chit helps answer these questions:
+
+      * Who wrote this crate? What else did they write?
+      * What alternatives are there?
+      * How old is this crate?
+      * What versions are there? When did they come out?
+      * What are the downloads over time?
+      * Should i use this crate?
+      * How mature is it?
+    '';
+    homepage = "https://github.com/peterheesterman/chit";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda lilyball ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/circup/default.nix b/nixpkgs/pkgs/development/tools/circup/default.nix
new file mode 100644
index 000000000000..b6aa75a36fc8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/circup/default.nix
@@ -0,0 +1,56 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "circup";
+  version = "1.4.0";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "adafruit";
+    repo = pname;
+    rev = "refs/tags/${version}";
+    hash = "sha256-kax4gnvRkHSqj0Y6Rk8eyPpT7Wia2QngCQtxpqWSl9s=";
+  };
+
+  pythonRelaxDeps = [
+    "semver"
+  ];
+
+  nativeBuildInputs = with python3.pkgs; [
+    setuptools-scm
+    pythonRelaxDepsHook
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    appdirs
+    click
+    findimports
+    requests
+    semver
+    setuptools
+    update-checker
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    pytestCheckHook
+  ];
+
+  postBuild = ''
+    export HOME=$(mktemp -d);
+  '';
+
+  pythonImportsCheck = [
+    "circup"
+  ];
+
+  meta = with lib; {
+    description = "CircuitPython library updater";
+    homepage = "https://github.com/adafruit/circup";
+    changelog = "https://github.com/adafruit/circup/releases/tag/${version}";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/clang-tools/default.nix b/nixpkgs/pkgs/development/tools/clang-tools/default.nix
new file mode 100644
index 000000000000..ece8f93b57a1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/clang-tools/default.nix
@@ -0,0 +1,54 @@
+{ lib, stdenv, llvmPackages, enableLibcxx ? false }:
+# enableLibcxx will use the c++ headers from clang instead of gcc.
+# This shouldn't have any effect on platforms that use clang as the default compiler already.
+
+let
+  unwrapped = llvmPackages.clang-unwrapped;
+
+in stdenv.mkDerivation {
+  inherit unwrapped;
+
+  pname = "clang-tools";
+  version = lib.getVersion unwrapped;
+  dontUnpack = true;
+  clang = if enableLibcxx then llvmPackages.libcxxClang else llvmPackages.clang;
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+
+    for tool in $unwrapped/bin/clang-*; do
+      tool=$(basename "$tool")
+
+      # Compilers have their own derivation, no need to include them here:
+      if [[ $tool == "clang-cl" || $tool == "clang-cpp" ]]; then
+        continue
+      fi
+
+      # Clang's derivation produces a lot of binaries, but the tools we are
+      # interested in follow the `clang-something` naming convention - except
+      # for clang-$version (e.g. clang-13), which is the compiler again:
+      if [[ ! $tool =~ ^clang\-[a-zA-Z_\-]+$ ]]; then
+        continue
+      fi
+
+      ln -s $out/bin/clangd $out/bin/$tool
+    done
+
+    if [[ -z "$(ls -A $out/bin)" ]]; then
+      echo "Found no binaries - maybe their location or naming convention changed?"
+      exit 1
+    fi
+
+    substituteAll ${./wrapper} $out/bin/clangd
+    chmod +x $out/bin/clangd
+
+    runHook postInstall
+  '';
+
+  meta = unwrapped.meta // {
+    description = "Standalone command line tools for C++ development";
+    maintainers = with lib.maintainers; [ patryk27 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/clang-tools/wrapper b/nixpkgs/pkgs/development/tools/clang-tools/wrapper
new file mode 100755
index 000000000000..1008023fdc0d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/clang-tools/wrapper
@@ -0,0 +1,27 @@
+#!/bin/sh
+
+buildcpath() {
+  local path after
+  while (( $# )); do
+    case $1 in
+        -isystem)
+            shift
+            path=$path${path:+':'}$1
+            ;;
+        -idirafter)
+            shift
+            after=$after${after:+':'}$1
+            ;;
+    esac
+    shift
+  done
+  echo $path${after:+':'}$after
+}
+
+export CPATH=${CPATH}${CPATH:+':'}$(buildcpath ${NIX_CFLAGS_COMPILE} \
+                                               $(<@clang@/nix-support/libc-cflags)):@clang@/resource-root/include
+export CPLUS_INCLUDE_PATH=${CPLUS_INCLUDE_PATH}${CPLUS_INCLUDE_PATH:+':'}$(buildcpath ${NIX_CFLAGS_COMPILE} \
+                                                                                      $(<@clang@/nix-support/libcxx-cxxflags) \
+                                                                                      $(<@clang@/nix-support/libc-cflags)):@clang@/resource-root/include
+
+exec -a "$0" @unwrapped@/bin/$(basename $0) "$@"
diff --git a/nixpkgs/pkgs/development/tools/clean-css-cli/default.nix b/nixpkgs/pkgs/development/tools/clean-css-cli/default.nix
new file mode 100644
index 000000000000..2f0cd241ecbe
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/clean-css-cli/default.nix
@@ -0,0 +1,29 @@
+{ lib
+, buildNpmPackage
+, fetchFromGitHub
+}:
+
+buildNpmPackage rec {
+  pname = "clean-css-cli";
+  version = "5.6.2";
+
+  src = fetchFromGitHub {
+    owner = "clean-css";
+    repo = "clean-css-cli";
+    rev = "v${version}";
+    hash = "sha256-ONWJn6mehXeNwRVEEM+Ad/heXwNWC9E9yA5eUQsi98A=";
+  };
+
+  npmDepsHash = "sha256-eVd6YSTHhp6qzGYn5PlikUgjNS+GJoRwfm6KPrEJKGE=";
+
+  dontNpmBuild = true;
+
+  meta = {
+    changelog = "https://github.com/clean-css/clean-css-cli/blob/${src.rev}/History.md";
+    description = "Command-line interface to the clean-css CSS optimization library";
+    homepage = "https://github.com/clean-css/clean-css-cli";
+    license = lib.licenses.mit;
+    mainProgram = "cleancss";
+    maintainers = with lib.maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/click/dbus-test-runner.patch b/nixpkgs/pkgs/development/tools/click/dbus-test-runner.patch
new file mode 100644
index 000000000000..c705cf99aa7c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/click/dbus-test-runner.patch
@@ -0,0 +1,23 @@
+diff --git a/click_package/Makefile.am b/click_package/Makefile.am
+index 4981d74..9df9e79 100644
+--- a/click_package/Makefile.am
++++ b/click_package/Makefile.am
+@@ -1,5 +1,3 @@
+-SUBDIRS = tests
+-
+ noinst_SCRIPTS = paths.py
+ CLEANFILES = $(noinst_SCRIPTS)
+ 
+diff --git a/configure.ac b/configure.ac
+index 8f4dc9e..adbd366 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -52,8 +52,6 @@ PKG_CHECK_MODULES([SERVICE], [
+ AC_SUBST([SERVICE_CFLAGS])
+ AC_SUBST([SERVICE_LIBS])
+ 
+-AC_CHECK_PROG(DBUS_TEST_RUNNER_CHECK,dbus-test-runner,yes)
+-AS_IF([test "${DBUS_TEST_RUNNER_CHECK}" != "yes"], [AC_MSG_ERROR([dbus-test-runner not found])])
+ AC_CHECK_PROG(GDBUS_CHECK,gdbus,yes)
+ AS_IF([test "${GDBUS_CHECK}" != "yes"], [AC_MSG_ERROR([gdbus (glib) not found])])
+ 
diff --git a/nixpkgs/pkgs/development/tools/click/default.nix b/nixpkgs/pkgs/development/tools/click/default.nix
new file mode 100644
index 000000000000..f8d73eec2580
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/click/default.nix
@@ -0,0 +1,92 @@
+{ lib
+, fetchFromGitLab
+, buildPythonApplication
+, autoreconfHook
+, debian
+, perl
+, vala
+, pkg-config
+, libgee
+, json-glib
+, properties-cpp
+, gobject-introspection
+, getopt
+, setuptools
+, pygobject3
+, wrapGAppsHook
+}:
+
+buildPythonApplication {
+  pname = "click";
+  version = "unstable-2023-02-22";
+  format = "other";
+
+  src = fetchFromGitLab {
+    owner = "ubports";
+    repo = "development/core/click";
+    rev = "aaf2735e8e6cbeaf2e429c70136733513a81718a";
+    sha256 = "sha256-pNu995/w3tbz15QQVdVYBnWnAoZmqWj1DN/5PZZ0iZw=";
+  };
+
+  postPatch = ''
+    # These should be proper Requires, using the header needs their headers
+    substituteInPlace lib/click/click-*.pc.in \
+      --replace 'Requires.private' 'Requires'
+  '';
+
+  configureFlags = [
+    "--with-systemdsystemunitdir=${placeholder "out"}/lib/systemd/system"
+    "--with-systemduserunitdir=${placeholder "out"}/lib/systemd/user"
+  ];
+
+  preFixup = ''
+    makeWrapperArgs+=(
+      --prefix LD_LIBRARY_PATH : "$out/lib"
+    )
+  '';
+
+  preConfigure = ''
+    export click_cv_perl_vendorlib=$out/${perl.libPrefix}
+    export PYTHON_INSTALL_FLAGS="--prefix=$out"
+  '';
+
+  nativeBuildInputs = [
+    autoreconfHook
+    perl
+    pkg-config
+    gobject-introspection
+    vala
+    getopt
+    wrapGAppsHook
+  ];
+
+  # Tests were omitted for time constraint reasons
+  doCheck = false;
+
+  enableParallelBuilding = true;
+
+  patches = [
+    # dbus-test-runner not packaged yet, otherwise build-time dependency even when not running tests
+    ./dbus-test-runner.patch
+  ];
+
+  buildInputs = [
+    libgee
+    json-glib
+    properties-cpp
+  ];
+
+  propagatedBuildInputs = [
+    debian
+    pygobject3
+    setuptools
+  ];
+
+  meta = {
+    description = "A tool to build click packages. Mainly used for Ubuntu Touch.";
+    homepage = "https://gitlab.com/ubports/development/core/click";
+    license = lib.licenses.gpl3Only;
+    maintainers = with lib.maintainers; [ ilyakooo0 OPNA2608 ];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/clickable/default.nix b/nixpkgs/pkgs/development/tools/clickable/default.nix
new file mode 100644
index 000000000000..dfbac9aac0ba
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/clickable/default.nix
@@ -0,0 +1,84 @@
+{ lib
+, fetchFromGitLab
+, buildPythonPackage
+, cookiecutter
+, requests
+, pyyaml
+, jsonschema
+, argcomplete
+, pytestCheckHook
+, watchdog
+, stdenv
+}:
+
+buildPythonPackage rec {
+  pname = "clickable";
+  version = "7.11.0";
+
+  src = fetchFromGitLab {
+    owner = "clickable";
+    repo = "clickable";
+    rev = "v${version}";
+    sha256 = "sha256-OVS+FK2ABoKbBFLDc3drcjeaa3yO9/8Ah8FzlN2fd8g=";
+  };
+
+  propagatedBuildInputs = [
+    cookiecutter
+    requests
+    pyyaml
+    jsonschema
+    argcomplete
+    watchdog
+  ];
+
+  nativeCheckInputs = [ pytestCheckHook ];
+
+  disabledTests = [
+    # Tests require docker
+    "test_cpp_plugin"
+    "test_html"
+    "test_python"
+    "test_qml_only"
+    "test_rust"
+    "test_review"
+    "test_click_build"
+    "test_no_device"
+    "test_no_file_temp"
+    "test_update"
+    "test_lib_build"
+    "test_clean"
+    "test_temp_exception"
+    "test_create_interactive"
+    "test_create_non_interactive"
+    "test_kill"
+    "test_writable_image"
+    "test_no_desktop_mode"
+    "test_no_lock"
+    "test_run_default_command"
+    "test_run"
+    "test_no_container_mode_log"
+    "test_custom_mode_log"
+    "test_skip_desktop_mode"
+    "test_log"
+    "test_custom_lock_file"
+    "test_launch_custom"
+    "test_launch"
+    "test_devices"
+    "test_install"
+    "test_skip_container_mode"
+  ] ++
+    # There are no docker images available for the aarch64 architecutre
+    # which are required for tests.
+    lib.optionals stdenv.isAarch64 [
+      "test_arch"
+      "test_restricted_arch"
+    ];
+
+  meta = {
+    description = "A build system for Ubuntu Touch apps";
+    homepage = "https://clickable-ut.dev";
+    changelog = "https://clickable-ut.dev/en/latest/changelog.html";
+    license = lib.licenses.gpl3Only;
+    maintainers = with lib.maintainers; [ ilyakooo0 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/clj-kondo/default.nix b/nixpkgs/pkgs/development/tools/clj-kondo/default.nix
new file mode 100644
index 000000000000..058f894ab36b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/clj-kondo/default.nix
@@ -0,0 +1,34 @@
+{ lib, buildGraalvmNativeImage, graalvmCEPackages, removeReferencesTo, fetchurl
+}:
+
+buildGraalvmNativeImage rec {
+  pname = "clj-kondo";
+  version = "2023.12.15";
+
+  src = fetchurl {
+    url =
+      "https://github.com/clj-kondo/${pname}/releases/download/v${version}/${pname}-${version}-standalone.jar";
+    sha256 = "sha256-YVFG7eY0wOB41kKJWydXfil8uyDSHRxPVry9L3u2P4k=";
+  };
+
+  graalvmDrv = graalvmCEPackages.graalvm-ce;
+
+  nativeBuildInputs = [ removeReferencesTo ];
+
+  extraNativeImageBuildArgs =
+    [ "-H:+ReportExceptionStackTraces" "--no-fallback" ];
+
+  postInstall = ''
+    remove-references-to -t ${graalvmDrv} $out/bin/${pname}
+  '';
+
+  meta = with lib; {
+    description = "A linter for Clojure code that sparks joy";
+    homepage = "https://github.com/clj-kondo/clj-kondo";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.epl10;
+    changelog =
+      "https://github.com/clj-kondo/clj-kondo/blob/v${version}/CHANGELOG.md";
+    maintainers = with maintainers; [ jlesquembre bandresen ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/clog-cli/default.nix b/nixpkgs/pkgs/development/tools/clog-cli/default.nix
new file mode 100644
index 000000000000..077eac32aa20
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/clog-cli/default.nix
@@ -0,0 +1,24 @@
+{ fetchFromGitHub, rustPlatform, lib }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "clog-cli";
+  version = "0.9.3";
+
+  src = fetchFromGitHub {
+    owner = "clog-tool";
+    repo = "clog-cli";
+    rev = "v${version}";
+    sha256 = "1wxglc4n1dar5qphhj5pab7ps34cjr7jy611fwn72lz0f6c7jp3z";
+  };
+
+  cargoSha256 = "0xcgzlcmlk5ycw4kklprm8lzs72j2zp8xm3dcpy606z4r9qn0c6a";
+
+  meta = {
+    description = "Generate changelogs from local git metadata";
+    homepage = "https://github.com/clog-tool/clog-cli";
+    license = lib.licenses.mit;
+    platforms = lib.platforms.unix;
+    maintainers = [lib.maintainers.nthorne];
+    mainProgram = "clog";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/cloud-nuke/default.nix b/nixpkgs/pkgs/development/tools/cloud-nuke/default.nix
new file mode 100644
index 000000000000..032d7d722c2e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cloud-nuke/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, makeBinaryWrapper
+}:
+
+buildGoModule rec {
+  pname = "cloud-nuke";
+  version = "0.33.0";
+
+  src = fetchFromGitHub {
+    owner = "gruntwork-io";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-yTCeltueOxGkOin6Cq6RzY7YNmHMz64wza8e0Pwr36E=";
+  };
+
+  vendorHash = "sha256-BnfWivu7xRmgDQgPIkjF48dOpU7hkw+Qkvb11eASDEk=";
+
+  nativeBuildInputs = [
+    makeBinaryWrapper
+  ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=main.VERSION=${version}"
+  ];
+
+  doCheck = false;
+
+  postInstall = ''
+    wrapProgram $out/bin/cloud-nuke --set-default DISABLE_TELEMETRY true
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/gruntwork-io/cloud-nuke";
+    description = "A tool for cleaning up your cloud accounts by nuking (deleting) all resources within it";
+    changelog = "https://github.com/gruntwork-io/cloud-nuke/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ marsam ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/cloudsmith-cli/default.nix b/nixpkgs/pkgs/development/tools/cloudsmith-cli/default.nix
new file mode 100644
index 000000000000..48952c0616fb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cloudsmith-cli/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, python3
+, fetchPypi
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "cloudsmith-cli";
+  version = "1.1.1";
+  format = "wheel";
+
+  src = fetchPypi {
+    pname = "cloudsmith_cli";
+    inherit format version;
+    hash = "sha256-evwXXGmGa6V2LhgkmX04E5VvdPxeZzvl4F28auXcSng=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    click
+    click-configfile
+    click-didyoumean
+    click-spinner
+    cloudsmith-api
+    colorama
+    future
+    requests
+    requests-toolbelt
+    semver
+    simplejson
+    six
+    setuptools # needs pkg_resources
+  ];
+
+  # Wheels have no tests
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "cloudsmith_cli"
+  ];
+
+  meta = with lib; {
+    homepage = "https://help.cloudsmith.io/docs/cli/";
+    description = "Cloudsmith Command Line Interface";
+    changelog = "https://github.com/cloudsmith-io/cloudsmith-cli/blob/v${version}/CHANGELOG.md";
+    maintainers = with maintainers; [ ];
+    license = licenses.asl20;
+    platforms = with platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/clpm/default.nix b/nixpkgs/pkgs/development/tools/clpm/default.nix
new file mode 100644
index 000000000000..1a6262913aa4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/clpm/default.nix
@@ -0,0 +1,73 @@
+{ lib
+, stdenv
+, fetchgit
+, wrapLisp
+, openssl
+, sbcl
+}:
+
+# Broken on newer versions:
+# "https://gitlab.common-lisp.net/clpm/clpm/-/issues/51". Once that bug is
+# fixed, remove this, and all 2.1.9 references from the SBCL build file.
+with rec {
+  sbcl_2_1_9 = sbcl.override (_: {
+    version = "2.1.9";
+  });
+};
+
+
+stdenv.mkDerivation rec {
+  pname = "clpm";
+  version = "0.4.1";
+
+  src = fetchgit {
+    url = "https://gitlab.common-lisp.net/clpm/clpm";
+    rev = "v${version}";
+    fetchSubmodules = true;
+    sha256 = "sha256-UhaLmbdsIPj6O+s262HUMxuz/5t43JR+TlOjq8Y2CDs=";
+  };
+
+  propagatedBuildInputs = [
+    openssl
+  ];
+
+  postPatch = ''
+    # patch cl-plus-ssl to ensure that it finds libssl and libcrypto
+    sed 's|libssl.so|${lib.getLib openssl}/lib/libssl.so|' -i ext/cl-plus-ssl/src/reload.lisp
+    sed 's|libcrypto.so|${lib.getLib openssl}/lib/libcrypto.so|' -i ext/cl-plus-ssl/src/reload.lisp
+    # patch dexador to avoid error due to dexador being loaded multiple times
+    sed -i 's/defpackage/uiop:define-package/g' ext/dexador/src/dexador.lisp
+  '';
+
+  buildPhase = ''
+    runHook preBuild
+
+    # exporting home to avoid using /homeless-shelter/.cache/ as this will cause
+    # ld to complaing about `impure path used in link`.
+    export HOME=$TMP
+
+    ${sbcl_2_1_9}/bin/sbcl --script scripts/build-release.lisp
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    cd build/release-staging/dynamic/clpm-${version}*/
+    INSTALL_ROOT=$out/ bash install.sh
+
+    runHook postInstall
+  '';
+
+  # Stripping binaries results in fatal error in SBCL, `Can't find sbcl.core`
+  dontStrip = true;
+
+  meta = with lib; {
+    description = "Common Lisp Package Manager";
+    homepage = "https://www.clpm.dev/";
+    license = licenses.bsd2;
+    maintainers = [ maintainers.petterstorvik ];
+    platforms = [ "i686-linux" "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/cmake-format/default.nix b/nixpkgs/pkgs/development/tools/cmake-format/default.nix
new file mode 100644
index 000000000000..85efc5f19ccf
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cmake-format/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, buildPythonApplication
+, fetchPypi
+, autopep8
+, flake8
+, jinja2
+, pylint
+, pyyaml
+, six
+}:
+
+buildPythonApplication rec {
+  pname = "cmake-format";
+  version = "0.6.13";
+  # The source distribution does not build because of missing files.
+  format = "wheel";
+
+  src = fetchPypi {
+    inherit version format;
+    python = "py3";
+    pname = "cmakelang";
+    sha256 = "0kmggnfbv6bba75l3zfzqwk0swi90brjka307m2kcz2w35kr8jvn";
+  };
+
+  propagatedBuildInputs = [ autopep8 flake8 jinja2 pylint pyyaml six ];
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Source code formatter for cmake listfiles";
+    homepage = "https://github.com/cheshirekow/cmake_format";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.tobim ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/cobra-cli/default.nix b/nixpkgs/pkgs/development/tools/cobra-cli/default.nix
new file mode 100644
index 000000000000..5d123a046dc5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cobra-cli/default.nix
@@ -0,0 +1,39 @@
+{ lib, buildGoModule, fetchFromGitHub, makeWrapper, go }:
+
+buildGoModule rec {
+  pname = "cobra-cli";
+  version = "1.3.0";
+
+  src = fetchFromGitHub {
+    owner = "spf13";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-E0I/Pxw4biOv7aGVzGlQOFXnxkc+zZaEoX1JmyMh6UE=";
+  };
+
+  vendorHash = "sha256-vrtGPQzY+NImOGaSxV+Dvch+GNPfL9XfY4lfCHTGXwY=";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  allowGoReference = true;
+
+  postPatch = ''
+    substituteInPlace "cmd/add_test.go" \
+      --replace "TestGoldenAddCmd" "SkipGoldenAddCmd"
+    substituteInPlace "cmd/init_test.go" \
+      --replace "TestGoldenInitCmd" "SkipGoldenInitCmd"
+  '';
+
+  postFixup = ''
+    wrapProgram "$out/bin/cobra-cli" \
+      --prefix PATH : ${go}/bin
+  '';
+
+  meta = with lib; {
+    description = "Cobra CLI tool to generate applications and commands";
+    homepage = "https://github.com/spf13/cobra-cli/";
+    changelog = "https://github.com/spf13/cobra-cli/releases/tag/${version}";
+    license = licenses.afl20;
+    maintainers = [ maintainers.ivankovnatsky ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/cocoapods/Gemfile b/nixpkgs/pkgs/development/tools/cocoapods/Gemfile
new file mode 100644
index 000000000000..00a6b3f80ebb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cocoapods/Gemfile
@@ -0,0 +1,3 @@
+source 'https://rubygems.org'
+
+gem 'cocoapods'
diff --git a/nixpkgs/pkgs/development/tools/cocoapods/Gemfile-beta b/nixpkgs/pkgs/development/tools/cocoapods/Gemfile-beta
new file mode 100644
index 000000000000..d8a7e8bb2e25
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cocoapods/Gemfile-beta
@@ -0,0 +1,5 @@
+source 'https://rubygems.org'
+
+# We need to specify a version including prerelease to pick up prereleases.
+# This should pick up all future releases / prereleases.
+gem 'cocoapods', '>=1.7.0.beta.1'
diff --git a/nixpkgs/pkgs/development/tools/cocoapods/Gemfile-beta.lock b/nixpkgs/pkgs/development/tools/cocoapods/Gemfile-beta.lock
new file mode 100644
index 000000000000..a6de12d37758
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cocoapods/Gemfile-beta.lock
@@ -0,0 +1,107 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    CFPropertyList (3.0.6)
+      rexml
+    activesupport (7.1.3)
+      base64
+      bigdecimal
+      concurrent-ruby (~> 1.0, >= 1.0.2)
+      connection_pool (>= 2.2.5)
+      drb
+      i18n (>= 1.6, < 2)
+      minitest (>= 5.1)
+      mutex_m
+      tzinfo (~> 2.0)
+    addressable (2.8.6)
+      public_suffix (>= 2.0.2, < 6.0)
+    algoliasearch (1.27.5)
+      httpclient (~> 2.8, >= 2.8.3)
+      json (>= 1.5.1)
+    atomos (0.1.3)
+    base64 (0.2.0)
+    bigdecimal (3.1.6)
+    claide (1.1.0)
+    cocoapods (1.15.1)
+      addressable (~> 2.8)
+      claide (>= 1.0.2, < 2.0)
+      cocoapods-core (= 1.15.1)
+      cocoapods-deintegrate (>= 1.0.3, < 2.0)
+      cocoapods-downloader (>= 2.1, < 3.0)
+      cocoapods-plugins (>= 1.0.0, < 2.0)
+      cocoapods-search (>= 1.0.0, < 2.0)
+      cocoapods-trunk (>= 1.6.0, < 2.0)
+      cocoapods-try (>= 1.1.0, < 2.0)
+      colored2 (~> 3.1)
+      escape (~> 0.0.4)
+      fourflusher (>= 2.3.0, < 3.0)
+      gh_inspector (~> 1.0)
+      molinillo (~> 0.8.0)
+      nap (~> 1.0)
+      ruby-macho (>= 2.3.0, < 3.0)
+      xcodeproj (>= 1.23.0, < 2.0)
+    cocoapods-core (1.15.1)
+      activesupport (>= 5.0, < 8)
+      addressable (~> 2.8)
+      algoliasearch (~> 1.0)
+      concurrent-ruby (~> 1.1)
+      fuzzy_match (~> 2.0.4)
+      nap (~> 1.0)
+      netrc (~> 0.11)
+      public_suffix (~> 4.0)
+      typhoeus (~> 1.0)
+    cocoapods-deintegrate (1.0.5)
+    cocoapods-downloader (2.1)
+    cocoapods-plugins (1.0.0)
+      nap
+    cocoapods-search (1.0.1)
+    cocoapods-trunk (1.6.0)
+      nap (>= 0.8, < 2.0)
+      netrc (~> 0.11)
+    cocoapods-try (1.2.0)
+    colored2 (3.1.2)
+    concurrent-ruby (1.2.3)
+    connection_pool (2.4.1)
+    drb (2.2.0)
+      ruby2_keywords
+    escape (0.0.4)
+    ethon (0.16.0)
+      ffi (>= 1.15.0)
+    ffi (1.16.3)
+    fourflusher (2.3.1)
+    fuzzy_match (2.0.4)
+    gh_inspector (1.1.3)
+    httpclient (2.8.3)
+    i18n (1.14.1)
+      concurrent-ruby (~> 1.0)
+    json (2.7.1)
+    minitest (5.22.0)
+    molinillo (0.8.0)
+    mutex_m (0.2.0)
+    nanaimo (0.3.0)
+    nap (1.1.0)
+    netrc (0.11.0)
+    public_suffix (4.0.7)
+    rexml (3.2.6)
+    ruby-macho (2.5.1)
+    ruby2_keywords (0.0.5)
+    typhoeus (1.4.1)
+      ethon (>= 0.9.0)
+    tzinfo (2.0.6)
+      concurrent-ruby (~> 1.0)
+    xcodeproj (1.24.0)
+      CFPropertyList (>= 2.3.3, < 4.0)
+      atomos (~> 0.1.3)
+      claide (>= 1.0.2, < 2.0)
+      colored2 (~> 3.1)
+      nanaimo (~> 0.3.0)
+      rexml (~> 3.2.4)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  cocoapods (>= 1.7.0.beta.1)
+
+BUNDLED WITH
+   2.4.20
diff --git a/nixpkgs/pkgs/development/tools/cocoapods/Gemfile.lock b/nixpkgs/pkgs/development/tools/cocoapods/Gemfile.lock
new file mode 100644
index 000000000000..82951ab2233d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cocoapods/Gemfile.lock
@@ -0,0 +1,107 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    CFPropertyList (3.0.6)
+      rexml
+    activesupport (7.1.3)
+      base64
+      bigdecimal
+      concurrent-ruby (~> 1.0, >= 1.0.2)
+      connection_pool (>= 2.2.5)
+      drb
+      i18n (>= 1.6, < 2)
+      minitest (>= 5.1)
+      mutex_m
+      tzinfo (~> 2.0)
+    addressable (2.8.6)
+      public_suffix (>= 2.0.2, < 6.0)
+    algoliasearch (1.27.5)
+      httpclient (~> 2.8, >= 2.8.3)
+      json (>= 1.5.1)
+    atomos (0.1.3)
+    base64 (0.2.0)
+    bigdecimal (3.1.6)
+    claide (1.1.0)
+    cocoapods (1.15.1)
+      addressable (~> 2.8)
+      claide (>= 1.0.2, < 2.0)
+      cocoapods-core (= 1.15.1)
+      cocoapods-deintegrate (>= 1.0.3, < 2.0)
+      cocoapods-downloader (>= 2.1, < 3.0)
+      cocoapods-plugins (>= 1.0.0, < 2.0)
+      cocoapods-search (>= 1.0.0, < 2.0)
+      cocoapods-trunk (>= 1.6.0, < 2.0)
+      cocoapods-try (>= 1.1.0, < 2.0)
+      colored2 (~> 3.1)
+      escape (~> 0.0.4)
+      fourflusher (>= 2.3.0, < 3.0)
+      gh_inspector (~> 1.0)
+      molinillo (~> 0.8.0)
+      nap (~> 1.0)
+      ruby-macho (>= 2.3.0, < 3.0)
+      xcodeproj (>= 1.23.0, < 2.0)
+    cocoapods-core (1.15.1)
+      activesupport (>= 5.0, < 8)
+      addressable (~> 2.8)
+      algoliasearch (~> 1.0)
+      concurrent-ruby (~> 1.1)
+      fuzzy_match (~> 2.0.4)
+      nap (~> 1.0)
+      netrc (~> 0.11)
+      public_suffix (~> 4.0)
+      typhoeus (~> 1.0)
+    cocoapods-deintegrate (1.0.5)
+    cocoapods-downloader (2.1)
+    cocoapods-plugins (1.0.0)
+      nap
+    cocoapods-search (1.0.1)
+    cocoapods-trunk (1.6.0)
+      nap (>= 0.8, < 2.0)
+      netrc (~> 0.11)
+    cocoapods-try (1.2.0)
+    colored2 (3.1.2)
+    concurrent-ruby (1.2.3)
+    connection_pool (2.4.1)
+    drb (2.2.0)
+      ruby2_keywords
+    escape (0.0.4)
+    ethon (0.16.0)
+      ffi (>= 1.15.0)
+    ffi (1.16.3)
+    fourflusher (2.3.1)
+    fuzzy_match (2.0.4)
+    gh_inspector (1.1.3)
+    httpclient (2.8.3)
+    i18n (1.14.1)
+      concurrent-ruby (~> 1.0)
+    json (2.7.1)
+    minitest (5.22.0)
+    molinillo (0.8.0)
+    mutex_m (0.2.0)
+    nanaimo (0.3.0)
+    nap (1.1.0)
+    netrc (0.11.0)
+    public_suffix (4.0.7)
+    rexml (3.2.6)
+    ruby-macho (2.5.1)
+    ruby2_keywords (0.0.5)
+    typhoeus (1.4.1)
+      ethon (>= 0.9.0)
+    tzinfo (2.0.6)
+      concurrent-ruby (~> 1.0)
+    xcodeproj (1.24.0)
+      CFPropertyList (>= 2.3.3, < 4.0)
+      atomos (~> 0.1.3)
+      claide (>= 1.0.2, < 2.0)
+      colored2 (~> 3.1)
+      nanaimo (~> 0.3.0)
+      rexml (~> 3.2.4)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  cocoapods
+
+BUNDLED WITH
+   2.4.20
diff --git a/nixpkgs/pkgs/development/tools/cocoapods/default.nix b/nixpkgs/pkgs/development/tools/cocoapods/default.nix
new file mode 100644
index 000000000000..54411fc01586
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cocoapods/default.nix
@@ -0,0 +1,26 @@
+{ lib, bundlerApp, ruby
+, beta ? false }:
+
+bundlerApp {
+  inherit ruby;
+  pname = "cocoapods";
+  gemfile = if beta then ./Gemfile-beta else ./Gemfile;
+  lockfile = if beta then ./Gemfile-beta.lock else ./Gemfile.lock;
+  gemset = if beta then ./gemset-beta.nix else ./gemset.nix;
+  exes = [ "pod" ];
+
+  # toString prevents the update script from being copied into the nix store
+  passthru.updateScript = toString ./update;
+
+  meta = with lib; {
+    description     = "Manages dependencies for your Xcode projects";
+    homepage        = "https://github.com/CocoaPods/CocoaPods";
+    license         = licenses.mit;
+    platforms       = platforms.darwin;
+    maintainers     = with maintainers; [
+      peterromfeldhk
+      lilyball
+    ];
+    mainProgram = "pod";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/cocoapods/gemset-beta.nix b/nixpkgs/pkgs/development/tools/cocoapods/gemset-beta.nix
new file mode 100644
index 000000000000..44e3397129f6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cocoapods/gemset-beta.nix
@@ -0,0 +1,436 @@
+{
+  activesupport = {
+    dependencies = ["base64" "bigdecimal" "concurrent-ruby" "connection_pool" "drb" "i18n" "minitest" "mutex_m" "tzinfo"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09zrw3sydkk6lwzjhzia38wg1as5aab2lgnysfdr1qxh39zi7z7v";
+      type = "gem";
+    };
+    version = "7.1.3";
+  };
+  addressable = {
+    dependencies = ["public_suffix"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0irbdwkkjwzajq1ip6ba46q49sxnrl2cw7ddkdhsfhb6aprnm3vr";
+      type = "gem";
+    };
+    version = "2.8.6";
+  };
+  algoliasearch = {
+    dependencies = ["httpclient" "json"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ly8zsgvih540xmxr098hsngv61cf119wf28q5hbvi1f7kgwvh96";
+      type = "gem";
+    };
+    version = "1.27.5";
+  };
+  atomos = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "17vq6sjyswr5jfzwdccw748kgph6bdw30bakwnn6p8sl4hpv4hvx";
+      type = "gem";
+    };
+    version = "0.1.3";
+  };
+  base64 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "01qml0yilb9basf7is2614skjp8384h2pycfx86cr8023arfj98g";
+      type = "gem";
+    };
+    version = "0.2.0";
+  };
+  bigdecimal = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "00db5v09k1z3539g1zrk7vkjrln9967k08adh6qx33ng97a2gg5w";
+      type = "gem";
+    };
+    version = "3.1.6";
+  };
+  CFPropertyList = {
+    dependencies = ["rexml"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1a36zn77yyibqsfpka0i8vgf3yv98ic2b9wwlbc29566y8wpa2bq";
+      type = "gem";
+    };
+    version = "3.0.6";
+  };
+  claide = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bpqhc0kqjp1bh9b7ffc395l9gfls0337rrhmab4v46ykl45qg3d";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  cocoapods = {
+    dependencies = ["addressable" "claide" "cocoapods-core" "cocoapods-deintegrate" "cocoapods-downloader" "cocoapods-plugins" "cocoapods-search" "cocoapods-trunk" "cocoapods-try" "colored2" "escape" "fourflusher" "gh_inspector" "molinillo" "nap" "ruby-macho" "xcodeproj"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19rmw9518zlcalr7vy6f10rbiya7ch86z3nfk2d6klw41ihc5hrq";
+      type = "gem";
+    };
+    version = "1.15.1";
+  };
+  cocoapods-core = {
+    dependencies = ["activesupport" "addressable" "algoliasearch" "concurrent-ruby" "fuzzy_match" "nap" "netrc" "public_suffix" "typhoeus"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "03dh7vfr9r248c8vbkssa6q0y9imvv1ms6mx28w06ysmdvn4vbgv";
+      type = "gem";
+    };
+    version = "1.15.1";
+  };
+  cocoapods-deintegrate = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "18pnng0lv5z6kpp8hnki0agdxx979iq6hxkfkglsyqzmir22lz2i";
+      type = "gem";
+    };
+    version = "1.0.5";
+  };
+  cocoapods-downloader = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ldnwwsx44i2xsdmsmyz9xrar19lfy5s5xslvral1p3674dvwvmv";
+      type = "gem";
+    };
+    version = "2.1";
+  };
+  cocoapods-plugins = {
+    dependencies = ["nap"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "16na82sfyc8801qs1n22nwq486s4j7yj6rj7fcp8cbxmj371fpbj";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  cocoapods-search = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "12amy0nknv09bvzix8bkmcjn996c50c4ms20v2dl7v8rcw73n4qv";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  cocoapods-trunk = {
+    dependencies = ["nap" "netrc"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0cgdx7z9psxxrsa13fk7qc9i6jskrwcafhrdz94avzia2y6dlnsz";
+      type = "gem";
+    };
+    version = "1.6.0";
+  };
+  cocoapods-try = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1znyp625rql37ivb5rk9fk9564cmax8icxfr041ysivpdrn98nql";
+      type = "gem";
+    };
+    version = "1.2.0";
+  };
+  colored2 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jlbqa9q4mvrm73aw9mxh23ygzbjiqwisl32d8szfb5fxvbjng5i";
+      type = "gem";
+    };
+    version = "3.1.2";
+  };
+  concurrent-ruby = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1qh1b14jwbbj242klkyz5fc7npd4j0mvndz62gajhvl1l3wd7zc2";
+      type = "gem";
+    };
+    version = "1.2.3";
+  };
+  connection_pool = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1x32mcpm2cl5492kd6lbjbaf17qsssmpx9kdyr7z1wcif2cwyh0g";
+      type = "gem";
+    };
+    version = "2.4.1";
+  };
+  drb = {
+    dependencies = ["ruby2_keywords"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "03ylflxbp9jrs1hx3d4wvx05yb9hdq4a0r706zz6qc6kvqfazr79";
+      type = "gem";
+    };
+    version = "2.2.0";
+  };
+  escape = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0sa1xkfc9jvkwyw1jbz3jhkq0ms1zrvswi6mmfiwcisg5fp497z4";
+      type = "gem";
+    };
+    version = "0.0.4";
+  };
+  ethon = {
+    dependencies = ["ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "17ix0mijpsy3y0c6ywrk5ibarmvqzjsirjyprpsy3hwax8fdm85v";
+      type = "gem";
+    };
+    version = "0.16.0";
+  };
+  ffi = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1yvii03hcgqj30maavddqamqy50h7y6xcn2wcyq72wn823zl4ckd";
+      type = "gem";
+    };
+    version = "1.16.3";
+  };
+  fourflusher = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1afabh3g3gwj0ad53fs62waks815xcckf7pkci76l6vrghffcg8v";
+      type = "gem";
+    };
+    version = "2.3.1";
+  };
+  fuzzy_match = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19gw1ifsgfrv7xdi6n61658vffgm1867f4xdqfswb2b5h6alzpmm";
+      type = "gem";
+    };
+    version = "2.0.4";
+  };
+  gh_inspector = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0f8r9byajj3bi2c7c5sqrc7m0zrv3nblfcd4782lw5l73cbsgk04";
+      type = "gem";
+    };
+    version = "1.1.3";
+  };
+  httpclient = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19mxmvghp7ki3klsxwrlwr431li7hm1lczhhj8z4qihl2acy8l99";
+      type = "gem";
+    };
+    version = "2.8.3";
+  };
+  i18n = {
+    dependencies = ["concurrent-ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qaamqsh5f3szhcakkak8ikxlzxqnv49n2p7504hcz2l0f4nj0wx";
+      type = "gem";
+    };
+    version = "1.14.1";
+  };
+  json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0r9jmjhg2ly3l736flk7r2al47b5c8cayh0gqkq0yhjqzc9a6zhq";
+      type = "gem";
+    };
+    version = "2.7.1";
+  };
+  minitest = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0hv03j1ac349pjymis7jxmbqr5jalc60cg27529bbb3zymswhdjz";
+      type = "gem";
+    };
+    version = "5.22.0";
+  };
+  molinillo = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0p846facmh1j5xmbrpgzadflspvk7bzs3sykrh5s7qi4cdqz5gzg";
+      type = "gem";
+    };
+    version = "0.8.0";
+  };
+  mutex_m = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ma093ayps1m92q845hmpk0dmadicvifkbf05rpq9pifhin0rvxn";
+      type = "gem";
+    };
+    version = "0.2.0";
+  };
+  nanaimo = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xi36h3f7nm8bc2k0b6svpda1lyank2gf872lxjbhw3h95hdrbma";
+      type = "gem";
+    };
+    version = "0.3.0";
+  };
+  nap = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xm5xssxk5s03wjarpipfm39qmgxsalb46v1prsis14x1xk935ll";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  netrc = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0gzfmcywp1da8nzfqsql2zqi648mfnx6qwkig3cv36n9m0yy676y";
+      type = "gem";
+    };
+    version = "0.11.0";
+  };
+  public_suffix = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1f3knlwfwm05sfbaihrxm4g772b79032q14c16q4b38z8bi63qcb";
+      type = "gem";
+    };
+    version = "4.0.7";
+  };
+  rexml = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "05i8518ay14kjbma550mv0jm8a6di8yp5phzrd8rj44z9qnrlrp0";
+      type = "gem";
+    };
+    version = "3.2.6";
+  };
+  ruby-macho = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1jgmhj4srl7cck1ipbjys6q4klcs473gq90bm59baw4j1wpfaxch";
+      type = "gem";
+    };
+    version = "2.5.1";
+  };
+  ruby2_keywords = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vz322p8n39hz3b4a9gkmz9y7a5jaz41zrm2ywf31dvkqm03glgz";
+      type = "gem";
+    };
+    version = "0.0.5";
+  };
+  typhoeus = {
+    dependencies = ["ethon"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0z7gamf6s83wy0yqms3bi4srirn3fc0lc7n65lqanidxcj1xn5qw";
+      type = "gem";
+    };
+    version = "1.4.1";
+  };
+  tzinfo = {
+    dependencies = ["concurrent-ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "16w2g84dzaf3z13gxyzlzbf748kylk5bdgg3n1ipvkvvqy685bwd";
+      type = "gem";
+    };
+    version = "2.0.6";
+  };
+  xcodeproj = {
+    dependencies = ["CFPropertyList" "atomos" "claide" "colored2" "nanaimo" "rexml"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1wpg4n7b8571j2h8h7v2kk8pr141rgf6m8mhk221k990fissrq56";
+      type = "gem";
+    };
+    version = "1.24.0";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/cocoapods/gemset.nix b/nixpkgs/pkgs/development/tools/cocoapods/gemset.nix
new file mode 100644
index 000000000000..efb58a05224c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cocoapods/gemset.nix
@@ -0,0 +1,420 @@
+{
+  activesupport = {
+    dependencies = ["base64" "bigdecimal" "concurrent-ruby" "connection_pool" "drb" "i18n" "minitest" "mutex_m" "tzinfo"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09zrw3sydkk6lwzjhzia38wg1as5aab2lgnysfdr1qxh39zi7z7v";
+      type = "gem";
+    };
+    version = "7.1.3";
+  };
+  addressable = {
+    dependencies = ["public_suffix"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0irbdwkkjwzajq1ip6ba46q49sxnrl2cw7ddkdhsfhb6aprnm3vr";
+      type = "gem";
+    };
+    version = "2.8.6";
+  };
+  algoliasearch = {
+    dependencies = ["httpclient" "json"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ly8zsgvih540xmxr098hsngv61cf119wf28q5hbvi1f7kgwvh96";
+      type = "gem";
+    };
+    version = "1.27.5";
+  };
+  atomos = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "17vq6sjyswr5jfzwdccw748kgph6bdw30bakwnn6p8sl4hpv4hvx";
+      type = "gem";
+    };
+    version = "0.1.3";
+  };
+  base64 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "01qml0yilb9basf7is2614skjp8384h2pycfx86cr8023arfj98g";
+      type = "gem";
+    };
+    version = "0.2.0";
+  };
+  bigdecimal = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "00db5v09k1z3539g1zrk7vkjrln9967k08adh6qx33ng97a2gg5w";
+      type = "gem";
+    };
+    version = "3.1.6";
+  };
+  CFPropertyList = {
+    dependencies = ["rexml"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1a36zn77yyibqsfpka0i8vgf3yv98ic2b9wwlbc29566y8wpa2bq";
+      type = "gem";
+    };
+    version = "3.0.6";
+  };
+  claide = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bpqhc0kqjp1bh9b7ffc395l9gfls0337rrhmab4v46ykl45qg3d";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  cocoapods = {
+    dependencies = ["addressable" "claide" "cocoapods-core" "cocoapods-deintegrate" "cocoapods-downloader" "cocoapods-plugins" "cocoapods-search" "cocoapods-trunk" "cocoapods-try" "colored2" "escape" "fourflusher" "gh_inspector" "molinillo" "nap" "ruby-macho" "xcodeproj"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19rmw9518zlcalr7vy6f10rbiya7ch86z3nfk2d6klw41ihc5hrq";
+      type = "gem";
+    };
+    version = "1.15.1";
+  };
+  cocoapods-core = {
+    dependencies = ["activesupport" "addressable" "algoliasearch" "concurrent-ruby" "fuzzy_match" "nap" "netrc" "public_suffix" "typhoeus"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "03dh7vfr9r248c8vbkssa6q0y9imvv1ms6mx28w06ysmdvn4vbgv";
+      type = "gem";
+    };
+    version = "1.15.1";
+  };
+  cocoapods-deintegrate = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "18pnng0lv5z6kpp8hnki0agdxx979iq6hxkfkglsyqzmir22lz2i";
+      type = "gem";
+    };
+    version = "1.0.5";
+  };
+  cocoapods-downloader = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ldnwwsx44i2xsdmsmyz9xrar19lfy5s5xslvral1p3674dvwvmv";
+      type = "gem";
+    };
+    version = "2.1";
+  };
+  cocoapods-plugins = {
+    dependencies = ["nap"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "16na82sfyc8801qs1n22nwq486s4j7yj6rj7fcp8cbxmj371fpbj";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  cocoapods-search = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "12amy0nknv09bvzix8bkmcjn996c50c4ms20v2dl7v8rcw73n4qv";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  cocoapods-trunk = {
+    dependencies = ["nap" "netrc"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0cgdx7z9psxxrsa13fk7qc9i6jskrwcafhrdz94avzia2y6dlnsz";
+      type = "gem";
+    };
+    version = "1.6.0";
+  };
+  cocoapods-try = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1znyp625rql37ivb5rk9fk9564cmax8icxfr041ysivpdrn98nql";
+      type = "gem";
+    };
+    version = "1.2.0";
+  };
+  colored2 = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jlbqa9q4mvrm73aw9mxh23ygzbjiqwisl32d8szfb5fxvbjng5i";
+      type = "gem";
+    };
+    version = "3.1.2";
+  };
+  concurrent-ruby = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1qh1b14jwbbj242klkyz5fc7npd4j0mvndz62gajhvl1l3wd7zc2";
+      type = "gem";
+    };
+    version = "1.2.3";
+  };
+  connection_pool = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1x32mcpm2cl5492kd6lbjbaf17qsssmpx9kdyr7z1wcif2cwyh0g";
+      type = "gem";
+    };
+    version = "2.4.1";
+  };
+  drb = {
+    dependencies = ["ruby2_keywords"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "03ylflxbp9jrs1hx3d4wvx05yb9hdq4a0r706zz6qc6kvqfazr79";
+      type = "gem";
+    };
+    version = "2.2.0";
+  };
+  escape = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0sa1xkfc9jvkwyw1jbz3jhkq0ms1zrvswi6mmfiwcisg5fp497z4";
+      type = "gem";
+    };
+    version = "0.0.4";
+  };
+  ethon = {
+    dependencies = ["ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "17ix0mijpsy3y0c6ywrk5ibarmvqzjsirjyprpsy3hwax8fdm85v";
+      type = "gem";
+    };
+    version = "0.16.0";
+  };
+  ffi = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1yvii03hcgqj30maavddqamqy50h7y6xcn2wcyq72wn823zl4ckd";
+      type = "gem";
+    };
+    version = "1.16.3";
+  };
+  fourflusher = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1afabh3g3gwj0ad53fs62waks815xcckf7pkci76l6vrghffcg8v";
+      type = "gem";
+    };
+    version = "2.3.1";
+  };
+  fuzzy_match = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19gw1ifsgfrv7xdi6n61658vffgm1867f4xdqfswb2b5h6alzpmm";
+      type = "gem";
+    };
+    version = "2.0.4";
+  };
+  gh_inspector = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0f8r9byajj3bi2c7c5sqrc7m0zrv3nblfcd4782lw5l73cbsgk04";
+      type = "gem";
+    };
+    version = "1.1.3";
+  };
+  httpclient = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19mxmvghp7ki3klsxwrlwr431li7hm1lczhhj8z4qihl2acy8l99";
+      type = "gem";
+    };
+    version = "2.8.3";
+  };
+  i18n = {
+    dependencies = ["concurrent-ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qaamqsh5f3szhcakkak8ikxlzxqnv49n2p7504hcz2l0f4nj0wx";
+      type = "gem";
+    };
+    version = "1.14.1";
+  };
+  json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0r9jmjhg2ly3l736flk7r2al47b5c8cayh0gqkq0yhjqzc9a6zhq";
+      type = "gem";
+    };
+    version = "2.7.1";
+  };
+  minitest = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0hv03j1ac349pjymis7jxmbqr5jalc60cg27529bbb3zymswhdjz";
+      type = "gem";
+    };
+    version = "5.22.0";
+  };
+  molinillo = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0p846facmh1j5xmbrpgzadflspvk7bzs3sykrh5s7qi4cdqz5gzg";
+      type = "gem";
+    };
+    version = "0.8.0";
+  };
+  mutex_m = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ma093ayps1m92q845hmpk0dmadicvifkbf05rpq9pifhin0rvxn";
+      type = "gem";
+    };
+    version = "0.2.0";
+  };
+  nanaimo = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xi36h3f7nm8bc2k0b6svpda1lyank2gf872lxjbhw3h95hdrbma";
+      type = "gem";
+    };
+    version = "0.3.0";
+  };
+  nap = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xm5xssxk5s03wjarpipfm39qmgxsalb46v1prsis14x1xk935ll";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  netrc = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0gzfmcywp1da8nzfqsql2zqi648mfnx6qwkig3cv36n9m0yy676y";
+      type = "gem";
+    };
+    version = "0.11.0";
+  };
+  public_suffix = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1f3knlwfwm05sfbaihrxm4g772b79032q14c16q4b38z8bi63qcb";
+      type = "gem";
+    };
+    version = "4.0.7";
+  };
+  rexml = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "05i8518ay14kjbma550mv0jm8a6di8yp5phzrd8rj44z9qnrlrp0";
+      type = "gem";
+    };
+    version = "3.2.6";
+  };
+  ruby-macho = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1jgmhj4srl7cck1ipbjys6q4klcs473gq90bm59baw4j1wpfaxch";
+      type = "gem";
+    };
+    version = "2.5.1";
+  };
+  ruby2_keywords = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vz322p8n39hz3b4a9gkmz9y7a5jaz41zrm2ywf31dvkqm03glgz";
+      type = "gem";
+    };
+    version = "0.0.5";
+  };
+  typhoeus = {
+    dependencies = ["ethon"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0z7gamf6s83wy0yqms3bi4srirn3fc0lc7n65lqanidxcj1xn5qw";
+      type = "gem";
+    };
+    version = "1.4.1";
+  };
+  tzinfo = {
+    dependencies = ["concurrent-ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "16w2g84dzaf3z13gxyzlzbf748kylk5bdgg3n1ipvkvvqy685bwd";
+      type = "gem";
+    };
+    version = "2.0.6";
+  };
+  xcodeproj = {
+    dependencies = ["CFPropertyList" "atomos" "claide" "colored2" "nanaimo" "rexml"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1wpg4n7b8571j2h8h7v2kk8pr141rgf6m8mhk221k990fissrq56";
+      type = "gem";
+    };
+    version = "1.24.0";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/cocoapods/update b/nixpkgs/pkgs/development/tools/cocoapods/update
new file mode 100755
index 000000000000..66f6f7b66fd4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cocoapods/update
@@ -0,0 +1,15 @@
+#!/usr/bin/env nix-shell
+#! nix-shell -i bash -p bash bundix bundler
+
+set -e
+
+cd "$(dirname "${BASH_SOURCE[0]}")"
+
+rm -f Gemfile.lock Gemfile-beta.lock
+
+export BUNDLE_FORCE_RUBY_PLATFORM=1
+bundler lock
+BUNDLE_GEMFILE=Gemfile-beta bundler lock --lockfile=Gemfile-beta.lock
+
+bundix --gemfile=Gemfile --lockfile=Gemfile.lock --gemset=gemset.nix
+bundix --gemfile=Gemfile-beta --lockfile=Gemfile-beta.lock --gemset=gemset-beta.nix
diff --git a/nixpkgs/pkgs/development/tools/cocogitto/default.nix b/nixpkgs/pkgs/development/tools/cocogitto/default.nix
new file mode 100644
index 000000000000..825f07666456
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cocogitto/default.nix
@@ -0,0 +1,37 @@
+{ lib, rustPlatform, fetchFromGitHub, installShellFiles, stdenv, Security, makeWrapper, libgit2 }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cocogitto";
+  version = "6.0.1";
+
+  src = fetchFromGitHub {
+    owner = "oknozor";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-iJH2uXlKsq7I94D3/Fe3pB8SzPfO0CodEk3XNdGleMk=";
+  };
+
+  cargoHash = "sha256-srcAUrPrrZoNUn7OeyzSRpOiEuyEizxTiEUbaNg9llE=";
+
+  # Test depend on git configuration that would likely exist in a normal user environment
+  # and might be failing to create the test repository it works in.
+  doCheck = false;
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  buildInputs = [ libgit2 ] ++ lib.optional stdenv.isDarwin Security;
+
+  postInstall = ''
+    installShellCompletion --cmd cog \
+      --bash <($out/bin/cog generate-completions bash) \
+      --fish <($out/bin/cog generate-completions fish) \
+      --zsh  <($out/bin/cog generate-completions zsh)
+  '';
+
+  meta = with lib; {
+    description = "A set of cli tools for the conventional commit and semver specifications";
+    homepage = "https://github.com/oknozor/cocogitto";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/code-maat/default.nix b/nixpkgs/pkgs/development/tools/code-maat/default.nix
new file mode 100644
index 000000000000..4d7be6c4b061
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/code-maat/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, stdenvNoCC
+, fetchurl
+, makeBinaryWrapper
+, jre
+}:
+
+stdenvNoCC.mkDerivation (finalAttrs: {
+  pname = "code-maat";
+  version = "1.0.4";
+
+  src = fetchurl {
+    url = "https://github.com/adamtornhill/code-maat/releases/download/v${finalAttrs.version}/code-maat-${finalAttrs.version}-standalone.jar";
+    hash = "sha256-QoeuIDSQGERFD3aVR7xEl6DaGm0cf6b63IWHBeZ0O18=";
+  };
+
+  dontUnpack = true;
+
+  nativeBuildInputs = [
+    makeBinaryWrapper
+  ];
+
+  installPhase =
+    let
+      jar = "$out/libexec/code-maat/code-maat.jar";
+    in
+    ''
+      runHook preInstall
+
+      install -D ${finalAttrs.src} ${jar}
+      mkdir -p "$out/bin"
+      makeWrapper "${jre}/bin/java" "$out/bin/code-maat" \
+          --add-flags "-jar ${jar}"
+
+      runHook postInstall
+    '';
+
+  meta = with lib; {
+    description = "A command line tool to mine and analyze data from version-control systems";
+    homepage = "https://github.com/adamtornhill/code-maat";
+    platforms = platforms.unix;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ sir4ur0n ];
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/codeowners/default.nix b/nixpkgs/pkgs/development/tools/codeowners/default.nix
new file mode 100644
index 000000000000..186b8b4fdb73
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/codeowners/default.nix
@@ -0,0 +1,22 @@
+{ buildGoModule, lib, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "codeowners";
+  version = "1.1.2";
+
+  src = fetchFromGitHub {
+    owner = "hmarr";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-bjSlt439Y5hmbxR6s4J37ao+P2tuKNuwqRg872P+MUg=";
+  };
+
+  vendorHash = "sha256-G+oaX3SXsHJu3lq6n8dLmoRXDAYcFkrYarwePB/MdEU=";
+
+  meta = with lib; {
+    description = "A CLI and Go library for Github's CODEOWNERS file";
+    homepage = "https://github.com/hmarr/codeowners";
+    license = licenses.mit;
+    maintainers = with maintainers; [ yorickvp ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/coder/default.nix b/nixpkgs/pkgs/development/tools/coder/default.nix
new file mode 100644
index 000000000000..e00fd43b3a24
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/coder/default.nix
@@ -0,0 +1,90 @@
+{ lib
+, fetchFromGitHub
+, installShellFiles
+, makeWrapper
+, buildGoModule
+, fetchYarnDeps
+, fixup_yarn_lock
+, pkg-config
+, nodejs
+, yarn
+, nodePackages
+, python3
+, terraform
+}:
+
+buildGoModule rec {
+  pname = "coder";
+  version = "0.17.1";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-FHBaefwSGZXwn1jdU7zK8WhwjarknvyeUJTlhmk/hPM=";
+  };
+
+  offlineCache = fetchYarnDeps {
+    yarnLock = src + "/site/yarn.lock";
+    hash = "sha256-nRmEXR9fjDxvpbnT+qpGeM0Cc/qW/kN53sKOXwZiBXY=";
+  };
+
+  vendorHash = "sha256-+AvmJkZCFovE2+5Lg98tUvA7f2kBHUMzhl5IyrEGuy8=";
+
+  tags = [ "embed" ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/coder/coder/buildinfo.tag=${version}"
+  ];
+
+  subPackages = [ "cmd/..." ];
+
+  preBuild = ''
+    export HOME=$TEMPDIR
+
+    pushd site
+    yarn config --offline set yarn-offline-mirror ${offlineCache}
+    fixup_yarn_lock yarn.lock
+
+    # node-gyp tries to download always the headers and fails: https://github.com/NixOS/nixpkgs/issues/195404
+    # playwright tries to download Chrome and fails
+    yarn remove --offline jest-canvas-mock canvas @playwright/test playwright
+
+    export PATH=$PATH:$(pwd)/node_modules/.bin
+    NODE_ENV=production node node_modules/.bin/vite build
+
+    popd
+  '';
+
+  nativeBuildInputs = [
+    fixup_yarn_lock
+    installShellFiles
+    makeWrapper
+    nodePackages.node-pre-gyp
+    nodejs
+    pkg-config
+    python3
+    yarn
+  ];
+
+  postInstall = ''
+    installShellCompletion --cmd coder \
+      --bash <($out/bin/coder completion bash) \
+      --fish <($out/bin/coder completion fish) \
+      --zsh <($out/bin/coder completion zsh)
+
+    wrapProgram $out/bin/coder --prefix PATH : ${lib.makeBinPath [ terraform ]}
+  '';
+
+  # integration tests require network access
+  doCheck = false;
+
+  meta = {
+    description = "Provision software development environments via Terraform on Linux, macOS, Windows, X86, ARM, and of course, Kubernetes";
+    homepage = "https://coder.com";
+    license = lib.licenses.agpl3;
+    maintainers = [ lib.maintainers.ghuntley lib.maintainers.urandom ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/codespell/default.nix b/nixpkgs/pkgs/development/tools/codespell/default.nix
new file mode 100644
index 000000000000..158e0971e633
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/codespell/default.nix
@@ -0,0 +1,55 @@
+{ lib
+, fetchFromGitHub
+, aspellDicts
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "codespell";
+  version = "2.2.6";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "codespell-project";
+    repo = "codespell";
+    rev = "v${version}";
+    sha256 = "sha256-esewCJw4o4SfSst5ALZ90X3XgOuOAsaxytpotvFeHB0=";
+  };
+
+  postPatch = ''
+    substituteInPlace pyproject.toml \
+      --replace "--cov=codespell_lib" "" \
+      --replace "--cov-report=" ""
+  '';
+
+  nativeBuildInputs = with python3.pkgs; [
+    setuptools-scm
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    aspell-python
+    chardet
+    pytestCheckHook
+    pytest-dependency
+  ];
+
+  preCheck = ''
+    export ASPELL_CONF="dict-dir ${aspellDicts.en}/lib/aspell"
+  '';
+
+  disabledTests = [
+    # tries to run not fully installed script
+    "test_command"
+    # error 'dateset' should not be in aspell dictionaries (en, en_GB, en_US, en_CA, en_AU) for dictionary /build/source/codespell_lib/tests/../data/dictionary.txt
+    "test_dictionary_formatting"
+  ];
+
+  pythonImportsCheck = [ "codespell_lib" ];
+
+  meta = with lib; {
+    description = "Fix common misspellings in source code";
+    homepage = "https://github.com/codespell-project/codespell";
+    license = with licenses; [ gpl2Only cc-by-sa-30 ];
+    maintainers = with maintainers; [ johnazoidberg SuperSandro2000 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/comby/comby.patch b/nixpkgs/pkgs/development/tools/comby/comby.patch
new file mode 100644
index 000000000000..b780560093d4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/comby/comby.patch
@@ -0,0 +1,1076 @@
+diff --git a/comby-kernel.opam b/comby-kernel.opam
+index 9db7cc5..83e6e7b 100644
+--- a/comby-kernel.opam
++++ b/comby-kernel.opam
+@@ -20,7 +20,7 @@ build: [
+ depends: [
+   "dune" {>= "2.8.0"}
+   "ocaml" {>= "4.08.1"}
+-  "core_kernel"
++  "core-kernel" {>= "v0.16.0"}
+   "mparser" {>= "1.3"}
+   "mparser-pcre"
+   "ppx_deriving"
+diff --git a/comby-semantic.opam b/comby-semantic.opam
+index 88563f6..fbbc122 100644
+--- a/comby-semantic.opam
++++ b/comby-semantic.opam
+@@ -20,7 +20,7 @@ build: [
+ depends: [
+   "dune" {>= "2.8.0"}
+   "ocaml" {>= "4.08.1"}
+-  "core_kernel"
++  "core_kernel" {>= "v0.15.0"}
+   "ppx_deriving"
+   "lwt"
+   "cohttp"
+diff --git a/comby.opam b/comby.opam
+index 9e5d96b..d5be316 100644
+--- a/comby.opam
++++ b/comby.opam
+@@ -31,7 +31,7 @@ depends: [
+   "cohttp-lwt-unix"
+   "comby-kernel" {= "1.7.0"}
+   "comby-semantic" {= "1.7.0"}
+-  "core"
++  "core" {>= "v0.16.0"}
+   "hack_parallel" {arch != "arm32" & arch != "arm64"}
+   "lwt"
+   "lwt_react"
+diff --git a/lib/app/configuration/command_configuration.ml b/lib/app/configuration/command_configuration.ml
+index 75c3107..29826a9 100644
+--- a/lib/app/configuration/command_configuration.ml
++++ b/lib/app/configuration/command_configuration.ml
+@@ -1,7 +1,7 @@
+ open Core
+ open Camlzip
+ 
+-open Polymorphic_compare
++open Poly
+ 
+ open Comby_kernel
+ 
+@@ -16,21 +16,21 @@ type 'a next =
+ 
+ let fold_directory ?(sorted=false) root ~init ~f =
+   let rec aux acc absolute_path depth =
+-    if Sys.is_file absolute_path = `Yes then
++    if Sys_unix.is_file absolute_path = `Yes then
+       match f acc ~depth ~absolute_path ~is_file:true with
+       | Continue acc
+       | Skip acc -> acc
+-    else if Sys.is_directory absolute_path = `Yes then
++    else if Sys_unix.is_directory absolute_path = `Yes then
+       match f acc ~depth ~absolute_path ~is_file:false with
+       | Skip acc -> acc
+       | Continue acc ->
+         let dir_contents =
+           if Option.is_some (Sys.getenv "COMBY_TEST") || sorted then
+-            Sys.ls_dir absolute_path
++            Sys_unix.ls_dir absolute_path
+             |> List.sort ~compare:String.compare
+             |> List.rev
+           else
+-            Sys.ls_dir absolute_path
++            Sys_unix.ls_dir absolute_path
+         in
+         List.fold dir_contents ~init:acc ~f:(fun acc subdir ->
+             aux acc (Filename.concat absolute_path subdir) (depth + 1))
+@@ -50,8 +50,8 @@ let parse_source_directories
+   let exact_file_paths, file_patterns =
+     List.partition_map file_filters ~f:(fun path ->
+         let is_exact path =
+-          (String.contains path '/' && Sys.is_file path = `Yes)
+-          || (Sys.is_file ("." ^/ path) = `Yes) (* See if it matches something in the current directory *)
++          (String.contains path '/' && Sys_unix.is_file path = `Yes)
++          || (Sys_unix.is_file ("." ^/ path) = `Yes) (* See if it matches something in the current directory *)
+         in
+         if is_exact path then Either.First path else Either.Second path)
+   in
+@@ -167,8 +167,8 @@ let parse_templates ?metasyntax ?(warn_for_missing_file_in_dir = false) paths =
+   let f acc ~depth:_ ~absolute_path ~is_file =
+     let is_leaf_directory absolute_path =
+       not is_file &&
+-      Sys.ls_dir absolute_path
+-      |> List.for_all ~f:(fun path -> Sys.is_directory (absolute_path ^/ path) = `No)
++      Sys_unix.ls_dir absolute_path
++      |> List.for_all ~f:(fun path -> Sys_unix.is_directory (absolute_path ^/ path) = `No)
+     in
+     if is_leaf_directory absolute_path then
+       match parse_directory absolute_path with
+@@ -178,7 +178,7 @@ let parse_templates ?metasyntax ?(warn_for_missing_file_in_dir = false) paths =
+       Continue acc
+   in
+   List.concat_map paths ~f:(fun path ->
+-      if Sys.is_directory path = `Yes then
++      if Sys_unix.is_directory path = `Yes then
+         fold_directory path ~sorted:true ~init:[] ~f
+       else
+         parse_toml ?metasyntax path)
+@@ -428,7 +428,7 @@ let parse_metasyntax metasyntax_path =
+   match metasyntax_path with
+   | None -> Matchers.Metasyntax.default_metasyntax
+   | Some metasyntax_path ->
+-    match Sys.file_exists metasyntax_path with
++    match Sys_unix.file_exists metasyntax_path with
+     | `No | `Unknown ->
+       Format.eprintf "Could not open file: %s@." metasyntax_path;
+       exit 1
+@@ -477,14 +477,14 @@ let emit_errors { input_options; output_options; _ } =
+     ; Option.is_some input_options.directory_depth
+       && Option.value_exn (input_options.directory_depth) < 0
+     , "-depth must be 0 or greater."
+-    ; Sys.is_directory input_options.target_directory = `No
++    ; Sys_unix.is_directory input_options.target_directory = `No
+     , "Directory specified with -d or -directory is not a directory."
+     ; output_options.json_only_diff && not output_options.json_lines
+     , "-json-only-diff can only be supplied with -json-lines."
+     ; (Option.is_some output_options.chunk_matches) && Option.is_some input_options.zip_file
+     , "chunk-matches output format is not supported for zip files."
+     ; Option.is_some output_options.interactive_review &&
+-      (not (String.equal input_options.target_directory (Sys.getcwd ())))
++      (not (String.equal input_options.target_directory (Sys_unix.getcwd ())))
+     , "Please remove the -d option and `cd` to the directory where you want to \
+        review from. The -review, -editor, or -default-no options should only be run \
+        at the root directory of the project files to patch."
+@@ -492,11 +492,11 @@ let emit_errors { input_options; output_options; _ } =
+          match input_options.templates with
+          | Some inputs ->
+            List.find_map inputs ~f:(fun input ->
+-               if Sys.is_file input = `Yes then
++               if Sys_unix.is_file input = `Yes then
+                  (match Toml.Parser.from_filename input with
+                   | `Error (s, _) -> Some s
+                   | _ -> None)
+-               else if not (Sys.is_directory input = `Yes) then
++               else if not (Sys_unix.is_directory input = `Yes) then
+                  Some (Format.sprintf "Directory %S specified with -templates is not a directory." input)
+                else
+                  None)
+@@ -611,7 +611,7 @@ let filter_zip_entries file_filters exclude_directory_prefix exclude_file_prefix
+ 
+ let syntax custom_matcher_path =
+   match
+-    Sys.file_exists custom_matcher_path with
++    Sys_unix.file_exists custom_matcher_path with
+   | `No | `Unknown ->
+     Format.eprintf "Could not open file: %s@." custom_matcher_path;
+     exit 1
+@@ -795,7 +795,7 @@ let create
+     | Directory ->
+       let target_directory =
+         if target_directory = "." then
+-          Filename.realpath target_directory
++          Filename_unix.realpath target_directory
+         else
+           target_directory
+       in
+diff --git a/lib/app/configuration/dune b/lib/app/configuration/dune
+index e0f9748..e417cfe 100644
+--- a/lib/app/configuration/dune
++++ b/lib/app/configuration/dune
+@@ -1,6 +1,21 @@
+ (library
+-  (name configuration)
+-  (public_name comby.configuration)
+-  (instrumentation (backend bisect_ppx))
+-  (preprocess (pps ppx_deriving.show ppx_sexp_conv ppx_sexp_message ppx_deriving_yojson))
+-  (libraries comby-kernel comby-semantic comby.patdiff comby.camlzip core yojson ppx_deriving_yojson toml lwt lwt.unix tar tar-unix))
++ (name configuration)
++ (public_name comby.configuration)
++ (instrumentation
++  (backend bisect_ppx))
++ (preprocess
++  (pps ppx_deriving.show ppx_sexp_conv ppx_sexp_message ppx_deriving_yojson))
++ (libraries
++  comby-kernel
++  comby-semantic
++  comby.patdiff
++  comby.camlzip
++  core
++  core_unix.sys_unix
++  yojson
++  ppx_deriving_yojson
++  toml
++  lwt
++  lwt.unix
++  tar
++  tar-unix))
+diff --git a/lib/app/configuration/external_semantic.ml b/lib/app/configuration/external_semantic.ml
+index bdc7051..ac69b1b 100644
+--- a/lib/app/configuration/external_semantic.ml
++++ b/lib/app/configuration/external_semantic.ml
+@@ -2,13 +2,10 @@ open Core_kernel
+ 
+ open Comby_semantic
+ 
+-let debug =
+-  match Sys.getenv "DEBUG_COMBY" with
+-  | exception Not_found -> false
+-  | _ -> true
++let debug = Sys.getenv "DEBUG_COMBY" |> Option.is_some
+ 
+ let lsif_hover ~name:_ ~filepath ~line ~column =
+-  String.chop_prefix_if_exists filepath ~prefix:(Sys.getcwd ()) |> fun filepath_relative_root ->
++  String.chop_prefix_if_exists filepath ~prefix:(Sys_unix.getcwd ()) |> fun filepath_relative_root ->
+   if debug then Format.printf "File relative root: %s@." filepath;
+   if debug then Format.printf "Querying type at %d::%d@." line column;
+   let context =
+diff --git a/lib/app/dune b/lib/app/dune
+index 2ed553c..a91f826 100644
+--- a/lib/app/dune
++++ b/lib/app/dune
+@@ -1,9 +1,8 @@
+ (library
+-  (name comby)
+-  (public_name comby)
+-  (instrumentation (backend bisect_ppx))
+-  (preprocess (pps ppx_deriving.show ppx_deriving.eq ppx_sexp_conv))
+-  (libraries 
+-   core 
+-   comby-kernel
+-   comby.pipeline))
++ (name comby)
++ (public_name comby)
++ (instrumentation
++  (backend bisect_ppx))
++ (preprocess
++  (pps ppx_deriving.show ppx_deriving.eq ppx_sexp_conv))
++ (libraries core comby-kernel comby.pipeline))
+diff --git a/lib/app/interactive/dune b/lib/app/interactive/dune
+index 815aff5..63c1757 100644
+--- a/lib/app/interactive/dune
++++ b/lib/app/interactive/dune
+@@ -1,5 +1,12 @@
+ (library
+-  (name interactive)
+-  (public_name comby.interactive)
+-  (preprocess (pps ppx_sexp_conv))
+-  (libraries comby-kernel comby.configuration core shell.filename_extended lwt lwt.unix))
++ (name interactive)
++ (public_name comby.interactive)
++ (preprocess
++  (pps ppx_sexp_conv))
++ (libraries
++  comby-kernel
++  comby.configuration
++  core
++  shell.filename_extended
++  lwt
++  lwt.unix))
+diff --git a/lib/app/interactive/interactive.ml b/lib/app/interactive/interactive.ml
+index d4bf200..b27105a 100644
+--- a/lib/app/interactive/interactive.ml
++++ b/lib/app/interactive/interactive.ml
+@@ -1,5 +1,6 @@
+ open Core
+ open Lwt
++module Unix = Core_unix
+ 
+ open Configuration
+ 
+@@ -37,6 +38,7 @@ module Diff = struct
+           ~big_enough:line_big_enough
+           ~prev
+           ~next
++          ()
+       | Some prog ->
+         let compare x y =
+           let cmd = sprintf "%s %S %S" prog x y in
+@@ -52,7 +54,7 @@ module Diff = struct
+             let compare = compare
+           end)
+         in
+-        P.get_hunks ~transform ~context ~big_enough:line_big_enough ~prev ~next
++        P.get_hunks ~transform ~context ~big_enough:line_big_enough ~prev ~next ()
+     in
+     match float_tolerance with
+     | None -> hunks
+diff --git a/lib/app/pipeline/dune b/lib/app/pipeline/dune
+index 3369b9e..e6ec880 100644
+--- a/lib/app/pipeline/dune
++++ b/lib/app/pipeline/dune
+@@ -1,11 +1,23 @@
+ (library
+-  (name pipeline)
+-  (public_name comby.pipeline)
+-  (instrumentation (backend bisect_ppx))
+-  (preprocess (pps ppx_sexp_conv ppx_deriving_yojson))
+-  (libraries comby-kernel comby.statistics comby.configuration comby.interactive comby.camlzip core core.uuid yojson ppx_deriving_yojson parany
+-    (select parallel_hack.ml from
+-      (hack_parallel -> parallel_hack.available.ml)
+-      (!hack_parallel -> parallel_hack.parany_fallback.ml)) 
+-  ))
+-
++ (name pipeline)
++ (public_name comby.pipeline)
++ (instrumentation
++  (backend bisect_ppx))
++ (preprocess
++  (pps ppx_sexp_conv ppx_deriving_yojson))
++ (libraries
++  comby-kernel
++  comby.statistics
++  comby.configuration
++  comby.interactive
++  comby.camlzip
++  core
++  core_unix.uuid
++  yojson
++  ppx_deriving_yojson
++  parany
++  (select
++   parallel_hack.ml
++   from
++   (hack_parallel -> parallel_hack.available.ml)
++   (!hack_parallel -> parallel_hack.parany_fallback.ml))))
+diff --git a/lib/app/pipeline/parallel_hack.available.ml b/lib/app/pipeline/parallel_hack.available.ml
+index a901eea..ad33070 100644
+--- a/lib/app/pipeline/parallel_hack.available.ml
++++ b/lib/app/pipeline/parallel_hack.available.ml
+@@ -1,4 +1,5 @@
+ open Core
++module Unix = Core_unix
+ 
+ open Hack_parallel
+ 
+diff --git a/lib/app/statistics/dune b/lib/app/statistics/dune
+index b14d5b1..12aff7f 100644
+--- a/lib/app/statistics/dune
++++ b/lib/app/statistics/dune
+@@ -1,6 +1,8 @@
+ (library
+-  (name statistics)
+-  (public_name comby.statistics)
+-  (instrumentation (backend bisect_ppx))
+-  (preprocess (pps ppx_deriving_yojson))
+-  (libraries yojson ppx_deriving_yojson ppx_deriving_yojson.runtime))
++ (name statistics)
++ (public_name comby.statistics)
++ (instrumentation
++  (backend bisect_ppx))
++ (preprocess
++  (pps ppx_deriving_yojson))
++ (libraries yojson ppx_deriving_yojson ppx_deriving_yojson.runtime))
+diff --git a/lib/app/vendored/patdiff/kernel/src/dune b/lib/app/vendored/patdiff/kernel/src/dune
+index 7a6353d..b79cba2 100644
+--- a/lib/app/vendored/patdiff/kernel/src/dune
++++ b/lib/app/vendored/patdiff/kernel/src/dune
+@@ -1,3 +1,6 @@
+-(library (name patdiff_kernel) (public_name comby.patdiff_kernel)
++(library
++ (name patdiff_kernel)
++ (public_name comby.patdiff_kernel)
+  (libraries core_kernel.composition_infix core_kernel patience_diff re)
+- (preprocess (pps ppx_jane)))
++ (preprocess
++  (pps ppx_jane)))
+diff --git a/lib/app/vendored/patdiff/kernel/src/float_tolerance.ml b/lib/app/vendored/patdiff/kernel/src/float_tolerance.ml
+index 4e064fb..dca77b2 100644
+--- a/lib/app/vendored/patdiff/kernel/src/float_tolerance.ml
++++ b/lib/app/vendored/patdiff/kernel/src/float_tolerance.ml
+@@ -287,7 +287,7 @@ end = struct
+           ~running_step:(fun (car, pos) cadr ->
+             match car, cadr with
+             | Same car_lines, Same cadr_lines ->
+-              Skip (Same (Array.concat [ car_lines; cadr_lines ]), pos)
++              Skip {state = (Same (Array.concat [ car_lines; cadr_lines ]), pos)}
+             | Unified _, _ | _, Unified _ ->
+               raise_s
+                 [%message
+@@ -296,7 +296,7 @@ end = struct
+                     (cadr : string Range.t)]
+             | (Prev _ | Next _ | Replace _), (Prev _ | Next _ | Replace _)
+             | Same _, (Prev _ | Next _ | Replace _)
+-            | (Prev _ | Next _ | Replace _), Same _ -> Yield ((car, pos), (cadr, Middle)))
++            | (Prev _ | Next _ | Replace _), Same _ -> Yield {value = (car, pos); state = (cadr, Middle)})
+           ~inner_finished:(fun (last, pos) ->
+             match last, pos with
+             | Unified _, _ ->
+@@ -308,7 +308,7 @@ end = struct
+               Some (last, End))
+           ~finishing_step:(function
+             | None -> Done
+-            | Some result -> Yield (result, None))
++            | Some result -> Yield {value = result; state = None})
+     ;;
+ 
+     include struct
+@@ -448,7 +448,7 @@ end = struct
+         ~init:{ prev_start; next_start; ranges = [] }
+         ~running_step:(fun t drop_or_keep ->
+           match (drop_or_keep : Drop_or_keep.t) with
+-          | Keep range -> Skip { t with ranges = range :: t.ranges }
++          | Keep range -> Skip {state = { t with ranges = range :: t.ranges }}
+           | Drop n ->
+             let hunk = to_hunk t in
+             let t =
+@@ -457,11 +457,11 @@ end = struct
+               ; ranges = []
+               }
+             in
+-            if List.is_empty (Hunk.ranges hunk) then Skip t else Yield (hunk, t))
++            if List.is_empty (Hunk.ranges hunk) then Skip {state = t} else Yield {value = hunk; state = t})
+         ~inner_finished:(fun t -> if List.is_empty t.ranges then None else Some t)
+         ~finishing_step:(function
+           | None -> Done
+-          | Some t -> Yield (to_hunk t, None))
++          | Some t -> Yield {value = to_hunk t; state = None})
+     ;;
+   end
+ 
+diff --git a/lib/app/vendored/patdiff/kernel/src/patdiff_core.ml b/lib/app/vendored/patdiff/kernel/src/patdiff_core.ml
+index 4f53a0b..88ee0e3 100644
+--- a/lib/app/vendored/patdiff/kernel/src/patdiff_core.ml
++++ b/lib/app/vendored/patdiff/kernel/src/patdiff_core.ml
+@@ -138,6 +138,7 @@ module Make (Output_impls : Output_impls) = struct
+       ~big_enough:line_big_enough
+       ~prev
+       ~next
++      ()
+   ;;
+ 
+   type word_or_newline =
+@@ -345,6 +346,7 @@ module Make (Output_impls : Output_impls) = struct
+       ~big_enough:word_big_enough
+       ~prev:prev_pieces
+       ~next:next_pieces
++      ()
+   ;;
+ 
+   let ranges_are_just_whitespace (ranges : _ Patience_diff.Range.t list) =
+diff --git a/lib/app/vendored/patdiff/lib/src/compare_core.ml b/lib/app/vendored/patdiff/lib/src/compare_core.ml
+index fafb201..8b40d09 100644
+--- a/lib/app/vendored/patdiff/lib/src/compare_core.ml
++++ b/lib/app/vendored/patdiff/lib/src/compare_core.ml
+@@ -1,5 +1,6 @@
+ open! Core
+ open! Import
++module Unix = Core_unix
+ 
+ let lines_of_contents contents =
+   let lines = Array.of_list (String.split_lines contents) in
+@@ -100,6 +101,7 @@ let compare_lines (config : Configuration.t) ?prev_diff ?next_diff ~prev ~next (
+         ~big_enough:line_big_enough
+         ~prev
+         ~next
++        ()
+     | Some prog ->
+       let compare x y =
+         let cmd = sprintf "%s %S %S" prog x y in
+@@ -116,7 +118,7 @@ let compare_lines (config : Configuration.t) ?prev_diff ?next_diff ~prev ~next (
+           let compare = compare
+         end)
+       in
+-      P.get_hunks ~transform ~context ~big_enough:line_big_enough ~prev ~next
++      P.get_hunks ~transform ~context ~big_enough:line_big_enough ~prev ~next ()
+   in
+   let hunks =
+     match config.float_tolerance with
+@@ -361,7 +363,7 @@ let rec diff_dirs_internal (config : Configuration.t) ~prev_dir ~next_dir ~file_
+       | None -> Fn.const true
+       | Some file_filter -> file_filter
+     in
+-    Sys.ls_dir (File_name.real_name_exn dir)
++    Sys_unix.ls_dir (File_name.real_name_exn dir)
+     |> List.filter ~f:(fun x ->
+       let x = File_name.real_name_exn dir ^/ x in
+       match Unix.stat x with
+diff --git a/lib/app/vendored/patdiff/lib/src/compare_core.mli b/lib/app/vendored/patdiff/lib/src/compare_core.mli
+index e919512..caa8dcb 100644
+--- a/lib/app/vendored/patdiff/lib/src/compare_core.mli
++++ b/lib/app/vendored/patdiff/lib/src/compare_core.mli
+@@ -1,5 +1,6 @@
+ open! Core
+ open! Import
++module Unix = Core_unix
+ 
+ val diff_files
+   :  Configuration.t
+diff --git a/lib/app/vendored/patdiff/lib/src/configuration.ml b/lib/app/vendored/patdiff/lib/src/configuration.ml
+index 6879daa..7d59706 100644
+--- a/lib/app/vendored/patdiff/lib/src/configuration.ml
++++ b/lib/app/vendored/patdiff/lib/src/configuration.ml
+@@ -481,7 +481,7 @@ let rec load_exn' ~set config_file =
+        | Error _another_exn -> raise exn
+        | Ok c ->
+          (let new_file = config_file ^ ".new" in
+-          match Sys.file_exists new_file with
++          match Sys_unix.file_exists new_file with
+           | `Yes | `Unknown -> ()
+           | `No ->
+             (try Sexp.save_hum new_file (On_disk.V1.sexp_of_t c) with
+@@ -564,7 +564,7 @@ let get_config ?filename () =
+       (* ~/.patdiff exists *)
+       Option.bind (Sys.getenv "HOME") ~f:(fun home ->
+         let f = home ^/ ".patdiff" in
+-        match Sys.file_exists f with
++        match Sys_unix.file_exists f with
+         | `Yes -> Some f
+         | `No | `Unknown -> None)
+   in
+diff --git a/lib/app/vendored/patdiff/lib/src/dune b/lib/app/vendored/patdiff/lib/src/dune
+index 007acad..b6a0f80 100644
+--- a/lib/app/vendored/patdiff/lib/src/dune
++++ b/lib/app/vendored/patdiff/lib/src/dune
+@@ -1,4 +1,13 @@
+-(library (name patdiff) (public_name comby.patdiff)
+- (libraries core_kernel.composition_infix core core.linux_ext comby.patdiff_kernel
++(library
++ (name patdiff)
++ (public_name comby.patdiff)
++ (libraries
++  core_kernel.composition_infix
++  core
++  core_unix
++  core_unix.linux_ext
++  core_unix.sys_unix
++  comby.patdiff_kernel
+   patience_diff)
+- (preprocess (pps ppx_jane)))
++ (preprocess
++  (pps ppx_jane)))
+diff --git a/lib/app/vendored/patdiff/lib/src/html_output.ml b/lib/app/vendored/patdiff/lib/src/html_output.ml
+index 3d08f91..93ae8af 100644
+--- a/lib/app/vendored/patdiff/lib/src/html_output.ml
++++ b/lib/app/vendored/patdiff/lib/src/html_output.ml
+@@ -1,5 +1,6 @@
+ open! Core
+ open! Import
++module Unix = Core_unix
+ 
+ include Patdiff_kernel.Html_output.Private.Make (struct
+     let mtime file =
+diff --git a/lib/kernel/match/dune b/lib/kernel/match/dune
+index 03b120a..4d48b61 100644
+--- a/lib/kernel/match/dune
++++ b/lib/kernel/match/dune
+@@ -1,6 +1,12 @@
+ (library
+-  (name match)
+-  (public_name comby-kernel.match)
+-  (instrumentation (backend bisect_ppx))
+-  (preprocess (pps ppx_deriving.eq ppx_sexp_conv ppx_deriving_yojson))
+-  (libraries core_kernel yojson ppx_deriving_yojson ppx_deriving_yojson.runtime))
++ (name match)
++ (public_name comby-kernel.match)
++ (instrumentation
++  (backend bisect_ppx))
++ (preprocess
++  (pps ppx_deriving.eq ppx_sexp_conv ppx_deriving_yojson))
++ (libraries
++  core_kernel
++  yojson
++  ppx_deriving_yojson
++  ppx_deriving_yojson.runtime))
+diff --git a/lib/kernel/matchers/alpha.ml b/lib/kernel/matchers/alpha.ml
+index d6116f7..7d16171 100644
+--- a/lib/kernel/matchers/alpha.ml
++++ b/lib/kernel/matchers/alpha.ml
+@@ -13,20 +13,11 @@ module R = MakeRegexp(Regexp)
+ let configuration_ref = ref (Configuration.create ())
+ let weaken_delimiter_hole_matching = false
+ 
+-let debug =
+-  match Sys.getenv "DEBUG_COMBY" with
+-  | exception Not_found -> false
+-  | _ -> true
++let debug = Sys.getenv "DEBUG_COMBY" |> Option.is_some
+ 
+-let debug_hole =
+-  match Sys.getenv "DEBUG_COMBY_HOLE" with
+-  | exception Not_found -> false
+-  | _ -> true
++let debug_hole = Sys.getenv "DEBUG_COMBY_HOLE" |> Option.is_some
+ 
+-let debug_position =
+-  match Sys.getenv "DEBUG_COMBY_POS" with
+-  | exception Not_found -> false
+-  | _ -> true
++let debug_position = Sys.getenv "DEBUG_COMBY_POS" |> Option.is_some
+ 
+ let f _ = return Types.Unit
+ 
+@@ -147,7 +138,7 @@ module Make (Lang : Types.Language.S) (Meta : Types.Metasyntax.S) (Ext : Types.E
+         ]
+       >>= fun _ -> f Types.Unit
+ 
+-    let sequence_chain (plist : ('c, Match.t) parser sexp_list) : ('c, Match.t) parser =
++    let sequence_chain (plist : ('c, Match.t) parser list) : ('c, Match.t) parser =
+       List.fold plist ~init:(return Types.Unit) ~f:(>>)
+ 
+     let with_debug_matcher s tag =
+@@ -745,7 +736,7 @@ module Make (Lang : Types.Language.S) (Meta : Types.Metasyntax.S) (Ext : Types.E
+     let hole_parser ?at_depth sort dimension =
+       let open Types.Hole in
+       let hole_parser =
+-        let open Polymorphic_compare in
++        let open Poly in
+         List.fold ~init:[] hole_parsers ~f:(fun acc (sort', parser) -> if sort' = sort then parser::acc else acc)
+       in
+       let skip_signal hole = skip (string "_signal_hole") |>> fun () -> Types.Hole hole in
+diff --git a/lib/kernel/matchers/dune b/lib/kernel/matchers/dune
+index 12ed326..4625458 100644
+--- a/lib/kernel/matchers/dune
++++ b/lib/kernel/matchers/dune
+@@ -1,6 +1,18 @@
+ (library
+-  (name matchers)
+-  (public_name comby-kernel.matchers)
+-  (instrumentation (backend bisect_ppx))
+-  (preprocess (pps ppx_here ppx_sexp_conv ppx_sexp_message ppx_deriving_yojson))
+-  (libraries comby-kernel.replacement comby-kernel.parsers comby-kernel.match comby-kernel.vangstrom core_kernel mparser mparser-pcre re yojson ppx_deriving_yojson))
++ (name matchers)
++ (public_name comby-kernel.matchers)
++ (instrumentation
++  (backend bisect_ppx))
++ (preprocess
++  (pps ppx_here ppx_sexp_conv ppx_sexp_message ppx_deriving_yojson))
++ (libraries
++  comby-kernel.replacement
++  comby-kernel.parsers
++  comby-kernel.match
++  comby-kernel.vangstrom
++  core_kernel
++  mparser
++  mparser-pcre
++  re
++  yojson
++  ppx_deriving_yojson))
+diff --git a/lib/kernel/matchers/evaluate.ml b/lib/kernel/matchers/evaluate.ml
+index 9ea71a0..4f63ab6 100644
+--- a/lib/kernel/matchers/evaluate.ml
++++ b/lib/kernel/matchers/evaluate.ml
+@@ -3,10 +3,7 @@ open Core_kernel
+ open Match
+ open Types.Ast
+ 
+-let debug =
+-  match Sys.getenv "DEBUG_COMBY" with
+-  | exception Not_found -> false
+-  | _ -> true
++let debug = Sys.getenv "DEBUG_COMBY" |> Option.is_some
+ 
+ type result = bool * Match.environment option
+ 
+@@ -102,7 +99,7 @@ let apply
+           |> Option.some
+       in
+       List.find_map cases ~f:(fun (template, case_expression) -> evaluate template case_expression)
+-      |> Option.value_map ~f:ident ~default:(false, Some env)
++      |> Option.value_map ~f:Fn.id ~default:(false, Some env)
+ 
+     (* rewrite ... { ... } *)
+     | Rewrite (Template t, (match_template, rewrite_template)) ->
+diff --git a/lib/kernel/matchers/omega.ml b/lib/kernel/matchers/omega.ml
+index 61cc69a..3445307 100644
+--- a/lib/kernel/matchers/omega.ml
++++ b/lib/kernel/matchers/omega.ml
+@@ -32,15 +32,9 @@ let push_source_ref : string ref = ref ""
+ 
+ let filepath_ref : string option ref = ref None
+ 
+-let debug =
+-  match Sys.getenv "DEBUG_COMBY" with
+-  | exception Not_found -> false
+-  | _ -> true
++let debug = Sys.getenv "DEBUG_COMBY" |> Option.is_some
+ 
+-let rewrite =
+-  match Sys.getenv "REWRITE" with
+-  | exception Not_found -> false
+-  | _ -> true
++let rewrite = Sys.getenv "REWRITE" |> Option.is_some
+ 
+ let actual = Buffer.create 10
+ 
+@@ -540,7 +534,7 @@ module Make (Language : Types.Language.S) (Meta : Metasyntax.S) (Ext : External.
+ 
+     let hole_parser sort dimension : (production * 'a) t t =
+       let hole_parser = (* This must be fold, can't be find *)
+-        let open Polymorphic_compare in
++        let open Poly in
+         List.fold ~init:[] Template.Matching.hole_parsers ~f:(fun acc (sort', parser) ->
+             if sort' = sort then parser::acc else acc)
+       in
+diff --git a/lib/kernel/matchers/preprocess.ml b/lib/kernel/matchers/preprocess.ml
+index 84f3ed0..b6d10e7 100644
+--- a/lib/kernel/matchers/preprocess.ml
++++ b/lib/kernel/matchers/preprocess.ml
+@@ -1,9 +1,6 @@
+ open Core_kernel
+ 
+-let debug =
+-  match Sys.getenv "DEBUG_COMBY" with
+-  | exception Not_found -> false
+-  | _ -> true
++let debug = Sys.getenv "DEBUG_COMBY" |> Option.is_some
+ 
+ let append_rule (module Parser : Types.Rule.S) rule parent_rule =
+   let open Option in
+diff --git a/lib/kernel/matchers/regexp.ml b/lib/kernel/matchers/regexp.ml
+index ef0bd59..906820b 100644
+--- a/lib/kernel/matchers/regexp.ml
++++ b/lib/kernel/matchers/regexp.ml
+@@ -3,7 +3,7 @@ open Vangstrom
+ let debug =
+   match Sys.getenv "DEBUG_COMBY" with
+   | exception Not_found -> false
+-  | _ -> true
++  | (_ : string) -> true
+ 
+ module type Regexp_engine_intf = sig
+   type t
+diff --git a/lib/kernel/matchers/rewrite.ml b/lib/kernel/matchers/rewrite.ml
+index 32c4740..545cba5 100644
+--- a/lib/kernel/matchers/rewrite.ml
++++ b/lib/kernel/matchers/rewrite.ml
+@@ -4,10 +4,7 @@ open Core_kernel
+ open Match
+ open Replacement
+ 
+-let debug =
+-  match Sys.getenv "DEBUG_COMBY" with
+-  | exception Not_found -> false
+-  | _ -> true
++let debug = Sys.getenv "DEBUG_COMBY" |> Option.is_some
+ 
+ let counter =
+   let uuid_for_id_counter = ref 0 in
+@@ -46,24 +43,24 @@ let parse_first_label ?(metasyntax = Metasyntax.default_metasyntax) template =
+   in
+   parse_string ~consume:All parser template
+   |> function
+-  | Ok label -> List.find_map label ~f:ident
++  | Ok label -> List.find_map label ~f:Fn.id
+   | Error _ -> None
+ 
+ let substitute_fresh
+     ?(metasyntax = Metasyntax.default_metasyntax)
+     ?(fresh = counter)
+     template =
+-  let label_table = String.Table.create () in
++  let label_table = Hashtbl.create (module String) in
+   let template_ref = ref template in
+   let current_label_ref = ref (parse_first_label ~metasyntax !template_ref) in
+   while Option.is_some !current_label_ref do
+     let label = Option.value_exn !current_label_ref in
+     let id =
+-      match String.Table.find label_table label with
++      match Hashtbl.find label_table label with
+       | Some id -> id
+       | None ->
+         let id = fresh () in
+-        if String.(label <> "") then String.Table.add_exn label_table ~key:label ~data:id;
++        if String.(label <> "") then Hashtbl.add_exn label_table ~key:label ~data:id;
+         id
+     in
+     let left, right = replacement_sentinel metasyntax in
+diff --git a/lib/kernel/matchers/template.ml b/lib/kernel/matchers/template.ml
+index 423a07f..136236c 100644
+--- a/lib/kernel/matchers/template.ml
++++ b/lib/kernel/matchers/template.ml
+@@ -4,10 +4,7 @@ open Core_kernel
+ open Match
+ open Types.Template
+ 
+-let debug =
+-  match Sys.getenv "DEBUG_COMBY" with
+-  | exception Not_found -> false
+-  | _ -> true
++let debug = Sys.getenv "DEBUG_COMBY" |> Option.is_some
+ 
+ module Make (Metasyntax : Types.Metasyntax.S) (External : Types.External.S) : Types.Template.S = struct
+ 
+diff --git a/lib/kernel/parsers/dune b/lib/kernel/parsers/dune
+index 28b020c..0cc1fa5 100644
+--- a/lib/kernel/parsers/dune
++++ b/lib/kernel/parsers/dune
+@@ -1,6 +1,8 @@
+ (library
+-  (name parsers)
+-  (public_name comby-kernel.parsers)
+-  (instrumentation (backend bisect_ppx))
+-  (preprocess (pps ppx_sexp_conv))
+-  (libraries core_kernel comby-kernel.vangstrom mparser))
++ (name parsers)
++ (public_name comby-kernel.parsers)
++ (instrumentation
++  (backend bisect_ppx))
++ (preprocess
++  (pps ppx_sexp_conv))
++ (libraries core_kernel comby-kernel.vangstrom mparser))
+diff --git a/lib/kernel/replacement/dune b/lib/kernel/replacement/dune
+index 3e62de6..485b716 100644
+--- a/lib/kernel/replacement/dune
++++ b/lib/kernel/replacement/dune
+@@ -1,6 +1,13 @@
+ (library
+-  (name replacement)
+-  (public_name comby-kernel.replacement)
+-  (instrumentation (backend bisect_ppx))
+-  (preprocess (pps ppx_deriving_yojson))
+-  (libraries comby-kernel.match core_kernel yojson ppx_deriving_yojson ppx_deriving_yojson.runtime))
++ (name replacement)
++ (public_name comby-kernel.replacement)
++ (instrumentation
++  (backend bisect_ppx))
++ (preprocess
++  (pps ppx_deriving_yojson))
++ (libraries
++  comby-kernel.match
++  core_kernel
++  yojson
++  ppx_deriving_yojson
++  ppx_deriving_yojson.runtime))
+diff --git a/lib/semantic/dune b/lib/semantic/dune
+index 9a244d3..186a2ed 100644
+--- a/lib/semantic/dune
++++ b/lib/semantic/dune
+@@ -1,11 +1,8 @@
+ (library
+-   (name comby_semantic)
+-   (public_name comby-semantic)
+-   (instrumentation (backend bisect_ppx))
+-   (preprocess (pps ppx_deriving.show ppx_deriving.eq ppx_sexp_conv))
+-   (libraries
+-      core_kernel
+-      lwt
+-      cohttp
+-      cohttp-lwt-unix
+-      yojson))
++ (name comby_semantic)
++ (public_name comby-semantic)
++ (instrumentation
++  (backend bisect_ppx))
++ (preprocess
++  (pps ppx_deriving.show ppx_deriving.eq ppx_sexp_conv))
++ (libraries core_kernel lwt cohttp cohttp-lwt-unix yojson))
+diff --git a/lib/semantic/lsif.ml b/lib/semantic/lsif.ml
+index 49747bc..d6b3e19 100644
+--- a/lib/semantic/lsif.ml
++++ b/lib/semantic/lsif.ml
+@@ -3,10 +3,7 @@ open Lwt
+ open Cohttp
+ open Cohttp_lwt_unix
+ 
+-let debug =
+-  match Sys.getenv "DEBUG_COMBY" with
+-  | exception Not_found -> false
+-  | _ -> true
++let debug = Sys.getenv "DEBUG_COMBY" |> Option.is_some
+ 
+ module Formatting = struct
+   type t =
+diff --git a/src/dune b/src/dune
+index 444a5a3..f006195 100644
+--- a/src/dune
++++ b/src/dune
+@@ -1,10 +1,17 @@
+ (executables
+- (libraries comby core ppx_deriving_yojson ppx_deriving_yojson.runtime
+-    (select if_hack_parallel.ml from
+-      (hack_parallel -> if_hack_parallel.available.ml)
+-      (!hack_parallel -> if_hack_parallel.unavailable.ml))
+- )
+- (preprocess (pps ppx_deriving_yojson ppx_let ppx_deriving.show ppx_sexp_conv))
++ (libraries
++  comby
++  core
++  core_unix.command_unix
++  ppx_deriving_yojson
++  ppx_deriving_yojson.runtime
++  (select
++   if_hack_parallel.ml
++   from
++   (hack_parallel -> if_hack_parallel.available.ml)
++   (!hack_parallel -> if_hack_parallel.unavailable.ml)))
++ (preprocess
++  (pps ppx_deriving_yojson ppx_let ppx_deriving.show ppx_sexp_conv))
+  (modules main if_hack_parallel)
+  (modes byte exe)
+  (names main))
+@@ -20,4 +27,5 @@
+ (install
+  (package comby)
+  (section bin)
+- (files (main.exe as comby)))
++ (files
++  (main.exe as comby)))
+diff --git a/src/main.ml b/src/main.ml
+index 1def81d..79af76b 100644
+--- a/src/main.ml
++++ b/src/main.ml
+@@ -1,4 +1,5 @@
+ open Core
++module Unix = Core_unix
+ open Command.Let_syntax
+ 
+ open Comby_kernel
+@@ -47,7 +48,7 @@ let substitute_environment_only_and_exit metasyntax_path anonymous_arguments jso
+     match metasyntax_path with
+     | None -> Matchers.Metasyntax.default_metasyntax
+     | Some metasyntax_path ->
+-      match Sys.file_exists metasyntax_path with
++      match Sys_unix.file_exists metasyntax_path with
+       | `No | `Unknown ->
+         Format.eprintf "Could not open file: %s@." metasyntax_path;
+         exit 1
+@@ -95,7 +96,7 @@ let base_command_parameters : (unit -> 'result) Command.Param.t =
+     and verbose = flag "verbose" no_arg ~doc:(Format.sprintf "Log to %s" verbose_out_file)
+     and rule = flag "rule" (optional_with_default "where true" string) ~doc:"rule Apply rules to matches."
+     and match_timeout = flag "timeout" (optional_with_default 3 int) ~doc:"seconds Set match timeout on a source. Default: 3 seconds"
+-    and target_directory = flag "directory" ~aliases:["d"] (optional_with_default (Sys.getcwd ()) string) ~doc:(Format.sprintf "path Run recursively on files in a directory relative to the root. Default is current directory: %s" @@ Sys.getcwd ())
++    and target_directory = flag "directory" ~aliases:["d"] (optional_with_default (Sys_unix.getcwd ()) string) ~doc:(Format.sprintf "path Run recursively on files in a directory relative to the root. Default is current directory: %s" @@ Sys_unix.getcwd ())
+     and directory_depth = flag "depth" (optional int) ~doc:"n Depth to recursively descend into directories"
+     and templates = flag "templates" ~aliases:["config"; "configuration"] (optional (Arg_type.comma_separated string)) ~doc:"paths CSV of directories containing templates, or TOML configuration files"
+     and file_filters = flag "extensions" ~aliases:["e"; "file-extensions"; "f"] (optional (Arg_type.comma_separated string)) ~doc:"extensions Comma-separated extensions to include, like \".go\" or \".c,.h\". It is just a file suffix, so you can use it to filter file names like \"main.go\". The extension will be used to infer a matcher, unless -custom-matcher or -matcher is specified"
+@@ -147,7 +148,7 @@ let base_command_parameters : (unit -> 'result) Command.Param.t =
+       | l ->
+         List.map l ~f:(fun pattern ->
+             if String.contains pattern '/' then
+-              match Filename.realpath pattern with
++              match Filename_unix.realpath pattern with
+               | exception Unix.Unix_error _ ->
+                 Format.eprintf
+                   "No such file or directory: %s. Comby interprets \
+@@ -204,7 +205,7 @@ let base_command_parameters : (unit -> 'result) Command.Param.t =
+     let omega = omega || omega_env in
+     let fast_offset_conversion_env = Option.is_some @@ Sys.getenv "FAST_OFFSET_CONVERSION_COMBY" in
+     let fast_offset_conversion = fast_offset_conversion_env || fast_offset_conversion in
+-    let arch = Unix.Utsname.machine (Core.Unix.uname ()) in
++    let arch = Unix.Utsname.machine (Unix.uname ()) in
+     let compute_mode = match sequential, parany, arch with
+       | true, _, _ -> `Sequential
+       | _, true, _
+@@ -304,7 +305,7 @@ let parse_comby_dot_file () =
+ 
+ let () =
+   If_hack_parallel.check_entry_point ();
+-  Command.run default_command ~version:"1.8.1" ~extend:(fun _ ->
+-      match Sys.file_exists ".comby" with
++  Command_unix.run default_command ~version:"1.8.1" ~extend:(fun _ ->
++      match Sys_unix.file_exists ".comby" with
+       | `Yes -> parse_comby_dot_file ()
+       | _ -> [])
+diff --git a/test/alpha/dune b/test/alpha/dune
+index d7e5532..020677c 100644
+--- a/test/alpha/dune
++++ b/test/alpha/dune
+@@ -1,17 +1,14 @@
+ (library
+  (name alpha_test_integration)
+  (package comby)
+- (modules
+-  test_special_matcher_cases
+-  test_substring_disabled)
++ (modules test_special_matcher_cases test_substring_disabled)
+  (inline_tests)
+- (preprocess (pps ppx_expect ppx_sexp_message ppx_deriving_yojson))
+- (libraries
+-  comby
+-  cohttp-lwt-unix
+-  core
+-  camlzip))
++ (preprocess
++  (pps ppx_expect ppx_sexp_message ppx_deriving_yojson))
++ (libraries comby cohttp-lwt-unix core camlzip))
+ 
+ (alias
+-(name runtest)
+-(deps (source_tree example) (source_tree example/src/.ignore-me)))
++ (name runtest)
++ (deps
++  (source_tree example)
++  (source_tree example/src/.ignore-me)))
+diff --git a/test/common/dune b/test/common/dune
+index 6851f2e..bc3c055 100644
+--- a/test/common/dune
++++ b/test/common/dune
+@@ -36,16 +36,14 @@
+   test_regex_holes
+   test_template_constraints
+   test_custom_metasyntax
+-  test_rewrite_attributes
+-  )
++  test_rewrite_attributes)
+  (inline_tests)
+- (preprocess (pps ppx_expect ppx_sexp_message ppx_deriving_yojson))
+- (libraries
+-  comby
+-  cohttp-lwt-unix
+-  core
+-  camlzip))
++ (preprocess
++  (pps ppx_expect ppx_sexp_message ppx_deriving_yojson))
++ (libraries comby cohttp-lwt-unix core camlzip))
+ 
+ (alias
+-(name runtest)
+-(deps (source_tree example) (source_tree example/src/.ignore-me)))
++ (name runtest)
++ (deps
++  (source_tree example)
++  (source_tree example/src/.ignore-me)))
+diff --git a/test/common/test_cli.ml b/test/common/test_cli.ml
+index 3606367..d5d0c0b 100644
+--- a/test/common/test_cli.ml
++++ b/test/common/test_cli.ml
+@@ -1,7 +1,10 @@
+ open Core
+ open Camlzip
+ 
++module Filename = Filename_unix
++module Sys = Sys_unix
+ module Time = Core_kernel.Time_ns.Span
++module Unix = Core_unix
+ 
+ let binary_path = "../../../../comby"
+ 
+diff --git a/test/common/test_cli_helper.ml b/test/common/test_cli_helper.ml
+index 5791ee6..18372ae 100644
+--- a/test/common/test_cli_helper.ml
++++ b/test/common/test_cli_helper.ml
+@@ -1,6 +1,7 @@
+ open Core
+ 
+ module Time = Core_kernel.Time_ns.Span
++module Unix = Core_unix
+ 
+ let binary_path = "../../../../comby"
+ 
+diff --git a/test/omega/dune b/test/omega/dune
+index 3b31a7e..bf68dcb 100644
+--- a/test/omega/dune
++++ b/test/omega/dune
+@@ -2,20 +2,19 @@
+  (name omega_test_integration)
+  (package comby)
+  (modules
+-;
+-; TODO
+-;
++  ;
++  ; TODO
++  ;
+   test_optional_holes
+   test_special_matcher_cases
+   test_substring_disabled)
+  (inline_tests)
+- (preprocess (pps ppx_expect ppx_sexp_message ppx_deriving_yojson))
+- (libraries
+-  comby
+-  cohttp-lwt-unix
+-  core
+-  camlzip))
++ (preprocess
++  (pps ppx_expect ppx_sexp_message ppx_deriving_yojson))
++ (libraries comby cohttp-lwt-unix core camlzip))
+ 
+ (alias
+-(name runtest)
+-(deps (source_tree example) (source_tree example/src/.ignore-me)))
++ (name runtest)
++ (deps
++  (source_tree example)
++  (source_tree example/src/.ignore-me)))
diff --git a/nixpkgs/pkgs/development/tools/comby/default.nix b/nixpkgs/pkgs/development/tools/comby/default.nix
new file mode 100644
index 000000000000..ac2d36c92391
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/comby/default.nix
@@ -0,0 +1,104 @@
+{ ocamlPackages
+, fetchFromGitHub
+, lib
+, zlib
+, pkg-config
+, cacert
+, gmp
+, libev
+, autoconf
+, sqlite
+, stdenv
+}:
+let
+  mkCombyPackage = { pname, extraBuildInputs ? [ ], extraNativeInputs ? [ ], preBuild ? "" }:
+    ocamlPackages.buildDunePackage rec {
+      inherit pname preBuild;
+      version = "1.8.1";
+      duneVersion = "3";
+      minimalOcamlVersion = "4.08.1";
+      doCheck = true;
+
+      src = fetchFromGitHub {
+        owner = "comby-tools";
+        repo = "comby";
+        rev = version;
+        sha256 = "sha256-yQrfSzJgJm0OWJxhxst2XjZULIVHeEfPMvMIwH7BYDc=";
+      };
+
+      patches = [ ./comby.patch ];
+
+      nativeBuildInputs = extraNativeInputs;
+
+      buildInputs = [
+        ocamlPackages.core
+        ocamlPackages.core_kernel
+        ocamlPackages.ocaml_pcre
+        ocamlPackages.mparser
+        ocamlPackages.mparser-pcre
+        ocamlPackages.angstrom
+        ocamlPackages.ppx_deriving
+        ocamlPackages.ppx_deriving_yojson
+        ocamlPackages.ppx_sexp_conv
+        ocamlPackages.ppx_sexp_message
+      ] ++ extraBuildInputs;
+
+      nativeCheckInputs = [ cacert ];
+
+      meta = {
+        description = "Tool for searching and changing code structure";
+        license = lib.licenses.asl20;
+        homepage = "https://comby.dev";
+      };
+    };
+
+  combyKernel = mkCombyPackage { pname = "comby-kernel"; };
+  combySemantic = mkCombyPackage { pname = "comby-semantic"; extraBuildInputs = [ ocamlPackages.cohttp-lwt-unix ]; };
+in
+mkCombyPackage {
+  pname = "comby";
+
+  # tests have to be removed before building otherwise installPhase will fail
+  # cli tests expect a path to the built binary
+  preBuild = ''
+    substituteInPlace test/common/dune \
+      --replace "test_cli_list" "" \
+      --replace "test_cli_helper" "" \
+      --replace "test_cli" ""
+    rm test/common/{test_cli_list,test_cli_helper,test_cli}.ml
+  '';
+
+  extraBuildInputs = [
+    zlib
+    gmp
+    libev
+    sqlite
+    ocamlPackages.shell # This input must appear before `parany` or any other input that propagates `ocamlnet`
+    ocamlPackages.lwt
+    ocamlPackages.patience_diff
+    ocamlPackages.toml
+    ocamlPackages.cohttp-lwt-unix
+    ocamlPackages.opium
+    ocamlPackages.textutils
+    ocamlPackages.jst-config
+    ocamlPackages.parany
+    ocamlPackages.conduit-lwt-unix
+    ocamlPackages.lwt_react
+    ocamlPackages.tar-unix
+    ocamlPackages.tls
+    ocamlPackages.ppx_jane
+    ocamlPackages.ppx_expect
+    ocamlPackages.dune-configurator
+    combyKernel
+    combySemantic
+  ] ++ (if !stdenv.isAarch32 && !stdenv.isAarch64 then
+    [ ocamlPackages.hack_parallel ]
+  else
+    [ ]);
+
+  extraNativeInputs = [
+    autoconf
+    pkg-config
+  ];
+
+}
diff --git a/nixpkgs/pkgs/development/tools/compass/Gemfile b/nixpkgs/pkgs/development/tools/compass/Gemfile
new file mode 100644
index 000000000000..de8c23e303df
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/compass/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'compass'
diff --git a/nixpkgs/pkgs/development/tools/compass/Gemfile.lock b/nixpkgs/pkgs/development/tools/compass/Gemfile.lock
new file mode 100644
index 000000000000..cc4969e234bb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/compass/Gemfile.lock
@@ -0,0 +1,31 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    chunky_png (1.4.0)
+    compass (1.0.3)
+      chunky_png (~> 1.2)
+      compass-core (~> 1.0.2)
+      compass-import-once (~> 1.0.5)
+      rb-fsevent (>= 0.9.3)
+      rb-inotify (>= 0.9)
+      sass (>= 3.3.13, < 3.5)
+    compass-core (1.0.3)
+      multi_json (~> 1.0)
+      sass (>= 3.3.0, < 3.5)
+    compass-import-once (1.0.5)
+      sass (>= 3.2, < 3.5)
+    ffi (1.15.4)
+    multi_json (1.15.0)
+    rb-fsevent (0.11.0)
+    rb-inotify (0.10.1)
+      ffi (~> 1.0)
+    sass (3.4.25)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  compass
+
+BUNDLED WITH
+   2.4.22
diff --git a/nixpkgs/pkgs/development/tools/compass/default.nix b/nixpkgs/pkgs/development/tools/compass/default.nix
new file mode 100644
index 000000000000..8b8752d1c0d8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/compass/default.nix
@@ -0,0 +1,20 @@
+{ lib, bundlerEnv, bundlerUpdateScript, ruby }:
+
+bundlerEnv {
+  pname = "compass";
+  version = "1.0.3";
+
+  inherit ruby;
+  gemdir = ./.;
+
+  passthru.updateScript = bundlerUpdateScript "compass";
+
+  meta = with lib; {
+    description = "Stylesheet Authoring Environment that makes your website design simpler to implement and easier to maintain";
+    homepage    = "https://github.com/Compass/compass";
+    license     = with licenses; mit;
+    maintainers = with maintainers; [ offline manveru nicknovitski ];
+    mainProgram = "compass";
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/compass/gemset.nix b/nixpkgs/pkgs/development/tools/compass/gemset.nix
new file mode 100644
index 000000000000..2b1bd604254b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/compass/gemset.nix
@@ -0,0 +1,96 @@
+{
+  chunky_png = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1znw5x86hmm9vfhidwdsijz8m38pqgmv98l9ryilvky0aldv7mc9";
+      type = "gem";
+    };
+    version = "1.4.0";
+  };
+  compass = {
+    dependencies = ["chunky_png" "compass-core" "compass-import-once" "rb-fsevent" "rb-inotify" "sass"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lfi83w8z75czr0pf0rmj9hda22082h3cmvczl8r1ma9agf88y2c";
+      type = "gem";
+    };
+    version = "1.0.3";
+  };
+  compass-core = {
+    dependencies = ["multi_json" "sass"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0yaspqwdmzwdcqviclbs3blq7an16pysrfzylz8q1gxmmd6bpj3a";
+      type = "gem";
+    };
+    version = "1.0.3";
+  };
+  compass-import-once = {
+    dependencies = ["sass"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bn7gwbfz7jvvdd0qdfqlx67fcb83gyvxqc7dr9fhcnks3z8z5rq";
+      type = "gem";
+    };
+    version = "1.0.5";
+  };
+  ffi = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ssxcywmb3flxsjdg13is6k01807zgzasdhj4j48dm7ac59cmksn";
+      type = "gem";
+    };
+    version = "1.15.4";
+  };
+  multi_json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0pb1g1y3dsiahavspyzkdy39j4q377009f6ix0bh1ag4nqw43l0z";
+      type = "gem";
+    };
+    version = "1.15.0";
+  };
+  rb-fsevent = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1qsx9c4jr11vr3a9s5j83avczx9qn9rjaf32gxpc2v451hvbc0is";
+      type = "gem";
+    };
+    version = "0.11.0";
+  };
+  rb-inotify = {
+    dependencies = ["ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1jm76h8f8hji38z3ggf4bzi8vps6p7sagxn3ab57qc0xyga64005";
+      type = "gem";
+    };
+    version = "0.10.1";
+  };
+  sass = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0kfpcwh8dgw4lc81qglkvjl73689jy3g7196zkxm4fpskg1p5lkw";
+      type = "gem";
+    };
+    version = "3.4.25";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/compile-daemon/default.nix b/nixpkgs/pkgs/development/tools/compile-daemon/default.nix
new file mode 100644
index 000000000000..f18865a7cee5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/compile-daemon/default.nix
@@ -0,0 +1,32 @@
+{ lib, buildGoModule, fetchFromGitHub, fetchpatch }:
+
+buildGoModule rec {
+  pname = "compile-daemon";
+  version = "1.4.0";
+
+  src = fetchFromGitHub {
+    owner = "githubnemo";
+    repo = "CompileDaemon";
+    rev = "v${version}";
+    sha256 = "sha256-gpyXy7FO7ZVXJrkzcKHFez4S/dGiijXfZ9eSJtNlm58=";
+  };
+
+  vendorHash = "sha256-UpktrXY6OntOA1sxKq3qI59zrOwwCuM+gfGGxPmUJRo=";
+
+  patches = [
+    (fetchpatch {
+      url = "https://github.com/githubnemo/CompileDaemon/commit/39bc1352dc62fea06dff40c5eaef81ab1bdb1f14.patch";
+      hash = "sha256-Zftbw2nu8zzaoj0uwEwdq7xlyycdC0xxBu/qE9VHASI=";
+    })
+  ];
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "Very simple compile daemon for Go";
+    homepage = "https://github.com/githubnemo/CompileDaemon";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ ];
+    mainProgram = "CompileDaemon";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/confluent-cli/default.nix b/nixpkgs/pkgs/development/tools/confluent-cli/default.nix
new file mode 100644
index 000000000000..102ec3d996fd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/confluent-cli/default.nix
@@ -0,0 +1,54 @@
+{ stdenv, autoPatchelfHook, fetchurl, lib }:
+
+stdenv.mkDerivation rec {
+  pname = "confluent-cli";
+  version = "3.37.0";
+
+  # To get the latest version:
+  # curl -L https://cnfl.io/cli | sh -s -- -l | grep -v latest | sort -V | tail -n1
+  src = {
+    x86_64-linux = fetchurl {
+      url = "https://s3-us-west-2.amazonaws.com/confluent.cloud/confluent-cli/archives/${version}/confluent_${version}_linux_amd64.tar.gz";
+      hash = "sha256-vJB/0odVA86fZtRh/Cg5KPD8q8CQFENlRzjpI41UOc8=";
+    };
+    aarch64-linux = fetchurl {
+      url = "https://s3-us-west-2.amazonaws.com/confluent.cloud/confluent-cli/archives/${version}/confluent_${version}_linux_arm64.tar.gz";
+      hash = "sha256-lj7i7oQzX1AfhYfrXDiOjz1/EV4y3/CI4MyPKzNGcss=";
+    };
+    x86_64-darwin = fetchurl {
+      url = "https://s3-us-west-2.amazonaws.com/confluent.cloud/confluent-cli/archives/${version}/confluent_${version}_darwin_amd64.tar.gz";
+      hash = "sha256-gEQBxChsM5CXFRsWBVVcQ88xQ2N4lqkIxHfZKPEMlOY";
+    };
+    aarch64-darwin = fetchurl {
+      url = "https://s3-us-west-2.amazonaws.com/confluent.cloud/confluent-cli/archives/${version}/confluent_${version}_darwin_arm64.tar.gz";
+      hash = "sha256-6i5Z3m0gMzPuqWm/SJOuxjO3ioh/Uhk3A9uykksYfPo=";
+    };
+  }.${stdenv.hostPlatform.system} or (throw "Unsupported system: ${stdenv.hostPlatform.system}");
+
+  nativeBuildInputs = lib.optionals stdenv.hostPlatform.isLinux [ autoPatchelfHook ];
+
+  dontStrip = stdenv.isDarwin;
+
+  installPhase = ''
+    mkdir -p $out/{bin,share/doc/confluent-cli}
+    cp confluent $out/bin/
+    cp LICENSE $out/share/doc/confluent-cli/
+    cp -r legal $out/share/doc/confluent-cli/
+  '';
+
+  meta = with lib; {
+    description = "Confluent CLI";
+    homepage = "https://docs.confluent.io/confluent-cli/current/overview.html";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    maintainers = with maintainers; [ rguevara84 autophagy ];
+
+    # TODO: There's support for i686 systems but I do not have any such system
+    # to build it locally on, it's also unfree so I cannot rely on ofborg to
+    # build it. Get the list of supported system by looking at the list of
+    # files in the S3 bucket:
+    #
+    #   https://s3-us-west-2.amazonaws.com/confluent.cloud?prefix=confluent-cli/archives/1.25.0/&delimiter=/%27
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/conftest/default.nix b/nixpkgs/pkgs/development/tools/conftest/default.nix
new file mode 100644
index 000000000000..0fa7a8e4b164
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/conftest/default.nix
@@ -0,0 +1,64 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+}:
+
+buildGoModule rec {
+  pname = "conftest";
+  version = "0.48.0";
+
+  src = fetchFromGitHub {
+    owner = "open-policy-agent";
+    repo = "conftest";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-xyx+IXPE7/LI2fW7ZKP94JxR3YP9xP7ixNwP8WTTcIQ=";
+  };
+  vendorHash = "sha256-eY1x2eq3RnjK5OkKsuWGnR3LBsu0N7j5fVEd4TISaZY=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/open-policy-agent/conftest/internal/commands.version=${version}"
+  ];
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  preCheck = ''
+    export HOME="$(mktemp -d)"
+  '';
+
+  postInstall = ''
+    installShellCompletion --cmd conftest \
+      --bash <($out/bin/conftest completion bash) \
+      --fish <($out/bin/conftest completion fish) \
+      --zsh <($out/bin/conftest completion zsh)
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    export HOME="$(mktemp -d)"
+    $out/bin/conftest --version | grep ${version} > /dev/null
+  '';
+
+  meta = with lib; {
+    description = "Write tests against structured configuration data";
+    downloadPage = "https://github.com/open-policy-agent/conftest";
+    homepage = "https://www.conftest.dev";
+    changelog = "https://github.com/open-policy-agent/conftest/releases/tag/v${version}";
+    license = licenses.asl20;
+    longDescription = ''
+      Conftest helps you write tests against structured configuration data.
+      Using Conftest you can write tests for your Kubernetes configuration,
+      Tekton pipeline definitions, Terraform code, Serverless configs or any
+      other config files.
+
+      Conftest uses the Rego language from Open Policy Agent for writing the
+      assertions. You can read more about Rego in 'How do I write policies' in
+      the Open Policy Agent documentation.
+    '';
+    maintainers = with maintainers; [ jk yurrriq ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/container2wasm/default.nix b/nixpkgs/pkgs/development/tools/container2wasm/default.nix
new file mode 100644
index 000000000000..36fffe0117da
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/container2wasm/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "container2wasm";
+  version = "0.6.2";
+
+  src = fetchFromGitHub {
+    owner = "ktock";
+    repo = "container2wasm";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-Vsy3K9gLWgfKK7aszpSX4JbiNSL6ao9vbQUgIxkVr2M=";
+  };
+
+  vendorHash = "sha256-xVHBL0bWXisXoRdGb4638+m9mxZZivkoo1U5rr6jG/0=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=github.com/ktock/container2wasm/version.Version=${version}"
+  ];
+
+  subPackages = [
+    "cmd/c2w"
+  ];
+
+  meta = with lib; {
+    description = "Container to WASM converter";
+    homepage = "https://github.com/ktock/container2wasm";
+    changelog = "https://github.com/ktock/container2wasm/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ dit7ya ];
+    mainProgram = "c2w";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/agola/default.nix b/nixpkgs/pkgs/development/tools/continuous-integration/agola/default.nix
new file mode 100644
index 000000000000..02cd0f25acd5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/agola/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+let
+  version = "0.8.0";
+in
+
+buildGoModule {
+  pname = "agola";
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner = "agola-io";
+    repo = "agola";
+    rev = "v${version}";
+    hash = "sha256-nU04MVkUC+m6Ga4qDUH9KrA0zbYmttAicpvdxbaBG0Y=";
+  };
+
+  vendorHash = "sha256-k3Sip9CqTGRTWxr3RzZf0jCrm4AfUrpY/wSTmHy+yik=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X agola.io/agola/cmd.Version=${version}"
+  ];
+
+  tags = [
+    "sqlite_unlock_notify"
+  ];
+
+  # somehow the tests get stuck
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Agola: CI/CD Redefined ";
+    homepage = "https://agola.io";
+    maintainers = with maintainers; [ happysalada ];
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/buildbot/default.nix b/nixpkgs/pkgs/development/tools/continuous-integration/buildbot/default.nix
new file mode 100644
index 000000000000..019ba4579d4a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/buildbot/default.nix
@@ -0,0 +1,36 @@
+{ python3
+, fetchPypi
+, recurseIntoAttrs
+, callPackage
+}:
+let
+  python = python3.override {
+    packageOverrides = self: super: {
+      sqlalchemy = super.sqlalchemy_1_4;
+      moto = super.moto.overridePythonAttrs (oldAttrs: rec {
+        # a lot of tests -> very slow, we already build them when building python packages
+        doCheck = false;
+      });
+    };
+  };
+
+  buildbot-pkg = python.pkgs.callPackage ./pkg.nix {
+    inherit buildbot;
+  };
+  buildbot-worker = python3.pkgs.callPackage ./worker.nix {
+    inherit buildbot;
+  };
+  buildbot = python.pkgs.callPackage ./master.nix {
+    inherit buildbot-pkg buildbot-worker buildbot-plugins;
+  };
+  buildbot-plugins = recurseIntoAttrs (callPackage ./plugins.nix {
+    inherit buildbot-pkg;
+  });
+in
+{
+  inherit buildbot buildbot-plugins buildbot-worker;
+  buildbot-ui = buildbot.withPlugins (with buildbot-plugins; [ www ]);
+  buildbot-full = buildbot.withPlugins (with buildbot-plugins; [
+    www console-view waterfall-view grid-view wsgi-dashboards badges
+  ]);
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/buildbot/master.nix b/nixpkgs/pkgs/development/tools/continuous-integration/buildbot/master.nix
new file mode 100644
index 000000000000..d2554713109c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/buildbot/master.nix
@@ -0,0 +1,164 @@
+{ lib
+, stdenv
+, buildPythonPackage
+, buildPythonApplication
+, fetchPypi
+, makeWrapper
+, pythonOlder
+, python
+, twisted
+, jinja2
+, msgpack
+, zope-interface
+, sqlalchemy
+, alembic
+, python-dateutil
+, txaio
+, autobahn
+, pyjwt
+, pyyaml
+, treq
+, txrequests
+, pypugjs
+, boto3
+, moto
+, markdown
+, lz4
+, setuptools-trial
+, buildbot-worker
+, buildbot-plugins
+, buildbot-pkg
+, parameterized
+, git
+, openssh
+, setuptools
+, croniter
+, importlib-resources
+, packaging
+, unidiff
+, glibcLocales
+, nixosTests
+, callPackage
+}:
+
+let
+  withPlugins = plugins: buildPythonApplication {
+    pname = "${package.pname}-with-plugins";
+    inherit (package) version;
+    format = "other";
+
+    dontUnpack = true;
+    dontBuild = true;
+    doCheck = false;
+
+    nativeBuildInputs = [
+      makeWrapper
+    ];
+
+    propagatedBuildInputs = plugins ++ package.propagatedBuildInputs;
+
+    installPhase = ''
+      makeWrapper ${package}/bin/buildbot $out/bin/buildbot \
+        --prefix PYTHONPATH : "${package}/${python.sitePackages}:$PYTHONPATH"
+      ln -sfv ${package}/lib $out/lib
+    '';
+
+    passthru = package.passthru // {
+      withPlugins = morePlugins: withPlugins (morePlugins ++ plugins);
+    };
+  };
+
+  package = buildPythonApplication rec {
+    pname = "buildbot";
+    version = "3.11.0";
+    format = "pyproject";
+
+    disabled = pythonOlder "3.8";
+
+    src = fetchPypi {
+      inherit pname version;
+      hash = "sha256-0TW14K0Cp3Ylk+JDNV9x7a8Ul7EC5FTTVvSGccXv6JU=";
+    };
+
+    propagatedBuildInputs = [
+      # core
+      twisted
+      jinja2
+      msgpack
+      zope-interface
+      sqlalchemy
+      alembic
+      python-dateutil
+      txaio
+      autobahn
+      pyjwt
+      pyyaml
+      setuptools
+      croniter
+      importlib-resources
+      packaging
+      unidiff
+    ]
+      # tls
+      ++ twisted.optional-dependencies.tls;
+
+    nativeCheckInputs = [
+      treq
+      txrequests
+      pypugjs
+      boto3
+      moto
+      markdown
+      lz4
+      setuptools-trial
+      buildbot-worker
+      buildbot-pkg
+      buildbot-plugins.www
+      parameterized
+      git
+      openssh
+      glibcLocales
+    ];
+
+    patches = [
+      # This patch disables the test that tries to read /etc/os-release which
+      # is not accessible in sandboxed builds.
+      ./skip_test_linux_distro.patch
+    ];
+
+    postPatch = ''
+      substituteInPlace buildbot/scripts/logwatcher.py --replace '/usr/bin/tail' "$(type -P tail)"
+    '';
+
+    # Silence the depreciation warning from SqlAlchemy
+    SQLALCHEMY_SILENCE_UBER_WARNING = 1;
+
+    # TimeoutErrors on slow machines -> aarch64
+    doCheck = !stdenv.isAarch64;
+
+    preCheck = ''
+      export LC_ALL="en_US.UTF-8"
+      export PATH="$out/bin:$PATH"
+
+      # remove testfile which is missing configuration file from sdist
+      rm buildbot/test/integration/test_graphql.py
+      # tests in this file are flaky, see https://github.com/buildbot/buildbot/issues/6776
+      rm buildbot/test/integration/test_try_client.py
+    '';
+
+    passthru = {
+      inherit withPlugins;
+      tests.buildbot = nixosTests.buildbot;
+      updateScript = ./update.sh;
+    };
+
+    meta = with lib; {
+      description = "An open-source continuous integration framework for automating software build, test, and release processes";
+      homepage = "https://buildbot.net/";
+      changelog = "https://github.com/buildbot/buildbot/releases/tag/v${version}";
+      maintainers = teams.buildbot.members;
+      license = licenses.gpl2Only;
+      broken = stdenv.isDarwin;
+    };
+  };
+in package
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/buildbot/pkg.nix b/nixpkgs/pkgs/development/tools/continuous-integration/buildbot/pkg.nix
new file mode 100644
index 000000000000..80c417066428
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/buildbot/pkg.nix
@@ -0,0 +1,31 @@
+{ lib, buildPythonPackage, fetchPypi, isPy3k, buildbot }:
+
+buildPythonPackage rec {
+  pname = "buildbot-pkg";
+  inherit (buildbot) version;
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-ImXiBIFSj0of2SFX01sXB5BI4TYA2IAGmfPofC8ERZQ=";
+  };
+
+  postPatch = ''
+    # Their listdir function filters out `node_modules` folders.
+    # Do we have to care about that with Nix...?
+    substituteInPlace buildbot_pkg.py --replace "os.listdir = listdir" ""
+  '';
+
+  # No tests
+  doCheck = false;
+
+  pythonImportsCheck = [ "buildbot_pkg" ];
+
+  disabled = !isPy3k;
+
+  meta = with lib; {
+    homepage = "https://buildbot.net/";
+    description = "Buildbot Packaging Helper";
+    maintainers = teams.buildbot.members;
+    license = licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/buildbot/plugins.nix b/nixpkgs/pkgs/development/tools/continuous-integration/buildbot/plugins.nix
new file mode 100644
index 000000000000..4d2253c54d61
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/buildbot/plugins.nix
@@ -0,0 +1,258 @@
+{ lib, buildPythonPackage, fetchPypi, callPackage, mock, cairosvg, klein, jinja2, buildbot-pkg }:
+{
+  # this is exposed for potential plugins to use and for nix-update
+  inherit buildbot-pkg;
+  www = buildPythonPackage rec {
+    pname = "buildbot-www";
+    inherit (buildbot-pkg) version;
+
+    src = fetchPypi {
+      inherit pname version;
+      hash = "sha256-bu22WXJ2yBGe89GL3RBxkUN/yPu2GEYURk6C+2LIpns=";
+    };
+
+    # Remove unnecessary circular dependency on buildbot
+    postPatch = ''
+      sed -i "s/'buildbot'//" setup.py
+    '';
+
+    buildInputs = [ buildbot-pkg mock ];
+
+    # No tests
+    doCheck = false;
+
+    meta = with lib; {
+      homepage = "https://buildbot.net/";
+      description = "Buildbot UI";
+      maintainers = teams.buildbot.members;
+      license = licenses.gpl2;
+    };
+  };
+
+  www-react = buildPythonPackage rec {
+    pname = "buildbot-www-react";
+    inherit (buildbot-pkg) version;
+
+    src = fetchPypi {
+      inherit pname version;
+      hash = "sha256-WDtw4wSAPsmIRcoZS1PIRzQR4OJnHVyc19Q7MnU5VSs=";
+    };
+
+    # Remove unnecessary circular dependency on buildbot
+    postPatch = ''
+      sed -i "s/'buildbot'//" setup.py
+    '';
+
+    buildInputs = [ buildbot-pkg ];
+
+    # No tests
+    doCheck = false;
+
+    meta = with lib; {
+      homepage = "https://buildbot.net/";
+      description = "Buildbot UI (React)";
+      maintainers = teams.buildbot.members;
+      license = licenses.gpl2Only;
+    };
+  };
+
+  console-view = buildPythonPackage rec {
+    pname = "buildbot-console-view";
+    inherit (buildbot-pkg) version;
+
+    src = fetchPypi {
+      inherit pname version;
+      hash = "sha256-HGlKu9ptej35GJYBBWted/YtsH/uigckAoFAjYTh3gY=";
+    };
+
+    buildInputs = [ buildbot-pkg ];
+
+    # No tests
+    doCheck = false;
+
+    meta = with lib; {
+      homepage = "https://buildbot.net/";
+      description = "Buildbot Console View Plugin";
+      maintainers = teams.buildbot.members;
+      license = licenses.gpl2;
+    };
+  };
+
+  react-console-view = buildPythonPackage rec {
+    pname = "buildbot-react-console-view";
+    inherit (buildbot-pkg) version;
+
+    src = fetchPypi {
+      inherit pname version;
+      hash = "sha256-oFbR4NvI/6oPXY8TospkHS1j/5KzXd1fguazFtDPIko=";
+    };
+
+    buildInputs = [ buildbot-pkg ];
+
+    # tests fail
+    doCheck = false;
+
+    meta = with lib; {
+      homepage = "https://buildbot.net/";
+      description = "Buildbot Console View Plugin (React)";
+      maintainers = teams.buildbot.members;
+      license = licenses.gpl2;
+    };
+  };
+
+  waterfall-view = buildPythonPackage rec {
+    pname = "buildbot-waterfall-view";
+    inherit (buildbot-pkg) version;
+
+    src = fetchPypi {
+      inherit pname version;
+      hash = "sha256-O4scYAKpoEOXsPIodkKUrfwCGNYHlOGfvDnguaM12U0=";
+    };
+
+    buildInputs = [ buildbot-pkg ];
+
+    # No tests
+    doCheck = false;
+
+    meta = with lib; {
+      homepage = "https://buildbot.net/";
+      description = "Buildbot Waterfall View Plugin";
+      maintainers = teams.buildbot.members;
+      license = licenses.gpl2;
+    };
+  };
+
+  react-waterfall-view = buildPythonPackage rec {
+    pname = "buildbot-react-waterfall-view";
+    inherit (buildbot-pkg) version;
+
+    src = fetchPypi {
+      inherit pname version;
+      hash = "sha256-DlYqK32lVdZ8qby/1+JCo6m81/0dsxqiAfWMIZ1OAPQ=";
+    };
+
+    buildInputs = [ buildbot-pkg ];
+
+    # tests fail
+    doCheck = false;
+
+    meta = with lib; {
+      homepage = "https://buildbot.net/";
+      description = "Buildbot Waterfall View Plugin (React)";
+      maintainers = teams.buildbot.members;
+      license = licenses.gpl2;
+    };
+  };
+
+  grid-view = buildPythonPackage rec {
+    pname = "buildbot-grid-view";
+    inherit (buildbot-pkg) version;
+
+    src = fetchPypi {
+      inherit pname version;
+      hash = "sha256-cK+uZU7rG423IT8xvwrpMPiUXfu1oPpGB5onmWNK4fs=";
+    };
+
+    buildInputs = [ buildbot-pkg ];
+
+    # No tests
+    doCheck = false;
+
+    meta = with lib; {
+      homepage = "https://buildbot.net/";
+      description = "Buildbot Grid View Plugin";
+      maintainers = teams.buildbot.members;
+      license = licenses.gpl2;
+    };
+  };
+
+  react-grid-view = buildPythonPackage rec {
+    pname = "buildbot-react-grid-view";
+    inherit (buildbot-pkg) version;
+
+    src = fetchPypi {
+      inherit pname version;
+      hash = "sha256-Gbc0T1fsmke1pO/LiXCzQYrjWzYG1WhHZgypLyzhfok=";
+    };
+
+    buildInputs = [ buildbot-pkg ];
+
+    # tests fail
+    doCheck = false;
+
+    meta = with lib; {
+      homepage = "https://buildbot.net/";
+      description = "Buildbot Grid View Plugin (React)";
+      maintainers = teams.buildbot.members;
+      license = licenses.gpl2;
+    };
+  };
+
+  wsgi-dashboards = buildPythonPackage rec {
+    pname = "buildbot-wsgi-dashboards";
+    inherit (buildbot-pkg) version;
+
+    src = fetchPypi {
+      inherit pname version;
+      hash = "sha256-eFfOYhKw575VWlwD5dKRnqjSUV6kdPrv3UXBs/3AREo=";
+    };
+
+    buildInputs = [ buildbot-pkg ];
+
+    # No tests
+    doCheck = false;
+
+    meta = with lib; {
+      homepage = "https://buildbot.net/";
+      description = "Buildbot WSGI dashboards Plugin";
+      maintainers = teams.buildbot.members;
+      license = licenses.gpl2;
+    };
+  };
+
+  react-wsgi-dashboards = buildPythonPackage rec {
+    pname = "buildbot-react-wsgi-dashboards";
+    inherit (buildbot-pkg) version;
+
+    src = fetchPypi {
+      inherit pname version;
+      hash = "sha256-0CCD1Zrj1xodUITvLzTDrLgLGaEVqt8y26f+exsP4N8=";
+    };
+
+    buildInputs = [ buildbot-pkg ];
+
+    # tests fail
+    doCheck = false;
+
+    meta = with lib; {
+      homepage = "https://buildbot.net/";
+      description = "Buildbot WSGI dashboards Plugin (React)";
+      maintainers = teams.buildbot.members;
+      license = licenses.gpl2;
+    };
+  };
+
+  badges = buildPythonPackage rec {
+    pname = "buildbot-badges";
+    inherit (buildbot-pkg) version;
+
+    src = fetchPypi {
+      inherit pname version;
+      hash = "sha256-FNMspluhQlGgQ4X7gJisakHTTmn/5PtQ+obK26PrXdg=";
+    };
+
+    buildInputs = [ buildbot-pkg ];
+    propagatedBuildInputs = [ cairosvg klein jinja2 ];
+
+    # No tests
+    doCheck = false;
+
+    meta = with lib; {
+      homepage = "https://buildbot.net/";
+      description = "Buildbot Badges Plugin";
+      maintainers = teams.buildbot.members ++ [ maintainers.julienmalka ];
+      license = licenses.gpl2;
+    };
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/buildbot/skip_test_linux_distro.patch b/nixpkgs/pkgs/development/tools/continuous-integration/buildbot/skip_test_linux_distro.patch
new file mode 100644
index 000000000000..8fe5c7b56b4f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/buildbot/skip_test_linux_distro.patch
@@ -0,0 +1,11 @@
+diff -Nur buildbot-0.9.6/buildbot/test/unit/test_buildbot_net_usage_data.py buildbot-0.9.6.patched/buildbot/test/unit/test_buildbot_net_usage_data.py
+--- buildbot-0.9.6/buildbot/test/unit/test_buildbot_net_usage_data.py	2017-04-19 16:57:02.000000000 +0200
++++ buildbot-0.9.6.patched/buildbot/test/unit/test_buildbot_net_usage_data.py	2017-05-04 12:22:54.575762551 +0200
+@@ -147,6 +147,7 @@
+         _sendBuildbotNetUsageData({'foo': 'bar'})
+ 
+     def test_linux_distro(self):
++        raise SkipTest("NixOS sandboxed builds hides /etc/os-release")
+         system = platform.system()
+         if system != "Linux":
+             raise SkipTest("test is only for linux")
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/buildbot/update.sh b/nixpkgs/pkgs/development/tools/continuous-integration/buildbot/update.sh
new file mode 100755
index 000000000000..dbefba28b55f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/buildbot/update.sh
@@ -0,0 +1,17 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p nix-update
+set -eu -o pipefail
+
+nix-update buildbot
+nix-update --version=skip buildbot-worker
+nix-update --version=skip buildbot-plugins.buildbot-pkg
+nix-update --version=skip buildbot-plugins.www
+nix-update --version=skip buildbot-plugins.www-react
+nix-update --version=skip buildbot-plugins.console-view
+nix-update --version=skip buildbot-plugins.react-console-view
+nix-update --version=skip buildbot-plugins.waterfall-view
+nix-update --version=skip buildbot-plugins.react-waterfall-view
+nix-update --version=skip buildbot-plugins.grid-view
+nix-update --version=skip buildbot-plugins.react-grid-view
+nix-update --version=skip buildbot-plugins.wsgi-dashboards
+nix-update --version=skip buildbot-plugins.badges
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/buildbot/worker.nix b/nixpkgs/pkgs/development/tools/continuous-integration/buildbot/worker.nix
new file mode 100644
index 000000000000..eb613858f463
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/buildbot/worker.nix
@@ -0,0 +1,66 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, buildbot
+, stdenv
+
+# patch
+, coreutils
+
+# propagates
+, autobahn
+, future
+, msgpack
+, twisted
+
+# tests
+, parameterized
+, psutil
+, setuptools-trial
+
+# passthru
+, nixosTests
+}:
+
+buildPythonPackage (rec {
+  pname = "buildbot-worker";
+  inherit (buildbot) version;
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-7zpf1Xl5dYPJk8V5PQCx/v+sE9kH23UWM9QbE0fH4tA=";
+  };
+
+  postPatch = ''
+    substituteInPlace buildbot_worker/scripts/logwatcher.py \
+      --replace /usr/bin/tail "${coreutils}/bin/tail"
+  '';
+
+  nativeBuildInputs = [
+    setuptools-trial
+  ];
+
+  propagatedBuildInputs = [
+    autobahn
+    future
+    msgpack
+    twisted
+  ];
+
+  nativeCheckInputs = [
+    parameterized
+    psutil
+  ];
+
+  passthru.tests = {
+    smoke-test = nixosTests.buildbot;
+  };
+
+  meta = with lib; {
+    homepage = "https://buildbot.net/";
+    description = "Buildbot Worker Daemon";
+    maintainers = teams.buildbot.members;
+    license = licenses.gpl2;
+    broken = stdenv.isDarwin; # https://hydra.nixos.org/build/243534318/nixlog/6
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/buildkite-agent/default.nix b/nixpkgs/pkgs/development/tools/continuous-integration/buildkite-agent/default.nix
new file mode 100644
index 000000000000..9189c5963824
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/buildkite-agent/default.nix
@@ -0,0 +1,65 @@
+{ fetchFromGitHub
+, lib
+, buildGoModule
+, makeWrapper
+, coreutils
+, git
+, openssh
+, bash
+, gnused
+, gnugrep
+, gitUpdater
+, nixosTests
+}:
+buildGoModule rec {
+  pname = "buildkite-agent";
+  version = "3.59.0";
+
+  src = fetchFromGitHub {
+    owner = "buildkite";
+    repo = "agent";
+    rev = "v${version}";
+    sha256 = "sha256-pYaxjXoNn6MOE2oHUSKrBzP5oKhtfJwSHFCkcpkyzas=";
+  };
+
+  vendorHash = "sha256-JSuam9Tn+ZekfLrj78tBncH7Q2aP4CaUgaaDkJ/azEw=";
+
+  postPatch = ''
+    substituteInPlace clicommand/agent_start.go --replace /bin/bash ${bash}/bin/bash
+  '';
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  doCheck = false;
+
+  postInstall = ''
+    # Fix binary name
+    mv $out/bin/{agent,buildkite-agent}
+
+    # These are runtime dependencies
+    wrapProgram $out/bin/buildkite-agent \
+      --prefix PATH : '${lib.makeBinPath [ openssh git coreutils gnused gnugrep ]}'
+  '';
+
+  passthru = {
+    tests.smoke-test = nixosTests.buildkite-agents;
+    updateScript = gitUpdater {
+      rev-prefix = "v";
+    };
+  };
+
+  meta = with lib; {
+    description = "Build runner for buildkite.com";
+    longDescription = ''
+      The buildkite-agent is a small, reliable, and cross-platform build runner
+      that makes it easy to run automated builds on your own infrastructure.
+      It’s main responsibilities are polling buildkite.com for work, running
+      build jobs, reporting back the status code and output log of the job,
+      and uploading the job's artifacts.
+    '';
+    homepage = "https://buildkite.com/docs/agent";
+    license = licenses.mit;
+    maintainers = with maintainers; [ pawelpacana zimbatm jsoo1 techknowlogick ];
+    platforms = with platforms; unix ++ darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/buildkite-cli/default.nix b/nixpkgs/pkgs/development/tools/continuous-integration/buildkite-cli/default.nix
new file mode 100644
index 000000000000..5e191cb83b32
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/buildkite-cli/default.nix
@@ -0,0 +1,33 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "buildkite-cli";
+  version = "2.0.0";
+
+  src = fetchFromGitHub {
+    owner = "buildkite";
+    repo = "cli";
+    rev = "v${version}";
+    sha256 = "sha256-4MUgyUKyycsreAMVtyKJFpQOHvI6JJSn7TUZtbQANyc=";
+  };
+
+  vendorHash = "sha256-3x7yJenJ2BHdqVPaBaqfFVeOSJZ/VRNF/TTfSsw+2os=";
+
+  doCheck = false;
+
+  postPatch = ''
+    patchShebangs .buildkite/steps/{lint,run-local}.sh
+  '';
+
+  subPackages = [ "cmd/bk" ];
+
+  ldflags = [ "-s" "-w" "-X main.VERSION=${version}" ];
+
+  meta = with lib; {
+    description = "A command line interface for Buildkite";
+    homepage = "https://github.com/buildkite/cli";
+    license = licenses.mit;
+    maintainers = with maintainers; [ groodt ];
+    mainProgram = "bk";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/buildkite-test-collector-rust/default.nix b/nixpkgs/pkgs/development/tools/continuous-integration/buildkite-test-collector-rust/default.nix
new file mode 100644
index 000000000000..7f1e6c55f5fa
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/buildkite-test-collector-rust/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+, stdenv
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "buildkite-test-collector-rust";
+  version = "0.1.0";
+
+  src = fetchFromGitHub {
+    owner = "buildkite";
+    repo = "test-collector-rust";
+    rev = "v${version}";
+    sha256 = "sha256-rY/+AwxO0+xcnRj0A8TRhCUJQ0ecosybI6It1mDOdQM=";
+  };
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    Security
+  ];
+
+  cargoSha256 = "sha256-qfJ0ROi0S0mmPl6kKrW3dp3VLjYqK+sBVj+iKDNTjyM=";
+
+  meta = with lib; {
+    description = "Rust adapter for Buildkite Test Analytics";
+    homepage = "https://buildkite.com/test-analytics";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ jfroche ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/cirrus-cli/default.nix b/nixpkgs/pkgs/development/tools/continuous-integration/cirrus-cli/default.nix
new file mode 100644
index 000000000000..2890e157d0ed
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/cirrus-cli/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, fetchFromGitHub
+, buildGoModule
+, installShellFiles
+}:
+
+buildGoModule rec {
+  pname = "cirrus-cli";
+  version = "0.110.3";
+
+  src = fetchFromGitHub {
+    owner = "cirruslabs";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-+OzBWooLpI4WnyBPRlwLGZVFrckXGeoDJilsEE00slk=";
+  };
+
+  vendorHash = "sha256-xJnBMSfYwx6uHuMjyR9IWGHwt3fNajDr6DW8o+J+lj8=";
+
+  ldflags = [
+    "-X github.com/cirruslabs/cirrus-cli/internal/version.Version=v${version}"
+    "-X github.com/cirruslabs/cirrus-cli/internal/version.Commit=v${version}"
+  ];
+
+  nativeBuildInputs = [ installShellFiles ];
+  postInstall = ''
+    installShellCompletion --cmd cirrus \
+      --bash <($out/bin/cirrus completion bash) \
+      --zsh <($out/bin/cirrus completion zsh) \
+      --fish <($out/bin/cirrus completion fish)
+  '';
+
+  # tests fail on read-only filesystem
+  doCheck = false;
+
+  meta = with lib; {
+    description = "CLI for executing Cirrus tasks locally and in any CI";
+    homepage = "https://github.com/cirruslabs/cirrus-cli";
+    license = licenses.agpl3Plus;
+    maintainers = with maintainers; [ techknowlogick ];
+    mainProgram = "cirrus";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/codeberg-pages/default.nix b/nixpkgs/pkgs/development/tools/continuous-integration/codeberg-pages/default.nix
new file mode 100644
index 000000000000..d252266f2377
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/codeberg-pages/default.nix
@@ -0,0 +1,30 @@
+{ lib, fetchFromGitea, buildGoModule }:
+
+buildGoModule rec {
+  pname = "codeberg-pages";
+  version = "4.6.2";
+
+  src = fetchFromGitea {
+    domain = "codeberg.org";
+    owner = "Codeberg";
+    repo = "pages-server";
+    rev = "ce241fa40adee2b12f8e225db98e09a45bc2acbb";
+    sha256 = "sha256-mL2Xs7eyldoZK4zrX6WFlFtwdLN0iVyl1Qh8X6b2u9c=";
+  };
+
+  vendorHash = "sha256-R/LuZkA2xHmu7SO3BVyK1C6n9U+pYn50kNkyLltn2ng=";
+
+  patches = [ ./disable_httptest.patch ];
+
+  ldflags = [ "-s" "-w" ];
+
+  tags = [ "sqlite" "sqlite_unlock_notify" "netgo" ];
+
+  meta = with lib; {
+    mainProgram = "codeberg-pages";
+    maintainers = with maintainers; [ laurent-f1z1 ];
+    license = licenses.eupl12;
+    homepage = "https://codeberg.org/Codeberg/pages-server";
+    description = "Static websites hosting from Gitea repositories";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/codeberg-pages/disable_httptest.patch b/nixpkgs/pkgs/development/tools/continuous-integration/codeberg-pages/disable_httptest.patch
new file mode 100644
index 000000000000..2095b603badc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/codeberg-pages/disable_httptest.patch
@@ -0,0 +1,55 @@
+diff --git a/server/handler/handler_test.go b/server/handler/handler_test.go
+deleted file mode 100644
+index 626564a..0000000
+--- a/server/handler/handler_test.go
++++ /dev/null
+@@ -1,49 +0,0 @@
+-package handler
+-
+-import (
+-	"net/http/httptest"
+-	"testing"
+-	"time"
+-
+-	"codeberg.org/codeberg/pages/server/cache"
+-	"codeberg.org/codeberg/pages/server/gitea"
+-	"github.com/rs/zerolog/log"
+-)
+-
+-func TestHandlerPerformance(t *testing.T) {
+-	giteaClient, _ := gitea.NewClient("https://codeberg.org", "", cache.NewKeyValueCache(), false, false)
+-	testHandler := Handler(
+-		"codeberg.page", "raw.codeberg.org",
+-		giteaClient,
+-		"https://docs.codeberg.org/pages/raw-content/",
+-		[]string{"/.well-known/acme-challenge/"},
+-		[]string{"raw.codeberg.org", "fonts.codeberg.org", "design.codeberg.org"},
+-		cache.NewKeyValueCache(),
+-		cache.NewKeyValueCache(),
+-	)
+-
+-	testCase := func(uri string, status int) {
+-		t.Run(uri, func(t *testing.T) {
+-			req := httptest.NewRequest("GET", uri, nil)
+-			w := httptest.NewRecorder()
+-
+-			log.Printf("Start: %v\n", time.Now())
+-			start := time.Now()
+-			testHandler(w, req)
+-			end := time.Now()
+-			log.Printf("Done: %v\n", time.Now())
+-
+-			resp := w.Result()
+-
+-			if resp.StatusCode != status {
+-				t.Errorf("request failed with status code %d", resp.StatusCode)
+-			} else {
+-				t.Logf("request took %d milliseconds", end.Sub(start).Milliseconds())
+-			}
+-		})
+-	}
+-
+-	testCase("https://mondstern.codeberg.page/", 404) // TODO: expect 200
+-	testCase("https://codeberg.page/", 404)           // TODO: expect 200
+-	testCase("https://example.momar.xyz/", 424)
+-}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/drone-cli/0001-use-builtin-go-syscerts.patch b/nixpkgs/pkgs/development/tools/continuous-integration/drone-cli/0001-use-builtin-go-syscerts.patch
new file mode 100644
index 000000000000..6dfb50271a49
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/drone-cli/0001-use-builtin-go-syscerts.patch
@@ -0,0 +1,39 @@
+From 93f4f92b017935a35988e7210036db8020753f9e Mon Sep 17 00:00:00 2001
+From: Jake Hillion <jake@hillion.co.uk>
+Date: Sun, 21 Feb 2021 21:26:39 +0000
+Subject: [PATCH] removed dependency for systemcertpool
+
+---
+ drone/internal/util.go | 7 +++++--
+ go.mod                 | 1 -
+ 2 files changed, 5 insertions(+), 3 deletions(-)
+
+diff --git a/drone/internal/util.go b/drone/internal/util.go
+index 46c8ec6f..25d4def7 100644
+--- a/drone/internal/util.go
++++ b/drone/internal/util.go
+@@ -2,11 +2,11 @@ package internal
+ 
+ import (
+ 	"crypto/tls"
++	"crypto/x509"
+ 	"fmt"
+ 	"net/http"
+ 	"strings"
+ 
+-	"github.com/jackspirou/syscerts"
+ 	"github.com/urfave/cli"
+ 	"golang.org/x/net/proxy"
+ 	"golang.org/x/oauth2"
+@@ -35,7 +35,10 @@ func NewClient(c *cli.Context) (drone.Client, error) {
+ 	}
+ 
+ 	// attempt to find system CA certs
+-	certs := syscerts.SystemRootsPool()
++	certs, err := x509.SystemCertPool()
++	if err != nil {
++		return nil, err
++	}
+ 	tlsConfig := &tls.Config{
+ 		RootCAs:            certs,
+ 		InsecureSkipVerify: skip,
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/drone-cli/default.nix b/nixpkgs/pkgs/development/tools/continuous-integration/drone-cli/default.nix
new file mode 100644
index 000000000000..84432b82d495
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/drone-cli/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, fetchFromGitHub
+, buildGoModule
+}:
+
+buildGoModule rec {
+  version = "1.8.0";
+  pname = "drone-cli";
+  revision = "v${version}";
+
+  src = fetchFromGitHub {
+    owner = "harness";
+    repo = "drone-cli";
+    rev = revision;
+    hash = "sha256-moxsGlm7Q9E0q9SZ2gZotn3tRbnbtwhDc9UNCCSb3pY=";
+  };
+
+  vendorHash = "sha256-rKZq2vIXvw4bZ6FXPqOip9dLiV5rSb1fWDJe3oxOBjw=";
+
+  # patch taken from https://patch-diff.githubusercontent.com/raw/harness/drone-cli/pull/179.patch
+  # but with go.mod changes removed due to conflict
+  patches = [ ./0001-use-builtin-go-syscerts.patch ];
+
+  ldflags = [
+    "-X main.version=${version}"
+  ];
+
+  doCheck = false;
+
+  meta = with lib; {
+    mainProgram = "drone";
+    maintainers = with maintainers; [ techknowlogick ];
+    license = licenses.asl20;
+    description = "Command line client for the Drone continuous integration server";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/drone-runner-docker/default.nix b/nixpkgs/pkgs/development/tools/continuous-integration/drone-runner-docker/default.nix
new file mode 100644
index 000000000000..974cd8f464cb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/drone-runner-docker/default.nix
@@ -0,0 +1,23 @@
+{ lib, fetchFromGitHub, buildGoModule }:
+
+buildGoModule rec {
+  pname = "drone-runner-docker";
+  version = "1.8.3";
+
+  src = fetchFromGitHub {
+    owner = "drone-runners";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    sha256 = "sha256-ZoQeCuT5FRhxp/ikB0gkp3QVOQ6OS7ukkz4QanWT9G0=";
+  };
+
+  vendorHash = "sha256-KcNp3VdJ201oxzF0bLXY4xWHqHNz54ZrVSI96cfhU+k=";
+
+  meta = with lib; {
+    maintainers = with maintainers; [ endocrimes emilylange ];
+    license = licenses.unfreeRedistributable;
+    homepage = "https://github.com/drone-runners/drone-runner-docker";
+    description = "Drone pipeline runner that executes builds inside Docker containers";
+    mainProgram = "drone-runner-docker";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/drone-runner-exec/default.nix b/nixpkgs/pkgs/development/tools/continuous-integration/drone-runner-exec/default.nix
new file mode 100644
index 000000000000..1e9d1e96a9a9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/drone-runner-exec/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "drone-runner-exec";
+  version = "unstable-2020-04-19";
+
+  src = fetchFromGitHub {
+    owner = "drone-runners";
+    repo = "drone-runner-exec";
+    rev = "c0a612ef2bdfdc6d261dfbbbb005c887a0c3668d";
+    sha256 = "sha256-0UIJwpC5Y2TQqyZf6C6neICYBZdLQBWAZ8/K1l6KVRs=";
+  };
+
+  vendorHash = "sha256-ypYuQKxRhRQGX1HtaWt6F6BD9vBpD8AJwx/4esLrJsw=";
+
+  meta = with lib; {
+    description = "Drone pipeline runner that executes builds directly on the host machine";
+    homepage = "https://github.com/drone-runners/drone-runner-exec";
+    # https://polyformproject.org/licenses/small-business/1.0.0/
+    license = licenses.unfree;
+    maintainers = with maintainers; [ mic92 ];
+    mainProgram = "drone-runner-exec";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/drone-runner-ssh/default.nix b/nixpkgs/pkgs/development/tools/continuous-integration/drone-runner-ssh/default.nix
new file mode 100644
index 000000000000..92a015f8e95a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/drone-runner-ssh/default.nix
@@ -0,0 +1,23 @@
+{ lib, fetchFromGitHub, buildGoModule }:
+
+buildGoModule rec {
+  pname = "drone-runner-ssh";
+  version = "unstable-2022-12-22";
+
+  src = fetchFromGitHub {
+    owner = "drone-runners";
+    repo = pname;
+    rev = "ee70745c60e070a7fac57d9cecc41252e7a3ff55";
+    sha256 = "sha256-YUyhEA1kYIFLN+BI2A8PFeSgifoVNmNPKtdS58MwwVU=";
+  };
+
+  vendorHash = "sha256-Vj6ZmNwegKBVJPh6MsjtLMmX9WR76msuR2DPM8Qyhe0=";
+
+  meta = with lib; {
+    description = "Experimental Drone runner that executes a pipeline on a remote machine";
+    homepage = "https://github.com/drone-runners/drone-runner-ssh";
+    license = licenses.unfreeRedistributable;
+    maintainers = teams.c3d2.members;
+    mainProgram = "drone-runner-ssh";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/drone/default.nix b/nixpkgs/pkgs/development/tools/continuous-integration/drone/default.nix
new file mode 100644
index 000000000000..29a593acc306
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/drone/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, fetchFromGitHub
+, buildGoModule
+, enableUnfree ? true
+}:
+
+buildGoModule rec {
+  pname = "drone.io${lib.optionalString (!enableUnfree) "-oss"}";
+  version = "2.22.0";
+
+  src = fetchFromGitHub {
+    owner = "harness";
+    repo = "drone";
+    rev = "v${version}";
+    sha256 = "sha256-haxxILbM3REdSK4h4LN+HhRvl3VK9Ozf2NfnLTL5T3A=";
+  };
+
+  vendorHash = "sha256-n4KbKkqAnHDIsXs8A/FE+rCkSKQKr5fv7npJ/X6t0mk=";
+
+  tags = lib.optionals (!enableUnfree) [ "oss" "nolimit" ];
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Continuous Integration platform built on container technology";
+    homepage = "https://github.com/harness/drone";
+    maintainers = with maintainers; [ elohmeier vdemeester techknowlogick ];
+    license = with licenses; if enableUnfree then unfreeRedistributable else asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/fly/default.nix b/nixpkgs/pkgs/development/tools/continuous-integration/fly/default.nix
new file mode 100644
index 000000000000..f53b0810f6f7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/fly/default.nix
@@ -0,0 +1,39 @@
+{ buildGoModule, fetchFromGitHub, stdenv, lib, installShellFiles }:
+
+buildGoModule rec {
+  pname = "fly";
+  version = "7.11.2";
+
+  src = fetchFromGitHub {
+    owner = "concourse";
+    repo = "concourse";
+    rev = "v${version}";
+    hash = "sha256-GopZTVdjnPQZ354UC6USHYew+bzuy2AxagsHeH7wseQ=";
+  };
+
+  vendorHash = "sha256-Tzp4pPaIJ08NkkBBKR4xkMEhQR7K+Egx8aHYeRog0Gk=";
+
+  subPackages = [ "fly" ];
+
+  ldflags = [
+    "-s" "-w" "-X github.com/concourse/concourse.Version=${version}"
+  ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  doCheck = false;
+
+  postInstall = lib.optionalString (stdenv.buildPlatform.canExecute stdenv.hostPlatform) ''
+    installShellCompletion --cmd fly \
+      --bash <($out/bin/fly completion --shell bash) \
+      --fish <($out/bin/fly completion --shell fish) \
+      --zsh <($out/bin/fly completion --shell zsh)
+  '';
+
+  meta = with lib; {
+    description = "Command line interface to Concourse CI";
+    homepage = "https://concourse-ci.org";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ ivanbrennan SuperSandro2000 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/forgejo-actions-runner/default.nix b/nixpkgs/pkgs/development/tools/continuous-integration/forgejo-actions-runner/default.nix
new file mode 100644
index 000000000000..dc5ad3708a0e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/forgejo-actions-runner/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, buildGoModule
+, fetchFromGitea
+, testers
+, forgejo-actions-runner
+}:
+
+buildGoModule rec {
+  pname = "forgejo-actions-runner";
+  version = "3.3.0";
+
+  src = fetchFromGitea {
+    domain = "code.forgejo.org";
+    owner = "forgejo";
+    repo = "runner";
+    rev = "v${version}";
+    hash = "sha256-ZpsHytsIp+ZW4DI7X9MmI7nZRnXVHvx905YdZGS6WMY=";
+  };
+
+  vendorHash = "sha256-5GnGXpMy1D7KpVAVroX07Vw5QKYYtwdIhQsk23WCLgc=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X gitea.com/gitea/act_runner/internal/pkg/ver.version=${src.rev}"
+  ];
+
+  doCheck = false; # Test try to lookup code.forgejo.org.
+
+  passthru.tests.version = testers.testVersion {
+    package = forgejo-actions-runner;
+    version = src.rev;
+  };
+
+  meta = with lib; {
+    description = "A runner for Forgejo based on act";
+    homepage = "https://code.forgejo.org/forgejo/runner";
+    changelog = "https://gitea.com/gitea/act_runner/releases/tag/${src.rev}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ kranzes ];
+    mainProgram = "act_runner";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/gitea-actions-runner/default.nix b/nixpkgs/pkgs/development/tools/continuous-integration/gitea-actions-runner/default.nix
new file mode 100644
index 000000000000..68093f39e4f8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/gitea-actions-runner/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, fetchFromGitea
+, buildGoModule
+, testers
+, gitea-actions-runner
+}:
+
+buildGoModule rec {
+  pname = "gitea-actions-runner";
+  version = "0.2.6";
+
+  src = fetchFromGitea {
+    domain = "gitea.com";
+    owner = "gitea";
+    repo = "act_runner";
+    rev = "v${version}";
+    hash = "sha256-GE9yqp5zWJ4lL0L/w3oSvU72AiHBNb+yh2qBPKPe9X0=";
+  };
+
+  vendorHash = "sha256-NoaLq5pCwTuPd9ne5LYcvJsgUXAqcfkcW3Ck2K350JE=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X gitea.com/gitea/act_runner/internal/pkg/ver.version=v${version}"
+  ];
+
+  passthru.tests.version = testers.testVersion {
+    package = gitea-actions-runner;
+    version = "v${version}";
+  };
+
+  meta = with lib; {
+    mainProgram = "act_runner";
+    maintainers = with maintainers; [ techknowlogick ];
+    license = licenses.mit;
+    changelog = "https://gitea.com/gitea/act_runner/releases/tag/v${version}";
+    homepage = "https://gitea.com/gitea/act_runner";
+    description = "A runner for Gitea based on act";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/github-runner/default.nix b/nixpkgs/pkgs/development/tools/continuous-integration/github-runner/default.nix
new file mode 100644
index 000000000000..69b018eaea3c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/github-runner/default.nix
@@ -0,0 +1,328 @@
+{ autoPatchelfHook
+, autoSignDarwinBinariesHook
+, buildDotnetModule
+, dotnetCorePackages
+, fetchFromGitHub
+, fetchpatch
+, git
+, glibc
+, glibcLocales
+, lib
+, nixosTests
+, stdenv
+, which
+, buildPackages
+, runtimeShell
+  # List of Node.js runtimes the package should support
+, nodeRuntimes ? [ "node20" ]
+, nodejs_20
+}:
+
+# Node.js runtimes supported by upstream
+assert builtins.all (x: builtins.elem x [ "node20" ]) nodeRuntimes;
+
+buildDotnetModule rec {
+  pname = "github-runner";
+  version = "2.313.0";
+
+  src = fetchFromGitHub {
+    owner = "actions";
+    repo = "runner";
+    rev = "v${version}";
+    hash = "sha256-0CclkbJ8AfffdfVNXacnpgFOS+ONk6eP1LTyFa12xU4=";
+    leaveDotGit = true;
+    postFetch = ''
+      git -C $out rev-parse --short HEAD > $out/.git-revision
+      rm -rf $out/.git
+    '';
+  };
+
+  # The git commit is read during the build and some tests depend on a git repo to be present
+  # https://github.com/actions/runner/blob/22d1938ac420a4cb9e3255e47a91c2e43c38db29/src/dir.proj#L5
+  unpackPhase = ''
+    cp -r $src $TMPDIR/src
+    chmod -R +w $TMPDIR/src
+    cd $TMPDIR/src
+    (
+      export PATH=${buildPackages.git}/bin:$PATH
+      git init
+      git config user.email "root@localhost"
+      git config user.name "root"
+      git add .
+      git commit -m "Initial commit"
+      git checkout -b v${version}
+    )
+    mkdir -p $TMPDIR/bin
+    cat > $TMPDIR/bin/git <<EOF
+    #!${runtimeShell}
+    if [ \$# -eq 1 ] && [ "\$1" = "rev-parse" ]; then
+      echo $(cat $TMPDIR/src/.git-revision)
+      exit 0
+    fi
+    exec ${buildPackages.git}/bin/git "\$@"
+    EOF
+    chmod +x $TMPDIR/bin/git
+    export PATH=$TMPDIR/bin:$PATH
+  '';
+
+  patches = [
+    # Replace some paths that originally point to Nix's read-only store
+    ./patches/host-context-dirs.patch
+    # Use GetDirectory() to obtain "diag" dir
+    ./patches/use-get-directory-for-diag.patch
+    # Don't try to install service
+    ./patches/dont-install-service.patch
+    # Access `.env` and `.path` relative to `$RUNNER_ROOT`, if set
+    ./patches/env-sh-use-runner-root.patch
+    # Fix FHS path: https://github.com/actions/runner/pull/2464
+    (fetchpatch {
+      name = "ln-fhs.patch";
+      url = "https://github.com/actions/runner/commit/5ff0ce1.patch";
+      hash = "sha256-2Vg3cKZK3cE/OcPDZkdN2Ro2WgvduYTTwvNGxwCfXas=";
+    })
+  ] ++ lib.optionals (nodeRuntimes == [ "node20" ]) [
+    # If the package is built without Node 16, make Node 20 the default internal version
+    # https://github.com/actions/runner/pull/2844
+    (fetchpatch {
+      name = "internal-node-20.patch";
+      url = "https://github.com/actions/runner/commit/acdc6ed.patch";
+      hash = "sha256-3/6yhhJPr9OMWBFc5/NU/DRtn76aTYvjsjQo2u9ZqnU=";
+    })
+  ];
+
+  postPatch = ''
+    # Ignore changes to src/Runner.Sdk/BuildConstants.cs
+    substituteInPlace src/dir.proj \
+      --replace 'git update-index --assume-unchanged ./Runner.Sdk/BuildConstants.cs' \
+                'true'
+  '';
+
+  DOTNET_SYSTEM_GLOBALIZATION_INVARIANT = isNull glibcLocales;
+  LOCALE_ARCHIVE = lib.optionalString (!DOTNET_SYSTEM_GLOBALIZATION_INVARIANT) "${glibcLocales}/lib/locale/locale-archive";
+
+  postConfigure = ''
+    # Generate src/Runner.Sdk/BuildConstants.cs
+    dotnet msbuild \
+      -t:GenerateConstant \
+      -p:ContinuousIntegrationBuild=true \
+      -p:Deterministic=true \
+      -p:PackageRuntime="${dotnetCorePackages.systemToDotnetRid stdenv.hostPlatform.system}" \
+      -p:RunnerVersion="${version}" \
+      src/dir.proj
+  '';
+
+  nativeBuildInputs = [
+    which
+    git
+  ] ++ lib.optionals stdenv.isLinux [
+    autoPatchelfHook
+  ] ++ lib.optionals (stdenv.isDarwin && stdenv.isAarch64) [
+    autoSignDarwinBinariesHook
+  ];
+
+  buildInputs = [ stdenv.cc.cc.lib ];
+
+  dotnet-sdk = dotnetCorePackages.sdk_6_0;
+  dotnet-runtime = dotnetCorePackages.runtime_6_0;
+
+  dotnetFlags = [ "-p:PackageRuntime=${dotnetCorePackages.systemToDotnetRid stdenv.hostPlatform.system}" ];
+
+  # As given here: https://github.com/actions/runner/blob/0befa62/src/dir.proj#L33-L41
+  projectFile = [
+    "src/Sdk/Sdk.csproj"
+    "src/Runner.Common/Runner.Common.csproj"
+    "src/Runner.Listener/Runner.Listener.csproj"
+    "src/Runner.Worker/Runner.Worker.csproj"
+    "src/Runner.PluginHost/Runner.PluginHost.csproj"
+    "src/Runner.Sdk/Runner.Sdk.csproj"
+    "src/Runner.Plugins/Runner.Plugins.csproj"
+  ];
+  nugetDeps = ./deps.nix;
+
+  doCheck = true;
+
+  __darwinAllowLocalNetworking = true;
+
+  # Fully qualified name of disabled tests
+  disabledTests =
+    [
+      "GitHub.Runner.Common.Tests.Listener.SelfUpdaterL0.TestSelfUpdateAsync"
+      "GitHub.Runner.Common.Tests.ProcessInvokerL0.OomScoreAdjIsInherited"
+    ]
+    ++ map (x: "GitHub.Runner.Common.Tests.Listener.SelfUpdaterL0.TestSelfUpdateAsync_${x}") [
+      "Cancel_CloneHashTask_WhenNotNeeded"
+      "CloneHash_RuntimeAndExternals"
+      "DownloadRetry"
+      "FallbackToFullPackage"
+      "NoUpdateOnOldVersion"
+      "NotUseExternalsRuntimeTrimmedPackageOnHashMismatch"
+      "UseExternalsRuntimeTrimmedPackage"
+      "UseExternalsTrimmedPackage"
+      "ValidateHash"
+    ]
+    ++ map (x: "GitHub.Runner.Common.Tests.Listener.SelfUpdaterV2L0.${x}") [
+      "TestSelfUpdateAsync_DownloadRetry"
+      "TestSelfUpdateAsync_ValidateHash"
+      "TestSelfUpdateAsync"
+    ]
+    ++ map (x: "GitHub.Runner.Common.Tests.Worker.ActionManagerL0.PrepareActions_${x}") [
+      "CompositeActionWithActionfile_CompositeContainerNested"
+      "CompositeActionWithActionfile_CompositePrestepNested"
+      "CompositeActionWithActionfile_MaxLimit"
+      "CompositeActionWithActionfile_Node"
+      "DownloadActionFromGraph"
+      "NotPullOrBuildImagesMultipleTimes"
+      "RepositoryActionWithActionYamlFile_DockerHubImage"
+      "RepositoryActionWithActionfileAndDockerfile"
+      "RepositoryActionWithActionfile_DockerHubImage"
+      "RepositoryActionWithActionfile_Dockerfile"
+      "RepositoryActionWithActionfile_DockerfileRelativePath"
+      "RepositoryActionWithActionfile_Node"
+      "RepositoryActionWithDockerfile"
+      "RepositoryActionWithDockerfileInRelativePath"
+      "RepositoryActionWithDockerfilePrepareActions_Repository"
+      "RepositoryActionWithInvalidWrapperActionfile_Node"
+      "RepositoryActionWithWrapperActionfile_PreSteps"
+    ]
+    ++ map (x: "GitHub.Runner.Common.Tests.DotnetsdkDownloadScriptL0.${x}") [
+      "EnsureDotnetsdkBashDownloadScriptUpToDate"
+      "EnsureDotnetsdkPowershellDownloadScriptUpToDate"
+    ]
+    ++ [ "GitHub.Runner.Common.Tests.Listener.RunnerL0.TestRunOnceHandleUpdateMessage" ]
+    # Tests for trimmed runner packages which aim at reducing the update size. Not relevant for Nix.
+    ++ map (x: "GitHub.Runner.Common.Tests.PackagesTrimL0.${x}") [
+      "RunnerLayoutParts_CheckExternalsHash"
+      "RunnerLayoutParts_CheckDotnetRuntimeHash"
+    ]
+    ++ lib.optionals (stdenv.hostPlatform.system == "aarch64-linux") [
+      # "JavaScript Actions in Alpine containers are only supported on x64 Linux runners. Detected Linux Arm64"
+      "GitHub.Runner.Common.Tests.Worker.StepHostL0.DetermineNodeRuntimeVersionInAlpineContainerAsync"
+      "GitHub.Runner.Common.Tests.Worker.StepHostL0.DetermineNode20RuntimeVersionInAlpineContainerAsync"
+    ]
+    ++ lib.optionals DOTNET_SYSTEM_GLOBALIZATION_INVARIANT [
+      "GitHub.Runner.Common.Tests.ProcessExtensionL0.SuccessReadProcessEnv"
+      "GitHub.Runner.Common.Tests.Util.StringUtilL0.FormatUsesInvariantCulture"
+      "GitHub.Runner.Common.Tests.Worker.VariablesL0.Constructor_SetsOrdinalIgnoreCaseComparer"
+      "GitHub.Runner.Common.Tests.Worker.WorkerL0.DispatchCancellation"
+      "GitHub.Runner.Common.Tests.Worker.WorkerL0.DispatchRunNewJob"
+    ]
+    ++ lib.optionals (!lib.elem "node16" nodeRuntimes) [
+      "GitHub.Runner.Common.Tests.ProcessExtensionL0.SuccessReadProcessEnv"
+    ];
+
+  testProjectFile = [ "src/Test/Test.csproj" ];
+
+  preCheck = ''
+    mkdir -p _layout/externals
+  '' + lib.optionalString (lib.elem "node20" nodeRuntimes) ''
+    ln -s ${nodejs_20} _layout/externals/node20
+  '';
+
+  postInstall = ''
+    mkdir -p $out/bin
+
+    install -m755 src/Misc/layoutbin/runsvc.sh                 $out/lib/github-runner
+    install -m755 src/Misc/layoutbin/RunnerService.js          $out/lib/github-runner
+    install -m755 src/Misc/layoutroot/run.sh                   $out/lib/github-runner
+    install -m755 src/Misc/layoutroot/run-helper.sh.template   $out/lib/github-runner/run-helper.sh
+    install -m755 src/Misc/layoutroot/config.sh                $out/lib/github-runner
+    install -m755 src/Misc/layoutroot/env.sh                   $out/lib/github-runner
+
+    # env.sh is patched to not require any wrapping
+    ln -sr "$out/lib/github-runner/env.sh" "$out/bin/"
+
+    substituteInPlace $out/lib/github-runner/config.sh \
+      --replace './bin/Runner.Listener' "$out/bin/Runner.Listener"
+  '' + lib.optionalString stdenv.isLinux ''
+    substituteInPlace $out/lib/github-runner/config.sh \
+      --replace 'command -v ldd' 'command -v ${glibc.bin}/bin/ldd' \
+      --replace 'ldd ./bin' '${glibc.bin}/bin/ldd ${dotnet-runtime}/shared/Microsoft.NETCore.App/${dotnet-runtime.version}/' \
+      --replace '/sbin/ldconfig' '${glibc.bin}/bin/ldconfig'
+  '' + ''
+    # Remove uneeded copy for run-helper template
+    substituteInPlace $out/lib/github-runner/run.sh --replace 'cp -f "$DIR"/run-helper.sh.template "$DIR"/run-helper.sh' ' '
+    substituteInPlace $out/lib/github-runner/run-helper.sh --replace '"$DIR"/bin/' '"$DIR"/'
+
+    # Make paths absolute
+    substituteInPlace $out/lib/github-runner/runsvc.sh \
+      --replace './externals' "$out/lib/externals" \
+      --replace './bin/RunnerService.js' "$out/lib/github-runner/RunnerService.js"
+
+    # The upstream package includes Node and expects it at the path
+    # externals/node$version. As opposed to the official releases, we don't
+    # link the Alpine Node flavors.
+    mkdir -p $out/lib/externals
+  '' + lib.optionalString (lib.elem "node20" nodeRuntimes) ''
+    ln -s ${nodejs_20} $out/lib/externals/node20
+  '' + ''
+    # Install Nodejs scripts called from workflows
+    install -D src/Misc/layoutbin/hashFiles/index.js $out/lib/github-runner/hashFiles/index.js
+    mkdir -p $out/lib/github-runner/checkScripts
+    install src/Misc/layoutbin/checkScripts/* $out/lib/github-runner/checkScripts/
+  '' + lib.optionalString stdenv.isLinux ''
+    # Wrap explicitly to, e.g., prevent extra entries for LD_LIBRARY_PATH
+    makeWrapperArgs=()
+
+    # We don't wrap with libicu
+    substituteInPlace $out/lib/github-runner/config.sh \
+      --replace '$LDCONFIG_COMMAND -NXv ''${libpath//:/ }' 'echo libicu'
+  '' + ''
+    # XXX: Using the corresponding Nix argument does not work as expected:
+    #      https://github.com/NixOS/nixpkgs/issues/218449
+    # Common wrapper args for `executables`
+    makeWrapperArgs+=(
+      --run 'export RUNNER_ROOT="''${RUNNER_ROOT:-"$HOME/.github-runner"}"'
+      --run 'mkdir -p "$RUNNER_ROOT"'
+      --chdir "$out"
+    )
+  '';
+
+  # List of files to wrap
+  executables = [
+    "config.sh"
+    "Runner.Listener"
+    "Runner.PluginHost"
+    "Runner.Worker"
+    "run.sh"
+    "runsvc.sh"
+  ];
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+
+    export RUNNER_ROOT="$TMPDIR"
+
+    $out/bin/config.sh --help >/dev/null
+    $out/bin/Runner.Listener --help >/dev/null
+
+    version=$($out/bin/Runner.Listener --version)
+    if [[ "$version" != "${version}" ]]; then
+      printf 'Unexpected version %s' "$version"
+      exit 1
+    fi
+
+    commit=$($out/bin/Runner.Listener --commit)
+    if [[ "$commit" != "$(git rev-parse HEAD)" ]]; then
+      printf 'Unexpected commit %s' "$commit"
+      exit 1
+    fi
+
+    runHook postInstallCheck
+  '';
+
+  passthru = {
+    tests.smoke-test = nixosTests.github-runner;
+    updateScript = ./update.sh;
+  };
+
+  meta = with lib; {
+    changelog = "https://github.com/actions/runner/releases/tag/v${version}";
+    description = "Self-hosted runner for GitHub Actions";
+    homepage = "https://github.com/actions/runner";
+    license = licenses.mit;
+    maintainers = with maintainers; [ veehaitch newam kfollesdal aanderse zimbatm ];
+    platforms = [ "x86_64-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ];
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/github-runner/deps.nix b/nixpkgs/pkgs/development/tools/continuous-integration/github-runner/deps.nix
new file mode 100644
index 000000000000..d2db24600350
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/github-runner/deps.nix
@@ -0,0 +1,270 @@
+# This file was automatically generated by passthru.fetch-deps.
+# Please dont edit it manually, your changes might get overwritten!
+
+{ fetchNuGet }: [
+  (fetchNuGet { pname = "Azure.Core"; version = "1.36.0"; sha256 = "14lsc6zik7s5by3gp86pf77wh58fcqrjy2xhx5p03gmhdn6iz2cn"; })
+  (fetchNuGet { pname = "Azure.Storage.Blobs"; version = "12.19.1"; sha256 = "0rdgvlbqkcyc356xs0wzwbm92lf95621mf2shk30i3ahp0k0gd0k"; })
+  (fetchNuGet { pname = "Azure.Storage.Common"; version = "12.18.1"; sha256 = "1hjzggfv24598601jhcdfcaflbd5b97aglhxy7a5ymy1aszhwp9k"; })
+  (fetchNuGet { pname = "Castle.Core"; version = "4.4.0"; sha256 = "0rpcbmyhckvlvp6vbzpj03c1gqz56ixc6f15vgmxmyf1g40c24pf"; })
+  (fetchNuGet { pname = "Microsoft.AspNet.WebApi.Client"; version = "5.2.9"; sha256 = "1sy1q36bm9fz3gi780w4jgysw3dwaz2f3a5gcn6jxw1gkmdasb08"; })
+  (fetchNuGet { pname = "Microsoft.Bcl.AsyncInterfaces"; version = "1.1.1"; sha256 = "0a1ahssqds2ympr7s4xcxv5y8jgxs7ahd6ah6fbgglj4rki1f1vw"; })
+  (fetchNuGet { pname = "Microsoft.CodeCoverage"; version = "17.2.0"; sha256 = "018yl113i037m5qhm3z6csb0c4l8kj412dxw2dagdbj07qbxwikj"; })
+  (fetchNuGet { pname = "Microsoft.CSharp"; version = "4.0.1"; sha256 = "0zxc0apx1gcx361jlq8smc9pfdgmyjh6hpka8dypc9w23nlsh6yj"; })
+  (fetchNuGet { pname = "Microsoft.IdentityModel.Logging"; version = "5.2.1"; sha256 = "1gpka9jm2gl6f07pcwzwvaxw9xq1a19i9fskn0qs921c5grhlp3g"; })
+  (fetchNuGet { pname = "Microsoft.IdentityModel.Tokens"; version = "5.2.1"; sha256 = "03v6145vr1winq8xxfikydicds4f10qmy1ybyz2gfimnzzx51w00"; })
+  (fetchNuGet { pname = "Microsoft.NET.Test.Sdk"; version = "17.2.0"; sha256 = "0ncnq378pk1immy2dyf75xjf2xn72r4m5gma1njhc4rvhzx9qz11"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "1.0.1"; sha256 = "01al6cfxp68dscl15z7rxfw9zvhm64dncsw09a1vmdkacsa2v6lr"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "1.0.1-rc2-24027"; sha256 = "1a0w5fv8slfr4q7m3mh78lb9awdwyz4zv3bb73vybkyq1f6z7lx8"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "1.1.0"; sha256 = "08vh1r12g6ykjygq5d3vq09zylgb84l63k49jc4v8faw9g93iqqm"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "1.1.1"; sha256 = "164wycgng4mi9zqi2pnsf1pq6gccbqvw6ib916mqizgjmd8f44pj"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "2.0.0"; sha256 = "1fk2fk2639i7nzy58m9dvpdnzql4vb8yl8vr19r2fp8lmj9w2jr0"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Runtime"; version = "1.0.2-rc2-24027"; sha256 = "0ippdn16381l8i2iy63i45nk0p303fjbd4amh7biwvqxgagfbvhh"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Runtime.CoreCLR"; version = "1.0.2-rc2-24027"; sha256 = "05y0jz6vfl9zs0lmmwsz6arf7r0mg2dm93ymizrzmqn706krz45x"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Runtime.Native"; version = "1.0.2-rc2-24027"; sha256 = "11hpbbmnjbskw7s6sx32l6qzz63kshx0gyp3sawyxk82nbqrissl"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Targets"; version = "1.0.1"; sha256 = "0ppdkwy6s9p7x9jix3v4402wb171cdiibq7js7i13nxpdky7074p"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Targets"; version = "1.0.1-rc2-24027"; sha256 = "1j1458jska7540ng7fdf5i06k2vy71mxl5dld4x5s8gfndxpdzdj"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Targets"; version = "1.1.0"; sha256 = "193xwf33fbm0ni3idxzbr5fdq3i2dlfgihsac9jj7whj0gd902nh"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Targets"; version = "1.1.3"; sha256 = "05smkcyxir59rgrmp7d6327vvrlacdgldfxhmyr1azclvga1zfsq"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Windows.ApiSets"; version = "1.0.1-rc2-24027"; sha256 = "034m9p417iq3yzipg393wp4bddsh80di9iad78vvvh7w5difdv0x"; })
+  (fetchNuGet { pname = "Microsoft.TestPlatform.ObjectModel"; version = "17.2.0"; sha256 = "0l05smcgjzdfa5f60f9q5lylap3i21aswxbava92s19bgv46w2rv"; })
+  (fetchNuGet { pname = "Microsoft.TestPlatform.TestHost"; version = "17.2.0"; sha256 = "1238hx3hdg22s123cxygdfm89h54abw1jv6az6hl8h76ip39ybdp"; })
+  (fetchNuGet { pname = "Microsoft.Win32.Primitives"; version = "4.0.1-rc2-24027"; sha256 = "1rvb076s4ksvmbvnxi4sv2f9f22izqp2rca0scjqya5x1qhcgkp0"; })
+  (fetchNuGet { pname = "Microsoft.Win32.Primitives"; version = "4.3.0"; sha256 = "0j0c1wj4ndj21zsgivsc24whiya605603kxrbiw6wkfdync464wq"; })
+  (fetchNuGet { pname = "Microsoft.Win32.Registry"; version = "4.4.0"; sha256 = "088j2anh1rnkxdcycw5kgp97ahk7cj741y6kask84880835arsb6"; })
+  (fetchNuGet { pname = "Minimatch"; version = "2.0.0"; sha256 = "1k84q1bz1qq2nh35nip8vmi65wixsh5y7piln5b4n172xzhfqvx0"; })
+  (fetchNuGet { pname = "Moq"; version = "4.11.0"; sha256 = "08bnk80scjjqnkdbjam8grcqrw2rvj9z7556hiznac7in3fcp77w"; })
+  (fetchNuGet { pname = "NETStandard.Library"; version = "1.5.0-rc2-24027"; sha256 = "1kazwidj63w53r1s6fd8sgykb70kdic27fg9qhg74qzwm354imwm"; })
+  (fetchNuGet { pname = "NETStandard.Library"; version = "1.6.1"; sha256 = "1z70wvsx2d847a2cjfii7b83pjfs34q05gb037fdjikv5kbagml8"; })
+  (fetchNuGet { pname = "Newtonsoft.Json"; version = "13.0.3"; sha256 = "0xrwysmrn4midrjal8g2hr1bbg38iyisl0svamb11arqws4w2bw7"; })
+  (fetchNuGet { pname = "Newtonsoft.Json"; version = "9.0.1"; sha256 = "0mcy0i7pnfpqm4pcaiyzzji4g0c8i3a5gjz28rrr28110np8304r"; })
+  (fetchNuGet { pname = "Newtonsoft.Json.Bson"; version = "1.0.1"; sha256 = "1r1hvj5gjl466bya2bfl5aaj8rbwyf5x1msg710wf3k2llbci1xa"; })
+  (fetchNuGet { pname = "NuGet.Frameworks"; version = "5.11.0"; sha256 = "0wv26gq39hfqw9md32amr5771s73f5zn1z9vs4y77cgynxr73s4z"; })
+  (fetchNuGet { pname = "runtime.any.System.Collections"; version = "4.3.0"; sha256 = "0bv5qgm6vr47ynxqbnkc7i797fdi8gbjjxii173syrx14nmrkwg0"; })
+  (fetchNuGet { pname = "runtime.any.System.Diagnostics.Tools"; version = "4.3.0"; sha256 = "1wl76vk12zhdh66vmagni66h5xbhgqq7zkdpgw21jhxhvlbcl8pk"; })
+  (fetchNuGet { pname = "runtime.any.System.Diagnostics.Tracing"; version = "4.3.0"; sha256 = "00j6nv2xgmd3bi347k00m7wr542wjlig53rmj28pmw7ddcn97jbn"; })
+  (fetchNuGet { pname = "runtime.any.System.Globalization"; version = "4.3.0"; sha256 = "1daqf33hssad94lamzg01y49xwndy2q97i2lrb7mgn28656qia1x"; })
+  (fetchNuGet { pname = "runtime.any.System.Globalization.Calendars"; version = "4.3.0"; sha256 = "1ghhhk5psqxcg6w88sxkqrc35bxcz27zbqm2y5p5298pv3v7g201"; })
+  (fetchNuGet { pname = "runtime.any.System.IO"; version = "4.3.0"; sha256 = "0l8xz8zn46w4d10bcn3l4yyn4vhb3lrj2zw8llvz7jk14k4zps5x"; })
+  (fetchNuGet { pname = "runtime.any.System.Reflection"; version = "4.3.0"; sha256 = "02c9h3y35pylc0zfq3wcsvc5nqci95nrkq0mszifc0sjx7xrzkly"; })
+  (fetchNuGet { pname = "runtime.any.System.Reflection.Extensions"; version = "4.3.0"; sha256 = "0zyri97dfc5vyaz9ba65hjj1zbcrzaffhsdlpxc9bh09wy22fq33"; })
+  (fetchNuGet { pname = "runtime.any.System.Reflection.Primitives"; version = "4.3.0"; sha256 = "0x1mm8c6iy8rlxm8w9vqw7gb7s1ljadrn049fmf70cyh42vdfhrf"; })
+  (fetchNuGet { pname = "runtime.any.System.Resources.ResourceManager"; version = "4.3.0"; sha256 = "03kickal0iiby82wa5flar18kyv82s9s6d4xhk5h4bi5kfcyfjzl"; })
+  (fetchNuGet { pname = "runtime.any.System.Runtime"; version = "4.3.0"; sha256 = "1cqh1sv3h5j7ixyb7axxbdkqx6cxy00p4np4j91kpm492rf4s25b"; })
+  (fetchNuGet { pname = "runtime.any.System.Runtime.Handles"; version = "4.3.0"; sha256 = "0bh5bi25nk9w9xi8z23ws45q5yia6k7dg3i4axhfqlnj145l011x"; })
+  (fetchNuGet { pname = "runtime.any.System.Runtime.InteropServices"; version = "4.3.0"; sha256 = "0c3g3g3jmhlhw4klrc86ka9fjbl7i59ds1fadsb2l8nqf8z3kb19"; })
+  (fetchNuGet { pname = "runtime.any.System.Text.Encoding"; version = "4.3.0"; sha256 = "0aqqi1v4wx51h51mk956y783wzags13wa7mgqyclacmsmpv02ps3"; })
+  (fetchNuGet { pname = "runtime.any.System.Text.Encoding.Extensions"; version = "4.3.0"; sha256 = "0lqhgqi0i8194ryqq6v2gqx0fb86db2gqknbm0aq31wb378j7ip8"; })
+  (fetchNuGet { pname = "runtime.any.System.Threading.Tasks"; version = "4.3.0"; sha256 = "03mnvkhskbzxddz4hm113zsch1jyzh2cs450dk3rgfjp8crlw1va"; })
+  (fetchNuGet { pname = "runtime.any.System.Threading.Timer"; version = "4.3.0"; sha256 = "0aw4phrhwqz9m61r79vyfl5la64bjxj8l34qnrcwb28v49fg2086"; })
+  (fetchNuGet { pname = "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "16rnxzpk5dpbbl1x354yrlsbvwylrq456xzpsha1n9y3glnhyx9d"; })
+  (fetchNuGet { pname = "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "0rwpqngkqiapqc5c2cpkj7idhngrgss5qpnqg0yh40mbyflcxf8i"; })
+  (fetchNuGet { pname = "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0hkg03sgm2wyq8nqk6dbm9jh5vcq57ry42lkqdmfklrw89lsmr59"; })
+  (fetchNuGet { pname = "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "1n06gxwlinhs0w7s8a94r1q3lwqzvynxwd3mp10ws9bg6gck8n4r"; })
+  (fetchNuGet { pname = "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0c2p354hjx58xhhz7wv6div8xpi90sc6ibdm40qin21bvi7ymcaa"; })
+  (fetchNuGet { pname = "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "0404wqrc7f2yc0wxv71y3nnybvqx8v4j9d47hlscxy759a525mc3"; })
+  (fetchNuGet { pname = "runtime.native.System"; version = "4.3.0"; sha256 = "15hgf6zaq9b8br2wi1i3x0zvmk410nlmsmva9p0bbg73v6hml5k4"; })
+  (fetchNuGet { pname = "runtime.native.System.IO.Compression"; version = "4.1.0-rc2-24027"; sha256 = "1qnd05bsrz88cr4wnkq7haf2bwml2zzjcscjk94v8ka4isi1i89b"; })
+  (fetchNuGet { pname = "runtime.native.System.IO.Compression"; version = "4.3.0"; sha256 = "1vvivbqsk6y4hzcid27pqpm5bsi6sc50hvqwbcx8aap5ifrxfs8d"; })
+  (fetchNuGet { pname = "runtime.native.System.Net.Http"; version = "4.3.0"; sha256 = "1n6rgz5132lcibbch1qlf0g9jk60r0kqv087hxc0lisy50zpm7kk"; })
+  (fetchNuGet { pname = "runtime.native.System.Security.Cryptography.Apple"; version = "4.3.0"; sha256 = "1b61p6gw1m02cc1ry996fl49liiwky6181dzr873g9ds92zl326q"; })
+  (fetchNuGet { pname = "runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "18pzfdlwsg2nb1jjjjzyb5qlgy6xjxzmhnfaijq5s2jw3cm3ab97"; })
+  (fetchNuGet { pname = "runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "0zy5r25jppz48i2bkg8b9lfig24xixg6nm3xyr1379zdnqnpm8f6"; })
+  (fetchNuGet { pname = "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0qyynf9nz5i7pc26cwhgi8j62ps27sqmf78ijcfgzab50z9g8ay3"; })
+  (fetchNuGet { pname = "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "096ch4n4s8k82xga80lfmpimpzahd2ip1mgwdqgar0ywbbl6x438"; })
+  (fetchNuGet { pname = "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "1klrs545awhayryma6l7g2pvnp9xy4z0r1i40r80zb45q3i9nbyf"; })
+  (fetchNuGet { pname = "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "1dm8fifl7rf1gy7lnwln78ch4rw54g0pl5g1c189vawavll7p6rj"; })
+  (fetchNuGet { pname = "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple"; version = "4.3.0"; sha256 = "10yc8jdrwgcl44b4g93f1ds76b176bajd3zqi2faf5rvh1vy9smi"; })
+  (fetchNuGet { pname = "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0zcxjv5pckplvkg0r6mw3asggm7aqzbdjimhvsasb0cgm59x09l3"; })
+  (fetchNuGet { pname = "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "1m9z1k9kzva9n9kwinqxl97x2vgl79qhqjlv17k9s2ymcyv2bwr6"; })
+  (fetchNuGet { pname = "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0vhynn79ih7hw7cwjazn87rm9z9fj0rvxgzlab36jybgcpcgphsn"; })
+  (fetchNuGet { pname = "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "1cpx56mcfxz7cpn57wvj18sjisvzq8b5vd9rw16ihd2i6mcp3wa1"; })
+  (fetchNuGet { pname = "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "160p68l2c7cqmyqjwxydcvgw7lvl1cr0znkw8fp24d1by9mqc8p3"; })
+  (fetchNuGet { pname = "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "15gsm1a8jdmgmf8j5v1slfz8ks124nfdhk2vxs2rw3asrxalg8hi"; })
+  (fetchNuGet { pname = "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "15zrc8fgd8zx28hdghcj5f5i34wf3l6bq5177075m2bc2j34jrqy"; })
+  (fetchNuGet { pname = "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "0q0n5q1r1wnqmr5i5idsrd9ywl33k0js4pngkwq9p368mbxp8x1w"; })
+  (fetchNuGet { pname = "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "1p4dgxax6p7rlgj4q73k73rslcnz4wdcv8q2flg1s8ygwcm58ld5"; })
+  (fetchNuGet { pname = "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "1x0g58pbpjrmj2x2qw17rdwwnrcl0wvim2hdwz48lixvwvp22n9c"; })
+  (fetchNuGet { pname = "runtime.unix.Microsoft.Win32.Primitives"; version = "4.3.0"; sha256 = "0y61k9zbxhdi0glg154v30kkq7f8646nif8lnnxbvkjpakggd5id"; })
+  (fetchNuGet { pname = "runtime.unix.System.Console"; version = "4.3.1"; sha256 = "15kfi3761mk2i29zg135ipsvavm50nwm4334cy5m5q7iagzsf73p"; })
+  (fetchNuGet { pname = "runtime.unix.System.Diagnostics.Debug"; version = "4.3.0"; sha256 = "1lps7fbnw34bnh3lm31gs5c0g0dh7548wfmb8zz62v0zqz71msj5"; })
+  (fetchNuGet { pname = "runtime.unix.System.IO.FileSystem"; version = "4.3.0"; sha256 = "14nbkhvs7sji5r1saj2x8daz82rnf9kx28d3v2qss34qbr32dzix"; })
+  (fetchNuGet { pname = "runtime.unix.System.Net.Primitives"; version = "4.3.0"; sha256 = "0bdnglg59pzx9394sy4ic66kmxhqp8q8bvmykdxcbs5mm0ipwwm4"; })
+  (fetchNuGet { pname = "runtime.unix.System.Net.Sockets"; version = "4.3.0"; sha256 = "03npdxzy8gfv035bv1b9rz7c7hv0rxl5904wjz51if491mw0xy12"; })
+  (fetchNuGet { pname = "runtime.unix.System.Private.Uri"; version = "4.3.0"; sha256 = "1jx02q6kiwlvfksq1q9qr17fj78y5v6mwsszav4qcz9z25d5g6vk"; })
+  (fetchNuGet { pname = "runtime.unix.System.Runtime.Extensions"; version = "4.3.0"; sha256 = "0pnxxmm8whx38dp6yvwgmh22smknxmqs5n513fc7m4wxvs1bvi4p"; })
+  (fetchNuGet { pname = "System.AppContext"; version = "4.1.0-rc2-24027"; sha256 = "0c0x3sg12a5zwiamvxs9c4bhdwmmm9by6x5da58fbrzz7afbaaag"; })
+  (fetchNuGet { pname = "System.AppContext"; version = "4.3.0"; sha256 = "1649qvy3dar900z3g817h17nl8jp4ka5vcfmsr05kh0fshn7j3ya"; })
+  (fetchNuGet { pname = "System.Buffers"; version = "4.0.0-rc2-24027"; sha256 = "1mqnay87pkxih73984jf5fm14d0m6yjq4cv4cqbj37nmgm54ssjp"; })
+  (fetchNuGet { pname = "System.Buffers"; version = "4.3.0"; sha256 = "0fgns20ispwrfqll4q1zc1waqcmylb3zc50ys9x8zlwxh9pmd9jy"; })
+  (fetchNuGet { pname = "System.Buffers"; version = "4.5.1"; sha256 = "04kb1mdrlcixj9zh1xdi5as0k0qi8byr5mi3p3jcxx72qz93s2y3"; })
+  (fetchNuGet { pname = "System.Collections"; version = "4.0.11"; sha256 = "1ga40f5lrwldiyw6vy67d0sg7jd7ww6kgwbksm19wrvq9hr0bsm6"; })
+  (fetchNuGet { pname = "System.Collections"; version = "4.0.11-rc2-24027"; sha256 = "0ijpgf7iy3mcvr9327craxsb0lsznprajqzjy59sspc75gk0yahq"; })
+  (fetchNuGet { pname = "System.Collections"; version = "4.3.0"; sha256 = "19r4y64dqyrq6k4706dnyhhw7fs24kpp3awak7whzss39dakpxk9"; })
+  (fetchNuGet { pname = "System.Collections.Concurrent"; version = "4.0.12-rc2-24027"; sha256 = "0yhc5q74vb9vb9cmyrr9p4dfql62dr7c8ajbaxnzzs917v2z68q4"; })
+  (fetchNuGet { pname = "System.Collections.Concurrent"; version = "4.3.0"; sha256 = "0wi10md9aq33jrkh2c24wr2n9hrpyamsdhsxdcnf43b7y86kkii8"; })
+  (fetchNuGet { pname = "System.Collections.NonGeneric"; version = "4.3.0"; sha256 = "07q3k0hf3mrcjzwj8fwk6gv3n51cb513w4mgkfxzm3i37sc9kz7k"; })
+  (fetchNuGet { pname = "System.Collections.Specialized"; version = "4.3.0"; sha256 = "1sdwkma4f6j85m3dpb53v9vcgd0zyc9jb33f8g63byvijcj39n20"; })
+  (fetchNuGet { pname = "System.ComponentModel"; version = "4.3.0"; sha256 = "0986b10ww3nshy30x9sjyzm0jx339dkjxjj3401r3q0f6fx2wkcb"; })
+  (fetchNuGet { pname = "System.ComponentModel.Primitives"; version = "4.3.0"; sha256 = "1svfmcmgs0w0z9xdw2f2ps05rdxmkxxhf0l17xk9l1l8xfahkqr0"; })
+  (fetchNuGet { pname = "System.ComponentModel.TypeConverter"; version = "4.3.0"; sha256 = "17ng0p7v3nbrg3kycz10aqrrlw4lz9hzhws09pfh8gkwicyy481x"; })
+  (fetchNuGet { pname = "System.Console"; version = "4.0.0-rc2-24027"; sha256 = "072m313av0s5cfpr2rpq07p7c13dy4rh1ngigv3dnr1yyvab9081"; })
+  (fetchNuGet { pname = "System.Console"; version = "4.3.0"; sha256 = "1flr7a9x920mr5cjsqmsy9wgnv3lvd0h1g521pdr1lkb2qycy7ay"; })
+  (fetchNuGet { pname = "System.Diagnostics.Debug"; version = "4.0.11"; sha256 = "0gmjghrqmlgzxivd2xl50ncbglb7ljzb66rlx8ws6dv8jm0d5siz"; })
+  (fetchNuGet { pname = "System.Diagnostics.Debug"; version = "4.0.11-rc2-24027"; sha256 = "11rz0kdzk4bw9yc85jmskxla7i1bs61kladqzvymrg8xn3lk488a"; })
+  (fetchNuGet { pname = "System.Diagnostics.Debug"; version = "4.3.0"; sha256 = "00yjlf19wjydyr6cfviaph3vsjzg3d5nvnya26i2fvfg53sknh3y"; })
+  (fetchNuGet { pname = "System.Diagnostics.DiagnosticSource"; version = "4.3.0"; sha256 = "0z6m3pbiy0qw6rn3n209rrzf9x1k4002zh90vwcrsym09ipm2liq"; })
+  (fetchNuGet { pname = "System.Diagnostics.DiagnosticSource"; version = "6.0.1"; sha256 = "17h8bkcv0vf9a7gp9ajkd107zid98wql5kzlzwrjm5nm92nk0bsy"; })
+  (fetchNuGet { pname = "System.Diagnostics.Tools"; version = "4.0.1"; sha256 = "19cknvg07yhakcvpxg3cxa0bwadplin6kyxd8mpjjpwnp56nl85x"; })
+  (fetchNuGet { pname = "System.Diagnostics.Tools"; version = "4.0.1-rc2-24027"; sha256 = "080gd86c1pkfkzz67ispkzxc426lfh82zajayiizbgwd6yqa7fv5"; })
+  (fetchNuGet { pname = "System.Diagnostics.Tools"; version = "4.3.0"; sha256 = "0in3pic3s2ddyibi8cvgl102zmvp9r9mchh82ns9f0ms4basylw1"; })
+  (fetchNuGet { pname = "System.Diagnostics.TraceSource"; version = "4.3.0"; sha256 = "1kyw4d7dpjczhw6634nrmg7yyyzq72k75x38y0l0nwhigdlp1766"; })
+  (fetchNuGet { pname = "System.Diagnostics.Tracing"; version = "4.1.0-rc2-24027"; sha256 = "0a0c24lm8yn0hbvd5m64lv7xhs2bmhm5fdpk89xvxj14zdarqhm6"; })
+  (fetchNuGet { pname = "System.Diagnostics.Tracing"; version = "4.3.0"; sha256 = "1m3bx6c2s958qligl67q7grkwfz3w53hpy7nc97mh6f7j5k168c4"; })
+  (fetchNuGet { pname = "System.Dynamic.Runtime"; version = "4.0.11"; sha256 = "1pla2dx8gkidf7xkciig6nifdsb494axjvzvann8g2lp3dbqasm9"; })
+  (fetchNuGet { pname = "System.Dynamic.Runtime"; version = "4.3.0"; sha256 = "1d951hrvrpndk7insiag80qxjbf2y0y39y8h5hnq9612ws661glk"; })
+  (fetchNuGet { pname = "System.Globalization"; version = "4.0.11"; sha256 = "070c5jbas2v7smm660zaf1gh0489xanjqymkvafcs4f8cdrs1d5d"; })
+  (fetchNuGet { pname = "System.Globalization"; version = "4.0.11-rc2-24027"; sha256 = "0yl161lr85smzdfzb7fbk0lfrqk5ns71hcnws6vm3sn2aqvfmhpn"; })
+  (fetchNuGet { pname = "System.Globalization"; version = "4.3.0"; sha256 = "1cp68vv683n6ic2zqh2s1fn4c2sd87g5hpp6l4d4nj4536jz98ki"; })
+  (fetchNuGet { pname = "System.Globalization.Calendars"; version = "4.0.1-rc2-24027"; sha256 = "0whr2qird567iyc137s10qs0xi6607kjii9wi8a8g1f9lybzlz5k"; })
+  (fetchNuGet { pname = "System.Globalization.Calendars"; version = "4.3.0"; sha256 = "1xwl230bkakzzkrggy1l1lxmm3xlhk4bq2pkv790j5lm8g887lxq"; })
+  (fetchNuGet { pname = "System.Globalization.Extensions"; version = "4.3.0"; sha256 = "02a5zfxavhv3jd437bsncbhd2fp1zv4gxzakp1an9l6kdq1mcqls"; })
+  (fetchNuGet { pname = "System.IdentityModel.Tokens.Jwt"; version = "5.2.1"; sha256 = "08n1z9ngsi26qlhwpjzxafhwl3p279widfci64l2ahxf1gprfqsx"; })
+  (fetchNuGet { pname = "System.IO"; version = "4.1.0"; sha256 = "1g0yb8p11vfd0kbkyzlfsbsp5z44lwsvyc0h3dpw6vqnbi035ajp"; })
+  (fetchNuGet { pname = "System.IO"; version = "4.1.0-rc2-24027"; sha256 = "0rwqmn743gl21xnb3rwqkdacshd5l86pn23mc4bviva3pbncbjs4"; })
+  (fetchNuGet { pname = "System.IO"; version = "4.3.0"; sha256 = "05l9qdrzhm4s5dixmx68kxwif4l99ll5gqmh7rqgw554fx0agv5f"; })
+  (fetchNuGet { pname = "System.IO.Compression"; version = "4.1.0-rc2-24027"; sha256 = "07s5zxdw3ihxdv0mjxb2ywzg9phcp4bayrhkadzm95l4kcv0xaij"; })
+  (fetchNuGet { pname = "System.IO.Compression"; version = "4.3.0"; sha256 = "084zc82yi6yllgda0zkgl2ys48sypiswbiwrv7irb3r0ai1fp4vz"; })
+  (fetchNuGet { pname = "System.IO.Compression.ZipFile"; version = "4.0.1-rc2-24027"; sha256 = "0np6vf9rnfasz0sqys56kpryc84qcqi1a1rfskmycdlxk182p3s2"; })
+  (fetchNuGet { pname = "System.IO.Compression.ZipFile"; version = "4.3.0"; sha256 = "1yxy5pq4dnsm9hlkg9ysh5f6bf3fahqqb6p8668ndy5c0lk7w2ar"; })
+  (fetchNuGet { pname = "System.IO.FileSystem"; version = "4.0.1"; sha256 = "0kgfpw6w4djqra3w5crrg8xivbanh1w9dh3qapb28q060wb9flp1"; })
+  (fetchNuGet { pname = "System.IO.FileSystem"; version = "4.0.1-rc2-24027"; sha256 = "0hpw3ssnbcv9l1lnlcym2bv3h3sf2znif4brys2i3868s6h946k6"; })
+  (fetchNuGet { pname = "System.IO.FileSystem"; version = "4.3.0"; sha256 = "0z2dfrbra9i6y16mm9v1v6k47f0fm617vlb7s5iybjjsz6g1ilmw"; })
+  (fetchNuGet { pname = "System.IO.FileSystem.AccessControl"; version = "4.4.0"; sha256 = "11sna2bv5ai4sivrs7g2gp7g0yjp02s0kasl01j3fa1cvnwwvgkv"; })
+  (fetchNuGet { pname = "System.IO.FileSystem.Primitives"; version = "4.0.1"; sha256 = "1s0mniajj3lvbyf7vfb5shp4ink5yibsx945k6lvxa96r8la1612"; })
+  (fetchNuGet { pname = "System.IO.FileSystem.Primitives"; version = "4.0.1-rc2-24027"; sha256 = "04q3sxrfxqgig9scmxblxlb6n6fypv535lby26pi20ixszs19dxc"; })
+  (fetchNuGet { pname = "System.IO.FileSystem.Primitives"; version = "4.3.0"; sha256 = "0j6ndgglcf4brg2lz4wzsh1av1gh8xrzdsn9f0yznskhqn1xzj9c"; })
+  (fetchNuGet { pname = "System.IO.Hashing"; version = "6.0.0"; sha256 = "0lga30s3cllg2jkwldgabwrb0jg3dzj859bwj95xhnm3zcklnb41"; })
+  (fetchNuGet { pname = "System.Linq"; version = "4.1.0"; sha256 = "1ppg83svb39hj4hpp5k7kcryzrf3sfnm08vxd5sm2drrijsla2k5"; })
+  (fetchNuGet { pname = "System.Linq"; version = "4.1.0-rc2-24027"; sha256 = "0icbsy0vq07achclz32jvnnfdchkgylsjj67gra3fn5906s40n24"; })
+  (fetchNuGet { pname = "System.Linq"; version = "4.3.0"; sha256 = "1w0gmba695rbr80l1k2h4mrwzbzsyfl2z4klmpbsvsg5pm4a56s7"; })
+  (fetchNuGet { pname = "System.Linq.Expressions"; version = "4.1.0"; sha256 = "1gpdxl6ip06cnab7n3zlcg6mqp7kknf73s8wjinzi4p0apw82fpg"; })
+  (fetchNuGet { pname = "System.Linq.Expressions"; version = "4.3.0"; sha256 = "0ky2nrcvh70rqq88m9a5yqabsl4fyd17bpr63iy2mbivjs2nyypv"; })
+  (fetchNuGet { pname = "System.Memory.Data"; version = "1.0.2"; sha256 = "1p8qdg0gzxhjvabryc3xws2629pj8w5zz2iqh86kw8sh0rann9ay"; })
+  (fetchNuGet { pname = "System.Net.Http"; version = "4.3.0"; sha256 = "1i4gc757xqrzflbk7kc5ksn20kwwfjhw9w7pgdkn19y3cgnl302j"; })
+  (fetchNuGet { pname = "System.Net.Http"; version = "4.3.4"; sha256 = "0kdp31b8819v88l719j6my0yas6myv9d1viql3qz5577mv819jhl"; })
+  (fetchNuGet { pname = "System.Net.NameResolution"; version = "4.3.0"; sha256 = "15r75pwc0rm3vvwsn8rvm2krf929mjfwliv0mpicjnii24470rkq"; })
+  (fetchNuGet { pname = "System.Net.Primitives"; version = "4.0.11-rc2-24027"; sha256 = "16wv24cb39639i7fcw005hh1rggyz2bgn51dpkdc67aq9lz76ivm"; })
+  (fetchNuGet { pname = "System.Net.Primitives"; version = "4.3.0"; sha256 = "0c87k50rmdgmxx7df2khd9qj7q35j9rzdmm2572cc55dygmdk3ii"; })
+  (fetchNuGet { pname = "System.Net.Sockets"; version = "4.1.0-rc2-24027"; sha256 = "062kbbvm17nhwmcxjnakfv3i23vrk6c9gmz6x8q79kcr5hxr40qs"; })
+  (fetchNuGet { pname = "System.Net.Sockets"; version = "4.3.0"; sha256 = "1ssa65k6chcgi6mfmzrznvqaxk8jp0gvl77xhf1hbzakjnpxspla"; })
+  (fetchNuGet { pname = "System.Numerics.Vectors"; version = "4.5.0"; sha256 = "1kzrj37yzawf1b19jq0253rcs8hsq1l2q8g69d7ipnhzb0h97m59"; })
+  (fetchNuGet { pname = "System.ObjectModel"; version = "4.0.12"; sha256 = "1sybkfi60a4588xn34nd9a58png36i0xr4y4v4kqpg8wlvy5krrj"; })
+  (fetchNuGet { pname = "System.ObjectModel"; version = "4.0.12-rc2-24027"; sha256 = "065p89awfiz9kb304hqs7wkfpykd9z9kkv84ihm813msv54i8lvj"; })
+  (fetchNuGet { pname = "System.ObjectModel"; version = "4.3.0"; sha256 = "191p63zy5rpqx7dnrb3h7prvgixmk168fhvvkkvhlazncf8r3nc2"; })
+  (fetchNuGet { pname = "System.Private.DataContractSerialization"; version = "4.3.0"; sha256 = "06fjipqvjp559rrm825x6pll8gimdj9x1n3larigh5hsm584gndw"; })
+  (fetchNuGet { pname = "System.Private.Uri"; version = "4.3.0"; sha256 = "04r1lkdnsznin0fj4ya1zikxiqr0h6r6a1ww2dsm60gqhdrf0mvx"; })
+  (fetchNuGet { pname = "System.Reflection"; version = "4.1.0"; sha256 = "1js89429pfw79mxvbzp8p3q93il6rdff332hddhzi5wqglc4gml9"; })
+  (fetchNuGet { pname = "System.Reflection"; version = "4.1.0-rc2-24027"; sha256 = "0717y8iqcw19g2zkcs0hkalvjhnpaq5mapd82kxkhiq1djgjhhi2"; })
+  (fetchNuGet { pname = "System.Reflection"; version = "4.3.0"; sha256 = "0xl55k0mw8cd8ra6dxzh974nxif58s3k1rjv1vbd7gjbjr39j11m"; })
+  (fetchNuGet { pname = "System.Reflection.Emit"; version = "4.0.1"; sha256 = "0ydqcsvh6smi41gyaakglnv252625hf29f7kywy2c70nhii2ylqp"; })
+  (fetchNuGet { pname = "System.Reflection.Emit"; version = "4.3.0"; sha256 = "11f8y3qfysfcrscjpjym9msk7lsfxkk4fmz9qq95kn3jd0769f74"; })
+  (fetchNuGet { pname = "System.Reflection.Emit.ILGeneration"; version = "4.0.1"; sha256 = "1pcd2ig6bg144y10w7yxgc9d22r7c7ww7qn1frdfwgxr24j9wvv0"; })
+  (fetchNuGet { pname = "System.Reflection.Emit.ILGeneration"; version = "4.3.0"; sha256 = "0w1n67glpv8241vnpz1kl14sy7zlnw414aqwj4hcx5nd86f6994q"; })
+  (fetchNuGet { pname = "System.Reflection.Emit.Lightweight"; version = "4.0.1"; sha256 = "1s4b043zdbx9k39lfhvsk68msv1nxbidhkq6nbm27q7sf8xcsnxr"; })
+  (fetchNuGet { pname = "System.Reflection.Emit.Lightweight"; version = "4.3.0"; sha256 = "0ql7lcakycrvzgi9kxz1b3lljd990az1x6c4jsiwcacrvimpib5c"; })
+  (fetchNuGet { pname = "System.Reflection.Extensions"; version = "4.0.1"; sha256 = "0m7wqwq0zqq9gbpiqvgk3sr92cbrw7cp3xn53xvw7zj6rz6fdirn"; })
+  (fetchNuGet { pname = "System.Reflection.Extensions"; version = "4.0.1-rc2-24027"; sha256 = "0lgz7wwdb02vapa17hgdkf1jnq1mcsbq8gwy6a9iqd04d2mfanv7"; })
+  (fetchNuGet { pname = "System.Reflection.Extensions"; version = "4.3.0"; sha256 = "02bly8bdc98gs22lqsfx9xicblszr2yan7v2mmw3g7hy6miq5hwq"; })
+  (fetchNuGet { pname = "System.Reflection.Metadata"; version = "1.6.0"; sha256 = "1wdbavrrkajy7qbdblpbpbalbdl48q3h34cchz24gvdgyrlf15r4"; })
+  (fetchNuGet { pname = "System.Reflection.Primitives"; version = "4.0.1"; sha256 = "1bangaabhsl4k9fg8khn83wm6yial8ik1sza7401621jc6jrym28"; })
+  (fetchNuGet { pname = "System.Reflection.Primitives"; version = "4.0.1-rc2-24027"; sha256 = "1xjbwji89s69f9lq8wcjfkz8y9ym9zffgj2mg9bv0rxwyqcynpz8"; })
+  (fetchNuGet { pname = "System.Reflection.Primitives"; version = "4.3.0"; sha256 = "04xqa33bld78yv5r93a8n76shvc8wwcdgr1qvvjh959g3rc31276"; })
+  (fetchNuGet { pname = "System.Reflection.TypeExtensions"; version = "4.3.0"; sha256 = "0y2ssg08d817p0vdag98vn238gyrrynjdj4181hdg780sif3ykp1"; })
+  (fetchNuGet { pname = "System.Reflection.TypeExtensions"; version = "4.4.0"; sha256 = "0n9r1w4lp2zmadyqkgp4sk9wy90sj4ygq4dh7kzamx26i9biys5h"; })
+  (fetchNuGet { pname = "System.Resources.ResourceManager"; version = "4.0.1"; sha256 = "0b4i7mncaf8cnai85jv3wnw6hps140cxz8vylv2bik6wyzgvz7bi"; })
+  (fetchNuGet { pname = "System.Resources.ResourceManager"; version = "4.0.1-rc2-24027"; sha256 = "06lkqk5hjkcna19inpda5fqbxvd9pq5cs61di7kmhrd2sgzbs6xj"; })
+  (fetchNuGet { pname = "System.Resources.ResourceManager"; version = "4.3.0"; sha256 = "0sjqlzsryb0mg4y4xzf35xi523s4is4hz9q4qgdvlvgivl7qxn49"; })
+  (fetchNuGet { pname = "System.Runtime"; version = "4.1.0"; sha256 = "02hdkgk13rvsd6r9yafbwzss8kr55wnj8d5c7xjnp8gqrwc8sn0m"; })
+  (fetchNuGet { pname = "System.Runtime"; version = "4.1.0-rc2-24027"; sha256 = "1g5ghiyfb8njzfz39cswizjbxgaamil7kgkzgab93fhgk7jksmyg"; })
+  (fetchNuGet { pname = "System.Runtime"; version = "4.3.0"; sha256 = "066ixvgbf2c929kgknshcxqj6539ax7b9m570cp8n179cpfkapz7"; })
+  (fetchNuGet { pname = "System.Runtime"; version = "4.3.1"; sha256 = "03ch4d2acf6q037a4njxpll2kkx3dwzlg07yxr4z5m6j1kqgmm27"; })
+  (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "6.0.0"; sha256 = "0qm741kh4rh57wky16sq4m0v05fxmkjjr87krycf5vp9f0zbahbc"; })
+  (fetchNuGet { pname = "System.Runtime.Extensions"; version = "4.1.0"; sha256 = "0rw4rm4vsm3h3szxp9iijc3ksyviwsv6f63dng3vhqyg4vjdkc2z"; })
+  (fetchNuGet { pname = "System.Runtime.Extensions"; version = "4.1.0-rc2-24027"; sha256 = "09k4c6is31dpccwgb749055m2ad0b84rnapk69fmj3wjswacg26p"; })
+  (fetchNuGet { pname = "System.Runtime.Extensions"; version = "4.3.0"; sha256 = "1ykp3dnhwvm48nap8q23893hagf665k0kn3cbgsqpwzbijdcgc60"; })
+  (fetchNuGet { pname = "System.Runtime.Handles"; version = "4.0.1"; sha256 = "1g0zrdi5508v49pfm3iii2hn6nm00bgvfpjq1zxknfjrxxa20r4g"; })
+  (fetchNuGet { pname = "System.Runtime.Handles"; version = "4.0.1-rc2-24027"; sha256 = "0lw4amgaryahvija5xxb2vmybq7ks4b4ir7g7nc1xw6x9x58jf2q"; })
+  (fetchNuGet { pname = "System.Runtime.Handles"; version = "4.3.0"; sha256 = "0sw2gfj2xr7sw9qjn0j3l9yw07x73lcs97p8xfc9w1x9h5g5m7i8"; })
+  (fetchNuGet { pname = "System.Runtime.InteropServices"; version = "4.1.0"; sha256 = "01kxqppx3dr3b6b286xafqilv4s2n0gqvfgzfd4z943ga9i81is1"; })
+  (fetchNuGet { pname = "System.Runtime.InteropServices"; version = "4.1.0-rc2-24027"; sha256 = "0v5phdy7yr6d1q13fvb6hhd32k89l93z6x4hlkh5qhm1zlavaabl"; })
+  (fetchNuGet { pname = "System.Runtime.InteropServices"; version = "4.3.0"; sha256 = "00hywrn4g7hva1b2qri2s6rabzwgxnbpw9zfxmz28z09cpwwgh7j"; })
+  (fetchNuGet { pname = "System.Runtime.InteropServices.PInvoke"; version = "4.0.0-rc2-24027"; sha256 = "0qsgwvr6ppvllblb64p5plr7ssbmwfxxc4qf6l1xfincza8np34r"; })
+  (fetchNuGet { pname = "System.Runtime.InteropServices.RuntimeInformation"; version = "4.0.0-rc2-24027"; sha256 = "03pgqbgahfgvigyrsd08snzsryg90shfjlbdv4jk6yzfr27va3n2"; })
+  (fetchNuGet { pname = "System.Runtime.InteropServices.RuntimeInformation"; version = "4.3.0"; sha256 = "0q18r1sh4vn7bvqgd6dmqlw5v28flbpj349mkdish2vjyvmnb2ii"; })
+  (fetchNuGet { pname = "System.Runtime.Loader"; version = "4.3.0"; sha256 = "07fgipa93g1xxgf7193a6vw677mpzgr0z0cfswbvqqb364cva8dk"; })
+  (fetchNuGet { pname = "System.Runtime.Numerics"; version = "4.0.1-rc2-24027"; sha256 = "1gkkc7njymmb12dd952q89x2h2jdrhp171vszsjqzh5q2ryj25gh"; })
+  (fetchNuGet { pname = "System.Runtime.Numerics"; version = "4.3.0"; sha256 = "19rav39sr5dky7afygh309qamqqmi9kcwvz3i0c5700v0c5cg61z"; })
+  (fetchNuGet { pname = "System.Runtime.Serialization.Primitives"; version = "4.1.1"; sha256 = "042rfjixknlr6r10vx2pgf56yming8lkjikamg3g4v29ikk78h7k"; })
+  (fetchNuGet { pname = "System.Runtime.Serialization.Primitives"; version = "4.3.0"; sha256 = "01vv2p8h4hsz217xxs0rixvb7f2xzbh6wv1gzbfykcbfrza6dvnf"; })
+  (fetchNuGet { pname = "System.Runtime.Serialization.Xml"; version = "4.3.0"; sha256 = "1b2cxl2h7s8cydbhbmxhvvq071n9ck61g08npg4gyw7nvg37rfni"; })
+  (fetchNuGet { pname = "System.Security.AccessControl"; version = "4.4.0"; sha256 = "0ixqw47krkazsw0ycm22ivkv7dpg6cjz8z8g0ii44bsx4l8gcx17"; })
+  (fetchNuGet { pname = "System.Security.Claims"; version = "4.3.0"; sha256 = "0jvfn7j22l3mm28qjy3rcw287y9h65ha4m940waaxah07jnbzrhn"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Algorithms"; version = "4.3.0"; sha256 = "03sq183pfl5kp7gkvq77myv7kbpdnq3y0xj7vi4q1kaw54sny0ml"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Cng"; version = "4.3.0"; sha256 = "1k468aswafdgf56ab6yrn7649kfqx2wm9aslywjam1hdmk5yypmv"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Cng"; version = "4.4.0"; sha256 = "1grg9id80m358crr5y4q4rhhbrm122yw8jrlcl1ybi7nkmmck40n"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Csp"; version = "4.3.0"; sha256 = "1x5wcrddf2s3hb8j78cry7yalca4lb5vfnkrysagbn6r9x6xvrx1"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Encoding"; version = "4.3.0"; sha256 = "1jr6w70igqn07k5zs1ph6xja97hxnb3mqbspdrff6cvssgrixs32"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0givpvvj8yc7gv4lhb6s1prq6p2c4147204a0wib89inqzd87gqc"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Pkcs"; version = "4.4.0"; sha256 = "1bn7d2czpc994qzdph4drv7p1cv4x55j2dhbmr113p0gs4hx33zh"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Primitives"; version = "4.3.0"; sha256 = "0pyzncsv48zwly3lw4f2dayqswcfvdwq2nz0dgwmi7fj3pn64wby"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.ProtectedData"; version = "4.4.0"; sha256 = "1q8ljvqhasyynp94a1d7jknk946m20lkwy2c3wa8zw2pc517fbj6"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.X509Certificates"; version = "4.3.0"; sha256 = "0valjcz5wksbvijylxijjxb1mp38mdhv03r533vnx1q3ikzdav9h"; })
+  (fetchNuGet { pname = "System.Security.Principal"; version = "4.3.0"; sha256 = "12cm2zws06z4lfc4dn31iqv7072zyi4m910d4r6wm8yx85arsfxf"; })
+  (fetchNuGet { pname = "System.Security.Principal.Windows"; version = "4.3.0"; sha256 = "00a0a7c40i3v4cb20s2cmh9csb5jv2l0frvnlzyfxh848xalpdwr"; })
+  (fetchNuGet { pname = "System.Security.Principal.Windows"; version = "4.4.0"; sha256 = "11rr16fp68apc0arsymgj18w8ajs9a4366wgx9iqwny4glrl20wp"; })
+  (fetchNuGet { pname = "System.ServiceProcess.ServiceController"; version = "4.4.0"; sha256 = "0hyijvysbcjh20mbbgajg9wh04nkjd6y5lqxgm0a6m28zjcjshl6"; })
+  (fetchNuGet { pname = "System.Text.Encoding"; version = "4.0.11"; sha256 = "1dyqv0hijg265dwxg6l7aiv74102d6xjiwplh2ar1ly6xfaa4iiw"; })
+  (fetchNuGet { pname = "System.Text.Encoding"; version = "4.0.11-rc2-24027"; sha256 = "0qkaldb06dwmi8gb940h75n9cs5rgy6sqcpa6f443mhahmagmsbd"; })
+  (fetchNuGet { pname = "System.Text.Encoding"; version = "4.3.0"; sha256 = "1f04lkir4iladpp51sdgmis9dj4y8v08cka0mbmsy0frc9a4gjqr"; })
+  (fetchNuGet { pname = "System.Text.Encoding.CodePages"; version = "4.4.0"; sha256 = "07bzjnflxjk9vgpljfybrpqmvsr9qr2f20nq5wf11imwa5pbhgfc"; })
+  (fetchNuGet { pname = "System.Text.Encoding.Extensions"; version = "4.0.11"; sha256 = "08nsfrpiwsg9x5ml4xyl3zyvjfdi4mvbqf93kjdh11j4fwkznizs"; })
+  (fetchNuGet { pname = "System.Text.Encoding.Extensions"; version = "4.0.11-rc2-24027"; sha256 = "02xic3hhfy48s50bxh25as1l9v3afgrhlxqfnd5ki4qirxly7qs6"; })
+  (fetchNuGet { pname = "System.Text.Encoding.Extensions"; version = "4.3.0"; sha256 = "11q1y8hh5hrp5a3kw25cb6l00v5l5dvirkz8jr3sq00h1xgcgrxy"; })
+  (fetchNuGet { pname = "System.Text.Encodings.Web"; version = "4.7.2"; sha256 = "0ap286ykazrl42if59bxhzv81safdfrrmfqr3112siwyajx4wih9"; })
+  (fetchNuGet { pname = "System.Text.Json"; version = "4.7.2"; sha256 = "10xj1pw2dgd42anikvj9qm23ccssrcp7dpznpj4j7xjp1ikhy3y4"; })
+  (fetchNuGet { pname = "System.Text.RegularExpressions"; version = "4.1.0"; sha256 = "1mw7vfkkyd04yn2fbhm38msk7dz2xwvib14ygjsb8dq2lcvr18y7"; })
+  (fetchNuGet { pname = "System.Text.RegularExpressions"; version = "4.3.0"; sha256 = "1bgq51k7fwld0njylfn7qc5fmwrk2137gdq7djqdsw347paa9c2l"; })
+  (fetchNuGet { pname = "System.Text.RegularExpressions"; version = "4.3.1"; sha256 = "1hr4qqzrij3y2ayi8jj70yfg0i9imf6fpdam1gr8qgp795kh86qg"; })
+  (fetchNuGet { pname = "System.Threading"; version = "4.0.11"; sha256 = "19x946h926bzvbsgj28csn46gak2crv2skpwsx80hbgazmkgb1ls"; })
+  (fetchNuGet { pname = "System.Threading"; version = "4.0.11-rc2-24027"; sha256 = "0aa4zaqma4yagjd44m2j13gr9qzn8rv8dbz3p9mjdk0dx1zpi4iq"; })
+  (fetchNuGet { pname = "System.Threading"; version = "4.3.0"; sha256 = "0rw9wfamvhayp5zh3j7p1yfmx9b5khbf4q50d8k5rk993rskfd34"; })
+  (fetchNuGet { pname = "System.Threading.Channels"; version = "4.5.0"; sha256 = "0n6z3wjia7h2a5vl727p97riydnb6jhhkb1pdcnizza02dwkz0nz"; })
+  (fetchNuGet { pname = "System.Threading.Tasks"; version = "4.0.11"; sha256 = "0nr1r41rak82qfa5m0lhk9mp0k93bvfd7bbd9sdzwx9mb36g28p5"; })
+  (fetchNuGet { pname = "System.Threading.Tasks"; version = "4.0.11-rc2-24027"; sha256 = "0fsgdzdxm3yj1cym421ymn8x8anhyzgzc1529q5xd1vq4yknwfq0"; })
+  (fetchNuGet { pname = "System.Threading.Tasks"; version = "4.3.0"; sha256 = "134z3v9abw3a6jsw17xl3f6hqjpak5l682k2vz39spj4kmydg6k7"; })
+  (fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.0.0"; sha256 = "1cb51z062mvc2i8blpzmpn9d9mm4y307xrwi65di8ri18cz5r1zr"; })
+  (fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.0.0-rc2-24027"; sha256 = "108sdqpy3ga6gzksl59w1k21a3jlrh8x2igyxh3dm3212rca1pyg"; })
+  (fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.3.0"; sha256 = "1xxcx2xh8jin360yjwm4x4cf5y3a2bwpn2ygkfkwkicz7zk50s2z"; })
+  (fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.5.1"; sha256 = "1ikrplvw4m6pzjbq3bfbpr572n4i9mni577zvmrkaygvx85q3myw"; })
+  (fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.5.4"; sha256 = "0y6ncasgfcgnjrhynaf0lwpkpkmv4a07sswwkwbwb5h7riisj153"; })
+  (fetchNuGet { pname = "System.Threading.ThreadPool"; version = "4.3.0"; sha256 = "027s1f4sbx0y1xqw2irqn6x161lzj8qwvnh2gn78ciiczdv10vf1"; })
+  (fetchNuGet { pname = "System.Threading.Timer"; version = "4.0.1-rc2-24027"; sha256 = "06kwi42lgf3zw3b5yw668ammbjl6208y182wyqaaqrxgn5gs4yh7"; })
+  (fetchNuGet { pname = "System.Threading.Timer"; version = "4.3.0"; sha256 = "1nx773nsx6z5whv8kaa1wjh037id2f1cxhb69pvgv12hd2b6qs56"; })
+  (fetchNuGet { pname = "System.Xml.ReaderWriter"; version = "4.0.11"; sha256 = "0c6ky1jk5ada9m94wcadih98l6k1fvf6vi7vhn1msjixaha419l5"; })
+  (fetchNuGet { pname = "System.Xml.ReaderWriter"; version = "4.0.11-rc2-24027"; sha256 = "0vywggi6mqkbr6g1a1fh821hqfnyq1k829vlhfw908l7mj75k34d"; })
+  (fetchNuGet { pname = "System.Xml.ReaderWriter"; version = "4.3.0"; sha256 = "0c47yllxifzmh8gq6rq6l36zzvw4kjvlszkqa9wq3fr59n0hl3s1"; })
+  (fetchNuGet { pname = "System.Xml.XDocument"; version = "4.0.11"; sha256 = "0n4lvpqzy9kc7qy1a4acwwd7b7pnvygv895az5640idl2y9zbz18"; })
+  (fetchNuGet { pname = "System.Xml.XDocument"; version = "4.0.11-rc2-24027"; sha256 = "1rvglifac6xq1lawm78w49fq9cl8zvs1g4vrsd2hhf0vb4i85p1z"; })
+  (fetchNuGet { pname = "System.Xml.XDocument"; version = "4.3.0"; sha256 = "08h8fm4l77n0nd4i4fk2386y809bfbwqb7ih9d7564ifcxr5ssxd"; })
+  (fetchNuGet { pname = "System.Xml.XmlDocument"; version = "4.3.0"; sha256 = "0bmz1l06dihx52jxjr22dyv5mxv6pj4852lx68grjm7bivhrbfwi"; })
+  (fetchNuGet { pname = "System.Xml.XmlSerializer"; version = "4.3.0"; sha256 = "07pa4sx196vxkgl3csvdmw94nydlsm9ir38xxcs84qjn8cycd912"; })
+  (fetchNuGet { pname = "xunit"; version = "2.4.1"; sha256 = "0xf3kaywpg15flqaqfgywqyychzk15kz0kz34j21rcv78q9ywq20"; })
+  (fetchNuGet { pname = "xunit.abstractions"; version = "2.0.3"; sha256 = "00wl8qksgkxld76fgir3ycc5rjqv1sqds6x8yx40927q5py74gfh"; })
+  (fetchNuGet { pname = "xunit.analyzers"; version = "0.10.0"; sha256 = "15n02q3akyqbvkp8nq75a8rd66d4ax0rx8fhdcn8j78pi235jm7j"; })
+  (fetchNuGet { pname = "xunit.assert"; version = "2.4.1"; sha256 = "1imynzh80wxq2rp9sc4gxs4x1nriil88f72ilhj5q0m44qqmqpc6"; })
+  (fetchNuGet { pname = "xunit.core"; version = "2.4.1"; sha256 = "1nnb3j4kzmycaw1g76ii4rfqkvg6l8gqh18falwp8g28h802019a"; })
+  (fetchNuGet { pname = "xunit.extensibility.core"; version = "2.4.1"; sha256 = "103qsijmnip2pnbhciqyk2jyhdm6snindg5z2s57kqf5pcx9a050"; })
+  (fetchNuGet { pname = "xunit.extensibility.execution"; version = "2.4.1"; sha256 = "1pbilxh1gp2ywm5idfl0klhl4gb16j86ib4x83p8raql1dv88qia"; })
+  (fetchNuGet { pname = "xunit.runner.visualstudio"; version = "2.4.1"; sha256 = "0fln5pk18z98gp0zfshy1p9h6r9wc55nyqhap34k89yran646vhn"; })
+  (fetchNuGet { pname = "YamlDotNet.Signed"; version = "5.3.0"; sha256 = "1gnp5aa2zzg7v61bbn2ra1npy0p07szp5w8vqk44fdj3fcvrdxib"; })
+]
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/github-runner/patches/dont-install-service.patch b/nixpkgs/pkgs/development/tools/continuous-integration/github-runner/patches/dont-install-service.patch
new file mode 100644
index 000000000000..5590fa3df027
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/github-runner/patches/dont-install-service.patch
@@ -0,0 +1,28 @@
+From 369b3d98b44abbf061080ab1b17b22f99706ef69 Mon Sep 17 00:00:00 2001
+From: Vincent Haupert <mail@vincent-haupert.de>
+Date: Sun, 26 Feb 2023 12:55:38 +0100
+Subject: [PATCH] Don't generate service config on Linux and OSX
+
+---
+ src/Runner.Listener/Configuration/ConfigurationManager.cs | 5 -----
+ 1 file changed, 5 deletions(-)
+
+diff --git a/src/Runner.Listener/Configuration/ConfigurationManager.cs b/src/Runner.Listener/Configuration/ConfigurationManager.cs
+index 392eb0e..4c75324 100644
+--- a/src/Runner.Listener/Configuration/ConfigurationManager.cs
++++ b/src/Runner.Listener/Configuration/ConfigurationManager.cs
+@@ -367,11 +367,6 @@ namespace GitHub.Runner.Listener.Configuration
+                 var serviceControlManager = HostContext.GetService<IWindowsServiceControlManager>();
+                 serviceControlManager.ConfigureService(runnerSettings, command);
+             }
+-
+-#elif OS_LINUX || OS_OSX
+-            // generate service config script for OSX and Linux, GenerateScripts() will no-opt on windows.
+-            var serviceControlManager = HostContext.GetService<ILinuxServiceControlManager>();
+-            serviceControlManager.GenerateScripts(runnerSettings);
+ #endif
+         }
+ 
+-- 
+2.38.1
+
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/github-runner/patches/env-sh-use-runner-root.patch b/nixpkgs/pkgs/development/tools/continuous-integration/github-runner/patches/env-sh-use-runner-root.patch
new file mode 100644
index 000000000000..d87e00d0f349
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/github-runner/patches/env-sh-use-runner-root.patch
@@ -0,0 +1,76 @@
+From 84b2fcdf042771ae8adc0f59f1a3ecd9788a808d Mon Sep 17 00:00:00 2001
+From: Vincent Haupert <mail@vincent-haupert.de>
+Date: Sun, 26 Feb 2023 11:37:01 +0100
+Subject: [PATCH] Access `.env` and `.path` relative to `$RUNNER_ROOT`, if set
+
+---
+ src/Misc/layoutbin/runsvc.sh   |  4 ++--
+ src/Misc/layoutroot/env.sh     | 10 +++++-----
+ src/Runner.Listener/Program.cs |  2 +-
+ 3 files changed, 8 insertions(+), 8 deletions(-)
+
+diff --git a/src/Misc/layoutbin/runsvc.sh b/src/Misc/layoutbin/runsvc.sh
+index c135645..bb0fbf6 100755
+--- a/src/Misc/layoutbin/runsvc.sh
++++ b/src/Misc/layoutbin/runsvc.sh
+@@ -4,9 +4,9 @@
+ # for more info on how to propagate SIGTERM to a child process see: http://veithen.github.io/2014/11/16/sigterm-propagation.html
+ trap 'kill -INT $PID' TERM INT
+ 
+-if [ -f ".path" ]; then
++if [ -f "${RUNNER_ROOT:-"."}/.path" ]; then
+     # configure
+-    export PATH=`cat .path`
++    export PATH=`cat "${RUNNER_ROOT:-"."}/.path"`
+     echo ".path=${PATH}"
+ fi
+ 
+diff --git a/src/Misc/layoutroot/env.sh b/src/Misc/layoutroot/env.sh
+index 641d244..85379bf 100755
+--- a/src/Misc/layoutroot/env.sh
++++ b/src/Misc/layoutroot/env.sh
+@@ -16,10 +16,10 @@ varCheckList=(
+ 
+ envContents=""
+ 
+-if [ -f ".env" ]; then
+-    envContents=`cat .env`
++if [ -f "${RUNNER_ROOT:-"."}/.env" ]; then
++    envContents=`cat "${RUNNER_ROOT:-"."}/.env"`
+ else
+-    touch .env
++    touch "${RUNNER_ROOT:-"."}/.env"
+ fi
+ 
+ function writeVar()
+@@ -29,12 +29,12 @@ function writeVar()
+     if test "${envContents#*$checkDelim}" = "$envContents"
+     then
+         if [ ! -z "${!checkVar}" ]; then
+-            echo "${checkVar}=${!checkVar}">>.env
++            echo "${checkVar}=${!checkVar}">>"${RUNNER_ROOT:-"."}/.env"
+         fi
+     fi 
+ }
+ 
+-echo $PATH>.path
++echo $PATH>"${RUNNER_ROOT:-"."}/.path"
+ 
+ for var_name in ${varCheckList[@]}
+ do
+diff --git a/src/Runner.Listener/Program.cs b/src/Runner.Listener/Program.cs
+index d4d5e43..beacc9d 100644
+--- a/src/Runner.Listener/Program.cs
++++ b/src/Runner.Listener/Program.cs
+@@ -148,7 +148,7 @@ namespace GitHub.Runner.Listener
+         private static void LoadAndSetEnv()
+         {
+             var binDir = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
+-            var rootDir = new DirectoryInfo(binDir).Parent.FullName;
++            var rootDir = Environment.GetEnvironmentVariable("RUNNER_ROOT") ?? new DirectoryInfo(binDir).Parent.FullName;
+             string envFile = Path.Combine(rootDir, ".env");
+             if (File.Exists(envFile))
+             {
+-- 
+2.38.1
+
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/github-runner/patches/host-context-dirs.patch b/nixpkgs/pkgs/development/tools/continuous-integration/github-runner/patches/host-context-dirs.patch
new file mode 100644
index 000000000000..662ad9676da9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/github-runner/patches/host-context-dirs.patch
@@ -0,0 +1,20 @@
+diff --git a/src/Runner.Common/HostContext.cs b/src/Runner.Common/HostContext.cs
+index d4ea48c..2ec8455 100644
+--- a/src/Runner.Common/HostContext.cs
++++ b/src/Runner.Common/HostContext.cs
+@@ -220,12 +220,13 @@ namespace GitHub.Runner.Common
+ 
+                 case WellKnownDirectory.Externals:
+                     path = Path.Combine(
+-                        GetDirectory(WellKnownDirectory.Root),
++                        new DirectoryInfo(GetDirectory(WellKnownDirectory.Bin)).Parent.FullName,
+                         Constants.Path.ExternalsDirectory);
+                     break;
+ 
+                 case WellKnownDirectory.Root:
+-                    path = new DirectoryInfo(GetDirectory(WellKnownDirectory.Bin)).Parent.FullName;
++                    path = Environment.GetEnvironmentVariable("RUNNER_ROOT")
++                                ?? new DirectoryInfo(GetDirectory(WellKnownDirectory.Bin)).Parent.FullName;
+                     break;
+ 
+                 case WellKnownDirectory.Temp:
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/github-runner/patches/use-get-directory-for-diag.patch b/nixpkgs/pkgs/development/tools/continuous-integration/github-runner/patches/use-get-directory-for-diag.patch
new file mode 100644
index 000000000000..2581cb7bb921
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/github-runner/patches/use-get-directory-for-diag.patch
@@ -0,0 +1,25 @@
+diff --git a/src/Runner.Common/HostContext.cs b/src/Runner.Common/HostContext.cs
+index 9e43464..a953694 100644
+--- a/src/Runner.Common/HostContext.cs
++++ b/src/Runner.Common/HostContext.cs
+@@ -119,7 +119,7 @@ namespace GitHub.Runner.Common
+                 }
+ 
+                 // this should give us _diag folder under runner root directory
+-                string diagLogDirectory = Path.Combine(new DirectoryInfo(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location)).Parent.FullName, Constants.Path.DiagDirectory);
++                string diagLogDirectory = GetDirectory(WellKnownDirectory.Diag);
+                 _traceManager = new TraceManager(new HostTraceListener(diagLogDirectory, hostType, logPageSize, logRetentionDays), stdoutTraceListener, this.SecretMasker);
+             }
+             else
+@@ -297,7 +297,10 @@ namespace GitHub.Runner.Common
+                     throw new NotSupportedException($"Unexpected well known directory: '{directory}'");
+             }
+ 
+-            _trace.Info($"Well known directory '{directory}': '{path}'");
++            if (_trace != null)
++            {
++                _trace.Info($"Well known directory '{directory}': '{path}'");
++            }
+             return path;
+         }
+ 
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/github-runner/update.sh b/nixpkgs/pkgs/development/tools/continuous-integration/github-runner/update.sh
new file mode 100755
index 000000000000..26b54bf6ac0e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/github-runner/update.sh
@@ -0,0 +1,19 @@
+#! /usr/bin/env nix-shell
+#! nix-shell -I nixpkgs=./. -i bash -p coreutils common-updater-scripts jq curl
+
+set -euo pipefail
+
+currentVersion="$(nix --extra-experimental-features nix-command eval -f . github-runner.version --raw)"
+latestVersion="$(curl -s -H "Accept: application/vnd.github.v3+json" \
+            ${GITHUB_TOKEN:+ -H "Authorization: bearer $GITHUB_TOKEN"} \
+            "https://api.github.com/repos/actions/runner/releases/latest" | jq -r ".tag_name")"
+latestVersion="${latestVersion#?}" # v2.296.2 -> 2.296.2
+
+if [[ "$latestVersion" == "$currentVersion" ]]; then
+    echo "github-runner is already up to date: $currentVersion"
+    exit
+fi
+
+update-source-version github-runner "$latestVersion"
+$(nix-build -A github-runner.fetch-deps --no-out-link)
+
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/gitlab-runner/default.nix b/nixpkgs/pkgs/development/tools/continuous-integration/gitlab-runner/default.nix
new file mode 100644
index 000000000000..21b2a5a6afde
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/gitlab-runner/default.nix
@@ -0,0 +1,74 @@
+{ lib, buildGoModule, fetchFromGitLab, fetchurl, bash }:
+
+let
+  version = "16.7.0";
+in
+buildGoModule rec {
+  inherit version;
+  pname = "gitlab-runner";
+
+  commonPackagePath = "gitlab.com/gitlab-org/gitlab-runner/common";
+  ldflags = [
+    "-X ${commonPackagePath}.NAME=gitlab-runner"
+    "-X ${commonPackagePath}.VERSION=${version}"
+    "-X ${commonPackagePath}.REVISION=v${version}"
+  ];
+
+  # For patchShebangs
+  buildInputs = [ bash ];
+
+  vendorHash = "sha256-SHtxkB4qJMfhjo3UVjqBzD647AWIXIk10VtH/CMIB1I=";
+
+  src = fetchFromGitLab {
+    owner = "gitlab-org";
+    repo = "gitlab-runner";
+    rev = "v${version}";
+    sha256 = "sha256-pVD3DCrujsrDJPt/DXelMYSK+u25aV2YUMDW+22QHwI=";
+  };
+
+  patches = [
+    ./fix-shell-path.patch
+    ./remove-bash-test.patch
+  ];
+
+  prePatch = ''
+    # Remove some tests that can't work during a nix build
+
+    # Requires to run in a git repo
+    sed -i "s/func TestCacheArchiverAddingUntrackedFiles/func OFF_TestCacheArchiverAddingUntrackedFiles/" commands/helpers/file_archiver_test.go
+    sed -i "s/func TestCacheArchiverAddingUntrackedUnicodeFiles/func OFF_TestCacheArchiverAddingUntrackedUnicodeFiles/" commands/helpers/file_archiver_test.go
+
+    # No writable developer environment
+    rm common/build_test.go
+    rm executors/custom/custom_test.go
+
+    # No docker during build
+    rm executors/docker/terminal_test.go
+    rm executors/docker/docker_test.go
+    rm helpers/docker/auth/auth_test.go
+    rm executors/docker/services_test.go
+  '';
+
+  excludedPackages = [
+    # CI helper script for pushing images to Docker and ECR registries
+    # https://gitlab.com/gitlab-org/gitlab-runner/-/merge_requests/4139
+    "./scripts/sync-docker-images"
+  ];
+
+  postInstall = ''
+    install packaging/root/usr/share/gitlab-runner/clear-docker-cache $out/bin
+  '';
+
+  preCheck = ''
+    # Make the tests pass outside of GitLab CI
+    export CI=0
+  '';
+
+  meta = with lib; {
+    description = "GitLab Runner the continuous integration executor of GitLab";
+    license = licenses.mit;
+    homepage = "https://about.gitlab.com/gitlab-ci/";
+    platforms = platforms.unix ++ platforms.darwin;
+    maintainers = with maintainers; [ bachp zimbatm ] ++ teams.gitlab.members;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/gitlab-runner/fix-shell-path.patch b/nixpkgs/pkgs/development/tools/continuous-integration/gitlab-runner/fix-shell-path.patch
new file mode 100644
index 000000000000..b70b95e7be0b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/gitlab-runner/fix-shell-path.patch
@@ -0,0 +1,25 @@
+diff --git a/shells/bash.go b/shells/bash.go
+index 18d608445..f158ffc0b 100644
+--- a/shells/bash.go
++++ b/shells/bash.go
+@@ -3,6 +3,7 @@ package shells
+ import (
+ 	"bytes"
+ 	"fmt"
++	"os/exec"
+ 	"path"
+ 	"runtime"
+ 	"strconv"
+@@ -307,7 +308,11 @@ func (b *BashShell) GetConfiguration(info common.ShellScriptInfo) (*common.Shell
+
+ 	script.Command = "su"
+ 	if runtime.GOOS == OSLinux {
+-		script.Arguments = []string{"-s", "/bin/" + b.Shell, info.User, "-c", script.CmdLine}
++		shellPath, err := exec.LookPath(b.Shell)
++		if err != nil {
++			shellPath = "/bin/" + b.Shell
++		}
++		script.Arguments = []string{"-s", shellPath, info.User, "-c", script.CmdLine}
+ 	} else {
+ 		script.Arguments = []string{info.User, "-c", script.CmdLine}
+ 	}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/gitlab-runner/remove-bash-test.patch b/nixpkgs/pkgs/development/tools/continuous-integration/gitlab-runner/remove-bash-test.patch
new file mode 100644
index 000000000000..6f27ef71c957
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/gitlab-runner/remove-bash-test.patch
@@ -0,0 +1,82 @@
+diff --git a/shells/bash_test.go b/shells/bash_test.go
+index 9ed9e65ff..02b6e6d5f 100644
+--- a/shells/bash_test.go
++++ b/shells/bash_test.go
+@@ -4,11 +4,9 @@ package shells
+ 
+ import (
+ 	"path"
+-	"runtime"
+ 	"testing"
+ 
+ 	"github.com/stretchr/testify/assert"
+-	"github.com/stretchr/testify/require"
+ 	"gitlab.com/gitlab-org/gitlab-runner/common"
+ )
+ 
+@@ -90,65 +88,6 @@ func TestBash_CheckForErrors(t *testing.T) {
+ 	}
+ }
+ 
+-func TestBash_GetConfiguration(t *testing.T) {
+-	tests := map[string]struct {
+-		info common.ShellScriptInfo
+-		cmd  string
+-		args []string
+-		os   string
+-	}{
+-		`bash`: {
+-			info: common.ShellScriptInfo{Shell: "bash", Type: common.NormalShell},
+-			cmd:  "bash",
+-		},
+-		`bash -l`: {
+-			info: common.ShellScriptInfo{Shell: "bash", Type: common.LoginShell},
+-			cmd:  "bash",
+-			args: []string{"-l"},
+-		},
+-		`su -s /bin/bash foobar -c bash`: {
+-			info: common.ShellScriptInfo{Shell: "bash", User: "foobar", Type: common.NormalShell},
+-			cmd:  "su",
+-			args: []string{"-s", "/bin/bash", "foobar", "-c", "bash"},
+-			os:   OSLinux,
+-		},
+-		`su -s /bin/bash foobar -c $'bash -l'`: {
+-			info: common.ShellScriptInfo{Shell: "bash", User: "foobar", Type: common.LoginShell},
+-			cmd:  "su",
+-			args: []string{"-s", "/bin/bash", "foobar", "-c", "bash -l"},
+-			os:   OSLinux,
+-		},
+-		`su -s /bin/sh foobar -c $'sh -l'`: {
+-			info: common.ShellScriptInfo{Shell: "sh", User: "foobar", Type: common.LoginShell},
+-			cmd:  "su",
+-			args: []string{"-s", "/bin/sh", "foobar", "-c", "sh -l"},
+-			os:   OSLinux,
+-		},
+-		`su foobar -c $'bash -l'`: {
+-			info: common.ShellScriptInfo{Shell: "bash", User: "foobar", Type: common.LoginShell},
+-			cmd:  "su",
+-			args: []string{"foobar", "-c", "bash -l"},
+-			os:   "darwin",
+-		},
+-	}
+-
+-	for tn, tc := range tests {
+-		t.Run(tn, func(t *testing.T) {
+-			if tc.os != "" && tc.os != runtime.GOOS {
+-				t.Skipf("test only runs on %s", tc.os)
+-			}
+-
+-			sh := BashShell{Shell: tc.info.Shell}
+-			config, err := sh.GetConfiguration(tc.info)
+-			require.NoError(t, err)
+-
+-			assert.Equal(t, tc.cmd, config.Command)
+-			assert.Equal(t, tc.args, config.Arguments)
+-			assert.Equal(t, tn, config.CmdLine)
+-		})
+-	}
+-}
+-
+ func Test_BashWriter_isTmpFile(t *testing.T) {
+ 	tmpDir := "/foo/bar"
+ 	bw := BashWriter{TemporaryPath: tmpDir}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/gocd-agent/default.nix b/nixpkgs/pkgs/development/tools/continuous-integration/gocd-agent/default.nix
new file mode 100644
index 000000000000..6a6c5674bb67
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/gocd-agent/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchurl, unzip }:
+
+stdenv.mkDerivation rec {
+  pname = "gocd-agent";
+  version = "23.1.0";
+  rev = "16079";
+
+  src = fetchurl {
+    url = "https://download.go.cd/binaries/${version}-${rev}/generic/go-agent-${version}-${rev}.zip";
+    sha256 = "sha256-L2MOkbVHoQu99lKrbnsNkhuU0SZ8VANSK72GZrGLbiQ=";
+  };
+  meta = with lib; {
+    description = "A continuous delivery server specializing in advanced workflow modeling and visualization";
+    homepage = "http://www.go.cd";
+    license = licenses.asl20;
+    platforms = platforms.all;
+    sourceProvenance = with sourceTypes; [
+      binaryBytecode
+      binaryNativeCode
+    ];
+    maintainers = with maintainers; [ grahamc swarren83 ];
+  };
+
+  nativeBuildInputs = [ unzip ];
+
+  buildCommand = "
+    unzip $src -d $out
+    mv $out/go-agent-${version} $out/go-agent
+  ";
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/gocd-server/default.nix b/nixpkgs/pkgs/development/tools/continuous-integration/gocd-server/default.nix
new file mode 100644
index 000000000000..6fc577225f42
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/gocd-server/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, stdenv
+, fetchurl
+, unzip
+, nixosTests
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gocd-server";
+  version = "23.1.0";
+  rev = "16079";
+
+  src = fetchurl {
+    url = "https://download.go.cd/binaries/${version}-${rev}/generic/go-server-${version}-${rev}.zip";
+    sha256 = "sha256-//d6izGm1odE25H/PI5pn51FfUL4/6GbLwKUKAqZ3Kw=";
+  };
+
+  meta = with lib; {
+    description = "A continuous delivery server specializing in advanced workflow modeling and visualization";
+    homepage = "http://www.go.cd";
+    license = licenses.asl20;
+    platforms = platforms.all;
+    sourceProvenance = with sourceTypes; [
+      binaryBytecode
+      binaryNativeCode
+    ];
+    maintainers = with maintainers; [ grahamc swarren83 ];
+  };
+
+  nativeBuildInputs = [ unzip ];
+
+  passthru.tests = {
+    inherit (nixosTests) gocd-server;
+  };
+
+  buildCommand = "
+    unzip $src -d $out
+    mv $out/go-server-${version} $out/go-server
+    mkdir -p $out/go-server/conf
+  ";
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/hci/default.nix b/nixpkgs/pkgs/development/tools/continuous-integration/hci/default.nix
new file mode 100644
index 000000000000..1acafb10eabc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/hci/default.nix
@@ -0,0 +1,39 @@
+{ haskell, haskellPackages, lib, makeWrapper, runc, stdenv, emptyDirectory }:
+let
+  inherit (haskell.lib.compose) overrideCabal addBuildTools justStaticExecutables appendConfigureFlags;
+  inherit (lib) makeBinPath;
+  bundledBins = lib.optional stdenv.isLinux runc;
+
+  overrides = old: {
+    hercules-ci-agent =
+      overrideCabal
+        (o: {
+          isLibrary = true;
+          isExecutable = false;
+          postInstall = ""; # ignore completions
+          enableSharedExecutables = false;
+          buildTarget = "lib:hercules-ci-agent hercules-ci-agent-unit-tests";
+          configureFlags = o.configureFlags or [ ] ++ [
+            "--bindir=${emptyDirectory}/hercules-ci-built-without-binaries/no-bin"
+          ];
+        })
+        old.hercules-ci-agent;
+  };
+
+  pkg =
+    # justStaticExecutables is needed due to https://github.com/NixOS/nix/issues/2990
+    overrideCabal
+      (o: {
+        postInstall = ''
+          ${o.postInstall or ""}
+          mkdir -p $out/libexec
+          mv $out/bin/hci $out/libexec
+          makeWrapper $out/libexec/hci $out/bin/hci --prefix PATH : ${lib.escapeShellArg (makeBinPath bundledBins)}
+        '';
+      })
+      (addBuildTools [ makeWrapper ] (justStaticExecutables (haskellPackages.hercules-ci-cli.override overrides)));
+in pkg // {
+    meta = pkg.meta // {
+      position = toString ./default.nix + ":1";
+    };
+  }
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/hercules-ci-agent/default.nix b/nixpkgs/pkgs/development/tools/continuous-integration/hercules-ci-agent/default.nix
new file mode 100644
index 000000000000..c5c52d29d3aa
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/hercules-ci-agent/default.nix
@@ -0,0 +1,72 @@
+{
+  git,
+  gnutar,
+  gzip,
+  haskell,
+  haskellPackages,
+  lib,
+  makeBinaryWrapper,
+  nixos,
+  openssh,
+  runc,
+  stdenv,
+  testers,
+}:
+let
+  inherit (haskell.lib.compose) overrideCabal addBuildTools justStaticExecutables;
+  inherit (lib) makeBinPath;
+  bundledBins = [ gnutar gzip git openssh ] ++ lib.optional stdenv.isLinux runc;
+
+  pkg =
+    # justStaticExecutables is needed due to https://github.com/NixOS/nix/issues/2990
+    overrideCabal
+      (o: {
+        postInstall = ''
+          ${o.postInstall or ""}
+          mkdir -p $out/libexec
+          mv $out/bin/hercules-ci-agent $out/libexec
+          makeWrapper $out/libexec/hercules-ci-agent $out/bin/hercules-ci-agent --prefix PATH : ${lib.escapeShellArg (makeBinPath bundledBins)}
+        '';
+      })
+      (addBuildTools [ makeBinaryWrapper ] (justStaticExecutables haskellPackages.hercules-ci-agent));
+in pkg.overrideAttrs (finalAttrs: o: {
+    meta = o.meta // {
+      position = toString ./default.nix + ":1";
+    };
+    passthru = o.passthru // {
+      tests = {
+        version = testers.testVersion {
+          package = finalAttrs.finalPackage;
+          command = "hercules-ci-agent --help";
+        };
+      } // lib.optionalAttrs (stdenv.isLinux) {
+        # Does not test the package, but evaluation of the related NixOS module.
+        nixos-simple-config = (nixos {
+          boot.loader.grub.enable = false;
+          fileSystems."/".device = "bogus";
+          services.hercules-ci-agent.enable = true;
+          # Dummy value for testing only.
+          system.stateVersion = lib.trivial.release; # TEST ONLY
+        }).config.system.build.toplevel;
+
+        nixos-many-options-config = (nixos ({ pkgs, ... }: {
+          boot.loader.grub.enable = false;
+          fileSystems."/".device = "bogus";
+          services.hercules-ci-agent = {
+            enable = true;
+            package = pkgs.hercules-ci-agent;
+            settings = {
+              workDirectory = "/var/tmp/hci";
+              binaryCachesPath = "/var/keys/binary-caches.json";
+              labels.foo.bar.baz = "qux";
+              labels.qux = ["q" "u"];
+              apiBaseUrl = "https://hci.dev.biz.example.com";
+              concurrentTasks = 42;
+            };
+          };
+          # Dummy value for testing only.
+          system.stateVersion = lib.trivial.release; # TEST ONLY
+        })).config.system.build.toplevel;
+      };
+    };
+  })
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/jenkins/default.nix b/nixpkgs/pkgs/development/tools/continuous-integration/jenkins/default.nix
new file mode 100644
index 000000000000..e88c92d83b0d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/jenkins/default.nix
@@ -0,0 +1,77 @@
+{ lib, stdenv, fetchurl, common-updater-scripts, coreutils, git, gnused
+, makeWrapper, nix, nixfmt, openjdk, writeScript, nixosTests, jq, cacert, curl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "jenkins";
+  version = "2.426.3";
+
+  src = fetchurl {
+    url = "https://get.jenkins.io/war-stable/${version}/jenkins.war";
+    hash = "sha256-q0OSQ6agfi54/nw0CMWWCfe+O/JolHrCFGV6+Wq60QY=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  buildCommand = ''
+    mkdir -p "$out/bin" "$out/share" "$out/webapps"
+
+    cp "$src" "$out/webapps/jenkins.war"
+
+    # Create the `jenkins-cli` command.
+    ${openjdk}/bin/jar -xf "$src" WEB-INF/lib/cli-${version}.jar \
+      && mv WEB-INF/lib/cli-${version}.jar "$out/share/jenkins-cli.jar"
+
+    makeWrapper "${openjdk}/bin/java" "$out/bin/jenkins-cli" \
+      --add-flags "-jar $out/share/jenkins-cli.jar"
+  '';
+
+  passthru = {
+    tests = { inherit (nixosTests) jenkins jenkins-cli; };
+
+    updateScript = writeScript "update.sh" ''
+      #!${stdenv.shell}
+      set -o errexit
+      PATH=${
+        lib.makeBinPath [
+          cacert
+          common-updater-scripts
+          coreutils
+          curl
+          git
+          gnused
+          jq
+          nix
+          nixfmt
+        ]
+      }
+
+      core_json="$(curl -s --fail --location https://updates.jenkins.io/stable/update-center.actual.json | jq .core)"
+      oldVersion=$(nix-instantiate --eval -E "with import ./. {}; lib.getVersion jenkins" | tr -d '"')
+
+      version="$(jq -r .version <<<$core_json)"
+      sha256="$(jq -r .sha256 <<<$core_json)"
+      hash="$(nix hash to-sri --type sha256 "$sha256")"
+
+      if [ ! "$oldVersion" = "$version" ]; then
+        update-source-version jenkins "$version" "$hash"
+        nixpkgs="$(git rev-parse --show-toplevel)"
+        default_nix="$nixpkgs/pkgs/development/tools/continuous-integration/jenkins/default.nix"
+        nixfmt "$default_nix"
+      else
+        echo "jenkins is already up-to-date"
+      fi
+    '';
+  };
+
+  meta = with lib; {
+    description = "An extendable open source continuous integration server";
+    homepage = "https://jenkins.io/";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.mit;
+    maintainers = with maintainers; [ coconnor earldouglas nequissimus ] ++ teams.helsinki-systems.members;
+    changelog = "https://www.jenkins.io/changelog-stable/#v${version}";
+    mainProgram = "jenkins-cli";
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/laminar/default.nix b/nixpkgs/pkgs/development/tools/continuous-integration/laminar/default.nix
new file mode 100644
index 000000000000..e32d3e4a9701
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/laminar/default.nix
@@ -0,0 +1,67 @@
+{ stdenv
+, lib
+, fetchurl
+, fetchFromGitHub
+, cmake
+, capnproto
+, sqlite
+, boost
+, zlib
+, rapidjson
+, pandoc
+}:
+let
+  js.vue = fetchurl {
+    url = "https://cdnjs.cloudflare.com/ajax/libs/vue/2.6.12/vue.min.js";
+    sha256 = "1hm5kci2g6n5ikrvp1kpkkdzimjgylv1xicg2vnkbvd9rb56qa99";
+  };
+  js.ansi_up = fetchurl {
+    url = "https://raw.githubusercontent.com/drudru/ansi_up/v4.0.4/ansi_up.js";
+    sha256 = "1dx8wn38ds8d01kkih26fx1yrisg3kpz61qynjr4zil03ap0hrlr";
+  };
+  js.Chart = fetchurl {
+    url = "https://cdnjs.cloudflare.com/ajax/libs/Chart.js/3.9.1/chart.min.js";
+    hash = "sha256-+8RZJua0aEWg+QVVKg4LEzEEm/8RFez5Tb4JBNiV5xA=";
+  };
+in stdenv.mkDerivation rec {
+  pname = "laminar";
+  version = "1.3";
+  outputs = [ "out" "doc" ];
+  src = fetchFromGitHub {
+    owner = "ohwgiles";
+    repo = "laminar";
+    rev = version;
+    hash = "sha256-eo5WzvmjBEe0LAfZdQ/U0XepEE2kdWKKiyE4HOi3RXk=";
+  };
+  patches = [ ./patches/no-network.patch ];
+
+  # We need both binary from "capnproto" and library files.
+  nativeBuildInputs = [ cmake pandoc capnproto ];
+  buildInputs = [ capnproto sqlite boost zlib rapidjson ];
+  cmakeFlags = [ "-DLAMINAR_VERSION=${version}" ];
+
+  preBuild = ''
+    mkdir -p js css
+    cp  ${js.vue}         js/vue.min.js
+    cp  ${js.ansi_up}     js/ansi_up.js
+    cp  ${js.Chart}       js/Chart.min.js
+  '';
+
+  postInstall = ''
+    mv $out/usr/share/* $out/share/
+    rmdir $out/usr/share $out/usr
+
+    mkdir -p $out/share/doc/laminar
+    pandoc -s ../UserManual.md -o $out/share/doc/laminar/UserManual.html
+    rm -rf $out/lib # remove upstream systemd units
+    rm -rf $out/etc # remove upstream config file
+  '';
+
+  meta = with lib; {
+    description = "Lightweight and modular continuous integration service";
+    homepage = "https://laminar.ohwg.net";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ kaction maralorn ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/laminar/patches/no-network.patch b/nixpkgs/pkgs/development/tools/continuous-integration/laminar/patches/no-network.patch
new file mode 100644
index 000000000000..7b4d3134d69f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/laminar/patches/no-network.patch
@@ -0,0 +1,39 @@
+Build system that downloads stuff from network is bad. Build system that
+does so unconditionally is twice as bad.
+
+Required files are downloaded as separate fixed-output derivations and
+put into correct location before build phase starts.
+
+--- laminar-1.3/CMakeLists.txt
++++ laminar-1.3-new/CMakeLists.txt
+@@ -82,13 +82,6 @@
+     COMMAND sh -c '( echo -n "\\#define INDEX_HTML_UNCOMPRESSED_SIZE " && wc -c < "${CMAKE_SOURCE_DIR}/src/resources/index.html" ) > index_html_size.h'
+     DEPENDS src/resources/index.html)
+ 
+-# Download 3rd-party frontend JS libs...
+-file(DOWNLOAD https://cdnjs.cloudflare.com/ajax/libs/vue/2.6.12/vue.min.js
+-	js/vue.min.js EXPECTED_MD5 fb192338844efe86ec759a40152fcb8e)
+-file(DOWNLOAD https://raw.githubusercontent.com/drudru/ansi_up/v4.0.4/ansi_up.js
+-        js/ansi_up.js EXPECTED_MD5 b31968e1a8fed0fa82305e978161f7f5)
+-file(DOWNLOAD https://cdnjs.cloudflare.com/ajax/libs/Chart.js/3.9.1/chart.min.js
+-        js/Chart.min.js EXPECTED_MD5 7dd5ea7d2cf22a1c42b43c40093d2669)
+ # ...and compile them
+ generate_compressed_bins(${CMAKE_BINARY_DIR} js/vue.min.js
+     js/ansi_up.js js/Chart.min.js)
+@@ -139,12 +132,12 @@
+     target_link_libraries(laminar-tests ${GTEST_LIBRARIES} capnp-rpc capnp kj-http kj-async kj pthread sqlite3 z)
+ endif()
+ 
+-set(SYSTEMD_UNITDIR /lib/systemd/system CACHE PATH "Path to systemd unit files")
+-set(BASH_COMPLETIONS_DIR /usr/share/bash-completion/completions CACHE PATH "Path to bash completions directory")
+-set(ZSH_COMPLETIONS_DIR /usr/share/zsh/site-functions CACHE PATH "Path to zsh completions directory")
++set(SYSTEMD_UNITDIR lib/systemd/system CACHE PATH "Path to systemd unit files")
++set(BASH_COMPLETIONS_DIR usr/share/bash-completion/completions CACHE PATH "Path to bash completions directory")
++set(ZSH_COMPLETIONS_DIR usr/share/zsh/site-functions CACHE PATH "Path to zsh completions directory")
+ install(TARGETS laminard RUNTIME DESTINATION sbin)
+ install(TARGETS laminarc RUNTIME DESTINATION bin)
+-install(FILES etc/laminar.conf DESTINATION /etc)
++install(FILES etc/laminar.conf DESTINATION etc)
+ install(FILES etc/laminarc-completion.bash DESTINATION ${BASH_COMPLETIONS_DIR} RENAME laminarc)
+ install(FILES etc/laminarc-completion.zsh DESTINATION ${ZSH_COMPLETIONS_DIR} RENAME _laminarc)
+ 
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/woodpecker-pipeline-transform/default.nix b/nixpkgs/pkgs/development/tools/continuous-integration/woodpecker-pipeline-transform/default.nix
new file mode 100644
index 000000000000..af05fafea40b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/woodpecker-pipeline-transform/default.nix
@@ -0,0 +1,23 @@
+{ lib, buildGoModule, fetchFromGitea }:
+buildGoModule rec {
+  pname = "woodpecker-pipeline-transform";
+  version = "0.1.1";
+
+  src = fetchFromGitea {
+    domain = "codeberg.org";
+    owner = "lafriks";
+    repo = "woodpecker-pipeline-transform";
+    rev = "v${version}";
+    sha256 = "sha256-tWDMbOkajZ3BB32Vl630EZrY+Owm72MD2Z2JjMucVkI=";
+  };
+
+  vendorHash = "sha256-qKzGALMagf6QHeLdABfNGG4f/3K/F6CjVYjOJtyTNoM=";
+
+  meta = with lib; {
+    description = "Utility to convert different pipelines to Woodpecker CI pipelines";
+    homepage = "https://codeberg.org/lafriks/woodpecker-pipeline-transform";
+    license = licenses.mit;
+    mainProgram = "pipeline-convert";
+    maintainers = with maintainers; [ ambroisie ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/woodpecker-plugin-git/default.nix b/nixpkgs/pkgs/development/tools/continuous-integration/woodpecker-plugin-git/default.nix
new file mode 100644
index 000000000000..c05800237637
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/woodpecker-plugin-git/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, testers
+, woodpecker-plugin-git
+}:
+
+buildGoModule rec {
+  pname = "woodpecker-plugin-git";
+  version = "2.5.0";
+
+  src = fetchFromGitHub {
+    owner = "woodpecker-ci";
+    repo = "plugin-git";
+    rev = "refs/tags/${version}";
+    hash = "sha256-vQcHEsOJFMbrt5KpoHB59g5gIxwXQuJpudhu2qbgCY8=";
+  };
+
+  vendorHash = "sha256-nPeF6Z+d69o1JwCUlzVREx8DyIqokHIfTRC1/S5XG6A=";
+
+  CGO_ENABLED = "0";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X main.version=${version}"
+  ];
+
+  # Checks fail because they require network access.
+  doCheck = false;
+
+  passthru.tests.version = testers.testVersion { package = woodpecker-plugin-git; };
+
+  meta = with lib; {
+    description = "Woodpecker plugin for cloning Git repositories.";
+    homepage = "https://woodpecker-ci.org/";
+    changelog = "https://github.com/woodpecker-ci/plugin-git/releases/tag/${version}";
+    license = licenses.asl20;
+    mainProgram = "plugin-git";
+    maintainers = with maintainers; [ ambroisie ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/woodpecker/agent.nix b/nixpkgs/pkgs/development/tools/continuous-integration/woodpecker/agent.nix
new file mode 100644
index 000000000000..5bbc4cf99cea
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/woodpecker/agent.nix
@@ -0,0 +1,17 @@
+{ buildGoModule, callPackage }:
+let
+  common = callPackage ./common.nix { };
+in
+buildGoModule {
+  pname = "woodpecker-agent";
+  inherit (common) version src ldflags postInstall vendorHash;
+
+  subPackages = "cmd/agent";
+
+  CGO_ENABLED = 0;
+
+  meta = common.meta // {
+    description = "Woodpecker Continuous Integration agent";
+    mainProgram = "woodpecker-agent";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/woodpecker/cli.nix b/nixpkgs/pkgs/development/tools/continuous-integration/woodpecker/cli.nix
new file mode 100644
index 000000000000..d1f1da881681
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/woodpecker/cli.nix
@@ -0,0 +1,17 @@
+{ buildGoModule, callPackage }:
+let
+  common = callPackage ./common.nix { };
+in
+buildGoModule {
+  pname = "woodpecker-cli";
+  inherit (common) version src ldflags postInstall vendorHash;
+
+  subPackages = "cmd/cli";
+
+  CGO_ENABLED = 0;
+
+  meta = common.meta // {
+    description = "Command line client for the Woodpecker Continuous Integration server";
+    mainProgram = "woodpecker-cli";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/woodpecker/common.nix b/nixpkgs/pkgs/development/tools/continuous-integration/woodpecker/common.nix
new file mode 100644
index 000000000000..bad183d98125
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/woodpecker/common.nix
@@ -0,0 +1,37 @@
+{ lib, fetchzip }:
+let
+  version = "2.3.0";
+  srcHash = "sha256-r5TV5WJW2klSlrOG6EjfUgLyHhMI+BMUTY/2JIUgd0Q=";
+  # The tarball contains vendored dependencies
+  vendorHash = null;
+in
+{
+  inherit version vendorHash;
+
+  src = fetchzip {
+    url = "https://github.com/woodpecker-ci/woodpecker/releases/download/v${version}/woodpecker-src.tar.gz";
+    hash = srcHash;
+    stripRoot = false;
+  };
+
+  postInstall = ''
+    cd $out/bin
+    for f in *; do
+      mv -- "$f" "woodpecker-$f"
+    done
+    cd -
+  '';
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X go.woodpecker-ci.org/woodpecker/v2/version.Version=${version}"
+  ];
+
+  meta = with lib; {
+    homepage = "https://woodpecker-ci.org/";
+    changelog = "https://github.com/woodpecker-ci/woodpecker/blob/v${version}/CHANGELOG.md";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ ambroisie techknowlogick adamcstephens ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/woodpecker/server.nix b/nixpkgs/pkgs/development/tools/continuous-integration/woodpecker/server.nix
new file mode 100644
index 000000000000..fb232a19ba2e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/woodpecker/server.nix
@@ -0,0 +1,21 @@
+{ buildGoModule, callPackage }:
+let
+  common = callPackage ./common.nix { };
+in
+buildGoModule {
+  pname = "woodpecker-server";
+  inherit (common) version src ldflags postInstall vendorHash;
+
+  subPackages = "cmd/server";
+
+  CGO_ENABLED = 1;
+
+  passthru = {
+    updateScript = ./update.sh;
+  };
+
+  meta = common.meta // {
+    description = "Woodpecker Continuous Integration server";
+    mainProgram = "woodpecker-server";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/woodpecker/update.sh b/nixpkgs/pkgs/development/tools/continuous-integration/woodpecker/update.sh
new file mode 100755
index 000000000000..4ee52f9aded2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/woodpecker/update.sh
@@ -0,0 +1,34 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p nix wget jq nix-prefetch
+
+# shellcheck shell=bash
+
+if [ -n "$GITHUB_TOKEN" ]; then
+    TOKEN_ARGS=(--header "Authorization: token $GITHUB_TOKEN")
+fi
+
+if [[ $# -gt 1 || $1 == -* ]]; then
+    echo "Regenerates packaging data for the woodpecker packages."
+    echo "Usage: $0 [git release tag]"
+    exit 1
+fi
+
+set -x
+
+cd "$(dirname "$0")"
+version="$1"
+
+set -euo pipefail
+
+if [ -z "$version" ]; then
+    version="$(wget -O- "${TOKEN_ARGS[@]}" "https://api.github.com/repos/woodpecker-ci/woodpecker/releases?per_page=1" | jq -r '.[0].tag_name')"
+fi
+
+# strip leading "v"
+version="${version#v}"
+sed -i -E -e "s#version = \".*\"#version = \"$version\"#" common.nix
+
+# Woodpecker repository
+src_hash=$(nix-prefetch-url --type sha256 --unpack "https://github.com/woodpecker-ci/woodpecker/releases/download/v$version/woodpecker-src.tar.gz")
+src_hash=$(nix hash to-sri --type sha256 "$src_hash")
+sed -i -E -e "s#srcHash = \".*\"#srcHash = \"$src_hash\"#" common.nix
diff --git a/nixpkgs/pkgs/development/tools/corundum/Gemfile b/nixpkgs/pkgs/development/tools/corundum/Gemfile
new file mode 100644
index 000000000000..5f817ae498a7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/corundum/Gemfile
@@ -0,0 +1,3 @@
+source "https://rubygems.org"
+
+gem "corundum", "=0.6.2"
diff --git a/nixpkgs/pkgs/development/tools/corundum/Gemfile.lock b/nixpkgs/pkgs/development/tools/corundum/Gemfile.lock
new file mode 100644
index 000000000000..596a689e3a2d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/corundum/Gemfile.lock
@@ -0,0 +1,56 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    calibrate (0.0.1)
+    caliph (0.3.1)
+    corundum (0.6.2)
+      bundler (~> 1.10)
+      caliph (~> 0.3)
+      mattock (~> 0.9)
+      paint (~> 0.8)
+      rspec (>= 2.0, < 4)
+      simplecov (>= 0.5)
+      simplecov-json (~> 0.2)
+    diff-lcs (1.3)
+    docile (1.1.5)
+    json (2.1.0)
+    mattock (0.10.1)
+      calibrate (~> 0.0.1)
+      caliph (~> 0.3)
+      rake (~> 10.0)
+      tilt (> 0)
+      valise (~> 1.1)
+    paint (0.9.0)
+    rake (10.5.0)
+    rspec (3.6.0)
+      rspec-core (~> 3.6.0)
+      rspec-expectations (~> 3.6.0)
+      rspec-mocks (~> 3.6.0)
+    rspec-core (3.6.0)
+      rspec-support (~> 3.6.0)
+    rspec-expectations (3.6.0)
+      diff-lcs (>= 1.2.0, < 2.0)
+      rspec-support (~> 3.6.0)
+    rspec-mocks (3.6.0)
+      diff-lcs (>= 1.2.0, < 2.0)
+      rspec-support (~> 3.6.0)
+    rspec-support (3.6.0)
+    simplecov (0.14.1)
+      docile (~> 1.1.0)
+      json (>= 1.8, < 3)
+      simplecov-html (~> 0.10.0)
+    simplecov-html (0.10.1)
+    simplecov-json (0.2)
+      json
+      simplecov
+    tilt (2.0.7)
+    valise (1.2.1)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  corundum (= 0.6.2)
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/development/tools/corundum/default.nix b/nixpkgs/pkgs/development/tools/corundum/default.nix
new file mode 100644
index 000000000000..62d00cbc3768
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/corundum/default.nix
@@ -0,0 +1,17 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "corundum";
+  gemdir = ./.;
+  exes = [ "corundum-skel" ];
+
+  passthru.updateScript = bundlerUpdateScript "corundum";
+
+  meta = with lib; {
+    description = "Tool and libraries for maintaining Ruby gems";
+    homepage    = "https://github.com/nyarly/corundum";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ nyarly nicknovitski ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/corundum/gemset.nix b/nixpkgs/pkgs/development/tools/corundum/gemset.nix
new file mode 100644
index 000000000000..a6ec2f2b9b91
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/corundum/gemset.nix
@@ -0,0 +1,154 @@
+{
+  calibrate = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "17kmlss7db70pjwdbbhag7mnixh8wasdq6n1v8663x50z9c7n2ng";
+      type = "gem";
+    };
+    version = "0.0.1";
+  };
+  caliph = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08d07n4m4yh1h9icq6n9dkw4jwgdmgd638f15mxr2pvqp4wycsnr";
+      type = "gem";
+    };
+    version = "0.3.1";
+  };
+  corundum = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1y6shjrqaqyh14a1r4ic660g6jnq4abdrx9imglyalzyrlrwbsxq";
+      type = "gem";
+    };
+    version = "0.6.2";
+  };
+  diff-lcs = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "18w22bjz424gzafv6nzv98h0aqkwz3d9xhm7cbr1wfbyas8zayza";
+      type = "gem";
+    };
+    version = "1.3";
+  };
+  docile = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0m8j31whq7bm5ljgmsrlfkiqvacrw6iz9wq10r3gwrv5785y8gjx";
+      type = "gem";
+    };
+    version = "1.1.5";
+  };
+  json = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "01v6jjpvh3gnq6sgllpfqahlgxzj50ailwhj9b3cd20hi2dx0vxp";
+      type = "gem";
+    };
+    version = "2.1.0";
+  };
+  mattock = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "02d6igwr4sfj4jnky8d5h0rm2cc665k1bqz7sj4khzvr18nk3ai6";
+      type = "gem";
+    };
+    version = "0.10.1";
+  };
+  paint = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fcn7cfrhbl4nl95fmcd67q33h7bl3iafsafs6w9yj4nqzagz1yc";
+      type = "gem";
+    };
+    version = "0.9.0";
+  };
+  rake = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jcabbgnjc788chx31sihc5pgbqnlc1c75wakmqlbjdm8jns2m9b";
+      type = "gem";
+    };
+    version = "10.5.0";
+  };
+  rspec = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1nd50hycab2a2vdah9lxi585g8f63jxjvmzmxqyln51grxwx9hzb";
+      type = "gem";
+    };
+    version = "3.6.0";
+  };
+  rspec-core = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "18np8wyw2g79waclpaacba6nd7x60ixg07ncya0j0qj1z9b37grd";
+      type = "gem";
+    };
+    version = "3.6.0";
+  };
+  rspec-expectations = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "028ifzf9mqp3kxx40q1nbwj40g72g9zk0wr78l146phblkv96w0a";
+      type = "gem";
+    };
+    version = "3.6.0";
+  };
+  rspec-mocks = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nv6jkxy24sag1i9w9wi3850k6skk2fm6yhcrgnmlz6vmwxvizp8";
+      type = "gem";
+    };
+    version = "3.6.0";
+  };
+  rspec-support = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "050paqqpsml8w88nf4a15zbbj3vvm471zpv73sjfdnz7w21wnypb";
+      type = "gem";
+    };
+    version = "3.6.0";
+  };
+  simplecov = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1r9fnsnsqj432cmrpafryn8nif3x0qg9mdnvrcf0wr01prkdlnww";
+      type = "gem";
+    };
+    version = "0.14.1";
+  };
+  simplecov-html = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0f3psphismgp6jp1fxxz09zbswh7m2xxxr6gqlzdh7sgv415clvm";
+      type = "gem";
+    };
+    version = "0.10.1";
+  };
+  simplecov-json = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0x9hr08pkj5d14nfzsn5h8b7ayl6q0xir45dcx5rv2a7g10kzlpp";
+      type = "gem";
+    };
+    version = "0.2";
+  };
+  tilt = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1is1ayw5049z8pd7slsk870bddyy5g2imp4z78lnvl8qsl8l0s7b";
+      type = "gem";
+    };
+    version = "2.0.7";
+  };
+  valise = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1arsbmk2gifrhv244qrld7s3202xrnxy6vlc5gqklg70dpsinbn5";
+      type = "gem";
+    };
+    version = "1.2.1";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/cotton/Cargo.lock b/nixpkgs/pkgs/development/tools/cotton/Cargo.lock
new file mode 100644
index 000000000000..3186cacd69c1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cotton/Cargo.lock
@@ -0,0 +1,2455 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "addr2line"
+version = "0.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9ecd88a8c8378ca913a680cd98f0f13ac67383d35993f86c90a70e3f137816b"
+dependencies = [
+ "gimli",
+]
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "alloc-no-stdlib"
+version = "2.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35ef4730490ad1c4eae5c4325b2a95f521d023e5c885853ff7aca0a6a1631db3"
+
+[[package]]
+name = "alloc-stdlib"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "697ed7edc0f1711de49ce108c541623a0af97c6c60b2f6e2b65229847ac843c2"
+dependencies = [
+ "alloc-no-stdlib",
+]
+
+[[package]]
+name = "anstream"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1f58811cfac344940f1a400b6e6231ce35171f614f26439e80f8c1465c5cc0c"
+dependencies = [
+ "anstyle",
+ "anstyle-parse",
+ "anstyle-query",
+ "anstyle-wincon",
+ "colorchoice",
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41ed9a86bf92ae6580e0a31281f65a1b1d867c0cc68d5346e2ae128dddfa6a7d"
+
+[[package]]
+name = "anstyle-parse"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e765fd216e48e067936442276d1d57399e37bce53c264d6fefbe298080cb57ee"
+dependencies = [
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle-query"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b"
+dependencies = [
+ "windows-sys",
+]
+
+[[package]]
+name = "anstyle-wincon"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "58f54d10c6dfa51283a066ceab3ec1ab78d13fae00aa49243a45e4571fb79dfd"
+dependencies = [
+ "anstyle",
+ "windows-sys",
+]
+
+[[package]]
+name = "async-compression"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb42b2197bf15ccb092b62c74515dbd8b86d0effd934795f6687c93b6e679a2c"
+dependencies = [
+ "brotli",
+ "flate2",
+ "futures-core",
+ "memchr",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "async-recursion"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fd55a5ba1179988837d24ab4c7cc8ed6efdeff578ede0416b4225a5fca35bd0"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.28",
+]
+
+[[package]]
+name = "async-trait"
+version = "0.1.56"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96cf8829f67d2eab0b2dfa42c5d0ef737e0724e4a82b01b3e292456202b19716"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.104",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "backtrace"
+version = "0.3.66"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cab84319d616cfb654d03394f38ab7e6f0919e181b1b57e1fd15e7fb4077d9a7"
+dependencies = [
+ "addr2line",
+ "cc",
+ "cfg-if",
+ "libc",
+ "miniz_oxide",
+ "object",
+ "rustc-demangle",
+]
+
+[[package]]
+name = "base64"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd"
+
+[[package]]
+name = "base64"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bitflags"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635"
+
+[[package]]
+name = "brotli"
+version = "3.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1a0b1dbcc8ae29329621f8d4f0d835787c1c38bb1401979b49d13b0b305ff68"
+dependencies = [
+ "alloc-no-stdlib",
+ "alloc-stdlib",
+ "brotli-decompressor",
+]
+
+[[package]]
+name = "brotli-decompressor"
+version = "2.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59ad2d4653bf5ca36ae797b1f4bb4dbddb60ce49ca4aed8a2ce4829f60425b80"
+dependencies = [
+ "alloc-no-stdlib",
+ "alloc-stdlib",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37ccbd214614c6783386c1af30caf03192f17891059cecc394b4fb119e363de3"
+
+[[package]]
+name = "bytecount"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c676a478f63e9fa2dd5368a42f28bba0d6c560b775f38583c8bbaa7fcd67c9c"
+
+[[package]]
+name = "bytes"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0b3de4a0c5e67e16066a0715723abd91edc2f9001d09c46e1dca929351e130e"
+
+[[package]]
+name = "cached"
+version = "0.44.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b195e4fbc4b6862bbd065b991a34750399c119797efff72492f28a5864de8700"
+dependencies = [
+ "async-trait",
+ "cached_proc_macro",
+ "cached_proc_macro_types",
+ "futures",
+ "hashbrown 0.13.1",
+ "instant",
+ "once_cell",
+ "thiserror",
+ "tokio",
+]
+
+[[package]]
+name = "cached_proc_macro"
+version = "0.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b48814962d2fd604c50d2b9433c2a41a0ab567779ee2c02f7fba6eca1221f082"
+dependencies = [
+ "cached_proc_macro_types",
+ "darling",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.104",
+]
+
+[[package]]
+name = "cached_proc_macro_types"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a4f925191b4367301851c6d99b09890311d74b0d43f274c0b34c86d308a3663"
+
+[[package]]
+name = "castaway"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a17ed5635fc8536268e5d4de1e22e81ac34419e5f052d4d51f4e01dcc263fcc"
+dependencies = [
+ "rustversion",
+]
+
+[[package]]
+name = "cc"
+version = "1.0.73"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "clap"
+version = "4.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "84ed82781cea27b43c9b106a979fe450a13a31aab0500595fb3fc06616de08e6"
+dependencies = [
+ "clap_builder",
+ "clap_derive",
+]
+
+[[package]]
+name = "clap_builder"
+version = "4.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2bb9faaa7c2ef94b2743a21f5a29e6f0010dff4caa69ac8e9d6cf8b6fa74da08"
+dependencies = [
+ "anstream",
+ "anstyle",
+ "clap_lex",
+ "strsim",
+]
+
+[[package]]
+name = "clap_derive"
+version = "4.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0862016ff20d69b84ef8247369fabf5c008a7417002411897d40ee1f4532b873"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.28",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2da6da31387c7e4ef160ffab6d5e7f00c42626fe39aea70a7b0f1773f7dd6c1b"
+
+[[package]]
+name = "color-eyre"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a667583cca8c4f8436db8de46ea8233c42a7d9ae424a82d338f2e4675229204"
+dependencies = [
+ "backtrace",
+ "color-spantrace",
+ "eyre",
+ "indenter",
+ "once_cell",
+ "owo-colors",
+ "tracing-error",
+]
+
+[[package]]
+name = "color-spantrace"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ba75b3d9449ecdccb27ecbc479fdc0b87fa2dd43d2f8298f9bf0e59aacc8dce"
+dependencies = [
+ "once_cell",
+ "owo-colors",
+ "tracing-core",
+ "tracing-error",
+]
+
+[[package]]
+name = "colorchoice"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
+
+[[package]]
+name = "compact_str"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f86b9c4c00838774a6d902ef931eff7470720c51d90c2e32cfe15dc304737b3f"
+dependencies = [
+ "castaway",
+ "cfg-if",
+ "itoa",
+ "ryu",
+ "serde",
+ "static_assertions",
+]
+
+[[package]]
+name = "console"
+version = "0.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a28b32d32ca44b70c3e4acd7db1babf555fa026e385fb95f18028f88848b3c31"
+dependencies = [
+ "encode_unicode",
+ "libc",
+ "once_cell",
+ "regex",
+ "terminal_size",
+ "unicode-width",
+ "winapi",
+]
+
+[[package]]
+name = "cotton"
+version = "0.1.0"
+dependencies = [
+ "async-compression",
+ "async-recursion",
+ "cached",
+ "clap",
+ "color-eyre",
+ "compact_str",
+ "dashmap",
+ "flume",
+ "futures",
+ "futures-lite",
+ "indexmap 2.0.0",
+ "indicatif",
+ "itertools",
+ "mimalloc",
+ "multimap",
+ "nix",
+ "node-semver",
+ "notify",
+ "once_cell",
+ "owo-colors",
+ "rand",
+ "reqwest",
+ "rustc-hash",
+ "serde",
+ "serde_json",
+ "serde_path_to_error",
+ "tap",
+ "tokio",
+ "tokio-tar",
+ "tokio-util",
+ "toml",
+ "tracing",
+ "tracing-error",
+ "tracing-subscriber",
+ "url",
+ "which",
+]
+
+[[package]]
+name = "crc32fast"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c02a4d71819009c192cf4872265391563fd6a84c81ff2c0f2a7026ca4c1d85c"
+dependencies = [
+ "cfg-if",
+ "crossbeam-utils",
+]
+
+[[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 = "darling"
+version = "0.14.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0dd3cd20dc6b5a876612a6e5accfe7f3dd883db6d07acfbf14c128f61550dfa"
+dependencies = [
+ "darling_core",
+ "darling_macro",
+]
+
+[[package]]
+name = "darling_core"
+version = "0.14.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a784d2ccaf7c98501746bf0be29b2022ba41fd62a2e622af997a03e9f972859f"
+dependencies = [
+ "fnv",
+ "ident_case",
+ "proc-macro2",
+ "quote",
+ "strsim",
+ "syn 1.0.104",
+]
+
+[[package]]
+name = "darling_macro"
+version = "0.14.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7618812407e9402654622dd402b0a89dff9ba93badd6540781526117b92aab7e"
+dependencies = [
+ "darling_core",
+ "quote",
+ "syn 1.0.104",
+]
+
+[[package]]
+name = "dashmap"
+version = "5.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856"
+dependencies = [
+ "cfg-if",
+ "hashbrown 0.14.0",
+ "lock_api",
+ "once_cell",
+ "parking_lot_core",
+ "serde",
+]
+
+[[package]]
+name = "data-encoding"
+version = "2.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3ee2393c4a91429dffb4bedf19f4d6abf27d8a732c8ce4980305d782e5426d57"
+
+[[package]]
+name = "either"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f107b87b6afc2a64fd13cac55fe06d6c8859f12d4b14cbcdd2c67d0976781be"
+
+[[package]]
+name = "encode_unicode"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
+
+[[package]]
+name = "encoding_rs"
+version = "0.8.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9852635589dc9f9ea1b6fe9f05b50ef208c85c834a562f0c6abb1c475736ec2b"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "enum-as-inner"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c9720bba047d567ffc8a3cba48bf19126600e249ab7f128e9233e6376976a116"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.104",
+]
+
+[[package]]
+name = "equivalent"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88bffebc5d80432c9b140ee17875ff173a8ab62faad5b257da912bd2f6c1c0a1"
+
+[[package]]
+name = "errno"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "136526188508e25c6fef639d7927dfb3e0e3084488bf202267829cf7fc23dbdd"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "windows-sys",
+]
+
+[[package]]
+name = "errno-dragonfly"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "eyre"
+version = "0.6.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c2b6b5a29c02cdc822728b7d7b8ae1bab3e3b05d44522770ddd49722eeac7eb"
+dependencies = [
+ "indenter",
+ "once_cell",
+]
+
+[[package]]
+name = "fastrand"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3fcf0cee53519c866c09b5de1f6c56ff9d647101f81c1964fa632e148896cdf"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "filetime"
+version = "0.2.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4029edd3e734da6fe05b6cd7bd2960760a616bd2ddd0d59a0124746d6272af0"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall 0.3.5",
+ "windows-sys",
+]
+
+[[package]]
+name = "flate2"
+version = "1.0.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f82b0f4c27ad9f8bfd1f3208d882da2b09c301bc1c828fd3a00d0216d2fbbff6"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide",
+]
+
+[[package]]
+name = "flume"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+ "nanorand",
+ "spin 0.9.8",
+]
+
+[[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.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "fsevent-sys"
+version = "4.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76ee7a02da4d231650c7cea31349b889be2f45ddb3ef3032d2ec8185f6313fd2"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "futures"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-io",
+ "futures-sink",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c"
+
+[[package]]
+name = "futures-executor"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-io"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964"
+
+[[package]]
+name = "futures-lite"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce"
+dependencies = [
+ "fastrand",
+ "futures-core",
+ "futures-io",
+ "memchr",
+ "parking",
+ "pin-project-lite",
+ "waker-fn",
+]
+
+[[package]]
+name = "futures-macro"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.28",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e"
+
+[[package]]
+name = "futures-task"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65"
+
+[[package]]
+name = "futures-util"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-macro",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "libc",
+ "wasi",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "gimli"
+version = "0.26.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "22030e2c5a68ec659fde1e949a745124b48e6fa8b045b7ed5bd1fe4ccc5c4e5d"
+
+[[package]]
+name = "h2"
+version = "0.3.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91fc23aa11be92976ef4729127f1a74adf36d8436f7816b185d18df956790833"
+dependencies = [
+ "bytes",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "http",
+ "indexmap 1.9.3",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tracing",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+
+[[package]]
+name = "hashbrown"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "33ff8ae62cd3a9102e5637afc8452c55acf3844001bd5374e0b0bd7b6616c038"
+
+[[package]]
+name = "hashbrown"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a"
+
+[[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 = "home"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb"
+dependencies = [
+ "windows-sys",
+]
+
+[[package]]
+name = "hostname"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867"
+dependencies = [
+ "libc",
+ "match_cfg",
+ "winapi",
+]
+
+[[package]]
+name = "http"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399"
+dependencies = [
+ "bytes",
+ "fnv",
+ "itoa",
+]
+
+[[package]]
+name = "http-body"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
+dependencies = [
+ "bytes",
+ "http",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "httparse"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
+
+[[package]]
+name = "httpdate"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421"
+
+[[package]]
+name = "hyper"
+version = "0.14.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468"
+dependencies = [
+ "bytes",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "httparse",
+ "httpdate",
+ "itoa",
+ "pin-project-lite",
+ "socket2 0.4.9",
+ "tokio",
+ "tower-service",
+ "tracing",
+ "want",
+]
+
+[[package]]
+name = "hyper-rustls"
+version = "0.24.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0646026eb1b3eea4cd9ba47912ea5ce9cc07713d105b1a14698f4e6433d348b7"
+dependencies = [
+ "http",
+ "hyper",
+ "rustls",
+ "tokio",
+ "tokio-rustls",
+]
+
+[[package]]
+name = "ident_case"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
+
+[[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 = "idna"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "indenter"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683"
+
+[[package]]
+name = "indexmap"
+version = "1.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
+dependencies = [
+ "autocfg",
+ "hashbrown 0.12.3",
+]
+
+[[package]]
+name = "indexmap"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d"
+dependencies = [
+ "equivalent",
+ "hashbrown 0.14.0",
+ "serde",
+]
+
+[[package]]
+name = "indicatif"
+version = "0.17.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b297dc40733f23a0e52728a58fa9489a5b7638a324932de16b41adc3ef80730"
+dependencies = [
+ "console",
+ "instant",
+ "number_prefix",
+ "portable-atomic",
+ "unicode-width",
+]
+
+[[package]]
+name = "inotify"
+version = "0.9.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8069d3ec154eb856955c1c0fbffefbf5f3c40a104ec912d4797314c1801abff"
+dependencies = [
+ "bitflags 1.3.2",
+ "inotify-sys",
+ "libc",
+]
+
+[[package]]
+name = "inotify-sys"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "instant"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "ipconfig"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "723519edce41262b05d4143ceb95050e4c614f483e78e9fd9e39a8275a84ad98"
+dependencies = [
+ "socket2 0.4.9",
+ "widestring",
+ "winapi",
+ "winreg 0.7.0",
+]
+
+[[package]]
+name = "ipnet"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "879d54834c8c76457ef4293a689b2a8c59b076067ad77b15efafbb05f92a592b"
+
+[[package]]
+name = "itertools"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "112c678d4050afce233f4f2852bb2eb519230b3cf12f33585275537d7e41578d"
+
+[[package]]
+name = "js-sys"
+version = "0.3.58"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3fac17f7123a73ca62df411b1bf727ccc805daa070338fda671c86dac1bdc27"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "kqueue"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d6112e8f37b59803ac47a42d14f1f3a59bbf72fc6857ffc5be455e28a691f8e"
+dependencies = [
+ "kqueue-sys",
+ "libc",
+]
+
+[[package]]
+name = "kqueue-sys"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8367585489f01bc55dd27404dcf56b95e6da061a256a666ab23be9ba96a2e587"
+dependencies = [
+ "bitflags 1.3.2",
+ "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.147"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3"
+
+[[package]]
+name = "libmimalloc-sys"
+version = "0.1.34"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25d058a81af0d1c22d7a1c948576bee6d673f7af3c0f35564abd6c81122f513d"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "linked-hash-map"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57bcfdad1b858c2db7c38303a6d2ad4dfaf5eb53dfeb0910128b2c26d6158503"
+
+[[package]]
+name = "lock_api"
+version = "0.4.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16"
+dependencies = [
+ "autocfg",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "lru-cache"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c"
+dependencies = [
+ "linked-hash-map",
+]
+
+[[package]]
+name = "match_cfg"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4"
+
+[[package]]
+name = "matchers"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558"
+dependencies = [
+ "regex-automata",
+]
+
+[[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 = "memoffset"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "miette"
+version = "3.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd2adcfcced5d625bf90a958a82ae5b93231f57f3df1383fee28c9b5096d35ed"
+dependencies = [
+ "miette-derive",
+ "once_cell",
+ "thiserror",
+]
+
+[[package]]
+name = "miette-derive"
+version = "3.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c01a8b61312d367ce87956bb686731f87e4c6dd5dbc550e8f06e3c24fb1f67f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.104",
+]
+
+[[package]]
+name = "mimalloc"
+version = "0.1.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "972e5f23f6716f62665760b0f4cbf592576a80c7b879ba9beaafc0e558894127"
+dependencies = [
+ "libmimalloc-sys",
+]
+
+[[package]]
+name = "mime"
+version = "0.3.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d"
+
+[[package]]
+name = "minimal-lexical"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f5c75688da582b8ffc1f1799e9db273f32133c49e048f614d22ec3256773ccc"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "mio"
+version = "0.8.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2"
+dependencies = [
+ "libc",
+ "log",
+ "wasi",
+ "windows-sys",
+]
+
+[[package]]
+name = "multimap"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70db9248a93dc36a36d9a47898caa007a32755c7ad140ec64eeeb50d5a730631"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "nanorand"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "nix"
+version = "0.26.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfdda3d196821d6af13126e40375cdf7da646a96114af134d5f417a9a1dc8e1a"
+dependencies = [
+ "bitflags 1.3.2",
+ "cfg-if",
+ "libc",
+ "memoffset",
+ "pin-utils",
+ "static_assertions",
+]
+
+[[package]]
+name = "node-semver"
+version = "2.0.1-alpha.0"
+source = "git+https://github.com/danielhuang/node-semver-rs?rev=bf4b103dc88b310c9dc049433aff1a14716e1e68#bf4b103dc88b310c9dc049433aff1a14716e1e68"
+dependencies = [
+ "bytecount",
+ "miette",
+ "nom",
+ "serde",
+ "thiserror",
+]
+
+[[package]]
+name = "nom"
+version = "7.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8903e5a29a317527874d0402f867152a3d21c908bb0b933e416c65e301d4c36"
+dependencies = [
+ "memchr",
+ "minimal-lexical",
+]
+
+[[package]]
+name = "notify"
+version = "6.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6205bd8bb1e454ad2e27422015fb5e4f2bcc7e08fa8f27058670d208324a4d2d"
+dependencies = [
+ "bitflags 2.4.0",
+ "crossbeam-channel",
+ "filetime",
+ "fsevent-sys",
+ "inotify",
+ "kqueue",
+ "libc",
+ "log",
+ "mio",
+ "walkdir",
+ "windows-sys",
+]
+
+[[package]]
+name = "nu-ansi-term"
+version = "0.46.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84"
+dependencies = [
+ "overload",
+ "winapi",
+]
+
+[[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 = "number_prefix"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3"
+
+[[package]]
+name = "object"
+version = "0.29.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21158b2c33aa6d4561f1c0a6ea283ca92bc54802a93b263e910746d679a7eb53"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
+
+[[package]]
+name = "overload"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
+
+[[package]]
+name = "owo-colors"
+version = "3.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "69dc4ec9e7e12502579e09e8a53c6a305b3aceb62ad5c307a62f7c3eada78324"
+
+[[package]]
+name = "parking"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72"
+
+[[package]]
+name = "parking_lot"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+dependencies = [
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall 0.3.5",
+ "smallvec",
+ "windows-targets",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94"
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c516611246607d0c04186886dbb3a754368ef82c79e9827a802c6d836dd111c"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "portable-atomic"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc59d1bcc64fc5d021d67521f818db868368028108d37f0e98d74e33f68297b5"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.63"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b368fba921b0dce7e60f5e04ec15e565b3303972b42bcfde1d0713b881959eb"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quick-error"
+version = "1.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0"
+
+[[package]]
+name = "quote"
+version = "1.0.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "573015e8ab27661678357f27dc26460738fd2b6c86e46f386fde94cb5d913105"
+dependencies = [
+ "proc-macro2",
+]
+
+[[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",
+]
+
+[[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",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62f25bc4c7e55e0b0b7a1d43fb893f4fa1361d0abe38b9ce4f323c2adfe6ef42"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "regex"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b"
+dependencies = [
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
+dependencies = [
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244"
+
+[[package]]
+name = "reqwest"
+version = "0.11.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3e9ad3fe7488d7e34558a2033d45a0c90b72d97b4f80705666fea71472e2e6a1"
+dependencies = [
+ "async-compression",
+ "base64 0.21.0",
+ "bytes",
+ "encoding_rs",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "hyper",
+ "hyper-rustls",
+ "ipnet",
+ "js-sys",
+ "log",
+ "mime",
+ "once_cell",
+ "percent-encoding",
+ "pin-project-lite",
+ "rustls",
+ "rustls-pemfile",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "tokio",
+ "tokio-rustls",
+ "tokio-util",
+ "tower-service",
+ "trust-dns-resolver",
+ "url",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "wasm-streams",
+ "web-sys",
+ "webpki-roots",
+ "winreg 0.50.0",
+]
+
+[[package]]
+name = "resolv-conf"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "52e44394d2086d010551b14b53b1f24e31647570cd1deb0379e2c21b329aba00"
+dependencies = [
+ "hostname",
+ "quick-error",
+]
+
+[[package]]
+name = "ring"
+version = "0.16.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc"
+dependencies = [
+ "cc",
+ "libc",
+ "once_cell",
+ "spin 0.5.2",
+ "untrusted",
+ "web-sys",
+ "winapi",
+]
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342"
+
+[[package]]
+name = "rustc-hash"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
+
+[[package]]
+name = "rustix"
+version = "0.38.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0c3dde1fc030af041adc40e79c0e7fbcf431dd24870053d187d7c66e4b87453"
+dependencies = [
+ "bitflags 2.4.0",
+ "errno",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys",
+]
+
+[[package]]
+name = "rustls"
+version = "0.21.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d1feddffcfcc0b33f5c6ce9a29e341e4cd59c3f78e7ee45f4a40c038b1d6cbb"
+dependencies = [
+ "log",
+ "ring",
+ "rustls-webpki",
+ "sct",
+]
+
+[[package]]
+name = "rustls-pemfile"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7522c9de787ff061458fe9a829dc790a3f5b22dc571694fc5883f448b94d9a9"
+dependencies = [
+ "base64 0.13.0",
+]
+
+[[package]]
+name = "rustls-webpki"
+version = "0.101.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "261e9e0888cba427c3316e6322805653c9425240b6fd96cee7cb671ab70ab8d0"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "rustversion"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24c8ad4f0c00e1eb5bc7614d236a7f1300e3dbd76b68cac8e06fb00b015ad8d8"
+
+[[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 = "scopeguard"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+
+[[package]]
+name = "sct"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.188"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf9e0fcba69a370eed61bcf2b728575f726b50b55cba78064753d708ddc7549e"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.188"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.28",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.106"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2cc66a619ed80bf7a0f6b17dd063a84b88f6dea1813737cf469aef1d081142c2"
+dependencies = [
+ "indexmap 2.0.0",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_path_to_error"
+version = "0.1.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4beec8bce849d58d06238cb50db2e1c417cfeafa4c63f692b15c82b7c80f8335"
+dependencies = [
+ "itoa",
+ "serde",
+]
+
+[[package]]
+name = "serde_spanned"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96426c9936fd7a0124915f9185ea1d20aa9445cc9821142f0a73bc9207a2e186"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde_urlencoded"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
+dependencies = [
+ "form_urlencoded",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "sharded-slab"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31"
+dependencies = [
+ "lazy_static",
+]
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "slab"
+version = "0.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2fd0db749597d91ff862fd1d55ea87f7855a744a8425a64695b6fca237d1dad1"
+
+[[package]]
+name = "socket2"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "socket2"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2538b18701741680e0322a2302176d3253a35388e2e62f172f64f4f16605f877"
+dependencies = [
+ "libc",
+ "windows-sys",
+]
+
+[[package]]
+name = "spin"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
+
+[[package]]
+name = "spin"
+version = "0.9.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
+dependencies = [
+ "lock_api",
+]
+
+[[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.104"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ae548ec36cf198c0ef7710d3c230987c2d6d7bd98ad6edc0274462724c585ce"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04361975b3f5e348b2189d8dc55bc942f278b2d482a6a0365de5bdd62d351567"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "tap"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369"
+
+[[package]]
+name = "terminal_size"
+version = "0.1.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "633c1a546cee861a1a6d0dc69ebeca693bf4296661ba7852b9d21d159e0506df"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd829fe32373d27f76265620b5309d0340cb8550f523c1dda251d6298069069a"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0396bc89e626244658bef819e22d0cc459e795a5ebe878e6ec336d1674a8d79a"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.104",
+]
+
+[[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 = "tokio"
+version = "1.32.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17ed6077ed6cd6c74735e21f37eb16dc3935f96878b1fe961074089cc80893f9"
+dependencies = [
+ "backtrace",
+ "bytes",
+ "libc",
+ "mio",
+ "num_cpus",
+ "parking_lot",
+ "pin-project-lite",
+ "signal-hook-registry",
+ "socket2 0.5.3",
+ "tokio-macros",
+ "windows-sys",
+]
+
+[[package]]
+name = "tokio-macros"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.28",
+]
+
+[[package]]
+name = "tokio-rustls"
+version = "0.24.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0d409377ff5b1e3ca6437aa86c1eb7d40c134bfec254e44c830defa92669db5"
+dependencies = [
+ "rustls",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-stream"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df54d54117d6fdc4e4fea40fe1e4e566b3505700e148a6827e59b34b0d2600d9"
+dependencies = [
+ "futures-core",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-tar"
+version = "0.3.0"
+source = "git+https://github.com/danielhuang/tokio-tar?rev=ac063a10224a9dcb16967e792c3075e0ee8bb1a7#ac063a10224a9dcb16967e792c3075e0ee8bb1a7"
+dependencies = [
+ "filetime",
+ "futures-core",
+ "libc",
+ "redox_syscall 0.2.13",
+ "tokio",
+ "tokio-stream",
+ "xattr",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.7.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-io",
+ "futures-sink",
+ "pin-project-lite",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "toml"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c226a7bba6d859b63c92c4b4fe69c5b6b72d0cb897dbc8e6012298e6154cb56e"
+dependencies = [
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "toml_edit",
+]
+
+[[package]]
+name = "toml_datetime"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ff63e60a958cefbb518ae1fd6566af80d9d4be430a33f3723dfc47d1d411d95"
+dependencies = [
+ "indexmap 2.0.0",
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "winnow",
+]
+
+[[package]]
+name = "tower-service"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
+
+[[package]]
+name = "tracing"
+version = "0.1.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf9cf6a813d3f40c88b0b6b6f29a5c95c6cdbf97c1f9cc53fb820200f5ad814d"
+dependencies = [
+ "pin-project-lite",
+ "tracing-attributes",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-attributes"
+version = "0.1.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f57e3ca2a01450b1a921183a9c9cbfda207fd822cef4ccb00a65402cbba7a74"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.28",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a"
+dependencies = [
+ "once_cell",
+ "valuable",
+]
+
+[[package]]
+name = "tracing-error"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d686ec1c0f384b1277f097b2f279a2ecc11afe8c133c1aabf036a27cb4cd206e"
+dependencies = [
+ "tracing",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "tracing-log"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922"
+dependencies = [
+ "lazy_static",
+ "log",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-subscriber"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77"
+dependencies = [
+ "matchers",
+ "nu-ansi-term",
+ "once_cell",
+ "regex",
+ "sharded-slab",
+ "smallvec",
+ "thread_local",
+ "tracing",
+ "tracing-core",
+ "tracing-log",
+]
+
+[[package]]
+name = "trust-dns-proto"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4f7f83d1e4a0e4358ac54c5c3681e5d7da5efc5a7a632c90bb6d6669ddd9bc26"
+dependencies = [
+ "async-trait",
+ "cfg-if",
+ "data-encoding",
+ "enum-as-inner",
+ "futures-channel",
+ "futures-io",
+ "futures-util",
+ "idna 0.2.3",
+ "ipnet",
+ "lazy_static",
+ "rand",
+ "smallvec",
+ "thiserror",
+ "tinyvec",
+ "tokio",
+ "tracing",
+ "url",
+]
+
+[[package]]
+name = "trust-dns-resolver"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aff21aa4dcefb0a1afbfac26deb0adc93888c7d295fb63ab273ef276ba2b7cfe"
+dependencies = [
+ "cfg-if",
+ "futures-util",
+ "ipconfig",
+ "lazy_static",
+ "lru-cache",
+ "parking_lot",
+ "resolv-conf",
+ "smallvec",
+ "thiserror",
+ "tokio",
+ "tracing",
+ "trust-dns-proto",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642"
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "15c61ba63f9235225a22310255a29b806b907c9b8c964bcbd0a2c70f3f2deea7"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-width"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973"
+
+[[package]]
+name = "untrusted"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
+
+[[package]]
+name = "url"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5"
+dependencies = [
+ "form_urlencoded",
+ "idna 0.4.0",
+ "percent-encoding",
+ "serde",
+]
+
+[[package]]
+name = "utf8parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
+
+[[package]]
+name = "valuable"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
+
+[[package]]
+name = "waker-fn"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca"
+
+[[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 = "want"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0"
+dependencies = [
+ "log",
+ "try-lock",
+]
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.81"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7c53b543413a17a202f4be280a7e5c62a1c69345f5de525ee64f8cfdbc954994"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.81"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5491a68ab4500fa6b4d726bd67408630c3dbe9c4fe7bda16d5c82a1fd8c7340a"
+dependencies = [
+ "bumpalo",
+ "lazy_static",
+ "log",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.104",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de9a9cec1733468a8c657e57fa2413d2ae2c0129b95e87c5b72b8ace4d13f31f"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.81"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c441e177922bc58f1e12c022624b6216378e5febc2f0533e41ba443d505b80aa"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.81"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d94ac45fcf608c1f45ef53e748d35660f168490c10b23704c7779ab8f5c3048"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.104",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.81"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a89911bd99e5f3659ec4acf9c4d93b0a90fe4a2a11f15328472058edc5261be"
+
+[[package]]
+name = "wasm-streams"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4609d447824375f43e1ffbc051b50ad8f4b3ae8219680c94452ea05eb240ac7"
+dependencies = [
+ "futures-util",
+ "js-sys",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+]
+
+[[package]]
+name = "web-sys"
+version = "0.3.58"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2fed94beee57daf8dd7d51f2b15dc2bcde92d7a72304cdf662a4371008b71b90"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "webpki-roots"
+version = "0.25.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14247bb57be4f377dfb94c72830b8ce8fc6beac03cf4bf7b9732eadd414123fc"
+
+[[package]]
+name = "which"
+version = "4.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7"
+dependencies = [
+ "either",
+ "home",
+ "once_cell",
+ "rustix",
+]
+
+[[package]]
+name = "widestring"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17882f045410753661207383517a6f62ec3dbeb6a4ed2acce01f0728238d1983"
+
+[[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"
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
+
+[[package]]
+name = "winnow"
+version = "0.5.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7c2e3184b9c4e92ad5167ca73039d0c42476302ab603e2fec4487511f38ccefc"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "winreg"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0120db82e8a1e0b9fb3345a539c478767c0048d842860994d96113d5b667bd69"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winreg"
+version = "0.50.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1"
+dependencies = [
+ "cfg-if",
+ "windows-sys",
+]
+
+[[package]]
+name = "xattr"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d1526bbe5aaeb5eb06885f4d987bcdfa5e23187055de9b83fe00156a821fabc"
+dependencies = [
+ "libc",
+]
diff --git a/nixpkgs/pkgs/development/tools/cotton/default.nix b/nixpkgs/pkgs/development/tools/cotton/default.nix
new file mode 100644
index 000000000000..57b4ef020581
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cotton/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, stdenv
+, CoreServices
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cotton";
+  version = "unstable-2023-09-13";
+
+  src = fetchFromGitHub {
+    owner = "danielhuang";
+    repo = pname;
+    rev = "df9d79a4b0bc4b140e87ddd7795924a93775a864";
+    sha256 = "sha256-ZMQaVMH8cuOb4PQ19g0pAFAMwP8bR60+eWFhiXk1bYE=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "node-semver-2.0.1-alpha.0" = "sha256-ldRQuJGo8gGc4fBD8E/J1aPJcwG7lg7jhwRvl/P2BbM=";
+      "tokio-tar-0.3.0" = "sha256-mD6bls4rGsJhu/W56C5VYgK4mzcSJ2DPOaPAbRLStT8=";
+    };
+  };
+
+  buildInputs = lib.optionals stdenv.isDarwin [ CoreServices ];
+
+  meta = with lib; {
+    description = "A package manager for JavaScript projects";
+    homepage = "https://github.com/danielhuang/cotton";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ dit7ya figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/coursier/default.nix b/nixpkgs/pkgs/development/tools/coursier/default.nix
new file mode 100644
index 000000000000..0e6a3453fd98
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/coursier/default.nix
@@ -0,0 +1,56 @@
+{ lib, stdenv, fetchurl, makeWrapper, jre, writeScript, common-updater-scripts
+, coreutils, git, gnused, nix, zlib }:
+
+let
+  libPath = lib.makeLibraryPath [
+    zlib # libz.so.1
+  ];
+in
+stdenv.mkDerivation rec {
+  pname = "coursier";
+  version = "2.1.8";
+
+  src = fetchurl {
+    url = "https://github.com/coursier/coursier/releases/download/v${version}/coursier";
+    hash = "sha256-fnd2/4ea411c/f3p/BzIHekoRYVznobJbBY4NGb1NwI=";
+  };
+
+  dontUnpack = true;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm555 $src $out/bin/cs
+    patchShebangs $out/bin/cs
+    wrapProgram $out/bin/cs \
+      --prefix PATH ":" ${lib.makeBinPath [ jre ]} \
+      --prefix LD_LIBRARY_PATH ":" ${libPath}
+
+    runHook postInstall
+  '';
+
+  passthru.updateScript = writeScript "update.sh" ''
+    #!${stdenv.shell}
+    set -o errexit
+    PATH=${lib.makeBinPath [ common-updater-scripts coreutils git gnused nix ]}
+    oldVersion="$(nix-instantiate --eval -E "with import ./. {}; lib.getVersion ${pname}" | tr -d '"')"
+    latestTag="$(git -c 'versionsort.suffix=-' ls-remote --exit-code --refs --sort='version:refname' --tags https://github.com/coursier/coursier.git 'v*.*.*' | tail --lines=1 | cut --delimiter='/' --fields=3 | sed 's|^v||g')"
+    if [ "$oldVersion" != "$latestTag" ]; then
+      nixpkgs="$(git rev-parse --show-toplevel)"
+      default_nix="$nixpkgs/pkgs/development/tools/coursier/default.nix"
+      update-source-version ${pname} "$latestTag" --version-key=version --print-changes
+    else
+      echo "${pname} is already up-to-date"
+    fi
+  '';
+
+  meta = with lib; {
+    homepage = "https://get-coursier.io/";
+    description = "Scala library to fetch dependencies from Maven / Ivy repositories";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ adelbertc nequissimus ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/cpm-cmake/default.nix b/nixpkgs/pkgs/development/tools/cpm-cmake/default.nix
new file mode 100644
index 000000000000..d0e4247795d2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cpm-cmake/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, stdenvNoCC
+, fetchFromGitHub
+}:
+
+stdenvNoCC.mkDerivation (finalAttrs: {
+  pname = "cpm-cmake";
+  version = "0.38.7";
+
+  src = fetchFromGitHub {
+    owner = "cpm-cmake";
+    repo = "cpm.cmake";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-tvqoGLGBvsPtIbPWG/5DH4IMzQTci3sjmF9dpInncWc=";
+  };
+
+  dontConfigure = true;
+  dontBuild = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/share/{,doc/}cpm
+    install -Dm644 cmake/CPM.cmake $out/share/cpm/CPM.cmake
+    install -Dm644 README.md CONTRIBUTING.md $out/share/doc/cpm/
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/cpm-cmake/CPM.cmake";
+    description = "CMake's missing package manager";
+    longDescription = ''
+      CPM.cmake is a cross-platform CMake script that adds dependency
+      management capabilities to CMake. It's built as a thin wrapper around
+      CMake's FetchContent module that adds version control, caching, a
+      simple API and more.
+    '';
+    license = licenses.mit;
+    maintainers = with maintainers; [ ];
+    platforms = platforms.all;
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/cppclean/default.nix b/nixpkgs/pkgs/development/tools/cppclean/default.nix
new file mode 100644
index 000000000000..460d7cddb83d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cppclean/default.nix
@@ -0,0 +1,31 @@
+{ lib, fetchFromGitHub, python3Packages }:
+
+with python3Packages;
+
+buildPythonApplication rec {
+  pname = "cppclean";
+  version = "0.13";
+
+  src = fetchFromGitHub {
+    owner  = "myint";
+    repo   = "cppclean";
+    rev    = "v${version}";
+    sha256 = "081bw7kkl7mh3vwyrmdfrk3fgq8k5laacx7hz8fjpchrvdrkqph0";
+  };
+
+  postUnpack = ''
+    patchShebangs .
+    '';
+
+  checkPhase = ''
+    ./test.bash
+    '';
+
+  meta = with lib; {
+    description = "Finds problems in C++ source that slow development of large code bases";
+    homepage    = "https://github.com/myint/cppclean";
+    license     = licenses.asl20;
+    maintainers = with maintainers; [ nthorne ];
+    platforms   = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/crd2pulumi/default.nix b/nixpkgs/pkgs/development/tools/crd2pulumi/default.nix
new file mode 100644
index 000000000000..b2f43c954b1c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/crd2pulumi/default.nix
@@ -0,0 +1,26 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "crd2pulumi";
+  version = "1.3.0";
+
+  src = fetchFromGitHub {
+    owner = "pulumi";
+    repo = "crd2pulumi";
+    rev = "v${version}";
+    sha256 = "sha256-UBfb6PI+Ivk6JxSBIHw4tN09BHN1J+un04mnR3ByDfc=";
+  };
+
+  vendorHash = "sha256-Fs43ITqfZYEcuRzm5bTTgmG/tWGIX9k8gdYBHmO4tMQ=";
+
+  ldflags = [ "-s" "-w" "-X github.com/pulumi/crd2pulumi/gen.Version=${src.rev}" ];
+
+  subPackages = [ "." ];
+
+  meta = with lib; {
+    description = "Generate typed CustomResources from a Kubernetes CustomResourceDefinition";
+    homepage = "https://github.com/pulumi/crd2pulumi";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ flokli ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/csvq/default.nix b/nixpkgs/pkgs/development/tools/csvq/default.nix
new file mode 100644
index 000000000000..d8438b85b815
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/csvq/default.nix
@@ -0,0 +1,23 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+buildGoModule rec {
+  pname = "csvq";
+  version = "1.18.1";
+
+  src = fetchFromGitHub {
+    owner = "mithrandie";
+    repo = "csvq";
+    rev = "v${version}";
+    sha256 = "sha256-1UK+LSMKryoUf2UWbGt8MU3zs5hH2WdpA2v/jBaIHYE=";
+  };
+
+  vendorHash = "sha256-byBYp+iNnnsAXR+T3XmdwaeeBG8oB1EgNkDabzgUC98=";
+
+  meta = with lib; {
+    description = "SQL-like query language for CSV";
+    homepage = "https://mithrandie.github.io/csvq/";
+    changelog = "https://github.com/mithrandie/csvq/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ tomodachi94 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ctlptl/default.nix b/nixpkgs/pkgs/development/tools/ctlptl/default.nix
new file mode 100644
index 000000000000..576b3095922a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ctlptl/default.nix
@@ -0,0 +1,37 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles }:
+
+buildGoModule rec {
+  pname = "ctlptl";
+  version = "0.8.26";
+
+  src = fetchFromGitHub {
+    owner = "tilt-dev";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-Qi9fN66YLow8TO/4GmJBIcj8CnH7jbpyryjnMG6yp0U=";
+  };
+
+  vendorHash = "sha256-gortoYTYGtvhM1XWVhI2bB+cKtbTADpKl5W9h1QSEPc=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X main.version=${version}"
+  ];
+
+  postInstall = ''
+    installShellCompletion --cmd ctlptl \
+      --bash <($out/bin/ctlptl completion bash) \
+      --fish <($out/bin/ctlptl completion fish) \
+      --zsh <($out/bin/ctlptl completion zsh)
+  '';
+
+  meta = with lib; {
+    description = "CLI for declaratively setting up local Kubernetes clusters";
+    homepage = "https://github.com/tilt-dev/ctlptl";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ svrana ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/cucumber/Gemfile b/nixpkgs/pkgs/development/tools/cucumber/Gemfile
new file mode 100644
index 000000000000..f738129eca4f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cucumber/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'cucumber'
diff --git a/nixpkgs/pkgs/development/tools/cucumber/Gemfile.lock b/nixpkgs/pkgs/development/tools/cucumber/Gemfile.lock
new file mode 100644
index 000000000000..56928d9368e9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cucumber/Gemfile.lock
@@ -0,0 +1,43 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    builder (3.2.4)
+    cucumber (9.1.0)
+      builder (~> 3.2, >= 3.2.4)
+      cucumber-ci-environment (~> 9.2, >= 9.2.0)
+      cucumber-core (~> 12.0)
+      cucumber-cucumber-expressions (~> 17.0)
+      cucumber-gherkin (>= 24, < 27)
+      cucumber-html-formatter (~> 20.4, >= 20.4.0)
+      cucumber-messages (>= 19, < 23)
+      diff-lcs (~> 1.5, >= 1.5.0)
+      mini_mime (~> 1.1, >= 1.1.5)
+      multi_test (~> 1.1, >= 1.1.0)
+      sys-uname (~> 1.2, >= 1.2.3)
+    cucumber-ci-environment (9.2.0)
+    cucumber-core (12.0.0)
+      cucumber-gherkin (>= 25, < 27)
+      cucumber-messages (>= 20, < 23)
+      cucumber-tag-expressions (~> 5.0, >= 5.0.4)
+    cucumber-cucumber-expressions (17.0.1)
+    cucumber-gherkin (26.2.0)
+      cucumber-messages (>= 19.1.4, < 22.1)
+    cucumber-html-formatter (20.4.0)
+      cucumber-messages (>= 18.0, < 22.1)
+    cucumber-messages (22.0.0)
+    cucumber-tag-expressions (5.0.6)
+    diff-lcs (1.5.0)
+    ffi (1.16.3)
+    mini_mime (1.1.5)
+    multi_test (1.1.0)
+    sys-uname (1.2.3)
+      ffi (~> 1.1)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  cucumber
+
+BUNDLED WITH
+   2.4.22
diff --git a/nixpkgs/pkgs/development/tools/cucumber/default.nix b/nixpkgs/pkgs/development/tools/cucumber/default.nix
new file mode 100644
index 000000000000..a7da4ab7d046
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cucumber/default.nix
@@ -0,0 +1,19 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "cucumber";
+  gemdir = ./.;
+  exes = [ "cucumber" ];
+
+  passthru.updateScript = bundlerUpdateScript "cucumber";
+
+  meta = with lib; {
+    description = "A tool for executable specifications";
+    homepage = "https://cucumber.io/";
+    changelog = "https://github.com/cucumber/cucumber-ruby/blob/main/CHANGELOG.md";
+    license = licenses.mit;
+    mainProgram = "cucumber";
+    maintainers = with maintainers; [ manveru nicknovitski anthonyroussel ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/cucumber/gemset.nix b/nixpkgs/pkgs/development/tools/cucumber/gemset.nix
new file mode 100644
index 000000000000..1f8f35f1098c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cucumber/gemset.nix
@@ -0,0 +1,147 @@
+{
+  builder = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "045wzckxpwcqzrjr353cxnyaxgf0qg22jh00dcx7z38cys5g1jlr";
+      type = "gem";
+    };
+    version = "3.2.4";
+  };
+  cucumber = {
+    dependencies = ["builder" "cucumber-ci-environment" "cucumber-core" "cucumber-cucumber-expressions" "cucumber-gherkin" "cucumber-html-formatter" "cucumber-messages" "diff-lcs" "mini_mime" "multi_test" "sys-uname"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0gmbbj4s4cv9aifks29q9w9yjcrvihcz1i8sijplwbps7334skv1";
+      type = "gem";
+    };
+    version = "9.1.0";
+  };
+  cucumber-ci-environment = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0a11b6w6khjb7rw7ksxdw4bprmg9gfc8xdrsbgv8767ri891s4lq";
+      type = "gem";
+    };
+    version = "9.2.0";
+  };
+  cucumber-core = {
+    dependencies = ["cucumber-gherkin" "cucumber-messages" "cucumber-tag-expressions"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ylxpganbvlzcd4picmgbs060cf0nlpkjc7lqxndyr6xaz2g99y2";
+      type = "gem";
+    };
+    version = "12.0.0";
+  };
+  cucumber-cucumber-expressions = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xyvg7l2y9b9gh682z47zcf1na179n8j7bwfyahp79w8s047660b";
+      type = "gem";
+    };
+    version = "17.0.1";
+  };
+  cucumber-gherkin = {
+    dependencies = ["cucumber-messages"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0in9cn9pza3vylc1mlpc3ivri493ikq7f9pnsjkfr6ahagacnh4i";
+      type = "gem";
+    };
+    version = "26.2.0";
+  };
+  cucumber-html-formatter = {
+    dependencies = ["cucumber-messages"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1al5cafzbiqd7fhwyvs0xcpjszav0q5816x9r02v3hzri10wvp5s";
+      type = "gem";
+    };
+    version = "20.4.0";
+  };
+  cucumber-messages = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "06d7dnixz68ivngf6qflmi6xrjshjyi85gmyjrl07pbmhqi6r2nh";
+      type = "gem";
+    };
+    version = "22.0.0";
+  };
+  cucumber-tag-expressions = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0rmbw044fdy2756ypnqray8abfxqvwrn1jhsdafdbjwihvvsk62f";
+      type = "gem";
+    };
+    version = "5.0.6";
+  };
+  diff-lcs = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0rwvjahnp7cpmracd8x732rjgnilqv2sx7d1gfrysslc3h039fa9";
+      type = "gem";
+    };
+    version = "1.5.0";
+  };
+  ffi = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1yvii03hcgqj30maavddqamqy50h7y6xcn2wcyq72wn823zl4ckd";
+      type = "gem";
+    };
+    version = "1.16.3";
+  };
+  mini_mime = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vycif7pjzkr29mfk4dlqv3disc5dn0va04lkwajlpr1wkibg0c6";
+      type = "gem";
+    };
+    version = "1.1.5";
+  };
+  multi_test = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "042d6a1416h3di57z107ygmjdgacrpyswi73ryz75yv3v36m1rg9";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  sys-uname = {
+    dependencies = ["ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "03j9qpqip89a0vk6s0gvhxzhbvafjcj5rss7i3jwha0831aivib3";
+      type = "gem";
+    };
+    version = "1.2.3";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/cue/default.nix b/nixpkgs/pkgs/development/tools/cue/default.nix
new file mode 100644
index 000000000000..1afee9cd7551
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cue/default.nix
@@ -0,0 +1,52 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+, installShellFiles
+, testers
+, cue
+}:
+
+buildGoModule rec {
+  pname = "cue";
+  version = "0.7.0";
+
+  src = fetchFromGitHub {
+    owner = "cue-lang";
+    repo = "cue";
+    rev = "v${version}";
+    hash = "sha256-L2KEOnUmQ6K+VtyJEha0LBWPVt+FqNh94gi3cMg82x0=";
+  };
+
+  vendorHash = "sha256-Eq51sydt2eu3pSCRjepvxpU01T0vr0axx9XEk34db28=";
+
+  subPackages = [ "cmd/cue" ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  ldflags = [ "-s" "-w" "-X cuelang.org/go/cmd/cue/cmd.version=${version}" ];
+
+  postInstall = ''
+    # Completions
+    installShellCompletion --cmd cue \
+      --bash <($out/bin/cue completion bash) \
+      --fish <($out/bin/cue completion fish) \
+      --zsh <($out/bin/cue completion zsh)
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/cue eval - <<<'a: "all good"' > /dev/null
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = cue;
+    command = "cue version";
+  };
+
+  meta = with lib;  {
+    description = "A data constraint language which aims to simplify tasks involving defining and using data";
+    homepage = "https://cuelang.org/";
+    license = lib.licenses.asl20;
+    maintainers = with maintainers; [ aaronjheng ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/cue/validator.nix b/nixpkgs/pkgs/development/tools/cue/validator.nix
new file mode 100644
index 000000000000..cddc3fe342b7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cue/validator.nix
@@ -0,0 +1,17 @@
+{ cue, writeShellScript, lib }:
+# `document` must be a fragment of definition or structure that the input data will be matched against.
+# `document` must exist in the Cue schema file provided (`cueSchemaFile`).
+# The result is a script that can be used to validate the input data (JSON/YAML and more can be supported depending on Cue)
+# against the fragment described by `document` or the whole definition.
+# The script will be strict and enforce concrete values, i.e. partial documents are not supported.
+cueSchemaFile: { document ? null }:
+  writeShellScript "validate-using-cue"
+  ''${cue}/bin/cue \
+      --all-errors \
+      --strict \
+      vet \
+      --concrete \
+      "$1" \
+      ${cueSchemaFile} \
+      ${lib.optionalString (document != null) "-d \"${document}\""}
+  ''
diff --git a/nixpkgs/pkgs/development/tools/cuelsp/default.nix b/nixpkgs/pkgs/development/tools/cuelsp/default.nix
new file mode 100644
index 000000000000..719c0bed271c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cuelsp/default.nix
@@ -0,0 +1,28 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "cuelsp";
+  version = "0.3.4";
+
+  src = fetchFromGitHub {
+    owner = "dagger";
+    repo = "cuelsp";
+    rev = "v${version}";
+    sha256 = "sha256-+E49TR2D26HSTwgwO1XFkIwXr5lmvv9l3KtR8dVT/cQ=";
+  };
+
+  vendorHash = "sha256-zg4aXPY2InY5VEX1GLJkGhMlfa5EezObAjIuX/bGvlc=";
+
+  doCheck = false;
+
+  subPackages = [
+    "cmd/cuelsp"
+  ];
+
+  meta = with lib; {
+    description = "Language Server implementation for CUE, with built-in support for Dagger";
+    homepage = "https://github.com/dagger/cuelsp";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ sagikazarmark ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/dapper/default.nix b/nixpkgs/pkgs/development/tools/dapper/default.nix
new file mode 100644
index 000000000000..c2b6066f61bd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/dapper/default.nix
@@ -0,0 +1,29 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "dapper";
+  version = "0.6.0";
+
+  src = fetchFromGitHub {
+    owner = "rancher";
+    repo = "dapper";
+    rev = "v${version}";
+    sha256 = "sha256-V+lHnOmIWjI1qmoJ7+pp+cGmJAtSeY+r2I9zykswQzM=";
+  };
+  vendorHash = null;
+
+  patchPhase = ''
+    substituteInPlace main.go --replace 0.0.0 ${version}
+  '';
+
+  meta = with lib; {
+    description = "Docker build wrapper";
+    homepage = "https://github.com/rancher/dapper";
+    license = licenses.asl20;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ kuznero ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/dapr/cli/default.nix b/nixpkgs/pkgs/development/tools/dapr/cli/default.nix
new file mode 100644
index 000000000000..e1290fd90757
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/dapr/cli/default.nix
@@ -0,0 +1,48 @@
+{ buildGoModule, fetchFromGitHub, installShellFiles, lib }:
+
+buildGoModule rec {
+  pname = "dapr-cli";
+  version = "1.12.0";
+
+  src = fetchFromGitHub {
+    owner = "dapr";
+    repo = "cli";
+    rev = "v${version}";
+    sha256 = "sha256-G2n6VGP3ncuZ9siXojr4gx0VacIkKSt4OSQo3ZOecr0=";
+  };
+
+  vendorHash = "sha256-/sdW1cDFpOMkXN4RXJQB1PpDbyNmTEOo9OrK5A7cRGQ=";
+
+  proxyVendor = true;
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  subPackages = [ "." ];
+
+  preCheck = ''
+    export HOME=$(mktemp -d)
+  '';
+
+  ldflags = [
+    "-X main.version=${version}"
+    "-X main.apiVersion=1.0"
+    "-X github.com/dapr/cli/pkg/standalone.gitcommit=${src.rev}"
+    "-X github.com/dapr/cli/pkg/standalone.gitversion=${version}"
+  ];
+
+  postInstall = ''
+    mv $out/bin/cli $out/bin/dapr
+
+    installShellCompletion --cmd dapr \
+      --bash <($out/bin/dapr completion bash) \
+      --zsh <($out/bin/dapr completion zsh)
+  '';
+
+  meta = with lib; {
+    description = "A CLI for managing Dapr, the distributed application runtime";
+    homepage = "https://dapr.io";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ joshvanl lucperkins ];
+    mainProgram = "dapr";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/darklua/default.nix b/nixpkgs/pkgs/development/tools/darklua/default.nix
new file mode 100644
index 000000000000..06679211bdee
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/darklua/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, stdenv
+, darwin
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "darklua";
+  version = "0.12.1";
+
+  src = fetchFromGitHub {
+    owner = "seaofvoices";
+    repo = "darklua";
+    rev = "v${version}";
+    hash = "sha256-hCyTsXSeingVRrohAGTzzcHoYv+hqOXPpWhBrbA70CA=";
+  };
+
+  cargoHash = "sha256-D274Dx3ad14VnJxQMhf//NEA7EIZZ1RFzFITI4YoJTc=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.CoreServices
+  ];
+
+
+  # error: linker `aarch64-linux-gnu-gcc` not found
+  postPatch = ''
+    rm .cargo/config.toml
+  '';
+
+  meta = with lib; {
+    description = "A command line tool that transforms Lua code";
+    homepage = "https://darklua.com";
+    changelog = "https://github.com/seaofvoices/darklua/blob/${src.rev}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ tomodachi94 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/apgdiff/default.nix b/nixpkgs/pkgs/development/tools/database/apgdiff/default.nix
new file mode 100644
index 000000000000..d96e3dbd99d0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/apgdiff/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, stdenvNoCC
+, fetchurl
+, makeWrapper
+, jre
+}:
+stdenvNoCC.mkDerivation (finalAttrs: {
+  version = "2.7.0";
+  pname = "apgdiff";
+
+  src = fetchurl {
+    url = "https://github.com/fordfrog/apgdiff/raw/release_${finalAttrs.version}/releases/apgdiff-${finalAttrs.version}.jar";
+    sha256 = "sha256-6OempDmedl6LOwP/s5y0hOIxGDWHd7qM7/opW3UwQ+I=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  buildCommand = ''
+    install -Dm644 $src $out/lib/apgdiff.jar
+
+    mkdir -p $out/bin
+    makeWrapper ${jre}/bin/java $out/bin/apgdiff \
+      --argv0 apgdiff \
+      --add-flags "-jar $out/lib/apgdiff.jar"
+  '';
+
+  meta = with lib; {
+    description = "Another PostgreSQL diff tool";
+    homepage = "https://apgdiff.com";
+    license = licenses.mit;
+    inherit (jre.meta) platforms;
+    sourceProvenance = [ sourceTypes.binaryBytecode ];
+    maintainers = [ maintainers.misterio77 ];
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/database/atlas/default.nix b/nixpkgs/pkgs/development/tools/database/atlas/default.nix
new file mode 100644
index 000000000000..7d275071ee4a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/atlas/default.nix
@@ -0,0 +1,46 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles, testers, atlas }:
+
+buildGoModule rec {
+  pname = "atlas";
+  version = "0.19.0";
+
+  src = fetchFromGitHub {
+    owner = "ariga";
+    repo = "atlas";
+    rev = "v${version}";
+    hash = "sha256-aTmEQFE+W8qRn7NlMYNr1yXYHLfmvg9Wrd8fzEeaYAo=";
+  };
+
+  modRoot = "cmd/atlas";
+
+  proxyVendor = true;
+  vendorHash = "sha256-/nrnTydFwIUEUR6ej2XW4GNysO41jHHtGDb9UBEIslU=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  ldflags = [ "-s" "-w" "-X ariga.io/atlas/cmd/atlas/internal/cmdapi.version=v${version}" ];
+
+  subPackages = [ "." ];
+
+  postInstall = ''
+    installShellCompletion --cmd atlas \
+      --bash <($out/bin/atlas completion bash) \
+      --fish <($out/bin/atlas completion fish) \
+      --zsh <($out/bin/atlas completion zsh)
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = atlas;
+    command = "atlas version";
+    version = "v${version}";
+  };
+
+  meta = with lib; {
+    description = "A modern tool for managing database schemas";
+    homepage = "https://atlasgo.io/";
+    changelog = "https://github.com/ariga/atlas/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = [ maintainers.marsam ];
+    mainProgram = "atlas";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/cdb/default.nix b/nixpkgs/pkgs/development/tools/database/cdb/default.nix
new file mode 100644
index 000000000000..b9ebba554774
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/cdb/default.nix
@@ -0,0 +1,58 @@
+{ stdenv, lib, fetchurl, fetchFromGitHub }:
+
+let
+  version = "0.75";
+  sha256 = "1iajg55n47hqxcpdzmyq4g4aprx7bzxcp885i850h355k5vmf68r";
+  # Please don’t forget to update the docs:
+  # clone https://github.com/Profpatsch/cdb-docs
+  # and create a pull request with the result of running
+  # ./update <version>
+  # from the repository’s root folder.
+  docRepo = fetchFromGitHub {
+    owner = "Profpatsch";
+    repo = "cdb-docs";
+    rev = "359b6c55c9e170ebfc88f3f38face8ae2315eacb";
+    sha256 = "1y0ivviy58i0pmavhvrpznc4yjigjknff298gnw9rkg5wxm0gbbq";
+  };
+
+in stdenv.mkDerivation {
+  pname = "cdb";
+  inherit version;
+
+  src = fetchurl {
+    url = "https://cr.yp.to/cdb/cdb-${version}.tar.gz";
+    inherit sha256;
+  };
+
+  outputs = [ "bin" "doc" "out" ];
+
+  postPatch = ''
+    # A little patch, borrowed from Archlinux AUR, borrowed from Gentoo Portage
+    sed -e 's/^extern int errno;$/#include <errno.h>/' -i error.h
+  '';
+
+  postInstall = ''
+    # don't use make setup, but move the binaries ourselves
+    mkdir -p $bin/bin
+    install -m 755 -t $bin/bin/ cdbdump cdbget cdbmake cdbmake-12 cdbmake-sv cdbstats cdbtest
+
+    # patch paths in scripts
+    function cdbmake-subst {
+      substituteInPlace $bin/bin/$1 \
+        --replace /usr/local/bin/cdbmake $bin/bin/cdbmake
+    }
+    cdbmake-subst cdbmake-12
+    cdbmake-subst cdbmake-sv
+
+    # docs
+    mkdir -p $doc/share/cdb
+    cp -r "${docRepo}/docs" $doc/share/cdb/html
+  '';
+
+  meta = {
+    homepage = "https://cr.yp.to/cdb.html";
+    license = lib.licenses.publicDomain;
+    maintainers = [ lib.maintainers.Profpatsch ];
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/clickhouse-backup/default.nix b/nixpkgs/pkgs/development/tools/database/clickhouse-backup/default.nix
new file mode 100644
index 000000000000..62a080cf95af
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/clickhouse-backup/default.nix
@@ -0,0 +1,40 @@
+{ buildGoModule
+, clickhouse-backup
+, fetchFromGitHub
+, lib
+, testers
+}:
+
+buildGoModule rec {
+  pname = "clickhouse-backup";
+  version = "2.4.28";
+
+  src = fetchFromGitHub {
+    owner = "AlexAkulov";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-lr2JntO8GcPYRnljjKM3+r67abufgE7izDLelhN1ze8=";
+  };
+
+  vendorHash = "sha256-kI2n7vNY7LQC2dLJL7b46X6Sk9ek3E66dSvEdYsxwI8=";
+
+  ldflags = [
+    "-X main.version=${version}"
+  ];
+
+  postConfigure = ''
+    export CGO_ENABLED=0
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = clickhouse-backup;
+  };
+
+  meta = with lib; {
+    description = "Tool for easy ClickHouse backup and restore with cloud storages support";
+    homepage = "https://github.com/AlexAkulov/clickhouse-backup";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/dblab/default.nix b/nixpkgs/pkgs/development/tools/database/dblab/default.nix
new file mode 100644
index 000000000000..cc4f6a9cfd8e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/dblab/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "dblab";
+  version = "0.21.0";
+
+  src = fetchFromGitHub {
+    owner = "danvergara";
+    repo = "dblab";
+    rev = "v${version}";
+    hash = "sha256-3Bmus2yVTwvy0CpoNE1mzVvocpBnRoI11Sf+x2JXhgM=";
+  };
+
+  vendorHash = "sha256-vf0CeiLBVqMGV2oqxRHzhvL7SoT9zcg8P5c63z3UR3g=";
+
+  ldflags = [ "-s -w -X main.version=${version}" ];
+
+  # some tests require network access
+  doCheck = false;
+
+  meta = with lib; {
+    description = "The database client every command line junkie deserves";
+    homepage = "https://github.com/danvergara/dblab";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dit7ya ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/dbmate/default.nix b/nixpkgs/pkgs/development/tools/database/dbmate/default.nix
new file mode 100644
index 000000000000..84bd8d8235f2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/dbmate/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "dbmate";
+  version = "2.11.0";
+
+  src = fetchFromGitHub {
+    owner = "amacneil";
+    repo = "dbmate";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-kY91ToCEl1bNdeIKDAAR3q7053oyFhx+THre7Syw96g=";
+  };
+
+  vendorHash = "sha256-z33Ayxc/ftNHh5zunDu0AlamuoSglX4aqOKQLuYT3+s=";
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Database migration tool";
+    homepage = "https://github.com/amacneil/dbmate";
+    changelog = "https://github.com/amacneil/dbmate/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ manveru ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/dynein/default.nix b/nixpkgs/pkgs/development/tools/database/dynein/default.nix
new file mode 100644
index 000000000000..af88654101c2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/dynein/default.nix
@@ -0,0 +1,48 @@
+{ fetchFromGitHub
+, lib
+, Security
+, openssl
+, pkg-config
+, rustPlatform
+, stdenv
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "dynein";
+  version = "0.2.1";
+
+  src = fetchFromGitHub {
+    owner = "awslabs";
+    repo = "dynein";
+    rev = "v${version}";
+    sha256 = "sha256-QhasTFGOFOjzNKdQtA+eBhKy51O4dFt6vpeIAIOM2rQ=";
+  };
+
+  # Use system openssl.
+  OPENSSL_NO_VENDOR = 1;
+
+  cargoHash = "sha256-QyhoYgqBfK6LCdtLuo0feVCgIMPueYeA8MMGspGLbGQ=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [ Security ];
+
+  preBuild = ''
+    export OPENSSL_DIR=${lib.getDev openssl}
+    export OPENSSL_LIB_DIR=${lib.getLib openssl}/lib
+  '';
+
+  # The integration tests will start downloading docker image of DynamoDB, which
+  # will naturally fail for nix build. The CLI tests do not need DynamoDB.
+  cargoTestFlags = [ "cli_tests" ];
+
+  meta = with lib; {
+    description = "DynamoDB CLI written in Rust";
+    homepage = "https://github.com/awslabs/dynein";
+    license = licenses.asl20;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ pimeys ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/ephemeralpg/default.nix b/nixpkgs/pkgs/development/tools/database/ephemeralpg/default.nix
new file mode 100644
index 000000000000..b50d22d76e78
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/ephemeralpg/default.nix
@@ -0,0 +1,22 @@
+{ lib, stdenv, fetchurl, postgresql, getopt, makeWrapper }:
+stdenv.mkDerivation rec {
+  pname = "ephemeralpg";
+  version = "3.3";
+  src = fetchurl {
+    url = "https://eradman.com/ephemeralpg/code/${pname}-${version}.tar.gz";
+    hash = "sha256-pVQrfSpwJnxCRXAUpZQZsb0Z/wlLbjdaYmhVevgHrgo=";
+  };
+  nativeBuildInputs = [ makeWrapper ];
+  installPhase = ''
+    mkdir -p $out
+    PREFIX=$out make install
+    wrapProgram $out/bin/pg_tmp --prefix PATH : ${lib.makeBinPath [ postgresql getopt ]}
+  '';
+  meta = with lib; {
+    description = "Run tests on an isolated, temporary PostgreSQL database";
+    license = licenses.isc;
+    homepage = "https://eradman.com/ephemeralpg/";
+    platforms = platforms.all;
+    maintainers = with maintainers; [ hrdinka medv ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/gobang/default.nix b/nixpkgs/pkgs/development/tools/database/gobang/default.nix
new file mode 100644
index 000000000000..b3611169996c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/gobang/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, stdenv
+, CoreFoundation
+, Security
+, SystemConfiguration
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "gobang";
+  version = "0.1.0-alpha.5";
+
+  src = fetchFromGitHub {
+    owner = "tako8ki";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "02glb3hlprpdc72ji0248a7g0vr36yxr0gfbbms2m25v251dyaa6";
+  };
+
+  cargoSha256 = "sha256-Tiefet5gLpiuYY6Scg5fjnaPiZfVl5Gy2oZFdhgNRxY=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    CoreFoundation
+    Security
+    SystemConfiguration
+  ];
+
+  meta = with lib; {
+    description = "A cross-platform TUI database management tool written in Rust";
+    homepage = "https://github.com/tako8ki/gobang";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/indradb/default.nix b/nixpkgs/pkgs/development/tools/database/indradb/default.nix
new file mode 100644
index 000000000000..50f4d3222129
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/indradb/default.nix
@@ -0,0 +1,56 @@
+{ stdenv
+, fetchFromGitHub
+, lib
+, rustPlatform
+, rustfmt
+, protobuf
+}:
+let
+  src = fetchFromGitHub {
+    owner = "indradb";
+    repo = "indradb";
+    rev = "06134dde5bb53eb1d2aaa52afdaf9ff3bf1aa674";
+    sha256 = "sha256-g4Jam7yxMc+piYQzgMvVsNTF+ce1U3thzYl/M9rKG4o=";
+  };
+
+  meta = with lib; {
+    description = "A graph database written in rust ";
+    homepage = "https://github.com/indradb/indradb";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ happysalada ];
+    platforms = platforms.unix;
+  };
+in
+{
+  indradb-server = rustPlatform.buildRustPackage {
+    pname = "indradb-server";
+    version = "unstable-2021-01-05";
+    inherit src meta;
+
+    cargoSha256 = "sha256-3WtiW31AkyNX7HiT/zqfNo2VSKR7Q57/wCigST066Js=";
+
+    buildAndTestSubdir = "server";
+
+    PROTOC = "${protobuf}/bin/protoc";
+
+    nativeBuildInputs = [ rustfmt rustPlatform.bindgenHook ];
+
+    # test rely on libindradb and it can't be found
+    # failure at https://github.com/indradb/indradb/blob/master/server/tests/plugins.rs#L63
+    # `let _server = Server::start(&format!("../target/debug/libindradb_plugin_*.{}", LIBRARY_EXTENSION)).unwrap();`
+    doCheck = false;
+  };
+  indradb-client = rustPlatform.buildRustPackage {
+    pname = "indradb-client";
+    version = "unstable-2021-01-05";
+    inherit src meta;
+
+    cargoSha256 = "sha256-pxan6W/CEsOxv8DbbytEBuIqxWn/C4qT4ze/RnvESOM=";
+
+    PROTOC = "${protobuf}/bin/protoc";
+
+    nativeBuildInputs = [ rustfmt rustPlatform.bindgenHook ];
+
+    buildAndTestSubdir = "client";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/liquibase/default.nix b/nixpkgs/pkgs/development/tools/database/liquibase/default.nix
new file mode 100644
index 000000000000..b9928c41ba60
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/liquibase/default.nix
@@ -0,0 +1,97 @@
+{ lib
+, stdenv
+, fetchurl
+, gitUpdater
+, jre
+, makeWrapper
+, mysqlSupport ? true
+, mysql_jdbc
+, postgresqlSupport ? true
+, postgresql_jdbc
+, redshiftSupport ? true
+, redshift_jdbc
+, liquibase_redshift_extension
+}:
+
+let
+  extraJars =
+    lib.optional mysqlSupport mysql_jdbc
+    ++ lib.optional postgresqlSupport postgresql_jdbc
+    ++ lib.optionals redshiftSupport [
+      redshift_jdbc
+      liquibase_redshift_extension
+    ];
+in
+
+stdenv.mkDerivation rec {
+  pname = "liquibase";
+  version = "4.25.1";
+
+  src = fetchurl {
+    url = "https://github.com/liquibase/liquibase/releases/download/v${version}/${pname}-${version}.tar.gz";
+    hash = "sha256-iyt6qOx1XU7lL6AhDNKiRP0W7WlfxKciRVYpUHdtKlY=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ jre ];
+
+  unpackPhase = ''
+    tar xfz ${src}
+  '';
+
+  installPhase =
+    let addJars = dir: ''
+      for jar in ${dir}/*.jar; do
+        CP="\$CP":"\$jar"
+      done
+    '';
+    in
+    ''
+      mkdir -p $out
+      mv ./{lib,licenses} $out/
+
+      mkdir -p $out/internal/lib
+      mv ./internal/lib/*.jar $out/internal/lib/
+
+      mkdir -p $out/share/doc/${pname}-${version}
+      mv LICENSE.txt \
+         README.txt \
+         ABOUT.txt \
+         changelog.txt \
+         $out/share/doc/${pname}-${version}
+
+      mkdir -p $out/bin
+      # there’s a lot of escaping, but I’m not sure how to improve that
+      cat > $out/bin/liquibase <<EOF
+      #!/usr/bin/env bash
+      # taken from the executable script in the source
+      CP=""
+      ${addJars "$out/internal/lib"}
+      ${addJars "$out/lib"}
+      ${addJars "$out"}
+      ${lib.concatStringsSep "\n" (map (p: addJars "${p}/share/java") extraJars)}
+      ${lib.getBin jre}/bin/java -cp "\$CP" \$JAVA_OPTS \
+      liquibase.integration.commandline.LiquibaseCommandLine \''${1+"\$@"}
+      EOF
+      chmod +x $out/bin/liquibase
+    '';
+
+  passthru.updateScript = gitUpdater {
+    url = "https://github.com/liquibase/liquibase";
+    rev-prefix = "v";
+    # The latest versions are in the 4.xx series.  I am not sure where
+    # 10.10.10 and 5.0.0 came from, though it appears like they are
+    # for the commercial product.
+    ignoredVersions = "10.10.10|5.0.0|.*-beta.*";
+  };
+
+  meta = with lib; {
+    description = "Version Control for your database";
+    homepage = "https://www.liquibase.org/";
+    changelog = "https://raw.githubusercontent.com/liquibase/liquibase/v${version}/changelog.txt";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.asl20;
+    maintainers = with maintainers; [ jsoo1 ];
+    platforms = with platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/litecli/default.nix b/nixpkgs/pkgs/development/tools/database/litecli/default.nix
new file mode 100644
index 000000000000..2cda1e05c609
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/litecli/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, python3Packages
+, fetchPypi
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "litecli";
+  version = "1.10.0";
+  disabled = python3Packages.pythonOlder "3.4";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-7p4qk9GTpVXA5mHtCDlDpvkyqcjowme2ibRp+ax6Pgw=";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    cli-helpers
+    click
+    configobj
+    prompt-toolkit
+    pygments
+    sqlparse
+  ];
+
+  nativeCheckInputs = with python3Packages; [
+    pytestCheckHook
+    mock
+  ];
+
+  pythonImportsCheck = [ "litecli" ];
+
+  disabledTests = [
+    "test_auto_escaped_col_names"
+  ];
+
+  meta = with lib; {
+    description = "Command-line interface for SQLite";
+    longDescription = ''
+      A command-line client for SQLite databases that has auto-completion and syntax highlighting.
+    '';
+    homepage = "https://litecli.com";
+    changelog = "https://github.com/dbcli/litecli/blob/v${version}/CHANGELOG.md";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ Scriptkiddi ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/litefs/default.nix b/nixpkgs/pkgs/development/tools/database/litefs/default.nix
new file mode 100644
index 000000000000..e3dbdd780cd8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/litefs/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "litefs";
+  version = "0.5.11";
+
+  src = fetchFromGitHub {
+    owner = "superfly";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-I12bKImZkvAMyfwb6r/NxE+BcUk+SalN+cIDXP0q4xA=";
+  };
+
+  vendorHash = "sha256-FcYPe4arb+jbxj4Tl6bRRAnkEvw0rkECIo8/zC79lOA=";
+
+  subPackages = [ "cmd/litefs" ];
+
+  # following https://github.com/superfly/litefs/blob/main/Dockerfile
+  ldflags = [
+    "-s"
+    "-w"
+    "-X main.Version=${version}"
+    "-extldflags=-static"
+  ];
+
+  tags = [
+    "osusergo"
+    "netgo"
+    "sqlite_omit_load_extension"
+  ];
+
+  doCheck = false; # fails
+
+  meta = with lib; {
+    description = "FUSE-based file system for replicating SQLite databases across a cluster of machines";
+    homepage = "https://github.com/superfly/litefs";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ dit7ya ];
+    mainProgram = "litefs";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/litestream/default.nix b/nixpkgs/pkgs/development/tools/database/litestream/default.nix
new file mode 100644
index 000000000000..27b37eff489b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/litestream/default.nix
@@ -0,0 +1,30 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+}:
+buildGoModule rec {
+  pname = "litestream";
+  version = "0.3.13";
+
+  src = fetchFromGitHub {
+    owner = "benbjohnson";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-p858gK+ICKDQ+/LUiBaxF/kfrZzQAXnYMZDFU8kNCJ4=";
+  };
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X main.Version=${version}"
+  ];
+
+  vendorHash = "sha256-sYIY3Z3VrCqbjEbQtEY7q6Jljg8jMoa2qWEB/IkDjzM=";
+
+  meta = with lib; {
+    description = "Streaming replication for SQLite";
+    license = licenses.asl20;
+    homepage = "https://litestream.io/";
+    maintainers = with maintainers; [ fbrs ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/mermerd/default.nix b/nixpkgs/pkgs/development/tools/database/mermerd/default.nix
new file mode 100644
index 000000000000..90f274d66113
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/mermerd/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, testers
+, mermerd
+}:
+
+buildGoModule rec {
+  pname = "mermerd";
+  version = "0.10.0";
+
+  src = fetchFromGitHub {
+    owner = "KarnerTh";
+    repo = "mermerd";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-SzDwVkV7rV/pctFNWzgCfsDAHqcf/R5UMRJ48o+Iel0=";
+  };
+
+  vendorHash = "sha256-rLOYJ/do4HSztnHrQZOUOG0Y3e3BupUGlijP5x8WtZc=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=main.version=${version}"
+    "-X=main.commit=${src.rev}"
+  ];
+
+  # the tests expect a database to be running
+  doCheck = false;
+
+  passthru.tests = {
+    version = testers.testVersion {
+      package = mermerd;
+      command = "mermerd version";
+    };
+  };
+
+  meta = with lib; {
+    description = "Create Mermaid-Js ERD diagrams from existing tables";
+    homepage = "https://github.com/KarnerTh/mermerd";
+    changelog = "https://github.com/KarnerTh/mermerd/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ austin-artificial ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/movine/default.nix b/nixpkgs/pkgs/development/tools/database/movine/default.nix
new file mode 100644
index 000000000000..a0342bcfc0a4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/movine/default.nix
@@ -0,0 +1,54 @@
+{ lib
+, rustPlatform
+, fetchCrate
+, pkg-config
+, openssl
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "movine";
+  version = "0.11.4";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-wa2GfV2Y8oX8G+1LbWnb2KH/+QbUYL9GXgOOVHpzbN8=";
+  };
+
+  cargoHash = "sha256-brM6QObhl9W5SZ+79Kv9oNxnglO24BUgjPSQy9jV1/Q=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  meta = with lib; {
+    description = "A migration manager written in Rust, that attempts to be smart yet minimal";
+    homepage = "https://github.com/byronwasti/movine";
+    license = licenses.mit;
+    longDescription = ''
+      Movine is a simple database migration manager that aims to be compatible
+      with real-world migration work. Many migration managers get confused
+      with complicated development strategies for migrations. Oftentimes
+      migration managers do not warn you if the SQL saved in git differs from
+      what was actually run on the database. Movine solves this issue by
+      keeping track of the unique hashes for the <literal>up.sql</literal> and
+      <literal>down.sql</literal> for each migration, and provides tools for
+      fixing issues. This allows users to easily keep track of whether their
+      local migration history matches the one on the database.
+
+      This project is currently in early stages.
+
+      Movine does not aim to be an ORM.
+      Consider <link xling:href="https://diesel.rs/">diesel</link> instead if
+      you want an ORM.
+    '';
+    maintainers = with maintainers; [ netcrns ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/pg_activity/default.nix b/nixpkgs/pkgs/development/tools/database/pg_activity/default.nix
new file mode 100644
index 000000000000..b6b543125195
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/pg_activity/default.nix
@@ -0,0 +1,31 @@
+{ python3Packages, fetchFromGitHub, lib }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "pg_activity";
+  version = "3.4.2";
+  disabled = python3Packages.pythonOlder "3.6";
+
+  src = fetchFromGitHub {
+    owner = "dalibo";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    sha256 = "sha256-7ML/xI1rQUqD9gm+1+yOdIesivAnl7fA8fgk67ru3Kc=";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    attrs
+    blessed
+    humanize
+    psutil
+    psycopg2
+  ];
+
+  pythonImportsCheck = [ "pgactivity" ];
+
+  meta = with lib; {
+    description = "A top like application for PostgreSQL server activity monitoring";
+    homepage = "https://github.com/dalibo/pg_activity";
+    license = licenses.postgresql;
+    maintainers = with maintainers; [ mausch ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/pg_checksums/default.nix b/nixpkgs/pkgs/development/tools/database/pg_checksums/default.nix
new file mode 100644
index 000000000000..b2d8b3fc05bd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/pg_checksums/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchFromGitHub, libxslt, docbook_xsl, postgresql }:
+
+stdenv.mkDerivation rec {
+  pname = "pg_checksums";
+  version = "1.1";
+
+  src = fetchFromGitHub {
+    owner = "credativ";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-Ij+4ceQauX3tC97ftk/JS3/WlocPBf7A7PJrylpTLzw=";
+  };
+
+  nativeBuildInputs = [ libxslt.bin ];
+
+  buildInputs = [ postgresql ];
+
+  buildFlags = [ "all" "man" ];
+
+  preConfigure = ''
+    substituteInPlace doc/stylesheet-man.xsl \
+      --replace "http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl" "${docbook_xsl}/xml/xsl/docbook/manpages/docbook.xsl"
+  '';
+
+  installPhase = ''
+    install -Dm755 -t $out/bin pg_checksums_ext
+    install -Dm644 -t $out/share/man/man1 doc/man1/pg_checksums_ext.1
+  '';
+
+  meta = with lib; {
+    description = "Activate/deactivate/verify checksums in offline PostgreSQL clusters";
+    homepage = "https://github.com/credativ/pg_checksums";
+    maintainers = [ maintainers.marsam ];
+    mainProgram = "pg_checksums_ext";
+    platforms = postgresql.meta.platforms;
+    license = licenses.postgresql;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/pgagroal/default.nix b/nixpkgs/pkgs/development/tools/database/pgagroal/default.nix
new file mode 100644
index 000000000000..e86e19f8f2e1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/pgagroal/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub, cmake, docutils, libev, openssl, systemd }:
+
+stdenv.mkDerivation rec {
+  pname = "pgagroal";
+  version = "1.5.1";
+
+  src = fetchFromGitHub {
+    owner = "agroal";
+    repo = "pgagroal";
+    rev = version;
+    hash = "sha256-d6icEYlk0qnzmoP/mvSmTw16YfIYWc2WbY7sKguX7Ug=";
+  };
+
+  patches = [ ./do-not-search-libatomic.patch ];
+
+  nativeBuildInputs = [ cmake docutils ];
+
+  buildInputs = [ libev openssl systemd ];
+
+  meta = with lib; {
+    description = "High-performance connection pool for PostgreSQL";
+    homepage = "https://agroal.github.io/pgagroal/";
+    license = licenses.bsd3;
+    maintainers = [ maintainers.marsam ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/pgagroal/do-not-search-libatomic.patch b/nixpkgs/pkgs/development/tools/database/pgagroal/do-not-search-libatomic.patch
new file mode 100644
index 000000000000..7f65205332b8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/pgagroal/do-not-search-libatomic.patch
@@ -0,0 +1,15 @@
+--- i/CMakeLists.txt
++++ w/CMakeLists.txt
+@@ -78,12 +78,6 @@
+ endif()
+ 
+ if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
+-  find_package(Libatomic)
+-  if (LIBATOMIC_FOUND)
+-    message(STATUS "libatomic found")
+-  else ()
+-    message(FATAL_ERROR "libatomic needed")
+-  endif()
+ 
+   find_package(Systemd)
+   if (SYSTEMD_FOUND)
diff --git a/nixpkgs/pkgs/development/tools/database/pgsync/Gemfile b/nixpkgs/pkgs/development/tools/database/pgsync/Gemfile
new file mode 100644
index 000000000000..f87a033ad7db
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/pgsync/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'pgsync'
diff --git a/nixpkgs/pkgs/development/tools/database/pgsync/Gemfile.lock b/nixpkgs/pkgs/development/tools/database/pgsync/Gemfile.lock
new file mode 100644
index 000000000000..e27726b69db7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/pgsync/Gemfile.lock
@@ -0,0 +1,23 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    parallel (1.22.1)
+    pg (1.4.6)
+    pgsync (0.7.4)
+      parallel
+      pg (>= 0.18.2)
+      slop (>= 4.10.1)
+      tty-spinner
+    slop (4.10.1)
+    tty-cursor (0.7.1)
+    tty-spinner (0.9.3)
+      tty-cursor (~> 0.7)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  pgsync
+
+BUNDLED WITH
+   2.4.6
diff --git a/nixpkgs/pkgs/development/tools/database/pgsync/default.nix b/nixpkgs/pkgs/development/tools/database/pgsync/default.nix
new file mode 100644
index 000000000000..7e075784f122
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/pgsync/default.nix
@@ -0,0 +1,16 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp rec {
+  gemdir = ./.;
+  pname = "pgsync";
+  exes = [ "pgsync" ];
+
+  passthru.updateScript = bundlerUpdateScript "pgsync";
+
+  meta = with lib; {
+    description = "Sync data from one Postgres database to another (like `pg_dump`/`pg_restore`)";
+    homepage    = "https://github.com/ankane/pgsync";
+    license     = with licenses; mit;
+    maintainers = with maintainers; [ fabianhjr ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/pgsync/gemset.nix b/nixpkgs/pkgs/development/tools/database/pgsync/gemset.nix
new file mode 100644
index 000000000000..a18ec0613f18
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/pgsync/gemset.nix
@@ -0,0 +1,64 @@
+{
+  parallel = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "07vnk6bb54k4yc06xnwck7php50l09vvlw1ga8wdz0pia461zpzb";
+      type = "gem";
+    };
+    version = "1.22.1";
+  };
+  pg = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "07m6lxljabw9kyww5k5lgsxsznsm1v5l14r1la09gqka9b5kv3yr";
+      type = "gem";
+    };
+    version = "1.4.6";
+  };
+  pgsync = {
+    dependencies = ["parallel" "pg" "slop" "tty-spinner"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1f2lzsa7l88skp18f8w1ch9w8a42pymc48rdaqjrrdgg0126kvj3";
+      type = "gem";
+    };
+    version = "0.7.4";
+  };
+  slop = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1iyrjskgxyn8i1679qwkzns85p909aq77cgx2m4fs5ygzysj4hw4";
+      type = "gem";
+    };
+    version = "4.10.1";
+  };
+  tty-cursor = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0j5zw041jgkmn605ya1zc151bxgxl6v192v2i26qhxx7ws2l2lvr";
+      type = "gem";
+    };
+    version = "0.7.1";
+  };
+  tty-spinner = {
+    dependencies = ["tty-cursor"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0hh5awmijnzw9flmh5ak610x1d00xiqagxa5mbr63ysggc26y0qf";
+      type = "gem";
+    };
+    version = "0.9.3";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/pgweb/default.nix b/nixpkgs/pkgs/development/tools/database/pgweb/default.nix
new file mode 100644
index 000000000000..ef0f64a73a17
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/pgweb/default.nix
@@ -0,0 +1,55 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, testers
+, pgweb
+}:
+
+buildGoModule rec {
+  pname = "pgweb";
+  version = "0.14.3";
+
+  src = fetchFromGitHub {
+    owner = "sosedoff";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-We7MyKOdauf93tBihvjouEiZ4FnkvsUtfJpswK6ef7Q=";
+  };
+
+  postPatch = ''
+    # Disable tests require network access.
+    rm -f pkg/client/{client,dump}_test.go
+  '';
+
+  vendorHash = "sha256-Jpvf6cST3kBvYzCQLoJ1fijUC/hP1ouptd2bQZ1J/Lo=";
+
+  ldflags = [ "-s" "-w" ];
+
+  checkFlags =
+    let
+      skippedTests = [
+        # There is a `/tmp/foo` file on the test machine causing the test case to fail on macOS
+        "TestParseOptions"
+      ];
+    in
+    [ "-skip" "${builtins.concatStringsSep "|" skippedTests}" ];
+
+    passthru.tests.version = testers.testVersion {
+      version = "v${version}";
+      package = pgweb;
+      command = "pgweb --version";
+    };
+
+  meta = with lib; {
+    changelog = "https://github.com/sosedoff/pgweb/releases/tag/v${version}";
+    description = "A web-based database browser for PostgreSQL";
+    longDescription = ''
+      A simple postgres browser that runs as a web server. You can view data,
+      run queries and examine tables and indexes.
+    '';
+    homepage = "https://sosedoff.github.io/pgweb/";
+    license = licenses.mit;
+    mainProgram = "pgweb";
+    maintainers = with maintainers; [ zupo luisnquin ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/prisma-engines/Cargo.lock b/nixpkgs/pkgs/development/tools/database/prisma-engines/Cargo.lock
new file mode 100644
index 000000000000..573e31eababd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/prisma-engines/Cargo.lock
@@ -0,0 +1,6370 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "addr2line"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4fa78e18c64fce05e902adecd7a5eed15a5e0a3439f7b0e169f0252214865e3"
+dependencies = [
+ "gimli",
+]
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "ahash"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47"
+dependencies = [
+ "getrandom 0.2.10",
+ "once_cell",
+ "version_check",
+]
+
+[[package]]
+name = "ahash"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+ "version_check",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "0.7.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "86b8f9420f797f2d9e935edf629310eb938a0d839f984e25327f3c7eed22300c"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "allocator-api2"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5"
+
+[[package]]
+name = "android-tzdata"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
+
+[[package]]
+name = "android_system_properties"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "anes"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299"
+
+[[package]]
+name = "ansi_term"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.72"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b13c32d80ecc7ab747b80c3784bce54ee8a7a0cc4fbda9bf4cda2cf6fe90854"
+
+[[package]]
+name = "arrayvec"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b"
+
+[[package]]
+name = "arrayvec"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711"
+
+[[package]]
+name = "ascii"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eab1c04a571841102f5345a8fc0f6bb3d31c315dec879b5c6e42e40ce7ffa34e"
+
+[[package]]
+name = "async-native-tls"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d57d4cec3c647232e1094dc013546c0b33ce785d8aeb251e1f20dfaf8a9a13fe"
+dependencies = [
+ "futures-util",
+ "native-tls",
+ "thiserror",
+ "url",
+]
+
+[[package]]
+name = "async-stream"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51"
+dependencies = [
+ "async-stream-impl",
+ "futures-core",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "async-stream-impl"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.28",
+]
+
+[[package]]
+name = "async-trait"
+version = "0.1.72"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc6dde6e4ed435a4c1ee4e73592f5ba9da2151af10076cc04858746af9352d09"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.28",
+]
+
+[[package]]
+name = "asynchronous-codec"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4057f2c32adbb2fc158e22fb38433c8e9bbf76b75a4732c7c0cbaf695fb65568"
+dependencies = [
+ "bytes",
+ "futures-sink",
+ "futures-util",
+ "memchr",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "atomic-shim"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67cd4b51d303cf3501c301e8125df442128d3c6d7c69f71b27833d253de47e77"
+dependencies = [
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi 0.1.19",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "backtrace"
+version = "0.3.68"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4319208da049c43661739c5fade2ba182f09d1dc2299b32298d3a31692b17e12"
+dependencies = [
+ "addr2line",
+ "cc",
+ "cfg-if",
+ "libc",
+ "miniz_oxide",
+ "object",
+ "rustc-demangle",
+]
+
+[[package]]
+name = "barrel"
+version = "0.6.6-alpha.0"
+source = "git+https://github.com/prisma/barrel.git?branch=mssql-support#4e84cf3d5013b4c92eb81d7ba90cd1c1c01c6805"
+
+[[package]]
+name = "base-x"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4cbbc9d0964165b47557570cce6c952866c2678457aca742aafc9fb771d30270"
+
+[[package]]
+name = "base36"
+version = "0.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9c26bddc1271f7112e5ec797e8eeba6de2de211c1488e506b9500196dbf77c5"
+dependencies = [
+ "base-x",
+ "failure",
+]
+
+[[package]]
+name = "base64"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff"
+
+[[package]]
+name = "base64"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
+
+[[package]]
+name = "base64"
+version = "0.21.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d"
+
+[[package]]
+name = "bigdecimal"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a6773ddc0eafc0e509fb60e48dff7f450f8e674a0686ae8605e8d9901bd5eefa"
+dependencies = [
+ "num-bigint",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "bindgen"
+version = "0.59.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2bd2a9a458e8f4304c52c43ebb0cfbd520289f8379a52e329a38afda99bf8eb8"
+dependencies = [
+ "bitflags 1.3.2",
+ "cexpr",
+ "clang-sys",
+ "lazy_static",
+ "lazycell",
+ "peeking_take_while",
+ "proc-macro2",
+ "quote",
+ "regex",
+ "rustc-hash",
+ "shlex",
+]
+
+[[package]]
+name = "bit-vec"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bitflags"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635"
+
+[[package]]
+name = "bitvec"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c"
+dependencies = [
+ "funty",
+ "radium",
+ "tap",
+ "wyz",
+]
+
+[[package]]
+name = "black-box-tests"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "enumflags2",
+ "indoc 2.0.3",
+ "insta",
+ "query-engine-metrics",
+ "query-engine-tests",
+ "query-tests-setup",
+ "regex",
+ "reqwest",
+ "serde_json",
+ "tokio",
+ "user-facing-errors",
+]
+
+[[package]]
+name = "block-buffer"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "block-buffer"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "borsh"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4114279215a005bc675e386011e594e1d9b800918cea18fcadadcce864a2046b"
+dependencies = [
+ "borsh-derive",
+ "hashbrown 0.13.2",
+]
+
+[[package]]
+name = "borsh-derive"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0754613691538d51f329cce9af41d7b7ca150bc973056f1156611489475f54f7"
+dependencies = [
+ "borsh-derive-internal",
+ "borsh-schema-derive-internal",
+ "proc-macro-crate",
+ "proc-macro2",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "borsh-derive-internal"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "afb438156919598d2c7bad7e1c0adf3d26ed3840dbc010db1a882a65583ca2fb"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "borsh-schema-derive-internal"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "634205cc43f74a1b9046ef87c4540ebda95696ec0f315024860cad7c5b0f5ccd"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "bson"
+version = "2.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9aeb8bae494e49dbc330dd23cf78f6f7accee22f640ce3ab17841badaa4ce232"
+dependencies = [
+ "ahash 0.7.6",
+ "base64 0.13.1",
+ "bitvec",
+ "chrono",
+ "hex",
+ "indexmap 1.9.3",
+ "js-sys",
+ "lazy_static",
+ "rand 0.8.5",
+ "serde",
+ "serde_bytes",
+ "serde_json",
+ "time 0.3.25",
+ "uuid",
+]
+
+[[package]]
+name = "bstr"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "builtin-psl-connectors"
+version = "0.1.0"
+dependencies = [
+ "connection-string",
+ "either",
+ "enumflags2",
+ "indoc 2.0.3",
+ "lsp-types",
+ "once_cell",
+ "psl-core",
+ "regex",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1"
+
+[[package]]
+name = "bytecheck"
+version = "0.6.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b6372023ac861f6e6dc89c8344a8f398fb42aaba2b5dbc649ca0c0e9dbcb627"
+dependencies = [
+ "bytecheck_derive",
+ "ptr_meta",
+ "simdutf8",
+]
+
+[[package]]
+name = "bytecheck_derive"
+version = "0.6.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a7ec4c6f261935ad534c0c22dbef2201b45918860eb1c574b972bd213a76af61"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "byteorder"
+version = "1.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
+
+[[package]]
+name = "bytes"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be"
+
+[[package]]
+name = "cast"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5"
+
+[[package]]
+name = "cc"
+version = "1.0.82"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "305fe645edc1442a0fa8b6726ba61d422798d37a52e12eaecf4b022ebbb88f01"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "cexpr"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766"
+dependencies = [
+ "nom",
+]
+
+[[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.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec837a71355b28f6556dbd569b37b3f363091c0bd4b2e735674521b4c5fd9bc5"
+dependencies = [
+ "android-tzdata",
+ "iana-time-zone",
+ "js-sys",
+ "num-traits",
+ "serde",
+ "time 0.1.43",
+ "wasm-bindgen",
+ "winapi",
+]
+
+[[package]]
+name = "ciborium"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "effd91f6c78e5a4ace8a5d3c0b6bfaec9e2baaef55f3efc00e45fb2e477ee926"
+dependencies = [
+ "ciborium-io",
+ "ciborium-ll",
+ "serde",
+]
+
+[[package]]
+name = "ciborium-io"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cdf919175532b369853f5d5e20b26b43112613fd6fe7aee757e35f7a44642656"
+
+[[package]]
+name = "ciborium-ll"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "defaa24ecc093c77630e6c15e17c51f5e187bf35ee514f4e2d67baaa96dae22b"
+dependencies = [
+ "ciborium-io",
+ "half",
+]
+
+[[package]]
+name = "clang-sys"
+version = "1.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c688fc74432808e3eb684cae8830a86be1d66a2bd58e1f248ed0960a590baf6f"
+dependencies = [
+ "glob",
+ "libc",
+ "libloading",
+]
+
+[[package]]
+name = "clap"
+version = "2.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c"
+dependencies = [
+ "ansi_term",
+ "atty",
+ "bitflags 1.3.2",
+ "strsim 0.8.0",
+ "textwrap 0.11.0",
+ "unicode-width",
+ "vec_map",
+]
+
+[[package]]
+name = "clap"
+version = "3.2.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ea181bf566f71cb9a5d17a59e1871af638180a18fb0035c92ae62b705207123"
+dependencies = [
+ "bitflags 1.3.2",
+ "clap_lex",
+ "indexmap 1.9.3",
+ "textwrap 0.16.0",
+]
+
+[[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 = "cmake"
+version = "0.1.50"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a31c789563b815f77f4250caee12365734369f942439b7defd71e18a48197130"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "codspeed"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2042d58652a59f53ee0d7f61435b6760b63a9c09a598c7044a8c8b1a0a352afe"
+dependencies = [
+ "colored",
+ "libc",
+]
+
+[[package]]
+name = "codspeed-criterion-compat"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93201017af114a2ef3df75212aa456aa1a981673d84aa18555014bb89c2a7262"
+dependencies = [
+ "codspeed",
+ "colored",
+ "criterion",
+]
+
+[[package]]
+name = "colored"
+version = "2.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2674ec482fbc38012cf31e6c42ba0177b431a0cb6f15fe40efa5aab1bda516f6"
+dependencies = [
+ "is-terminal",
+ "lazy_static",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "combine"
+version = "3.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da3da6baa321ec19e1cc41d31bf599f00c783d0517095cdaf0332e3fe8d20680"
+dependencies = [
+ "ascii",
+ "byteorder",
+ "either",
+ "memchr",
+ "unreachable",
+]
+
+[[package]]
+name = "connection-string"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "510ca239cf13b7f8d16a2b48f263de7b4f8c566f0af58d901031473c76afb1e3"
+
+[[package]]
+name = "console"
+version = "0.15.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c926e00cc70edefdc64d3a5ff31cc65bb97a3460097762bd23afb4d8145fccf8"
+dependencies = [
+ "encode_unicode",
+ "lazy_static",
+ "libc",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "console_error_panic_hook"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "convert_case"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e"
+
+[[package]]
+name = "convert_case"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca"
+dependencies = [
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "core-foundation"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
+
+[[package]]
+name = "core-tests"
+version = "0.1.0"
+dependencies = [
+ "dissimilar",
+ "psl",
+ "query-core",
+ "request-handlers",
+ "schema",
+ "serde_json",
+ "user-facing-errors",
+]
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crc32fast"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "criterion"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7c76e09c1aae2bc52b3d2f29e13c6572553b30c4aa1b8a49fd70de6412654cb"
+dependencies = [
+ "anes",
+ "atty",
+ "cast",
+ "ciborium",
+ "clap 3.2.25",
+ "criterion-plot",
+ "itertools",
+ "lazy_static",
+ "num-traits",
+ "oorandom",
+ "plotters",
+ "rayon",
+ "regex",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "tinytemplate",
+ "walkdir",
+]
+
+[[package]]
+name = "criterion-plot"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1"
+dependencies = [
+ "cast",
+ "itertools",
+]
+
+[[package]]
+name = "crossbeam"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2801af0d36612ae591caa9568261fddce32ce6e08a7275ea334a06a4ad021a2c"
+dependencies = [
+ "cfg-if",
+ "crossbeam-channel",
+ "crossbeam-deque",
+ "crossbeam-epoch",
+ "crossbeam-queue",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200"
+dependencies = [
+ "cfg-if",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
+dependencies = [
+ "cfg-if",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7"
+dependencies = [
+ "autocfg",
+ "cfg-if",
+ "crossbeam-utils",
+ "memoffset",
+ "scopeguard",
+]
+
+[[package]]
+name = "crossbeam-queue"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d1cfb3ea8a53f37c40dea2c7bedcbd88bdfae54f5e2175d6ecaff1c988353add"
+dependencies = [
+ "cfg-if",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "crypto-common"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+dependencies = [
+ "generic-array",
+ "typenum",
+]
+
+[[package]]
+name = "ctor"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f34ba9a9bcb8645379e9de8cb3ecfcf4d1c85ba66d90deb3259206fa5aa193b"
+dependencies = [
+ "quote",
+ "syn 2.0.28",
+]
+
+[[package]]
+name = "cuid"
+version = "1.3.2"
+source = "git+https://github.com/prisma/cuid-rust?branch=wasm32-support#81309f9a11f70d178bb545971d51ceb7da692c52"
+dependencies = [
+ "base36",
+ "cuid-util",
+ "cuid2",
+ "num",
+ "once_cell",
+ "rand 0.8.5",
+ "sha3",
+]
+
+[[package]]
+name = "cuid-util"
+version = "0.1.0"
+source = "git+https://github.com/prisma/cuid-rust?branch=wasm32-support#81309f9a11f70d178bb545971d51ceb7da692c52"
+
+[[package]]
+name = "cuid2"
+version = "0.1.2"
+source = "git+https://github.com/prisma/cuid-rust?branch=wasm32-support#81309f9a11f70d178bb545971d51ceb7da692c52"
+dependencies = [
+ "cuid-util",
+ "num",
+ "rand 0.8.5",
+ "sha3",
+]
+
+[[package]]
+name = "darling"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d706e75d87e35569db781a9b5e2416cff1236a47ed380831f959382ccd5f858"
+dependencies = [
+ "darling_core 0.10.2",
+ "darling_macro 0.10.2",
+]
+
+[[package]]
+name = "darling"
+version = "0.13.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c"
+dependencies = [
+ "darling_core 0.13.4",
+ "darling_macro 0.13.4",
+]
+
+[[package]]
+name = "darling_core"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0c960ae2da4de88a91b2d920c2a7233b400bc33cb28453a2987822d8392519b"
+dependencies = [
+ "fnv",
+ "ident_case",
+ "proc-macro2",
+ "quote",
+ "strsim 0.9.3",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "darling_core"
+version = "0.13.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610"
+dependencies = [
+ "fnv",
+ "ident_case",
+ "proc-macro2",
+ "quote",
+ "strsim 0.10.0",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "darling_macro"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b5a2f4ac4969822c62224815d069952656cadc7084fdca9751e6d959189b72"
+dependencies = [
+ "darling_core 0.10.2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "darling_macro"
+version = "0.13.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835"
+dependencies = [
+ "darling_core 0.13.4",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "dashmap"
+version = "5.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6943ae99c34386c84a470c499d3414f66502a41340aa895406e0d2e4a207b91d"
+dependencies = [
+ "cfg-if",
+ "hashbrown 0.14.0",
+ "lock_api",
+ "once_cell",
+ "parking_lot_core 0.9.8",
+]
+
+[[package]]
+name = "data-encoding"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308"
+
+[[package]]
+name = "datamodel-renderer"
+version = "0.1.0"
+dependencies = [
+ "base64 0.13.1",
+ "expect-test",
+ "indoc 2.0.3",
+ "once_cell",
+ "psl",
+ "regex",
+]
+
+[[package]]
+name = "deranged"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7684a49fb1af197853ef7b2ee694bc1f5b4179556f1e5710e1760c5db6f5e929"
+
+[[package]]
+name = "derivative"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "derive_more"
+version = "0.99.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321"
+dependencies = [
+ "convert_case 0.4.0",
+ "proc-macro2",
+ "quote",
+ "rustc_version 0.4.0",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "diagnostics"
+version = "0.1.0"
+dependencies = [
+ "colored",
+ "indoc 2.0.3",
+ "pest",
+]
+
+[[package]]
+name = "diff"
+version = "0.1.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8"
+
+[[package]]
+name = "digest"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "digest"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
+dependencies = [
+ "block-buffer 0.10.4",
+ "crypto-common",
+ "subtle",
+]
+
+[[package]]
+name = "dissimilar"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "86e3bdc80eee6e16b2b6b0f87fbc98c04bee3455e35174c0de1a125d0688c632"
+
+[[package]]
+name = "dmmf"
+version = "0.1.0"
+dependencies = [
+ "bigdecimal",
+ "colored",
+ "expect-test",
+ "flate2",
+ "indexmap 1.9.3",
+ "indoc 2.0.3",
+ "itertools",
+ "pretty_assertions",
+ "prisma-models",
+ "psl",
+ "schema",
+ "serde",
+ "serde_json",
+ "similar",
+]
+
+[[package]]
+name = "driver-adapters"
+version = "0.1.0"
+dependencies = [
+ "async-trait",
+ "bigdecimal",
+ "chrono",
+ "expect-test",
+ "futures",
+ "metrics 0.18.1",
+ "napi",
+ "napi-derive",
+ "num-bigint",
+ "once_cell",
+ "psl",
+ "quaint",
+ "serde",
+ "serde_json",
+ "tokio",
+ "tracing",
+ "tracing-core",
+ "uuid",
+]
+
+[[package]]
+name = "either"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
+
+[[package]]
+name = "encode_unicode"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
+
+[[package]]
+name = "encoding"
+version = "0.2.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b0d943856b990d12d3b55b359144ff341533e516d94098b1d3fc1ac666d36ec"
+dependencies = [
+ "encoding-index-japanese",
+ "encoding-index-korean",
+ "encoding-index-simpchinese",
+ "encoding-index-singlebyte",
+ "encoding-index-tradchinese",
+]
+
+[[package]]
+name = "encoding-index-japanese"
+version = "1.20141219.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04e8b2ff42e9a05335dbf8b5c6f7567e5591d0d916ccef4e0b1710d32a0d0c91"
+dependencies = [
+ "encoding_index_tests",
+]
+
+[[package]]
+name = "encoding-index-korean"
+version = "1.20141219.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4dc33fb8e6bcba213fe2f14275f0963fd16f0a02c878e3095ecfdf5bee529d81"
+dependencies = [
+ "encoding_index_tests",
+]
+
+[[package]]
+name = "encoding-index-simpchinese"
+version = "1.20141219.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d87a7194909b9118fc707194baa434a4e3b0fb6a5a757c73c3adb07aa25031f7"
+dependencies = [
+ "encoding_index_tests",
+]
+
+[[package]]
+name = "encoding-index-singlebyte"
+version = "1.20141219.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3351d5acffb224af9ca265f435b859c7c01537c0849754d3db3fdf2bfe2ae84a"
+dependencies = [
+ "encoding_index_tests",
+]
+
+[[package]]
+name = "encoding-index-tradchinese"
+version = "1.20141219.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd0e20d5688ce3cab59eb3ef3a2083a5c77bf496cb798dc6fcdb75f323890c18"
+dependencies = [
+ "encoding_index_tests",
+]
+
+[[package]]
+name = "encoding_index_tests"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a246d82be1c9d791c5dfde9a2bd045fc3cbba3fa2b11ad558f27d01712f00569"
+
+[[package]]
+name = "encoding_rs"
+version = "0.8.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "endian-type"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d"
+
+[[package]]
+name = "enum-as-inner"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21cdad81446a7f7dc43f6a77409efeb9733d2fa65553efef6018ef257c959b73"
+dependencies = [
+ "heck 0.4.1",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "enumflags2"
+version = "0.7.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c041f5090df68b32bcd905365fd51769c8b9d553fe87fde0b683534f10c01bd2"
+dependencies = [
+ "enumflags2_derive",
+ "serde",
+]
+
+[[package]]
+name = "enumflags2_derive"
+version = "0.7.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e9a1f9f7d83e59740248a6e14ecf93929ade55027844dfcea78beafccc15745"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.28",
+]
+
+[[package]]
+name = "equivalent"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
+
+[[package]]
+name = "errno"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b30f669a7961ef1631673d2766cc92f52d64f7ef354d4fe0ddfd30ed52f0f4f"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "errno-dragonfly"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "expect-test"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30d9eafeadd538e68fb28016364c9732d78e420b9ff8853fa5e4058861e9f8d3"
+dependencies = [
+ "dissimilar",
+ "once_cell",
+]
+
+[[package]]
+name = "failure"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d32e9bd16cc02eae7db7ef620b392808b89f6a5e16bb3497d159c6b92a0f4f86"
+dependencies = [
+ "backtrace",
+ "failure_derive",
+]
+
+[[package]]
+name = "failure_derive"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa4da3c766cd7a0db8242e326e9e4e081edd567072893ed320008189715366a4"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "synstructure",
+]
+
+[[package]]
+name = "fallible-iterator"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7"
+
+[[package]]
+name = "fallible-streaming-iterator"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a"
+
+[[package]]
+name = "fastrand"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6999dc1837253364c2ebb0704ba97994bd874e8f195d665c50b7548f6ea92764"
+
+[[package]]
+name = "fixedbitset"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "86d4de0081402f5e88cdac65c8dcdcc73118c1a7a465e2a05f0da05843a8ea33"
+
+[[package]]
+name = "fixedbitset"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80"
+
+[[package]]
+name = "flate2"
+version = "1.0.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743"
+dependencies = [
+ "crc32fast",
+ "libz-sys",
+ "miniz_oxide",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "foreign-types"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+dependencies = [
+ "foreign-types-shared",
+]
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "frunk"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "11a351b59e12f97b4176ee78497dff72e4276fb1ceb13e19056aca7fa0206287"
+dependencies = [
+ "frunk_core",
+ "frunk_derives",
+ "frunk_proc_macros",
+]
+
+[[package]]
+name = "frunk_core"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af2469fab0bd07e64ccf0ad57a1438f63160c69b2e57f04a439653d68eb558d6"
+
+[[package]]
+name = "frunk_derives"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0fa992f1656e1707946bbba340ad244f0814009ef8c0118eb7b658395f19a2e"
+dependencies = [
+ "frunk_proc_macro_helpers",
+ "quote",
+ "syn 2.0.28",
+]
+
+[[package]]
+name = "frunk_proc_macro_helpers"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35b54add839292b743aeda6ebedbd8b11e93404f902c56223e51b9ec18a13d2c"
+dependencies = [
+ "frunk_core",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.28",
+]
+
+[[package]]
+name = "frunk_proc_macros"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "71b85a1d4a9a6b300b41c05e8e13ef2feca03e0334127f29eca9506a7fe13a93"
+dependencies = [
+ "frunk_core",
+ "frunk_proc_macro_helpers",
+ "quote",
+ "syn 2.0.28",
+]
+
+[[package]]
+name = "fuchsia-cprng"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba"
+
+[[package]]
+name = "funty"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c"
+
+[[package]]
+name = "futures"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-io",
+ "futures-sink",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c"
+
+[[package]]
+name = "futures-executor"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-io"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964"
+
+[[package]]
+name = "futures-macro"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.28",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e"
+
+[[package]]
+name = "futures-task"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65"
+
+[[package]]
+name = "futures-timer"
+version = "3.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c"
+
+[[package]]
+name = "futures-util"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-macro",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.1.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi 0.9.0+wasi-snapshot-preview1",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "libc",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "gimli"
+version = "0.27.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e"
+
+[[package]]
+name = "glob"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
+
+[[package]]
+name = "gloo-utils"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "037fcb07216cb3a30f7292bd0176b050b7b9a052ba830ef7d5d65f6dc64ba58e"
+dependencies = [
+ "js-sys",
+ "serde",
+ "serde_json",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "graphql-parser"
+version = "0.3.0"
+source = "git+https://github.com/prisma/graphql-parser#6a3f58bd879065588e710cb02b5bd30c1ce182c3"
+dependencies = [
+ "combine",
+ "indexmap 1.9.3",
+ "thiserror",
+]
+
+[[package]]
+name = "h2"
+version = "0.3.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97ec8491ebaf99c8eaa73058b045fe58073cd6be7f596ac993ced0b0a0c01049"
+dependencies = [
+ "bytes",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "http",
+ "indexmap 1.9.3",
+ "slab",
+ "tokio",
+ "tokio-util 0.7.8",
+ "tracing",
+]
+
+[[package]]
+name = "half"
+version = "1.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7"
+
+[[package]]
+name = "hashbrown"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e"
+dependencies = [
+ "ahash 0.7.6",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+dependencies = [
+ "ahash 0.7.6",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.13.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e"
+dependencies = [
+ "ahash 0.8.3",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a"
+dependencies = [
+ "ahash 0.8.3",
+ "allocator-api2",
+]
+
+[[package]]
+name = "hashlink"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "312f66718a2d7789ffef4f4b7b213138ed9f1eb3aa1d0d82fc99f88fb3ffd26f"
+dependencies = [
+ "hashbrown 0.14.0",
+]
+
+[[package]]
+name = "heck"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
+dependencies = [
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "heck"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b"
+
+[[package]]
+name = "hex"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
+
+[[package]]
+name = "hmac"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
+dependencies = [
+ "digest 0.10.7",
+]
+
+[[package]]
+name = "hostname"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867"
+dependencies = [
+ "libc",
+ "match_cfg",
+ "winapi",
+]
+
+[[package]]
+name = "html-escape"
+version = "0.2.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d1ad449764d627e22bfd7cd5e8868264fc9236e07c752972b4080cd351cb476"
+dependencies = [
+ "utf8-width",
+]
+
+[[package]]
+name = "http"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482"
+dependencies = [
+ "bytes",
+ "fnv",
+ "itoa",
+]
+
+[[package]]
+name = "http-body"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
+dependencies = [
+ "bytes",
+ "http",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "httparse"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
+
+[[package]]
+name = "httpdate"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421"
+
+[[package]]
+name = "hyper"
+version = "0.14.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468"
+dependencies = [
+ "bytes",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "httparse",
+ "httpdate",
+ "itoa",
+ "pin-project-lite",
+ "socket2 0.4.9",
+ "tokio",
+ "tower-service",
+ "tracing",
+ "want",
+]
+
+[[package]]
+name = "hyper-timeout"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1"
+dependencies = [
+ "hyper",
+ "pin-project-lite",
+ "tokio",
+ "tokio-io-timeout",
+]
+
+[[package]]
+name = "hyper-tls"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905"
+dependencies = [
+ "bytes",
+ "hyper",
+ "native-tls",
+ "tokio",
+ "tokio-native-tls",
+]
+
+[[package]]
+name = "iana-time-zone"
+version = "0.1.57"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys",
+ "iana-time-zone-haiku",
+ "js-sys",
+ "wasm-bindgen",
+ "windows",
+]
+
+[[package]]
+name = "iana-time-zone-haiku"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "ident_case"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
+
+[[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 = "idna"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
+dependencies = [
+ "autocfg",
+ "hashbrown 0.12.3",
+ "serde",
+]
+
+[[package]]
+name = "indexmap"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d"
+dependencies = [
+ "equivalent",
+ "hashbrown 0.14.0",
+]
+
+[[package]]
+name = "indoc"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "47741a8bc60fb26eb8d6e0238bbb26d8575ff623fdc97b1a2c00c050b9684ed8"
+dependencies = [
+ "indoc-impl",
+ "proc-macro-hack",
+]
+
+[[package]]
+name = "indoc"
+version = "2.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c785eefb63ebd0e33416dfcb8d6da0bf27ce752843a45632a67bf10d4d4b5c4"
+
+[[package]]
+name = "indoc-impl"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce046d161f000fffde5f432a0d034d0341dc152643b2598ed5bfce44c4f3a8f0"
+dependencies = [
+ "proc-macro-hack",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "unindent",
+]
+
+[[package]]
+name = "insta"
+version = "1.21.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "261bf85ed492cd1c47c9ba675e48649682a9d2d2e77f515c5386d7726fb0ba76"
+dependencies = [
+ "console",
+ "lazy_static",
+ "linked-hash-map",
+ "similar",
+ "yaml-rust",
+]
+
+[[package]]
+name = "instant"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "ipconfig"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f"
+dependencies = [
+ "socket2 0.5.3",
+ "widestring",
+ "windows-sys 0.48.0",
+ "winreg 0.50.0",
+]
+
+[[package]]
+name = "ipnet"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6"
+
+[[package]]
+name = "is-terminal"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b"
+dependencies = [
+ "hermit-abi 0.3.2",
+ "rustix",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "itertools"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
+
+[[package]]
+name = "js-sys"
+version = "0.3.61"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "json-rpc-api-build"
+version = "0.1.0"
+dependencies = [
+ "backtrace",
+ "heck 0.3.3",
+ "serde",
+ "toml",
+]
+
+[[package]]
+name = "jsonrpc-core"
+version = "17.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4467ab6dfa369b69e52bd0692e480c4d117410538526a57a304a0f2250fd95e"
+dependencies = [
+ "futures",
+ "futures-executor",
+ "futures-util",
+ "log",
+ "serde",
+ "serde_derive",
+ "serde_json",
+]
+
+[[package]]
+name = "keccak"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f6d5ed8676d904364de097082f4e7d240b571b67989ced0240f08b7f966f940"
+dependencies = [
+ "cpufeatures",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "lazycell"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
+
+[[package]]
+name = "lexical"
+version = "6.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c7aefb36fd43fef7003334742cbf77b243fcd36418a1d1bdd480d613a67968f6"
+dependencies = [
+ "lexical-core",
+]
+
+[[package]]
+name = "lexical-core"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2cde5de06e8d4c2faabc400238f9ae1c74d5412d03a7bd067645ccbc47070e46"
+dependencies = [
+ "lexical-parse-float",
+ "lexical-parse-integer",
+ "lexical-util",
+ "lexical-write-float",
+ "lexical-write-integer",
+]
+
+[[package]]
+name = "lexical-parse-float"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "683b3a5ebd0130b8fb52ba0bdc718cc56815b6a097e28ae5a6997d0ad17dc05f"
+dependencies = [
+ "lexical-parse-integer",
+ "lexical-util",
+ "static_assertions",
+]
+
+[[package]]
+name = "lexical-parse-integer"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d0994485ed0c312f6d965766754ea177d07f9c00c9b82a5ee62ed5b47945ee9"
+dependencies = [
+ "lexical-util",
+ "static_assertions",
+]
+
+[[package]]
+name = "lexical-util"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5255b9ff16ff898710eb9eb63cb39248ea8a5bb036bea8085b1a767ff6c4e3fc"
+dependencies = [
+ "static_assertions",
+]
+
+[[package]]
+name = "lexical-write-float"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accabaa1c4581f05a3923d1b4cfd124c329352288b7b9da09e766b0668116862"
+dependencies = [
+ "lexical-util",
+ "lexical-write-integer",
+ "static_assertions",
+]
+
+[[package]]
+name = "lexical-write-integer"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1b6f3d1f4422866b68192d62f77bc5c700bee84f3069f2469d7bc8c77852446"
+dependencies = [
+ "lexical-util",
+ "static_assertions",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.147"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3"
+
+[[package]]
+name = "libloading"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f"
+dependencies = [
+ "cfg-if",
+ "winapi",
+]
+
+[[package]]
+name = "libsqlite3-sys"
+version = "0.26.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "afc22eff61b133b115c6e8c74e818c628d6d5e7a502afea6f64dee076dd94326"
+dependencies = [
+ "cc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "libz-sys"
+version = "1.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d97137b25e321a73eef1418d1d5d2eda4d77e12813f8e6dead84bc52c5870a7b"
+dependencies = [
+ "cc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "linked-hash-map"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57bcfdad1b858c2db7c38303a6d2ad4dfaf5eb53dfeb0910128b2c26d6158503"
+
+[[package]]
+name = "lock_api"
+version = "0.4.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16"
+dependencies = [
+ "autocfg",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4"
+
+[[package]]
+name = "lru"
+version = "0.7.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e999beba7b6e8345721bd280141ed958096a2e4abdf74f67ff4ce49b4b54e47a"
+dependencies = [
+ "hashbrown 0.12.3",
+]
+
+[[package]]
+name = "lru"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6e8aaa3f231bb4bd57b84b2d5dc3ae7f350265df8aa96492e0bc394a1571909"
+dependencies = [
+ "hashbrown 0.12.3",
+]
+
+[[package]]
+name = "lru-cache"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c"
+dependencies = [
+ "linked-hash-map",
+]
+
+[[package]]
+name = "lsp-types"
+version = "0.91.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2368312c59425dd133cb9a327afee65be0a633a8ce471d248e2202a48f8f68ae"
+dependencies = [
+ "bitflags 1.3.2",
+ "serde",
+ "serde_json",
+ "serde_repr",
+ "url",
+]
+
+[[package]]
+name = "mach"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "match_cfg"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4"
+
+[[package]]
+name = "matchers"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558"
+dependencies = [
+ "regex-automata 0.1.10",
+]
+
+[[package]]
+name = "matches"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5"
+
+[[package]]
+name = "md-5"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6365506850d44bff6e2fbcb5176cf63650e48bd45ef2fe2665ae1570e0f4b9ca"
+dependencies = [
+ "digest 0.10.7",
+]
+
+[[package]]
+name = "md5"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e6bcd6433cff03a4bfc3d9834d504467db1f1cf6d0ea765d37d330249ed629d"
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "memoffset"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "metrics"
+version = "0.18.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e52eb6380b6d2a10eb3434aec0885374490f5b82c8aaf5cd487a183c98be834"
+dependencies = [
+ "ahash 0.7.6",
+ "metrics-macros",
+]
+
+[[package]]
+name = "metrics"
+version = "0.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "142c53885123b68d94108295a09d4afe1a1388ed95b54d5dacd9a454753030f2"
+dependencies = [
+ "ahash 0.7.6",
+ "metrics-macros",
+]
+
+[[package]]
+name = "metrics-exporter-prometheus"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "953cbbb6f9ba4b9304f4df79b98cdc9d14071ed93065a9fca11c00c5d9181b66"
+dependencies = [
+ "hyper",
+ "indexmap 1.9.3",
+ "ipnet",
+ "metrics 0.19.0",
+ "metrics-util 0.13.0",
+ "parking_lot 0.11.2",
+ "quanta",
+ "thiserror",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "metrics-macros"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49e30813093f757be5cf21e50389a24dc7dbb22c49f23b7e8f51d69b508a5ffa"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "metrics-util"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "65a9e83b833e1d2e07010a386b197c13aa199bbd0fca5cf69bfa147972db890a"
+dependencies = [
+ "aho-corasick 0.7.20",
+ "atomic-shim",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+ "hashbrown 0.11.2",
+ "indexmap 1.9.3",
+ "metrics 0.18.1",
+ "num_cpus",
+ "ordered-float",
+ "parking_lot 0.11.2",
+ "quanta",
+ "radix_trie",
+ "sketches-ddsketch",
+]
+
+[[package]]
+name = "metrics-util"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd1f4b69bef1e2b392b2d4a12902f2af90bb438ba4a66aa222d1023fa6561b50"
+dependencies = [
+ "atomic-shim",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+ "hashbrown 0.11.2",
+ "metrics 0.19.0",
+ "num_cpus",
+ "parking_lot 0.11.2",
+ "quanta",
+ "sketches-ddsketch",
+]
+
+[[package]]
+name = "mime"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
+
+[[package]]
+name = "minimal-lexical"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "mio"
+version = "0.8.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2"
+dependencies = [
+ "libc",
+ "log",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "mobc"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90eb49dc5d193287ff80e72a86f34cfb27aae562299d22fea215e06ea1059dd3"
+dependencies = [
+ "async-trait",
+ "futures-channel",
+ "futures-core",
+ "futures-timer",
+ "futures-util",
+ "log",
+ "metrics 0.18.1",
+ "thiserror",
+ "tokio",
+ "tracing",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "mongodb"
+version = "2.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ebcd85ec209a5b84fd9f54b9e381f6fa17462bc74160d018fc94fd8b9f61faa8"
+dependencies = [
+ "async-trait",
+ "base64 0.13.1",
+ "bitflags 1.3.2",
+ "bson",
+ "chrono",
+ "derivative",
+ "derive_more",
+ "futures-core",
+ "futures-executor",
+ "futures-io",
+ "futures-util",
+ "hex",
+ "hmac",
+ "lazy_static",
+ "md-5",
+ "pbkdf2",
+ "percent-encoding",
+ "rand 0.8.5",
+ "rustc_version_runtime",
+ "rustls 0.20.8",
+ "rustls-pemfile",
+ "serde",
+ "serde_bytes",
+ "serde_with",
+ "sha-1",
+ "sha2 0.10.7",
+ "socket2 0.4.9",
+ "stringprep",
+ "strsim 0.10.0",
+ "take_mut",
+ "thiserror",
+ "tokio",
+ "tokio-rustls 0.23.4",
+ "tokio-util 0.7.8",
+ "trust-dns-proto",
+ "trust-dns-resolver",
+ "typed-builder",
+ "uuid",
+ "webpki-roots",
+]
+
+[[package]]
+name = "mongodb-client"
+version = "0.1.0"
+dependencies = [
+ "mongodb",
+ "once_cell",
+ "percent-encoding",
+ "thiserror",
+]
+
+[[package]]
+name = "mongodb-query-connector"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "async-trait",
+ "bigdecimal",
+ "bson",
+ "chrono",
+ "cuid",
+ "futures",
+ "indexmap 1.9.3",
+ "itertools",
+ "mongodb",
+ "mongodb-client",
+ "prisma-models",
+ "prisma-value",
+ "psl",
+ "query-connector",
+ "query-engine-metrics",
+ "rand 0.7.3",
+ "regex",
+ "serde",
+ "serde_json",
+ "thiserror",
+ "tokio",
+ "tracing",
+ "tracing-futures",
+ "user-facing-errors",
+ "uuid",
+]
+
+[[package]]
+name = "mongodb-schema-connector"
+version = "0.1.0"
+dependencies = [
+ "convert_case 0.6.0",
+ "datamodel-renderer",
+ "dissimilar",
+ "enumflags2",
+ "expect-test",
+ "futures",
+ "indoc 2.0.3",
+ "mongodb",
+ "mongodb-client",
+ "mongodb-schema-describer",
+ "names 0.12.0",
+ "once_cell",
+ "psl",
+ "regex",
+ "schema-connector",
+ "serde",
+ "serde_json",
+ "tokio",
+ "tracing",
+ "url",
+ "user-facing-errors",
+]
+
+[[package]]
+name = "mongodb-schema-describer"
+version = "0.1.0"
+dependencies = [
+ "futures",
+ "mongodb",
+ "serde",
+]
+
+[[package]]
+name = "multimap"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a"
+
+[[package]]
+name = "mysql_async"
+version = "0.31.3"
+source = "git+https://github.com/prisma/mysql_async?branch=vendored-openssl#dad187b50dc7e8ce2b61fec126822e8e172a9c8a"
+dependencies = [
+ "bytes",
+ "crossbeam",
+ "flate2",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "lazy_static",
+ "lru 0.8.1",
+ "mio",
+ "mysql_common",
+ "native-tls",
+ "once_cell",
+ "pem",
+ "percent-encoding",
+ "pin-project",
+ "priority-queue",
+ "serde",
+ "serde_json",
+ "socket2 0.4.9",
+ "thiserror",
+ "tokio",
+ "tokio-native-tls",
+ "tokio-util 0.7.8",
+ "twox-hash",
+ "url",
+]
+
+[[package]]
+name = "mysql_common"
+version = "0.29.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9006c95034ccf7b903d955f210469119f6c3477fc9c9e7a7845ce38a3e665c2a"
+dependencies = [
+ "base64 0.13.1",
+ "bigdecimal",
+ "bindgen",
+ "bitflags 1.3.2",
+ "bitvec",
+ "byteorder",
+ "bytes",
+ "cc",
+ "cmake",
+ "crc32fast",
+ "flate2",
+ "frunk",
+ "lazy_static",
+ "lexical",
+ "num-bigint",
+ "num-traits",
+ "rand 0.8.5",
+ "regex",
+ "rust_decimal",
+ "saturating",
+ "serde",
+ "serde_json",
+ "sha1",
+ "sha2 0.10.7",
+ "smallvec",
+ "subprocess",
+ "thiserror",
+ "time 0.3.25",
+ "uuid",
+]
+
+[[package]]
+name = "names"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef320dab323286b50fb5cdda23f61c796a72a89998ab565ca32525c5c556f2da"
+dependencies = [
+ "rand 0.3.23",
+]
+
+[[package]]
+name = "names"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "10a8690bf09abf659851e58cd666c3d37ac6af07c2bd7a9e332cfba471715775"
+dependencies = [
+ "rand 0.8.5",
+]
+
+[[package]]
+name = "nanoid"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3ffa00dec017b5b1a8b7cf5e2c008bfda1aa7e0697ac1508b491fdf2622fb4d8"
+dependencies = [
+ "rand 0.8.5",
+]
+
+[[package]]
+name = "napi"
+version = "2.13.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ede2d12cd6fce44da537a4be1f5510c73be2506c2e32dfaaafd1f36968f3a0e"
+dependencies = [
+ "bitflags 2.4.0",
+ "ctor",
+ "napi-derive",
+ "napi-sys",
+ "once_cell",
+ "serde",
+ "serde_json",
+ "tokio",
+]
+
+[[package]]
+name = "napi-build"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ebd4419172727423cf30351406c54f6cc1b354a2cfb4f1dba3e6cd07f6d5522b"
+
+[[package]]
+name = "napi-derive"
+version = "2.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da1c6a8fa84d549aa8708fcd062372bf8ec6e849de39016ab921067d21bde367"
+dependencies = [
+ "cfg-if",
+ "convert_case 0.6.0",
+ "napi-derive-backend",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "napi-derive-backend"
+version = "1.0.52"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "20bbc7c69168d06a848f925ec5f0e0997f98e8c8d4f2cc30157f0da51c009e17"
+dependencies = [
+ "convert_case 0.6.0",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "regex",
+ "semver 1.0.18",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "napi-sys"
+version = "2.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "166b5ef52a3ab5575047a9fe8d4a030cdd0f63c96f071cd6907674453b07bae3"
+dependencies = [
+ "libloading",
+]
+
+[[package]]
+name = "native-tls"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e"
+dependencies = [
+ "lazy_static",
+ "libc",
+ "log",
+ "openssl",
+ "openssl-probe",
+ "openssl-sys",
+ "schannel",
+ "security-framework",
+ "security-framework-sys",
+ "tempfile",
+]
+
+[[package]]
+name = "nibble_vec"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77a5d83df9f36fe23f0c3648c6bbb8b0298bb5f1939c8f2704431371f4b84d43"
+dependencies = [
+ "smallvec",
+]
+
+[[package]]
+name = "nom"
+version = "7.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
+dependencies = [
+ "memchr",
+ "minimal-lexical",
+]
+
+[[package]]
+name = "nu-ansi-term"
+version = "0.46.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84"
+dependencies = [
+ "overload",
+ "winapi",
+]
+
+[[package]]
+name = "num"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b05180d69e3da0e530ba2a1dae5110317e49e3b7f3d41be227dc5f92e49ee7af"
+dependencies = [
+ "num-bigint",
+ "num-complex",
+ "num-integer",
+ "num-iter",
+ "num-rational",
+ "num-traits",
+]
+
+[[package]]
+name = "num-bigint"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-complex"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "02e0d21255c828d6f128a1e41534206671e8c3ea0c62f32291e808dc82cff17d"
+dependencies = [
+ "num-traits",
+]
+
+[[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.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0"
+dependencies = [
+ "autocfg",
+ "num-bigint",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
+dependencies = [
+ "hermit-abi 0.3.2",
+ "libc",
+]
+
+[[package]]
+name = "object"
+version = "0.31.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8bda667d9f2b5051b8833f59f3bf748b28ef54f850f4fcb389a252aa383866d1"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
+
+[[package]]
+name = "oorandom"
+version = "11.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575"
+
+[[package]]
+name = "opaque-debug"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
+
+[[package]]
+name = "openssl"
+version = "0.10.56"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "729b745ad4a5575dd06a3e1af1414bd330ee561c01b3899eb584baeaa8def17e"
+dependencies = [
+ "bitflags 1.3.2",
+ "cfg-if",
+ "foreign-types",
+ "libc",
+ "once_cell",
+ "openssl-macros",
+ "openssl-sys",
+]
+
+[[package]]
+name = "openssl-macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.28",
+]
+
+[[package]]
+name = "openssl-probe"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
+
+[[package]]
+name = "openssl-src"
+version = "111.27.0+1.1.1v"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "06e8f197c82d7511c5b014030c9b1efeda40d7d5f99d23b4ceed3524a5e63f02"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "openssl-sys"
+version = "0.9.91"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "866b5f16f90776b9bb8dc1e1802ac6f0513de3a7a7465867bfbc563dc737faac"
+dependencies = [
+ "cc",
+ "libc",
+ "openssl-src",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "opentelemetry"
+version = "0.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6105e89802af13fdf48c49d7646d3b533a70e536d818aae7e78ba0433d01acb8"
+dependencies = [
+ "async-trait",
+ "crossbeam-channel",
+ "futures-channel",
+ "futures-executor",
+ "futures-util",
+ "js-sys",
+ "lazy_static",
+ "percent-encoding",
+ "pin-project",
+ "rand 0.8.5",
+ "serde",
+ "thiserror",
+ "tokio",
+ "tokio-stream",
+]
+
+[[package]]
+name = "opentelemetry-otlp"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d1a6ca9de4c8b00aa7f1a153bd76cb263287155cec642680d79d98706f3d28a"
+dependencies = [
+ "async-trait",
+ "futures",
+ "futures-util",
+ "http",
+ "opentelemetry",
+ "prost",
+ "thiserror",
+ "tokio",
+ "tonic",
+ "tonic-build",
+]
+
+[[package]]
+name = "opentls"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f561874f8d6ecfb674fc08863414040c93cc90c0b6963fe679895fab8b65560"
+dependencies = [
+ "futures-util",
+ "log",
+ "openssl",
+ "openssl-probe",
+ "openssl-sys",
+ "url",
+]
+
+[[package]]
+name = "ordered-float"
+version = "2.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7940cf2ca942593318d07fcf2596cdca60a85c9e7fab408a5e21a4f9dcd40d87"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "ordermap"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a86ed3f5f244b372d6b1a00b72ef7f8876d0bc6a78a4c9985c53614041512063"
+
+[[package]]
+name = "os_str_bytes"
+version = "6.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d5d9eb14b174ee9aa2ef96dc2b94637a2d4b6e7cb873c7e171f0c20c6cf3eac"
+
+[[package]]
+name = "overload"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
+
+[[package]]
+name = "parking_lot"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99"
+dependencies = [
+ "instant",
+ "lock_api",
+ "parking_lot_core 0.8.6",
+]
+
+[[package]]
+name = "parking_lot"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+dependencies = [
+ "lock_api",
+ "parking_lot_core 0.9.8",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc"
+dependencies = [
+ "cfg-if",
+ "instant",
+ "libc",
+ "redox_syscall 0.2.16",
+ "smallvec",
+ "winapi",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall 0.3.5",
+ "smallvec",
+ "windows-targets 0.48.1",
+]
+
+[[package]]
+name = "parse-hyperlinks"
+version = "0.23.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0181d37c4d5ae35cc8be7cf823c1a933005661da6a08bcb2855aa392c9a54b8e"
+dependencies = [
+ "html-escape",
+ "nom",
+ "percent-encoding",
+ "thiserror",
+]
+
+[[package]]
+name = "parser-database"
+version = "0.1.0"
+dependencies = [
+ "diagnostics",
+ "either",
+ "enumflags2",
+ "indexmap 1.9.3",
+ "rustc-hash",
+ "schema-ast",
+]
+
+[[package]]
+name = "paste"
+version = "1.0.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c"
+
+[[package]]
+name = "pbkdf2"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917"
+dependencies = [
+ "digest 0.10.7",
+]
+
+[[package]]
+name = "peeking_take_while"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099"
+
+[[package]]
+name = "pem"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8835c273a76a90455d7344889b0964598e3316e2a79ede8e36f16bdcf2228b8"
+dependencies = [
+ "base64 0.13.1",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94"
+
+[[package]]
+name = "pest"
+version = "2.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1acb4a4365a13f749a93f1a094a7805e5cfa0955373a9de860d962eaa3a5fe5a"
+dependencies = [
+ "thiserror",
+ "ucd-trie",
+]
+
+[[package]]
+name = "pest_derive"
+version = "2.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "666d00490d4ac815001da55838c500eafb0320019bbaa44444137c48b443a853"
+dependencies = [
+ "pest",
+ "pest_generator",
+]
+
+[[package]]
+name = "pest_generator"
+version = "2.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68ca01446f50dbda87c1786af8770d535423fa8a53aec03b8f4e3d7eb10e0929"
+dependencies = [
+ "pest",
+ "pest_meta",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.28",
+]
+
+[[package]]
+name = "pest_meta"
+version = "2.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56af0a30af74d0445c0bf6d9d051c979b516a1a5af790d251daee76005420a48"
+dependencies = [
+ "once_cell",
+ "pest",
+ "sha2 0.10.7",
+]
+
+[[package]]
+name = "petgraph"
+version = "0.4.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c3659d1ee90221741f65dd128d9998311b0e40c5d3c23a62445938214abce4f"
+dependencies = [
+ "fixedbitset 0.1.9",
+ "ordermap",
+]
+
+[[package]]
+name = "petgraph"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4dd7d28ee937e54fe3080c91faa1c3a46c06de6252988a7f4592ba2310ef22a4"
+dependencies = [
+ "fixedbitset 0.4.2",
+ "indexmap 1.9.3",
+]
+
+[[package]]
+name = "phf"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc"
+dependencies = [
+ "phf_shared",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b"
+dependencies = [
+ "siphasher",
+]
+
+[[package]]
+name = "pin-project"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422"
+dependencies = [
+ "pin-project-internal",
+]
+
+[[package]]
+name = "pin-project-internal"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.28",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12cc1b0bf1727a77a54b6654e7b5f1af8604923edc8b81885f8ec92f9e3f0a05"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
+
+[[package]]
+name = "plotters"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2c224ba00d7cadd4d5c660deaf2098e5e80e07846537c51f9cfa4be50c1fd45"
+dependencies = [
+ "num-traits",
+ "plotters-backend",
+ "plotters-svg",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "plotters-backend"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e76628b4d3a7581389a35d5b6e2139607ad7c75b17aed325f210aa91f4a9609"
+
+[[package]]
+name = "plotters-svg"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38f6d39893cca0701371e3c27294f09797214b86f1fb951b89ade8ec04e2abab"
+dependencies = [
+ "plotters-backend",
+]
+
+[[package]]
+name = "postgres-native-tls"
+version = "0.5.0"
+source = "git+https://github.com/prisma/rust-postgres?branch=pgbouncer-mode#a1a2dc6d9584deaf70a14293c428e7b6ca614d98"
+dependencies = [
+ "native-tls",
+ "tokio",
+ "tokio-native-tls",
+ "tokio-postgres",
+]
+
+[[package]]
+name = "postgres-protocol"
+version = "0.6.4"
+source = "git+https://github.com/prisma/rust-postgres?branch=pgbouncer-mode#a1a2dc6d9584deaf70a14293c428e7b6ca614d98"
+dependencies = [
+ "base64 0.13.1",
+ "byteorder",
+ "bytes",
+ "fallible-iterator",
+ "hmac",
+ "md-5",
+ "memchr",
+ "rand 0.8.5",
+ "sha2 0.10.7",
+ "stringprep",
+]
+
+[[package]]
+name = "postgres-types"
+version = "0.2.4"
+source = "git+https://github.com/prisma/rust-postgres?branch=pgbouncer-mode#a1a2dc6d9584deaf70a14293c428e7b6ca614d98"
+dependencies = [
+ "bit-vec",
+ "bytes",
+ "chrono",
+ "fallible-iterator",
+ "postgres-protocol",
+ "serde",
+ "serde_json",
+ "uuid",
+]
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+
+[[package]]
+name = "pretty-hex"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c6fa0831dd7cc608c38a5e323422a0077678fa5744aa2be4ad91c4ece8eec8d5"
+
+[[package]]
+name = "pretty_assertions"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af7cee1a6c8a5b9208b3cb1061f10c0cb689087b3d8ce85fb9d2dd7a29b6ba66"
+dependencies = [
+ "diff",
+ "yansi",
+]
+
+[[package]]
+name = "priority-queue"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fff39edfcaec0d64e8d0da38564fad195d2d51b680940295fcc307366e101e61"
+dependencies = [
+ "autocfg",
+ "indexmap 1.9.3",
+]
+
+[[package]]
+name = "prisma-fmt"
+version = "0.1.0"
+dependencies = [
+ "colored",
+ "dissimilar",
+ "dmmf",
+ "enumflags2",
+ "expect-test",
+ "indoc 2.0.3",
+ "log",
+ "lsp-types",
+ "once_cell",
+ "psl",
+ "serde",
+ "serde_json",
+ "structopt",
+]
+
+[[package]]
+name = "prisma-models"
+version = "0.0.0"
+dependencies = [
+ "bigdecimal",
+ "chrono",
+ "cuid",
+ "getrandom 0.2.10",
+ "itertools",
+ "nanoid",
+ "prisma-value",
+ "psl",
+ "thiserror",
+ "uuid",
+]
+
+[[package]]
+name = "prisma-schema-build"
+version = "0.1.0"
+dependencies = [
+ "prisma-fmt",
+ "wasm-bindgen",
+ "wasm-logger",
+]
+
+[[package]]
+name = "prisma-value"
+version = "0.1.0"
+dependencies = [
+ "base64 0.13.1",
+ "bigdecimal",
+ "chrono",
+ "once_cell",
+ "regex",
+ "serde",
+ "serde_json",
+ "uuid",
+]
+
+[[package]]
+name = "proc-macro-crate"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785"
+dependencies = [
+ "toml",
+]
+
+[[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 1.0.109",
+ "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-macro-hack"
+version = "0.5.20+deprecated"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.66"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "prost"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "444879275cb4fd84958b1a1d5420d15e6fcf7c235fe47f053c9c2a80aceb6001"
+dependencies = [
+ "bytes",
+ "prost-derive",
+]
+
+[[package]]
+name = "prost-build"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62941722fb675d463659e49c4f3fe1fe792ff24fe5bbaa9c08cd3b98a1c354f5"
+dependencies = [
+ "bytes",
+ "heck 0.3.3",
+ "itertools",
+ "lazy_static",
+ "log",
+ "multimap",
+ "petgraph 0.6.3",
+ "prost",
+ "prost-types",
+ "regex",
+ "tempfile",
+ "which",
+]
+
+[[package]]
+name = "prost-derive"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9cc1a3263e07e0bf68e96268f37665207b49560d98739662cdfaae215c720fe"
+dependencies = [
+ "anyhow",
+ "itertools",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "prost-types"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "534b7a0e836e3c482d2693070f982e39e7611da9695d4d1f5a4b186b51faef0a"
+dependencies = [
+ "bytes",
+ "prost",
+]
+
+[[package]]
+name = "psl"
+version = "0.1.0"
+dependencies = [
+ "base64 0.13.1",
+ "builtin-psl-connectors",
+ "dissimilar",
+ "either",
+ "expect-test",
+ "indoc 2.0.3",
+ "psl-core",
+]
+
+[[package]]
+name = "psl-core"
+version = "0.1.0"
+dependencies = [
+ "bigdecimal",
+ "chrono",
+ "diagnostics",
+ "enumflags2",
+ "indoc 2.0.3",
+ "itertools",
+ "lsp-types",
+ "once_cell",
+ "parser-database",
+ "prisma-value",
+ "regex",
+ "schema-ast",
+ "serde",
+ "serde_json",
+ "url",
+]
+
+[[package]]
+name = "ptr_meta"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0738ccf7ea06b608c10564b31debd4f5bc5e197fc8bfe088f68ae5ce81e7a4f1"
+dependencies = [
+ "ptr_meta_derive",
+]
+
+[[package]]
+name = "ptr_meta_derive"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "qe-setup"
+version = "0.1.0"
+dependencies = [
+ "connection-string",
+ "enumflags2",
+ "mongodb",
+ "mongodb-client",
+ "once_cell",
+ "psl",
+ "quaint",
+ "schema-core",
+ "sql-schema-connector",
+ "test-setup",
+ "url",
+]
+
+[[package]]
+name = "quaint"
+version = "0.2.0-alpha.13"
+dependencies = [
+ "async-trait",
+ "base64 0.12.3",
+ "bigdecimal",
+ "bit-vec",
+ "byteorder",
+ "bytes",
+ "chrono",
+ "connection-string",
+ "either",
+ "futures",
+ "hex",
+ "indoc 0.3.6",
+ "lru-cache",
+ "metrics 0.18.1",
+ "mobc",
+ "mysql_async",
+ "names 0.11.0",
+ "native-tls",
+ "num_cpus",
+ "once_cell",
+ "paste",
+ "percent-encoding",
+ "postgres-native-tls",
+ "postgres-types",
+ "quaint-test-macros",
+ "quaint-test-setup",
+ "rusqlite",
+ "serde",
+ "serde_json",
+ "sqlformat",
+ "thiserror",
+ "tiberius",
+ "tokio",
+ "tokio-postgres",
+ "tokio-util 0.6.10",
+ "tracing",
+ "tracing-core",
+ "url",
+ "uuid",
+]
+
+[[package]]
+name = "quaint-test-macros"
+version = "0.1.0"
+dependencies = [
+ "darling 0.10.2",
+ "once_cell",
+ "proc-macro2",
+ "quaint-test-setup",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "quaint-test-setup"
+version = "0.1.0"
+dependencies = [
+ "async-trait",
+ "bitflags 1.3.2",
+ "names 0.11.0",
+ "once_cell",
+ "quaint",
+ "tokio",
+]
+
+[[package]]
+name = "quanta"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "20afe714292d5e879d8b12740aa223c6a88f118af41870e8b6196e39a02238a8"
+dependencies = [
+ "crossbeam-utils",
+ "libc",
+ "mach",
+ "once_cell",
+ "raw-cpuid",
+ "wasi 0.10.2+wasi-snapshot-preview1",
+ "web-sys",
+ "winapi",
+]
+
+[[package]]
+name = "query-connector"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "async-trait",
+ "chrono",
+ "futures",
+ "indexmap 1.9.3",
+ "itertools",
+ "prisma-models",
+ "prisma-value",
+ "serde",
+ "serde_json",
+ "thiserror",
+ "user-facing-errors",
+ "uuid",
+]
+
+[[package]]
+name = "query-core"
+version = "0.1.0"
+dependencies = [
+ "async-trait",
+ "bigdecimal",
+ "chrono",
+ "connection-string",
+ "crossbeam-channel",
+ "cuid",
+ "enumflags2",
+ "futures",
+ "indexmap 1.9.3",
+ "itertools",
+ "lru 0.7.8",
+ "once_cell",
+ "opentelemetry",
+ "petgraph 0.4.13",
+ "prisma-models",
+ "psl",
+ "query-connector",
+ "query-engine-metrics",
+ "schema",
+ "serde",
+ "serde_json",
+ "thiserror",
+ "tokio",
+ "tracing",
+ "tracing-futures",
+ "tracing-opentelemetry",
+ "tracing-subscriber",
+ "user-facing-errors",
+ "uuid",
+]
+
+[[package]]
+name = "query-engine"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "async-trait",
+ "base64 0.13.1",
+ "connection-string",
+ "enumflags2",
+ "graphql-parser",
+ "hyper",
+ "indoc 2.0.3",
+ "mongodb-query-connector",
+ "opentelemetry",
+ "opentelemetry-otlp",
+ "psl",
+ "quaint",
+ "query-connector",
+ "query-core",
+ "query-engine-metrics",
+ "request-handlers",
+ "serde",
+ "serde_json",
+ "serial_test",
+ "sql-query-connector",
+ "structopt",
+ "thiserror",
+ "tokio",
+ "tracing",
+ "tracing-opentelemetry",
+ "tracing-subscriber",
+ "url",
+ "user-facing-errors",
+]
+
+[[package]]
+name = "query-engine-metrics"
+version = "0.1.0"
+dependencies = [
+ "expect-test",
+ "metrics 0.18.1",
+ "metrics-exporter-prometheus",
+ "metrics-util 0.12.1",
+ "once_cell",
+ "parking_lot 0.12.1",
+ "serde",
+ "serde_json",
+ "tokio",
+ "tracing",
+ "tracing-futures",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "query-engine-node-api"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "async-trait",
+ "connection-string",
+ "driver-adapters",
+ "futures",
+ "napi",
+ "napi-build",
+ "napi-derive",
+ "opentelemetry",
+ "prisma-models",
+ "psl",
+ "quaint",
+ "query-connector",
+ "query-core",
+ "query-engine-metrics",
+ "request-handlers",
+ "serde",
+ "serde_json",
+ "sql-query-connector",
+ "thiserror",
+ "tokio",
+ "tracing",
+ "tracing-futures",
+ "tracing-opentelemetry",
+ "tracing-subscriber",
+ "url",
+ "user-facing-errors",
+]
+
+[[package]]
+name = "query-engine-tests"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "base64 0.13.1",
+ "chrono",
+ "colored",
+ "enumflags2",
+ "futures",
+ "indoc 2.0.3",
+ "insta",
+ "once_cell",
+ "prisma-value",
+ "psl",
+ "query-engine-metrics",
+ "query-test-macros",
+ "query-tests-setup",
+ "serde_json",
+ "tokio",
+ "tracing",
+ "tracing-futures",
+ "user-facing-errors",
+ "uuid",
+]
+
+[[package]]
+name = "query-engine-wasm"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "async-trait",
+ "connection-string",
+ "console_error_panic_hook",
+ "futures",
+ "js-sys",
+ "log",
+ "prisma-models",
+ "psl",
+ "serde",
+ "serde-wasm-bindgen",
+ "serde_json",
+ "thiserror",
+ "tokio",
+ "tracing",
+ "tracing-futures",
+ "tracing-subscriber",
+ "tsify",
+ "url",
+ "user-facing-errors",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "wasm-logger",
+]
+
+[[package]]
+name = "query-test-macros"
+version = "0.1.0"
+dependencies = [
+ "darling 0.13.4",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "query-tests-setup"
+version = "0.1.0"
+dependencies = [
+ "async-trait",
+ "colored",
+ "enumflags2",
+ "hyper",
+ "indexmap 1.9.3",
+ "indoc 2.0.3",
+ "itertools",
+ "jsonrpc-core",
+ "nom",
+ "once_cell",
+ "parse-hyperlinks",
+ "prisma-models",
+ "psl",
+ "qe-setup",
+ "quaint",
+ "query-core",
+ "query-engine",
+ "query-engine-metrics",
+ "regex",
+ "request-handlers",
+ "serde",
+ "serde_json",
+ "sql-query-connector",
+ "strip-ansi-escapes",
+ "thiserror",
+ "tokio",
+ "tracing",
+ "tracing-error",
+ "tracing-futures",
+ "tracing-subscriber",
+ "user-facing-errors",
+]
+
+[[package]]
+name = "quick-error"
+version = "1.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0"
+
+[[package]]
+name = "quote"
+version = "1.0.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50f3b39ccfb720540debaa0164757101c08ecb8d326b15358ce76a62c7e85965"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "radium"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09"
+
+[[package]]
+name = "radix_trie"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c069c179fcdc6a2fe24d8d18305cf085fdbd4f922c041943e203685d6a1c58fd"
+dependencies = [
+ "endian-type",
+ "nibble_vec",
+]
+
+[[package]]
+name = "rand"
+version = "0.3.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64ac302d8f83c0c1974bf758f6b041c6c8ada916fbb44a609158ca8b064cc76c"
+dependencies = [
+ "libc",
+ "rand 0.4.6",
+]
+
+[[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",
+ "rdrand",
+ "winapi",
+]
+
+[[package]]
+name = "rand"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
+dependencies = [
+ "getrandom 0.1.16",
+ "libc",
+ "rand_chacha 0.2.2",
+ "rand_core 0.5.1",
+ "rand_hc",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "libc",
+ "rand_chacha 0.3.1",
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402"
+dependencies = [
+ "ppv-lite86",
+ "rand_core 0.5.1",
+]
+
+[[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.4",
+]
+
+[[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",
+]
+
+[[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.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
+dependencies = [
+ "getrandom 0.1.16",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom 0.2.10",
+]
+
+[[package]]
+name = "rand_hc"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
+dependencies = [
+ "rand_core 0.5.1",
+]
+
+[[package]]
+name = "raw-cpuid"
+version = "10.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c297679cb867470fa8c9f67dbba74a78d78e3e98d7cf2b08d6d71540f797332"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "rayon"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b"
+dependencies = [
+ "either",
+ "rayon-core",
+]
+
+[[package]]
+name = "rayon-core"
+version = "1.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d"
+dependencies = [
+ "crossbeam-channel",
+ "crossbeam-deque",
+ "crossbeam-utils",
+ "num_cpus",
+]
+
+[[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",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "regex"
+version = "1.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81bc1d4caf89fac26a70747fe603c130093b53c773888797a6329091246d651a"
+dependencies = [
+ "aho-corasick 1.0.3",
+ "memchr",
+ "regex-automata 0.3.6",
+ "regex-syntax 0.7.4",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
+dependencies = [
+ "regex-syntax 0.6.29",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fed1ceff11a1dddaee50c9dc8e4938bd106e9d89ae372f192311e7da498e3b69"
+dependencies = [
+ "aho-corasick 1.0.3",
+ "memchr",
+ "regex-syntax 0.7.4",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
+
+[[package]]
+name = "regex-syntax"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5ea92a5b6195c6ef2a0295ea818b312502c6fc94dde986c5553242e18fd4ce2"
+
+[[package]]
+name = "rend"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "581008d2099240d37fb08d77ad713bcaec2c4d89d50b5b21a8bb1996bbab68ab"
+dependencies = [
+ "bytecheck",
+]
+
+[[package]]
+name = "request-handlers"
+version = "0.1.0"
+dependencies = [
+ "bigdecimal",
+ "codspeed-criterion-compat",
+ "connection-string",
+ "dmmf",
+ "futures",
+ "graphql-parser",
+ "indexmap 1.9.3",
+ "insta",
+ "itertools",
+ "mongodb-query-connector",
+ "once_cell",
+ "prisma-models",
+ "psl",
+ "quaint",
+ "query-core",
+ "schema",
+ "serde",
+ "serde_json",
+ "sql-query-connector",
+ "thiserror",
+ "tracing",
+ "url",
+ "user-facing-errors",
+]
+
+[[package]]
+name = "reqwest"
+version = "0.11.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cde824a14b7c14f85caff81225f411faacc04a2013f41670f41443742b1c1c55"
+dependencies = [
+ "base64 0.21.2",
+ "bytes",
+ "encoding_rs",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "hyper",
+ "hyper-tls",
+ "ipnet",
+ "js-sys",
+ "log",
+ "mime",
+ "native-tls",
+ "once_cell",
+ "percent-encoding",
+ "pin-project-lite",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "tokio",
+ "tokio-native-tls",
+ "tower-service",
+ "url",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+ "winreg 0.10.1",
+]
+
+[[package]]
+name = "resolv-conf"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "52e44394d2086d010551b14b53b1f24e31647570cd1deb0379e2c21b329aba00"
+dependencies = [
+ "hostname",
+ "quick-error",
+]
+
+[[package]]
+name = "ring"
+version = "0.16.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc"
+dependencies = [
+ "cc",
+ "libc",
+ "once_cell",
+ "spin",
+ "untrusted",
+ "web-sys",
+ "winapi",
+]
+
+[[package]]
+name = "rkyv"
+version = "0.7.42"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0200c8230b013893c0b2d6213d6ec64ed2b9be2e0e016682b7224ff82cff5c58"
+dependencies = [
+ "bitvec",
+ "bytecheck",
+ "hashbrown 0.12.3",
+ "ptr_meta",
+ "rend",
+ "rkyv_derive",
+ "seahash",
+ "tinyvec",
+ "uuid",
+]
+
+[[package]]
+name = "rkyv_derive"
+version = "0.7.42"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2e06b915b5c230a17d7a736d1e2e63ee753c256a8614ef3f5147b13a4f5541d"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "rusqlite"
+version = "0.29.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "549b9d036d571d42e6e85d1c1425e2ac83491075078ca9a15be021c56b1641f2"
+dependencies = [
+ "bitflags 2.4.0",
+ "chrono",
+ "fallible-iterator",
+ "fallible-streaming-iterator",
+ "hashlink",
+ "libsqlite3-sys",
+ "smallvec",
+]
+
+[[package]]
+name = "rust_decimal"
+version = "1.31.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4a2ab0025103a60ecaaf3abf24db1db240a4e1c15837090d2c32f625ac98abea"
+dependencies = [
+ "arrayvec 0.7.4",
+ "borsh",
+ "byteorder",
+ "bytes",
+ "num-traits",
+ "rand 0.8.5",
+ "rkyv",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
+
+[[package]]
+name = "rustc-hash"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
+
+[[package]]
+name = "rustc_version"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
+dependencies = [
+ "semver 0.9.0",
+]
+
+[[package]]
+name = "rustc_version"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
+dependencies = [
+ "semver 1.0.18",
+]
+
+[[package]]
+name = "rustc_version_runtime"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d31b7153270ebf48bf91c65ae5b0c00e749c4cfad505f66530ac74950249582f"
+dependencies = [
+ "rustc_version 0.2.3",
+ "semver 0.9.0",
+]
+
+[[package]]
+name = "rustix"
+version = "0.38.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19ed4fa021d81c8392ce04db050a3da9a60299050b7ae1cf482d862b54a7218f"
+dependencies = [
+ "bitflags 2.4.0",
+ "errno",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "rustls"
+version = "0.19.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7"
+dependencies = [
+ "base64 0.13.1",
+ "log",
+ "ring",
+ "sct 0.6.1",
+ "webpki 0.21.4",
+]
+
+[[package]]
+name = "rustls"
+version = "0.20.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fff78fc74d175294f4e83b28343315ffcfb114b156f0185e9741cb5570f50e2f"
+dependencies = [
+ "log",
+ "ring",
+ "sct 0.7.0",
+ "webpki 0.22.0",
+]
+
+[[package]]
+name = "rustls-native-certs"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a07b7c1885bd8ed3831c289b7870b13ef46fe0e856d288c30d9cc17d75a2092"
+dependencies = [
+ "openssl-probe",
+ "rustls 0.19.1",
+ "schannel",
+ "security-framework",
+]
+
+[[package]]
+name = "rustls-pemfile"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2"
+dependencies = [
+ "base64 0.21.2",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741"
+
+[[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 = "saturating"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ece8e78b2f38ec51c51f5d475df0a7187ba5111b2a28bdc761ee05b075d40a71"
+
+[[package]]
+name = "schannel"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88"
+dependencies = [
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "schema"
+version = "0.1.0"
+dependencies = [
+ "codspeed-criterion-compat",
+ "once_cell",
+ "prisma-models",
+ "psl",
+ "rustc-hash",
+]
+
+[[package]]
+name = "schema-ast"
+version = "0.1.0"
+dependencies = [
+ "diagnostics",
+ "pest",
+ "pest_derive",
+]
+
+[[package]]
+name = "schema-connector"
+version = "0.1.0"
+dependencies = [
+ "chrono",
+ "enumflags2",
+ "psl",
+ "quaint",
+ "serde",
+ "serde_json",
+ "sha2 0.9.9",
+ "tracing",
+ "tracing-error",
+ "user-facing-errors",
+]
+
+[[package]]
+name = "schema-core"
+version = "0.1.0"
+dependencies = [
+ "async-trait",
+ "chrono",
+ "enumflags2",
+ "json-rpc-api-build",
+ "jsonrpc-core",
+ "mongodb-schema-connector",
+ "psl",
+ "schema-connector",
+ "serde",
+ "serde_json",
+ "sql-schema-connector",
+ "tokio",
+ "tracing",
+ "tracing-futures",
+ "tracing-subscriber",
+ "url",
+ "user-facing-errors",
+]
+
+[[package]]
+name = "schema-engine-cli"
+version = "0.1.0"
+dependencies = [
+ "backtrace",
+ "base64 0.13.1",
+ "connection-string",
+ "expect-test",
+ "indoc 2.0.3",
+ "jsonrpc-core",
+ "quaint",
+ "schema-connector",
+ "schema-core",
+ "serde",
+ "serde_json",
+ "structopt",
+ "tempfile",
+ "test-macros",
+ "test-setup",
+ "tokio",
+ "tracing",
+ "tracing-error",
+ "tracing-subscriber",
+ "url",
+ "user-facing-errors",
+]
+
+[[package]]
+name = "scopeguard"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+
+[[package]]
+name = "sct"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "sct"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "seahash"
+version = "4.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b"
+
+[[package]]
+name = "security-framework"
+version = "2.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de"
+dependencies = [
+ "bitflags 1.3.2",
+ "core-foundation",
+ "core-foundation-sys",
+ "libc",
+ "security-framework-sys",
+]
+
+[[package]]
+name = "security-framework-sys"
+version = "2.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "semver"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
+dependencies = [
+ "semver-parser",
+]
+
+[[package]]
+name = "semver"
+version = "1.0.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0293b4b29daaf487284529cc2f5675b8e57c61f70167ba415a463651fd6a918"
+
+[[package]]
+name = "semver-parser"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
+
+[[package]]
+name = "serde"
+version = "1.0.183"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "32ac8da02677876d532745a130fc9d8e6edfa81a269b107c5b00829b91d8eb3c"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde-wasm-bindgen"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3b143e2833c57ab9ad3ea280d21fd34e285a42837aeb0ee301f4f41890fa00e"
+dependencies = [
+ "js-sys",
+ "serde",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "serde_bytes"
+version = "0.11.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab33ec92f677585af6d88c65593ae2375adde54efdbf16d597f2cbc7a6d368ff"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.183"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aafe972d60b0b9bee71a91b92fee2d4fb3c9d7e8f6b179aa99f27203d99a4816"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.28",
+]
+
+[[package]]
+name = "serde_derive_internals"
+version = "0.28.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e578a843d40b4189a4d66bba51d7684f57da5bd7c304c64e14bd63efbef49509"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.28",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.104"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "076066c5f1078eac5b722a31827a8832fe108bed65dfa75e233c89f8206e976c"
+dependencies = [
+ "indexmap 2.0.0",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_repr"
+version = "0.1.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8725e1dfadb3a50f7e5ce0b1a540466f6ed3fe7a0fca2ac2b8b831d31316bd00"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.28",
+]
+
+[[package]]
+name = "serde_urlencoded"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
+dependencies = [
+ "form_urlencoded",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_with"
+version = "1.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "678b5a069e50bf00ecd22d0cd8ddf7c236f68581b03db652061ed5eb13a312ff"
+dependencies = [
+ "serde",
+ "serde_with_macros",
+]
+
+[[package]]
+name = "serde_with_macros"
+version = "1.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e182d6ec6f05393cc0e5ed1bf81ad6db3a8feedf8ee515ecdd369809bcce8082"
+dependencies = [
+ "darling 0.13.4",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "serial_test"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e56dd856803e253c8f298af3f4d7eb0ae5e23a737252cd90bb4f3b435033b2d"
+dependencies = [
+ "dashmap",
+ "futures",
+ "lazy_static",
+ "log",
+ "parking_lot 0.12.1",
+ "serial_test_derive",
+]
+
+[[package]]
+name = "serial_test_derive"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91d129178576168c589c9ec973feedf7d3126c01ac2bf08795109aa35b69fb8f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.28",
+]
+
+[[package]]
+name = "sha-1"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f5058ada175748e33390e40e872bd0fe59a19f265d0158daa551c5a88a76009c"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest 0.10.7",
+]
+
+[[package]]
+name = "sha1"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest 0.10.7",
+]
+
+[[package]]
+name = "sha2"
+version = "0.9.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800"
+dependencies = [
+ "block-buffer 0.9.0",
+ "cfg-if",
+ "cpufeatures",
+ "digest 0.9.0",
+ "opaque-debug",
+]
+
+[[package]]
+name = "sha2"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest 0.10.7",
+]
+
+[[package]]
+name = "sha3"
+version = "0.10.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60"
+dependencies = [
+ "digest 0.10.7",
+ "keccak",
+]
+
+[[package]]
+name = "sharded-slab"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31"
+dependencies = [
+ "lazy_static",
+]
+
+[[package]]
+name = "shlex"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3"
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "simdutf8"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f27f6278552951f1f2b8cf9da965d10969b2efdea95a6ec47987ab46edfe263a"
+
+[[package]]
+name = "similar"
+version = "2.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "420acb44afdae038210c99e69aae24109f32f15500aa708e81d46c9f29d55fcf"
+dependencies = [
+ "bstr",
+]
+
+[[package]]
+name = "siphasher"
+version = "0.3.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de"
+
+[[package]]
+name = "sketches-ddsketch"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04d2ecae5fcf33b122e2e6bd520a57ccf152d2dde3b38c71039df1a6867264ee"
+
+[[package]]
+name = "slab"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9"
+
+[[package]]
+name = "socket2"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "socket2"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2538b18701741680e0322a2302176d3253a35388e2e62f172f64f4f16605f877"
+dependencies = [
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "spin"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
+
+[[package]]
+name = "sql-ddl"
+version = "0.1.0"
+dependencies = [
+ "indoc 2.0.3",
+]
+
+[[package]]
+name = "sql-introspection-tests"
+version = "0.1.0"
+dependencies = [
+ "barrel",
+ "connection-string",
+ "enumflags2",
+ "expect-test",
+ "indoc 2.0.3",
+ "pretty_assertions",
+ "psl",
+ "quaint",
+ "schema-connector",
+ "sql-schema-connector",
+ "sql-schema-describer",
+ "test-macros",
+ "test-setup",
+ "tokio",
+ "tracing",
+ "tracing-futures",
+ "url",
+ "user-facing-errors",
+]
+
+[[package]]
+name = "sql-migration-tests"
+version = "0.1.0"
+dependencies = [
+ "bigdecimal",
+ "chrono",
+ "colored",
+ "connection-string",
+ "enumflags2",
+ "expect-test",
+ "indoc 2.0.3",
+ "jsonrpc-core",
+ "once_cell",
+ "pretty_assertions",
+ "prisma-value",
+ "psl",
+ "quaint",
+ "schema-core",
+ "serde",
+ "serde_json",
+ "sql-schema-connector",
+ "sql-schema-describer",
+ "tempfile",
+ "test-macros",
+ "test-setup",
+ "tokio",
+ "tracing",
+ "tracing-futures",
+ "url",
+ "user-facing-errors",
+]
+
+[[package]]
+name = "sql-query-connector"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "async-trait",
+ "bigdecimal",
+ "chrono",
+ "cuid",
+ "futures",
+ "itertools",
+ "once_cell",
+ "opentelemetry",
+ "prisma-models",
+ "prisma-value",
+ "psl",
+ "quaint",
+ "query-connector",
+ "rand 0.7.3",
+ "serde",
+ "serde_json",
+ "thiserror",
+ "tokio",
+ "tracing",
+ "tracing-futures",
+ "tracing-opentelemetry",
+ "user-facing-errors",
+ "uuid",
+]
+
+[[package]]
+name = "sql-schema-connector"
+version = "0.1.0"
+dependencies = [
+ "chrono",
+ "connection-string",
+ "datamodel-renderer",
+ "either",
+ "enumflags2",
+ "indoc 2.0.3",
+ "once_cell",
+ "prisma-value",
+ "psl",
+ "quaint",
+ "regex",
+ "schema-connector",
+ "serde",
+ "serde_json",
+ "sql-ddl",
+ "sql-schema-describer",
+ "sqlformat",
+ "sqlparser",
+ "tokio",
+ "tracing",
+ "tracing-futures",
+ "url",
+ "user-facing-errors",
+ "uuid",
+]
+
+[[package]]
+name = "sql-schema-describer"
+version = "0.1.0"
+dependencies = [
+ "async-trait",
+ "bigdecimal",
+ "either",
+ "enumflags2",
+ "expect-test",
+ "indexmap 1.9.3",
+ "indoc 2.0.3",
+ "once_cell",
+ "pretty_assertions",
+ "prisma-value",
+ "psl",
+ "quaint",
+ "regex",
+ "serde",
+ "test-macros",
+ "test-setup",
+ "tokio",
+ "tracing",
+ "tracing-error",
+ "tracing-futures",
+]
+
+[[package]]
+name = "sqlformat"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c12bc9199d1db8234678b7051747c07f517cdcf019262d1847b94ec8b1aee3e"
+dependencies = [
+ "itertools",
+ "nom",
+ "unicode_categories",
+]
+
+[[package]]
+name = "sqlparser"
+version = "0.32.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0366f270dbabb5cc2e4c88427dc4c08bba144f81e32fbd459a013f26a4d16aa0"
+dependencies = [
+ "log",
+]
+
+[[package]]
+name = "static_assertions"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+
+[[package]]
+name = "stringprep"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db3737bde7edce97102e0e2b15365bf7a20bfdb5f60f4f9e8d7004258a51a8da"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "strip-ansi-escapes"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "011cbb39cf7c1f62871aea3cc46e5817b0937b49e9447370c93cacbe93a766d8"
+dependencies = [
+ "vte",
+]
+
+[[package]]
+name = "strsim"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
+
+[[package]]
+name = "strsim"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c"
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "structopt"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c6b5c64445ba8094a6ab0c3cd2ad323e07171012d9c98b0b15651daf1787a10"
+dependencies = [
+ "clap 2.34.0",
+ "lazy_static",
+ "structopt-derive",
+]
+
+[[package]]
+name = "structopt-derive"
+version = "0.4.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dcb5ae327f9cc13b68763b5749770cb9e048a99bd9dfdfa58d0cf05d5f64afe0"
+dependencies = [
+ "heck 0.3.3",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "subprocess"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c2e86926081dda636c546d8c5e641661049d7562a68f5488be4a1f7f66f6086"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "subtle"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc"
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04361975b3f5e348b2189d8dc55bc942f278b2d482a6a0365de5bdd62d351567"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "synstructure"
+version = "0.12.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "unicode-xid",
+]
+
+[[package]]
+name = "take_mut"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f764005d11ee5f36500a149ace24e00e3da98b0158b3e2d53a7495660d3f4d60"
+
+[[package]]
+name = "tap"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369"
+
+[[package]]
+name = "tempfile"
+version = "3.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc02fddf48964c42031a0b3fe0428320ecf3a73c401040fc0096f97794310651"
+dependencies = [
+ "cfg-if",
+ "fastrand",
+ "redox_syscall 0.3.5",
+ "rustix",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "test-cli"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "async-trait",
+ "colored",
+ "dmmf",
+ "enumflags2",
+ "psl",
+ "schema-connector",
+ "schema-core",
+ "serde_json",
+ "structopt",
+ "tokio",
+ "tracing",
+ "tracing-error",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "test-macros"
+version = "0.1.0"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "test-setup"
+version = "0.1.0"
+dependencies = [
+ "connection-string",
+ "dissimilar",
+ "enumflags2",
+ "once_cell",
+ "quaint",
+ "tokio",
+ "tracing",
+ "tracing-error",
+ "tracing-subscriber",
+ "url",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d"
+
+[[package]]
+name = "thiserror"
+version = "1.0.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "611040a08a0439f8248d1990b111c95baa9c704c805fa1f62104b39655fd7f90"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "090198534930841fab3a5d1bb637cde49e339654e606195f8d9c76eeb081dc96"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.28",
+]
+
+[[package]]
+name = "thread_local"
+version = "1.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+]
+
+[[package]]
+name = "tiberius"
+version = "0.11.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "66303a42b7c5daffb95c10cd8f3007a9c29b3e90128cf42b3738f58102aa2516"
+dependencies = [
+ "async-native-tls",
+ "async-trait",
+ "asynchronous-codec",
+ "bigdecimal",
+ "byteorder",
+ "bytes",
+ "chrono",
+ "connection-string",
+ "encoding",
+ "enumflags2",
+ "futures",
+ "futures-sink",
+ "futures-util",
+ "num-traits",
+ "once_cell",
+ "opentls",
+ "pin-project-lite",
+ "pretty-hex",
+ "thiserror",
+ "tokio",
+ "tokio-util 0.7.8",
+ "tracing",
+ "uuid",
+ "winauth",
+]
+
+[[package]]
+name = "time"
+version = "0.1.43"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca8a50ef2360fbd1eeb0ecd46795a87a19024eb4b53c5dc916ca1fd95fe62438"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "time"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0fdd63d58b18d663fbdf70e049f00a22c8e42be082203be7f26589213cd75ea"
+dependencies = [
+ "deranged",
+ "itoa",
+ "serde",
+ "time-core",
+ "time-macros",
+]
+
+[[package]]
+name = "time-core"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb"
+
+[[package]]
+name = "time-macros"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eb71511c991639bb078fd5bf97757e03914361c48100d52878b8e52b46fb92cd"
+dependencies = [
+ "time-core",
+]
+
+[[package]]
+name = "tinytemplate"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc"
+dependencies = [
+ "serde",
+ "serde_json",
+]
+
+[[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.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+[[package]]
+name = "tokio"
+version = "1.30.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d3ce25f50619af8b0aec2eb23deebe84249e19e2ddd393a6e16e3300a6dadfd"
+dependencies = [
+ "backtrace",
+ "bytes",
+ "libc",
+ "mio",
+ "num_cpus",
+ "parking_lot 0.12.1",
+ "pin-project-lite",
+ "signal-hook-registry",
+ "socket2 0.5.3",
+ "tokio-macros",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "tokio-io-timeout"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf"
+dependencies = [
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-macros"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.28",
+]
+
+[[package]]
+name = "tokio-native-tls"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2"
+dependencies = [
+ "native-tls",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-postgres"
+version = "0.7.7"
+source = "git+https://github.com/prisma/rust-postgres?branch=pgbouncer-mode#a1a2dc6d9584deaf70a14293c428e7b6ca614d98"
+dependencies = [
+ "async-trait",
+ "byteorder",
+ "bytes",
+ "fallible-iterator",
+ "futures-channel",
+ "futures-util",
+ "log",
+ "parking_lot 0.12.1",
+ "percent-encoding",
+ "phf",
+ "pin-project-lite",
+ "postgres-protocol",
+ "postgres-types",
+ "socket2 0.5.3",
+ "tokio",
+ "tokio-util 0.7.8",
+]
+
+[[package]]
+name = "tokio-rustls"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc6844de72e57df1980054b38be3a9f4702aba4858be64dd700181a8a6d0e1b6"
+dependencies = [
+ "rustls 0.19.1",
+ "tokio",
+ "webpki 0.21.4",
+]
+
+[[package]]
+name = "tokio-rustls"
+version = "0.23.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59"
+dependencies = [
+ "rustls 0.20.8",
+ "tokio",
+ "webpki 0.22.0",
+]
+
+[[package]]
+name = "tokio-stream"
+version = "0.1.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842"
+dependencies = [
+ "futures-core",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.6.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "36943ee01a6d67977dd3f84a5a1d2efeb4ada3a1ae771cadfaa535d9d9fc6507"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-io",
+ "futures-sink",
+ "log",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.7.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-io",
+ "futures-sink",
+ "pin-project-lite",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "toml"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "tonic"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff08f4649d10a70ffa3522ca559031285d8e421d727ac85c60825761818f5d0a"
+dependencies = [
+ "async-stream",
+ "async-trait",
+ "base64 0.13.1",
+ "bytes",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "hyper",
+ "hyper-timeout",
+ "percent-encoding",
+ "pin-project",
+ "prost",
+ "prost-derive",
+ "rustls-native-certs",
+ "tokio",
+ "tokio-rustls 0.22.0",
+ "tokio-stream",
+ "tokio-util 0.6.10",
+ "tower",
+ "tower-layer",
+ "tower-service",
+ "tracing",
+ "tracing-futures",
+]
+
+[[package]]
+name = "tonic-build"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9403f1bafde247186684b230dc6f38b5cd514584e8bec1dd32514be4745fa757"
+dependencies = [
+ "proc-macro2",
+ "prost-build",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "tower"
+version = "0.4.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c"
+dependencies = [
+ "futures-core",
+ "futures-util",
+ "indexmap 1.9.3",
+ "pin-project",
+ "pin-project-lite",
+ "rand 0.8.5",
+ "slab",
+ "tokio",
+ "tokio-util 0.7.8",
+ "tower-layer",
+ "tower-service",
+ "tracing",
+]
+
+[[package]]
+name = "tower-layer"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0"
+
+[[package]]
+name = "tower-service"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
+
+[[package]]
+name = "tracing"
+version = "0.1.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
+dependencies = [
+ "cfg-if",
+ "log",
+ "pin-project-lite",
+ "tracing-attributes",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-attributes"
+version = "0.1.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.28",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a"
+dependencies = [
+ "once_cell",
+ "valuable",
+]
+
+[[package]]
+name = "tracing-error"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d686ec1c0f384b1277f097b2f279a2ecc11afe8c133c1aabf036a27cb4cd206e"
+dependencies = [
+ "tracing",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "tracing-futures"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2"
+dependencies = [
+ "pin-project",
+ "tracing",
+]
+
+[[package]]
+name = "tracing-log"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922"
+dependencies = [
+ "lazy_static",
+ "log",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-opentelemetry"
+version = "0.17.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fbbe89715c1dbbb790059e2565353978564924ee85017b5fff365c872ff6721f"
+dependencies = [
+ "once_cell",
+ "opentelemetry",
+ "tracing",
+ "tracing-core",
+ "tracing-log",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "tracing-serde"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc6b213177105856957181934e4920de57730fc69bf42c37ee5bb664d406d9e1"
+dependencies = [
+ "serde",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-subscriber"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77"
+dependencies = [
+ "matchers",
+ "nu-ansi-term",
+ "once_cell",
+ "regex",
+ "serde",
+ "serde_json",
+ "sharded-slab",
+ "smallvec",
+ "thread_local",
+ "time 0.3.25",
+ "tracing",
+ "tracing-core",
+ "tracing-log",
+ "tracing-serde",
+]
+
+[[package]]
+name = "trust-dns-proto"
+version = "0.21.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c31f240f59877c3d4bb3b3ea0ec5a6a0cff07323580ff8c7a605cd7d08b255d"
+dependencies = [
+ "async-trait",
+ "cfg-if",
+ "data-encoding",
+ "enum-as-inner",
+ "futures-channel",
+ "futures-io",
+ "futures-util",
+ "idna 0.2.3",
+ "ipnet",
+ "lazy_static",
+ "log",
+ "rand 0.8.5",
+ "smallvec",
+ "thiserror",
+ "tinyvec",
+ "tokio",
+ "url",
+]
+
+[[package]]
+name = "trust-dns-resolver"
+version = "0.21.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e4ba72c2ea84515690c9fcef4c6c660bb9df3036ed1051686de84605b74fd558"
+dependencies = [
+ "cfg-if",
+ "futures-util",
+ "ipconfig",
+ "lazy_static",
+ "log",
+ "lru-cache",
+ "parking_lot 0.12.1",
+ "resolv-conf",
+ "smallvec",
+ "thiserror",
+ "tokio",
+ "trust-dns-proto",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
+
+[[package]]
+name = "tsify"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6b26cf145f2f3b9ff84e182c448eaf05468e247f148cf3d2a7d67d78ff023a0"
+dependencies = [
+ "gloo-utils",
+ "serde",
+ "serde_json",
+ "tsify-macros",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "tsify-macros"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a94b0f0954b3e59bfc2c246b4c8574390d94a4ad4ad246aaf2fb07d7dfd3b47"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "serde_derive_internals",
+ "syn 2.0.28",
+]
+
+[[package]]
+name = "twox-hash"
+version = "1.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675"
+dependencies = [
+ "cfg-if",
+ "rand 0.8.5",
+ "static_assertions",
+]
+
+[[package]]
+name = "typed-builder"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89851716b67b937e393b3daa8423e67ddfc4bbbf1654bcf05488e95e0828db0c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "typenum"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba"
+
+[[package]]
+name = "ucd-trie"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9"
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c"
+
+[[package]]
+name = "unicode_categories"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e"
+
+[[package]]
+name = "unindent"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1766d682d402817b5ac4490b3c3002d91dfa0d22812f341609f97b08757359c"
+
+[[package]]
+name = "unreachable"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "382810877fe448991dfc7f0dd6e3ae5d58088fd0ea5e35189655f84e6814fa56"
+dependencies = [
+ "void",
+]
+
+[[package]]
+name = "untrusted"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
+
+[[package]]
+name = "url"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50bff7831e19200a85b17131d085c25d7811bc4e186efdaf54bbd132994a88cb"
+dependencies = [
+ "form_urlencoded",
+ "idna 0.4.0",
+ "percent-encoding",
+ "serde",
+]
+
+[[package]]
+name = "user-facing-error-macros"
+version = "0.1.0"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "user-facing-errors"
+version = "0.1.0"
+dependencies = [
+ "backtrace",
+ "indoc 2.0.3",
+ "itertools",
+ "quaint",
+ "serde",
+ "serde_json",
+ "tracing",
+ "user-facing-error-macros",
+]
+
+[[package]]
+name = "utf8-width"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5190c9442dcdaf0ddd50f37420417d219ae5261bbf5db120d0f9bab996c9cba1"
+
+[[package]]
+name = "utf8parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
+
+[[package]]
+name = "uuid"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "79daa5ed5740825c40b389c5e50312b9c86df53fccd33f281df655642b43869d"
+dependencies = [
+ "getrandom 0.2.10",
+ "serde",
+]
+
+[[package]]
+name = "valuable"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
+
+[[package]]
+name = "vcpkg"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+
+[[package]]
+name = "vec_map"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "void"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d"
+
+[[package]]
+name = "vte"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6cbce692ab4ca2f1f3047fcf732430249c0e971bfdd2b234cf2c47ad93af5983"
+dependencies = [
+ "arrayvec 0.5.2",
+ "utf8parse",
+ "vte_generate_state_changes",
+]
+
+[[package]]
+name = "vte_generate_state_changes"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d257817081c7dffcdbab24b9e62d2def62e2ff7d00b1c20062551e6cccc145ff"
+dependencies = [
+ "proc-macro2",
+ "quote",
+]
+
+[[package]]
+name = "walkdir"
+version = "2.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698"
+dependencies = [
+ "same-file",
+ "winapi-util",
+]
+
+[[package]]
+name = "want"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e"
+dependencies = [
+ "try-lock",
+]
+
+[[package]]
+name = "wasi"
+version = "0.9.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
+
+[[package]]
+name = "wasi"
+version = "0.10.2+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6"
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.28",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.34"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f219e0d211ba40266969f6dbdd90636da12f75bee4fc9d6c23d1260dadb51454"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.28",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1"
+
+[[package]]
+name = "wasm-logger"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "074649a66bb306c8f2068c9016395fa65d8e08d2affcbf95acf3c24c3ab19718"
+dependencies = [
+ "log",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "web-sys"
+version = "0.3.61"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "webpki"
+version = "0.21.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "webpki"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "webpki-roots"
+version = "0.22.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87"
+dependencies = [
+ "webpki 0.22.0",
+]
+
+[[package]]
+name = "which"
+version = "4.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2441c784c52b289a054b7201fc93253e288f094e2f4be9058343127c4226a269"
+dependencies = [
+ "either",
+ "libc",
+ "once_cell",
+]
+
+[[package]]
+name = "widestring"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "653f141f39ec16bba3c5abe400a0c60da7468261cc2cbf36805022876bc721a8"
+
+[[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"
+
+[[package]]
+name = "winauth"
+version = "0.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f820cd208ce9c6b050812dc2d724ba98c6c1e9db5ce9b3f58d925ae5723a5e6"
+dependencies = [
+ "bitflags 1.3.2",
+ "byteorder",
+ "md5",
+ "rand 0.7.3",
+ "winapi",
+]
+
+[[package]]
+name = "windows"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f"
+dependencies = [
+ "windows-targets 0.48.1",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
+dependencies = [
+ "windows-targets 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets 0.48.1",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05d4b17490f70499f20b9e791dcf6a299785ce8af4d709018206dc5b4953e95f"
+dependencies = [
+ "windows_aarch64_gnullvm 0.48.0",
+ "windows_aarch64_msvc 0.48.0",
+ "windows_i686_gnu 0.48.0",
+ "windows_i686_msvc 0.48.0",
+ "windows_x86_64_gnu 0.48.0",
+ "windows_x86_64_gnullvm 0.48.0",
+ "windows_x86_64_msvc 0.48.0",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
+
+[[package]]
+name = "winreg"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winreg"
+version = "0.50.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1"
+dependencies = [
+ "cfg-if",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "wyz"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed"
+dependencies = [
+ "tap",
+]
+
+[[package]]
+name = "yaml-rust"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85"
+dependencies = [
+ "linked-hash-map",
+]
+
+[[package]]
+name = "yansi"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec"
diff --git a/nixpkgs/pkgs/development/tools/database/prisma-engines/default.nix b/nixpkgs/pkgs/development/tools/database/prisma-engines/default.nix
new file mode 100644
index 000000000000..4d2dc3663184
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/prisma-engines/default.nix
@@ -0,0 +1,91 @@
+{ fetchFromGitHub
+, lib
+, Security
+, openssl
+, git
+, pkg-config
+, protobuf
+, rustPlatform
+, stdenv
+}:
+
+# Updating this package will force an update for nodePackages.prisma. The
+# version of prisma-engines and nodePackages.prisma must be the same for them to
+# function correctly.
+rustPlatform.buildRustPackage rec {
+  pname = "prisma-engines";
+  version = "5.6.0";
+
+  src = fetchFromGitHub {
+    owner = "prisma";
+    repo = "prisma-engines";
+    rev = version;
+    sha256 = "sha256-zyF2NAOPNJe23tIuOHalsvnYytALKZq8QY1L8EWJMno=";
+  };
+
+  # Use system openssl.
+  OPENSSL_NO_VENDOR = 1;
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "barrel-0.6.6-alpha.0" = "sha256-USh0lQ1z+3Spgc69bRFySUzhuY79qprLlEExTmYWFN8=";
+      "cuid-1.3.2" = "sha256-ZihFrLerEIOdbJggaBbByRbC1sZRvF4M0LN2albB7vA=";
+      "graphql-parser-0.3.0" = "sha256-0ZAsj2mW6fCLhwTETucjbu4rPNzfbNiHu2wVTBlTNe4=";
+      "mysql_async-0.31.3" = "sha256-QIO9s0Upc0/1W7ux1RNJNGKqzO4gB4gMV3NoakAbxkQ=";
+      "postgres-native-tls-0.5.0" = "sha256-UYPsxhCkXXWk8yPbqjNS0illwjS5mVm3Z/jFwpVwqfw=";
+    };
+  };
+
+  nativeBuildInputs = [ pkg-config git ];
+
+  buildInputs = [
+    openssl
+    protobuf
+  ] ++ lib.optionals stdenv.isDarwin [ Security ];
+
+  preBuild = ''
+    export OPENSSL_DIR=${lib.getDev openssl}
+    export OPENSSL_LIB_DIR=${lib.getLib openssl}/lib
+
+    export PROTOC=${protobuf}/bin/protoc
+    export PROTOC_INCLUDE="${protobuf}/include";
+
+    export SQLITE_MAX_VARIABLE_NUMBER=250000
+    export SQLITE_MAX_EXPR_DEPTH=10000
+  '';
+
+  cargoBuildFlags = [
+    "-p" "query-engine"
+    "-p" "query-engine-node-api"
+    "-p" "schema-engine-cli"
+    "-p" "prisma-fmt"
+  ];
+
+  postInstall = ''
+    mv $out/lib/libquery_engine${stdenv.hostPlatform.extensions.sharedLibrary} $out/lib/libquery_engine.node
+  '';
+
+  # Tests are long to compile
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A collection of engines that power the core stack for Prisma";
+    homepage = "https://www.prisma.io/";
+    license = licenses.asl20;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ pimeys tomhoule ivan aqrln ];
+  };
+}
+
+### Troubleshooting
+# Here's an example application using Prisma with Nix: https://github.com/pimeys/nix-prisma-example
+# At example's `flake.nix` shellHook, notice the requirement of defining environment variables for prisma, it's values will show on `prisma --version`.
+# Read the example's README: https://github.com/pimeys/nix-prisma-example/blob/main/README.md
+# Prisma requires 2 packages, `prisma-engines` and `nodePackages.prisma`, to be at *exact* same versions.
+# Certify at `package.json` that dependencies "@prisma/client" and "prisma" are equal, meaning no caret (`^`) in version.
+# Configure NPM to use exact version: `npm config set save-exact=true`
+# Delete `package-lock.json`, delete `node_modules` directory and run `npm install`.
+# Run prisma client from `node_modules/.bin/prisma`.
+# Run `./node_modules/.bin/prisma --version` and check if both prisma packages versions are equal, current platform is `linux-nixos`, and other keys equal to the prisma environment variables you defined for prisma.
+# Test prisma with `generate`, `db push`, etc. It should work. If not, open an issue.
diff --git a/nixpkgs/pkgs/development/tools/database/prqlc/default.nix b/nixpkgs/pkgs/development/tools/database/prqlc/default.nix
new file mode 100644
index 000000000000..60baffb22a29
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/prqlc/default.nix
@@ -0,0 +1,59 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, openssl
+, sqlite
+, zlib
+, stdenv
+, darwin
+, python3
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "prqlc";
+  version = "0.11.1";
+
+  src = fetchFromGitHub {
+    owner = "prql";
+    repo = "prql";
+    rev = version;
+    hash = "sha256-XKb19qevscNjFUMtLL1nk7fXJuPOyQYZvZ3/4BHS0jo=";
+  };
+
+  cargoHash = "sha256-cZkXz9sXfFo0OBQDrHKUfYJsTH1RiLEFb4xU6TDaZUQ=";
+
+  nativeBuildInputs = [
+    pkg-config
+    rustPlatform.bindgenHook
+  ];
+
+  buildInputs =
+    [
+      openssl
+      sqlite
+      zlib
+    ]
+    ++ lib.optionals stdenv.isDarwin [
+      darwin.apple_sdk.frameworks.CoreFoundation
+      darwin.apple_sdk.frameworks.CoreServices
+      darwin.apple_sdk.frameworks.Security
+    ];
+
+  env = {
+    PYO3_PYTHON = "${python3}/bin/python3";
+  };
+
+  # we are only interested in the prqlc binary
+  postInstall = ''
+    rm -r $out/bin/compile-files $out/bin/mdbook-prql $out/lib
+  '';
+
+  meta = with lib; {
+    description = "A CLI for the PRQL compiler - a simple, powerful, pipelined SQL replacement";
+    homepage = "https://github.com/prql/prql";
+    changelog = "https://github.com/prql/prql/blob/${src.rev}/CHANGELOG.md";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ dit7ya ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/pyrseas/default.nix b/nixpkgs/pkgs/development/tools/database/pyrseas/default.nix
new file mode 100644
index 000000000000..cf93f114e7db
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/pyrseas/default.nix
@@ -0,0 +1,49 @@
+{ lib, python3Packages, fetchFromGitHub }:
+
+let
+  pgdbconn = python3Packages.buildPythonPackage rec {
+    pname = "pgdbconn";
+    version = "0.8.0";
+
+    src = fetchFromGitHub {
+      owner = "perseas";
+      repo = "pgdbconn";
+      rev = "v${version}";
+      sha256 = "09r4idk5kmqi3yig7ip61r6js8blnmac5n4q32cdcbp1rcwzdn6z";
+    };
+
+    # The tests are impure (they try to access a PostgreSQL server)
+    doCheck = false;
+
+    propagatedBuildInputs = with python3Packages; [ psycopg2 pytest ];
+  };
+in
+
+python3Packages.buildPythonApplication rec {
+  pname = "pyrseas";
+  version = "0.9.1";
+
+  src = fetchFromGitHub {
+    owner = "perseas";
+    repo = "Pyrseas";
+    rev = version;
+    sha256 = "sha256-+MxnxvbLMxK1Ak+qKpKe3GHbzzC+XHO0eR7rl4ON9H4=";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    psycopg2
+    pytest
+    pyyaml
+    pgdbconn
+  ];
+
+  # The tests are impure (they try to access a PostgreSQL server)
+  doCheck = false;
+
+  meta = {
+    description = "A declarative language to describe PostgreSQL databases";
+    homepage = "https://perseas.github.io/";
+    license = lib.licenses.bsd3;
+    maintainers = with lib.maintainers; [ pmeunier ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/replibyte/default.nix b/nixpkgs/pkgs/development/tools/database/replibyte/default.nix
new file mode 100644
index 000000000000..ed47d29cffe3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/replibyte/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+, fetchpatch
+, pkg-config
+, openssl
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "replibyte";
+  version = "0.9.7";
+
+  src = fetchFromGitHub {
+    owner = "Qovery";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "02bdz0464d6gbkgbvn67sgn6cc6p6pjqacblh8nimy0r8b13x2ki";
+  };
+
+  # Lockfile was updated in a commit after the release
+  cargoPatches = [
+    (fetchpatch {
+      url = "https://github.com/Qovery/Replibyte/commit/15f122cc83fff03ae410be705779ab964fa7b375.patch";
+      sha256 = "sha256-v95V4pl/2WN2do2SLVTJIO+5J7esqhC2BZaGBEtDhe0=";
+    })
+  ];
+
+  cargoSha256 = "sha256-Y9CXpJTY/uszAVAbafa2+FumWKWFGaOLhK1FY+Nc+EU=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ openssl ] ++ lib.optionals stdenv.isDarwin [ Security ];
+
+  cargoBuildFlags = [ "--all-features" ];
+
+  doCheck = false; # requires multiple dbs to be installed
+
+  meta = with lib; {
+    description = "Seed your development database with real data";
+    homepage = "https://github.com/Qovery/replibyte";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ dit7ya ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/schemaspy/default.nix b/nixpkgs/pkgs/development/tools/database/schemaspy/default.nix
new file mode 100644
index 000000000000..6847b9aa20a7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/schemaspy/default.nix
@@ -0,0 +1,66 @@
+{ lib
+, maven
+, jre
+, makeWrapper
+, git
+, fetchFromGitHub
+, graphviz
+, ensureNewerSourcesHook
+}:
+
+maven.buildMavenPackage rec {
+  pname = "schemaspy";
+  version = "6.1.1-SNAPSHOT";
+
+  src = fetchFromGitHub {
+    owner = "schemaspy";
+    repo = "schemaspy";
+    rev = "110b1614f9ae4aec0e4dc4e8f0e7c647274d3af6";
+    hash = "sha256-X5B34zGhD/NxcK8TQvwdk1NljGJ1HwfBp47ocbE4HiU=";
+  };
+
+  mvnParameters = "-Dmaven.test.skip=true";
+  mvnFetchExtraArgs = {
+    nativeBuildInputs = [
+      # the build system gets angry if it doesn't see git (even though it's not
+      # actually in a git repository)
+      git
+      maven
+    ];
+  };
+  mvnHash = "sha256-1x6cNt6t3FnjRNg8iNYflkyDnuPFXGKoxhVJWoz2jIU=";
+
+  nativeBuildInputs = [
+    makeWrapper
+    git
+
+    # springframework boot gets angry about 1970 sources
+    # fix from https://github.com/nix-community/mavenix/issues/25
+    (ensureNewerSourcesHook { year = "1980"; })
+  ];
+
+  wrappedPath = lib.makeBinPath [
+    graphviz
+  ];
+
+  preBuild = ''
+    VERSION=${version}
+    SEMVER_STR=${version}
+  '';
+
+  installPhase = ''
+    install -D target/${pname}-${version}.jar $out/share/java/${pname}-${version}.jar
+
+    makeWrapper ${jre}/bin/java $out/bin/schemaspy \
+      --add-flags "-jar $out/share/java/${pname}-${version}.jar" \
+      --prefix PATH : "$wrappedPath"
+  '';
+
+  meta = with lib; {
+    homepage = "https://schemaspy.org";
+    description = "Document your database simply and easily";
+    license = licenses.lgpl3Plus;
+    maintainers = with maintainers; [ jraygauthier ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/development/tools/database/shmig/default.nix b/nixpkgs/pkgs/development/tools/database/shmig/default.nix
new file mode 100644
index 000000000000..5bb023931388
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/shmig/default.nix
@@ -0,0 +1,43 @@
+{ stdenv, fetchFromGitHub
+, withMySQL ? true, withPSQL ? false, withSQLite ? false
+, mariadb, postgresql, sqlite, gawk, gnugrep, findutils, gnused
+, lib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "shmig";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "mbucc";
+    repo = "shmig";
+    rev = "v${version}";
+    sha256 = "15ry1d51d6dlzzzhck2x57wrq48vs4n9pp20bv2sz6nk92fva5l5";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  postPatch = ''
+    patchShebangs .
+
+    substituteInPlace shmig \
+      --replace "\`which mysql\`" "${lib.optionalString withMySQL "${mariadb.client}/bin/mysql"}" \
+      --replace "\`which psql\`" "${lib.optionalString withPSQL "${postgresql}/bin/psql"}" \
+      --replace "\`which sqlite3\`" "${lib.optionalString withSQLite "${sqlite}/bin/sqlite3"}" \
+      --replace "awk" "${gawk}/bin/awk" \
+      --replace "grep" "${gnugrep}/bin/grep" \
+      --replace "find" "${findutils}/bin/find" \
+      --replace "sed" "${gnused}/bin/sed"
+  '';
+
+  preBuild = ''
+    mkdir -p $out/bin
+  '';
+
+  meta = with lib; {
+    description = "Minimalistic database migration tool with MySQL, PostgreSQL and SQLite support";
+    homepage = "https://github.com/mbucc/shmig";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/sleek/Cargo.lock b/nixpkgs/pkgs/development/tools/database/sleek/Cargo.lock
new file mode 100644
index 000000000000..b7f385d76c7c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/sleek/Cargo.lock
@@ -0,0 +1,470 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "anstream"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e579a7752471abc2a8268df8b20005e3eadd975f585398f17efcfd8d4927371"
+dependencies = [
+ "anstyle",
+ "anstyle-parse",
+ "anstyle-query",
+ "anstyle-wincon",
+ "colorchoice",
+ "is-terminal",
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41ed9a86bf92ae6580e0a31281f65a1b1d867c0cc68d5346e2ae128dddfa6a7d"
+
+[[package]]
+name = "anstyle-parse"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e765fd216e48e067936442276d1d57399e37bce53c264d6fefbe298080cb57ee"
+dependencies = [
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle-query"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b"
+dependencies = [
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "anstyle-wincon"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bcd8291a340dd8ac70e18878bc4501dd7b4ff970cfa21c207d36ece51ea88fd"
+dependencies = [
+ "anstyle",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "cc"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
+
+[[package]]
+name = "clap"
+version = "4.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93aae7a4192245f70fe75dd9157fc7b4a5bf53e88d30bd4396f7d8f9284d5acc"
+dependencies = [
+ "clap_builder",
+ "clap_derive",
+ "once_cell",
+]
+
+[[package]]
+name = "clap_builder"
+version = "4.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4f423e341edefb78c9caba2d9c7f7687d0e72e89df3ce3394554754393ac3990"
+dependencies = [
+ "anstream",
+ "anstyle",
+ "bitflags",
+ "clap_lex",
+ "once_cell",
+ "strsim",
+]
+
+[[package]]
+name = "clap_derive"
+version = "4.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "191d9573962933b4027f932c600cd252ce27a8ad5979418fe78e43c07996f27b"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2da6da31387c7e4ef160ffab6d5e7f00c42626fe39aea70a7b0f1773f7dd6c1b"
+
+[[package]]
+name = "colorchoice"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
+
+[[package]]
+name = "either"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91"
+
+[[package]]
+name = "errno"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50d6a0976c999d473fe89ad888d5a284e55366d9dc9038b1ba2aa15128c4afa0"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "errno-dragonfly"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "glob"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
+
+[[package]]
+name = "heck"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286"
+
+[[package]]
+name = "io-lifetimes"
+version = "1.0.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220"
+dependencies = [
+ "hermit-abi",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "is-terminal"
+version = "0.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "adcf93614601c8129ddf72e2d5633df827ba6551541c6d8c59520a371475be1f"
+dependencies = [
+ "hermit-abi",
+ "io-lifetimes",
+ "rustix",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "itertools"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.141"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3304a64d199bb964be99741b7a14d26972741915b3649639149b2479bb46f4b5"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d59d8c75012853d2e872fb56bc8a2e53718e2cafe1a4c823143141c6d90c322f"
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "minimal-lexical"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+
+[[package]]
+name = "nom"
+version = "7.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
+dependencies = [
+ "memchr",
+ "minimal-lexical",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.17.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.56"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rustix"
+version = "0.37.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1aef160324be24d31a62147fae491c14d2204a3865c7ca8c3b0d7f7bcb3ea635"
+dependencies = [
+ "bitflags",
+ "errno",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "sleek"
+version = "0.3.0"
+dependencies = [
+ "clap",
+ "glob",
+ "sqlformat",
+ "thiserror",
+]
+
+[[package]]
+name = "sqlformat"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c12bc9199d1db8234678b7051747c07f517cdcf019262d1847b94ec8b1aee3e"
+dependencies = [
+ "itertools",
+ "nom",
+ "unicode_categories",
+]
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "syn"
+version = "2.0.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c9da457c5285ac1f936ebd076af6dac17a61cfe7826f2076b4d015cf47bc8ec"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4"
+
+[[package]]
+name = "unicode_categories"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e"
+
+[[package]]
+name = "utf8parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
+
+[[package]]
+name = "windows-sys"
+version = "0.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
+dependencies = [
+ "windows-targets 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets 0.48.0",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5"
+dependencies = [
+ "windows_aarch64_gnullvm 0.48.0",
+ "windows_aarch64_msvc 0.48.0",
+ "windows_i686_gnu 0.48.0",
+ "windows_i686_msvc 0.48.0",
+ "windows_x86_64_gnu 0.48.0",
+ "windows_x86_64_gnullvm 0.48.0",
+ "windows_x86_64_msvc 0.48.0",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
diff --git a/nixpkgs/pkgs/development/tools/database/sleek/default.nix b/nixpkgs/pkgs/development/tools/database/sleek/default.nix
new file mode 100644
index 000000000000..c92bc7ed2be3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/sleek/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "sleek";
+  version = "0.3.0";
+
+  src = fetchFromGitHub {
+    owner = "nrempel";
+    repo = "sleek";
+    rev = "v${version}";
+    hash = "sha256-VQ0LmKhFsC12qoXCFHxtV5E+J7eRvZMVH0j+5r8pDk8=";
+  };
+
+  # 0.3.0 has been tagged before the actual Cargo.lock bump, resulting in an inconsitent lock file.
+  # To work around this, the Cargo.lock below is from the commit right after the tag:
+  # https://github.com/nrempel/sleek/commit/18c5457a813a16e3eebfc1c6f512131e6e8daa02
+  postPatch = ''
+    ln -s --force ${./Cargo.lock} Cargo.lock
+  '';
+
+  cargoLock.lockFile = ./Cargo.lock;
+
+  meta = with lib; {
+    description = "A CLI tool for formatting SQL";
+    homepage = "https://github.com/nrempel/sleek";
+    license = licenses.mit;
+    maintainers = with maintainers; [ xrelkd ];
+    mainProgram = "sleek";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/sqlboiler-crdb/default.nix b/nixpkgs/pkgs/development/tools/database/sqlboiler-crdb/default.nix
new file mode 100644
index 000000000000..559c8f277581
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/sqlboiler-crdb/default.nix
@@ -0,0 +1,24 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+buildGoModule rec {
+  pname = "sqlboiler-crbd";
+  version = "unstable-2022-06-12";
+
+  src = fetchFromGitHub {
+    owner = "glerchundi";
+    repo = "sqlboiler-crdb";
+    rev = "7b35c4d19c05fdc53d1efdcc074f20ee6b56f340";
+    hash = "sha256-RlppCRYP7TlM1z1PiXtEVifNVxQHwLuoBXxgYIpUirE=";
+  };
+
+  vendorHash = "sha256-N16GH8ZDyeWWBsaaG4RkJwzAbuQ7E8YjZAgVsfeECo4";
+
+  doCheck = false; # requires a running testdb
+
+  meta = with lib; {
+    description = "CockroachDB generator for usage with SQLBoiler";
+    homepage = "https://github.com/glerchundi/sqlboiler-crdb/";
+    maintainers = with maintainers; [ dgollings ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/sqlc/default.nix b/nixpkgs/pkgs/development/tools/database/sqlc/default.nix
new file mode 100644
index 000000000000..8908d27ad000
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/sqlc/default.nix
@@ -0,0 +1,28 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+let
+  version = "1.25.0";
+in
+buildGoModule {
+  pname = "sqlc";
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner = "sqlc-dev";
+    repo = "sqlc";
+    rev = "v${version}";
+    hash = "sha256-VrR/oSGyKtbKHfQaiLQ9oKyWC1Y7lTZO1aUSS5bCkKY=";
+  };
+
+  proxyVendor = true;
+  vendorHash = "sha256-C5OOTAYoSt4anz1B/NGDHY5NhxfyTZ6EHis04LFnMPM=";
+
+  subPackages = [ "cmd/sqlc" ];
+
+  meta = {
+    description = "Generate type-safe code from SQL";
+    homepage = "https://sqlc.dev/";
+    license = lib.licenses.mit;
+    maintainers = [ lib.maintainers.adisbladis ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/sqlcheck/default.nix b/nixpkgs/pkgs/development/tools/database/sqlcheck/default.nix
new file mode 100644
index 000000000000..28f8b174cbc7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/sqlcheck/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, cmake }:
+
+stdenv.mkDerivation rec {
+  pname = "sqlcheck";
+  version = "1.3";
+
+  src = fetchFromGitHub {
+    owner = "jarulraj";
+    repo = "sqlcheck";
+    rev = "v${version}";
+    sha256 = "sha256-rGqCtEO2K+OT44nYU93mF1bJ07id+ixPkRSC8DcO6rY=";
+    fetchSubmodules = true;
+  };
+
+  patches = [
+    # Fix gcc-13 build failure:
+    #   https://github.com/jarulraj/sqlcheck/pull/62
+    (fetchpatch {
+      name = "gcc-13.patch";
+      url = "https://github.com/jarulraj/sqlcheck/commit/ca131db13b860cf1d9194a1c7f7112f28f49acca.patch";
+      hash = "sha256-uoF7rYvjdIUu82JCLXq/UGswgwM6JCpmABP4ItWjDe4=";
+    })
+  ];
+
+  nativeBuildInputs = [ cmake ];
+
+  doCheck = true;
+
+  meta = with lib; {
+    inherit (src.meta) homepage;
+    description = "Automatically identify anti-patterns in SQL queries";
+    license = licenses.asl20;
+    platforms = platforms.all;
+    maintainers = [ maintainers.marsam ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/sqlcl/default.nix b/nixpkgs/pkgs/development/tools/database/sqlcl/default.nix
new file mode 100644
index 000000000000..60421c59ed49
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/sqlcl/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, makeWrapper, fetchurl, unzip, jdk }:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "sqlcl";
+  version = "23.4.0.023.2321";
+
+  src = fetchurl {
+    url = "https://download.oracle.com/otn_software/java/sqldeveloper/sqlcl-${finalAttrs.version}.zip";
+    hash = "sha256-8K2yuLYMJI9fFeDcHpWHYmIxZGC06/heYBEW1z2tGc4=";
+  };
+
+  nativeBuildInputs = [ makeWrapper unzip ];
+
+  unpackCmd = "unzip $curSrc";
+
+  installPhase = ''
+    mkdir -p $out/libexec
+    mv * $out/libexec/
+
+    makeWrapper $out/libexec/bin/sql $out/bin/sqlcl \
+      --set JAVA_HOME ${jdk.home} \
+      --chdir "$out/libexec/bin"
+  '';
+
+  meta = with lib; {
+    description = "Oracle's Oracle DB CLI client";
+    longDescription = ''
+      Oracle SQL Developer Command Line (SQLcl) is a free command line
+      interface for Oracle Database. It allows you to interactively or batch
+      execute SQL and PL/SQL. SQLcl provides in-line editing, statement
+      completion, and command recall for a feature-rich experience, all while
+      also supporting your previously written SQL*Plus scripts.
+    '';
+    homepage = "https://www.oracle.com/database/sqldeveloper/technologies/sqlcl/";
+    license = licenses.unfreeRedistributable;
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ misterio77 ];
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/database/sqlcmd/default.nix b/nixpkgs/pkgs/development/tools/database/sqlcmd/default.nix
new file mode 100644
index 000000000000..80883ebfe996
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/sqlcmd/default.nix
@@ -0,0 +1,55 @@
+{ buildGoModule
+, fetchFromGitHub
+, installShellFiles
+, lib
+, sqlcmd
+, testers
+}:
+
+buildGoModule rec {
+  pname = "sqlcmd";
+  version = "1.5.0";
+
+  src = fetchFromGitHub {
+    repo = "go-sqlcmd";
+    owner = "microsoft";
+    rev = "v${version}";
+    sha256 = "sha256-T7Jfxup3yTh0YhalUO/wxyAT4209BhZkUTbCGZggcJ0=";
+  };
+
+  vendorHash = "sha256-NYWmTXGxt2ko/puNiY2Z0K6gFZW4IC//iT6xQcqSVsQ=";
+  proxyVendor = true;
+
+  ldflags = [ "-s" "-w" "-X main.version=${version}" ];
+
+  subPackages = [ "cmd/modern" ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  preCheck = ''
+    export HOME=$(mktemp -d)
+  '';
+
+  postInstall = ''
+    mv $out/bin/modern $out/bin/sqlcmd
+
+    installShellCompletion --cmd sqlcmd \
+      --bash <($out/bin/sqlcmd completion bash) \
+      --fish <($out/bin/sqlcmd completion fish) \
+      --zsh <($out/bin/sqlcmd completion zsh)
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = sqlcmd;
+    command = "sqlcmd --version";
+    inherit version;
+  };
+
+  meta = {
+    description = "A command line tool for working with Microsoft SQL Server, Azure SQL Database, and Azure Synapse";
+    homepage = "https://github.com/microsoft/go-sqlcmd";
+    changelog = "https://github.com/microsoft/go-sqlcmd/releases/tag/v${version}";
+    license = lib.licenses.mit;
+    maintainers = [ lib.maintainers.ratsclub ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/sqldeveloper/default.nix b/nixpkgs/pkgs/development/tools/database/sqldeveloper/default.nix
new file mode 100644
index 000000000000..655156c176c6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/sqldeveloper/default.nix
@@ -0,0 +1,84 @@
+{ lib, stdenv, makeDesktopItem, makeWrapper, requireFile, unzip, jdk }:
+
+let
+  version = "20.4.0.379.2205";
+
+  desktopItem = makeDesktopItem {
+    name = "sqldeveloper";
+    exec = "sqldeveloper";
+    icon = "sqldeveloper";
+    desktopName = "Oracle SQL Developer";
+    genericName = "Oracle SQL Developer";
+    comment = "Oracle's Oracle DB GUI client";
+    categories = [ "Development" ];
+  };
+in
+  stdenv.mkDerivation {
+
+  inherit version;
+  pname = "sqldeveloper";
+
+  src = requireFile rec {
+    name = "sqldeveloper-${version}-no-jre.zip";
+    url = "https://www.oracle.com/tools/downloads/sqldev-downloads.html";
+    message = ''
+      This Nix expression requires that ${name} already be part of the store. To
+      obtain it you need to
+
+      - navigate to ${url}
+      - make sure that it says "Version ${version}" above the list of downloads
+        - if it does not, click on the "Previous Version" link below the downloads
+          and repeat until the version is correct. This is necessarry because as the
+          time of this writing there exists no permanent link for the current version
+          yet.
+          Also consider updating this package yourself (you probably just need to
+          change the `version` variable and update the sha256 to the one of the
+          new file) or opening an issue at the nixpkgs repo.
+      - accept the license agreement
+      - download the file listed under "Other Platforms"
+      - sign in or create an oracle account if neccessary
+
+      and then add the file to the Nix store using either:
+
+        nix-store --add-fixed sha256 ${name}
+
+      or
+
+        nix-prefetch-url --type sha256 file:///path/to/${name}
+    '';
+    sha256 = "1h53gl41ydr7kim6q9ckg3xyhb0rhmwj7jnis0xz6vms52b3h59k";
+  };
+
+  nativeBuildInputs = [ makeWrapper unzip ];
+
+  unpackCmd = "unzip $curSrc";
+
+  installPhase = ''
+    mkdir -p $out/libexec $out/share/{applications,pixmaps}
+    mv * $out/libexec/
+
+    mv $out/libexec/icon.png $out/share/pixmaps/sqldeveloper.png
+    cp ${desktopItem}/share/applications/* $out/share/applications
+
+    makeWrapper $out/libexec/sqldeveloper/bin/sqldeveloper $out/bin/sqldeveloper \
+      --set JAVA_HOME ${jdk.home} \
+      --chdir "$out/libexec/sqldeveloper/bin"
+  '';
+
+  meta = with lib; {
+    description = "Oracle's Oracle DB GUI client";
+    longDescription = ''
+      Oracle SQL Developer is a free integrated development environment that
+      simplifies the development and management of Oracle Database in both
+      traditional and Cloud deployments. SQL Developer offers complete
+      end-to-end development of your PL/SQL applications, a worksheet for
+      running queries and scripts, a DBA console for managing the database,
+      a reports interface, a complete data modeling solution, and a migration
+      platform for moving your 3rd party databases to Oracle.
+    '';
+    homepage = "http://www.oracle.com/technetwork/developer-tools/sql-developer/overview/";
+    license = licenses.unfree;
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ ardumont ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/sqlfluff/default.nix b/nixpkgs/pkgs/development/tools/database/sqlfluff/default.nix
new file mode 100644
index 000000000000..89ae63369ff4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/sqlfluff/default.nix
@@ -0,0 +1,71 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "sqlfluff";
+  version = "2.3.5";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "refs/tags/${version}";
+    hash = "sha256-l9py+qMI8t5L+FcUmJYXwemjUy/pcugbvhdW3oUOZMo=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    appdirs
+    cached-property
+    chardet
+    click
+    colorama
+    configparser
+    diff-cover
+    jinja2
+    oyaml
+    pathspec
+    pytest
+    regex
+    tblib
+    toml
+    tqdm
+    typing-extensions
+  ] ++ lib.optionals (pythonOlder "3.8") [
+    backports.cached-property
+    importlib_metadata
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    hypothesis
+    pytestCheckHook
+  ];
+
+  disabledTestPaths = [
+    # Don't run the plugin related tests
+    "plugins/sqlfluff-plugin-example/test/rules/rule_test_cases_test.py"
+    "plugins/sqlfluff-templater-dbt"
+    "test/core/plugin_test.py"
+    "test/diff_quality_plugin_test.py"
+  ];
+
+  disabledTests = [
+    # dbt is not available yet
+    "test__linter__skip_dbt_model_disabled"
+    "test_rules__test_helper_has_variable_introspection"
+    "test__rules__std_file_dbt"
+  ];
+
+  pythonImportsCheck = [
+    "sqlfluff"
+  ];
+
+  meta = with lib; {
+    description = "SQL linter and auto-formatter";
+    homepage = "https://www.sqlfluff.com/";
+    changelog = "https://github.com/sqlfluff/sqlfluff/blob/${version}/CHANGELOG.md";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/sqlite-web/default.nix b/nixpkgs/pkgs/development/tools/database/sqlite-web/default.nix
new file mode 100644
index 000000000000..351c5475ea0e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/sqlite-web/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, python3Packages
+, fetchPypi
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "sqlite-web";
+  version = "0.6.2";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-VIbmYN6KjCRpE+kvJyBV75deYmh+zRjcQXZ2/7mseYU=";
+  };
+
+  propagatedBuildInputs = with python3Packages; [ flask peewee pygments ];
+
+  # no tests in repository
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Web-based SQLite database browser";
+    homepage = "https://github.com/coleifer/sqlite-web";
+    license = licenses.mit;
+    maintainers = [ maintainers.costrouc ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/sqlitebrowser/default.nix b/nixpkgs/pkgs/development/tools/database/sqlitebrowser/default.nix
new file mode 100644
index 000000000000..aa5e2d8f6e0e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/sqlitebrowser/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, mkDerivation, fetchFromGitHub, cmake
+, qtbase, qttools, sqlcipher, wrapGAppsHook, qtmacextras
+}:
+
+mkDerivation rec {
+  pname = "sqlitebrowser";
+  version = "3.12.2";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-33iVic0kxemWld+SiHOWGlKFSi5fpk1RtLUiNDr7WNI=";
+  };
+
+  # We should be using qscintilla from nixpkgs instead of the vendored version,
+  # but qscintilla is currently in a bit of a mess as some consumers expect a
+  # -qt4 or -qt5 prefix while others do not.
+  # We *really* should get that cleaned up.
+  buildInputs = [ qtbase sqlcipher ] ++ lib.optionals stdenv.isDarwin [ qtmacextras ];
+
+  nativeBuildInputs = [ cmake qttools wrapGAppsHook ];
+
+  cmakeFlags = [
+    "-Dsqlcipher=1"
+  ];
+
+  meta = with lib; {
+    description = "DB Browser for SQLite";
+    homepage = "https://sqlitebrowser.org/";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ peterhoeg ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/squirrel-sql/default.nix b/nixpkgs/pkgs/development/tools/database/squirrel-sql/default.nix
new file mode 100644
index 000000000000..0f866d5e5ae7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/squirrel-sql/default.nix
@@ -0,0 +1,78 @@
+# To enable specific database drivers, override this derivation and pass the
+# driver packages in the drivers argument (e.g. mysql_jdbc, postgresql_jdbc).
+{ lib, stdenv, fetchurl, makeDesktopItem, makeWrapper, unzip
+, jre
+, drivers ? []
+}:
+stdenv.mkDerivation rec {
+  pname = "squirrel-sql";
+  version = "4.6.0";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/squirrel-sql/1-stable/${version}-plainzip/squirrelsql-${version}-standard.zip";
+    sha256 = "sha256-MMRn83yAi9saUI3/QHggj4s2t0uzZ1oJf9+CIqf4dGc=";
+  };
+
+  nativeBuildInputs = [ makeWrapper unzip ];
+  buildInputs = [ jre ];
+
+  unpackPhase = ''
+    runHook preUnpack
+    unzip ${src}
+    runHook postUnpack
+  '';
+
+  buildPhase = ''
+    runHook preBuild
+    cd squirrelsql-${version}-standard
+    chmod +x squirrel-sql.sh
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/share/squirrel-sql
+    cp -r . $out/share/squirrel-sql
+
+    mkdir -p $out/bin
+    cp=""
+    for pkg in ${builtins.concatStringsSep " " drivers}; do
+      if test -n "$cp"; then
+        cp="$cp:"
+      fi
+      cp="$cp"$(echo $pkg/share/java/*.jar | tr ' ' :)
+    done
+    makeWrapper $out/share/squirrel-sql/squirrel-sql.sh $out/bin/squirrel-sql \
+      --set CLASSPATH "$cp" \
+      --set JAVA_HOME "${jre}"
+    # Make sure above `CLASSPATH` gets picked up
+    substituteInPlace $out/share/squirrel-sql/squirrel-sql.sh --replace "-cp \"\$CP\"" "-cp \"\$CLASSPATH:\$CP\""
+
+    mkdir -p $out/share/icons/hicolor/32x32/apps
+    ln -s $out/share/squirrel-sql/icons/acorn.png \
+      $out/share/icons/hicolor/32x32/apps/squirrel-sql.png
+    ln -s ${desktopItem}/share/applications $out/share
+
+    runHook postInstall
+  '';
+
+  desktopItem = makeDesktopItem {
+    name = "squirrel-sql";
+    exec = "squirrel-sql";
+    comment = meta.description;
+    desktopName = "SQuirreL SQL";
+    genericName = "SQL Client";
+    categories = [ "Development" ];
+    icon = "squirrel-sql";
+  };
+
+  meta = with lib; {
+    description = "Universal SQL Client";
+    homepage = "http://squirrel-sql.sourceforge.net/";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.lgpl21Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ khumba ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/surrealdb-migrations/Cargo.lock b/nixpkgs/pkgs/development/tools/database/surrealdb-migrations/Cargo.lock
new file mode 100644
index 000000000000..7865c0cea6bf
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/surrealdb-migrations/Cargo.lock
@@ -0,0 +1,4251 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "addr"
+version = "0.15.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a93b8a41dbe230ad5087cc721f8d41611de654542180586b315d9f4cf6b72bef"
+dependencies = [
+ "psl-types",
+]
+
+[[package]]
+name = "addr2line"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb"
+dependencies = [
+ "gimli",
+]
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "ahash"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47"
+dependencies = [
+ "getrandom",
+ "once_cell",
+ "version_check",
+]
+
+[[package]]
+name = "ahash"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+ "version_check",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c378d78423fdad8089616f827526ee33c19f2fddbd5de1629152c9593ba4783"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "android-tzdata"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
+
+[[package]]
+name = "android_system_properties"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "anstream"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2ab91ebe16eb252986481c5b62f6098f3b698a45e34b5b98200cf20dd2484a44"
+dependencies = [
+ "anstyle",
+ "anstyle-parse",
+ "anstyle-query",
+ "anstyle-wincon",
+ "colorchoice",
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b84bf0a05bbb2a83e5eb6fa36bb6e87baa08193c35ff52bbf6b38d8af2890e46"
+
+[[package]]
+name = "anstyle-parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "938874ff5980b03a87c5524b3ae5b59cf99b1d6bc836848df7bc5ada9643c333"
+dependencies = [
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle-query"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b"
+dependencies = [
+ "windows-sys",
+]
+
+[[package]]
+name = "anstyle-wincon"
+version = "3.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0699d10d2f4d628a98ee7b57b289abbc98ff3bad977cb3152709d4bf2330628"
+dependencies = [
+ "anstyle",
+ "windows-sys",
+]
+
+[[package]]
+name = "any_ascii"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea50b14b7a4b9343f8c627a7a53c52076482bd4bdad0a24fd3ec533ed616cc2c"
+
+[[package]]
+name = "approx"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "argon2"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17ba4cac0a46bc1d2912652a751c47f2a9f3a7fe89bcae2275d418f5270402f9"
+dependencies = [
+ "base64ct",
+ "blake2",
+ "cpufeatures",
+ "password-hash",
+]
+
+[[package]]
+name = "arrayvec"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711"
+
+[[package]]
+name = "ascii-canvas"
+version = "3.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8824ecca2e851cec16968d54a01dd372ef8f95b244fb84b84e70128be347c3c6"
+dependencies = [
+ "term",
+]
+
+[[package]]
+name = "assert_cmd"
+version = "2.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88903cb14723e4d4003335bb7f8a14f27691649105346a0f0957466c096adfe6"
+dependencies = [
+ "anstyle",
+ "bstr",
+ "doc-comment",
+ "predicates",
+ "predicates-core",
+ "predicates-tree",
+ "wait-timeout",
+]
+
+[[package]]
+name = "assert_fs"
+version = "1.0.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f070617a68e5c2ed5d06ee8dd620ee18fb72b99f6c094bed34cf8ab07c875b48"
+dependencies = [
+ "anstyle",
+ "doc-comment",
+ "globwalk",
+ "predicates",
+ "predicates-core",
+ "predicates-tree",
+ "tempfile",
+]
+
+[[package]]
+name = "async-channel"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35"
+dependencies = [
+ "concurrent-queue",
+ "event-listener",
+ "futures-core",
+]
+
+[[package]]
+name = "async-executor"
+version = "1.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6fa3dc5f2a8564f07759c008b9109dc0d39de92a88d5588b8a5036d286383afb"
+dependencies = [
+ "async-lock",
+ "async-task",
+ "concurrent-queue",
+ "fastrand 1.9.0",
+ "futures-lite",
+ "slab",
+]
+
+[[package]]
+name = "async-lock"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b"
+dependencies = [
+ "event-listener",
+]
+
+[[package]]
+name = "async-recursion"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fd55a5ba1179988837d24ab4c7cc8ed6efdeff578ede0416b4225a5fca35bd0"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "async-stream"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51"
+dependencies = [
+ "async-stream-impl",
+ "futures-core",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "async-stream-impl"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "async-task"
+version = "4.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ecc7ab41815b3c653ccd2978ec3255c81349336702dfdf62ee6f7069b12a3aae"
+
+[[package]]
+name = "async_io_stream"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6d7b9decdf35d8908a7e3ef02f64c5e9b1695e230154c0e8de3969142d9b94c"
+dependencies = [
+ "futures",
+ "pharos",
+ "rustc_version",
+]
+
+[[package]]
+name = "atomic"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c59bdb34bc650a32731b31bd8f0829cc15d24a708ee31559e0bb34f2bc320cba"
+
+[[package]]
+name = "atomic-polyfill"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3ff7eb3f316534d83a8a2c3d1674ace8a5a71198eba31e2e2b597833f699b28"
+dependencies = [
+ "critical-section",
+]
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi 0.1.19",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "backtrace"
+version = "0.3.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837"
+dependencies = [
+ "addr2line",
+ "cc",
+ "cfg-if",
+ "libc",
+ "miniz_oxide",
+ "object",
+ "rustc-demangle",
+]
+
+[[package]]
+name = "base64"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
+
+[[package]]
+name = "base64"
+version = "0.21.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ba43ea6f343b788c8764558649e08df62f86c6ef251fdaeb1ffd010a9ae50a2"
+
+[[package]]
+name = "base64ct"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b"
+
+[[package]]
+name = "bcrypt"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9df288bec72232f78c1ec5fe4e8f1d108aa0265476e93097593c803c8c02062a"
+dependencies = [
+ "base64 0.21.4",
+ "blowfish",
+ "getrandom",
+ "subtle",
+ "zeroize",
+]
+
+[[package]]
+name = "bincode"
+version = "1.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "bit-set"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1"
+dependencies = [
+ "bit-vec",
+]
+
+[[package]]
+name = "bit-vec"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bitflags"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635"
+
+[[package]]
+name = "bitvec"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c"
+dependencies = [
+ "funty",
+ "radium",
+ "tap",
+ "wyz",
+]
+
+[[package]]
+name = "blake2"
+version = "0.10.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe"
+dependencies = [
+ "digest",
+]
+
+[[package]]
+name = "block-buffer"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "blowfish"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e412e2cd0f2b2d93e02543ceae7917b3c70331573df19ee046bcbc35e45e87d7"
+dependencies = [
+ "byteorder",
+ "cipher",
+]
+
+[[package]]
+name = "borsh"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4114279215a005bc675e386011e594e1d9b800918cea18fcadadcce864a2046b"
+dependencies = [
+ "borsh-derive",
+ "hashbrown 0.13.2",
+]
+
+[[package]]
+name = "borsh-derive"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0754613691538d51f329cce9af41d7b7ca150bc973056f1156611489475f54f7"
+dependencies = [
+ "borsh-derive-internal",
+ "borsh-schema-derive-internal",
+ "proc-macro-crate",
+ "proc-macro2",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "borsh-derive-internal"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "afb438156919598d2c7bad7e1c0adf3d26ed3840dbc010db1a882a65583ca2fb"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "borsh-schema-derive-internal"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "634205cc43f74a1b9046ef87c4540ebda95696ec0f315024860cad7c5b0f5ccd"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "bstr"
+version = "1.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c2f7349907b712260e64b0afe2f84692af14a454be26187d9df565c7f69266a"
+dependencies = [
+ "memchr",
+ "regex-automata 0.3.8",
+ "serde",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1"
+
+[[package]]
+name = "bytecheck"
+version = "0.6.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b6372023ac861f6e6dc89c8344a8f398fb42aaba2b5dbc649ca0c0e9dbcb627"
+dependencies = [
+ "bytecheck_derive",
+ "ptr_meta",
+ "simdutf8",
+]
+
+[[package]]
+name = "bytecheck_derive"
+version = "0.6.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a7ec4c6f261935ad534c0c22dbef2201b45918860eb1c574b972bd213a76af61"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "bytemuck"
+version = "1.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6"
+
+[[package]]
+name = "byteorder"
+version = "1.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
+
+[[package]]
+name = "bytes"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223"
+
+[[package]]
+name = "cc"
+version = "1.0.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "cedar-policy"
+version = "2.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "740e9c6999327357726ab9170defa1229c9a91f000c40cb02b343385cd7d8cf9"
+dependencies = [
+ "cedar-policy-core",
+ "cedar-policy-validator",
+ "itertools 0.10.5",
+ "lalrpop-util",
+ "ref-cast",
+ "serde",
+ "serde_json",
+ "smol_str",
+ "thiserror",
+]
+
+[[package]]
+name = "cedar-policy-core"
+version = "2.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c43c92ddadc29024643ef24ff0aeb665bb665750d401f6b5f4a9a44eae898ae"
+dependencies = [
+ "either",
+ "ipnet",
+ "itertools 0.10.5",
+ "lalrpop",
+ "lalrpop-util",
+ "lazy_static",
+ "regex",
+ "rustc_lexer",
+ "serde",
+ "serde_json",
+ "serde_with",
+ "smol_str",
+ "stacker",
+ "thiserror",
+]
+
+[[package]]
+name = "cedar-policy-validator"
+version = "2.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf263ac64b18d94d9cd8ae4d05b65100fc21647e20eb42f7735fb54ec887afa3"
+dependencies = [
+ "cedar-policy-core",
+ "itertools 0.10.5",
+ "serde",
+ "serde_json",
+ "serde_with",
+ "smol_str",
+ "stacker",
+ "thiserror",
+ "unicode-security",
+]
+
+[[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.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38"
+dependencies = [
+ "android-tzdata",
+ "iana-time-zone",
+ "js-sys",
+ "num-traits",
+ "serde",
+ "wasm-bindgen",
+ "windows-targets",
+]
+
+[[package]]
+name = "chrono-human-duration"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19283df3a144dfdeee6568e42ad7f0939d3c261bcdfe954b1a1098f6f7c1b908"
+dependencies = [
+ "chrono",
+]
+
+[[package]]
+name = "cipher"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad"
+dependencies = [
+ "crypto-common",
+ "inout",
+]
+
+[[package]]
+name = "clap"
+version = "3.2.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ea181bf566f71cb9a5d17a59e1871af638180a18fb0035c92ae62b705207123"
+dependencies = [
+ "atty",
+ "bitflags 1.3.2",
+ "clap_derive 3.2.25",
+ "clap_lex 0.2.4",
+ "indexmap 1.9.3",
+ "once_cell",
+ "strsim",
+ "termcolor",
+ "textwrap",
+]
+
+[[package]]
+name = "clap"
+version = "4.4.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfaff671f6b22ca62406885ece523383b9b64022e341e53e009a62ebc47a45f2"
+dependencies = [
+ "clap_builder",
+ "clap_derive 4.4.7",
+]
+
+[[package]]
+name = "clap_builder"
+version = "4.4.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a216b506622bb1d316cd51328dce24e07bdff4a6128a47c7e7fad11878d5adbb"
+dependencies = [
+ "anstream",
+ "anstyle",
+ "clap_lex 0.6.0",
+ "strsim",
+]
+
+[[package]]
+name = "clap_derive"
+version = "3.2.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae6371b8bdc8b7d3959e9cf7b22d4435ef3e79e138688421ec654acf8c81b008"
+dependencies = [
+ "heck",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "clap_derive"
+version = "4.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[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 = "clap_lex"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1"
+
+[[package]]
+name = "cli-table"
+version = "0.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "adfbb116d9e2c4be7011360d0c0bee565712c11e969c9609b25b619366dc379d"
+dependencies = [
+ "cli-table-derive",
+ "csv",
+ "termcolor",
+ "unicode-width",
+]
+
+[[package]]
+name = "cli-table-derive"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2af3bfb9da627b0a6c467624fb7963921433774ed435493b5c08a3053e829ad4"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "color-eyre"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a667583cca8c4f8436db8de46ea8233c42a7d9ae424a82d338f2e4675229204"
+dependencies = [
+ "backtrace",
+ "color-spantrace",
+ "eyre",
+ "indenter",
+ "once_cell",
+ "owo-colors",
+ "tracing-error",
+]
+
+[[package]]
+name = "color-spantrace"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ba75b3d9449ecdccb27ecbc479fdc0b87fa2dd43d2f8298f9bf0e59aacc8dce"
+dependencies = [
+ "once_cell",
+ "owo-colors",
+ "tracing-core",
+ "tracing-error",
+]
+
+[[package]]
+name = "colorchoice"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
+
+[[package]]
+name = "concurrent-queue"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62ec6771ecfa0762d24683ee5a32ad78487a3d3afdc0fb8cae19d2c5deb50b7c"
+dependencies = [
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "const-oid"
+version = "0.9.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28c122c3980598d243d63d9a704629a2d748d101f278052ff068be5a4423ab6f"
+
+[[package]]
+name = "const-random"
+version = "0.1.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "368a7a772ead6ce7e1de82bfb04c485f3db8ec744f72925af5735e29a22cc18e"
+dependencies = [
+ "const-random-macro",
+ "proc-macro-hack",
+]
+
+[[package]]
+name = "const-random-macro"
+version = "0.1.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d7d6ab3c3a2282db210df5f02c4dab6e0a7057af0fb7ebd4070f30fe05c0ddb"
+dependencies = [
+ "getrandom",
+ "once_cell",
+ "proc-macro-hack",
+ "tiny-keccak",
+]
+
+[[package]]
+name = "convert_case"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca"
+dependencies = [
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "critical-section"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7059fff8937831a9ae6f0fe4d658ffabf58f2ca96aa9dec1c889f936f705f216"
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "crunchy"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7"
+
+[[package]]
+name = "crypto-common"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+dependencies = [
+ "generic-array",
+ "typenum",
+]
+
+[[package]]
+name = "csv"
+version = "1.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "626ae34994d3d8d668f4269922248239db4ae42d538b14c398b74a52208e8086"
+dependencies = [
+ "csv-core",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "csv-core"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b2466559f260f48ad25fe6317b3c8dac77b5bdb5763ac7d9d6103530663bc90"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "darling"
+version = "0.20.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0209d94da627ab5605dcccf08bb18afa5009cfbef48d8a8b7d7bdbc79be25c5e"
+dependencies = [
+ "darling_core",
+ "darling_macro",
+]
+
+[[package]]
+name = "darling_core"
+version = "0.20.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "177e3443818124b357d8e76f53be906d60937f0d3a90773a664fa63fa253e621"
+dependencies = [
+ "fnv",
+ "ident_case",
+ "proc-macro2",
+ "quote",
+ "strsim",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "darling_macro"
+version = "0.20.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5"
+dependencies = [
+ "darling_core",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "dashmap"
+version = "5.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856"
+dependencies = [
+ "cfg-if",
+ "hashbrown 0.14.0",
+ "lock_api",
+ "once_cell",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "der"
+version = "0.7.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fffa369a668c8af7dbf8b5e56c9f744fbd399949ed171606040001947de40b1c"
+dependencies = [
+ "const-oid",
+ "pem-rfc7468",
+ "zeroize",
+]
+
+[[package]]
+name = "deranged"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2696e8a945f658fd14dc3b87242e6b80cd0f36ff04ea560fa39082368847946"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "deunicode"
+version = "1.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c1bba4f227a4a53d12b653f50ca7bf10c9119ae2aba56aff9e0338b5c98f36a"
+
+[[package]]
+name = "diff"
+version = "0.1.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8"
+
+[[package]]
+name = "difflib"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8"
+
+[[package]]
+name = "diffy"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e616e59155c92257e84970156f506287853355f58cd4a6eb167385722c32b790"
+dependencies = [
+ "nu-ansi-term",
+]
+
+[[package]]
+name = "digest"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
+dependencies = [
+ "block-buffer",
+ "const-oid",
+ "crypto-common",
+ "subtle",
+]
+
+[[package]]
+name = "dir-diff"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2860407d7d7e2e004bb2128510ad9e8d669e76fa005ccf567977b5d71b8b4a0b"
+dependencies = [
+ "walkdir",
+]
+
+[[package]]
+name = "dirs-next"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1"
+dependencies = [
+ "cfg-if",
+ "dirs-sys-next",
+]
+
+[[package]]
+name = "dirs-sys-next"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d"
+dependencies = [
+ "libc",
+ "redox_users",
+ "winapi",
+]
+
+[[package]]
+name = "dlv-list"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8aead04dc46b5f263c25721cf25c9e595951d15055f8063f92392fa0d7f64cf4"
+dependencies = [
+ "const-random",
+]
+
+[[package]]
+name = "dmp"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfaa1135a34d26e5cc5b4927a8935af887d4f30a5653a797c33b9a4222beb6d9"
+dependencies = [
+ "urlencoding",
+]
+
+[[package]]
+name = "doc-comment"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10"
+
+[[package]]
+name = "earcutr"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0812b44697951d35fde8fcb0da81c9de7e809e825a66bbf1ecb79d9829d4ca3d"
+dependencies = [
+ "itertools 0.10.5",
+ "num-traits",
+]
+
+[[package]]
+name = "either"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
+
+[[package]]
+name = "ena"
+version = "0.14.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c533630cf40e9caa44bd91aadc88a75d75a4c3a12b4cfde353cbed41daa1e1f1"
+dependencies = [
+ "log",
+]
+
+[[package]]
+name = "encoding_rs"
+version = "0.8.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "endian-type"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d"
+
+[[package]]
+name = "equivalent"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
+
+[[package]]
+name = "errno"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "136526188508e25c6fef639d7927dfb3e0e3084488bf202267829cf7fc23dbdd"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "windows-sys",
+]
+
+[[package]]
+name = "errno-dragonfly"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "event-listener"
+version = "2.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0"
+
+[[package]]
+name = "eyre"
+version = "0.6.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c2b6b5a29c02cdc822728b7d7b8ae1bab3e3b05d44522770ddd49722eeac7eb"
+dependencies = [
+ "indenter",
+ "once_cell",
+]
+
+[[package]]
+name = "fastrand"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "fastrand"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6999dc1837253364c2ebb0704ba97994bd874e8f195d665c50b7548f6ea92764"
+
+[[package]]
+name = "fixedbitset"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80"
+
+[[package]]
+name = "float-cmp"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "float_next_after"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8bf7cc16383c4b8d58b9905a8509f02926ce3058053c056376248d958c9df1e8"
+
+[[package]]
+name = "flume"
+version = "0.10.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1657b4441c3403d9f7b3409e47575237dac27b1b5726df654a6ecbf92f0f7577"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+ "nanorand",
+ "pin-project",
+ "spin 0.9.8",
+]
+
+[[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.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "fs_extra"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c"
+
+[[package]]
+name = "fst"
+version = "0.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ab85b9b05e3978cc9a9cf8fea7f01b494e1a09ed3037e16ba39edc7a29eb61a"
+
+[[package]]
+name = "funty"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c"
+
+[[package]]
+name = "futures"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-io",
+ "futures-sink",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+]
+
+[[package]]
+name = "futures-concurrency"
+version = "7.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d7cf7759a91582f72d30e68a2507feecac3dbcf6314ae91fa7046d6173d502e7"
+dependencies = [
+ "bitvec",
+ "futures-core",
+ "pin-project",
+ "slab",
+ "smallvec",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c"
+
+[[package]]
+name = "futures-executor"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-io"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964"
+
+[[package]]
+name = "futures-lite"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce"
+dependencies = [
+ "fastrand 1.9.0",
+ "futures-core",
+ "futures-io",
+ "memchr",
+ "parking",
+ "pin-project-lite",
+ "waker-fn",
+]
+
+[[package]]
+name = "futures-macro"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e"
+
+[[package]]
+name = "futures-task"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65"
+
+[[package]]
+name = "futures-util"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-macro",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "fuzzy-matcher"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54614a3312934d066701a80f20f15fa3b56d67ac7722b39eea5b4c9dd1d66c94"
+dependencies = [
+ "thread_local",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "geo"
+version = "0.25.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a5d07d2288645058f3c78bc64eadd615335791cd5adb632e9865840afbc13dad"
+dependencies = [
+ "earcutr",
+ "float_next_after",
+ "geo-types",
+ "geographiclib-rs",
+ "log",
+ "num-traits",
+ "robust 0.2.3",
+ "rstar 0.10.0",
+ "serde",
+]
+
+[[package]]
+name = "geo"
+version = "0.26.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1645cf1d7fea7dac1a66f7357f3df2677ada708b8d9db8e9b043878930095a96"
+dependencies = [
+ "earcutr",
+ "float_next_after",
+ "geo-types",
+ "geographiclib-rs",
+ "log",
+ "num-traits",
+ "robust 1.1.0",
+ "rstar 0.11.0",
+ "serde",
+]
+
+[[package]]
+name = "geo-types"
+version = "0.7.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9705398c5c7b26132e74513f4ee7c1d7dafd786004991b375c172be2be0eecaa"
+dependencies = [
+ "approx",
+ "num-traits",
+ "rstar 0.10.0",
+ "rstar 0.11.0",
+ "serde",
+]
+
+[[package]]
+name = "geographiclib-rs"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ea804e7bd3c6a4ca6a01edfa35231557a8a81d4d3f3e1e2b650d028c42592be"
+dependencies = [
+ "lazy_static",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "libc",
+ "wasi",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "gimli"
+version = "0.28.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0"
+
+[[package]]
+name = "globset"
+version = "0.4.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "759c97c1e17c55525b57192c06a267cda0ac5210b222d6b82189a2338fa1c13d"
+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 1.3.2",
+ "ignore",
+ "walkdir",
+]
+
+[[package]]
+name = "h2"
+version = "0.3.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91fc23aa11be92976ef4729127f1a74adf36d8436f7816b185d18df956790833"
+dependencies = [
+ "bytes",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "http",
+ "indexmap 1.9.3",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tracing",
+]
+
+[[package]]
+name = "hash32"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0c35f58762feb77d74ebe43bdbc3210f09be9fe6742234d573bacc26ed92b67"
+dependencies = [
+ "byteorder",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+dependencies = [
+ "ahash 0.7.6",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.13.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e"
+dependencies = [
+ "ahash 0.8.3",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a"
+
+[[package]]
+name = "heapless"
+version = "0.7.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db04bc24a18b9ea980628ecf00e6c0264f3c1426dac36c00cb49b6fbad8b0743"
+dependencies = [
+ "atomic-polyfill",
+ "hash32",
+ "rustc_version",
+ "spin 0.9.8",
+ "stable_deref_trait",
+]
+
+[[package]]
+name = "heck"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b"
+
+[[package]]
+name = "hex"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
+
+[[package]]
+name = "hmac"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
+dependencies = [
+ "digest",
+]
+
+[[package]]
+name = "http"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482"
+dependencies = [
+ "bytes",
+ "fnv",
+ "itoa",
+]
+
+[[package]]
+name = "http-body"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
+dependencies = [
+ "bytes",
+ "http",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "httparse"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
+
+[[package]]
+name = "httpdate"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
+
+[[package]]
+name = "hyper"
+version = "0.14.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468"
+dependencies = [
+ "bytes",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "httparse",
+ "httpdate",
+ "itoa",
+ "pin-project-lite",
+ "socket2 0.4.9",
+ "tokio",
+ "tower-service",
+ "tracing",
+ "want",
+]
+
+[[package]]
+name = "hyper-rustls"
+version = "0.24.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8d78e1e73ec14cf7375674f74d7dde185c8206fd9dea6fb6295e8a98098aaa97"
+dependencies = [
+ "futures-util",
+ "http",
+ "hyper",
+ "rustls 0.21.7",
+ "tokio",
+ "tokio-rustls 0.24.1",
+]
+
+[[package]]
+name = "iana-time-zone"
+version = "0.1.57"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys",
+ "iana-time-zone-haiku",
+ "js-sys",
+ "wasm-bindgen",
+ "windows",
+]
+
+[[package]]
+name = "iana-time-zone-haiku"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "ident_case"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
+
+[[package]]
+name = "idna"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "ignore"
+version = "0.4.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dbe7873dab538a9a44ad79ede1faf5f30d49f9a5c883ddbab48bce81b64b7492"
+dependencies = [
+ "globset",
+ "lazy_static",
+ "log",
+ "memchr",
+ "regex",
+ "same-file",
+ "thread_local",
+ "walkdir",
+ "winapi-util",
+]
+
+[[package]]
+name = "include_dir"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "18762faeff7122e89e0857b02f7ce6fcc0d101d5e9ad2ad7846cc01d61b7f19e"
+dependencies = [
+ "include_dir_macros",
+]
+
+[[package]]
+name = "include_dir_macros"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b139284b5cf57ecfa712bcc66950bb635b31aff41c188e8a4cfc758eca374a3f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+]
+
+[[package]]
+name = "indenter"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683"
+
+[[package]]
+name = "indexmap"
+version = "1.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
+dependencies = [
+ "autocfg",
+ "hashbrown 0.12.3",
+ "serde",
+]
+
+[[package]]
+name = "indexmap"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d"
+dependencies = [
+ "equivalent",
+ "hashbrown 0.14.0",
+ "serde",
+]
+
+[[package]]
+name = "inout"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "instant"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "ipnet"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6"
+
+[[package]]
+name = "is-terminal"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b"
+dependencies = [
+ "hermit-abi 0.3.2",
+ "rustix",
+ "windows-sys",
+]
+
+[[package]]
+name = "itertools"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itertools"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itertools"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25db6b064527c5d482d0423354fcd07a89a2dfe07b67892e62411946db7f07b0"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
+
+[[package]]
+name = "js-sys"
+version = "0.3.64"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "lalrpop"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da4081d44f4611b66c6dd725e6de3169f9f63905421e8626fcb86b6a898998b8"
+dependencies = [
+ "ascii-canvas",
+ "bit-set",
+ "diff",
+ "ena",
+ "is-terminal",
+ "itertools 0.10.5",
+ "lalrpop-util",
+ "petgraph",
+ "pico-args",
+ "regex",
+ "regex-syntax 0.7.5",
+ "string_cache",
+ "term",
+ "tiny-keccak",
+ "unicode-xid",
+]
+
+[[package]]
+name = "lalrpop-util"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f35c735096c0293d313e8f2a641627472b83d01b937177fe76e5e2708d31e0d"
+dependencies = [
+ "regex",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+dependencies = [
+ "spin 0.5.2",
+]
+
+[[package]]
+name = "lexicmp"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7378d131ddf24063b32cbd7e91668d183140c4b3906270635a4d633d1068ea5d"
+dependencies = [
+ "any_ascii",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.150"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c"
+
+[[package]]
+name = "libm"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7012b1bbb0719e1097c47611d3898568c546d597c2e74d66f6087edd5233ff4"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a9bad9f94746442c783ca431b22403b519cd7fbeed0533fdd6328b2f2212128"
+
+[[package]]
+name = "lock_api"
+version = "0.4.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16"
+dependencies = [
+ "autocfg",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
+
+[[package]]
+name = "lru"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "718e8fae447df0c7e1ba7f5189829e63fd536945c8988d61444c19039f16b670"
+dependencies = [
+ "hashbrown 0.13.2",
+]
+
+[[package]]
+name = "md-5"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6365506850d44bff6e2fbcb5176cf63650e48bd45ef2fe2665ae1570e0f4b9ca"
+dependencies = [
+ "digest",
+]
+
+[[package]]
+name = "memchr"
+version = "2.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f232d6ef707e1956a43342693d2a31e72989554d58299d7a88738cc95b0d35c"
+
+[[package]]
+name = "mime"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
+
+[[package]]
+name = "mime_guess"
+version = "2.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef"
+dependencies = [
+ "mime",
+ "unicase",
+]
+
+[[package]]
+name = "minimal-lexical"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "mio"
+version = "0.8.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3dce281c5e46beae905d4de1870d8b1509a9142b62eedf18b443b011ca8343d0"
+dependencies = [
+ "libc",
+ "wasi",
+ "windows-sys",
+]
+
+[[package]]
+name = "names"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7bddcd3bf5144b6392de80e04c347cd7fab2508f6df16a85fc496ecd5cec39bc"
+dependencies = [
+ "clap 3.2.25",
+ "rand",
+]
+
+[[package]]
+name = "nanoid"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3ffa00dec017b5b1a8b7cf5e2c008bfda1aa7e0697ac1508b491fdf2622fb4d8"
+dependencies = [
+ "rand",
+]
+
+[[package]]
+name = "nanorand"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "new_debug_unreachable"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54"
+
+[[package]]
+name = "nibble_vec"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77a5d83df9f36fe23f0c3648c6bbb8b0298bb5f1939c8f2704431371f4b84d43"
+dependencies = [
+ "smallvec",
+]
+
+[[package]]
+name = "nom"
+version = "7.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
+dependencies = [
+ "memchr",
+ "minimal-lexical",
+]
+
+[[package]]
+name = "normalize-line-endings"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be"
+
+[[package]]
+name = "nu-ansi-term"
+version = "0.46.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84"
+dependencies = [
+ "overload",
+ "winapi",
+]
+
+[[package]]
+name = "num-bigint"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-bigint-dig"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151"
+dependencies = [
+ "byteorder",
+ "lazy_static",
+ "libm",
+ "num-integer",
+ "num-iter",
+ "num-traits",
+ "rand",
+ "smallvec",
+ "zeroize",
+]
+
+[[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-traits"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2"
+dependencies = [
+ "autocfg",
+ "libm",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
+dependencies = [
+ "hermit-abi 0.3.2",
+ "libc",
+]
+
+[[package]]
+name = "object"
+version = "0.32.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
+
+[[package]]
+name = "ordered-multimap"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4d6a8c22fc714f0c2373e6091bf6f5e9b37b1bc0b1184874b7e0a4e303d318f"
+dependencies = [
+ "dlv-list",
+ "hashbrown 0.14.0",
+]
+
+[[package]]
+name = "os_str_bytes"
+version = "6.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d5d9eb14b174ee9aa2ef96dc2b94637a2d4b6e7cb873c7e171f0c20c6cf3eac"
+
+[[package]]
+name = "overload"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
+
+[[package]]
+name = "owo-colors"
+version = "3.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f"
+
+[[package]]
+name = "parking"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14f2252c834a40ed9bb5422029649578e63aa341ac401f74e719dd1afda8394e"
+
+[[package]]
+name = "parking_lot"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+dependencies = [
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall 0.3.5",
+ "smallvec",
+ "windows-targets",
+]
+
+[[package]]
+name = "password-hash"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "346f04948ba92c43e8469c1ee6736c7563d71012b17d40745260fe106aac2166"
+dependencies = [
+ "base64ct",
+ "rand_core",
+ "subtle",
+]
+
+[[package]]
+name = "path-clean"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17359afc20d7ab31fdb42bb844c8b3bb1dabd7dcf7e68428492da7f16966fcef"
+
+[[package]]
+name = "pbkdf2"
+version = "0.12.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2"
+dependencies = [
+ "digest",
+ "hmac",
+ "password-hash",
+ "sha2",
+]
+
+[[package]]
+name = "pem"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b13fe415cdf3c8e44518e18a7c95a13431d9bdf6d15367d82b23c377fdd441a"
+dependencies = [
+ "base64 0.21.4",
+ "serde",
+]
+
+[[package]]
+name = "pem-rfc7468"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412"
+dependencies = [
+ "base64ct",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94"
+
+[[package]]
+name = "petgraph"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9"
+dependencies = [
+ "fixedbitset",
+ "indexmap 2.0.0",
+]
+
+[[package]]
+name = "pharos"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e9567389417feee6ce15dd6527a8a1ecac205ef62c2932bcf3d9f6fc5b78b414"
+dependencies = [
+ "futures",
+ "rustc_version",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096"
+dependencies = [
+ "siphasher",
+]
+
+[[package]]
+name = "pico-args"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315"
+
+[[package]]
+name = "pin-project"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422"
+dependencies = [
+ "pin-project-internal",
+]
+
+[[package]]
+name = "pin-project-internal"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "pkcs1"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f"
+dependencies = [
+ "der",
+ "pkcs8",
+ "spki",
+]
+
+[[package]]
+name = "pkcs8"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7"
+dependencies = [
+ "der",
+ "spki",
+]
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+
+[[package]]
+name = "precomputed-hash"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
+
+[[package]]
+name = "predicates"
+version = "3.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6dfc28575c2e3f19cb3c73b93af36460ae898d426eba6fc15b9bd2a5220758a0"
+dependencies = [
+ "anstyle",
+ "difflib",
+ "float-cmp",
+ "itertools 0.11.0",
+ "normalize-line-endings",
+ "predicates-core",
+ "regex",
+]
+
+[[package]]
+name = "predicates-core"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b794032607612e7abeb4db69adb4e33590fa6cf1149e95fd7cb00e634b92f174"
+
+[[package]]
+name = "predicates-tree"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "368ba315fb8c5052ab692e68a0eefec6ec57b23a36959c14496f0b0df2c0cecf"
+dependencies = [
+ "predicates-core",
+ "termtree",
+]
+
+[[package]]
+name = "pretty_assertions"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af7cee1a6c8a5b9208b3cb1061f10c0cb689087b3d8ce85fb9d2dd7a29b6ba66"
+dependencies = [
+ "diff",
+ "yansi",
+]
+
+[[package]]
+name = "proc-macro-crate"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785"
+dependencies = [
+ "toml",
+]
+
+[[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 1.0.109",
+ "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-macro-hack"
+version = "0.5.20+deprecated"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "psl-types"
+version = "2.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "33cb294fe86a74cbcf50d4445b37da762029549ebeea341421c7c70370f86cac"
+
+[[package]]
+name = "psm"
+version = "0.1.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5787f7cda34e3033a72192c018bc5883100330f362ef279a8cbccfce8bb4e874"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "ptr_meta"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0738ccf7ea06b608c10564b31debd4f5bc5e197fc8bfe088f68ae5ce81e7a4f1"
+dependencies = [
+ "ptr_meta_derive",
+]
+
+[[package]]
+name = "ptr_meta_derive"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "radium"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09"
+
+[[package]]
+name = "radix_trie"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c069c179fcdc6a2fe24d8d18305cf085fdbd4f922c041943e203685d6a1c58fd"
+dependencies = [
+ "endian-type",
+ "nibble_vec",
+ "serde",
+]
+
+[[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",
+]
+
+[[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",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "redox_users"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b"
+dependencies = [
+ "getrandom",
+ "redox_syscall 0.2.16",
+ "thiserror",
+]
+
+[[package]]
+name = "ref-cast"
+version = "1.0.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acde58d073e9c79da00f2b5b84eed919c8326832648a5b109b3fce1bb1175280"
+dependencies = [
+ "ref-cast-impl",
+]
+
+[[package]]
+name = "ref-cast-impl"
+version = "1.0.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f7473c2cfcf90008193dd0e3e16599455cb601a9fce322b5bb55de799664925"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "regex"
+version = "1.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-automata 0.4.3",
+ "regex-syntax 0.8.2",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c2f401f4955220693b56f8ec66ee9c78abffd8d1c4f23dc41a23839eb88f0795"
+
+[[package]]
+name = "regex-automata"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax 0.8.2",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da"
+
+[[package]]
+name = "regex-syntax"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
+
+[[package]]
+name = "rend"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "581008d2099240d37fb08d77ad713bcaec2c4d89d50b5b21a8bb1996bbab68ab"
+dependencies = [
+ "bytecheck",
+]
+
+[[package]]
+name = "reqwest"
+version = "0.11.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3e9ad3fe7488d7e34558a2033d45a0c90b72d97b4f80705666fea71472e2e6a1"
+dependencies = [
+ "base64 0.21.4",
+ "bytes",
+ "encoding_rs",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "hyper",
+ "hyper-rustls",
+ "ipnet",
+ "js-sys",
+ "log",
+ "mime",
+ "mime_guess",
+ "once_cell",
+ "percent-encoding",
+ "pin-project-lite",
+ "rustls 0.21.7",
+ "rustls-pemfile",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "tokio",
+ "tokio-rustls 0.24.1",
+ "tokio-util",
+ "tower-service",
+ "url",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "wasm-streams",
+ "web-sys",
+ "webpki-roots 0.25.2",
+ "winreg",
+]
+
+[[package]]
+name = "retain_mut"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c31b5c4033f8fdde8700e4657be2c497e7288f01515be52168c631e2e4d4086"
+
+[[package]]
+name = "revision"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87eb86913082f8976b06d07a59f17df9120e6f38b882cf3fc5a45b4499e224b6"
+dependencies = [
+ "bincode",
+ "chrono",
+ "geo 0.26.0",
+ "regex",
+ "revision-derive",
+ "roaring",
+ "rust_decimal",
+ "serde",
+ "thiserror",
+ "uuid",
+]
+
+[[package]]
+name = "revision-derive"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf996fc5f61f1dbec35799b5c00c6dda12e8862e8cb782ed24e10d0292e60ed3"
+dependencies = [
+ "darling",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "ring"
+version = "0.16.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc"
+dependencies = [
+ "cc",
+ "libc",
+ "once_cell",
+ "spin 0.5.2",
+ "untrusted",
+ "web-sys",
+ "winapi",
+]
+
+[[package]]
+name = "rkyv"
+version = "0.7.42"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0200c8230b013893c0b2d6213d6ec64ed2b9be2e0e016682b7224ff82cff5c58"
+dependencies = [
+ "bitvec",
+ "bytecheck",
+ "hashbrown 0.12.3",
+ "ptr_meta",
+ "rend",
+ "rkyv_derive",
+ "seahash",
+ "tinyvec",
+ "uuid",
+]
+
+[[package]]
+name = "rkyv_derive"
+version = "0.7.42"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2e06b915b5c230a17d7a736d1e2e63ee753c256a8614ef3f5147b13a4f5541d"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "roaring"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6106b5cf8587f5834158895e9715a3c6c9716c8aefab57f1f7680917191c7873"
+dependencies = [
+ "bytemuck",
+ "byteorder",
+ "retain_mut",
+ "serde",
+]
+
+[[package]]
+name = "robust"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5864e7ef1a6b7bcf1d6ca3f655e65e724ed3b52546a0d0a663c991522f552ea"
+
+[[package]]
+name = "robust"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cbf4a6aa5f6d6888f39e980649f3ad6b666acdce1d78e95b8a2cb076e687ae30"
+
+[[package]]
+name = "rsa"
+version = "0.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ab43bb47d23c1a631b4b680199a45255dce26fa9ab2fa902581f624ff13e6a8"
+dependencies = [
+ "byteorder",
+ "const-oid",
+ "digest",
+ "num-bigint-dig",
+ "num-integer",
+ "num-iter",
+ "num-traits",
+ "pkcs1",
+ "pkcs8",
+ "rand_core",
+ "signature",
+ "spki",
+ "subtle",
+ "zeroize",
+]
+
+[[package]]
+name = "rstar"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f39465655a1e3d8ae79c6d9e007f4953bfc5d55297602df9dc38f9ae9f1359a"
+dependencies = [
+ "heapless",
+ "num-traits",
+ "smallvec",
+]
+
+[[package]]
+name = "rstar"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73111312eb7a2287d229f06c00ff35b51ddee180f017ab6dec1f69d62ac098d6"
+dependencies = [
+ "heapless",
+ "num-traits",
+ "smallvec",
+]
+
+[[package]]
+name = "rust-ini"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3e0698206bcb8882bf2a9ecb4c1e7785db57ff052297085a6efd4fe42302068a"
+dependencies = [
+ "cfg-if",
+ "ordered-multimap",
+]
+
+[[package]]
+name = "rust-stemmers"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e46a2036019fdb888131db7a4c847a1063a7493f971ed94ea82c67eada63ca54"
+dependencies = [
+ "serde",
+ "serde_derive",
+]
+
+[[package]]
+name = "rust_decimal"
+version = "1.32.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4c4216490d5a413bc6d10fa4742bd7d4955941d062c0ef873141d6b0e7b30fd"
+dependencies = [
+ "arrayvec",
+ "borsh",
+ "bytes",
+ "num-traits",
+ "rand",
+ "rkyv",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
+
+[[package]]
+name = "rustc_lexer"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c86aae0c77166108c01305ee1a36a1e77289d7dc6ca0a3cd91ff4992de2d16a5"
+dependencies = [
+ "unicode-xid",
+]
+
+[[package]]
+name = "rustc_version"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
+dependencies = [
+ "semver",
+]
+
+[[package]]
+name = "rustix"
+version = "0.38.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d7db8590df6dfcd144d22afd1b83b36c21a18d7cbc1dc4bb5295a8712e9eb662"
+dependencies = [
+ "bitflags 2.4.0",
+ "errno",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys",
+]
+
+[[package]]
+name = "rustls"
+version = "0.20.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b80e3dec595989ea8510028f30c408a4630db12c9cbb8de34203b89d6577e99"
+dependencies = [
+ "log",
+ "ring",
+ "sct",
+ "webpki",
+]
+
+[[package]]
+name = "rustls"
+version = "0.21.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd8d6c9f025a446bc4d18ad9632e69aec8f287aa84499ee335599fabd20c3fd8"
+dependencies = [
+ "log",
+ "ring",
+ "rustls-webpki",
+ "sct",
+]
+
+[[package]]
+name = "rustls-pemfile"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2"
+dependencies = [
+ "base64 0.21.4",
+]
+
+[[package]]
+name = "rustls-webpki"
+version = "0.101.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "45a27e3b59326c16e23d30aeb7a36a24cc0d29e71d68ff611cdfb4a01d013bed"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "rustversion"
+version = "1.0.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4"
+
+[[package]]
+name = "ryu"
+version = "1.0.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741"
+
+[[package]]
+name = "salsa20"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97a22f5af31f73a954c10289c93e8a50cc23d971e80ee446f1f6f7137a088213"
+dependencies = [
+ "cipher",
+]
+
+[[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 = "scopeguard"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+
+[[package]]
+name = "scrypt"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0516a385866c09368f0b5bcd1caff3366aace790fcd46e2bb032697bb172fd1f"
+dependencies = [
+ "password-hash",
+ "pbkdf2",
+ "salsa20",
+ "sha2",
+]
+
+[[package]]
+name = "sct"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "seahash"
+version = "4.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b"
+
+[[package]]
+name = "semver"
+version = "1.0.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0293b4b29daaf487284529cc2f5675b8e57c61f70167ba415a463651fd6a918"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "send_wrapper"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73"
+
+[[package]]
+name = "serde"
+version = "1.0.193"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.193"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.108"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b"
+dependencies = [
+ "indexmap 2.0.0",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_urlencoded"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
+dependencies = [
+ "form_urlencoded",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_with"
+version = "3.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ca3b16a3d82c4088f343b7480a93550b3eabe1a358569c2dfe38bbcead07237"
+dependencies = [
+ "base64 0.21.4",
+ "chrono",
+ "hex",
+ "indexmap 1.9.3",
+ "indexmap 2.0.0",
+ "serde",
+ "serde_json",
+ "serde_with_macros",
+ "time",
+]
+
+[[package]]
+name = "serde_with_macros"
+version = "3.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e6be15c453eb305019bfa438b1593c731f36a289a7853f7707ee29e870b3b3c"
+dependencies = [
+ "darling",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "serial_test"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e56dd856803e253c8f298af3f4d7eb0ae5e23a737252cd90bb4f3b435033b2d"
+dependencies = [
+ "dashmap",
+ "futures",
+ "lazy_static",
+ "log",
+ "parking_lot",
+ "serial_test_derive",
+]
+
+[[package]]
+name = "serial_test_derive"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91d129178576168c589c9ec973feedf7d3126c01ac2bf08795109aa35b69fb8f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "sha-1"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f5058ada175748e33390e40e872bd0fe59a19f265d0158daa551c5a88a76009c"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "sha1"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "sha2"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "sharded-slab"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6"
+dependencies = [
+ "lazy_static",
+]
+
+[[package]]
+name = "signature"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e1788eed21689f9cf370582dfc467ef36ed9c707f073528ddafa8d83e3b8500"
+dependencies = [
+ "digest",
+ "rand_core",
+]
+
+[[package]]
+name = "simdutf8"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f27f6278552951f1f2b8cf9da965d10969b2efdea95a6ec47987ab46edfe263a"
+
+[[package]]
+name = "simple_asn1"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "adc4e5204eb1910f40f9cfa375f6f05b68c3abac4b6fd879c8ff5e7ae8a0a085"
+dependencies = [
+ "num-bigint",
+ "num-traits",
+ "thiserror",
+ "time",
+]
+
+[[package]]
+name = "siphasher"
+version = "0.3.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d"
+
+[[package]]
+name = "slab"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9"
+
+[[package]]
+name = "smol_str"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "74212e6bbe9a4352329b2f68ba3130c15a3f26fe88ff22dbdc6cdd58fa85e99c"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "snap"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e9f0ab6ef7eb7353d9119c170a436d1bf248eea575ac42d19d12f4e34130831"
+
+[[package]]
+name = "socket2"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "socket2"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9"
+dependencies = [
+ "libc",
+ "windows-sys",
+]
+
+[[package]]
+name = "spin"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
+
+[[package]]
+name = "spin"
+version = "0.9.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
+dependencies = [
+ "lock_api",
+]
+
+[[package]]
+name = "spki"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d1e996ef02c474957d681f1b05213dfb0abab947b446a62d37770b23500184a"
+dependencies = [
+ "base64ct",
+ "der",
+]
+
+[[package]]
+name = "sqlparser"
+version = "0.40.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7c80afe31cdb649e56c0d9bb5503be9166600d68a852c38dd445636d126858e5"
+dependencies = [
+ "log",
+]
+
+[[package]]
+name = "stable_deref_trait"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
+
+[[package]]
+name = "stacker"
+version = "0.1.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c886bd4480155fd3ef527d45e9ac8dd7118a898a46530b7b94c3e21866259fce"
+dependencies = [
+ "cc",
+ "cfg-if",
+ "libc",
+ "psm",
+ "winapi",
+]
+
+[[package]]
+name = "storekey"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43c42833834a5d23b344f71d87114e0cc9994766a5c42938f4b50e7b2aef85b2"
+dependencies = [
+ "byteorder",
+ "memchr",
+ "serde",
+ "thiserror",
+]
+
+[[package]]
+name = "string_cache"
+version = "0.8.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b"
+dependencies = [
+ "new_debug_unreachable",
+ "once_cell",
+ "parking_lot",
+ "phf_shared",
+ "precomputed-hash",
+]
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "subtle"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc"
+
+[[package]]
+name = "surrealdb"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "58fbfc165921b5ecd488df676d6d64f3559771acad92f1643823791e3dccf66b"
+dependencies = [
+ "addr",
+ "any_ascii",
+ "argon2",
+ "async-channel",
+ "async-executor",
+ "async-recursion",
+ "base64 0.21.4",
+ "bcrypt",
+ "bincode",
+ "bytes",
+ "cedar-policy",
+ "chrono",
+ "deunicode",
+ "dmp",
+ "flume",
+ "fst",
+ "futures",
+ "futures-concurrency",
+ "fuzzy-matcher",
+ "geo 0.25.1",
+ "indexmap 1.9.3",
+ "ipnet",
+ "lexicmp",
+ "lru",
+ "md-5",
+ "nanoid",
+ "nom",
+ "once_cell",
+ "path-clean",
+ "pbkdf2",
+ "pharos",
+ "pin-project-lite",
+ "radix_trie",
+ "rand",
+ "regex",
+ "reqwest",
+ "revision",
+ "roaring",
+ "rust-stemmers",
+ "rust_decimal",
+ "rustls 0.20.9",
+ "scrypt",
+ "semver",
+ "serde",
+ "serde_json",
+ "sha-1",
+ "sha2",
+ "snap",
+ "storekey",
+ "surrealdb-derive",
+ "surrealdb-jsonwebtoken",
+ "thiserror",
+ "tokio",
+ "tokio-tungstenite",
+ "tokio-util",
+ "tracing",
+ "trice",
+ "ulid",
+ "url",
+ "uuid",
+ "wasm-bindgen-futures",
+ "wasmtimer",
+ "ws_stream_wasm",
+]
+
+[[package]]
+name = "surrealdb-derive"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aacdb4c58b9ebef0291310afcd63af0012d85610d361f3785952c61b6f1dddf4"
+dependencies = [
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "surrealdb-jsonwebtoken"
+version = "8.3.0-surreal.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "02d4f759c65df8a8cf2d83c99db7fdd3ae5b8fff05fa7fe69a8612f29dd5f99b"
+dependencies = [
+ "base64 0.21.4",
+ "getrandom",
+ "hmac",
+ "pem",
+ "rand",
+ "ring",
+ "rsa",
+ "serde",
+ "serde_json",
+ "sha2",
+ "simple_asn1",
+]
+
+[[package]]
+name = "surrealdb-migrations"
+version = "1.0.1"
+dependencies = [
+ "assert_cmd",
+ "assert_fs",
+ "chrono",
+ "chrono-human-duration",
+ "clap 4.4.11",
+ "cli-table",
+ "color-eyre",
+ "convert_case",
+ "diffy",
+ "dir-diff",
+ "fs_extra",
+ "include_dir",
+ "itertools 0.12.0",
+ "names",
+ "predicates",
+ "pretty_assertions",
+ "regex",
+ "rust-ini",
+ "serde",
+ "serde_json",
+ "serial_test",
+ "sqlparser",
+ "surrealdb",
+ "tokio",
+ "tokio-test",
+]
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e96b79aaa137db8f61e26363a0c9b47d8b4ec75da28b7d1d614c2303e232408b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "tap"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369"
+
+[[package]]
+name = "tempfile"
+version = "3.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb94d2f3cc536af71caac6b6fcebf65860b347e7ce0cc9ebe8f70d3e521054ef"
+dependencies = [
+ "cfg-if",
+ "fastrand 2.0.0",
+ "redox_syscall 0.3.5",
+ "rustix",
+ "windows-sys",
+]
+
+[[package]]
+name = "term"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c59df8ac95d96ff9bede18eb7300b0fda5e5d8d90960e76f8e14ae765eedbf1f"
+dependencies = [
+ "dirs-next",
+ "rustversion",
+ "winapi",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "termtree"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76"
+
+[[package]]
+name = "textwrap"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d"
+
+[[package]]
+name = "thiserror"
+version = "1.0.48"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d6d7a740b8a666a7e828dd00da9c0dc290dff53154ea77ac109281de90589b7"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.48"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49922ecae66cc8a249b77e68d1d0623c1b2c514f0060c27cdc68bd62a1219d35"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "thread_local"
+version = "1.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+]
+
+[[package]]
+name = "time"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17f6bb557fd245c28e6411aa56b6403c689ad95061f50e4be16c274e70a17e48"
+dependencies = [
+ "deranged",
+ "itoa",
+ "serde",
+ "time-core",
+ "time-macros",
+]
+
+[[package]]
+name = "time-core"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb"
+
+[[package]]
+name = "time-macros"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a942f44339478ef67935ab2bbaec2fb0322496cf3cbe84b261e06ac3814c572"
+dependencies = [
+ "time-core",
+]
+
+[[package]]
+name = "tiny-keccak"
+version = "2.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237"
+dependencies = [
+ "crunchy",
+]
+
+[[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.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+[[package]]
+name = "tokio"
+version = "1.35.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "841d45b238a16291a4e1584e61820b8ae57d696cc5015c459c229ccc6990cc1c"
+dependencies = [
+ "backtrace",
+ "bytes",
+ "libc",
+ "mio",
+ "num_cpus",
+ "pin-project-lite",
+ "socket2 0.5.5",
+ "tokio-macros",
+ "windows-sys",
+]
+
+[[package]]
+name = "tokio-macros"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "tokio-rustls"
+version = "0.23.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59"
+dependencies = [
+ "rustls 0.20.9",
+ "tokio",
+ "webpki",
+]
+
+[[package]]
+name = "tokio-rustls"
+version = "0.24.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081"
+dependencies = [
+ "rustls 0.21.7",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-stream"
+version = "0.1.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842"
+dependencies = [
+ "futures-core",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-test"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e89b3cbabd3ae862100094ae433e1def582cf86451b4e9bf83aa7ac1d8a7d719"
+dependencies = [
+ "async-stream",
+ "bytes",
+ "futures-core",
+ "tokio",
+ "tokio-stream",
+]
+
+[[package]]
+name = "tokio-tungstenite"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54319c93411147bced34cb5609a80e0a8e44c5999c93903a81cd866630ec0bfd"
+dependencies = [
+ "futures-util",
+ "log",
+ "rustls 0.20.9",
+ "tokio",
+ "tokio-rustls 0.23.4",
+ "tungstenite",
+ "webpki",
+ "webpki-roots 0.22.6",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.7.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-io",
+ "futures-sink",
+ "pin-project-lite",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "toml"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "tower-service"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
+
+[[package]]
+name = "tracing"
+version = "0.1.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
+dependencies = [
+ "cfg-if",
+ "pin-project-lite",
+ "tracing-attributes",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-attributes"
+version = "0.1.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a"
+dependencies = [
+ "once_cell",
+ "valuable",
+]
+
+[[package]]
+name = "tracing-error"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d686ec1c0f384b1277f097b2f279a2ecc11afe8c133c1aabf036a27cb4cd206e"
+dependencies = [
+ "tracing",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "tracing-subscriber"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77"
+dependencies = [
+ "sharded-slab",
+ "thread_local",
+ "tracing-core",
+]
+
+[[package]]
+name = "trice"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61aa4cd1c1dca57255b92cb9e53d5b3ac5a22da6d8a63045337eb3da1a065d43"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
+
+[[package]]
+name = "tungstenite"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30ee6ab729cd4cf0fd55218530c4522ed30b7b6081752839b68fcec8d0960788"
+dependencies = [
+ "base64 0.13.1",
+ "byteorder",
+ "bytes",
+ "http",
+ "httparse",
+ "log",
+ "rand",
+ "rustls 0.20.9",
+ "sha1",
+ "thiserror",
+ "url",
+ "utf-8",
+ "webpki",
+]
+
+[[package]]
+name = "typenum"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba"
+
+[[package]]
+name = "ulid"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e37c4b6cbcc59a8dcd09a6429fbc7890286bcbb79215cea7b38a3c4c0921d93"
+dependencies = [
+ "rand",
+ "serde",
+]
+
+[[package]]
+name = "unicase"
+version = "2.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89"
+dependencies = [
+ "version_check",
+]
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-script"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d817255e1bed6dfd4ca47258685d14d2bdcfbc64fdc9e3819bd5848057b8ecc"
+
+[[package]]
+name = "unicode-security"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ef5756b3097992b934b06608c69f48448a0fbe804bb1e72b982f6d7983e9e63"
+dependencies = [
+ "unicode-normalization",
+ "unicode-script",
+]
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c"
+
+[[package]]
+name = "untrusted"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
+
+[[package]]
+name = "url"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "percent-encoding",
+]
+
+[[package]]
+name = "urlencoding"
+version = "2.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da"
+
+[[package]]
+name = "utf-8"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9"
+
+[[package]]
+name = "utf8parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
+
+[[package]]
+name = "uuid"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "79daa5ed5740825c40b389c5e50312b9c86df53fccd33f281df655642b43869d"
+dependencies = [
+ "atomic",
+ "getrandom",
+ "serde",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "valuable"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "wait-timeout"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "waker-fn"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca"
+
+[[package]]
+name = "walkdir"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee"
+dependencies = [
+ "same-file",
+ "winapi-util",
+]
+
+[[package]]
+name = "want"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e"
+dependencies = [
+ "try-lock",
+]
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c02dbc21516f9f1f04f187958890d7e6026df8d16540b7ad9492bc34a67cea03"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1"
+
+[[package]]
+name = "wasm-streams"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4609d447824375f43e1ffbc051b50ad8f4b3ae8219680c94452ea05eb240ac7"
+dependencies = [
+ "futures-util",
+ "js-sys",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+]
+
+[[package]]
+name = "wasmtimer"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f656cd8858a5164932d8a90f936700860976ec21eb00e0fe2aa8cab13f6b4cf"
+dependencies = [
+ "futures",
+ "js-sys",
+ "parking_lot",
+ "pin-utils",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "web-sys"
+version = "0.3.64"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "webpki"
+version = "0.22.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0e74f82d49d545ad128049b7e88f6576df2da6b02e9ce565c6f533be576957e"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "webpki-roots"
+version = "0.22.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87"
+dependencies = [
+ "webpki",
+]
+
+[[package]]
+name = "webpki-roots"
+version = "0.25.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14247bb57be4f377dfb94c72830b8ce8fc6beac03cf4bf7b9732eadd414123fc"
+
+[[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"
+
+[[package]]
+name = "windows"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f"
+dependencies = [
+ "windows-targets",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
+
+[[package]]
+name = "winreg"
+version = "0.50.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1"
+dependencies = [
+ "cfg-if",
+ "windows-sys",
+]
+
+[[package]]
+name = "ws_stream_wasm"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7999f5f4217fe3818726b66257a4475f71e74ffd190776ad053fa159e50737f5"
+dependencies = [
+ "async_io_stream",
+ "futures",
+ "js-sys",
+ "log",
+ "pharos",
+ "rustc_version",
+ "send_wrapper",
+ "thiserror",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+]
+
+[[package]]
+name = "wyz"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed"
+dependencies = [
+ "tap",
+]
+
+[[package]]
+name = "yansi"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec"
+
+[[package]]
+name = "zeroize"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9"
diff --git a/nixpkgs/pkgs/development/tools/database/surrealdb-migrations/default.nix b/nixpkgs/pkgs/development/tools/database/surrealdb-migrations/default.nix
new file mode 100644
index 000000000000..2adc3133839f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/surrealdb-migrations/default.nix
@@ -0,0 +1,68 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+, testers
+, Security
+, surrealdb-migrations
+, nix-update-script
+}:
+
+let
+  pname = "surrealdb-migrations";
+  version = "1.0.1";
+in
+rustPlatform.buildRustPackage rec {
+  inherit pname version;
+
+  src = fetchFromGitHub {
+    owner = "Odonno";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-yody0F8Wkizyq7SW9OjT4cV3O9HOUYlBc7+8GwJG2cs=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+  };
+
+  buildInputs = [ ]
+    ++ lib.optionals stdenv.isDarwin [ Security ];
+
+   # Error: No such file or directory (os error 2)
+   # failures:
+   #   cli::apply::apply_initial_migrations
+   #   cli::apply::apply_initial_schema_changes
+   #   cli::apply::apply_new_migrations
+   #   cli::apply::apply_new_schema_changes
+   #   cli::apply::apply_should_skip_events_if_no_events_folder
+   #   cli::apply::apply_with_db_configuration
+   #   cli::apply::apply_with_skipped_migrations
+   #   cli::list::list_blog_migrations
+   #   cli::list::list_empty_migrations
+   #   library::list::list_blog_migrations
+   #   library::list::list_empty_migrations
+   #   library::up::apply_initial_migrations
+   #   library::up::apply_initial_schema_changes
+   #   library::up::apply_new_migrations
+   #   library::up::apply_new_schema_changes
+   #   library::up::apply_should_skip_events_if_no_events_folder
+   #   library::up_to::apply_with_skipped_migrations
+  doCheck = false;
+
+  passthru = {
+    updateScript = nix-update-script { };
+    tests.version = testers.testVersion {
+      package = surrealdb-migrations;
+      command = "surrealdb-migrations --version";
+    };
+  };
+
+  meta = with lib; {
+    description = "An awesome SurrealDB migration tool, with a user-friendly CLI and a versatile Rust library that enables seamless integration into any project.";
+    homepage = "https://crates.io/crates/surrealdb-migrations";
+    mainProgram = "surrealdb-migrations";
+    license = licenses.mit;
+    maintainers = with maintainers; [ happysalada ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/termdbms/default.nix b/nixpkgs/pkgs/development/tools/database/termdbms/default.nix
new file mode 100644
index 000000000000..4cfc905c6c15
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/termdbms/default.nix
@@ -0,0 +1,27 @@
+{ lib, fetchFromGitHub, buildGoModule }:
+
+buildGoModule rec {
+  pname = "termdbms";
+  version = "unstable-2021-09-04";
+
+  src = fetchFromGitHub {
+    owner = "mathaou";
+    repo = "termdbms";
+    rev = "d46e72c796e8aee0def71b8e3499b0ebe5ca3385";
+    hash = "sha256-+4y9JmLnu0xCJs1p1GNwqCx2xP6YvbIPb4zuClt8fbA=";
+  };
+
+  vendorHash = "sha256-RtgHus8k+6lvecG7+zABTo0go3kgoQj0S+3HaJHhKkE=";
+
+  patches = [ ./viewer.patch ];
+
+  ldflags = [ "-s" "-w" "-X=main.Version=${version}" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/mathaou/termdbms/";
+    description = "A TUI for viewing and editing database files";
+    license = licenses.mit;
+    maintainers = with maintainers; [ izorkin ];
+    mainProgram = "sqlite3-viewer";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/termdbms/viewer.patch b/nixpkgs/pkgs/development/tools/database/termdbms/viewer.patch
new file mode 100644
index 000000000000..1b95c71de46b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/termdbms/viewer.patch
@@ -0,0 +1,12 @@
+diff --git a/viewer/viewer.go b/viewer/viewer.go
+index fcf850e..b0a0f8d 100644
+--- a/viewer/viewer.go
++++ b/viewer/viewer.go
+@@ -5,7 +5,6 @@ import (
+ 	"github.com/charmbracelet/bubbles/viewport"
+ 	tea "github.com/charmbracelet/bubbletea"
+ 	"github.com/charmbracelet/lipgloss"
+-	"github.com/mattn/go-runewidth"
+ 	"math"
+ 	"runtime"
+ 	"strings"
diff --git a/nixpkgs/pkgs/development/tools/database/timescaledb-parallel-copy/default.nix b/nixpkgs/pkgs/development/tools/database/timescaledb-parallel-copy/default.nix
new file mode 100644
index 000000000000..24c4aeb8538a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/timescaledb-parallel-copy/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "timescaledb-parallel-copy";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "timescale";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-HxaGKJnLZjPPJXoccAx0XUsCrZiG09c40zeSbHYXm04=";
+  };
+
+  vendorHash = "sha256-muxtr80EjnRoHG/TCEQwrBwlnARsfqWoYlR0HavMe6U=";
+
+  meta = with lib; {
+    description = "Bulk, parallel insert of CSV records into PostgreSQL";
+    homepage = "https://github.com/timescale/timescaledb-parallel-copy";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ thoughtpolice ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/timescaledb-tune/default.nix b/nixpkgs/pkgs/development/tools/database/timescaledb-tune/default.nix
new file mode 100644
index 000000000000..38bbd1cb157f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/timescaledb-tune/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "timescaledb-tune";
+  version = "0.15.0";
+
+  src = fetchFromGitHub {
+    owner = "timescale";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-YgG8yuHnJrhrqJHNUkMjJvKNzEQ3ClY9OQzt+ET4LEk=";
+  };
+
+  vendorHash = "sha256-8Q+KMYu1yiHEYS035NmCvxSgIS/+oRhhcZa6SwmvGgk=";
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "A tool for tuning your TimescaleDB for better performance";
+    homepage = "https://github.com/timescale/timescaledb-tune";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ marsam ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/trino-cli/default.nix b/nixpkgs/pkgs/development/tools/database/trino-cli/default.nix
new file mode 100644
index 000000000000..c42ab0208b32
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/trino-cli/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchurl, jre_headless, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "trino-cli";
+  version = "435";
+
+  jarfilename = "${pname}-${version}-executable.jar";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  src = fetchurl {
+    url = "mirror://maven/io/trino/${pname}/${version}/${jarfilename}";
+    sha256 = "sha256-X+G75KtlQus9mYcGtAMm7MDo7reN2ZTlVvhGhzEu5W4=";
+  };
+
+  dontUnpack = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    install -D "$src" "$out/share/java/${jarfilename}"
+
+    makeWrapper ${jre_headless}/bin/java $out/bin/trino \
+      --add-flags "-jar $out/share/java/${jarfilename}"
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "The Trino CLI provides a terminal-based, interactive shell for running queries";
+    homepage = "https://github.com/trinodb/trino";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ regadas cpcloud ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/vitess/default.nix b/nixpkgs/pkgs/development/tools/database/vitess/default.nix
new file mode 100644
index 000000000000..aa0fa687fb82
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/vitess/default.nix
@@ -0,0 +1,30 @@
+{ lib, buildGoModule, fetchFromGitHub, sqlite }:
+
+buildGoModule rec {
+  pname = "vitess";
+  version = "18.0.2";
+
+  src = fetchFromGitHub {
+    owner = "vitessio";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-CKhnP6sTw7rNzqMhJpwuYhoc5F3MNnL58JxnoKPHyl0=";
+  };
+
+  vendorHash = "sha256-FwgKsv5fQSWKa2K2djEwd7lnbE2qtADoiIokR9U5t1k=";
+
+  buildInputs = [ sqlite ];
+
+  subPackages = [ "go/cmd/..." ];
+
+  # integration tests require access to syslog and root
+  doCheck = false;
+
+  meta = with lib; {
+    homepage = "https://vitess.io/";
+    changelog = "https://github.com/vitessio/vitess/releases/tag/v${version}";
+    description = "A database clustering system for horizontal scaling of MySQL";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ urandom ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/webdis/default.nix b/nixpkgs/pkgs/development/tools/database/webdis/default.nix
new file mode 100644
index 000000000000..eec952817e90
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/webdis/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, hiredis
+, http-parser
+, jansson
+, libevent
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "webdis";
+  version = "0.1.22";
+
+  src = fetchFromGitHub {
+    owner = "nicolasff";
+    repo = "webdis";
+    rev = finalAttrs.version;
+    hash = "sha256-83nZMqRK1uEWR1xn9lzbTyM0kuAkhmvm999cGu6Yu3k=";
+  };
+
+  buildInputs = [ hiredis http-parser jansson libevent ];
+
+  makeFlags = [
+    "PREFIX=${placeholder "out"}"
+    "CONFDIR=${placeholder "out"}/share/webdis"
+  ];
+
+  meta = {
+    description = "A Redis HTTP interface with JSON output";
+    homepage = "https://webd.is/";
+    license = lib.licenses.bsd2;
+    maintainers = with lib.maintainers; [ wucke13 ];
+    platforms = lib.platforms.unix;
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/datree/default.nix b/nixpkgs/pkgs/development/tools/datree/default.nix
new file mode 100644
index 000000000000..829de7447c74
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/datree/default.nix
@@ -0,0 +1,58 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+, testers
+, datree
+}:
+
+buildGoModule rec {
+  pname = "datree";
+  version = "1.9.19";
+
+  src = fetchFromGitHub {
+    owner = "datreeio";
+    repo = "datree";
+    rev = "refs/tags/${version}";
+    hash = "sha256-W1eX7eUMdPGbHA/f08xkG2EUeZmaunEAQn7/LRBe2nk=";
+  };
+
+  vendorHash = "sha256-+PQhuIO4KjXtW/ZcS0OamuOHzK7ZL+nwOBxeCRoXuKE=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/datreeio/datree/cmd.CliVersion=${version}"
+  ];
+
+  tags = [ "main" ];
+
+  postInstall = ''
+    installShellCompletion \
+      --cmd datree \
+      --bash <($out/bin/datree completion bash) \
+      --fish <($out/bin/datree completion fish) \
+      --zsh <($out/bin/datree completion zsh)
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = datree;
+    command = "datree version";
+  };
+
+  meta = with lib; {
+    description = "CLI tool to ensure K8s manifests and Helm charts follow best practices";
+    longDescription = ''
+      Datree provides an E2E policy enforcement solution to run automatic checks
+      for rule violations. Datree can be used on the command line, admission
+      webhook, or even as a kubectl plugin to run policies against Kubernetes
+      objects.
+    '';
+    homepage = "https://datree.io/";
+    changelog = "https://github.com/datreeio/datree/releases/tag/${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ azahi jceb ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/dbus-test-runner/default.nix b/nixpkgs/pkgs/development/tools/dbus-test-runner/default.nix
new file mode 100644
index 000000000000..c4951f0193c5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/dbus-test-runner/default.nix
@@ -0,0 +1,80 @@
+{ stdenv
+, lib
+, fetchbzr
+, testers
+, autoreconfHook
+, bash
+, coreutils
+, dbus
+, dbus-glib
+, glib
+, intltool
+, pkg-config
+, python3
+, xvfb-run
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "dbus-test-runner";
+  version = "unstable-2019-10-02";
+
+  src = fetchbzr {
+    url = "lp:dbus-test-runner";
+    rev = "109";
+    sha256 = "sha256-4yH19X98SVqpviCBIWzIX6FYHWxCbREpuKCNjQuTFDk=";
+  };
+
+  postPatch = ''
+    patchShebangs tests/test-wait-outputer
+
+    # Tests `cat` together build shell scripts
+    # true is a PATHable call, bash a shebang
+    substituteInPlace tests/Makefile.am \
+      --replace '/bin/true' 'true' \
+      --replace '/bin/bash' '${lib.getExe bash}'
+  '';
+
+  strictDeps = true;
+
+  nativeBuildInputs = [
+    autoreconfHook
+    glib # for autoconf macro, gtester, gdbus
+    intltool
+    pkg-config
+  ];
+
+  buildInputs = [
+    dbus-glib
+    glib
+  ];
+
+  nativeCheckInputs = [
+    bash
+    dbus
+    (python3.withPackages (ps: with ps; [
+      python-dbusmock
+    ]))
+    xvfb-run
+  ];
+
+  enableParallelBuilding = true;
+
+  doCheck = stdenv.buildPlatform.canExecute stdenv.hostPlatform;
+
+  checkFlags = [
+    "XVFB_RUN=${lib.getExe xvfb-run}"
+  ];
+
+  passthru.tests.pkg-config = testers.testMetaPkgConfig finalAttrs.finalPackage;
+
+  meta = with lib; {
+    description = "A small little utility to run a couple of executables under a new DBus session for testing";
+    homepage = "https://launchpad.net/dbus-test-runner";
+    license = licenses.gpl3Only;
+    platforms = platforms.unix;
+    maintainers = teams.lomiri.members;
+    pkgConfigModules = [
+      "dbustest-1"
+    ];
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/dcadec/default.nix b/nixpkgs/pkgs/development/tools/dcadec/default.nix
new file mode 100644
index 000000000000..9f5f4f0a3b52
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/dcadec/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "dcadec";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "foo86";
+    repo = pname;
+    rev = "v" + version;
+    sha256 = "07nd0ajizrp1w02bsyfcv18431r8m8rq8gjfmz9wmckpg7cxj2hs";
+  };
+
+  installPhase = "make PREFIX=/ DESTDIR=$out install";
+
+  doCheck = false; # fails with "ERROR: Run 'git submodule update --init test/samples' first."
+
+  meta = with lib; {
+    description = "DTS Coherent Acoustics decoder with support for HD extensions";
+    maintainers = with maintainers; [ edwtjo ];
+    homepage = "https://github.com/foo86/dcadec";
+    license = licenses.lgpl21;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ddosify/default.nix b/nixpkgs/pkgs/development/tools/ddosify/default.nix
new file mode 100644
index 000000000000..b1e659ec8d6d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ddosify/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "ddosify";
+  version = "1.0.6";
+
+  src = fetchFromGitHub {
+    owner = "ddosify";
+    repo = "ddosify";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-5K/qXtdlDC09dEjRwYvoh9SapGLNmvywDMiNdwZDDTQ=";
+  };
+
+  vendorHash = "sha256-Wg4JzA2aEwNBsDrkauFUb9AS38ITLBGex9QHzDcdpoM=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=main.GitVersion=${version}"
+    "-X=main.GitCommit=unknown"
+    "-X=main.BuildDate=unknown"
+  ];
+
+  # TestCreateHammerMultipartPayload error occurred - Get "https://upload.wikimedia.org/wikipedia/commons/b/bd/Test.svg"
+  doCheck = false;
+
+  doInstallCheck = true;
+
+  installCheckPhase = ''
+    $out/bin/ddosify -version | grep ${version} > /dev/null
+  '';
+
+  meta = with lib; {
+    description = "High-performance load testing tool, written in Golang";
+    homepage = "https://ddosify.com/";
+    changelog = "https://github.com/ddosify/ddosify/releases/tag/v${version}";
+    license = licenses.agpl3Plus;
+    maintainers = with maintainers; [ bryanasdev000 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/deadnix/default.nix b/nixpkgs/pkgs/development/tools/deadnix/default.nix
new file mode 100644
index 000000000000..98bb9bc0544b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/deadnix/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "deadnix";
+  version = "1.2.0";
+
+  src = fetchFromGitHub {
+    owner = "astro";
+    repo = "deadnix";
+    rev = "v${version}";
+    sha256 = "sha256-IcxupBqG3/h13sHgNYcO/oHKYfnK1LYd8Ehercz/Z/w=";
+  };
+
+  cargoSha256 = "sha256-8l4V9AWrBBnEsdZ0Vs4ruPdu+WQVo2ZbJBmhmo23s2g=";
+
+  meta = with lib; {
+    description = "Find and remove unused code in .nix source files";
+    homepage = "https://github.com/astro/deadnix";
+    license = licenses.gpl3Only;
+    mainProgram = "deadnix";
+    maintainers = with maintainers; [ astro ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/dec-decode/default.nix b/nixpkgs/pkgs/development/tools/dec-decode/default.nix
new file mode 100644
index 000000000000..2d85f41e33ab
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/dec-decode/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "dec-decode";
+  version = "unstable-2022-12-24";
+
+  src = fetchFromGitHub {
+    owner = "sammiq";
+    repo = pname;
+    rev = "6ee103c";
+    hash = "sha256-vOYKVl00oaXwp77pRLqUPnXQT5QuJfqnGGkQVBMq5W0=";
+  };
+
+  vendorHash = "sha256-zGWRzw1KUmifIsTudlgoKCR3+K0FLehHRSB3lNX+OWY=";
+
+  meta = with lib; {
+    description = "Nintendo Wii iso.dec decoder";
+    homepage = "https://github.com/sammiq/dec-decode";
+    license = licenses.unlicense;
+    maintainers = with maintainers; [ hughobrien ];
+    platforms = with platforms; linux ++ darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/delve/default.nix b/nixpkgs/pkgs/development/tools/delve/default.nix
new file mode 100644
index 000000000000..1b76d0543a34
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/delve/default.nix
@@ -0,0 +1,51 @@
+{ lib, buildGoModule, fetchFromGitHub, makeWrapper, stdenv }:
+
+buildGoModule rec {
+  pname = "delve";
+  version = "1.22.0";
+
+  src = fetchFromGitHub {
+    owner = "go-delve";
+    repo = "delve";
+    rev = "v${version}";
+    hash = "sha256-uYUl8PMBRf73wwo+oOYda0sTfD1gnDThtNc3sg8Q328=";
+  };
+
+  vendorHash = null;
+
+  subPackages = [ "cmd/dlv" ];
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  hardeningDisable = [ "fortify" ];
+
+  preCheck = ''
+    XDG_CONFIG_HOME=$(mktemp -d)
+  '';
+
+  # Disable tests on Darwin as they require various workarounds.
+  #
+  # - Tests requiring local networking fail with or without sandbox,
+  #   even with __darwinAllowLocalNetworking allowed.
+  # - CGO_FLAGS warnings break tests' expected stdout/stderr outputs.
+  # - DAP test binaries exit prematurely.
+  doCheck = !stdenv.isDarwin;
+
+  postInstall = ''
+    # fortify source breaks build since delve compiles with -O0
+    wrapProgram $out/bin/dlv \
+      --prefix disableHardening " " fortify
+
+    # add symlink for vscode golang extension
+    # https://github.com/golang/vscode-go/blob/master/docs/debugging.md#manually-installing-dlv-dap
+    ln $out/bin/dlv $out/bin/dlv-dap
+  '';
+
+  meta = with lib; {
+    description = "debugger for the Go programming language";
+    homepage = "https://github.com/go-delve/delve";
+    maintainers = with maintainers; [ vdemeester ];
+    license = licenses.mit;
+    mainProgram = "dlv";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/dep2nix/default.nix b/nixpkgs/pkgs/development/tools/dep2nix/default.nix
new file mode 100644
index 000000000000..5d98ecd57296
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/dep2nix/default.nix
@@ -0,0 +1,34 @@
+{ lib, fetchFromGitHub, buildGoPackage
+, makeWrapper, nix-prefetch-scripts }:
+
+buildGoPackage rec {
+  pname = "dep2nix";
+  version = "unstable-2019-04-02";
+
+  goPackagePath = "github.com/nixcloud/dep2nix";
+
+  src = fetchFromGitHub {
+    owner = "nixcloud";
+    repo = pname;
+    rev = "830684f920333b8ff0946d6b807e8be642eec3ef";
+    sha256 = "17sjxhzhmz4893x3x054anp4xvqd1px15nv3fj2m7i6r0vbgpm0j";
+  };
+
+  nativeBuildInputs = [
+    makeWrapper
+  ];
+
+  postFixup = ''
+    wrapProgram $out/bin/dep2nix \
+      --prefix PATH : ${nix-prefetch-scripts}/bin
+  '';
+
+  goDeps = ./deps.nix;
+
+  meta = with lib; {
+    description = "Convert `Gopkg.lock` files from golang dep into `deps.nix`";
+    license = licenses.bsd3;
+    homepage = "https://github.com/nixcloud/dep2nix";
+    maintainers = [ maintainers.mic92 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/dep2nix/deps.nix b/nixpkgs/pkgs/development/tools/dep2nix/deps.nix
new file mode 100644
index 000000000000..ceedc50fc887
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/dep2nix/deps.nix
@@ -0,0 +1,129 @@
+# file generated from Gopkg.lock using dep2nix (https://github.com/nixcloud/dep2nix)
+[
+  {
+    goPackagePath  = "github.com/Masterminds/semver";
+    fetch = {
+      type = "git";
+      url = "https://github.com/carolynvs/semver.git";
+      rev =  "a93e51b5a57ef416dac8bb02d11407b6f55d8929";
+      sha256 = "1rd3p135r7iw0lvaa6vk7afxna87chq61a7a0wqnxd3xgpnpa9ik";
+    };
+  }
+  {
+    goPackagePath  = "github.com/Masterminds/vcs";
+    fetch = {
+      type = "git";
+      url = "https://github.com/Masterminds/vcs";
+      rev =  "6f1c6d150500e452704e9863f68c2559f58616bf";
+      sha256 = "02bpyzccazw9lwqchcz349al4vlxnz4m5gzwigk02zg2qpa1j53j";
+    };
+  }
+  {
+    goPackagePath  = "github.com/armon/go-radix";
+    fetch = {
+      type = "git";
+      url = "https://github.com/armon/go-radix";
+      rev =  "1fca145dffbcaa8fe914309b1ec0cfc67500fe61";
+      sha256 = "19jws9ngncpbhghzcy7biyb4r8jh14mzknyk67cvq6ln7kh1qyic";
+    };
+  }
+  {
+    goPackagePath  = "github.com/boltdb/bolt";
+    fetch = {
+      type = "git";
+      url = "https://github.com/boltdb/bolt";
+      rev =  "2f1ce7a837dcb8da3ec595b1dac9d0632f0f99e8";
+      sha256 = "0z7j06lijfi4y30ggf2znak2zf2srv2m6c68ar712wd2ys44qb3r";
+    };
+  }
+  {
+    goPackagePath  = "github.com/golang/dep";
+    fetch = {
+      type = "git";
+      url = "https://github.com/CrushedPixel/dep";
+      rev =  "fa9f32339c8855ebe7e7bc66e549036a7e06d37a";
+      sha256 = "1knaxs1ji1b0b68393f24r8qzvahxz9x7rqwc8jsjlshvpz0hlm6";
+    };
+  }
+  {
+    goPackagePath  = "github.com/golang/protobuf";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/protobuf";
+      rev =  "bbd03ef6da3a115852eaf24c8a1c46aeb39aa175";
+      sha256 = "1pyli3dcagi7jzpiazph4fhkz7a3z4bhd25nwbb7g0iy69b8z1g4";
+    };
+  }
+  {
+    goPackagePath  = "github.com/jmank88/nuts";
+    fetch = {
+      type = "git";
+      url = "https://github.com/jmank88/nuts";
+      rev =  "8b28145dffc87104e66d074f62ea8080edfad7c8";
+      sha256 = "1d0xj1dj1lfalq3pg15h0c645n84lf122xx3zkm7hawq9zri6n5k";
+    };
+  }
+  {
+    goPackagePath  = "github.com/nightlyone/lockfile";
+    fetch = {
+      type = "git";
+      url = "https://github.com/nightlyone/lockfile";
+      rev =  "6a197d5ea61168f2ac821de2b7f011b250904900";
+      sha256 = "03znnf6rzyyi4h4qj81py1xpfs3pnfm39j4bfc9qzakz5j9y1gdl";
+    };
+  }
+  {
+    goPackagePath  = "github.com/pelletier/go-toml";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pelletier/go-toml";
+      rev =  "acdc4509485b587f5e675510c4f2c63e90ff68a8";
+      sha256 = "1y5m9pngxhsfzcnxh8ma5nsllx74wn0jr47p2n6i3inrjqxr12xh";
+    };
+  }
+  {
+    goPackagePath  = "github.com/pkg/errors";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pkg/errors";
+      rev =  "645ef00459ed84a119197bfb8d8205042c6df63d";
+      sha256 = "001i6n71ghp2l6kdl3qq1v2vmghcz3kicv9a5wgcihrzigm75pp5";
+    };
+  }
+  {
+    goPackagePath  = "github.com/sdboyer/constext";
+    fetch = {
+      type = "git";
+      url = "https://github.com/sdboyer/constext";
+      rev =  "836a144573533ea4da4e6929c235fd348aed1c80";
+      sha256 = "0055yw73di4spa1wwpa2pyb708wmh9r3xd8dcv8pn81dba94if1w";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/net";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/net";
+      rev =  "dc948dff8834a7fe1ca525f8d04e261c2b56e70d";
+      sha256 = "0gkw1am63agb1rgpxr2qhns9npr99mzwrxg7px88qq8h93zzd4kg";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/sync";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sync";
+      rev =  "fd80eb99c8f653c847d294a001bdf2a3a6f768f5";
+      sha256 = "12lzldlj1cqc1babp1hkkn76fglzn5abkqvmbpr4f2j95mf9x836";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/sys";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sys";
+      rev =  "37707fdb30a5b38865cfb95e5aab41707daec7fd";
+      sha256 = "1abrr2507a737hdqv4q7pw7hv6ls9pdiq9crhdi52r3gcz6hvizg";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/development/tools/detekt/default.nix b/nixpkgs/pkgs/development/tools/detekt/default.nix
new file mode 100644
index 000000000000..ff643693daec
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/detekt/default.nix
@@ -0,0 +1,38 @@
+{ detekt, lib, stdenv, fetchurl, makeWrapper, jre_headless, testers }:
+stdenv.mkDerivation rec {
+  pname = "detekt";
+  version = "1.23.5";
+
+  jarfilename = "${pname}-${version}-executable.jar";
+
+  src = fetchurl {
+    url = "https://github.com/detekt/detekt/releases/download/v${version}/detekt-cli-${version}-all.jar";
+    sha256 = "sha256-Pz+MaZimJMCjtGPy7coi6SSE7IdAQhtp2u8YV4s7KLY=";
+  };
+
+  dontUnpack = true;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -D "$src" "$out/share/java/${jarfilename}"
+
+    makeWrapper ${jre_headless}/bin/java $out/bin/detekt \
+      --add-flags "-jar $out/share/java/${jarfilename}"
+
+    runHook postInstall
+  '';
+
+  passthru.tests.version = testers.testVersion { package = detekt; };
+
+  meta = with lib; {
+    description = "Static code analysis for Kotlin";
+    homepage = "https://detekt.dev/";
+    license = licenses.asl20;
+    platforms = jre_headless.meta.platforms;
+    maintainers = with maintainers; [ mdr ];
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/devbox/default.nix b/nixpkgs/pkgs/development/tools/devbox/default.nix
new file mode 100644
index 000000000000..38649859cea7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/devbox/default.nix
@@ -0,0 +1,43 @@
+{ buildGoModule
+, fetchFromGitHub
+, installShellFiles
+, lib
+}:
+buildGoModule rec {
+  pname = "devbox";
+  version = "0.9.1";
+
+  src = fetchFromGitHub {
+    owner = "jetpack-io";
+    repo = pname;
+    rev = version;
+    hash = "sha256-3KZWXVwvzy3mZkh6pGZpeQQp2aU4V9TyBcJXU4Au4Rs=";
+  };
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X go.jetpack.io/devbox/internal/build.Version=${version}"
+  ];
+
+  # integration tests want file system access
+  doCheck = false;
+
+  vendorHash = "sha256-8G1JX4vdpDAicx6A9Butl8XTjszlHMbh34pJVQyzEs4=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    installShellCompletion --cmd devbox \
+      --bash <($out/bin/devbox completion bash) \
+      --fish <($out/bin/devbox completion fish) \
+      --zsh <($out/bin/devbox completion zsh)
+  '';
+
+  meta = with lib; {
+    description = "Instant, easy, predictable shells and containers.";
+    homepage = "https://www.jetpack.io/devbox";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ urandom lagoja ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/devd/default.nix b/nixpkgs/pkgs/development/tools/devd/default.nix
new file mode 100644
index 000000000000..05ed14dfcd6e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/devd/default.nix
@@ -0,0 +1,34 @@
+{ buildGoModule, fetchFromGitHub, fetchpatch, lib }:
+
+buildGoModule rec {
+  pname = "devd";
+  version = "unstable-2020-04-27";
+
+  src = fetchFromGitHub {
+    owner = "cortesi";
+    repo = "devd";
+    rev = "c1a3bfba27d8e028de90fb24452374412a4cffb3";
+    hash = "sha256-k0zj7fiYbaHnNUUI7ruD0vXiT4c1bxPuR4I0dRouCbU=";
+  };
+
+  vendorHash = "sha256-o7MbN/6n7fkp/yqYyQbfWBUqI09/JYh5jtV31gjNf6w=";
+
+  patches = [
+    # Update x/sys to support go 1.17.
+    (fetchpatch {
+      url = "https://github.com/cortesi/devd/commit/5f4720bf41399736b4e7e1a493da6c87a583d0b2.patch";
+      hash = "sha256-WDN08XNsDPuZwBCE8iDXgGAWFwx2UTwqRkhzKMtPKR8=";
+    })
+  ];
+
+  subPackages = [ "cmd/devd" ];
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "A local webserver for developers";
+    homepage = "https://github.com/cortesi/devd";
+    license = licenses.mit;
+    maintainers = with maintainers; [ brianhicks ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/devpi-client/default.nix b/nixpkgs/pkgs/development/tools/devpi-client/default.nix
new file mode 100644
index 000000000000..a481bf8804fe
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/devpi-client/default.nix
@@ -0,0 +1,82 @@
+{ lib
+, devpi-server
+, git
+, glibcLocales
+, python3
+, fetchPypi
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "devpi-client";
+  version = "7.0.2";
+  pyproject = true;
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-oOX5Z8WXgNJYsgXqHE2CsXdDnA3XmDF6axD1D318bPQ=";
+  };
+
+  postPatch = ''
+    substituteInPlace tox.ini \
+      --replace "--flake8" ""
+  '';
+
+  nativeBuildInputs = with python3.pkgs; [
+    setuptools
+    setuptools-changelog-shortener
+    wheel
+  ];
+
+  buildInputs = [
+    glibcLocales
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    build
+    check-manifest
+    devpi-common
+    iniconfig
+    pkginfo
+    pluggy
+    platformdirs
+  ];
+
+  nativeCheckInputs = [
+    devpi-server
+    git
+  ] ++ (with python3.pkgs; [
+    mercurial
+    mock
+    pypitoken
+    pytestCheckHook
+    sphinx
+    virtualenv
+    webtest
+    wheel
+  ]);
+
+  preCheck = ''
+    export HOME=$(mktemp -d);
+  '';
+
+  pytestFlagsArray = [
+    # --fast skips tests which try to start a devpi-server improperly
+    "--fast"
+  ];
+
+  LC_ALL = "en_US.UTF-8";
+
+  __darwinAllowLocalNetworking = true;
+
+  pythonImportsCheck = [
+    "devpi"
+  ];
+
+  meta = with lib; {
+    description = "Client for devpi, a pypi index server and packaging meta tool";
+    homepage = "http://doc.devpi.net";
+    changelog = "https://github.com/devpi/devpi/blob/client-${version}/client/CHANGELOG";
+    license = licenses.mit;
+    maintainers = with maintainers; [ lewo makefu ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/devpi-server/default.nix b/nixpkgs/pkgs/development/tools/devpi-server/default.nix
new file mode 100644
index 000000000000..0b64f8c615af
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/devpi-server/default.nix
@@ -0,0 +1,120 @@
+{ lib, fetchFromGitHub, buildPythonApplication
+, pythonOlder
+, aiohttp
+, appdirs
+, beautifulsoup4
+, defusedxml
+, devpi-common
+, execnet
+, itsdangerous
+, nginx
+, packaging
+, passlib
+, platformdirs
+, pluggy
+, py
+, pyramid
+, pytestCheckHook
+, repoze-lru
+, setuptools
+, strictyaml
+, waitress
+, webtest
+, testers
+, devpi-server
+}:
+
+
+buildPythonApplication rec {
+  pname = "devpi-server";
+  version = "6.9.2";
+  pyproject = true;
+
+  disabled = pythonOlder "3.7";
+
+  src = fetchFromGitHub {
+    owner = "devpi";
+    repo = "devpi";
+    rev = "server-${version}";
+    hash = "sha256-HnxWLxOK+6B8O/7lpNjuSUQ0Z7NOmV2n01WFyjow6oU=";
+  };
+
+  sourceRoot = "${src.name}/server";
+
+  postPatch = ''
+    substituteInPlace tox.ini \
+      --replace "--flake8" ""
+  '';
+
+  nativeBuildInputs = [
+    setuptools
+  ];
+
+  propagatedBuildInputs = [
+    aiohttp
+    appdirs
+    defusedxml
+    devpi-common
+    execnet
+    itsdangerous
+    packaging
+    passlib
+    platformdirs
+    pluggy
+    pyramid
+    repoze-lru
+    setuptools
+    strictyaml
+    waitress
+    py
+  ] ++ passlib.optional-dependencies.argon2;
+
+  nativeCheckInputs = [
+    beautifulsoup4
+    nginx
+    py
+    pytestCheckHook
+    webtest
+  ];
+
+  # root_passwd_hash tries to write to store
+  # TestMirrorIndexThings tries to write to /var through ngnix
+  # nginx tests try to write to /var
+  preCheck = ''
+    export PATH=$PATH:$out/bin
+    export HOME=$TMPDIR
+  '';
+  pytestFlagsArray = [
+    "./test_devpi_server"
+    "--slow"
+    "-rfsxX"
+    "--ignore=test_devpi_server/test_nginx_replica.py"
+    "--ignore=test_devpi_server/test_streaming_nginx.py"
+    "--ignore=test_devpi_server/test_streaming_replica_nginx.py"
+  ];
+  disabledTests = [
+    "root_passwd_hash_option"
+    "TestMirrorIndexThings"
+    "test_auth_mirror_url_no_hash"
+    "test_auth_mirror_url_with_hash"
+    "test_auth_mirror_url_hidden_in_logs"
+  ];
+
+  __darwinAllowLocalNetworking = true;
+
+  pythonImportsCheck = [
+    "devpi_server"
+  ];
+
+  passthru.tests.version = testers.testVersion {
+    package = devpi-server;
+  };
+
+  meta = with lib;{
+    homepage = "http://doc.devpi.net";
+    description = "Github-style pypi index server and packaging meta tool";
+    changelog = "https://github.com/devpi/devpi/blob/${src.rev}/server/CHANGELOG";
+    license = licenses.mit;
+    maintainers = with maintainers; [ makefu ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/devpod/Cargo.lock b/nixpkgs/pkgs/development/tools/devpod/Cargo.lock
new file mode 100644
index 000000000000..87d28317d6fc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/devpod/Cargo.lock
@@ -0,0 +1,4518 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "Inflector"
+version = "0.11.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3"
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "aho-corasick"
+version = "0.7.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "alloc-no-stdlib"
+version = "2.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3"
+
+[[package]]
+name = "alloc-stdlib"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece"
+dependencies = [
+ "alloc-no-stdlib",
+]
+
+[[package]]
+name = "android_system_properties"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.70"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7de8ce5e0f9f8d88245311066a578d72b7af3e7088f32783804676302df237e4"
+
+[[package]]
+name = "arrayvec"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b"
+
+[[package]]
+name = "atk"
+version = "0.15.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c3d816ce6f0e2909a96830d6911c2aff044370b1ef92d7f267b43bae5addedd"
+dependencies = [
+ "atk-sys",
+ "bitflags",
+ "glib",
+ "libc",
+]
+
+[[package]]
+name = "atk-sys"
+version = "0.15.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "58aeb089fb698e06db8089971c7ee317ab9644bade33383f63631437b03aafb6"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps 6.0.4",
+]
+
+[[package]]
+name = "attohttpc"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fcf00bc6d5abb29b5f97e3c61a90b6d3caa12f3faf897d4a3e3607c050a35a7"
+dependencies = [
+ "flate2",
+ "http",
+ "log",
+ "native-tls",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "url",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "base64"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
+
+[[package]]
+name = "base64"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "block"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a"
+
+[[package]]
+name = "block-buffer"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "brotli"
+version = "3.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1a0b1dbcc8ae29329621f8d4f0d835787c1c38bb1401979b49d13b0b305ff68"
+dependencies = [
+ "alloc-no-stdlib",
+ "alloc-stdlib",
+ "brotli-decompressor",
+]
+
+[[package]]
+name = "brotli-decompressor"
+version = "2.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b6561fd3f895a11e8f72af2cb7d22e08366bebc2b6b57f7744c4bda27034744"
+dependencies = [
+ "alloc-no-stdlib",
+ "alloc-stdlib",
+]
+
+[[package]]
+name = "bstr"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3d4260bcc2e8fc9df1eac4919a720effeb63a3f0952f5bf4944adfa18897f09"
+dependencies = [
+ "memchr",
+ "serde",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535"
+
+[[package]]
+name = "byte-unit"
+version = "4.0.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da78b32057b8fdfc352504708feeba7216dcd65a2c9ab02978cbd288d1279b6c"
+dependencies = [
+ "serde",
+ "utf8-width",
+]
+
+[[package]]
+name = "bytemuck"
+version = "1.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea"
+
+[[package]]
+name = "byteorder"
+version = "1.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
+
+[[package]]
+name = "bytes"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be"
+
+[[package]]
+name = "cairo-rs"
+version = "0.15.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c76ee391b03d35510d9fa917357c7f1855bd9a6659c95a1b392e33f49b3369bc"
+dependencies = [
+ "bitflags",
+ "cairo-sys-rs",
+ "glib",
+ "libc",
+ "thiserror",
+]
+
+[[package]]
+name = "cairo-sys-rs"
+version = "0.15.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c55d429bef56ac9172d25fecb85dc8068307d17acd74b377866b7a1ef25d3c8"
+dependencies = [
+ "glib-sys",
+ "libc",
+ "system-deps 6.0.4",
+]
+
+[[package]]
+name = "cargo_toml"
+version = "0.13.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "497049e9477329f8f6a559972ee42e117487d01d1e8c2cc9f836ea6fa23a9e1a"
+dependencies = [
+ "serde",
+ "toml 0.5.11",
+]
+
+[[package]]
+name = "cc"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
+
+[[package]]
+name = "cesu8"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c"
+
+[[package]]
+name = "cfb"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "74f89d248799e3f15f91b70917f65381062a01bb8e222700ea0e5a7ff9785f9c"
+dependencies = [
+ "byteorder",
+ "uuid 0.8.2",
+]
+
+[[package]]
+name = "cfb"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d38f2da7a0a2c4ccf0065be06397cc26a81f4e528be095826eee9d4adbb8c60f"
+dependencies = [
+ "byteorder",
+ "fnv",
+ "uuid 1.3.1",
+]
+
+[[package]]
+name = "cfg-expr"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3431df59f28accaf4cb4eed4a9acc66bea3f3c3753aa6cdc2f024174ef232af7"
+dependencies = [
+ "smallvec",
+]
+
+[[package]]
+name = "cfg-expr"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a35b255461940a32985c627ce82900867c61db1659764d3675ea81963f72a4c6"
+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.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4e3c5919066adf22df73762e50cffcde3a758f2a848b113b586d1f86728b673b"
+dependencies = [
+ "iana-time-zone",
+ "js-sys",
+ "num-integer",
+ "num-traits",
+ "serde",
+ "time 0.1.45",
+ "wasm-bindgen",
+ "winapi",
+]
+
+[[package]]
+name = "cocoa"
+version = "0.24.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f425db7937052c684daec3bd6375c8abe2d146dca4b8b143d6db777c39138f3a"
+dependencies = [
+ "bitflags",
+ "block",
+ "cocoa-foundation",
+ "core-foundation",
+ "core-graphics",
+ "foreign-types",
+ "libc",
+ "objc",
+]
+
+[[package]]
+name = "cocoa-foundation"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "931d3837c286f56e3c58423ce4eba12d08db2374461a785c86f672b08b5650d6"
+dependencies = [
+ "bitflags",
+ "block",
+ "core-foundation",
+ "core-graphics-types",
+ "foreign-types",
+ "libc",
+ "objc",
+]
+
+[[package]]
+name = "codespan-reporting"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e"
+dependencies = [
+ "termcolor",
+ "unicode-width",
+]
+
+[[package]]
+name = "color_quant"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b"
+
+[[package]]
+name = "combine"
+version = "4.6.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4"
+dependencies = [
+ "bytes",
+ "memchr",
+]
+
+[[package]]
+name = "convert_case"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e"
+
+[[package]]
+name = "core-foundation"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
+
+[[package]]
+name = "core-graphics"
+version = "0.22.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb"
+dependencies = [
+ "bitflags",
+ "core-foundation",
+ "core-graphics-types",
+ "foreign-types",
+ "libc",
+]
+
+[[package]]
+name = "core-graphics-types"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a68b68b3446082644c91ac778bf50cd4104bfb002b5a6a7c44cca5a2c70788b"
+dependencies = [
+ "bitflags",
+ "core-foundation",
+ "foreign-types",
+ "libc",
+]
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "280a9f2d8b3a38871a3c8a46fb80db65e5e5ed97da80c4d08bf27fb63e35e181"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crc32fast"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200"
+dependencies = [
+ "cfg-if",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "crypto-common"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+dependencies = [
+ "generic-array",
+ "typenum",
+]
+
+[[package]]
+name = "cssparser"
+version = "0.27.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "754b69d351cdc2d8ee09ae203db831e005560fc6030da058f86ad60c92a9cb0a"
+dependencies = [
+ "cssparser-macros",
+ "dtoa-short",
+ "itoa 0.4.8",
+ "matches",
+ "phf 0.8.0",
+ "proc-macro2",
+ "quote",
+ "smallvec",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "cssparser-macros"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dfae75de57f2b2e85e8768c3ea840fd159c8f33e2b6522c7835b7abac81be16e"
+dependencies = [
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "ctor"
+version = "0.1.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096"
+dependencies = [
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "cxx"
+version = "1.0.94"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f61f1b6389c3fe1c316bf8a4dccc90a38208354b330925bce1f74a6c4756eb93"
+dependencies = [
+ "cc",
+ "cxxbridge-flags",
+ "cxxbridge-macro",
+ "link-cplusplus",
+]
+
+[[package]]
+name = "cxx-build"
+version = "1.0.94"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12cee708e8962df2aeb38f594aae5d827c022b6460ac71a7a3e2c3c2aae5a07b"
+dependencies = [
+ "cc",
+ "codespan-reporting",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "scratch",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "cxxbridge-flags"
+version = "1.0.94"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7944172ae7e4068c533afbb984114a56c46e9ccddda550499caa222902c7f7bb"
+
+[[package]]
+name = "cxxbridge-macro"
+version = "1.0.94"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2345488264226bf682893e25de0769f3360aac9957980ec49361b083ddaa5bc5"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "darling"
+version = "0.13.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c"
+dependencies = [
+ "darling_core",
+ "darling_macro",
+]
+
+[[package]]
+name = "darling_core"
+version = "0.13.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610"
+dependencies = [
+ "fnv",
+ "ident_case",
+ "proc-macro2",
+ "quote",
+ "strsim",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "darling_macro"
+version = "0.13.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835"
+dependencies = [
+ "darling_core",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "dbus"
+version = "0.9.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bb21987b9fb1613058ba3843121dd18b163b254d8a6e797e144cbac14d96d1b"
+dependencies = [
+ "libc",
+ "libdbus-sys",
+ "winapi",
+]
+
+[[package]]
+name = "derive_more"
+version = "0.99.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321"
+dependencies = [
+ "convert_case",
+ "proc-macro2",
+ "quote",
+ "rustc_version",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "devpod-desktop"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "chrono",
+ "cocoa",
+ "dirs",
+ "dispatch",
+ "lazy_static",
+ "log",
+ "objc",
+ "regex",
+ "reqwest",
+ "semver",
+ "serde",
+ "serde_json",
+ "serde_qs",
+ "serde_yaml",
+ "strip-ansi-escapes",
+ "tauri",
+ "tauri-build",
+ "tauri-plugin-deep-link",
+ "tauri-plugin-log",
+ "tauri-plugin-store",
+ "thiserror",
+ "tokio",
+ "ts-rs",
+ "url",
+ "window-vibrancy",
+ "windows 0.48.0",
+ "winreg 0.50.0",
+]
+
+[[package]]
+name = "digest"
+version = "0.10.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f"
+dependencies = [
+ "block-buffer",
+ "crypto-common",
+]
+
+[[package]]
+name = "dirs"
+version = "5.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225"
+dependencies = [
+ "dirs-sys",
+]
+
+[[package]]
+name = "dirs-next"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1"
+dependencies = [
+ "cfg-if",
+ "dirs-sys-next",
+]
+
+[[package]]
+name = "dirs-sys"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c"
+dependencies = [
+ "libc",
+ "option-ext",
+ "redox_users",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "dirs-sys-next"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d"
+dependencies = [
+ "libc",
+ "redox_users",
+ "winapi",
+]
+
+[[package]]
+name = "dispatch"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b"
+
+[[package]]
+name = "dtoa"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56899898ce76aaf4a0f24d914c97ea6ed976d42fec6ad33fcbb0a1103e07b2b0"
+
+[[package]]
+name = "dtoa-short"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bde03329ae10e79ede66c9ce4dc930aa8599043b0743008548680f25b91502d6"
+dependencies = [
+ "dtoa",
+]
+
+[[package]]
+name = "dunce"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0bd4b30a6560bbd9b4620f4de34c3f14f60848e58a9b7216801afcb4c7b31c3c"
+
+[[package]]
+name = "embed_plist"
+version = "1.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ef6b89e5b37196644d8796de5268852ff179b44e96276cf4290264843743bb7"
+
+[[package]]
+name = "encoding_rs"
+version = "0.8.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "equivalent"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88bffebc5d80432c9b140ee17875ff173a8ab62faad5b257da912bd2f6c1c0a1"
+
+[[package]]
+name = "errno"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "errno-dragonfly"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "fastrand"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "fdeflate"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d329bdeac514ee06249dabc27877490f17f5d371ec693360768b838e19f3ae10"
+dependencies = [
+ "simd-adler32",
+]
+
+[[package]]
+name = "fern"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9f0c14694cbd524c8720dd69b0e3179344f04ebb5f90f2e4a440c6ea3b2f1ee"
+dependencies = [
+ "log",
+]
+
+[[package]]
+name = "field-offset"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3cf3a800ff6e860c863ca6d4b16fd999db8b752819c1606884047b73e468535"
+dependencies = [
+ "memoffset",
+ "rustc_version",
+]
+
+[[package]]
+name = "filetime"
+version = "0.2.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5cbc844cecaee9d4443931972e1289c8ff485cb4cc2767cb03ca139ed6885153"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall 0.2.16",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "flate2"
+version = "1.0.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide 0.6.2",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "foreign-types"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+dependencies = [
+ "foreign-types-shared",
+]
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "futf"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843"
+dependencies = [
+ "mac",
+ "new_debug_unreachable",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2"
+dependencies = [
+ "futures-core",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c"
+
+[[package]]
+name = "futures-executor"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-io"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964"
+
+[[package]]
+name = "futures-macro"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e"
+
+[[package]]
+name = "futures-task"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65"
+
+[[package]]
+name = "futures-util"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533"
+dependencies = [
+ "futures-core",
+ "futures-macro",
+ "futures-task",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "fxhash"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c"
+dependencies = [
+ "byteorder",
+]
+
+[[package]]
+name = "gdk"
+version = "0.15.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a6e05c1f572ab0e1f15be94217f0dc29088c248b14f792a5ff0af0d84bcda9e8"
+dependencies = [
+ "bitflags",
+ "cairo-rs",
+ "gdk-pixbuf",
+ "gdk-sys",
+ "gio",
+ "glib",
+ "libc",
+ "pango",
+]
+
+[[package]]
+name = "gdk-pixbuf"
+version = "0.15.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad38dd9cc8b099cceecdf41375bb6d481b1b5a7cd5cd603e10a69a9383f8619a"
+dependencies = [
+ "bitflags",
+ "gdk-pixbuf-sys",
+ "gio",
+ "glib",
+ "libc",
+]
+
+[[package]]
+name = "gdk-pixbuf-sys"
+version = "0.15.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "140b2f5378256527150350a8346dbdb08fadc13453a7a2d73aecd5fab3c402a7"
+dependencies = [
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps 6.0.4",
+]
+
+[[package]]
+name = "gdk-sys"
+version = "0.15.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "32e7a08c1e8f06f4177fb7e51a777b8c1689f743a7bc11ea91d44d2226073a88"
+dependencies = [
+ "cairo-sys-rs",
+ "gdk-pixbuf-sys",
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "pango-sys",
+ "pkg-config",
+ "system-deps 6.0.4",
+]
+
+[[package]]
+name = "gdkx11-sys"
+version = "0.15.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4b7f8c7a84b407aa9b143877e267e848ff34106578b64d1e0a24bf550716178"
+dependencies = [
+ "gdk-sys",
+ "glib-sys",
+ "libc",
+ "system-deps 6.0.4",
+ "x11",
+]
+
+[[package]]
+name = "generator"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "33a20a288a94683f5f4da0adecdbe095c94a77c295e514cc6484e9394dd8376e"
+dependencies = [
+ "cc",
+ "libc",
+ "log",
+ "rustversion",
+ "windows 0.44.0",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.1.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi 0.9.0+wasi-snapshot-preview1",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+]
+
+[[package]]
+name = "gio"
+version = "0.15.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68fdbc90312d462781a395f7a16d96a2b379bb6ef8cd6310a2df272771c4283b"
+dependencies = [
+ "bitflags",
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "gio-sys",
+ "glib",
+ "libc",
+ "once_cell",
+ "thiserror",
+]
+
+[[package]]
+name = "gio-sys"
+version = "0.15.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "32157a475271e2c4a023382e9cab31c4584ee30a97da41d3c4e9fdd605abcf8d"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps 6.0.4",
+ "winapi",
+]
+
+[[package]]
+name = "glib"
+version = "0.15.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "edb0306fbad0ab5428b0ca674a23893db909a98582969c9b537be4ced78c505d"
+dependencies = [
+ "bitflags",
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-task",
+ "glib-macros",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "once_cell",
+ "smallvec",
+ "thiserror",
+]
+
+[[package]]
+name = "glib-macros"
+version = "0.15.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "10c6ae9f6fa26f4fb2ac16b528d138d971ead56141de489f8111e259b9df3c4a"
+dependencies = [
+ "anyhow",
+ "heck 0.4.1",
+ "proc-macro-crate",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "glib-sys"
+version = "0.15.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef4b192f8e65e9cf76cbf4ea71fa8e3be4a0e18ffe3d68b8da6836974cc5bad4"
+dependencies = [
+ "libc",
+ "system-deps 6.0.4",
+]
+
+[[package]]
+name = "glob"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
+
+[[package]]
+name = "globset"
+version = "0.4.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "029d74589adefde59de1a0c4f4732695c32805624aec7b68d91503d4dba79afc"
+dependencies = [
+ "aho-corasick",
+ "bstr",
+ "fnv",
+ "log",
+ "regex",
+]
+
+[[package]]
+name = "gobject-sys"
+version = "0.15.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d57ce44246becd17153bd035ab4d32cfee096a657fc01f2231c9278378d1e0a"
+dependencies = [
+ "glib-sys",
+ "libc",
+ "system-deps 6.0.4",
+]
+
+[[package]]
+name = "gtk"
+version = "0.15.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92e3004a2d5d6d8b5057d2b57b3712c9529b62e82c77f25c1fecde1fd5c23bd0"
+dependencies = [
+ "atk",
+ "bitflags",
+ "cairo-rs",
+ "field-offset",
+ "futures-channel",
+ "gdk",
+ "gdk-pixbuf",
+ "gio",
+ "glib",
+ "gtk-sys",
+ "gtk3-macros",
+ "libc",
+ "once_cell",
+ "pango",
+ "pkg-config",
+]
+
+[[package]]
+name = "gtk-sys"
+version = "0.15.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5bc2f0587cba247f60246a0ca11fe25fb733eabc3de12d1965fc07efab87c84"
+dependencies = [
+ "atk-sys",
+ "cairo-sys-rs",
+ "gdk-pixbuf-sys",
+ "gdk-sys",
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "pango-sys",
+ "system-deps 6.0.4",
+]
+
+[[package]]
+name = "gtk3-macros"
+version = "0.15.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "684c0456c086e8e7e9af73ec5b84e35938df394712054550e81558d21c44ab0d"
+dependencies = [
+ "anyhow",
+ "proc-macro-crate",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "h2"
+version = "0.3.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97ec8491ebaf99c8eaa73058b045fe58073cd6be7f596ac993ced0b0a0c01049"
+dependencies = [
+ "bytes",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "http",
+ "indexmap 1.9.3",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tracing",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+
+[[package]]
+name = "hashbrown"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a"
+
+[[package]]
+name = "heck"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
+dependencies = [
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "heck"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+
+[[package]]
+name = "hermit-abi"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286"
+
+[[package]]
+name = "html5ever"
+version = "0.25.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5c13fb08e5d4dfc151ee5e88bae63f7773d61852f3bdc73c9f4b9e1bde03148"
+dependencies = [
+ "log",
+ "mac",
+ "markup5ever",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "http"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482"
+dependencies = [
+ "bytes",
+ "fnv",
+ "itoa 1.0.6",
+]
+
+[[package]]
+name = "http-body"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
+dependencies = [
+ "bytes",
+ "http",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "http-range"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21dec9db110f5f872ed9699c3ecf50cf16f423502706ba5c72462e28d3157573"
+
+[[package]]
+name = "httparse"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
+
+[[package]]
+name = "httpdate"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421"
+
+[[package]]
+name = "hyper"
+version = "0.14.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468"
+dependencies = [
+ "bytes",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "httparse",
+ "httpdate",
+ "itoa 1.0.6",
+ "pin-project-lite",
+ "socket2",
+ "tokio",
+ "tower-service",
+ "tracing",
+ "want",
+]
+
+[[package]]
+name = "hyper-tls"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905"
+dependencies = [
+ "bytes",
+ "hyper",
+ "native-tls",
+ "tokio",
+ "tokio-native-tls",
+]
+
+[[package]]
+name = "iana-time-zone"
+version = "0.1.56"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0722cd7114b7de04316e7ea5456a0bbb20e4adb46fd27a3697adb812cff0f37c"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys",
+ "iana-time-zone-haiku",
+ "js-sys",
+ "wasm-bindgen",
+ "windows 0.48.0",
+]
+
+[[package]]
+name = "iana-time-zone-haiku"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca"
+dependencies = [
+ "cxx",
+ "cxx-build",
+]
+
+[[package]]
+name = "ico"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "031530fe562d8c8d71c0635013d6d155bbfe8ba0aa4b4d2d24ce8af6b71047bd"
+dependencies = [
+ "byteorder",
+ "png",
+]
+
+[[package]]
+name = "ident_case"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
+
+[[package]]
+name = "idna"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6"
+dependencies = [
+ "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 = "image"
+version = "0.24.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "527909aa81e20ac3a44803521443a765550f09b5130c2c2fa1ea59c2f8f50a3a"
+dependencies = [
+ "bytemuck",
+ "byteorder",
+ "color_quant",
+ "num-rational",
+ "num-traits",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
+dependencies = [
+ "autocfg",
+ "hashbrown 0.12.3",
+]
+
+[[package]]
+name = "indexmap"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d"
+dependencies = [
+ "equivalent",
+ "hashbrown 0.14.0",
+]
+
+[[package]]
+name = "infer"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "20b2b533137b9cad970793453d4f921c2e91312a6d88b1085c07bc15fc51bb3b"
+dependencies = [
+ "cfb 0.6.1",
+]
+
+[[package]]
+name = "infer"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f178e61cdbfe084aa75a2f4f7a25a5bb09701a47ae1753608f194b15783c937a"
+dependencies = [
+ "cfb 0.7.3",
+]
+
+[[package]]
+name = "instant"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "interprocess"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81f2533f3be42fffe3b5e63b71aeca416c1c3bc33e4e27be018521e76b1f38fb"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "rustc_version",
+ "to_method",
+ "winapi",
+]
+
+[[package]]
+name = "io-lifetimes"
+version = "1.0.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220"
+dependencies = [
+ "hermit-abi 0.3.1",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "ipnet"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6"
+
+[[package]]
+name = "itoa"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4"
+
+[[package]]
+name = "itoa"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6"
+
+[[package]]
+name = "javascriptcore-rs"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf053e7843f2812ff03ef5afe34bb9c06ffee120385caad4f6b9967fcd37d41c"
+dependencies = [
+ "bitflags",
+ "glib",
+ "javascriptcore-rs-sys",
+]
+
+[[package]]
+name = "javascriptcore-rs-sys"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "905fbb87419c5cde6e3269537e4ea7d46431f3008c5d057e915ef3f115e7793c"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps 5.0.0",
+]
+
+[[package]]
+name = "jni"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "039022cdf4d7b1cf548d31f60ae783138e5fd42013f6271049d7df7afadef96c"
+dependencies = [
+ "cesu8",
+ "combine",
+ "jni-sys",
+ "log",
+ "thiserror",
+ "walkdir",
+]
+
+[[package]]
+name = "jni-sys"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130"
+
+[[package]]
+name = "js-sys"
+version = "0.3.61"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "json-patch"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eb3fa5a61630976fc4c353c70297f2e93f1930e3ccee574d59d618ccbd5154ce"
+dependencies = [
+ "serde",
+ "serde_json",
+ "treediff",
+]
+
+[[package]]
+name = "kuchiki"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ea8e9c6e031377cff82ee3001dc8026cdf431ed4e2e6b51f98ab8c73484a358"
+dependencies = [
+ "cssparser",
+ "html5ever",
+ "matches",
+ "selectors",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "libappindicator"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db2d3cb96d092b4824cb306c9e544c856a4cb6210c1081945187f7f1924b47e8"
+dependencies = [
+ "glib",
+ "gtk",
+ "gtk-sys",
+ "libappindicator-sys",
+ "log",
+]
+
+[[package]]
+name = "libappindicator-sys"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1b3b6681973cea8cc3bce7391e6d7d5502720b80a581c9a95c9cbaf592826aa"
+dependencies = [
+ "gtk-sys",
+ "libloading",
+ "once_cell",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.141"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3304a64d199bb964be99741b7a14d26972741915b3649639149b2479bb46f4b5"
+
+[[package]]
+name = "libdbus-sys"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "06085512b750d640299b79be4bad3d2fa90a9c00b1fd9e1b46364f66f0485c72"
+dependencies = [
+ "pkg-config",
+]
+
+[[package]]
+name = "libloading"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f"
+dependencies = [
+ "cfg-if",
+ "winapi",
+]
+
+[[package]]
+name = "line-wrap"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f30344350a2a51da54c1d53be93fade8a237e545dbcc4bdbe635413f2117cab9"
+dependencies = [
+ "safemem",
+]
+
+[[package]]
+name = "link-cplusplus"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d59d8c75012853d2e872fb56bc8a2e53718e2cafe1a4c823143141c6d90c322f"
+
+[[package]]
+name = "lock_api"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df"
+dependencies = [
+ "autocfg",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
+dependencies = [
+ "cfg-if",
+ "value-bag",
+]
+
+[[package]]
+name = "loom"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff50ecb28bb86013e935fb6683ab1f6d3a20016f123c76fd4c27470076ac30f5"
+dependencies = [
+ "cfg-if",
+ "generator",
+ "scoped-tls",
+ "serde",
+ "serde_json",
+ "tracing",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "mac"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4"
+
+[[package]]
+name = "mac-notification-sys"
+version = "0.5.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abc434554ad0e640d772f7f262aa28e61d485212533d3673abe5f3d1729bd42a"
+dependencies = [
+ "cc",
+ "dirs-next",
+ "objc-foundation",
+ "objc_id",
+ "time 0.3.20",
+]
+
+[[package]]
+name = "malloc_buf"
+version = "0.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "markup5ever"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a24f40fb03852d1cdd84330cddcaf98e9ec08a7b7768e952fad3b4cf048ec8fd"
+dependencies = [
+ "log",
+ "phf 0.8.0",
+ "phf_codegen",
+ "string_cache",
+ "string_cache_codegen",
+ "tendril",
+]
+
+[[package]]
+name = "matchers"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558"
+dependencies = [
+ "regex-automata",
+]
+
+[[package]]
+name = "matches"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5"
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "memoffset"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "mime"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
+
+[[package]]
+name = "minisign-verify"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "933dca44d65cdd53b355d0b73d380a2ff5da71f87f036053188bf1eab6a19881"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "miniz_oxide"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
+dependencies = [
+ "adler",
+ "simd-adler32",
+]
+
+[[package]]
+name = "mio"
+version = "0.8.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2"
+dependencies = [
+ "libc",
+ "log",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "native-tls"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e"
+dependencies = [
+ "lazy_static",
+ "libc",
+ "log",
+ "openssl",
+ "openssl-probe",
+ "openssl-sys",
+ "schannel",
+ "security-framework",
+ "security-framework-sys",
+ "tempfile",
+]
+
+[[package]]
+name = "ndk"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2032c77e030ddee34a6787a64166008da93f6a352b629261d0fee232b8742dd4"
+dependencies = [
+ "bitflags",
+ "jni-sys",
+ "ndk-sys",
+ "num_enum",
+ "thiserror",
+]
+
+[[package]]
+name = "ndk-context"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b"
+
+[[package]]
+name = "ndk-sys"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e5a6ae77c8ee183dcbbba6150e2e6b9f3f4196a7666c02a715a95692ec1fa97"
+dependencies = [
+ "jni-sys",
+]
+
+[[package]]
+name = "new_debug_unreachable"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54"
+
+[[package]]
+name = "nodrop"
+version = "0.1.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb"
+
+[[package]]
+name = "notify-rust"
+version = "4.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2bfa211d18e360f08e36c364308f394b5eb23a6629150690e109a916dc6f610e"
+dependencies = [
+ "dbus",
+ "log",
+ "mac-notification-sys",
+ "tauri-winrt-notification",
+]
+
+[[package]]
+name = "nu-ansi-term"
+version = "0.46.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84"
+dependencies = [
+ "overload",
+ "winapi",
+]
+
+[[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-rational"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[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.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b"
+dependencies = [
+ "hermit-abi 0.2.6",
+ "libc",
+]
+
+[[package]]
+name = "num_enum"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9"
+dependencies = [
+ "num_enum_derive",
+]
+
+[[package]]
+name = "num_enum_derive"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799"
+dependencies = [
+ "proc-macro-crate",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "num_threads"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "objc"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1"
+dependencies = [
+ "malloc_buf",
+ "objc_exception",
+]
+
+[[package]]
+name = "objc-foundation"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9"
+dependencies = [
+ "block",
+ "objc",
+ "objc_id",
+]
+
+[[package]]
+name = "objc-sys"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da30ff0a93f6801dc6c4f384ebe70146a40aac8ebf34e4e8ff1f528e859318a3"
+
+[[package]]
+name = "objc2"
+version = "0.3.0-beta.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef3a6024722b4230242a53e5b5759ce117548983696b8e4b7bc2fd1f8fce621e"
+dependencies = [
+ "objc-sys",
+ "objc2-encode",
+]
+
+[[package]]
+name = "objc2-encode"
+version = "2.0.0-pre.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f8f7297b786454a87e392631e2b2754ed59a7b413effa8521225d93f46b2192"
+
+[[package]]
+name = "objc_exception"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "objc_id"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b"
+dependencies = [
+ "objc",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.17.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3"
+
+[[package]]
+name = "open"
+version = "3.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2078c0039e6a54a0c42c28faa984e115fb4c2d5bf2208f77d1961002df8576f8"
+dependencies = [
+ "pathdiff",
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "openssl"
+version = "0.10.55"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "345df152bc43501c5eb9e4654ff05f794effb78d4efe3d53abc158baddc0703d"
+dependencies = [
+ "bitflags",
+ "cfg-if",
+ "foreign-types",
+ "libc",
+ "once_cell",
+ "openssl-macros",
+ "openssl-sys",
+]
+
+[[package]]
+name = "openssl-macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "openssl-probe"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
+
+[[package]]
+name = "openssl-sys"
+version = "0.9.90"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "374533b0e45f3a7ced10fcaeccca020e66656bc03dac384f852e4e5a7a8104a6"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "option-ext"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d"
+
+[[package]]
+name = "os_info"
+version = "3.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "006e42d5b888366f1880eda20371fedde764ed2213dc8496f49622fa0c99cd5e"
+dependencies = [
+ "log",
+ "serde",
+ "winapi",
+]
+
+[[package]]
+name = "os_pipe"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a53dbb20faf34b16087a931834cba2d7a73cc74af2b7ef345a4c8324e2409a12"
+dependencies = [
+ "libc",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "overload"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
+
+[[package]]
+name = "pango"
+version = "0.15.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "22e4045548659aee5313bde6c582b0d83a627b7904dd20dc2d9ef0895d414e4f"
+dependencies = [
+ "bitflags",
+ "glib",
+ "libc",
+ "once_cell",
+ "pango-sys",
+]
+
+[[package]]
+name = "pango-sys"
+version = "0.15.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2a00081cde4661982ed91d80ef437c20eacaf6aa1a5962c0279ae194662c3aa"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps 6.0.4",
+]
+
+[[package]]
+name = "parking_lot"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+dependencies = [
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall 0.2.16",
+ "smallvec",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "paste"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f746c4065a8fa3fe23974dd82f15431cc8d40779821001404d10d2e79ca7d79"
+
+[[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.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e"
+
+[[package]]
+name = "phf"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12"
+dependencies = [
+ "phf_macros 0.8.0",
+ "phf_shared 0.8.0",
+ "proc-macro-hack",
+]
+
+[[package]]
+name = "phf"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259"
+dependencies = [
+ "phf_macros 0.10.0",
+ "phf_shared 0.10.0",
+ "proc-macro-hack",
+]
+
+[[package]]
+name = "phf_codegen"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cbffee61585b0411840d3ece935cce9cb6321f01c45477d30066498cd5e1a815"
+dependencies = [
+ "phf_generator 0.8.0",
+ "phf_shared 0.8.0",
+]
+
+[[package]]
+name = "phf_generator"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526"
+dependencies = [
+ "phf_shared 0.8.0",
+ "rand 0.7.3",
+]
+
+[[package]]
+name = "phf_generator"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6"
+dependencies = [
+ "phf_shared 0.10.0",
+ "rand 0.8.5",
+]
+
+[[package]]
+name = "phf_macros"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f6fde18ff429ffc8fe78e2bf7f8b7a5a5a6e2a8b58bc5a9ac69198bbda9189c"
+dependencies = [
+ "phf_generator 0.8.0",
+ "phf_shared 0.8.0",
+ "proc-macro-hack",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "phf_macros"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "58fdf3184dd560f160dd73922bea2d5cd6e8f064bf4b13110abd81b03697b4e0"
+dependencies = [
+ "phf_generator 0.10.0",
+ "phf_shared 0.10.0",
+ "proc-macro-hack",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7"
+dependencies = [
+ "siphasher",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096"
+dependencies = [
+ "siphasher",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160"
+
+[[package]]
+name = "plist"
+version = "1.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9bd9647b268a3d3e14ff09c23201133a62589c658db02bb7388c7246aafe0590"
+dependencies = [
+ "base64 0.21.0",
+ "indexmap 1.9.3",
+ "line-wrap",
+ "quick-xml 0.28.2",
+ "serde",
+ "time 0.3.20",
+]
+
+[[package]]
+name = "png"
+version = "0.17.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aaeebc51f9e7d2c150d3f3bfeb667f2aa985db5ef1e3d212847bdedb488beeaa"
+dependencies = [
+ "bitflags",
+ "crc32fast",
+ "fdeflate",
+ "flate2",
+ "miniz_oxide 0.7.1",
+]
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+
+[[package]]
+name = "precomputed-hash"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
+
+[[package]]
+name = "proc-macro-crate"
+version = "1.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919"
+dependencies = [
+ "once_cell",
+ "toml_edit",
+]
+
+[[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 1.0.109",
+ "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-macro-hack"
+version = "0.5.20+deprecated"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.56"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quick-xml"
+version = "0.23.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "11bafc859c6815fbaffbbbf4229ecb767ac913fecb27f9ad4343662e9ef099ea"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "quick-xml"
+version = "0.28.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ce5e73202a820a31f8a0ee32ada5e21029c81fd9e3ebf668a40832e4219d9d1"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rand"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
+dependencies = [
+ "getrandom 0.1.16",
+ "libc",
+ "rand_chacha 0.2.2",
+ "rand_core 0.5.1",
+ "rand_hc",
+ "rand_pcg",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "libc",
+ "rand_chacha 0.3.1",
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402"
+dependencies = [
+ "ppv-lite86",
+ "rand_core 0.5.1",
+]
+
+[[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.4",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
+dependencies = [
+ "getrandom 0.1.16",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom 0.2.9",
+]
+
+[[package]]
+name = "rand_hc"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
+dependencies = [
+ "rand_core 0.5.1",
+]
+
+[[package]]
+name = "rand_pcg"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429"
+dependencies = [
+ "rand_core 0.5.1",
+]
+
+[[package]]
+name = "raw-window-handle"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9"
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "redox_users"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b"
+dependencies = [
+ "getrandom 0.2.9",
+ "redox_syscall 0.2.16",
+ "thiserror",
+]
+
+[[package]]
+name = "regex"
+version = "1.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b1f693b24f6ac912f4893ef08244d70b6067480d2f1a46e950c9691e6749d1d"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
+dependencies = [
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
+
+[[package]]
+name = "reqwest"
+version = "0.11.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cde824a14b7c14f85caff81225f411faacc04a2013f41670f41443742b1c1c55"
+dependencies = [
+ "base64 0.21.0",
+ "bytes",
+ "encoding_rs",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "hyper",
+ "hyper-tls",
+ "ipnet",
+ "js-sys",
+ "log",
+ "mime",
+ "native-tls",
+ "once_cell",
+ "percent-encoding",
+ "pin-project-lite",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "tokio",
+ "tokio-native-tls",
+ "tower-service",
+ "url",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+ "winreg 0.10.1",
+]
+
+[[package]]
+name = "rfd"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0149778bd99b6959285b0933288206090c50e2327f47a9c463bfdbf45c8823ea"
+dependencies = [
+ "block",
+ "dispatch",
+ "glib-sys",
+ "gobject-sys",
+ "gtk-sys",
+ "js-sys",
+ "lazy_static",
+ "log",
+ "objc",
+ "objc-foundation",
+ "objc_id",
+ "raw-window-handle",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+ "windows 0.37.0",
+]
+
+[[package]]
+name = "rustc_version"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
+dependencies = [
+ "semver",
+]
+
+[[package]]
+name = "rustix"
+version = "0.37.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85597d61f83914ddeba6a47b3b8ffe7365107221c2e557ed94426489fefb5f77"
+dependencies = [
+ "bitflags",
+ "errno",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "rustversion"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06"
+
+[[package]]
+name = "ryu"
+version = "1.0.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041"
+
+[[package]]
+name = "safemem"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072"
+
+[[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 = "schannel"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88"
+dependencies = [
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "scoped-tls"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294"
+
+[[package]]
+name = "scopeguard"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+
+[[package]]
+name = "scratch"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1792db035ce95be60c3f8853017b3999209281c24e2ba5bc8e59bf97a0c590c1"
+
+[[package]]
+name = "security-framework"
+version = "2.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fc758eb7bffce5b308734e9b0c1468893cae9ff70ebf13e7090be8dcbcc83a8"
+dependencies = [
+ "bitflags",
+ "core-foundation",
+ "core-foundation-sys",
+ "libc",
+ "security-framework-sys",
+]
+
+[[package]]
+name = "security-framework-sys"
+version = "2.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f51d0c0d83bec45f16480d0ce0058397a69e48fcdc52d1dc8855fb68acbd31a7"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "selectors"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df320f1889ac4ba6bc0cdc9c9af7af4bd64bb927bccdf32d81140dc1f9be12fe"
+dependencies = [
+ "bitflags",
+ "cssparser",
+ "derive_more",
+ "fxhash",
+ "log",
+ "matches",
+ "phf 0.8.0",
+ "phf_codegen",
+ "precomputed-hash",
+ "servo_arc",
+ "smallvec",
+ "thin-slice",
+]
+
+[[package]]
+name = "semver"
+version = "1.0.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0293b4b29daaf487284529cc2f5675b8e57c61f70167ba415a463651fd6a918"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.160"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb2f3770c8bce3bcda7e149193a069a0f4365bda1fa5cd88e03bca26afc1216c"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.160"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "291a097c63d8497e00160b166a967a4a79c64f3facdd01cbd7502231688d77df"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.96"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1"
+dependencies = [
+ "itoa 1.0.6",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_qs"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0431a35568651e363364210c91983c1da5eb29404d9f0928b67d4ebcfa7d330c"
+dependencies = [
+ "percent-encoding",
+ "serde",
+ "thiserror",
+]
+
+[[package]]
+name = "serde_repr"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bcec881020c684085e55a25f7fd888954d56609ef363479dc5a1305eb0d40cab"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "serde_spanned"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0efd8caf556a6cebd3b285caf480045fcc1ac04f6bd786b09a6f11af30c4fcf4"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde_urlencoded"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
+dependencies = [
+ "form_urlencoded",
+ "itoa 1.0.6",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_with"
+version = "1.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "678b5a069e50bf00ecd22d0cd8ddf7c236f68581b03db652061ed5eb13a312ff"
+dependencies = [
+ "serde",
+ "serde_with_macros",
+]
+
+[[package]]
+name = "serde_with_macros"
+version = "1.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e182d6ec6f05393cc0e5ed1bf81ad6db3a8feedf8ee515ecdd369809bcce8082"
+dependencies = [
+ "darling",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "serde_yaml"
+version = "0.9.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "452e67b9c20c37fa79df53201dc03839651086ed9bbe92b3ca585ca9fdaa7d85"
+dependencies = [
+ "indexmap 2.0.0",
+ "itoa 1.0.6",
+ "ryu",
+ "serde",
+ "unsafe-libyaml",
+]
+
+[[package]]
+name = "serialize-to-javascript"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c9823f2d3b6a81d98228151fdeaf848206a7855a7a042bbf9bf870449a66cafb"
+dependencies = [
+ "serde",
+ "serde_json",
+ "serialize-to-javascript-impl",
+]
+
+[[package]]
+name = "serialize-to-javascript-impl"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "74064874e9f6a15f04c1f3cb627902d0e6b410abbf36668afa873c61889f1763"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "servo_arc"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d98238b800e0d1576d8b6e3de32827c2d74bee68bb97748dcf5071fb53965432"
+dependencies = [
+ "nodrop",
+ "stable_deref_trait",
+]
+
+[[package]]
+name = "sha2"
+version = "0.10.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "sharded-slab"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31"
+dependencies = [
+ "lazy_static",
+]
+
+[[package]]
+name = "shared_child"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0d94659ad3c2137fef23ae75b03d5241d633f8acded53d672decfa0e6e0caef"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "simd-adler32"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "238abfbb77c1915110ad968465608b68e869e0772622c9656714e73e5a1a522f"
+
+[[package]]
+name = "siphasher"
+version = "0.3.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de"
+
+[[package]]
+name = "slab"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
+
+[[package]]
+name = "socket2"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "soup2"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2b4d76501d8ba387cf0fefbe055c3e0a59891d09f0f995ae4e4b16f6b60f3c0"
+dependencies = [
+ "bitflags",
+ "gio",
+ "glib",
+ "libc",
+ "once_cell",
+ "soup2-sys",
+]
+
+[[package]]
+name = "soup2-sys"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "009ef427103fcb17f802871647a7fa6c60cbb654b4c4e4c0ac60a31c5f6dc9cf"
+dependencies = [
+ "bitflags",
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps 5.0.0",
+]
+
+[[package]]
+name = "stable_deref_trait"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
+
+[[package]]
+name = "state"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dbe866e1e51e8260c9eed836a042a5e7f6726bb2b411dffeaa712e19c388f23b"
+dependencies = [
+ "loom",
+]
+
+[[package]]
+name = "string_cache"
+version = "0.8.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b"
+dependencies = [
+ "new_debug_unreachable",
+ "once_cell",
+ "parking_lot",
+ "phf_shared 0.10.0",
+ "precomputed-hash",
+ "serde",
+]
+
+[[package]]
+name = "string_cache_codegen"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6bb30289b722be4ff74a408c3cc27edeaad656e06cb1fe8fa9231fa59c728988"
+dependencies = [
+ "phf_generator 0.10.0",
+ "phf_shared 0.10.0",
+ "proc-macro2",
+ "quote",
+]
+
+[[package]]
+name = "strip-ansi-escapes"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "011cbb39cf7c1f62871aea3cc46e5817b0937b49e9447370c93cacbe93a766d8"
+dependencies = [
+ "vte",
+]
+
+[[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.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a34fcf3e8b60f57e6a14301a2e916d323af98b0ea63c599441eec8558660c822"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "system-deps"
+version = "5.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "18db855554db7bd0e73e06cf7ba3df39f97812cb11d3f75e71c39bf45171797e"
+dependencies = [
+ "cfg-expr 0.9.1",
+ "heck 0.3.3",
+ "pkg-config",
+ "toml 0.5.11",
+ "version-compare 0.0.11",
+]
+
+[[package]]
+name = "system-deps"
+version = "6.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "555fc8147af6256f3931a36bb83ad0023240ce9cf2b319dec8236fd1f220b05f"
+dependencies = [
+ "cfg-expr 0.14.0",
+ "heck 0.4.1",
+ "pkg-config",
+ "toml 0.7.3",
+ "version-compare 0.1.1",
+]
+
+[[package]]
+name = "tao"
+version = "0.15.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac8e6399427c8494f9849b58694754d7cc741293348a6836b6c8d2c5aa82d8e6"
+dependencies = [
+ "bitflags",
+ "cairo-rs",
+ "cc",
+ "cocoa",
+ "core-foundation",
+ "core-graphics",
+ "crossbeam-channel",
+ "dirs-next",
+ "dispatch",
+ "gdk",
+ "gdk-pixbuf",
+ "gdk-sys",
+ "gdkx11-sys",
+ "gio",
+ "glib",
+ "glib-sys",
+ "gtk",
+ "image",
+ "instant",
+ "jni",
+ "lazy_static",
+ "libappindicator",
+ "libc",
+ "log",
+ "ndk",
+ "ndk-context",
+ "ndk-sys",
+ "objc",
+ "once_cell",
+ "parking_lot",
+ "paste",
+ "png",
+ "raw-window-handle",
+ "scopeguard",
+ "serde",
+ "unicode-segmentation",
+ "uuid 1.3.1",
+ "windows 0.39.0",
+ "windows-implement",
+ "x11-dl",
+]
+
+[[package]]
+name = "tar"
+version = "0.4.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b55807c0344e1e6c04d7c965f5289c39a8d94ae23ed5c0b57aabac549f871c6"
+dependencies = [
+ "filetime",
+ "libc",
+ "xattr",
+]
+
+[[package]]
+name = "tauri"
+version = "1.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fe7e0f1d535e7cbbbab43c82be4fc992b84f9156c16c160955617e0260ebc449"
+dependencies = [
+ "anyhow",
+ "attohttpc",
+ "base64 0.13.1",
+ "cocoa",
+ "dirs-next",
+ "embed_plist",
+ "encoding_rs",
+ "flate2",
+ "futures-util",
+ "glib",
+ "glob",
+ "gtk",
+ "heck 0.4.1",
+ "http",
+ "ico",
+ "ignore",
+ "infer 0.9.0",
+ "minisign-verify",
+ "notify-rust",
+ "objc",
+ "once_cell",
+ "open",
+ "os_info",
+ "os_pipe",
+ "percent-encoding",
+ "rand 0.8.5",
+ "raw-window-handle",
+ "regex",
+ "rfd",
+ "semver",
+ "serde",
+ "serde_json",
+ "serde_repr",
+ "serialize-to-javascript",
+ "shared_child",
+ "state",
+ "tar",
+ "tauri-macros",
+ "tauri-runtime",
+ "tauri-runtime-wry",
+ "tauri-utils",
+ "tempfile",
+ "thiserror",
+ "time 0.3.20",
+ "tokio",
+ "url",
+ "uuid 1.3.1",
+ "webkit2gtk",
+ "webview2-com",
+ "windows 0.39.0",
+ "zip",
+]
+
+[[package]]
+name = "tauri-build"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8807c85d656b2b93927c19fe5a5f1f1f348f96c2de8b90763b3c2d561511f9b4"
+dependencies = [
+ "anyhow",
+ "cargo_toml",
+ "heck 0.4.1",
+ "json-patch",
+ "semver",
+ "serde_json",
+ "tauri-utils",
+ "winres",
+]
+
+[[package]]
+name = "tauri-codegen"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14388d484b6b1b5dc0f6a7d6cc6433b3b230bec85eaa576adcdf3f9fafa49251"
+dependencies = [
+ "base64 0.13.1",
+ "brotli",
+ "ico",
+ "json-patch",
+ "plist",
+ "png",
+ "proc-macro2",
+ "quote",
+ "regex",
+ "semver",
+ "serde",
+ "serde_json",
+ "sha2",
+ "tauri-utils",
+ "thiserror",
+ "time 0.3.20",
+ "uuid 1.3.1",
+ "walkdir",
+]
+
+[[package]]
+name = "tauri-macros"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "069319e5ecbe653a799b94b0690d9f9bf5d00f7b1d3989aa331c524d4e354075"
+dependencies = [
+ "heck 0.4.1",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "tauri-codegen",
+ "tauri-utils",
+]
+
+[[package]]
+name = "tauri-plugin-deep-link"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "33a3ae55bcfe692e5361edc4708bd9f415270cc02e1cdba8ab7768566208b4e2"
+dependencies = [
+ "dirs",
+ "interprocess",
+ "log",
+ "objc2",
+ "once_cell",
+ "tauri-utils",
+ "windows-sys 0.48.0",
+ "winreg 0.50.0",
+]
+
+[[package]]
+name = "tauri-plugin-log"
+version = "0.1.0"
+source = "git+https://github.com/tauri-apps/plugins-workspace?branch=dev#cea1d4f7b54b94354e8100daf804b810c680efd7"
+dependencies = [
+ "byte-unit",
+ "fern",
+ "log",
+ "serde",
+ "serde_json",
+ "serde_repr",
+ "tauri",
+ "time 0.3.20",
+]
+
+[[package]]
+name = "tauri-plugin-store"
+version = "0.1.0"
+source = "git+https://github.com/tauri-apps/plugins-workspace?branch=dev#cea1d4f7b54b94354e8100daf804b810c680efd7"
+dependencies = [
+ "log",
+ "serde",
+ "serde_json",
+ "tauri",
+ "thiserror",
+]
+
+[[package]]
+name = "tauri-runtime"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c507d954d08ac8705d235bc70ec6975b9054fb95ff7823af72dbb04186596f3b"
+dependencies = [
+ "gtk",
+ "http",
+ "http-range",
+ "rand 0.8.5",
+ "raw-window-handle",
+ "serde",
+ "serde_json",
+ "tauri-utils",
+ "thiserror",
+ "uuid 1.3.1",
+ "webview2-com",
+ "windows 0.39.0",
+]
+
+[[package]]
+name = "tauri-runtime-wry"
+version = "0.12.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "36b1c5764a41a13176a4599b5b7bd0881bea7d94dfe45e1e755f789b98317e30"
+dependencies = [
+ "cocoa",
+ "gtk",
+ "percent-encoding",
+ "rand 0.8.5",
+ "raw-window-handle",
+ "tauri-runtime",
+ "tauri-utils",
+ "uuid 1.3.1",
+ "webkit2gtk",
+ "webview2-com",
+ "windows 0.39.0",
+ "wry",
+]
+
+[[package]]
+name = "tauri-utils"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5abbc109a6eb45127956ffcc26ef0e875d160150ac16cfa45d26a6b2871686f1"
+dependencies = [
+ "brotli",
+ "ctor",
+ "glob",
+ "heck 0.4.1",
+ "html5ever",
+ "infer 0.7.0",
+ "json-patch",
+ "kuchiki",
+ "memchr",
+ "phf 0.10.1",
+ "proc-macro2",
+ "quote",
+ "semver",
+ "serde",
+ "serde_json",
+ "serde_with",
+ "thiserror",
+ "url",
+ "walkdir",
+ "windows 0.39.0",
+]
+
+[[package]]
+name = "tauri-winrt-notification"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4f5bff1d532fead7c43324a0fa33643b8621a47ce2944a633be4cb6c0240898f"
+dependencies = [
+ "quick-xml 0.23.1",
+ "windows 0.39.0",
+]
+
+[[package]]
+name = "tempfile"
+version = "3.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998"
+dependencies = [
+ "cfg-if",
+ "fastrand",
+ "redox_syscall 0.3.5",
+ "rustix",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "tendril"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0"
+dependencies = [
+ "futf",
+ "mac",
+ "utf-8",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "thin-slice"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c"
+
+[[package]]
+name = "thiserror"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "thread_local"
+version = "1.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+]
+
+[[package]]
+name = "time"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a"
+dependencies = [
+ "libc",
+ "wasi 0.10.0+wasi-snapshot-preview1",
+ "winapi",
+]
+
+[[package]]
+name = "time"
+version = "0.3.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd0cbfecb4d19b5ea75bb31ad904eb5b9fa13f21079c3b92017ebdf4999a5890"
+dependencies = [
+ "itoa 1.0.6",
+ "libc",
+ "num_threads",
+ "serde",
+ "time-core",
+ "time-macros",
+]
+
+[[package]]
+name = "time-core"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd"
+
+[[package]]
+name = "time-macros"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd80a657e71da814b8e5d60d3374fc6d35045062245d80224748ae522dd76f36"
+dependencies = [
+ "time-core",
+]
+
+[[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.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+[[package]]
+name = "to_method"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c7c4ceeeca15c8384bbc3e011dbd8fccb7f068a440b752b7d9b32ceb0ca0e2e8"
+
+[[package]]
+name = "tokio"
+version = "1.27.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d0de47a4eecbe11f498978a9b29d792f0d2692d1dd003650c24c76510e3bc001"
+dependencies = [
+ "autocfg",
+ "bytes",
+ "libc",
+ "mio",
+ "num_cpus",
+ "parking_lot",
+ "pin-project-lite",
+ "socket2",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "tokio-native-tls"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2"
+dependencies = [
+ "native-tls",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.7.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-sink",
+ "pin-project-lite",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "toml"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b403acf6f2bb0859c93c7f0d967cb4a75a7ac552100f9322faf64dc047669b21"
+dependencies = [
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "toml_edit",
+]
+
+[[package]]
+name = "toml_datetime"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3ab8ed2edee10b50132aed5f331333428b011c99402b5a534154ed15746f9622"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.19.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "239410c8609e8125456927e6707163a3b1fdb40561e4b803bc041f466ccfdc13"
+dependencies = [
+ "indexmap 1.9.3",
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "winnow",
+]
+
+[[package]]
+name = "tower-service"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
+
+[[package]]
+name = "tracing"
+version = "0.1.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
+dependencies = [
+ "cfg-if",
+ "pin-project-lite",
+ "tracing-attributes",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-attributes"
+version = "0.1.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a"
+dependencies = [
+ "once_cell",
+ "valuable",
+]
+
+[[package]]
+name = "tracing-log"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922"
+dependencies = [
+ "lazy_static",
+ "log",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-subscriber"
+version = "0.3.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a6176eae26dd70d0c919749377897b54a9276bd7061339665dd68777926b5a70"
+dependencies = [
+ "matchers",
+ "nu-ansi-term",
+ "once_cell",
+ "regex",
+ "sharded-slab",
+ "smallvec",
+ "thread_local",
+ "tracing",
+ "tracing-core",
+ "tracing-log",
+]
+
+[[package]]
+name = "treediff"
+version = "3.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "761e8d5ad7ce14bb82b7e61ccc0ca961005a275a060b9644a2431aa11553c2ff"
+dependencies = [
+ "serde_json",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
+
+[[package]]
+name = "ts-rs"
+version = "6.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4added4070a4fdf9df03457206cd2e4b12417c8560a2954d91ffcbe60177a56a"
+dependencies = [
+ "chrono",
+ "thiserror",
+ "ts-rs-macros",
+]
+
+[[package]]
+name = "ts-rs-macros"
+version = "6.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f807fdb3151fee75df7485b901a89624358cd07a67a8fb1a5831bf5a07681ff"
+dependencies = [
+ "Inflector",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "termcolor",
+]
+
+[[package]]
+name = "typenum"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba"
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+
+[[package]]
+name = "unsafe-libyaml"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1865806a559042e51ab5414598446a5871b561d21b6764f2eabb0dd481d880a6"
+
+[[package]]
+name = "url"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "percent-encoding",
+ "serde",
+]
+
+[[package]]
+name = "utf-8"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9"
+
+[[package]]
+name = "utf8-width"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5190c9442dcdaf0ddd50f37420417d219ae5261bbf5db120d0f9bab996c9cba1"
+
+[[package]]
+name = "utf8parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
+
+[[package]]
+name = "uuid"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7"
+
+[[package]]
+name = "uuid"
+version = "1.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b55a3fef2a1e3b3a00ce878640918820d3c51081576ac657d23af9fc7928fdb"
+dependencies = [
+ "getrandom 0.2.9",
+]
+
+[[package]]
+name = "valuable"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
+
+[[package]]
+name = "value-bag"
+version = "1.0.0-alpha.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2209b78d1249f7e6f3293657c9779fe31ced465df091bbd433a1cf88e916ec55"
+dependencies = [
+ "ctor",
+ "version_check",
+]
+
+[[package]]
+name = "vcpkg"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+
+[[package]]
+name = "version-compare"
+version = "0.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1c18c859eead79d8b95d09e4678566e8d70105c4e7b251f707a03df32442661b"
+
+[[package]]
+name = "version-compare"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "579a42fc0b8e0c63b76519a339be31bed574929511fa53c1a3acae26eb258f29"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "vte"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6cbce692ab4ca2f1f3047fcf732430249c0e971bfdd2b234cf2c47ad93af5983"
+dependencies = [
+ "arrayvec",
+ "utf8parse",
+ "vte_generate_state_changes",
+]
+
+[[package]]
+name = "vte_generate_state_changes"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d257817081c7dffcdbab24b9e62d2def62e2ff7d00b1c20062551e6cccc145ff"
+dependencies = [
+ "proc-macro2",
+ "quote",
+]
+
+[[package]]
+name = "walkdir"
+version = "2.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698"
+dependencies = [
+ "same-file",
+ "winapi-util",
+]
+
+[[package]]
+name = "want"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e"
+dependencies = [
+ "try-lock",
+]
+
+[[package]]
+name = "wasi"
+version = "0.9.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
+
+[[package]]
+name = "wasi"
+version = "0.10.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.34"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f219e0d211ba40266969f6dbdd90636da12f75bee4fc9d6c23d1260dadb51454"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d"
+
+[[package]]
+name = "web-sys"
+version = "0.3.61"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "webkit2gtk"
+version = "0.18.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8f859735e4a452aeb28c6c56a852967a8a76c8eb1cc32dbf931ad28a13d6370"
+dependencies = [
+ "bitflags",
+ "cairo-rs",
+ "gdk",
+ "gdk-sys",
+ "gio",
+ "gio-sys",
+ "glib",
+ "glib-sys",
+ "gobject-sys",
+ "gtk",
+ "gtk-sys",
+ "javascriptcore-rs",
+ "libc",
+ "once_cell",
+ "soup2",
+ "webkit2gtk-sys",
+]
+
+[[package]]
+name = "webkit2gtk-sys"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d76ca6ecc47aeba01ec61e480139dda143796abcae6f83bcddf50d6b5b1dcf3"
+dependencies = [
+ "atk-sys",
+ "bitflags",
+ "cairo-sys-rs",
+ "gdk-pixbuf-sys",
+ "gdk-sys",
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "gtk-sys",
+ "javascriptcore-rs-sys",
+ "libc",
+ "pango-sys",
+ "pkg-config",
+ "soup2-sys",
+ "system-deps 6.0.4",
+]
+
+[[package]]
+name = "webview2-com"
+version = "0.19.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4a769c9f1a64a8734bde70caafac2b96cada12cd4aefa49196b3a386b8b4178"
+dependencies = [
+ "webview2-com-macros",
+ "webview2-com-sys",
+ "windows 0.39.0",
+ "windows-implement",
+]
+
+[[package]]
+name = "webview2-com-macros"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eaebe196c01691db62e9e4ca52c5ef1e4fd837dcae27dae3ada599b5a8fd05ac"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "webview2-com-sys"
+version = "0.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aac48ef20ddf657755fdcda8dfed2a7b4fc7e4581acce6fe9b88c3d64f29dee7"
+dependencies = [
+ "regex",
+ "serde",
+ "serde_json",
+ "thiserror",
+ "windows 0.39.0",
+ "windows-bindgen",
+ "windows-metadata",
+]
+
+[[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"
+
+[[package]]
+name = "window-vibrancy"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2f762d9cc392fb85e6b1b5eed1ef13d73fed5149a5cbb017a7137497d14ef612"
+dependencies = [
+ "cocoa",
+ "objc",
+ "raw-window-handle",
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "windows"
+version = "0.37.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57b543186b344cc61c85b5aab0d2e3adf4e0f99bc076eff9aa5927bcc0b8a647"
+dependencies = [
+ "windows_aarch64_msvc 0.37.0",
+ "windows_i686_gnu 0.37.0",
+ "windows_i686_msvc 0.37.0",
+ "windows_x86_64_gnu 0.37.0",
+ "windows_x86_64_msvc 0.37.0",
+]
+
+[[package]]
+name = "windows"
+version = "0.39.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1c4bd0a50ac6020f65184721f758dba47bb9fbc2133df715ec74a237b26794a"
+dependencies = [
+ "windows-implement",
+ "windows_aarch64_msvc 0.39.0",
+ "windows_i686_gnu 0.39.0",
+ "windows_i686_msvc 0.39.0",
+ "windows_x86_64_gnu 0.39.0",
+ "windows_x86_64_msvc 0.39.0",
+]
+
+[[package]]
+name = "windows"
+version = "0.44.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e745dab35a0c4c77aa3ce42d595e13d2003d6902d6b08c9ef5fc326d08da12b"
+dependencies = [
+ "windows-targets 0.42.2",
+]
+
+[[package]]
+name = "windows"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f"
+dependencies = [
+ "windows-targets 0.48.0",
+]
+
+[[package]]
+name = "windows-bindgen"
+version = "0.39.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68003dbd0e38abc0fb85b939240f4bce37c43a5981d3df37ccbaaa981b47cb41"
+dependencies = [
+ "windows-metadata",
+ "windows-tokens",
+]
+
+[[package]]
+name = "windows-implement"
+version = "0.39.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba01f98f509cb5dc05f4e5fc95e535f78260f15fea8fe1a8abdd08f774f1cee7"
+dependencies = [
+ "syn 1.0.109",
+ "windows-tokens",
+]
+
+[[package]]
+name = "windows-metadata"
+version = "0.39.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ee5e275231f07c6e240d14f34e1b635bf1faa1c76c57cfd59a5cdb9848e4278"
+
+[[package]]
+name = "windows-sys"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
+dependencies = [
+ "windows-targets 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets 0.48.0",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5"
+dependencies = [
+ "windows_aarch64_gnullvm 0.48.0",
+ "windows_aarch64_msvc 0.48.0",
+ "windows_i686_gnu 0.48.0",
+ "windows_i686_msvc 0.48.0",
+ "windows_x86_64_gnu 0.48.0",
+ "windows_x86_64_gnullvm 0.48.0",
+ "windows_x86_64_msvc 0.48.0",
+]
+
+[[package]]
+name = "windows-tokens"
+version = "0.39.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f838de2fe15fe6bac988e74b798f26499a8b21a9d97edec321e79b28d1d7f597"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.37.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2623277cb2d1c216ba3b578c0f3cf9cdebeddb6e66b1b218bb33596ea7769c3a"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.39.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec7711666096bd4096ffa835238905bb33fb87267910e154b18b44eaabb340f2"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.37.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3925fd0b0b804730d44d4b6278c50f9699703ec49bcd628020f46f4ba07d9e1"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.39.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "763fc57100a5f7042e3057e7e8d9bdd7860d330070251a73d003563a3bb49e1b"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.37.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce907ac74fe331b524c1298683efbf598bb031bc84d5e274db2083696d07c57c"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.39.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7bc7cbfe58828921e10a9f446fcaaf649204dcfe6c1ddd712c5eebae6bda1106"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.37.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2babfba0828f2e6b32457d5341427dcbb577ceef556273229959ac23a10af33d"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.39.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6868c165637d653ae1e8dc4d82c25d4f97dd6605eaa8d784b5c6e0ab2a252b65"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.37.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4dd6dc7df2d84cf7b33822ed5b86318fb1781948e9663bacd047fc9dd52259d"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.39.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e4d40883ae9cae962787ca76ba76390ffa29214667a111db9e0a1ad8377e809"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
+
+[[package]]
+name = "winnow"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae8970b36c66498d8ff1d66685dc86b91b29db0c7739899012f63a63814b4b28"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "winreg"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winreg"
+version = "0.50.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1"
+dependencies = [
+ "cfg-if",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "winres"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b68db261ef59e9e52806f688020631e987592bd83619edccda9c47d42cde4f6c"
+dependencies = [
+ "toml 0.5.11",
+]
+
+[[package]]
+name = "wry"
+version = "0.23.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c1ad8e2424f554cc5bdebe8aa374ef5b433feff817aebabca0389961fc7ef98"
+dependencies = [
+ "base64 0.13.1",
+ "block",
+ "cocoa",
+ "core-graphics",
+ "crossbeam-channel",
+ "dunce",
+ "gdk",
+ "gio",
+ "glib",
+ "gtk",
+ "html5ever",
+ "http",
+ "kuchiki",
+ "libc",
+ "log",
+ "objc",
+ "objc_id",
+ "once_cell",
+ "serde",
+ "serde_json",
+ "sha2",
+ "soup2",
+ "tao",
+ "thiserror",
+ "url",
+ "webkit2gtk",
+ "webkit2gtk-sys",
+ "webview2-com",
+ "windows 0.39.0",
+ "windows-implement",
+]
+
+[[package]]
+name = "x11"
+version = "2.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "502da5464ccd04011667b11c435cb992822c2c0dbde1770c988480d312a0db2e"
+dependencies = [
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "x11-dl"
+version = "2.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f"
+dependencies = [
+ "libc",
+ "once_cell",
+ "pkg-config",
+]
+
+[[package]]
+name = "xattr"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d1526bbe5aaeb5eb06885f4d987bcdfa5e23187055de9b83fe00156a821fabc"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "zip"
+version = "0.6.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "760394e246e4c28189f19d488c058bf16f564016aefac5d32bb1f3b51d5e9261"
+dependencies = [
+ "byteorder",
+ "crc32fast",
+ "crossbeam-utils",
+]
diff --git a/nixpkgs/pkgs/development/tools/devpod/add-tauri-updater-feature.patch b/nixpkgs/pkgs/development/tools/devpod/add-tauri-updater-feature.patch
new file mode 100644
index 000000000000..3fc7ac991099
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/devpod/add-tauri-updater-feature.patch
@@ -0,0 +1,13 @@
+diff --git a/Cargo.toml b/Cargo.toml
+index 03f64e53..9e2ddcb6 100644
+--- a/Cargo.toml
++++ b/Cargo.toml
+@@ -15,6 +15,7 @@ serde_json = "1.0"
+ serde = { version = "1.0", features = ["derive"] }
+ # Tauri
+ tauri = { version = "1.2.4", features = [
++        "updater",
+         "process-relaunch",
+         "window-close",
+         "notification-all",
+
diff --git a/nixpkgs/pkgs/development/tools/devpod/default.nix b/nixpkgs/pkgs/development/tools/devpod/default.nix
new file mode 100644
index 000000000000..e4991f04e8ea
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/devpod/default.nix
@@ -0,0 +1,186 @@
+{ lib
+, buildGoModule
+, copyDesktopItems
+, darwin
+, desktopToDarwinBundle
+, fetchFromGitHub
+, fetchYarnDeps
+, gtk3
+, installShellFiles
+, jq
+, libayatana-appindicator
+, libsoup
+, makeDesktopItem
+, mkYarnPackage
+, openssl
+, pkg-config
+, rust
+, rustPlatform
+, stdenv
+, testers
+, webkitgtk
+}:
+
+let
+  pname = "devpod";
+  version = "0.4.2";
+
+  src = fetchFromGitHub {
+    owner = "loft-sh";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-e9sa9LniG5fj3S+x9T91v6ILPI0CD2y3QnZxXcKy6Ik=";
+  };
+
+  meta = with lib; {
+    description = "Codespaces but open-source, client-only and unopinionated: Works with any IDE and lets you use any cloud, kubernetes or just localhost docker";
+    homepage = "https://devpod.sh";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ maxbrunet ];
+  };
+in
+rec {
+  devpod = buildGoModule {
+    inherit version src pname meta;
+
+    vendorHash = null;
+
+    CGO_ENABLED = 0;
+
+    ldflags = [
+      "-X github.com/loft-sh/devpod/pkg/version.version=v${version}"
+    ];
+
+    excludedPackages = [ "./e2e" ];
+
+    nativeBuildInputs = [ installShellFiles ];
+
+    postInstall = ''
+      $out/bin/devpod completion bash >devpod.bash
+      $out/bin/devpod completion fish >devpod.fish
+      $out/bin/devpod completion zsh >devpod.zsh
+      installShellCompletion devpod.{bash,fish,zsh}
+    '';
+
+    passthru.tests.version = testers.testVersion {
+      package = devpod;
+      command = "devpod version";
+      version = "v${version}";
+    };
+  };
+
+  devpod-desktop =
+    let
+      frontend-build = mkYarnPackage {
+        inherit version;
+        pname = "devpod-frontend";
+
+        src = "${src}/desktop";
+
+        offlineCache = fetchYarnDeps {
+          yarnLock = "${src}/desktop/yarn.lock";
+          sha256 = "sha256-Nezh2nGhrxmNLLqZVugJqr895CIa2QWE3CNLjkjrEEs=";
+        };
+
+        packageJSON = ./package.json;
+
+        buildPhase = ''
+          export HOME=$(mktemp -d)
+          yarn --offline run build
+
+          cp -r deps/devpod/dist $out
+        '';
+
+        doDist = false;
+        dontInstall = true;
+      };
+
+      rustTargetPlatformSpec = rust.toRustTargetSpec stdenv.hostPlatform;
+    in
+    rustPlatform.buildRustPackage {
+      inherit version src;
+      pname = "devpod-desktop";
+
+      sourceRoot = "${src.name}/desktop/src-tauri";
+
+      cargoLock = {
+        lockFile = ./Cargo.lock;
+        outputHashes = {
+          "tauri-plugin-log-0.1.0" = "sha256-Ei0j7UNzsK45c8fEV8Yw3pyf4oSG5EYgLB4BRfafq6A=";
+        };
+      };
+
+      # Workaround:
+      #   The `tauri` dependency features on the `Cargo.toml` file does not match the allowlist defined under `tauri.conf.json`.
+      #   Please run `tauri dev` or `tauri build` or add the `updater` feature.
+      # Upstream is not interested in fixing that: https://github.com/loft-sh/devpod/pull/648
+      patches = [ ./add-tauri-updater-feature.patch ];
+
+      postPatch = ''
+        ln -s ${devpod}/bin/devpod bin/devpod-cli-${rustTargetPlatformSpec}
+        cp -r ${frontend-build} frontend-build
+
+        substituteInPlace tauri.conf.json --replace '"distDir": "../dist",' '"distDir": "frontend-build",'
+      '' + lib.optionalString stdenv.isLinux ''
+        substituteInPlace $cargoDepsCopy/libappindicator-sys-*/src/lib.rs \
+          --replace "libayatana-appindicator3.so.1" "${libayatana-appindicator}/lib/libayatana-appindicator3.so.1"
+
+        # Since `cargo build` is used instead of `tauri build`, configs are merged manually.
+        jq --slurp '.[0] * .[1]' tauri.conf.json tauri-linux.conf.json >tauri.conf.json.merged
+        mv tauri.conf.json.merged tauri.conf.json
+      '';
+
+      nativeBuildInputs = [
+        copyDesktopItems
+        pkg-config
+      ] ++ lib.optionals stdenv.isLinux [
+        jq
+      ] ++ lib.optionals stdenv.isDarwin [
+        desktopToDarwinBundle
+      ];
+
+      buildInputs = [
+        libsoup
+        openssl
+      ] ++ lib.optionals stdenv.isLinux [
+        gtk3
+        libayatana-appindicator
+        webkitgtk
+      ] ++ lib.optionals stdenv.isDarwin [
+        darwin.apple_sdk.frameworks.Carbon
+        darwin.apple_sdk.frameworks.Cocoa
+        darwin.apple_sdk.frameworks.WebKit
+      ];
+
+      desktopItems = [
+        (makeDesktopItem {
+          name = "DevPod";
+          categories = [ "Development" ];
+          comment = "Spin up dev environments in any infra";
+          desktopName = "DevPod";
+          exec = "DevPod %U";
+          icon = "DevPod";
+          terminal = false;
+          type = "Application";
+          mimeTypes = [ "x-scheme-handler/devpod" ];
+        })
+      ];
+
+      postInstall = ''
+        ln -sf ${devpod}/bin/devpod $out/bin/devpod-cli
+        mv $out/bin/devpod-desktop $out/bin/DevPod
+
+        mkdir -p $out/share/icons/hicolor/{256x256@2,128x128,32x32}/apps
+        cp icons/128x128@2x.png $out/share/icons/hicolor/256x256@2/apps/DevPod.png
+        cp icons/128x128.png $out/share/icons/hicolor/128x128/apps/DevPod.png
+        cp icons/32x32.png $out/share/icons/hicolor/32x32/apps/DevPod.png
+      '';
+
+      meta = meta // {
+        mainProgram = "DevPod";
+        # darwin does not build
+        # https://github.com/h4llow3En/mac-notification-sys/issues/28
+        platforms = lib.platforms.linux;
+      };
+    };
+}
diff --git a/nixpkgs/pkgs/development/tools/devpod/package.json b/nixpkgs/pkgs/development/tools/devpod/package.json
new file mode 100644
index 000000000000..3a5848669d66
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/devpod/package.json
@@ -0,0 +1,63 @@
+{
+  "name": "devpod",
+  "private": true,
+  "version": "0.0.0",
+  "type": "module",
+  "scripts": {
+    "dev": "vite",
+    "build": "tsc && vite build",
+    "preview": "vite preview",
+    "tauri": "tauri",
+    "desktop:dev": "tauri dev --config src-tauri/tauri-dev.conf.json",
+    "desktop:dev:debug": "export DEBUG=true; yarn desktop:dev",
+    "desktop:build:dev": "DEBUG=true tauri build --config src-tauri/tauri-dev.conf.json",
+    "desktop:build:debug": "tauri build --debug",
+    "desktop:build": "tauri build --features enable-updater",
+    "format:check": "prettier --check .",
+    "format:fix": "prettier --write .",
+    "types:check": "tsc -p ./tsconfig.json --noEmit"
+  },
+  "dependencies": {
+    "@chakra-ui/icons": "2.1.1",
+    "@chakra-ui/react": "2.8.1",
+    "@emotion/react": "11.11.1",
+    "@emotion/styled": "11.11.0",
+    "@headlessui/react": "1.7.17",
+    "@tanstack/react-query": "4.36.1",
+    "@tanstack/react-query-devtools": "4.36.1",
+    "@tanstack/react-table": "8.10.7",
+    "@tauri-apps/api": "1.5.0",
+    "dayjs": "1.11.10",
+    "framer-motion": "10.16.4",
+    "markdown-to-jsx": "7.3.2",
+    "react": "18.2.0",
+    "react-dom": "18.2.0",
+    "react-hook-form": "7.47.0",
+    "react-icons": "4.11.0",
+    "react-router": "6.16.0",
+    "react-router-dom": "6.16.0",
+    "tauri-plugin-store-api": "https://github.com/tauri-apps/tauri-plugin-store",
+    "uuid": "9.0.1",
+    "xterm": "5.3.0",
+    "xterm-addon-fit": "0.7.0"
+  },
+  "devDependencies": {
+    "@tanstack/eslint-plugin-query": "4.36.1",
+    "@tauri-apps/cli": "1.5.2",
+    "@types/node": "18.15.3",
+    "@types/react": "18.2.28",
+    "@types/react-dom": "18.2.13",
+    "@types/uuid": "9.0.5",
+    "@typescript-eslint/eslint-plugin": "5.59.11",
+    "@typescript-eslint/parser": "5.59.11",
+    "@vitejs/plugin-react": "4.1.0",
+    "eslint": "8.44.0",
+    "eslint-config-prettier": "8.8.0",
+    "eslint-config-react-app": "7.0.1",
+    "eslint-plugin-react": "7.32.2",
+    "eslint-plugin-react-hooks": "4.6.0",
+    "prettier": "3.0.3",
+    "typescript": "5.0.4",
+    "vite": "4.4.9"
+  }
+}
diff --git a/nixpkgs/pkgs/development/tools/devtodo/default.nix b/nixpkgs/pkgs/development/tools/devtodo/default.nix
new file mode 100644
index 000000000000..34fdd2c794e5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/devtodo/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchurl, readline, ncurses }:
+
+stdenv.mkDerivation rec {
+  pname = "devtodo";
+  version = "0.1.20";
+
+  src = fetchurl {
+    url = "https://swapoff.org/files/devtodo/${pname}-${version}.tar.gz";
+    sha256 = "029y173njydzlznxmdizrrz4wcky47vqhl87fsb7xjcz9726m71p";
+  };
+
+  buildInputs = [ readline ncurses ];
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    homepage = "https://swapoff.org/devtodo1.html";
+    description = "A hierarchical command-line task manager";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.woffs ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/diesel-cli/default.nix b/nixpkgs/pkgs/development/tools/diesel-cli/default.nix
new file mode 100644
index 000000000000..47b01955868f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/diesel-cli/default.nix
@@ -0,0 +1,82 @@
+{ lib
+, sqliteSupport ? true
+, postgresqlSupport ? true
+, mysqlSupport ? true
+, rustPlatform
+, fetchCrate
+, installShellFiles
+, pkg-config
+, openssl
+, stdenv
+, Security
+, libiconv
+, sqlite
+, postgresql
+, mariadb
+, zlib
+}:
+
+assert lib.assertMsg (sqliteSupport == true || postgresqlSupport == true || mysqlSupport == true)
+  "support for at least one database must be enabled";
+
+let
+  inherit (lib) optional optionals optionalString;
+in
+
+rustPlatform.buildRustPackage rec {
+  pname = "diesel-cli";
+  version = "2.1.1";
+
+  src = fetchCrate {
+    inherit version;
+    crateName = "diesel_cli";
+    hash = "sha256-fpvC9C30DJy5ih+sFTTMoiykUHqG6OzDhF9jvix1Ctg=";
+  };
+
+  cargoHash = "sha256-nPmUCww8sOJwnG7+uIflLPgT87xPX0s7g0AcuDKhY2I=";
+
+  nativeBuildInputs = [ installShellFiles pkg-config ];
+
+  buildInputs = [ openssl ]
+    ++ optional stdenv.isDarwin Security
+    ++ optional (stdenv.isDarwin && mysqlSupport) libiconv
+    ++ optional sqliteSupport sqlite
+    ++ optional postgresqlSupport postgresql
+    ++ optionals mysqlSupport [ mariadb zlib ];
+
+  buildNoDefaultFeatures = true;
+  buildFeatures = optional sqliteSupport "sqlite"
+    ++ optional postgresqlSupport "postgres"
+    ++ optional mysqlSupport "mysql";
+
+  checkPhase = ''
+    runHook preCheck
+  '' + optionalString sqliteSupport ''
+    cargo check --features sqlite
+  '' + optionalString postgresqlSupport ''
+    cargo check --features postgres
+  '' + optionalString mysqlSupport ''
+    cargo check --features mysql
+  '' + ''
+    runHook postCheck
+  '';
+
+  postInstall = ''
+    installShellCompletion --cmd diesel \
+      --bash <($out/bin/diesel completions bash) \
+      --fish <($out/bin/diesel completions fish) \
+      --zsh <($out/bin/diesel completions zsh)
+  '';
+
+  # Fix the build with mariadb, which otherwise shows "error adding symbols:
+  # DSO missing from command line" errors for libz and libssl.
+  NIX_LDFLAGS = optionalString mysqlSupport "-lz -lssl -lcrypto";
+
+  meta = with lib; {
+    description = "Database tool for working with Rust projects that use Diesel";
+    homepage = "https://github.com/diesel-rs/diesel/tree/master/diesel_cli";
+    license = with licenses; [ mit asl20 ];
+    maintainers = with maintainers; [ ];
+    mainProgram = "diesel";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/distgen/default.nix b/nixpkgs/pkgs/development/tools/distgen/default.nix
new file mode 100644
index 000000000000..083bc3ed854c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/distgen/default.nix
@@ -0,0 +1,32 @@
+{ lib, python3, fetchPypi }:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "distgen";
+  version = "1.17";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-Md6R1thUtPQ7BFZsWmTDuNdD7UHMMFlEVksIJZAyjk4=";
+  };
+
+  nativeCheckInputs = with python3.pkgs; [
+    pytest
+    mock
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    distro
+    jinja2
+    six
+    pyyaml
+  ];
+
+  checkPhase = "make test-unit PYTHON=${python3.executable}";
+
+  meta = with lib; {
+    description = "Templating system/generator for distributions";
+    license = licenses.gpl2Plus;
+    homepage = "https://distgen.readthedocs.io/";
+    maintainers = with maintainers; [ bachp ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/dive/default.nix b/nixpkgs/pkgs/development/tools/dive/default.nix
new file mode 100644
index 000000000000..6981e83f7086
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/dive/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, stdenv
+, buildGoModule
+, fetchFromGitHub
+, fetchpatch
+, pkg-config
+, btrfs-progs
+, gpgme
+, lvm2
+}:
+
+buildGoModule rec {
+  pname = "dive";
+  version = "0.12.0";
+
+  src = fetchFromGitHub {
+    owner = "wagoodman";
+    repo = "dive";
+    rev = "v${version}";
+    hash = "sha256-CuVRFybsn7PVPgz3fz5ghpjOEOsTYTv6uUAgRgFewFw=";
+  };
+
+  vendorHash = "sha256-uzzawa/Doo6j/Fh9dJMzGKbpp24UTLAo9VGmuQ80IZE=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = lib.optionals stdenv.isLinux [ btrfs-progs gpgme lvm2 ];
+
+  ldflags = [ "-s" "-w" "-X main.version=${version}" ];
+
+  meta = with lib; {
+    description = "A tool for exploring each layer in a docker image";
+    homepage = "https://github.com/wagoodman/dive";
+    changelog = "https://github.com/wagoodman/dive/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ marsam SuperSandro2000 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/djhtml/default.nix b/nixpkgs/pkgs/development/tools/djhtml/default.nix
new file mode 100644
index 000000000000..4e4342f36fb6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/djhtml/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, buildPythonApplication
+, fetchFromGitHub
+, pythonOlder
+}:
+buildPythonApplication rec {
+  pname = "djhtml";
+  version = "3.0.6";
+
+  format = "setuptools";
+  disabled = pythonOlder "3.7";
+
+  src = fetchFromGitHub {
+    owner = "rtts";
+    repo = pname;
+    rev = "refs/tags/${version}";
+    hash = "sha256-3bviLyTLpHcAUWAaAmNZukWBDwFs8yFOAxl2bSk9GNY=";
+  };
+
+  pythonImportsCheck = [ "djhtml" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/rtts/djhtml";
+    description = "Django/Jinja template indenter";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ thubrecht ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/djlint/default.nix b/nixpkgs/pkgs/development/tools/djlint/default.nix
new file mode 100644
index 000000000000..cbba45b686b9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/djlint/default.nix
@@ -0,0 +1,50 @@
+{ lib
+, python3
+, fetchFromGitHub
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "djlint";
+  version = "1.34.1";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "Riverside-Healthcare";
+    repo = "djlint";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-p9RIzX9zoZxBrhiNaIeCX9OgfQm/lXNwYsh6IcsnIVk=";
+  };
+
+  nativeBuildInputs = with python3.pkgs; [
+    poetry-core
+    pythonRelaxDepsHook
+  ];
+
+  pythonRelaxDeps = [
+    "pathspec"
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    click
+    colorama
+    cssbeautifier
+    html-tag-names
+    html-void-elements
+    jsbeautifier
+    json5
+    pathspec
+    pyyaml
+    regex
+    tomli
+    tqdm
+  ];
+
+  pythonImportsCheck = [ "djlint" ];
+
+  meta = with lib; {
+    description = "HTML Template Linter and Formatter. Django - Jinja - Nunjucks - Handlebars - GoLang";
+    homepage = "https://github.com/Riverside-Healthcare/djlint";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ traxys ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/doc2go/default.nix b/nixpkgs/pkgs/development/tools/doc2go/default.nix
new file mode 100644
index 000000000000..92a2e09ee446
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/doc2go/default.nix
@@ -0,0 +1,49 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "doc2go";
+  version = "0.5.0";
+
+  src = fetchFromGitHub {
+    owner = "abhinav";
+    repo = "doc2go";
+    rev = "v${version}";
+    hash = "sha256-CFqr1laPxKNhaluGmwW7apxLQqkAFKVznDKezH8gjx0=";
+  };
+  vendorHash = "sha256-2WvlH69iYqIA3d9aFVec8TZL+pMJItoNKSoDBL/NNyg=";
+
+  ldflags = [ "-s" "-w" "-X main._version=${version}" ];
+
+  subPackages = [ "." ];
+
+  checkFlags = [
+    # needs to fetch additional go modules
+    "-skip=TestFinder_ImportedPackage/Modules"
+  ];
+
+  preCheck = ''
+    # run all tests
+    unset subPackages
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/abhinav/doc2go";
+    changelog = "https://github.com/abhinav/doc2go/blob/${src.rev}/CHANGELOG.md";
+    description = "Your Go project's documentation, to-go";
+    longDescription = ''
+      doc2go is a command line tool that generates static HTML documentation
+      from your Go code. It is a self-hosted static alternative to
+      https://pkg.go.dev/ and https://godocs.io/.
+    '';
+    license = with licenses; [
+      # general project license
+      asl20
+      # internal/godoc/synopsis*.go adapted from golang source
+      bsd3
+    ];
+    maintainers = with maintainers; [ jk ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/dockfmt/default.nix b/nixpkgs/pkgs/development/tools/dockfmt/default.nix
new file mode 100644
index 000000000000..e2a2210fa649
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/dockfmt/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "dockfmt";
+  version = "unstable-2020-09-18";
+
+  # The latest released version doesn't support reading from stdin.
+  src = fetchFromGitHub {
+    owner = "jessfraz";
+    repo = "dockfmt";
+    rev = "1455059b8bb53ab4723ef41946c43160583a8333";
+    hash = "sha256-wEC9kENcE3u+Mb7uLbx/VBUup6PBnCY5cxTYvkJcavg=";
+  };
+
+  vendorHash = null;
+
+  ldflags = [
+    "-w"
+    "-s"
+    "-X github.com/jessfraz/dockfmt/version.VERSION=${version}"
+  ];
+
+  meta = with lib; {
+    description = "Dockerfile format";
+    homepage = "https://github.com/jessfraz/dockfmt";
+    license = licenses.mit;
+    maintainers = with maintainers; [ cpcloud ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/dockle/default.nix b/nixpkgs/pkgs/development/tools/dockle/default.nix
new file mode 100644
index 000000000000..a1f5d433646c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/dockle/default.nix
@@ -0,0 +1,50 @@
+{ lib, buildGoModule, fetchFromGitHub, pkg-config, btrfs-progs, lvm2 }:
+
+buildGoModule rec {
+  pname = "dockle";
+  version = "0.4.14";
+
+  src = fetchFromGitHub {
+    owner = "goodwithtech";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-ZAk51juPFSaDQYfzsf7HXigL4aIk8V+tGA9lZqHBOsY=";
+  };
+
+  vendorHash = "sha256-+AtvnplvPWkUwmxfB7rjYcLTQibQsObFT1QRR0FXAe0=";
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ btrfs-progs lvm2 ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/goodwithtech/dockle/pkg.version=${version}"
+  ];
+
+  preCheck = ''
+    # Remove tests that use networking
+    rm pkg/scanner/scan_test.go
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+    $out/bin/dockle --help
+    $out/bin/dockle --version | grep "dockle version ${version}"
+    runHook postInstallCheck
+  '';
+
+  meta = with lib; {
+    homepage = "https://containers.goodwith.tech";
+    changelog = "https://github.com/goodwithtech/dockle/releases/tag/v${version}";
+    description = "Container Image Linter for Security";
+    longDescription = ''
+      Container Image Linter for Security.
+      Helping build the Best-Practice Docker Image.
+      Easy to start.
+    '';
+    license = licenses.asl20;
+    maintainers = with maintainers; [ jk ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/doctl/default.nix b/nixpkgs/pkgs/development/tools/doctl/default.nix
new file mode 100644
index 000000000000..d82c24979dfb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/doctl/default.nix
@@ -0,0 +1,43 @@
+{ stdenv, lib, buildGoModule, fetchFromGitHub, installShellFiles, buildPackages }:
+
+buildGoModule rec {
+  pname = "doctl";
+  version = "1.104.0";
+
+  vendorHash = null;
+
+  doCheck = false;
+
+  subPackages = [ "cmd/doctl" ];
+
+  ldflags = let t = "github.com/digitalocean/doctl"; in [
+    "-X ${t}.Major=${lib.versions.major version}"
+    "-X ${t}.Minor=${lib.versions.minor version}"
+    "-X ${t}.Patch=${lib.versions.patch version}"
+    "-X ${t}.Label=release"
+  ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    export HOME=$(mktemp -d) # attempts to write to /homeless-shelter
+    for shell in bash fish zsh; do
+      ${stdenv.hostPlatform.emulator buildPackages} $out/bin/doctl completion $shell > doctl.$shell
+      installShellCompletion doctl.$shell
+    done
+  '';
+
+  src = fetchFromGitHub {
+    owner = "digitalocean";
+    repo = "doctl";
+    rev = "v${version}";
+    sha256 = "sha256-Ww2tQi6ldRP142AIhLpwWNH4l9DCvUrMSZXCzPrxkxg=";
+  };
+
+  meta = with lib; {
+    description = "A command line tool for DigitalOcean services";
+    homepage = "https://github.com/digitalocean/doctl";
+    license = licenses.asl20;
+    maintainers = [ maintainers.siddharthist ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/documentation/antora/default.nix b/nixpkgs/pkgs/development/tools/documentation/antora/default.nix
new file mode 100644
index 000000000000..6ac43313e962
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/documentation/antora/default.nix
@@ -0,0 +1,33 @@
+{ lib, buildNpmPackage, fetchFromGitLab }:
+
+buildNpmPackage rec {
+  pname = "antora";
+  version = "3.1.7";
+
+  src = fetchFromGitLab {
+    owner = pname;
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-uGXXp6boS5yYsInSmkI9S0Tn85QGVp/5Fsh1u3G4oPk=";
+  };
+
+  npmDepsHash = "sha256-oWLRAuvWDk7w18qlDH14EE4elX5nhLKHSQANa/kXKvw=";
+
+  # This is to stop tests from being ran, as some of them fail due to trying to query remote repositories
+  postPatch = ''
+    substituteInPlace package.json --replace \
+      '"_mocha"' '""'
+  '';
+
+  postInstall = ''
+    mkdir -p $out/bin
+    ln -s $out/lib/node_modules/antora-build/packages/cli/bin/antora $out/bin/antora
+  '';
+
+  meta = with lib; {
+    description = "A modular documentation site generator. Designed for users of Asciidoctor.";
+    homepage = "https://antora.org";
+    license = licenses.mpl20;
+    maintainers = [ maintainers.ehllie ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/documentation/doxygen/default.nix b/nixpkgs/pkgs/development/tools/documentation/doxygen/default.nix
new file mode 100644
index 000000000000..ddf27b35dbd0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/documentation/doxygen/default.nix
@@ -0,0 +1,68 @@
+{ lib
+, stdenv
+, cmake
+, fetchFromGitHub
+, python3
+, flex
+, bison
+, qt5
+, CoreServices
+, libiconv
+, sqlite
+}:
+
+stdenv.mkDerivation rec {
+  pname = "doxygen";
+  version = "1.10.0";
+
+  src = fetchFromGitHub {
+    owner = "doxygen";
+    repo = "doxygen";
+    rev = "Release_${lib.replaceStrings [ "." ] [ "_" ] version}";
+    sha256 = "sha256-FPI5ICdn9Tne/g9SP6jAQS813AAyoDNooDR/Hyvq6R4=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    python3
+    flex
+    bison
+  ];
+
+  buildInputs = [ libiconv sqlite ]
+    ++ lib.optionals (qt5 != null) (with qt5; [ qtbase wrapQtAppsHook ])
+    ++ lib.optionals stdenv.isDarwin [ CoreServices ];
+
+  cmakeFlags = [
+    "-DICONV_INCLUDE_DIR=${libiconv}/include"
+    "-Duse_sys_sqlite3=ON"
+  ] ++ lib.optional (qt5 != null) "-Dbuild_wizard=YES";
+
+  env.NIX_CFLAGS_COMPILE =
+    lib.optionalString stdenv.isDarwin "-mmacosx-version-min=10.9";
+
+  # put examples in an output so people/tools can test against them
+  outputs = [ "out" "examples" ];
+  postInstall = ''
+    cp -r ../examples $examples
+  '';
+
+  meta = {
+    license = lib.licenses.gpl2Plus;
+    homepage = "https://www.doxygen.nl/";
+    changelog = "https://www.doxygen.nl/manual/changelog.html";
+    description = "Source code documentation generator tool";
+
+    longDescription = ''
+      Doxygen is the de facto standard tool for generating documentation from
+      annotated C++ sources, but it also supports other popular programming
+      languages such as C, Objective-C, C#, PHP, Java, Python, IDL (Corba,
+      Microsoft, and UNO/OpenOffice flavors), Fortran, VHDL and to some extent
+      D. It can generate an on-line documentation browser (in HTML) and/or an
+      off-line reference manual (in LaTeX) from a set of documented source
+      files.
+    '';
+
+    platforms = if qt5 != null then lib.platforms.linux else lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/documentation/gi-docgen/default.nix b/nixpkgs/pkgs/development/tools/documentation/gi-docgen/default.nix
new file mode 100644
index 000000000000..bed660615179
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/documentation/gi-docgen/default.nix
@@ -0,0 +1,59 @@
+{ lib
+, fetchurl
+, meson
+, ninja
+, python3
+, gnome
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "gi-docgen";
+  version = "2023.3";
+
+  format = "other";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gi-docgen/${lib.versions.major version}/gi-docgen-${version}.tar.xz";
+    hash = "sha256-TesfCXc/cGJZrGUgUNp7PuWYcbw/1c+3foEdt0mNyOc=";
+  };
+
+  depsBuildBuild = [
+    python3
+  ];
+
+  nativeBuildInputs = [
+    meson
+    ninja
+  ];
+
+  pythonPath = with python3.pkgs; [
+    jinja2
+    markdown
+    markupsafe
+    packaging
+    pygments
+    toml # remove once python311 is the default
+    typogrify
+  ];
+
+  doCheck = false; # no tests
+
+  postFixup = ''
+    # Do not propagate Python
+    substituteInPlace $out/nix-support/propagated-build-inputs \
+      --replace "${python3}" ""
+  '';
+
+  passthru = {
+    updateScript = gnome.updateScript {
+      packageName = "gi-docgen";
+    };
+  };
+
+  meta = with lib; {
+    description = "Documentation generator for GObject-based libraries";
+    homepage = "https://gitlab.gnome.org/GNOME/gi-docgen";
+    license = licenses.asl20; # OR GPL-3.0-or-later
+    maintainers = teams.gnome.members;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/documentation/gnome-doc-utils/default.nix b/nixpkgs/pkgs/development/tools/documentation/gnome-doc-utils/default.nix
new file mode 100644
index 000000000000..5586ed5c2301
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/documentation/gnome-doc-utils/default.nix
@@ -0,0 +1,46 @@
+{ lib, fetchurl, pkg-config, libxml2, libxslt, intltool, gnome
+, python3Packages, fetchpatch, bash }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "gnome-doc-utils";
+  version = "0.20.10";
+
+  format = "other";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "19n4x25ndzngaciiyd8dd6s2mf9gv6nv3wv27ggns2smm7zkj1nb";
+  };
+
+  patches = [
+    # https://bugzilla.redhat.com/show_bug.cgi?id=438638
+    (fetchpatch {
+      url = "https://src.fedoraproject.org/rpms/gnome-doc-utils/raw/6b8908abe5af61a952db7174c5d1843708d61f1b/f/gnome-doc-utils-0.14.0-package.patch";
+      sha256 = "sha256-V2L2/30NoHY/wj3+dsombxveWRSUJb2YByOKtEgVx/0=";
+    })
+    # python3 support
+    (fetchpatch {
+      url = "https://src.fedoraproject.org/rpms/gnome-doc-utils/raw/6b8908abe5af61a952db7174c5d1843708d61f1b/f/gnome-doc-utils-0.20.10-python3.patch";
+      sha256 = "sha256-niH/Yx5H44rsRgkCZS8LWLFB9ZvuInt75zugzoVUhH0=";
+    })
+  ];
+
+  nativeBuildInputs = [ intltool pkg-config libxslt.dev ];
+  buildInputs = [ libxml2 libxslt bash ];
+  propagatedBuildInputs = [ python3Packages.libxml2 ];
+
+  configureFlags = [ "--disable-scrollkeeper" ];
+
+  passthru = {
+    updateScript = gnome.updateScript {
+      packageName = pname;
+    };
+  };
+
+  meta = with lib; {
+    description = "Collection of documentation utilities for the GNOME project";
+    homepage = "https://gitlab.gnome.org/GNOME/gnome-doc-utils";
+    license = with licenses; [ gpl2Plus lgpl2Plus ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/documentation/gtk-doc/default.nix b/nixpkgs/pkgs/development/tools/documentation/gtk-doc/default.nix
new file mode 100644
index 000000000000..18d53e51da43
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/documentation/gtk-doc/default.nix
@@ -0,0 +1,97 @@
+{ lib
+, fetchFromGitLab
+, meson
+, ninja
+, pkg-config
+, python3
+, docbook_xml_dtd_43
+, docbook-xsl-nons
+, libxslt
+, gettext
+, gnome
+, withDblatex ? false, dblatex
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "gtk-doc";
+  version = "1.33.2";
+
+  outputDevdoc = "out";
+
+  format = "other";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.gnome.org";
+    owner = "GNOME";
+    repo = pname;
+    rev = version;
+    sha256 = "A6OXpazrJ05SUIO1ZPVN0xHTXOSov8UnPvUolZAv/Iw=";
+  };
+
+  patches = [
+    passthru.respect_xml_catalog_files_var_patch
+  ];
+
+  postPatch = ''
+    substituteInPlace meson.build \
+      --replace "pkg-config" "$PKG_CONFIG"
+  '';
+
+  strictDeps = true;
+
+  depsBuildBuild = [
+    python3
+    pkg-config
+  ];
+
+  nativeBuildInputs = [
+    pkg-config
+    gettext
+    meson
+    ninja
+    libxslt # for xsltproc
+  ];
+
+  buildInputs = [
+    docbook_xml_dtd_43
+    docbook-xsl-nons
+    libxslt
+  ] ++ lib.optionals withDblatex [
+    dblatex
+  ];
+
+  pythonPath = with python3.pkgs; [
+    pygments # Needed for https://gitlab.gnome.org/GNOME/gtk-doc/blob/GTK_DOC_1_32/meson.build#L42
+    lxml
+  ];
+
+  mesonFlags = [
+    "-Dtests=false"
+    "-Dyelp_manual=false"
+  ];
+
+  doCheck = false; # requires a lot of stuff
+  doInstallCheck = false; # fails
+
+  postFixup = ''
+    # Do not propagate Python
+    substituteInPlace $out/nix-support/propagated-build-inputs \
+      --replace "${python3}" ""
+  '';
+
+  passthru = {
+    # Consumers are expected to copy the m4 files to their source tree, let them reuse the patch
+    respect_xml_catalog_files_var_patch = ./respect-xml-catalog-files-var.patch;
+    updateScript = gnome.updateScript {
+      packageName = pname;
+      versionPolicy = "none";
+    };
+  };
+
+  meta = with lib; {
+    description = "Tools to extract documentation embedded in GTK and GNOME source code";
+    homepage = "https://gitlab.gnome.org/GNOME/gtk-doc";
+    license = licenses.gpl2Plus;
+    maintainers = teams.gnome.members ++ (with maintainers; [ pSub ]);
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/documentation/gtk-doc/respect-xml-catalog-files-var.patch b/nixpkgs/pkgs/development/tools/documentation/gtk-doc/respect-xml-catalog-files-var.patch
new file mode 100644
index 000000000000..95f6879a0069
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/documentation/gtk-doc/respect-xml-catalog-files-var.patch
@@ -0,0 +1,13 @@
+--- a/m4/gtkdoc_jh_check_xml_catalog.m4
++++ b/m4/gtkdoc_jh_check_xml_catalog.m4
+@@ -5,8 +5,8 @@
+ [
+ 	AC_REQUIRE([JH_PATH_XML_CATALOG],[JH_PATH_XML_CATALOG(,[:])])dnl
+ 	AC_MSG_CHECKING([for ifelse([$2],,[$1],[$2]) in XML catalog])
+-	if $jh_found_xmlcatalog && \
+-		AC_RUN_LOG([$XMLCATALOG --noout "$XML_CATALOG_FILE" "$1" >&2]); then
++	# empty argument forces libxml to use XML_CATALOG_FILES variable
++	if AC_RUN_LOG([$XMLCATALOG --noout "" "$1" >&2]); then
+ 		AC_MSG_RESULT([found])
+ 		ifelse([$3],,,[$3])
+ 	else
diff --git a/nixpkgs/pkgs/development/tools/documentation/mdsh/default.nix b/nixpkgs/pkgs/development/tools/documentation/mdsh/default.nix
new file mode 100644
index 000000000000..654721c50ea9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/documentation/mdsh/default.nix
@@ -0,0 +1,23 @@
+{ lib, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "mdsh";
+  version = "0.7.0";
+
+  src = fetchFromGitHub {
+    owner = "zimbatm";
+    repo = "mdsh";
+    rev = "v${version}";
+    hash = "sha256-Y8ss/aw01zpgM6Z6fCGshP21kcdSOTVG/VqL8H3tlls=";
+  };
+
+  cargoSha256 = "sha256-8o4gN6mqUU+o80IqlAYAD5qpZBSQ/FY5HoNbpwzTm0A=";
+
+  meta = with lib; {
+    description = "Markdown shell pre-processor";
+    homepage = "https://github.com/zimbatm/mdsh";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ zimbatm ];
+    mainProgram = "mdsh";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/dprint/default.nix b/nixpkgs/pkgs/development/tools/dprint/default.nix
new file mode 100644
index 000000000000..fc0c7ee57383
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/dprint/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchCrate, rustPlatform, CoreFoundation, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "dprint";
+  version = "0.45.0";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-Vs+LcvGXcFT0kcZHtLv3T+4xV88kP02r9wDC5hBOZCg=";
+  };
+
+  cargoHash = "sha256-DbFvsOLJ+diLzQXzl6csuVMqjBbI3z+vO37HQ/WnLR4=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [ CoreFoundation Security ];
+
+  # Tests fail because they expect a test WASM plugin. Tests already run for
+  # every commit upstream on GitHub Actions
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Code formatting platform written in Rust";
+    longDescription = ''
+      dprint is a pluggable and configurable code formatting platform written in Rust.
+      It offers multiple WASM plugins to support various languages. It's written in
+      Rust, so it’s small, fast, and portable.
+    '';
+    changelog = "https://github.com/dprint/dprint/releases/tag/${version}";
+    homepage = "https://dprint.dev";
+    license = licenses.mit;
+    maintainers = with maintainers; [ khushraj ];
+    mainProgram = "dprint";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/drip/default.nix b/nixpkgs/pkgs/development/tools/drip/default.nix
new file mode 100644
index 000000000000..2724e41e8e61
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/drip/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, fetchFromGitHub, jdk8, which, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "drip";
+  version = "0.2.4";
+
+  src = fetchFromGitHub {
+    repo = pname;
+    owner = "ninjudd";
+    rev = version;
+    sha256 = "1zl62wdwfak6z725asq5lcqb506la1aavj7ag78lvp155wyh8aq1";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  buildInputs = [ jdk8 ];
+
+  postPatch = ''
+    patchShebangs .
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    mkdir $out
+    cp ./* $out -r
+    wrapProgram $out/bin/drip \
+      --prefix PATH : "${which}/bin"
+    $out/bin/drip version
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "A launcher for the Java Virtual Machine intended to be a drop-in replacement for the java command, only faster";
+    license = licenses.epl10;
+    homepage = "https://github.com/ninjudd/drip";
+    platforms = platforms.linux;
+    maintainers = [ maintainers.rybern ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/drm_info/default.nix b/nixpkgs/pkgs/development/tools/drm_info/default.nix
new file mode 100644
index 000000000000..26124b1054fb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/drm_info/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub
+, libdrm, json_c, pciutils
+, meson, ninja, pkg-config
+}:
+
+stdenv.mkDerivation rec {
+  pname = "drm_info";
+  version = "2.3.0";
+
+  src = fetchFromGitHub {
+    owner = "ascent12";
+    repo = "drm_info";
+    rev = "v${version}";
+    sha256 = "sha256-UTDYLe3QezPCyG9CIp+O+KX716JDTL9mn+OEjjyTwlg=";
+  };
+
+  nativeBuildInputs = [ meson ninja pkg-config ];
+  buildInputs = [ libdrm json_c pciutils ];
+
+  meta = with lib; {
+    description = "Small utility to dump info about DRM devices";
+    homepage = "https://github.com/ascent12/drm_info";
+    license = licenses.mit;
+    maintainers = with maintainers; [ tadeokondrak ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/dstp/default.nix b/nixpkgs/pkgs/development/tools/dstp/default.nix
new file mode 100644
index 000000000000..15093060d628
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/dstp/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "dstp";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "ycd";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-YvuUgHHa8Egk+bbSI0SH0i3YrKWRbzjAckNG32RBRXw=";
+  };
+
+  vendorHash = "sha256-qNH71MPKOC0ld7xxppjZrHSTJ6t8E0LljM1OzT7pM9g=";
+
+  # Tests require network connection, but is not allowed by nix
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Run common networking tests against your site";
+    homepage = "https://github.com/ycd/dstp";
+    license = licenses.mit;
+    maintainers = with maintainers; [ jlesquembre ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/dt-schema/default.nix b/nixpkgs/pkgs/development/tools/dt-schema/default.nix
new file mode 100644
index 000000000000..5736d301b32d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/dt-schema/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, python3
+}:
+
+let python = python3.override {
+  packageOverrides = self: super: {
+    # see https://github.com/devicetree-org/dt-schema/issues/108
+    jsonschema = super.jsonschema.overridePythonAttrs (old: rec {
+      version = "4.17.3";
+      disabled = self.pythonOlder "3.7";
+
+      src = old.src.override {
+        inherit version;
+        hash = "sha256-D4ZEN6uLYHa6ZwdFPvj5imoNUSqA6T+KvbZ29zfstg0=";
+      };
+
+      propagatedBuildInputs = with self; ([
+        attrs
+        pyrsistent
+      ] ++ lib.optionals (pythonOlder "3.8") [
+        importlib-metadata
+        typing-extensions
+      ] ++ lib.optionals (pythonOlder "3.9") [
+        importlib-resources
+        pkgutil-resolve-name
+      ]);
+    });
+  };
+}; in python.pkgs.toPythonApplication python.pkgs.dtschema
+
diff --git a/nixpkgs/pkgs/development/tools/dtools/default.nix b/nixpkgs/pkgs/development/tools/dtools/default.nix
new file mode 100644
index 000000000000..de4038fd346d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/dtools/default.nix
@@ -0,0 +1,51 @@
+{ stdenv, lib, fetchFromGitHub, fetchpatch, ldc, curl, gnumake42 }:
+
+stdenv.mkDerivation rec {
+  pname = "dtools";
+  version = "2.106.1";
+
+  src = fetchFromGitHub {
+    owner = "dlang";
+    repo = "tools";
+    rev = "v${version}";
+    sha256 = "sha256-Y8jSwd6tldCnq3yEuO/xUYrSV+lp7tBPMiheMA06f0M=";
+    name = "dtools";
+  };
+
+  patches = [
+    (fetchpatch {
+      # part of https://github.com/dlang/tools/pull/441
+      url = "https://github.com/dlang/tools/commit/6c6a042d1b08e3ec1790bd07a7f69424625ee866.patch"; # Fix LDC arm64 build
+      sha256 = "sha256-x6EclTYN1Y5FG57KLhbBK0BZicSYcZoWO7MTVcP4T18=";
+    })
+  ];
+
+  nativeBuildInputs = [ ldc gnumake42 ]; # fails with make 4.4
+  buildInputs = [ curl ];
+
+  makeCmd = ''
+    make -f posix.mak all DMD_DIR=dmd DMD=${ldc.out}/bin/ldmd2 CC=${stdenv.cc}/bin/cc
+  '';
+
+  buildPhase = ''
+    $makeCmd
+  '';
+
+  doCheck = true;
+
+  checkPhase = ''
+    $makeCmd test_rdmd
+    '';
+
+  installPhase = ''
+    $makeCmd INSTALL_DIR=$out install
+  '';
+
+  meta = with lib; {
+    description = "Ancillary tools for the D programming language compiler";
+    homepage = "https://github.com/dlang/tools";
+    license = lib.licenses.boost;
+    maintainers = with maintainers; [ ThomasMader jtbx ];
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/dum/default.nix b/nixpkgs/pkgs/development/tools/dum/default.nix
new file mode 100644
index 000000000000..f9683f2e821f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/dum/default.nix
@@ -0,0 +1,23 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "dum";
+  version = "0.1.19";
+
+  src = fetchFromGitHub {
+    owner = "egoist";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0rnm59zhpaa8nbbh6rh53svnlb484q1k6s4wc4w9516b18xhmkca";
+  };
+
+  cargoSha256 = "sha256-aMx4xfWYiiz5TY/CVCogZ3WNR6md77jb8RKhhVwqeto=";
+
+  meta = with lib; {
+    description = "An npm scripts runner written in Rust";
+    homepage = "https://github.com/egoist/dum";
+    changelog = "https://github.com/egoist/dum/blob/v${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/dump_syms/default.nix b/nixpkgs/pkgs/development/tools/dump_syms/default.nix
new file mode 100644
index 000000000000..a5dab42219f8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/dump_syms/default.nix
@@ -0,0 +1,66 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, openssl
+
+# darwin
+, Security
+
+# tests
+, firefox-esr-unwrapped
+, firefox-unwrapped
+, thunderbird-unwrapped
+}:
+
+let
+  pname = "dump_syms";
+  version = "2.2.2";
+in
+rustPlatform.buildRustPackage {
+  inherit pname version;
+
+  src = fetchFromGitHub {
+    owner = "mozilla";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-8kyicTtY7h1CDM4UGOHsppRRTraU6JLe24MKtoduiz0=";
+  };
+
+  cargoSha256 = "sha256-5WiGckh/jq7AHH3JWZL8tIsj1Gqr8iLX7IyppKsW96k=";
+
+  # Workaround for https://github.com/nixos/nixpkgs/issues/166205
+  env = lib.optionalAttrs stdenv.cc.isClang {
+    NIX_LDFLAGS = "-l${stdenv.cc.libcxx.cxxabi.libName}";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    openssl
+  ] ++ lib.optionals (stdenv.isDarwin) [
+    Security
+  ];
+
+  checkFlags = [
+    # Disable tests that require network access
+    # ConnectError("dns error", Custom { kind: Uncategorized, error: "failed to lookup address information: Temporary failure in name resolution" })) }', src/windows/pdb.rs:725:56
+    "--skip windows::pdb::tests::test_ntdll"
+    "--skip windows::pdb::tests::test_oleaut32"
+  ];
+
+  passthru.tests = {
+    inherit firefox-esr-unwrapped firefox-unwrapped thunderbird-unwrapped;
+  };
+
+  meta = with lib; {
+    changelog = "https://github.com/mozilla/dump_syms/releases/tag/v${version}";
+    description = "Command-line utility for parsing the debugging information the compiler provides in ELF or stand-alone PDB files";
+    license = licenses.asl20;
+    homepage = "https://github.com/mozilla/dump_syms/";
+    maintainers = with maintainers; [ hexa ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/dyff/default.nix b/nixpkgs/pkgs/development/tools/dyff/default.nix
new file mode 100644
index 000000000000..a549563aabbe
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/dyff/default.nix
@@ -0,0 +1,57 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles }:
+
+buildGoModule rec {
+  pname = "dyff";
+  version = "1.6.0";
+
+  src = fetchFromGitHub {
+    owner = "homeport";
+    repo = "dyff";
+    rev = "v${version}";
+    sha256 = "sha256-MyQVTAfKHog6BiqqT8eaIPlUMctHz+Oe4eZqfpgiHNs=";
+  };
+
+  vendorHash = "sha256-VAPJqa1930Vmjjj9rSjVTk6e4HD3JbOk6VC8v37kijQ=";
+
+  subPackages = [
+    "cmd/dyff"
+    "pkg/dyff"
+    "internal/cmd"
+  ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  # test fails with the injected version
+  postPatch = ''
+    substituteInPlace internal/cmd/cmds_test.go \
+      --replace "version (development)" ${version}
+  '';
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=github.com/homeport/dyff/internal/cmd.version=${version}"
+  ];
+
+  postInstall = ''
+    installShellCompletion --cmd dyff \
+      --bash <($out/bin/dyff completion bash) \
+      --fish <($out/bin/dyff completion fish) \
+      --zsh <($out/bin/dyff completion zsh)
+  '';
+
+  meta = with lib; {
+    description = "A diff tool for YAML files, and sometimes JSON";
+    longDescription = ''
+      dyff is inspired by the way the old BOSH v1 deployment output reported
+      changes from one version to another by only showing the parts of a YAML
+      file that change.
+
+      Each difference is referenced by its location in the YAML document by
+      using either the Spruce or go-patch path syntax.
+    '';
+    homepage = "https://github.com/homeport/dyff";
+    license = licenses.mit;
+    maintainers = with maintainers; [ edlimerkaj jceb ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/earthly/default.nix b/nixpkgs/pkgs/development/tools/earthly/default.nix
new file mode 100644
index 000000000000..6bc18da18258
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/earthly/default.nix
@@ -0,0 +1,56 @@
+{ lib, buildGoModule, fetchFromGitHub, stdenv, testers, earthly }:
+
+buildGoModule rec {
+  pname = "earthly";
+  version = "0.8.3";
+
+  src = fetchFromGitHub {
+    owner = "earthly";
+    repo = "earthly";
+    rev = "v${version}";
+    hash = "sha256-xjehcMm7lW0t65j0hQxbqmMWt1uuK8I4/MB7mjr+axw=";
+  };
+
+  vendorHash = "sha256-NNOUo2X2rwvKRP/zgmTexyXFDNT/LO/kE4HiKwFWQUw=";
+  subPackages = [ "cmd/earthly" "cmd/debugger" ];
+
+  CGO_ENABLED = 0;
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X main.Version=v${version}"
+    "-X main.DefaultBuildkitdImage=docker.io/earthly/buildkitd:v${version}"
+    "-X main.GitSha=v${version}"
+    "-X main.DefaultInstallationName=earthly"
+  ] ++ lib.optionals stdenv.isLinux [
+    "-extldflags '-static'"
+  ];
+
+  tags = [
+    "dfrunmount"
+    "dfrunnetwork"
+    "dfrunsecurity"
+    "dfsecrets"
+    "dfssh"
+  ];
+
+  postInstall = ''
+    mv $out/bin/debugger $out/bin/earthly-debugger
+  '';
+
+  passthru = {
+    tests.version = testers.testVersion {
+      package = earthly;
+      version = "v${version}";
+    };
+  };
+
+  meta = with lib; {
+    description = "Build automation for the container era";
+    homepage = "https://earthly.dev/";
+    changelog = "https://github.com/earthly/earthly/releases/tag/v${version}";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ zoedsoupe konradmalik ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/eask/default.nix b/nixpkgs/pkgs/development/tools/eask/default.nix
new file mode 100644
index 000000000000..8aeac6fe1c2d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/eask/default.nix
@@ -0,0 +1,29 @@
+{ lib
+, buildNpmPackage
+, fetchFromGitHub
+}:
+
+buildNpmPackage rec {
+  pname = "eask";
+  version = "0.9.5";
+
+  src = fetchFromGitHub {
+    owner = "emacs-eask";
+    repo = "cli";
+    rev = version;
+    hash = "sha256-olVR+TTDfSnQ+eJEb5qbNq96KnRr1WYx74/nC275+gI=";
+  };
+
+  npmDepsHash = "sha256-LqJ6cJxrQ3uHuQqXHQ7pfhTlndqFuqoMee9CNSteCP4=";
+
+  dontBuild = true;
+
+  meta = {
+    changelog = "https://github.com/emacs-eask/cli/blob/${src.rev}/CHANGELOG.md";
+    description = "CLI for building, runing, testing, and managing your Emacs Lisp dependencies";
+    homepage = "https://emacs-eask.github.io/";
+    license = lib.licenses.gpl3Plus;
+    mainProgram = "eask";
+    maintainers = with lib.maintainers; [ jcs090218 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/easyjson/default.nix b/nixpkgs/pkgs/development/tools/easyjson/default.nix
new file mode 100644
index 000000000000..b724dd213ab0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/easyjson/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "easyjson";
+  version = "0.7.7";
+
+  src = fetchFromGitHub {
+    owner = "mailru";
+    repo = "easyjson";
+    rev = "v${version}";
+    sha256 = "0clifkvvy8f45rv3cdyv58dglzagyvfcqb63wl6rij30c5j2pzc1";
+  };
+  vendorHash = "sha256-L8u7QQPE2SnskcRrSIwQ4KhsX9xncqDWXJ75ytjxLJ4=";
+
+  subPackages = [ "easyjson" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/mailru/easyjson";
+    description = "Fast JSON serializer for Go";
+    license = licenses.mit;
+    maintainers = with maintainers; [ Madouura ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ec2-metadata-mock/default.nix b/nixpkgs/pkgs/development/tools/ec2-metadata-mock/default.nix
new file mode 100644
index 000000000000..968656fa9da2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ec2-metadata-mock/default.nix
@@ -0,0 +1,26 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "ec2-metadata-mock";
+  version = "1.11.2";
+
+  src = fetchFromGitHub {
+    owner = "aws";
+    repo = "amazon-ec2-metadata-mock";
+    rev = "v${version}";
+    sha256 = "sha256-hYyJtkwAzweH8boUY3vrvy6Ug+Ier5f6fvR52R+Di8o=";
+  };
+
+  vendorHash = "sha256-T45abGVoiwxAEO60aPH3hUqiH6ON3aRhkrOFcOi+Bm8=";
+
+  postInstall = ''
+    mv $out/bin/{cmd,ec2-metadata-mock}
+  '';
+
+  meta = with lib; {
+    description = "Amazon EC2 Metadata Mock";
+    homepage = "https://github.com/aws/amazon-ec2-metadata-mock";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ ymatsiuk ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/eclint/default.nix b/nixpkgs/pkgs/development/tools/eclint/default.nix
new file mode 100644
index 000000000000..933a19fc12c1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/eclint/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, buildGoModule
+, fetchFromGitLab
+}:
+
+buildGoModule
+rec {
+  pname = "eclint";
+  version = "0.5.0";
+
+  src = fetchFromGitLab {
+    owner = "greut";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-x0dBiRHaDxKrTCR2RfP2/bpBo6xewu8FX7Bv4ugaUAY=";
+  };
+
+  vendorHash = "sha256-aNQuALDe37lsmTGpClIBOQJlL0NFSAZCgcmTjx0kP+U=";
+
+  ldflags = [ "-X main.version=${version}" ];
+
+  meta = with lib; {
+    homepage = "https://gitlab.com/greut/eclint";
+    description = "EditorConfig linter written in Go";
+    license = licenses.mit;
+    maintainers = with maintainers; [ lucperkins ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/eclipse-mat/default.nix b/nixpkgs/pkgs/development/tools/eclipse-mat/default.nix
new file mode 100644
index 000000000000..b76364c59552
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/eclipse-mat/default.nix
@@ -0,0 +1,117 @@
+{ fetchurl
+, fontconfig
+, freetype
+, glib
+, gsettings-desktop-schemas
+, gtk3
+, jdk17
+, lib
+, libX11
+, libXrender
+, libXtst
+, makeDesktopItem
+, makeWrapper
+, shared-mime-info
+, stdenv
+, unzip
+, webkitgtk
+, zlib
+}:
+
+let
+  pVersion = "1.14.0.20230315";
+  pVersionTriple = lib.splitVersion pVersion;
+  majorVersion = lib.elemAt pVersionTriple 0;
+  minorVersion = lib.elemAt pVersionTriple 1;
+  patchVersion = lib.elemAt pVersionTriple 2;
+  baseVersion = "${majorVersion}.${minorVersion}.${patchVersion}";
+  jdk = jdk17;
+in
+stdenv.mkDerivation rec {
+  pname = "eclipse-mat";
+  version = pVersion;
+
+  src = fetchurl {
+    url = "http://ftp.halifax.rwth-aachen.de/eclipse//mat/${baseVersion}/rcp/MemoryAnalyzer-${version}-linux.gtk.x86_64.zip";
+    sha256 = "sha256-9YFJILMRhIln4vo99noRxYARh1M/mjwg7t8RdAJCoW4=";
+  };
+
+  desktopItem = makeDesktopItem {
+    name = "eclipse-mat";
+    exec = "eclipse-mat";
+    icon = "eclipse";
+    comment = "Eclipse Memory Analyzer";
+    desktopName = "Eclipse MAT";
+    genericName = "Java Memory Analyzer";
+    categories = [ "Development" ];
+  };
+
+  unpackPhase = ''
+    unzip $src
+  '';
+
+  buildCommand = ''
+    mkdir -p $out
+    unzip $src
+    mv mat $out
+
+    # Patch binaries.
+    interpreter=$(echo ${stdenv.cc.libc}/lib/ld-linux*.so.2)
+    libCairo=$out/eclipse/libcairo-swt.so
+    patchelf --set-interpreter $interpreter $out/mat/MemoryAnalyzer
+    [ -f $libCairo ] && patchelf --set-rpath ${
+      lib.makeLibraryPath [ freetype fontconfig libX11 libXrender zlib ]
+    } $libCairo
+
+    # Create wrapper script.  Pass -configuration to store settings in ~/.eclipse-mat/<version>
+    makeWrapper $out/mat/MemoryAnalyzer $out/bin/eclipse-mat \
+      --prefix PATH : ${jdk}/bin \
+      --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath ([ glib gtk3 libXtst webkitgtk ])} \
+      --prefix XDG_DATA_DIRS : "$GSETTINGS_SCHEMAS_PATH" \
+      --add-flags "-configuration \$HOME/.eclipse-mat/''${version}/configuration"
+
+    # Create desktop item.
+    mkdir -p $out/share/applications
+    cp ${desktopItem}/share/applications/* $out/share/applications
+    mkdir -p $out/share/pixmaps
+    find $out/mat/plugins -name 'eclipse*.png' -type f -exec cp {} $out/share/pixmaps \;
+    mv $out/share/pixmaps/eclipse64.png $out/share/pixmaps/eclipse.png
+  '';
+
+  nativeBuildInputs = [ unzip makeWrapper ];
+  buildInputs = [
+    fontconfig
+    freetype
+    glib
+    gsettings-desktop-schemas
+    gtk3
+    jdk
+    libX11
+    libXrender
+    libXtst
+    zlib
+    shared-mime-info
+    webkitgtk
+  ];
+
+  dontBuild = true;
+  dontConfigure = true;
+
+  meta = with lib; {
+    description = "Fast and feature-rich Java heap analyzer";
+    longDescription = ''
+      The Eclipse Memory Analyzer is a tool that helps you find memory
+      leaks and reduce memory consumption. Use the Memory Analyzer to
+      analyze productive heap dumps with hundreds of millions of
+      objects, quickly calculate the retained sizes of objects, see
+      who is preventing the Garbage Collector from collecting objects,
+      run a report to automatically extract leak suspects.
+    '';
+    homepage = "https://www.eclipse.org/mat";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.epl20;
+    maintainers = [ maintainers.ktor ];
+    platforms = [ "x86_64-linux" ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/tools/efm-langserver/default.nix b/nixpkgs/pkgs/development/tools/efm-langserver/default.nix
new file mode 100644
index 000000000000..5bed978959cd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/efm-langserver/default.nix
@@ -0,0 +1,23 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "efm-langserver";
+  version = "0.0.50";
+
+  src = fetchFromGitHub {
+    owner = "mattn";
+    repo = "efm-langserver";
+    rev = "v${version}";
+    sha256 = "sha256-3WnMEkDa1boExyOg30wiFqs1Nw/zMtBqoUmtjluTQ0Y=";
+  };
+
+  vendorHash = "sha256-ZChHQ0Bcu9sVHvhdrmTfLryRwsFQNQSFDOKRu0keUIo=";
+  subPackages = [ "." ];
+
+  meta = with lib; {
+    description = "General purpose Language Server";
+    maintainers = with maintainers; [ Philipp-M ];
+    homepage = "https://github.com/mattn/efm-langserver";
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ejs/default.nix b/nixpkgs/pkgs/development/tools/ejs/default.nix
new file mode 100644
index 000000000000..5392a9c137a2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ejs/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, buildNpmPackage
+, fetchFromGitHub
+}:
+
+buildNpmPackage rec {
+  pname = "ejs";
+  version = "3.1.9";
+
+  src = fetchFromGitHub {
+    owner = "mde";
+    repo = "ejs";
+    rev = "v${version}";
+    hash = "sha256-bOZclhsnV3onxc32ZGfLpuGS5Jz6S12/BmkmwL4M6Dg=";
+  };
+
+  npmDepsHash = "sha256-829eWfJiMw9KRlhdmzD0ha//bgUQ5nPEzO+ayUPLxXY=";
+
+  buildPhase = ''
+    runHook preBuild
+
+    ./node_modules/.bin/jake build
+
+    runHook postBuild
+  '';
+
+  meta = {
+    description = "Embedded JavaScript templates";
+    homepage = "http://ejs.co";
+    license = lib.licenses.asl20;
+    mainProgram = "ejs";
+    maintainers = with lib.maintainers; [ wolfangaukang ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ejson/Gemfile b/nixpkgs/pkgs/development/tools/ejson/Gemfile
new file mode 100644
index 000000000000..f860fe5075d4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ejson/Gemfile
@@ -0,0 +1,4 @@
+source 'https://rubygems.org'
+
+gem 'fpm'
+gem 'ronn'
diff --git a/nixpkgs/pkgs/development/tools/ejson/Gemfile.lock b/nixpkgs/pkgs/development/tools/ejson/Gemfile.lock
new file mode 100644
index 000000000000..d0a51c0a0623
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ejson/Gemfile.lock
@@ -0,0 +1,54 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    arr-pm (0.0.10)
+      cabin (> 0)
+    backports (3.14.0)
+    cabin (0.9.0)
+    childprocess (0.9.0)
+      ffi (~> 1.0, >= 1.0.11)
+    clamp (1.0.1)
+    dotenv (2.7.2)
+    ffi (1.10.0)
+    fpm (1.11.0)
+      arr-pm (~> 0.0.10)
+      backports (>= 2.6.2)
+      cabin (>= 0.6.0)
+      childprocess (= 0.9.0)
+      clamp (~> 1.0.0)
+      ffi
+      json (>= 1.7.7, < 2.0)
+      pleaserun (~> 0.0.29)
+      ruby-xz (~> 0.2.3)
+      stud
+    hpricot (0.8.6)
+    insist (1.0.0)
+    io-like (0.3.0)
+    json (1.8.6)
+    mustache (0.99.8)
+    pleaserun (0.0.30)
+      cabin (> 0)
+      clamp
+      dotenv
+      insist
+      mustache (= 0.99.8)
+      stud
+    rdiscount (2.2.0.1)
+    ronn (0.7.3)
+      hpricot (>= 0.8.2)
+      mustache (>= 0.7.0)
+      rdiscount (>= 1.5.8)
+    ruby-xz (0.2.3)
+      ffi (~> 1.9)
+      io-like (~> 0.3)
+    stud (0.0.23)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  fpm
+  ronn
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/development/tools/ejson/default.nix b/nixpkgs/pkgs/development/tools/ejson/default.nix
new file mode 100644
index 000000000000..5c2efc0ab9a6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ejson/default.nix
@@ -0,0 +1,43 @@
+{ lib, bundlerEnv, ruby, buildGoModule, fetchFromGitHub }:
+let
+  # needed for manpage generation
+  gems = bundlerEnv {
+    name = "ejson-gems";
+    gemdir = ./.;
+    inherit ruby;
+  };
+in
+buildGoModule rec {
+  pname = "ejson";
+  version = "1.3.3";
+
+  src = fetchFromGitHub {
+    owner = "Shopify";
+    repo = "ejson";
+    rev = "v${version}";
+    sha256 = "sha256-M2Gk+/l1tNlIAe1/fR1WLEOey+tjCUmMAujc76gmeZA=";
+  };
+
+  vendorHash = "sha256-9+x7HrbXRoS/7ZADWwhsbynQLr3SyCbcsp9QnSubov0=";
+
+  nativeBuildInputs = [ gems ];
+
+  ldflags = [ "-s" "-w" ];
+
+  # set HOME, otherwise bundler will insert stuff in the manpages
+  postBuild = ''
+    HOME=$PWD make man SHELL=$SHELL
+  '';
+
+  postInstall = ''
+    mkdir -p $out/share
+    cp -r build/man $out/share
+  '';
+
+  meta = with lib; {
+    description = "A small library to manage encrypted secrets using asymmetric encryption";
+    license = licenses.mit;
+    homepage = "https://github.com/Shopify/ejson";
+    maintainers = [ maintainers.manveru ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ejson/gemset.nix b/nixpkgs/pkgs/development/tools/ejson/gemset.nix
new file mode 100644
index 000000000000..93fa1131f2a7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ejson/gemset.nix
@@ -0,0 +1,188 @@
+{
+  arr-pm = {
+    dependencies = ["cabin"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "07yx1g1nh4zdy38i2id1xyp42fvj4vl6i196jn7szvjfm0jx98hg";
+      type = "gem";
+    };
+    version = "0.0.10";
+  };
+  backports = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "17j5pf0b69bkn043wi4xd530ky53jbbnljr4bsjzlm4k8bzlknfn";
+      type = "gem";
+    };
+    version = "3.14.0";
+  };
+  cabin = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0b3b8j3iqnagjfn1261b9ncaac9g44zrx1kcg81yg4z9i513kici";
+      type = "gem";
+    };
+    version = "0.9.0";
+  };
+  childprocess = {
+    dependencies = ["ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0a61922kmvcxyj5l70fycapr87gz1dzzlkfpq85rfqk5vdh3d28p";
+      type = "gem";
+    };
+    version = "0.9.0";
+  };
+  clamp = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jb6l4scp69xifhicb5sffdixqkw8wgkk9k2q57kh2y36x1px9az";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  dotenv = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13cis6bf06hmz744xrsl163p6gb78xcm8g8q4pcabsy5ywyv6kag";
+      type = "gem";
+    };
+    version = "2.7.2";
+  };
+  ffi = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0j8pzj8raxbir5w5k6s7a042sb5k02pg0f8s4na1r5lan901j00p";
+      type = "gem";
+    };
+    version = "1.10.0";
+  };
+  fpm = {
+    dependencies = ["arr-pm" "backports" "cabin" "childprocess" "clamp" "ffi" "json" "pleaserun" "ruby-xz" "stud"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0khzsiqzswxpql6w2ws9dawb27zgv4nmgrjszydmm0xpv6h21jrm";
+      type = "gem";
+    };
+    version = "1.11.0";
+  };
+  hpricot = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1jn8x9ch79gqmnzgyz78kppavjh5lqx0y0r6frykga2b86rz9s6z";
+      type = "gem";
+    };
+    version = "0.8.6";
+  };
+  insist = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bw3bdwns14mapbgb8cbjmr0amvwz8y72gyclq04xp43wpp5jrvg";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  io-like = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "04nn0s2wmgxij3k760h3r8m1dgih5dmd9h4v1nn085yi824i5z6k";
+      type = "gem";
+    };
+    version = "0.3.0";
+  };
+  json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qmj7fypgb9vag723w1a49qihxrcf5shzars106ynw2zk352gbv5";
+      type = "gem";
+    };
+    version = "1.8.6";
+  };
+  mustache = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1g5hplm0k06vwxwqzwn1mq5bd02yp0h3rym4zwzw26aqi7drcsl2";
+      type = "gem";
+    };
+    version = "0.99.8";
+  };
+  pleaserun = {
+    dependencies = ["cabin" "clamp" "dotenv" "insist" "mustache" "stud"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0hgnrl67zkqaxmfkwbyscawj4wqjm7h8khpbj58s6iw54wp3408p";
+      type = "gem";
+    };
+    version = "0.0.30";
+  };
+  rdiscount = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1arvk3k06prxasq1djbj065ixar4zl171340g7wr1ww4gj9makx3";
+      type = "gem";
+    };
+    version = "2.2.0.1";
+  };
+  ronn = {
+    dependencies = ["hpricot" "mustache" "rdiscount"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "07plsxxfx5bxdk72ii9za6km0ziqlq8jh3bicr4774dalga6zpw2";
+      type = "gem";
+    };
+    version = "0.7.3";
+  };
+  ruby-xz = {
+    dependencies = ["ffi" "io-like"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "11bgpvvk0098ghvlxr4i713jmi2izychalgikwvdwmpb452r3ndw";
+      type = "gem";
+    };
+    version = "0.2.3";
+  };
+  stud = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qpb57cbpm9rwgsygqxifca0zma87drnlacv49cqs2n5iyi6z8kb";
+      type = "gem";
+    };
+    version = "0.0.23";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/electron-fiddle/default.nix b/nixpkgs/pkgs/development/tools/electron-fiddle/default.nix
new file mode 100644
index 000000000000..5fe0a88f2528
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/electron-fiddle/default.nix
@@ -0,0 +1,176 @@
+{ buildFHSEnv
+, electron_24
+, fetchFromGitHub
+, fetchYarnDeps
+, fetchurl
+, fixup_yarn_lock
+, git
+, lib
+, makeDesktopItem
+, nodejs_18
+, stdenvNoCC
+, util-linux
+, zip
+}:
+
+let
+  pname = "electron-fiddle";
+  version = "0.32.6";
+  electron = electron_24;
+  nodejs = nodejs_18;
+
+  src = fetchFromGitHub {
+    owner = "electron";
+    repo = "fiddle";
+    rev = "v${version}";
+    hash = "sha256-Iuss2xwts1aWy2rKYG7J2EvFdH8Bbedn/uZG2bi9UHw=";
+  };
+
+  # As of https://github.com/electron/fiddle/pull/1316 this is fetched
+  # from the network and has no stable hash.  Grab an old version from
+  # the repository.
+  releasesJson = fetchurl {
+    url = "https://raw.githubusercontent.com/electron/fiddle/v0.32.4~18/static/releases.json";
+    hash = "sha256-1sxd3eJ6/WjXS6XQbrgKUTNUmrhuc1dAvy+VAivGErg=";
+  };
+
+  inherit (nodejs.pkgs) yarn;
+  offlineCache = fetchYarnDeps {
+    yarnLock = "${src}/yarn.lock";
+    hash = "sha256-dwhwUWwv6RYKEMdhRBvKVXvM8n1r+Qo0D3/uFsWIOpw=";
+  };
+
+  electronDummyMirror = "https://electron.invalid/";
+  electronDummyDir = "nix";
+  electronDummyFilename =
+    builtins.baseNameOf (builtins.head (electron.src.urls));
+  electronDummyHash =
+    builtins.hashString "sha256" "${electronDummyMirror}${electronDummyDir}";
+
+  unwrapped = stdenvNoCC.mkDerivation {
+    pname = "${pname}-unwrapped";
+    inherit version src;
+
+    nativeBuildInputs = [ fixup_yarn_lock git nodejs util-linux yarn zip ];
+
+    configurePhase = ''
+      export HOME=$TMPDIR
+      fixup_yarn_lock yarn.lock
+      yarn config --offline set yarn-offline-mirror ${offlineCache}
+      yarn install --offline --frozen-lockfile --ignore-scripts --no-progress --non-interactive
+      patchShebangs node_modules
+
+      mkdir -p ~/.cache/electron/${electronDummyHash}
+      cp -ra '${electron}/libexec/electron' "$TMPDIR/electron"
+      chmod -R u+w "$TMPDIR/electron"
+      (cd "$TMPDIR/electron" && zip -0Xr ~/.cache/electron/${electronDummyHash}/${electronDummyFilename} .)
+
+      ln -s ${releasesJson} static/releases.json
+    '';
+
+    buildPhase = ''
+      ELECTRON_CUSTOM_VERSION='${electron.version}' \
+        ELECTRON_MIRROR='${electronDummyMirror}' \
+        ELECTRON_CUSTOM_DIR='${electronDummyDir}' \
+        ELECTRON_CUSTOM_FILENAME='${electronDummyFilename}' \
+        yarn --offline run package
+    '';
+
+    installPhase = ''
+      mkdir -p "$out/lib/electron-fiddle/resources"
+      cp "out/Electron Fiddle-"*/resources/app.asar "$out/lib/electron-fiddle/resources/"
+      mkdir -p "$out/share/icons/hicolor/scalable/apps"
+      cp assets/icons/fiddle.svg "$out/share/icons/hicolor/scalable/apps/electron-fiddle.svg"
+    '';
+  };
+
+  desktopItem = makeDesktopItem {
+    name = "electron-fiddle";
+    desktopName = "Electron Fiddle";
+    comment = "The easiest way to get started with Electron";
+    genericName = "Electron Fiddle";
+    exec = "electron-fiddle %U";
+    icon = "electron-fiddle";
+    startupNotify = true;
+    categories = [ "GNOME" "GTK" "Utility" ];
+    mimeTypes = [ "x-scheme-handler/electron-fiddle" ];
+  };
+
+in
+buildFHSEnv {
+  name = "electron-fiddle";
+  runScript = "${electron}/bin/electron ${unwrapped}/lib/electron-fiddle/resources/app.asar";
+
+  extraInstallCommands = ''
+    mkdir -p "$out/share/icons/hicolor/scalable/apps"
+    ln -s "${unwrapped}/share/icons/hicolor/scalable/apps/electron-fiddle.svg" "$out/share/icons/hicolor/scalable/apps/"
+    mkdir -p "$out/share/applications"
+    cp "${desktopItem}/share/applications"/*.desktop "$out/share/applications/"
+  '';
+
+  targetPkgs = pkgs:
+    with pkgs;
+    map lib.getLib [
+      # for electron-fiddle itself
+      udev
+
+      # for running Electron 22.0.0 inside
+      alsa-lib
+      atk
+      cairo
+      cups
+      dbus
+      expat
+      glib
+      gtk3
+      libdrm
+      libnotify
+      libxkbcommon
+      mesa
+      nspr
+      nss
+      pango
+      xorg.libX11
+      xorg.libXcomposite
+      xorg.libXdamage
+      xorg.libXext
+      xorg.libXfixes
+      xorg.libXrandr
+      xorg.libxcb
+
+      # for running Electron before 18.3.5/19.0.5/20.0.0 inside
+      gdk-pixbuf
+
+      # for running Electron before 16.0.0 inside
+      xorg.libxshmfence
+
+      # for running Electron before 11.0.0 inside
+      xorg.libXcursor
+      xorg.libXi
+      xorg.libXrender
+      xorg.libXtst
+
+      # for running Electron before 10.0.0 inside
+      xorg.libXScrnSaver
+
+      # for running Electron before 8.0.0 inside
+      libuuid
+
+      # for running Electron before 4.0.0 inside
+      fontconfig
+
+      # for running Electron before 3.0.0 inside
+      gnome2.GConf
+
+      # Electron 2.0.8 is the earliest working version, due to
+      # https://github.com/electron/electron/issues/13972
+    ];
+
+  meta = with lib; {
+    description = "The easiest way to get started with Electron";
+    homepage = "https://www.electronjs.org/fiddle";
+    license = licenses.mit;
+    maintainers = with maintainers; [ andersk ];
+    platforms = electron.meta.platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/electron/.gitignore b/nixpkgs/pkgs/development/tools/electron/.gitignore
new file mode 100644
index 000000000000..14d86ad62301
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/electron/.gitignore
@@ -0,0 +1 @@
+/cache
diff --git a/nixpkgs/pkgs/development/tools/electron/binary/default.nix b/nixpkgs/pkgs/development/tools/electron/binary/default.nix
new file mode 100644
index 000000000000..0cdb42a3a0b8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/electron/binary/default.nix
@@ -0,0 +1,187 @@
+{ callPackage }:
+
+let
+  mkElectron = callPackage ./generic.nix { };
+in
+rec {
+  electron-bin = electron_26-bin;
+
+  electron_10-bin = mkElectron "10.4.7" {
+    x86_64-linux = "e3ea75fcedce588c6b59cfa3a6e46ba67b789e14dc2e5b9dfe1ddf3f82b0f995";
+    x86_64-darwin = "8f01e020563b7fce68dc2e3d4bbf419320d13b088e89eb64f9645e9d73ad88fb";
+    i686-linux = "dd7fde9b3993538333ec701101554050b27d0b680196d0883ab563e8e696fc79";
+    armv7l-linux = "56f11ed14f8a620650d31c21ebd095ce59ef4286c98276802b18f9cc85560ddd";
+    aarch64-linux = "0550584518c8e98fe1113706c10fd7456ec519f7aa6867fbff17c8913327d758";
+    headers = "01x6a0r2jawjpl09ixgzap3g0z6znj34hsnnhzanavkbds0ri4k6";
+  };
+
+  electron_11-bin = mkElectron "11.5.0" {
+    x86_64-linux = "613ef8ac00c5abda425dfa48778a68f58a2e9c7c1f82539bb1a41afabbd6193f";
+    x86_64-darwin = "32937dca29fc397f0b15dbab720ed3edb88eee24f00f911984b307bf12dc8fd5";
+    i686-linux = "cd154c56d02d7b1f16e2bcd5650bddf0de9141fdbb8248adc64f6d607e5fb725";
+    armv7l-linux = "3f5a41037aaad658051d8bc8b04e8dece72b729dd1a1ed8311b365daa8deea76";
+    aarch64-linux = "f698a7743962f553fe36673f1c85bccbd918efba8f6dca3a3df39d41c8e2de3e";
+    aarch64-darwin = "749fb6bd676e174de66845b8ac959985f30a773dcb2c05553890bd99b94c9d60";
+    headers = "1zkdgpjrh1dc9j8qyrrrh49v24960yhvwi2c530qbpf2azgqj71b";
+  };
+
+  electron_12-bin = mkElectron "12.2.3" {
+    armv7l-linux = "4de83c34987ac7b3b2d0c8c84f27f9a34d9ea2764ae1e54fb609a95064e7e71a";
+    aarch64-linux = "d29d234c09ba810d89ed1fba9e405b6975916ea208d001348379f89b50d1835c";
+    x86_64-linux = "deae6d0941762147716b8298476080d961df2a32d0f6f57b244cbe3a2553cd24";
+    i686-linux = "11b4f159cd3b89d916cc05b5231c2cde53f0c6fb5be8e881824fde00daa5e8c2";
+    x86_64-darwin = "5af34f1198ce9fd17e9fa581f57a8ad2c9333187fb617fe943f30b8cde9e6231";
+    aarch64-darwin = "0db2c021a047a4cd5b28eea16490e16bc82592e3f8a4b96fbdc72a292ce13f50";
+    headers = "1idam1xirxqxqg4g7n33kdx2skk0r351m00g59a8yx9z82g06ah9";
+  };
+
+  electron_13-bin = mkElectron "13.6.9" {
+    armv7l-linux = "e70cf80ac17850f3291c19a89235c59a7a6e0c791e7965805872ce584479c419";
+    aarch64-linux = "cb570f77e46403a75b99740c41b297154f057dc3b9aa75fd235dccc5619972cf";
+    x86_64-linux = "5e29701394041ba2acd8a9bb042d77967c399b8fe007d7ffbd1d3e6bfdb9eb8a";
+    i686-linux = "7c31b60ee0e1d9966b8cf977528ace91e10ce25bb289a46eabbcf6087bee50e6";
+    x86_64-darwin = "3393f0e87f30be325b76fb2275fe2d5614d995457de77fe00fa6eef2d60f331e";
+    aarch64-darwin = "8471777eafc6fb641148a9c6acff2ea41c02a989d4d0a3a460322672d85169df";
+    headers = "0vvizddmhprprbdf6bklasz6amwc254bpc9j0zlx23d1pgyxpnhc";
+  };
+
+  electron_14-bin = mkElectron "14.2.9" {
+    armv7l-linux = "02ae6cd9ec9c2dcb2f550923576a0c851fff3e796a5048dd3806947c541fd564";
+    aarch64-linux = "631ba0f716d0272931418de42468114360bd21ec72875605fc32d67620743d2c";
+    x86_64-linux = "0a62a41e8ac4592aba347c82f9c40f3fb4c84c7d00b6bb9501d02375cd49cb7d";
+    i686-linux = "55e395a209d4a90e2dcd20a78af4724355feaba86411a39e66b977ed39de4d05";
+    x86_64-darwin = "1df5b4c4414ade75c6cbfe13d3024702b8ae7c77f3f07b8955b2459fde6a5842";
+    aarch64-darwin = "17089e54830976c4216d26e7e2e15ad2224e3b288d94973fed7e67e9b1c213b3";
+    headers = "181b2agnf4b5s81p2rdnd6wkw9c2ri4cv1x0wwf7rj60axvzvydm";
+  };
+
+  electron_15-bin = mkElectron "15.5.7" {
+    armv7l-linux = "58efcdbdd4fc88b4f9d051a0af25a9d38709d870694c9447358fcbddd2c6cdf4";
+    aarch64-linux = "994becc7d1b6ded8131cb15d2c80cd0ff443e40784adc25e55acae0c61e06697";
+    x86_64-linux = "ecafc973ba31248defad83d5f618b13278a271f5ba8f220509ec21153f5939b0";
+    i686-linux = "841f3ba960272692123134bd203b1de657aff0694fa85b2ccc59daffcebc0eb3";
+    x86_64-darwin = "c71390382371715bed1e667e2cc2525dd10784519edc4351fe2db82b5ba4f217";
+    aarch64-darwin = "55c476877d5d7040a114cc5821f7dced4d65c6110bb205b02c472420b4f4a1d9";
+    headers = "00ic356iss1pshb7r06xriqkh9zn75nd1i6cgxcm6al43bxn6vq1";
+  };
+
+  electron_16-bin = mkElectron "16.2.8" {
+    armv7l-linux = "93ba85035ab57537c3388c7b22a7ba66f9c49368aa8fea9816000c3f0f72e513";
+    aarch64-linux = "29024df822cca9a2bbb2b71d82f2ddf5af5cada80c0bd38e8ede420700297c6a";
+    x86_64-linux = "68dd612c503a82f9c0ad147e5f1d94213685bfc8fba6c4346fb542ec6fcd14e7";
+    i686-linux = "f00ac4d64bb0c4f6c4c6b317a2a7e5731eb6150f2768ccca2526b41cce612df6";
+    x86_64-darwin = "d40b00dbf2ef0e42f70b5269255101d3978e709dc3f0b6dbe0c7725fc828b3e1";
+    aarch64-darwin = "8b68d24e4902c42b934d1b4de2c0e675039d4289a2e9a4caccc6ad13c3faa5ef";
+    headers = "0b09whq5m7qbwy09ni29c23yip3k40sm88sa7ya5i1ysvp5p1v3c";
+  };
+
+  electron_17-bin = mkElectron "17.4.11" {
+    armv7l-linux = "2f148ad481fe0e06dade070caecf23b7e1564b1b27d775c9350c7a5245998af2";
+    aarch64-linux = "53618dc3fc6c04a4b4a44261987969850ad6ae56c8a5dbf21167cf0db7fc99bf";
+    x86_64-linux = "c40cc41da8f7958b4edbef953e9b0b4e830689467d1f1993c4d298677e6d0047";
+    i686-linux = "9654be64612f157a89928166f220792b5ab76240081a40594d01f763902d1007";
+    x86_64-darwin = "abd190e66826500fd5082f083d2795aca08503eff4b38cacf43d575933c99b85";
+    aarch64-darwin = "3fa2de3e6f67cc23051c23151c6aaac4d00c7595dda2adca4199242f44ab66bd";
+    headers = "1k4aay9p65vi2gkdwk2f9r3lvxn20wkf0krr5arivg1kpi03bzf6";
+  };
+
+  electron_18-bin = mkElectron "18.3.15" {
+    armv7l-linux = "2cc18781bdc5069878e544603fd66bccb9e8bf098f0250637cb5643cdc23d8bb";
+    aarch64-linux = "8fc93d852acc6722d6c4f62a74bc62d56abacb27c2b4ab644415b73e45c2e6b5";
+    x86_64-linux = "482101648dbf22e0e2c6be16cf36a9abf57028024abee56e23c143207d6ecdec";
+    i686-linux = "1a417ec687b6591800b7123fe60207984fb686156ca3b90dfd56e4ad0c1da4aa";
+    x86_64-darwin = "12927ceba4a56abaa96b28eb028f7e92e3b557c45c8b4e03a2178e7494d67ad5";
+    aarch64-darwin = "e588cbef49094a7a9d6f104f35a92a74a800a7bdadc52862d243c5e8524ed01b";
+    headers = "1rxslb022i45jd84fl311w5v0ski391s3i43kl75zyk4kha7japs";
+  };
+
+  electron_19-bin = mkElectron "19.1.9" {
+    armv7l-linux = "90b4afbf03dde52953ada2d7082fed9a8954e7547d1d93c6286ba04f9ef68987";
+    aarch64-linux = "473e07a6db8a92d4627ef1012dda590c5a04fb3d9804cc5237b033fdb6f52211";
+    x86_64-linux = "fd320675f1647e03d96764a906c51c567bf0bcbe0301550e4559d66dd76796df";
+    x86_64-darwin = "891545c70cbaed8c09b80c43587d5b517a592a2476de978ac1c6dd96cab8868f";
+    aarch64-darwin = "3d38b7f867e32d71bb75e8ba5616835cc5cfac130a70313f5de252040636bc1d";
+    headers = "06x325qksh9p4r8q9y3sqwhnk6vmvnjr1qb3f656a646vhjhp4bb";
+  };
+
+  electron_20-bin = mkElectron "20.3.12" {
+    armv7l-linux = "3319634fe22a8938e5bbabd5b7158ac5691df359aec5f6959bf0ad9fcc0d2af0";
+    aarch64-linux = "fb25d52f9416bb626fc9e2b02f06d032653cfa1d96918dd13643bbd3ffcb4529";
+    x86_64-linux = "3d21d14e528980327a328f6bab3195ed7bfa1cab97ab7d3dbb023e657f663244";
+    x86_64-darwin = "e6c8126a9e40c9b348ab4950b53472de13b66add5ba07ea0f3278ad202b35879";
+    aarch64-darwin = "e94465a1e233df6b1bebd565fdc5bb5cc180e87dd7945933ee0f9355bcdbdded";
+    headers = "0268rcqvwzjhxz32kd7djfw9dda93cm8xvzqyik0065hwgxwhcn1";
+  };
+
+  electron_21-bin = mkElectron "21.4.4" {
+    armv7l-linux = "220d9a4fe374f01dd99fe0db5670698d2b1a5c371aaa7fe04385efefb0bbacbe";
+    aarch64-linux = "b9214c775f4a767d534890d37de4625ace178b7b38ac0c0d56d87ac8e32bb7e5";
+    x86_64-linux = "9a61c8f0ad986dfc3b45d52814ff60fc1190f47a337156ecddee1d8ec34dc086";
+    x86_64-darwin = "78ad44ffac3bd2cae4fd4fea14d8ebf9087700b5074eacdb1764527c9d9baa1b";
+    aarch64-darwin = "08a362473cdd3db2e8ce21e100680b90968150741809740db75cde4d4dd2af90";
+    headers = "03mb1v5xzn2lp317r0mik9dx2nnxc7m26imygk13dgmafydd6aah";
+  };
+
+  electron_22-bin = mkElectron "22.3.27" {
+    armv7l-linux = "9f8372606e5ede83cf1c73a3d8ff07047e4e3ef614aa89a76cd497dc06cf119d";
+    aarch64-linux = "60279395a5ce4eaf3c08f1e717771b203830902d3fe3a7c311bc37deb1a0e15e";
+    x86_64-linux = "631d8eb08098c48ce2b29421e74c69ac0312b1e42f445d8a805414ba1242bf3a";
+    x86_64-darwin = "01f053d08cb2855acb14f0465f4e36324a41bd13b3b2ead142970a56df3e9db1";
+    aarch64-darwin = "2b87e9f766692caaa16d7750bfab2f609c0eab906f55996c7d438d8e18ac8867";
+    headers = "0hxp7jn30jncffw5xn8imk1hww56af34npp8ma58ha3qdm89146q";
+  };
+
+  electron_23-bin = mkElectron "23.3.13" {
+    armv7l-linux = "b88424ef80d59ebafe1ded3a48d2f92160921e5973eaad64775173825212a8a9";
+    aarch64-linux = "d353329f796798404a09a1f7271a6d824ced5dbe015e5c1d8e809aaa701a3907";
+    x86_64-linux = "2f9ab1c3bbacaa74b64f4f6ad92423302cc6b69a135ff1438a84233611e2f440";
+    x86_64-darwin = "ee6ccd4ce6c2c7bf3a0fd90b2b6347970df1663d8e48eabfc12136f9d8e2c479";
+    aarch64-darwin = "d1091c1444b9dadc39b505808d241269cd988532e7576f506acbf6d9d4e2aa80";
+    headers = "04k25z0d6xs2ar5mbbnr0phcs97kvxg28df3njhaniws6wf6qcmg";
+  };
+
+  electron_24-bin = mkElectron "24.8.6" {
+    armv7l-linux = "8f46901667a904a62df7043991f20dc1c2a00370a42159976855458562cda8fc";
+    aarch64-linux = "599e78a3a8127828ea3fa444927e7e51035dba9811ce0d81d59ad9b0bd02b4f6";
+    x86_64-linux = "61e87bbd361da101c6a8363cc9c1f8b8b51db61b076cf495d3f4424303265a96";
+    x86_64-darwin = "067ce05d628b44e1393369c506268915081ac9d96c0973d367262c71dcd91078";
+    aarch64-darwin = "d9093e6928b2247336b3f0811e4f66c4ae50a719ec9399c393ac9556c8e56cee";
+    headers = "009p1ffh2cyn98fcmprrjzq79jysp7h565v4f54wvjxjsq2nkr97";
+  };
+
+  electron_25-bin = mkElectron "25.9.0" {
+    armv7l-linux = "dab54628685fc08f9a060de6bb5c9a7910eb2f6d0118ceb257447ace42378b36";
+    aarch64-linux = "7f80fe6016aca69ded956cdd5b64f35a34c1a92a6c16d945465ba00708a4556c";
+    x86_64-linux = "c762b14eb72749b9b400f3b7fff565b6722e0974c1cfb4b6d71b9df9fa364d07";
+    x86_64-darwin = "9b676a67c6ae62b2b8972281934405861539e0c0f1dd5bf892e013d325927746";
+    aarch64-darwin = "098d3673fbca3421021477f0639cb40a54856b35b8af4fa979d0defa1ba75801";
+    headers = "0wcqz4vgkyz1zcd0ybx1ywzv9kz96hdxwk9an98v87nb1gfhk05c";
+  };
+
+  electron_26-bin = mkElectron "26.3.0" {
+    armv7l-linux = "c444d805381a8125eb16f24369bbc370751c1f6bfaa0d4613a7a94ad797f5059";
+    aarch64-linux = "740b779bf3a2032fedb6c1902e537f61e88c5e245a4e8815ec8cf471ff38aceb";
+    x86_64-linux = "38e2a68361566faa2e7f2a4639cfedee3a5889d5f64018b2ad055c8f40516312";
+    x86_64-darwin = "ea9434ad717f12771f8c508b664ed8d18179b397910ce81f4b6e21efce90b754";
+    aarch64-darwin = "97cb2d00d06f331b4c028fa96373abdd7b5a71c2aa31b56cdf67d391f889f384";
+    headers = "00r11n0i0j7brkjbb8b0b4df6kgkwdplic4l50y9l4a7sbg6i43m";
+  };
+
+  electron_27-bin = mkElectron "27.0.0" {
+    armv7l-linux = "81070012b0abbd763c59301044585be7a0f0092d80f9a8507744720e267dae2e";
+    aarch64-linux = "202c5c6817081739e7bf15127c17c84ce2e553457c69a17557dec0928d40f354";
+    x86_64-linux = "6c31e5733513c86eb5bb30169800bba5de8a055baadd9e0a5d153ea8fd2324ae";
+    x86_64-darwin = "8c2b944f3949265526410704ecd925c85ebb20d61f5c739081336bd1d29bd083";
+    aarch64-darwin = "2fc319c53f6dc61e2e424d46712caead7022b5124c9674f3b15b45c556dd0623";
+    headers = "1pb8xhaarkmgss00ap4jbf693i03z4mwh5ilpkz6dsg1b9fka84q";
+  };
+
+  electron_28-bin = mkElectron "28.0.0" {
+    armv7l-linux = "e41686b6ce7be7efb74d1f3fb4c912be31506b51770ceffa4e66b94164dac5b8";
+    aarch64-linux = "32f9f7592359cf8b341946b41d758466533bd7a2bc0dc316072a3a1af4b92d84";
+    x86_64-linux = "d66b6774b886bd57519d49b9eb8e6e745b523519414a8819f67aa19f76e2b53c";
+    x86_64-darwin = "a5fdc70519b2c17a708920af2b998fc067ff0a18ba9f97d690cfab6bac23bd7a";
+    aarch64-darwin = "d64947fee370a3b111f170399969977959848f2a2f544a1ae5dc081fc2df75cf";
+    headers = "1lrwc03ffrf4bi2faampkx7yg0iqsrcp86znp9fw6ajwdwgqsc81";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/electron/binary/generic.nix b/nixpkgs/pkgs/development/tools/electron/binary/generic.nix
new file mode 100644
index 000000000000..8f726b410000
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/electron/binary/generic.nix
@@ -0,0 +1,154 @@
+{ lib
+, stdenv
+, libXScrnSaver
+, makeWrapper
+, fetchurl
+, wrapGAppsHook
+, glib
+, gtk3
+, unzip
+, at-spi2-atk
+, libdrm
+, mesa
+, libxkbcommon
+, libxshmfence
+, libglvnd
+, alsa-lib
+, cairo
+, cups
+, dbus
+, expat
+, gdk-pixbuf
+, nss
+, nspr
+, xorg
+, pango
+, systemd
+, pciutils
+}:
+
+version: hashes:
+let
+  pname = "electron";
+
+  meta = with lib; {
+    description = "Cross platform desktop application shell";
+    homepage = "https://github.com/electron/electron";
+    license = licenses.mit;
+    mainProgram = "electron";
+    maintainers = with maintainers; [ travisbhartwell manveru ];
+    platforms = [ "x86_64-darwin" "x86_64-linux" "armv7l-linux" "aarch64-linux" ]
+      ++ optionals (versionAtLeast version "11.0.0") [ "aarch64-darwin" ]
+      ++ optionals (versionOlder version "19.0.0") [ "i686-linux" ];
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    knownVulnerabilities = optional (versionOlder version "26.0.0") "Electron version ${version} is EOL";
+  };
+
+  fetcher = vers: tag: hash: fetchurl {
+    url = "https://github.com/electron/electron/releases/download/v${vers}/electron-v${vers}-${tag}.zip";
+    sha256 = hash;
+  };
+
+  headersFetcher = vers: hash: fetchurl {
+    url = "https://artifacts.electronjs.org/headers/dist/v${vers}/node-v${vers}-headers.tar.gz";
+    sha256 = hash;
+  };
+
+  tags = {
+    x86_64-linux = "linux-x64";
+    armv7l-linux = "linux-armv7l";
+    aarch64-linux = "linux-arm64";
+    x86_64-darwin = "darwin-x64";
+  } // lib.optionalAttrs (lib.versionAtLeast version "11.0.0") {
+     aarch64-darwin = "darwin-arm64";
+  } // lib.optionalAttrs (lib.versionOlder version "19.0.0") {
+    i686-linux = "linux-ia32";
+  };
+
+  get = as: platform: as.${platform.system} or (throw "Unsupported system: ${platform.system}");
+
+  common = platform: {
+    inherit pname version meta;
+    src = fetcher version (get tags platform) (get hashes platform);
+    passthru.headers = headersFetcher version hashes.headers;
+  };
+
+  electronLibPath = lib.makeLibraryPath ([
+    alsa-lib
+    at-spi2-atk
+    cairo
+    cups
+    dbus
+    expat
+    gdk-pixbuf
+    glib
+    gtk3
+    nss
+    nspr
+    xorg.libX11
+    xorg.libxcb
+    xorg.libXcomposite
+    xorg.libXdamage
+    xorg.libXext
+    xorg.libXfixes
+    xorg.libXrandr
+    xorg.libxkbfile
+    pango
+    pciutils
+    stdenv.cc.cc.lib
+    systemd
+  ]
+    ++ lib.optionals (lib.versionAtLeast version "9.0.0") [ libdrm mesa ]
+    ++ lib.optionals (lib.versionOlder version "10.0.0") [ libXScrnSaver ]
+    ++ lib.optionals (lib.versionAtLeast version "11.0.0") [ libxkbcommon ]
+    ++ lib.optionals (lib.versionAtLeast version "12.0.0") [ libxshmfence ]
+    ++ lib.optionals (lib.versionAtLeast version "17.0.0") [ libglvnd ]
+  );
+
+  linux = {
+    buildInputs = [ glib gtk3 ];
+
+    nativeBuildInputs = [
+      unzip
+      makeWrapper
+      wrapGAppsHook
+    ];
+
+    dontUnpack = true;
+    dontBuild = true;
+
+    installPhase = ''
+      mkdir -p $out/libexec/electron $out/bin
+      unzip -d $out/libexec/electron $src
+      ln -s $out/libexec/electron/electron $out/bin
+      chmod u-x $out/libexec/electron/*.so*
+    '';
+
+    postFixup = ''
+      patchelf \
+        --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+        --set-rpath "${electronLibPath}:$out/libexec/electron" \
+        $out/libexec/electron/.electron-wrapped \
+        ${lib.optionalString (lib.versionAtLeast version "15.0.0") "$out/libexec/electron/.chrome_crashpad_handler-wrapped" }
+    '';
+  };
+
+  darwin = {
+    nativeBuildInputs = [
+      makeWrapper
+      unzip
+    ];
+
+    buildCommand = ''
+      mkdir -p $out/Applications
+      unzip $src
+      mv Electron.app $out/Applications
+      mkdir -p $out/bin
+      makeWrapper $out/Applications/Electron.app/Contents/MacOS/Electron $out/bin/electron
+    '';
+  };
+in
+  stdenv.mkDerivation (
+    (common stdenv.hostPlatform) //
+    (if stdenv.isDarwin then darwin else linux)
+  )
diff --git a/nixpkgs/pkgs/development/tools/electron/binary/print-hashes.sh b/nixpkgs/pkgs/development/tools/electron/binary/print-hashes.sh
new file mode 100755
index 000000000000..37cd7d3c662b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/electron/binary/print-hashes.sh
@@ -0,0 +1,38 @@
+#!/usr/bin/env bash
+
+set -eu -o pipefail
+
+if [[ $# -lt 1 ]]; then
+    echo "$0: version" >&2
+    exit 1
+fi
+
+VERSION="$1"
+
+declare -A SYSTEMS HASHES
+SYSTEMS=(
+    [i686-linux]=linux-ia32
+    [x86_64-linux]=linux-x64
+    [armv7l-linux]=linux-armv7l
+    [aarch64-linux]=linux-arm64
+    [x86_64-darwin]=darwin-x64
+    [aarch64-darwin]=darwin-arm64
+)
+
+hashfile="$(nix-prefetch-url --print-path "https://github.com/electron/electron/releases/download/v${VERSION}/SHASUMS256.txt" | tail -n1)"
+headers="$(nix-prefetch-url "https://artifacts.electronjs.org/headers/dist/v${VERSION}/node-v${VERSION}-headers.tar.gz")"
+
+# Entry similar to the following goes in default.nix:
+
+echo "  electron_${VERSION%%.*}-bin = mkElectron \"${VERSION}\" {"
+
+for S in "${!SYSTEMS[@]}"; do
+  hash="$(grep " *electron-v${VERSION}-${SYSTEMS[$S]}.zip$" "$hashfile"|cut -f1 -d' ' || :)"
+  if [[ -n $hash ]]; then
+    echo "    $S = \"$hash\";"
+  fi
+done
+
+echo "    headers = \"$headers\";"
+
+echo "  };"
diff --git a/nixpkgs/pkgs/development/tools/electron/common.nix b/nixpkgs/pkgs/development/tools/electron/common.nix
new file mode 100644
index 000000000000..823b45971139
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/electron/common.nix
@@ -0,0 +1,212 @@
+{ lib
+, stdenv
+, chromium
+, nodejs
+, python3
+, fetchYarnDeps
+, fetchNpmDeps
+, prefetch-yarn-deps
+, npmHooks
+, yarn
+, substituteAll
+, libnotify
+, unzip
+, pkgs
+, pkgsBuildHost
+
+, info
+}:
+
+let
+  fetchdep = dep: let
+    opts = removeAttrs dep ["fetcher"];
+  in pkgs.${dep.fetcher} opts;
+
+in (chromium.override { upstream-info = info.chromium; }).mkDerivation (base: {
+  packageName = "electron";
+  inherit (info) version;
+  buildTargets = [ "electron:electron_dist_zip" ];
+
+  nativeBuildInputs = base.nativeBuildInputs ++ [ nodejs yarn prefetch-yarn-deps unzip npmHooks.npmConfigHook ];
+  buildInputs = base.buildInputs ++ [ libnotify ];
+
+  electronOfflineCache = fetchYarnDeps {
+    yarnLock = (fetchdep info.deps."src/electron") + "/yarn.lock";
+    sha256 = info.electron_yarn_hash;
+  };
+  npmDeps = fetchNpmDeps {
+    src = fetchdep info.deps."src";
+    sourceRoot = "source/third_party/node";
+    hash = info.chromium_npm_hash;
+  };
+
+  src = null;
+
+  patches = base.patches ++ lib.optional (lib.versionOlder info.version "27")
+    (substituteAll {
+      name = "version.patch";
+      src = ./version.patch;
+      inherit (info) version;
+    })
+  ;
+
+  unpackPhase = ''
+    runHook preUnpack
+  '' + (
+    lib.concatStrings (lib.mapAttrsToList (path: dep: ''
+      mkdir -p ${builtins.dirOf path}
+      cp -r ${fetchdep dep}/. ${path}
+      chmod u+w -R ${path}
+    '') info.deps)
+  ) + ''
+    sourceRoot=src
+    runHook postUnpack
+  '';
+
+  npmRoot = "third_party/node";
+
+  postPatch = ''
+    mkdir -p third_party/jdk/current/bin
+
+    echo 'build_with_chromium = true' >> build/config/gclient_args.gni
+    echo 'checkout_google_benchmark = false' >> build/config/gclient_args.gni
+    echo 'checkout_android = false' >> build/config/gclient_args.gni
+    echo 'checkout_android_prebuilts_build_tools = false' >> build/config/gclient_args.gni
+    echo 'checkout_android_native_support = false' >> build/config/gclient_args.gni
+    echo 'checkout_ios_webkit = false' >> build/config/gclient_args.gni
+    echo 'checkout_nacl = false' >> build/config/gclient_args.gni
+    echo 'checkout_openxr = false' >> build/config/gclient_args.gni
+    echo 'checkout_rts_model = false' >> build/config/gclient_args.gni
+    echo 'checkout_src_internal = false' >> build/config/gclient_args.gni
+    echo 'cros_boards = ""' >> build/config/gclient_args.gni
+    echo 'cros_boards_with_qemu_images = ""' >> build/config/gclient_args.gni
+    echo 'generate_location_tags = true' >> build/config/gclient_args.gni
+
+    echo 'LASTCHANGE=${info.deps."src".rev}-refs/heads/master@{#0}'        > build/util/LASTCHANGE
+    echo "$SOURCE_DATE_EPOCH"                                              > build/util/LASTCHANGE.committime
+
+    cat << EOF > gpu/config/gpu_lists_version.h
+    /* Generated by lastchange.py, do not edit.*/
+    #ifndef GPU_CONFIG_GPU_LISTS_VERSION_H_
+    #define GPU_CONFIG_GPU_LISTS_VERSION_H_
+    #define GPU_LISTS_VERSION "${info.deps."src".rev}"
+    #endif  // GPU_CONFIG_GPU_LISTS_VERSION_H_
+    EOF
+
+    cat << EOF > skia/ext/skia_commit_hash.h
+    /* Generated by lastchange.py, do not edit.*/
+    #ifndef SKIA_EXT_SKIA_COMMIT_HASH_H_
+    #define SKIA_EXT_SKIA_COMMIT_HASH_H_
+    #define SKIA_COMMIT_HASH "${info.deps."src/third_party/skia".rev}-"
+    #endif  // SKIA_EXT_SKIA_COMMIT_HASH_H_
+    EOF
+
+    echo -n '${info.deps."src/third_party/dawn".rev}'                     > gpu/webgpu/DAWN_VERSION
+
+    (
+      cd electron
+      export HOME=$TMPDIR/fake_home
+      yarn config --offline set yarn-offline-mirror $electronOfflineCache
+      fixup-yarn-lock yarn.lock
+      yarn install --offline --frozen-lockfile --ignore-scripts --no-progress --non-interactive
+    )
+
+    (
+      cd ..
+      PATH=$PATH:${lib.makeBinPath (with pkgsBuildHost; [ jq git ])}
+      config=src/electron/patches/config.json
+      for key in $(jq -r "keys[]" $config)
+      do
+        value=$(jq -r ".\"$key\"" $config)
+        for patch in $(cat $key/.patches)
+        do
+          echo applying in $value: $patch
+          git apply -p1 --directory=$value --exclude='src/third_party/blink/web_tests/*' $key/$patch
+        done
+      done
+    )
+  '' + base.postPatch;
+
+  preConfigure = ''
+    (
+      cd third_party/node
+      grep patch update_npm_deps | sh
+    )
+  '' + (base.preConfigure or "");
+
+  gnFlags = rec {
+    # build/args/release.gn
+    is_component_build = false;
+    is_official_build = true;
+    rtc_use_h264 = proprietary_codecs;
+    is_component_ffmpeg = true;
+
+    # build/args/all.gn
+    is_electron_build = true;
+    root_extra_deps = [ "//electron" ];
+    node_module_version = info.modules;
+    v8_promise_internal_field_count = 1;
+    v8_embedder_string = "-electron.0";
+    v8_enable_snapshot_native_code_counters = false;
+    v8_scriptormodule_legacy_lifetime = true;
+    v8_enable_javascript_promise_hooks = true;
+    enable_cdm_host_verification = false;
+    proprietary_codecs = true;
+    ffmpeg_branding = "Chrome";
+    enable_printing = true;
+    angle_enable_vulkan_validation_layers = false;
+    dawn_enable_vulkan_validation_layers = false;
+    enable_pseudolocales = false;
+    allow_runtime_configurable_key_storage = true;
+    enable_cet_shadow_stack = false;
+    is_cfi = false;
+    use_qt = false;
+
+    enable_widevine = false;
+    use_perfetto_client_library = false;
+    enable_check_raw_ptr_fields = false;
+  } // lib.optionalAttrs (lib.versionAtLeast info.version "27")  {
+    override_electron_version = info.version;
+  };
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $libExecPath
+    unzip -d $libExecPath out/Release/dist.zip
+
+    runHook postInstall
+  '';
+
+  requiredSystemFeatures = [ "big-parallel" ];
+
+  passthru = {
+    inherit info;
+    headers = stdenv.mkDerivation rec {
+      name = "node-v${info.node}-headers.tar.gz";
+      nativeBuildInputs = [ python3 ];
+      src = fetchdep info.deps."src/third_party/electron_node";
+      buildPhase = ''
+        runHook preBuild
+        make tar-headers
+        runHook postBuild
+      '';
+      installPhase = ''
+        runHook preInstall
+        mv ${name} $out
+        runHook postInstall
+      '';
+    };
+  };
+
+  meta = with lib; {
+    description = "Cross platform desktop application shell";
+    homepage = "https://github.com/electron/electron";
+    platforms = lib.platforms.linux;
+    license = licenses.mit;
+    maintainers = with maintainers; [ yuka ];
+    mainProgram = "electron";
+    hydraPlatforms = lib.optionals (!(hasInfix "alpha" info.version) && !(hasInfix "beta" info.version)) ["aarch64-linux" "x86_64-linux"];
+    timeout = 172800; # 48 hours (increased from the Hydra default of 10h)
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/electron/default.nix b/nixpkgs/pkgs/development/tools/electron/default.nix
new file mode 100644
index 000000000000..8c97837160d1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/electron/default.nix
@@ -0,0 +1,12 @@
+{ lib, callPackage }:
+
+let
+  versions = lib.importJSON ./info.json;
+in
+  lib.mapAttrs' (version: info:
+    lib.nameValuePair "electron_${version}" (
+      let
+        electron-unwrapped = callPackage ./common.nix { inherit info; };
+      in callPackage ./wrapper.nix { inherit electron-unwrapped; }
+    )
+  ) versions
diff --git a/nixpkgs/pkgs/development/tools/electron/info.json b/nixpkgs/pkgs/development/tools/electron/info.json
new file mode 100644
index 000000000000..6a493f49d435
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/electron/info.json
@@ -0,0 +1,2630 @@
+{
+    "28": {
+        "deps": {
+            "src/electron": {
+                "fetcher": "fetchFromGitHub",
+                "hash": "sha256-FH1M/usdQ4BibO6PSoUPZG2MgsMTG/SfIcBJATrgZcE=",
+                "owner": "electron",
+                "repo": "electron",
+                "rev": "v28.2.2"
+            },
+            "src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-AVCD/B0Zb0/FhX+w40UAV3Z0awOn089kt3FrWJGULUw=",
+                "url": "https://chromium.googlesource.com/chromium/src.git",
+                "rev": "120.0.6099.276",
+                "postFetch": "rm -r $out/third_party/blink/web_tests; rm -r $out/third_party/hunspell/tests; rm -r $out/content/test/data; rm -r $out/courgette/testdata; rm -r $out/extensions/test/data; rm -r $out/media/test/data; "
+            },
+            "src/third_party/clang-format/script": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-7VvofDDQe+SoMRBfVk26q+C+OPyOE7QH35wVWkfDKxs=",
+                "url": "https://chromium.googlesource.com/external/github.com/llvm/llvm-project/clang/tools/clang-format.git",
+                "rev": "e5337933f2951cacd3aeacd238ce4578163ca0b9"
+            },
+            "src/third_party/libc++/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-DVO15xGxatRbUp13EoNslGEZ2QSHn97VbEBHyfMvKfQ=",
+                "url": "https://chromium.googlesource.com/external/github.com/llvm/llvm-project/libcxx.git",
+                "rev": "a429c26ae25c26a569ff12390d5f9be70c5e286b"
+            },
+            "src/third_party/libc++abi/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-QjCPRgFU34wZ8GG/dl+6wi2gflje3fG/x+eokb9W02c=",
+                "url": "https://chromium.googlesource.com/external/github.com/llvm/llvm-project/libcxxabi.git",
+                "rev": "2ca9f38714b1465b9f55b5fbd0da5e4342811e2b"
+            },
+            "src/third_party/libunwind/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-bQHo8CKDpqvJcVv6OzVO7LOGTqL9qHqD4n9TtRK0v5g=",
+                "url": "https://chromium.googlesource.com/external/github.com/llvm/llvm-project/libunwind.git",
+                "rev": "7686b5d38c69d14932abfb1c1a66ba56c78791ad"
+            },
+            "src/chrome/test/data/perf/canvas_bench": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-svOuyBGKloBLM11xLlWCDsB4PpRjdKTBdW2UEW4JQjM=",
+                "url": "https://chromium.googlesource.com/chromium/canvas_bench.git",
+                "rev": "a7b40ea5ae0239517d78845a5fc9b12976bfc732"
+            },
+            "src/chrome/test/data/perf/frame_rate/content": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-t4kcuvH0rkPBkcdiMsoNQaRwU09eU+oSvyHDiAHrKXo=",
+                "url": "https://chromium.googlesource.com/chromium/frame_rate/content.git",
+                "rev": "c10272c88463efeef6bb19c9ec07c42bc8fe22b9"
+            },
+            "src/chrome/test/data/xr/webvr_info": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-BsAPwc4oEWri0TlqhyxqFNqKdfgVSrB0vQyISmYY4eg=",
+                "url": "https://chromium.googlesource.com/external/github.com/toji/webvr.info.git",
+                "rev": "c58ae99b9ff9e2aa4c524633519570bf33536248"
+            },
+            "src/docs/website": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-+UawYfW5FAMpv0TbzSR8qITPGUQulLIZ0mUh6ZdnmMI=",
+                "url": "https://chromium.googlesource.com/website.git",
+                "rev": "07714da3c28b942dc8522affed4487403e971545"
+            },
+            "src/media/cdm/api": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-6J6aSYW0or99VAgMNJJOdJqMJspoG7w1HxDN50MV5bw=",
+                "url": "https://chromium.googlesource.com/chromium/cdm.git",
+                "rev": "fef0b5aa1bd31efb88dfab804bdbe614f3d54f28"
+            },
+            "src/net/third_party/quiche/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-JXWGEsJrXRXs2BrkWIC8cUBD6uvt8ftb9V5Dy2yLc/w=",
+                "url": "https://quiche.googlesource.com/quiche.git",
+                "rev": "a01a131ca6df63e774809d623f47e8cf28c574cc"
+            },
+            "src/third_party/angle": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-aOV7kxrF8FeoHYodZjaUrDDUtpXg2gUiZg6Olv90puk=",
+                "url": "https://chromium.googlesource.com/angle/angle.git",
+                "rev": "6fff8ebc937f07e31473ac014a55f662248ab39a"
+            },
+            "src/third_party/angle/third_party/glmark2/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-L7+zWM0qn8WFhmON7DGvarTsN1YHt1sn5+hazTOZrrk=",
+                "url": "https://chromium.googlesource.com/external/github.com/glmark2/glmark2",
+                "rev": "ca8de51fedb70bace5351c6b002eb952c747e889"
+            },
+            "src/third_party/angle/third_party/rapidjson/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-btUl1a/B0sXwf/+hyvCvVJjWqIkXfVYCpHm3TeBuOxk=",
+                "url": "https://chromium.googlesource.com/external/github.com/Tencent/rapidjson",
+                "rev": "781a4e667d84aeedbeb8184b7b62425ea66ec59f"
+            },
+            "src/third_party/angle/third_party/VK-GL-CTS/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-+g1yjF1yETrL1X6Cxu5mhPWXukWygg1dnawU8S9cGkA=",
+                "url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/VK-GL-CTS",
+                "rev": "7d738783bf286e82937e431c295d4682f3767267"
+            },
+            "src/third_party/anonymous_tokens/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-2B0j9vNF8nMhmedk+ghz4JJJiDKN6jnVfdqsa4zRWeU=",
+                "url": "https://chromium.googlesource.com/external/github.com/google/anonymous-tokens.git",
+                "rev": "47d423347823088a21b26262ca553eadb8e5b220"
+            },
+            "src/third_party/content_analysis_sdk/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-f5Jmk1MiGjaRdLun+v/GKVl8Yv9hOZMTQUSxgiJalcY=",
+                "url": "https://chromium.googlesource.com/external/github.com/chromium/content_analysis_sdk.git",
+                "rev": "9a408736204513e0e95dd2ab3c08de0d95963efc"
+            },
+            "src/third_party/dav1d/libdav1d": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-9SrbxiOqXKTFf4qZ4Wqg9aoOMY8zv7NczTqN2+lXwCI=",
+                "url": "https://chromium.googlesource.com/external/github.com/videolan/dav1d.git",
+                "rev": "47107e384bd1dc25674acf04d000a8cdc6195234"
+            },
+            "src/third_party/dawn": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-5srmcwL9Zqv91LwoBf9xuyusq1ghDo30Aj27Xo96yPc=",
+                "url": "https://dawn.googlesource.com/dawn.git",
+                "rev": "c7ed440d75861649d8a1ef4b775384f31211d902"
+            },
+            "src/third_party/dawn/third_party/glfw": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-TwAPRjQxIz3J+zbNxzCp5Tek7MwisxdekMpY5QGsKyg=",
+                "url": "https://chromium.googlesource.com/external/github.com/glfw/glfw",
+                "rev": "62e175ef9fae75335575964c845a302447c012c7"
+            },
+            "src/third_party/dawn/third_party/dxc": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-EAfTm0QZcihcU6ufBHE1QsYRggNWNKHjVZXcrUp/T+c=",
+                "url": "https://chromium.googlesource.com/external/github.com/microsoft/DirectXShaderCompiler",
+                "rev": "64030a4e01e27c608b6c5f1ab5add43575e086f9"
+            },
+            "src/third_party/dawn/third_party/dxheaders": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-0Miw1Cy/jmOo7bLFBOHuTRDV04cSeyvUEyPkpVsX9DA=",
+                "url": "https://chromium.googlesource.com/external/github.com/microsoft/DirectX-Headers",
+                "rev": "980971e835876dc0cde415e8f9bc646e64667bf7"
+            },
+            "src/third_party/dawn/third_party/khronos/OpenGL-Registry": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-K3PcRIiD3AmnbiSm5TwaLs4Gu9hxaN8Y91WMKK8pOXE=",
+                "url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/OpenGL-Registry",
+                "rev": "5bae8738b23d06968e7c3a41308568120943ae77"
+            },
+            "src/third_party/dawn/third_party/khronos/EGL-Registry": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-Z6DwLfgQ1wsJXz0KKJyVieOatnDmx3cs0qJ6IEgSq1A=",
+                "url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/EGL-Registry",
+                "rev": "7dea2ed79187cd13f76183c4b9100159b9e3e071"
+            },
+            "src/third_party/dawn/third_party/webgpu-cts": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-DqQIyZU6kYYRoouIiJnJBit8l38wPu08zbJhM2BQbs4=",
+                "url": "https://chromium.googlesource.com/external/github.com/gpuweb/cts",
+                "rev": "2ef3f322027bec1bb5572f5083d478148d355d79"
+            },
+            "src/third_party/highway/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-kNb9UVcFq2BIf9nftUgN8ciFFCzRCou/sLwVf08jf3E=",
+                "url": "https://chromium.googlesource.com/external/github.com/google/highway.git",
+                "rev": "8f20644eca693cfb74aa795b0006b6779c370e7a"
+            },
+            "src/third_party/google_benchmark/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-h2ryAQAuHI54Cni88L85e7Np4KATGVTRdDcmUvCNeWc=",
+                "url": "https://chromium.googlesource.com/external/github.com/google/benchmark.git",
+                "rev": "b177433f3ee2513b1075140c723d73ab8901790f"
+            },
+            "src/third_party/boringssl/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-hxPNJzWS2f4iUsNYwRvxiTL9vRrcZzZT5KpIx3+WuGM=",
+                "url": "https://boringssl.googlesource.com/boringssl.git",
+                "rev": "c38dc29860a72540eb2c4fdb8a8bfb27ef94ddf3"
+            },
+            "src/third_party/breakpad/breakpad": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-8AkC/8oX4OWAcV21laJ0AeMRB9G04rFc6UJFy7Wus4A=",
+                "url": "https://chromium.googlesource.com/breakpad/breakpad.git",
+                "rev": "8988364bcddd9b194b0bf931c10bc125987330ed"
+            },
+            "src/third_party/cast_core/public/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-AalRQhJmornCqmvE2+36J/3LubaA0jr6P1PXy32lX4I=",
+                "url": "https://chromium.googlesource.com/cast_core/public",
+                "rev": "71f51fd6fa45fac73848f65421081edd723297cd"
+            },
+            "src/third_party/catapult": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-jueHC5YC+WmGRtGZ8yD6QT2pVj21n1THpIz/vI9M334=",
+                "url": "https://chromium.googlesource.com/catapult.git",
+                "rev": "47efdb4b1428e549c58a6d6c2fa79c4a8ceaf9b4"
+            },
+            "src/third_party/ced/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-ySG74Rj2i2c/PltEgHVEDq+N8yd9gZmxNktc56zIUiY=",
+                "url": "https://chromium.googlesource.com/external/github.com/google/compact_enc_det.git",
+                "rev": "ba412eaaacd3186085babcd901679a48863c7dd5"
+            },
+            "src/third_party/chromium-variations": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-cRFzDmGoyrxwPDVvatGm3EutOXtWqqlI7v7BeX5d43s=",
+                "url": "https://chromium.googlesource.com/chromium-variations.git",
+                "rev": "cb7fe7e32de8b885ccdd6293444d8e4028b03eca"
+            },
+            "src/third_party/cld_3/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-C3MOMBUy9jgkT9BAi/Fgm2UH4cxRuwSBEcRl3hzM2Ss=",
+                "url": "https://chromium.googlesource.com/external/github.com/google/cld_3.git",
+                "rev": "b48dc46512566f5a2d41118c8c1116c4f96dc661"
+            },
+            "src/third_party/colorama/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-6ZTdPYSHdQOLYMSnE+Tp7PgsVTs3U2awGu9Qb4Rg/tk=",
+                "url": "https://chromium.googlesource.com/external/colorama.git",
+                "rev": "3de9f013df4b470069d03d250224062e8cf15c49"
+            },
+            "src/third_party/cpu_features/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-E8LoVzhe+TAmARWZTSuINlsVhzpUJMxPPCGe/dHZcyA=",
+                "url": "https://chromium.googlesource.com/external/github.com/google/cpu_features.git",
+                "rev": "936b9ab5515dead115606559502e3864958f7f6e"
+            },
+            "src/third_party/cpuinfo/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-BcSG/1aa/cyT8CCd1Qdsm/yXa5bCrmrtaRxnYjwkspY=",
+                "url": "https://chromium.googlesource.com/external/github.com/pytorch/cpuinfo.git",
+                "rev": "76d5e8f5b563daa65340a60fce0e9aec73a936df"
+            },
+            "src/third_party/crc32c/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-urg0bmnfMfHagLPELp4WrNCz1gBZ6DFOWpDue1KsMtc=",
+                "url": "https://chromium.googlesource.com/external/github.com/google/crc32c.git",
+                "rev": "fa5ade41ee480003d9c5af6f43567ba22e4e17e6"
+            },
+            "src/third_party/cros_system_api": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-wI4rx+oQ6i8yIB8NBp/O471O4pVJL3l+ez0t8I5oD/w=",
+                "url": "https://chromium.googlesource.com/chromiumos/platform2/system_api.git",
+                "rev": "00c21541508ea2c6863f1cda24ef88ef30309ae8"
+            },
+            "src/third_party/crossbench": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-s/+y5bMj+CRnljFZ5aWKirPCsRUjckLOZ5F65WnPYSY=",
+                "url": "https://chromium.googlesource.com/crossbench.git",
+                "rev": "06981428c28d66678ebec13ca1fac3785cf51bb1"
+            },
+            "src/third_party/depot_tools": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-WtosDcMOV9eh0PhTbB5w3x3AYQs3Ui4h3mV0Ib0CBlc=",
+                "url": "https://chromium.googlesource.com/chromium/tools/depot_tools.git",
+                "rev": "9f3b33a275e7a5b19d8ce4aba7960d2a38858681"
+            },
+            "src/third_party/devtools-frontend/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-B/2Qk5LSElBPNImlZHVF3A4g0GFE9OHG/+4QADpK+8w=",
+                "url": "https://chromium.googlesource.com/devtools/devtools-frontend",
+                "rev": "a6c7f00333881a7ecf7044b725052ab0c8776d6f"
+            },
+            "src/third_party/dom_distiller_js/dist": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-yuEBD2XQlV3FGI/i7lTmJbCqzeBiuG1Qow8wvsppGJw=",
+                "url": "https://chromium.googlesource.com/chromium/dom-distiller/dist.git",
+                "rev": "199de96b345ada7c6e7e6ba3d2fa7a6911b8767d"
+            },
+            "src/third_party/eigen3/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-mfS/l+V0If3fmXvA1p5gtyrNCU6IqWYrBbzm4jkXC3I=",
+                "url": "https://chromium.googlesource.com/external/gitlab.com/libeigen/eigen.git",
+                "rev": "aa6964bf3a34fd607837dd8123bc42465185c4f8"
+            },
+            "src/third_party/farmhash/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-5n58VEUxa/K//jAfZqG4cXyfxrp50ogWDNYcgiXVHdc=",
+                "url": "https://chromium.googlesource.com/external/github.com/google/farmhash.git",
+                "rev": "816a4ae622e964763ca0862d9dbd19324a1eaf45"
+            },
+            "src/third_party/ffmpeg": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-lomUDmbbYW95BHEuYmm0pVqf++nYEa2XxeW4ag36tgc=",
+                "url": "https://chromium.googlesource.com/chromium/third_party/ffmpeg.git",
+                "rev": "e1ca3f06adec15150a171bc38f550058b4bbb23b"
+            },
+            "src/third_party/flac": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-gvTFPNOlBfozptaH7lTb9iD/09AmpdT3kCl9ClszjEs=",
+                "url": "https://chromium.googlesource.com/chromium/deps/flac.git",
+                "rev": "689da3a7ed50af7448c3f1961d1791c7c1d9c85c"
+            },
+            "src/third_party/flatbuffers/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-LecJwLDG6szZZ/UOCFD+MDqH3NKawn0sdEwgnMt8wMM=",
+                "url": "https://chromium.googlesource.com/external/github.com/google/flatbuffers.git",
+                "rev": "bcb9ef187628fe07514e57756d05e6a6296f7dc5"
+            },
+            "src/third_party/fontconfig/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-7PFmgr/+KNEYxCMuxMD2Zi9Ydcbp88IU7exr55a392Q=",
+                "url": "https://chromium.googlesource.com/external/fontconfig.git",
+                "rev": "2fb3419a92156569bc1ec707401258c922cd0d99"
+            },
+            "src/third_party/fp16/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-m2d9bqZoGWzuUPGkd29MsrdscnJRtuIkLIMp3fMmtRY=",
+                "url": "https://chromium.googlesource.com/external/github.com/Maratyszcza/FP16.git",
+                "rev": "0a92994d729ff76a58f692d3028ca1b64b145d91"
+            },
+            "src/third_party/gemmlowp/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-O5wD8wxgis0qYMaY+xZ21GBDVQFphMRvInCOswS6inA=",
+                "url": "https://chromium.googlesource.com/external/github.com/google/gemmlowp.git",
+                "rev": "13d57703abca3005d97b19df1f2db731607a7dc2"
+            },
+            "src/third_party/grpc/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-64JEVCx/PCM0dvv7kAQvSjLc0QbRAZVBDzwD/FAV6T8=",
+                "url": "https://chromium.googlesource.com/external/github.com/grpc/grpc.git",
+                "rev": "822dab21d9995c5cf942476b35ca12a1aa9d2737"
+            },
+            "src/third_party/freetype/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-wyaCNPPL2CTZYY6YUUuGnN3TjHxgKeHAYsw+r88ijMI=",
+                "url": "https://chromium.googlesource.com/chromium/src/third_party/freetype2.git",
+                "rev": "55d0287cfc31115760cb13caa346b407ef0c0ceb"
+            },
+            "src/third_party/freetype-testing/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-2aHPchIK5Oce5+XxdXVCC+8EM6i0XT0rFbjSIVa2L1A=",
+                "url": "https://chromium.googlesource.com/external/github.com/freetype/freetype2-testing.git",
+                "rev": "7a69b1a2b028476f840ab7d4a2ffdfe4eb2c389f"
+            },
+            "src/third_party/fxdiv/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-LjX5kivfHbqCIA5pF9qUvswG1gjOFo3CMpX0VR+Cn38=",
+                "url": "https://chromium.googlesource.com/external/github.com/Maratyszcza/FXdiv.git",
+                "rev": "63058eff77e11aa15bf531df5dd34395ec3017c8"
+            },
+            "src/third_party/harfbuzz-ng/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-xCsfgbsWVSiuII5zFspssrqX4NrRuhzufYSq6fdnjKQ=",
+                "url": "https://chromium.googlesource.com/external/github.com/harfbuzz/harfbuzz.git",
+                "rev": "f26fd69d858642d76413b8f4068eaf9b57c40a5f"
+            },
+            "src/third_party/emoji-segmenter/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-oT9mAKoKnrsFsBAeTRfPOXM76HRQQabFAlPpfKUGFhs=",
+                "url": "https://chromium.googlesource.com/external/github.com/google/emoji-segmenter.git",
+                "rev": "9ba6d25d0d9313569665d4a9d2b34f0f39f9a50e"
+            },
+            "src/third_party/ots/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-kiUXrXsaGOzPkKh0dVmU1I13WHt0Stzj7QLMqHN9FbU=",
+                "url": "https://chromium.googlesource.com/external/github.com/khaledhosny/ots.git",
+                "rev": "46bea9879127d0ff1c6601b078e2ce98e83fcd33"
+            },
+            "src/third_party/libgav1/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-dT8/Mdit3Qc5Sno6DYKv1qSNr+6Lhiy24ZNNBKoVq8I=",
+                "url": "https://chromium.googlesource.com/codecs/libgav1.git",
+                "rev": "df0023cc95b8e606a2fd243522d823401ef86637"
+            },
+            "src/third_party/googletest/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-VYRjcM3dDY2FarviXyFMgSkXCqKfWXwtGAj2Msgm7zg=",
+                "url": "https://chromium.googlesource.com/external/github.com/google/googletest.git",
+                "rev": "af29db7ec28d6df1c7f0f745186884091e602e07"
+            },
+            "src/third_party/hunspell_dictionaries": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-67mvpJRFFa9eMfyqFMURlbxOaTJBICnk+gl0b0mEHl8=",
+                "url": "https://chromium.googlesource.com/chromium/deps/hunspell_dictionaries.git",
+                "rev": "41cdffd71c9948f63c7ad36e1fb0ff519aa7a37e"
+            },
+            "src/third_party/icu": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-9yFRBrHdWcYgrZAaigS8XnxNsqJNklGdFkAAgVdHXFU=",
+                "url": "https://chromium.googlesource.com/chromium/deps/icu.git",
+                "rev": "a622de35ac311c5ad390a7af80724634e5dc61ed"
+            },
+            "src/third_party/jsoncpp/source": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-bSLNcoYBz3QCt5VuTR056V9mU2PmBuYBa0W6hFg2m8Q=",
+                "url": "https://chromium.googlesource.com/external/github.com/open-source-parsers/jsoncpp.git",
+                "rev": "42e892d96e47b1f6e29844cc705e148ec4856448"
+            },
+            "src/third_party/leveldatabase/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-TTX2FrmcWsgqrh4uzqMyGnnnG51cVC2ILfdLxD65MLY=",
+                "url": "https://chromium.googlesource.com/external/leveldb.git",
+                "rev": "068d5ee1a3ac40dabd00d211d5013af44be55bea"
+            },
+            "src/third_party/libFuzzer/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-T0dO+1A0r6kLFoleMkY8heu80biPntCpvA6YfqA7b+E=",
+                "url": "https://chromium.googlesource.com/external/github.com/llvm/llvm-project/compiler-rt/lib/fuzzer.git",
+                "rev": "758bd21f103a501b362b1ca46fa8fcb692eaa303"
+            },
+            "src/third_party/fuzztest/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-wuB/lbkVCbisZvVFuLdE8XNDuiLQcI47/Y0EqvOCytc=",
+                "url": "https://chromium.googlesource.com/external/github.com/google/fuzztest.git",
+                "rev": "b5dbc33890d9586e4f6a213f1bf163ad287e6aa4"
+            },
+            "src/third_party/libaddressinput/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-xvUUQSPrvqUp5DI9AqlRTWurwDW087c6v4RvI+4sfOQ=",
+                "url": "https://chromium.googlesource.com/external/libaddressinput.git",
+                "rev": "e8712e415627f22d0b00ebee8db99547077f39bd"
+            },
+            "src/third_party/libaom/source/libaom": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-6oZWYXRTZ1IC5yGvfPI19PwPU9O7mKBsW2wVxBGwU/I=",
+                "url": "https://aomedia.googlesource.com/aom.git",
+                "rev": "1dbe1c7fae2456f91ccc79fecb919e9ffea0727a"
+            },
+            "src/third_party/libavif/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-Jd/KwJJ1oeQMLg8CShTTDQhCVHEDpXcQHiA4+NXYOIA=",
+                "url": "https://chromium.googlesource.com/external/github.com/AOMediaCodec/libavif.git",
+                "rev": "1a78d970b8315e7cc6a8601861ec75189c50c214"
+            },
+            "src/third_party/libavifinfo/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-UAc4iYWrKWteH98hD3QLkD3JWmV/rsvWhFIVJN7tc+Q=",
+                "url": "https://aomedia.googlesource.com/libavifinfo.git",
+                "rev": "b496868f7c3fd17dfeeecc0364fe37e19edd548a"
+            },
+            "src/third_party/nearby/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-9PT/tuxjREGsvSnYT2wyaL5sB52CcYPpKVKN0ZGldWU=",
+                "url": "https://chromium.googlesource.com/external/github.com/google/nearby-connections.git",
+                "rev": "629e7ba7c964a62c97f6a882bffaec3c8490bb1e"
+            },
+            "src/third_party/beto-core/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-qgsPK7RyVqGRji0sTcMck1JqX9iCsYIExGoGwNZyVT0=",
+                "url": "https://beto-core.googlesource.com/beto-core.git",
+                "rev": "b902b346037ea3f4aadf8177021f6f917b16e648"
+            },
+            "src/third_party/securemessage/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-GS4ccnuiqxMs/LVYAtvSlVAYFp4a5GoZsxcriTX3k78=",
+                "url": "https://chromium.googlesource.com/external/github.com/google/securemessage.git",
+                "rev": "fa07beb12babc3b25e0c5b1f38c16aa8cb6b8f84"
+            },
+            "src/third_party/speedometer/v3.0": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-PqrwtPFU3TI840za3UU8p+t4ZdyX0l79esEA602Mbq0=",
+                "url": "https://chromium.googlesource.com/external/github.com/WebKit/Speedometer.git",
+                "rev": "5107c739c1b2a008e7293e3b489c4f80a8fb2e01"
+            },
+            "src/third_party/ukey2/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-aaLs6ZS+CdBlCJ6ZhsmdAPFxiBIij6oufsDcNeRSV1E=",
+                "url": "https://chromium.googlesource.com/external/github.com/google/ukey2.git",
+                "rev": "0275885d8e6038c39b8a8ca55e75d1d4d1727f47"
+            },
+            "src/third_party/cros-components/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-ZjLMlNDDN08v9SUFAuroPsu/6ADLHZAAFpv+bmaJA2Y=",
+                "url": "https://chromium.googlesource.com/external/google3/cros_components.git",
+                "rev": "25159cae8d540780cbeb994692ce4a3ea14cc094"
+            },
+            "src/third_party/libdrm/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-NUxS2rBJ0nFblvHRQUfKT933+DAws5RUTDb+RLxRF4M=",
+                "url": "https://chromium.googlesource.com/chromiumos/third_party/libdrm.git",
+                "rev": "98e1db501173303e58ef6a1def94ab7a2d84afc1"
+            },
+            "src/third_party/expat/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-FXTDGAK03jc2wvazhRKqtsFRKZUYS/9HLpZNp4JfZJI=",
+                "url": "https://chromium.googlesource.com/external/github.com/libexpat/libexpat.git",
+                "rev": "441f98d02deafd9b090aea568282b28f66a50e36"
+            },
+            "src/third_party/libipp/libipp": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-gxU92lHLd6uxO8T3QWhZIK0hGy97cki705DV0VimCPY=",
+                "url": "https://chromium.googlesource.com/chromiumos/platform2/libipp.git",
+                "rev": "2209bb84a8e122dab7c02fe66cc61a7b42873d7f"
+            },
+            "src/third_party/libjpeg_turbo": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-+t75ZAdOXc7Nd1/8zEQLX+enZb8upqIQuR6qzb9z7Cg=",
+                "url": "https://chromium.googlesource.com/chromium/deps/libjpeg_turbo.git",
+                "rev": "9b894306ec3b28cea46e84c32b56773a98c483da"
+            },
+            "src/third_party/liblouis/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-EI/uaHXe0NlqdEw764q0SjerThYEVLRogUlmrsZwXnY=",
+                "url": "https://chromium.googlesource.com/external/liblouis-github.git",
+                "rev": "9700847afb92cb35969bdfcbbfbbb74b9c7b3376"
+            },
+            "src/third_party/libphonenumber/dist": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-3hSnTFTD3KAdbyxfKg12qbIYTmw6YlTCH64gMP/HUJo=",
+                "url": "https://chromium.googlesource.com/external/libphonenumber.git",
+                "rev": "140dfeb81b753388e8a672900fb7a971e9a0d362"
+            },
+            "src/third_party/libprotobuf-mutator/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-ZyPweW+V5foxFQwjjMLkaRUo+FNV+kEDGIH/4oRV614=",
+                "url": "https://chromium.googlesource.com/external/github.com/google/libprotobuf-mutator.git",
+                "rev": "a304ec48dcf15d942607032151f7e9ee504b5dcf"
+            },
+            "src/third_party/libsrtp": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-pfLFh2JGk/g0ZZxBKTaYW9/PBpkCm0rtJeyNePUMTTc=",
+                "url": "https://chromium.googlesource.com/chromium/deps/libsrtp.git",
+                "rev": "5b7c744eb8310250ccc534f3f86a2015b3887a0a"
+            },
+            "src/third_party/libsync/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-Mkl6C1LxF3RYLwYbxiSfoQPt8QKFwQWj/Ati2sNJ32E=",
+                "url": "https://chromium.googlesource.com/aosp/platform/system/core/libsync.git",
+                "rev": "f4f4387b6bf2387efbcfd1453af4892e8982faf6"
+            },
+            "src/third_party/libvpx/source/libvpx": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-UA/pf35eWFArRM+QdN6i6LK0ePWzXEsviHlf3WUgMoM=",
+                "url": "https://chromium.googlesource.com/webm/libvpx.git",
+                "rev": "424723dc025ce451dab9568239a46b18d0919b4d"
+            },
+            "src/third_party/libwebm/source": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-u/5nkJed0DzdhR5OLL2kIhZhOnrbyzL1Kx37vV/jcEo=",
+                "url": "https://chromium.googlesource.com/webm/libwebm.git",
+                "rev": "e4fbea0c9751ae8aa86629b197a28d8276a2b0da"
+            },
+            "src/third_party/libwebp/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-Wa33opOFgcmYtycezDUt2f6PqZBse6xYB5kLuSaw95o=",
+                "url": "https://chromium.googlesource.com/webm/libwebp.git",
+                "rev": "ca332209cb5567c9b249c86788cb2dbf8847e760"
+            },
+            "src/third_party/libyuv": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-jxs9kHI40gRFhm9cU6uS1Rxj+LLUUqT9b3myihxgW7s=",
+                "url": "https://chromium.googlesource.com/libyuv/libyuv.git",
+                "rev": "04821d1e7d60845525e8db55c7bcd41ef5be9406"
+            },
+            "src/third_party/lss": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-hE8uZf9Fst66qJkoVYChiB8G41ie+k9M4X0W+5JUSdw=",
+                "url": "https://chromium.googlesource.com/linux-syscall-support.git",
+                "rev": "ce877209e11aa69dcfffbd53ef90ea1d07136521"
+            },
+            "src/third_party/material_color_utilities/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-oi28dWuTd6ijn/RKSPukDr5GSzYiCTM2klFb7WSMDHY=",
+                "url": "https://chromium.googlesource.com/external/github.com/material-foundation/material-color-utilities.git",
+                "rev": "234a000e507d586c20df6e3bf5b9e035bc5ce7b1"
+            },
+            "src/third_party/minigbm/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-9HwvjTETerbQ7YKXH9kUB2eWa8PxGWMAJfx1jAluhrs=",
+                "url": "https://chromium.googlesource.com/chromiumos/platform/minigbm.git",
+                "rev": "3018207f4d89395cc271278fb9a6558b660885f5"
+            },
+            "src/third_party/nasm": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-L+b3X3vsfpY6FSlIK/AHhxhmq2cXd50vND6uT6yn8Qs=",
+                "url": "https://chromium.googlesource.com/chromium/deps/nasm.git",
+                "rev": "7fc833e889d1afda72c06220e5bed8fb43b2e5ce"
+            },
+            "src/third_party/neon_2_sse/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-299ZptvdTmCnIuVVBkrpf5ZTxKPwgcGUob81tEI91F0=",
+                "url": "https://chromium.googlesource.com/external/github.com/intel/ARM_NEON_2_x86_SSE.git",
+                "rev": "a15b489e1222b2087007546b4912e21293ea86ff"
+            },
+            "src/third_party/openh264/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-J7Eqe2QevZh1xfap19W8AVCcwfRu7ztknnbKFJUAH1c=",
+                "url": "https://chromium.googlesource.com/external/github.com/cisco/openh264",
+                "rev": "09a4f3ec842a8932341b195c5b01e141c8a16eb7"
+            },
+            "src/third_party/openscreen/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-TyZ/sZ0gnesWjKUnO2RVM2TTdpVIxsBWueHDgix0/wg=",
+                "url": "https://chromium.googlesource.com/openscreen",
+                "rev": "971d6055e7b78c474e2e734e55a2991fbb7ab665"
+            },
+            "src/third_party/openscreen/src/third_party/tinycbor/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-fMKBFUSKmODQyg4hKIa1hwnEKIV6WBbY1Gb8DOSnaHA=",
+                "url": "https://chromium.googlesource.com/external/github.com/intel/tinycbor.git",
+                "rev": "d393c16f3eb30d0c47e6f9d92db62272f0ec4dc7"
+            },
+            "src/third_party/pdfium": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-U1cScrfKN0F+cy307RT2iwB6RYKeCNDRnkYxzamezoY=",
+                "url": "https://pdfium.googlesource.com/pdfium.git",
+                "rev": "a3895af47f600e3f9677f31fa39e15bd01c18457"
+            },
+            "src/third_party/perfetto": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-xLx+dnUysm+HS1esu2hAqBKg/GgTJK4SQu1ZINr2aYc=",
+                "url": "https://android.googlesource.com/platform/external/perfetto.git",
+                "rev": "7ce535ddfc62d30166f35a8ed0f121da5eb0437c"
+            },
+            "src/third_party/pthreadpool/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-R4YmNzWEELSkAws/ejmNVxqXDTJwcqjLU/o/HvgRn2E=",
+                "url": "https://chromium.googlesource.com/external/github.com/Maratyszcza/pthreadpool.git",
+                "rev": "4fe0e1e183925bf8cfa6aae24237e724a96479b8"
+            },
+            "src/third_party/pyelftools": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-I/7p3IEvfP/gkes4kx18PvWwhAKilQKb67GXoW4zFB4=",
+                "url": "https://chromium.googlesource.com/chromiumos/third_party/pyelftools.git",
+                "rev": "19b3e610c86fcadb837d252c794cb5e8008826ae"
+            },
+            "src/third_party/quic_trace/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-Nf9ZDLcE1JunhbpEMHhrY2ROnbgrvVZoRkPwWq1DU0g=",
+                "url": "https://chromium.googlesource.com/external/github.com/google/quic-trace.git",
+                "rev": "caa0a6eaba816ecb737f9a70782b7c80b8ac8dbc"
+            },
+            "src/third_party/pywebsocket3/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-WEqqu2/7fLqcf/2/IcD7/FewRSZ6jTgVlVBvnihthYQ=",
+                "url": "https://chromium.googlesource.com/external/github.com/GoogleChromeLabs/pywebsocket3.git",
+                "rev": "50602a14f1b6da17e0b619833a13addc6ea78bc2"
+            },
+            "src/third_party/re2/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-m3bJlSyyhmj/7jvy7ExNX/gol7yeu1mnmyAc8u8Pr8s=",
+                "url": "https://chromium.googlesource.com/external/github.com/google/re2.git",
+                "rev": "3d9bdbd0e208d3274a1cb1275c94d8b7626ddde2"
+            },
+            "src/third_party/ruy/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-Zi3A49YqDE5S4iSpw9t9kTzitbQbcslm1zsepWX5cbw=",
+                "url": "https://chromium.googlesource.com/external/github.com/google/ruy.git",
+                "rev": "6ffa93a89376555b09134c59b84d8f5e9cfc6ce6"
+            },
+            "src/third_party/skia": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-CvoJxsBN1Nyh+RPgU+aptZW5WsfGB4hmSlhyma1wO+E=",
+                "url": "https://skia.googlesource.com/skia.git",
+                "rev": "349c1179c43ef46f2804404952b9460dc007d76a"
+            },
+            "src/third_party/smhasher/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-RyC//me08hwGXRrWcK8GZ1uhIkBq4FByA7fHCVDsniw=",
+                "url": "https://chromium.googlesource.com/external/smhasher.git",
+                "rev": "e87738e57558e0ec472b2fc3a643b838e5b6e88f"
+            },
+            "src/third_party/snappy/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-5fV6NfO8vmqK+iCwpLtE2YjYOzjsshctauyjNIOxrH0=",
+                "url": "https://chromium.googlesource.com/external/github.com/google/snappy.git",
+                "rev": "c9f9edf6d75bb065fa47468bf035e051a57bec7c"
+            },
+            "src/third_party/sqlite/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-wKsfwZpDRQzYQp6qls07uapgy9K3TWLOEUQlhIFpJtw=",
+                "url": "https://chromium.googlesource.com/chromium/deps/sqlite.git",
+                "rev": "cd9486849ba3c3ec753f556fd29c0aabee122a28"
+            },
+            "src/third_party/swiftshader": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-Im4sdDo4b96YQIKDcAmqUk8PiJzejZgSDPur3hqPPRk=",
+                "url": "https://swiftshader.googlesource.com/SwiftShader.git",
+                "rev": "d9ec9befba05a8dfca09c1e88f3f7be0e4b153c6"
+            },
+            "src/third_party/text-fragments-polyfill/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-4rW2u1cQAF4iPWHAt1FvVXIpz2pmI901rEPks/w/iFA=",
+                "url": "https://chromium.googlesource.com/external/github.com/GoogleChromeLabs/text-fragments-polyfill.git",
+                "rev": "c036420683f672d685e27415de0a5f5e85bdc23f"
+            },
+            "src/third_party/tflite/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-119/isDtopnj6MBRr3bzBvIppXw8M/ejcPx0CmIjXZU=",
+                "url": "https://chromium.googlesource.com/external/github.com/tensorflow/tensorflow.git",
+                "rev": "21e56c30e480ac67bed48335a5d122c59a6a6805"
+            },
+            "src/third_party/vulkan-deps": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-lqCUx70IeHZ7YfE9DXia7dFok/JsFu/HSIv2AGi37YI=",
+                "url": "https://chromium.googlesource.com/vulkan-deps",
+                "rev": "2b783ed328d3a46e6a7a21218ced6b4dd1684114"
+            },
+            "src/third_party/vulkan-deps/glslang/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-+Qs+Q3p11y9oUKyWEbuaQ0vx6hppFZSFbFuU0ve6rRo=",
+                "url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/glslang",
+                "rev": "ebb0a8b28e5ea7a13146a24b3ad87b1966dbdfa3"
+            },
+            "src/third_party/vulkan-deps/spirv-cross/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-UIk5hihUPjXNzEeO2laS4dUef/rEExxXAZjMcftx+3A=",
+                "url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/SPIRV-Cross",
+                "rev": "2de1265fca722929785d9acdec4ab728c47a0254"
+            },
+            "src/third_party/vulkan-deps/spirv-headers/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-JLFVzFNdXqxyKmg3NymIqqZmf2GAb7tYetQ6HJPsUIQ=",
+                "url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/SPIRV-Headers",
+                "rev": "88bc5e321c2839707df8b1ab534e243e00744177"
+            },
+            "src/third_party/vulkan-deps/spirv-tools/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-+HUDsp0COKlPtKidOVvUk7lN1AiFw01i5ANc3MO+qjs=",
+                "url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/SPIRV-Tools",
+                "rev": "5084f58e5d187b16f84d2af936ff94ea2f46a00c"
+            },
+            "src/third_party/vulkan-deps/vulkan-headers/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-UlaNc1NxTYulrF4Ol0rLysbLwbFR46Evq7WkWncPB8k=",
+                "url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-Headers",
+                "rev": "f4bfcd885214675a6a0d7d4df07f52b511e6ea16"
+            },
+            "src/third_party/vulkan-deps/vulkan-loader/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-GbVr8LmwC6r7a13++5cYJXAq+H4P07quEHpTUV1qfqA=",
+                "url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-Loader",
+                "rev": "7b7d15bc9f1d782e4d6ea34e61fd9a36a7952208"
+            },
+            "src/third_party/vulkan-deps/vulkan-tools/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-vnrhYM7tcDTcXH4A+2leio5Wc1+b5H+7CQISEI+SPV8=",
+                "url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-Tools",
+                "rev": "f7017f23337b90a2b2ceb65a4e1050e8ad89e065"
+            },
+            "src/third_party/vulkan-deps/vulkan-utility-libraries/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-buxOdupK/w1sFGGHrEI+On2/mR0q5whvQNKUI8dxJ60=",
+                "url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-Utility-Libraries",
+                "rev": "dcfce25b439a2785f2c90b184e1964898070b4f1"
+            },
+            "src/third_party/vulkan-deps/vulkan-validation-layers/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-LJd7pkcFd8k4npEv8mJy+47xo/5CXMN75ZAtDp+v6FI=",
+                "url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-ValidationLayers",
+                "rev": "281e1c1c6b51bb6b33f88c18ed4da58ac3024311"
+            },
+            "src/third_party/vulkan_memory_allocator": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-YzxHZagz/M8Y54UnI4h1wu5jSTuaOgv0ifC9d3fJZlQ=",
+                "url": "https://chromium.googlesource.com/external/github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator.git",
+                "rev": "56300b29fbfcc693ee6609ddad3fdd5b7a449a21"
+            },
+            "src/third_party/wayland/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-0ICSMZhnsLqMNfqSGjqM3p4ssxptkBtt7EMCpxknW4A=",
+                "url": "https://chromium.googlesource.com/external/anongit.freedesktop.org/git/wayland/wayland.git",
+                "rev": "3fda2fbf51db54398c0155facee82cc9533958a2"
+            },
+            "src/third_party/wayland-protocols/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-3QK+ZN6IFUFkDxySSoQwP1J3JnTlD7JPaUk6Tr/d/k4=",
+                "url": "https://chromium.googlesource.com/external/anongit.freedesktop.org/git/wayland/wayland-protocols.git",
+                "rev": "4624cfaaf563cd7be5e2e2087c8de6d3a48ea867"
+            },
+            "src/third_party/wayland-protocols/kde": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-Dmcp/2ms/k7NxPPmPkp0YNfM9z2Es1ZO0uX10bc7N2Y=",
+                "url": "https://chromium.googlesource.com/external/github.com/KDE/plasma-wayland-protocols.git",
+                "rev": "0b07950714b3a36c9b9f71fc025fc7783e82926e"
+            },
+            "src/third_party/wayland-protocols/gtk": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-75XNnLkF5Lt1LMRGT+T61k0/mLa3kkynfN+QWvZ0LiQ=",
+                "url": "https://chromium.googlesource.com/external/github.com/GNOME/gtk.git",
+                "rev": "40ebed3a03aef096addc0af09fec4ec529d882a0"
+            },
+            "src/third_party/webdriver/pylib": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-WIqWXIKVgElgg8P8laLAlUrgwodGdeVcwohZxnPKedw=",
+                "url": "https://chromium.googlesource.com/external/github.com/SeleniumHQ/selenium/py.git",
+                "rev": "fc5e7e70c098bfb189a9a74746809ad3c5c34e04"
+            },
+            "src/third_party/webgl/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-dubsIPZKBGOzANGvMtQxFKFIHr0laDUGpzgRyEOjHMU=",
+                "url": "https://chromium.googlesource.com/external/khronosgroup/webgl.git",
+                "rev": "f4bf599a8b575df685c31d9c4729a70a04e377ed"
+            },
+            "src/third_party/webgpu-cts/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-E39f0wy72TwQ9IM4QquqWxwDiHZOUI8hWkx2QDFcRog=",
+                "url": "https://chromium.googlesource.com/external/github.com/gpuweb/cts.git",
+                "rev": "3dbe4ce12983ccc1ad42e228057c7d8adc17cb78"
+            },
+            "src/third_party/webrtc": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-ju7sX1jrzg5BZOqdkcnFymRTqdFi7xkeHznKJQB1+08=",
+                "url": "https://webrtc.googlesource.com/src.git",
+                "rev": "5ab829e4ca8f63be6b4ed1d98eee382d7307d34e"
+            },
+            "src/third_party/wuffs/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-HP8Vf1C9DuA9H+busf3lFoF9SsYqviLKv0l73CxmNEI=",
+                "url": "https://skia.googlesource.com/external/github.com/google/wuffs-mirror-release-c.git",
+                "rev": "fe9d08f2b6e80af691bfb1a718e144c49a1b9eba"
+            },
+            "src/third_party/weston/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-y2srFaPUOoB2umzpo4+hFfhNlqXM2AoMGOpUy/ZSacg=",
+                "url": "https://chromium.googlesource.com/external/anongit.freedesktop.org/git/wayland/weston.git",
+                "rev": "ccf29cb237c3ed09c5f370f35239c93d07abfdd7"
+            },
+            "src/third_party/xdg-utils": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-WuQ9uDq+QD17Y20ACFGres4nbkeOiTE2y+tY1avAT5U=",
+                "url": "https://chromium.googlesource.com/chromium/deps/xdg-utils.git",
+                "rev": "cb54d9db2e535ee4ef13cc91b65a1e2741a94a44"
+            },
+            "src/third_party/xnnpack/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-s9Avx9o+1igKulOpKhtbbkoINuh1wNercPszRaA4TZM=",
+                "url": "https://chromium.googlesource.com/external/github.com/google/XNNPACK.git",
+                "rev": "bbbaa7352a3ea729987d3e654d37be93e8009691"
+            },
+            "src/tools/page_cycler/acid3": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-s/49EaYQRsyxuLejXc1zGDYTD7uO0ddaQIJBP50Bvw0=",
+                "url": "https://chromium.googlesource.com/chromium/deps/acid3.git",
+                "rev": "a926d0a32e02c4c03ae95bb798e6c780e0e184ba"
+            },
+            "src/third_party/zstd/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-95OOpYKGve+YWzqqguQIg1emTOAuaGyYpWxrWVDOKAQ=",
+                "url": "https://chromium.googlesource.com/external/github.com/facebook/zstd.git",
+                "rev": "cdceb0fce59785c841bf697e00067163106064e1"
+            },
+            "src/v8": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-GevDXfVX4UxwTbgp2ZQbp3AFOHv5tECmyqLGIyYi5Tw=",
+                "url": "https://chromium.googlesource.com/v8/v8.git",
+                "rev": "71b6b5a68e0883c155e01368aace6eb6d71b85f3"
+            },
+            "src/third_party/nan": {
+                "fetcher": "fetchFromGitHub",
+                "hash": "sha256-cwti+BWmF/l/dqa/cN0C587EK4WwRWcWy6gjFVkaMTg=",
+                "owner": "nodejs",
+                "repo": "nan",
+                "rev": "e14bdcd1f72d62bca1d541b66da43130384ec213"
+            },
+            "src/third_party/electron_node": {
+                "fetcher": "fetchFromGitHub",
+                "hash": "sha256-yvMU6dXRzHP7l6axo3g4svJ1H2edtFvX2MVMm3K1bEc=",
+                "owner": "nodejs",
+                "repo": "node",
+                "rev": "v18.18.2"
+            },
+            "src/third_party/squirrel.mac": {
+                "fetcher": "fetchFromGitHub",
+                "hash": "sha256-4GfKQg0u3c9GI+jl3ixESNqWXQJKRMi+00QT0s2Shqw=",
+                "owner": "Squirrel",
+                "repo": "Squirrel.Mac",
+                "rev": "0e5d146ba13101a1302d59ea6e6e0b3cace4ae38"
+            },
+            "src/third_party/squirrel.mac/vendor/ReactiveObjC": {
+                "fetcher": "fetchFromGitHub",
+                "hash": "sha256-/MCqC1oFe3N9TsmfVLgl+deR6qHU6ZFQQjudb9zB5Mo=",
+                "owner": "ReactiveCocoa",
+                "repo": "ReactiveObjC",
+                "rev": "74ab5baccc6f7202c8ac69a8d1e152c29dc1ea76"
+            },
+            "src/third_party/squirrel.mac/vendor/Mantle": {
+                "fetcher": "fetchFromGitHub",
+                "hash": "sha256-ogFkMJybf2Ue606ojXJu6Gy5aXSi1bSKm60qcTAIaPk=",
+                "owner": "Mantle",
+                "repo": "Mantle",
+                "rev": "78d3966b3c331292ea29ec38661b25df0a245948"
+            }
+        },
+        "version": "28.2.2",
+        "modules": "119",
+        "chrome": "120.0.6099.276",
+        "node": "18.18.2",
+        "chromium": {
+            "version": "120.0.6099.276",
+            "deps": {
+                "gn": {
+                    "version": "2023-10-23",
+                    "url": "https://gn.googlesource.com/gn",
+                    "rev": "e4702d7409069c4f12d45ea7b7f0890717ca3f4b",
+                    "hash": "sha256-dwluGOfq05swtBM5gg4a6gY3IpFHaKKkD0TV1XW7c7k="
+                }
+            }
+        },
+        "electron_yarn_hash": "117vxam1044yy2akwjfhvb5dpfnv667pwbg92ac43551xfn0slcg",
+        "chromium_npm_hash": "sha256-zexxXAAJDnhMmh7HfBO1V1z1Yds06C3gSpXacsbjUb4="
+    },
+    "27": {
+        "deps": {
+            "src/electron": {
+                "fetcher": "fetchFromGitHub",
+                "hash": "sha256-FgHDK/z2Hq/jLTPUn40iSH5Q6vu1xlNu1PSSQxL+kOw=",
+                "owner": "electron",
+                "repo": "electron",
+                "rev": "v27.3.2"
+            },
+            "src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-3yFHjd3LMXVbF4LX6Bi3yJF0CDVug0cDpGFbP8Ibvk4=",
+                "url": "https://chromium.googlesource.com/chromium/src.git",
+                "rev": "118.0.5993.159",
+                "postFetch": "rm -r $out/third_party/blink/web_tests; rm -r $out/third_party/hunspell/tests; rm -r $out/content/test/data; rm -r $out/courgette/testdata; rm -r $out/extensions/test/data; rm -r $out/media/test/data; "
+            },
+            "src/third_party/clang-format/script": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-7VvofDDQe+SoMRBfVk26q+C+OPyOE7QH35wVWkfDKxs=",
+                "url": "https://chromium.googlesource.com/external/github.com/llvm/llvm-project/clang/tools/clang-format.git",
+                "rev": "e5337933f2951cacd3aeacd238ce4578163ca0b9"
+            },
+            "src/third_party/libc++/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-YP1LAUaV8epDAsd9LOovdXUyzpaLgffOJcGM6VmTaKc=",
+                "url": "https://chromium.googlesource.com/external/github.com/llvm/llvm-project/libcxx.git",
+                "rev": "84fb809dd6dae36d556dc0bb702c6cc2ce9d4b80"
+            },
+            "src/third_party/libc++abi/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-CBUw50T/jFMXU0cR+BQH6JyEY3mHamLM6kA8YdvI24Q=",
+                "url": "https://chromium.googlesource.com/external/github.com/llvm/llvm-project/libcxxabi.git",
+                "rev": "331847d7a5e6f8706689cf5d468e6e58c868fa10"
+            },
+            "src/third_party/libunwind/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-rqmY4JNm4zuYqXs7o+1QhNnaNX4Cmt7PTJMGploHPnY=",
+                "url": "https://chromium.googlesource.com/external/github.com/llvm/llvm-project/libunwind.git",
+                "rev": "a321409e66c212098e755cfae1a978bbcff1ccbb"
+            },
+            "src/chrome/test/data/perf/canvas_bench": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-svOuyBGKloBLM11xLlWCDsB4PpRjdKTBdW2UEW4JQjM=",
+                "url": "https://chromium.googlesource.com/chromium/canvas_bench.git",
+                "rev": "a7b40ea5ae0239517d78845a5fc9b12976bfc732"
+            },
+            "src/chrome/test/data/perf/frame_rate/content": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-t4kcuvH0rkPBkcdiMsoNQaRwU09eU+oSvyHDiAHrKXo=",
+                "url": "https://chromium.googlesource.com/chromium/frame_rate/content.git",
+                "rev": "c10272c88463efeef6bb19c9ec07c42bc8fe22b9"
+            },
+            "src/chrome/test/data/xr/webvr_info": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-BsAPwc4oEWri0TlqhyxqFNqKdfgVSrB0vQyISmYY4eg=",
+                "url": "https://chromium.googlesource.com/external/github.com/toji/webvr.info.git",
+                "rev": "c58ae99b9ff9e2aa4c524633519570bf33536248"
+            },
+            "src/docs/website": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-6/LSJGUVZuJe1WIBJEJO/dXZYnsby+X3EzeBbvWjUZU=",
+                "url": "https://chromium.googlesource.com/website.git",
+                "rev": "243c1406199960e001e1dceccafc6fc2db6897f9"
+            },
+            "src/media/cdm/api": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-6J6aSYW0or99VAgMNJJOdJqMJspoG7w1HxDN50MV5bw=",
+                "url": "https://chromium.googlesource.com/chromium/cdm.git",
+                "rev": "fef0b5aa1bd31efb88dfab804bdbe614f3d54f28"
+            },
+            "src/net/third_party/quiche/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-hB3gUqi/9SI9PGNkXNpli/TifI1kJEBScqRFIw7hm4c=",
+                "url": "https://quiche.googlesource.com/quiche.git",
+                "rev": "7d201495d8a5ef115787765fb12af0d5575281c1"
+            },
+            "src/third_party/angle": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-It05E3+qG17dEbhbaX/VQJaydWOQ1mpsj95dT5IJkgo=",
+                "url": "https://chromium.googlesource.com/angle/angle.git",
+                "rev": "05f45adc147393562b518ca1f82a3ccba7ee40f7"
+            },
+            "src/third_party/angle/third_party/glmark2/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-L7+zWM0qn8WFhmON7DGvarTsN1YHt1sn5+hazTOZrrk=",
+                "url": "https://chromium.googlesource.com/external/github.com/glmark2/glmark2",
+                "rev": "ca8de51fedb70bace5351c6b002eb952c747e889"
+            },
+            "src/third_party/angle/third_party/rapidjson/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-btUl1a/B0sXwf/+hyvCvVJjWqIkXfVYCpHm3TeBuOxk=",
+                "url": "https://chromium.googlesource.com/external/github.com/Tencent/rapidjson",
+                "rev": "781a4e667d84aeedbeb8184b7b62425ea66ec59f"
+            },
+            "src/third_party/angle/third_party/VK-GL-CTS/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-LWGll3KiMYndiLZBizhN+mzELjYpSxvtIctH+LO+20Q=",
+                "url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/VK-GL-CTS",
+                "rev": "385ae8bed1f99e497cdf2f3a5640905b90e69292"
+            },
+            "src/third_party/anonymous_tokens/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-TcNIocV0p53NJCudvy8wf+fIPIP2tnkoBf1F7mEBFLs=",
+                "url": "https://chromium.googlesource.com/external/github.com/google/anonymous-tokens.git",
+                "rev": "8c8d20953d502db31fec2353b199e6c22ef0236e"
+            },
+            "src/third_party/content_analysis_sdk/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-auHBX00DSvyMyhEsZGkpKh9KOO2RcaeP9PK6kmmMYls=",
+                "url": "https://chromium.googlesource.com/external/github.com/chromium/content_analysis_sdk.git",
+                "rev": "8d5118720805fdce0dd3ee2999c964501de4532c"
+            },
+            "src/third_party/dav1d/libdav1d": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-KSo2s3M3S13gY84NlAdnPsjoKfJZy7ipTlWSvUHD9Ak=",
+                "url": "https://chromium.googlesource.com/external/github.com/videolan/dav1d.git",
+                "rev": "f8ae94eca0f53502a2cddd29a263c1edea4822a0"
+            },
+            "src/third_party/dawn": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-7iCJ1h51S/8pxQRMoDtGXzyuP6Dzxnc/1Cu4ALU8NYg=",
+                "url": "https://dawn.googlesource.com/dawn.git",
+                "rev": "deb3b674b26854204c8082ed93926207e42d3cf2"
+            },
+            "src/third_party/dawn/third_party/glfw": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-TwAPRjQxIz3J+zbNxzCp5Tek7MwisxdekMpY5QGsKyg=",
+                "url": "https://chromium.googlesource.com/external/github.com/glfw/glfw",
+                "rev": "62e175ef9fae75335575964c845a302447c012c7"
+            },
+            "src/third_party/dawn/third_party/dxc": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-u29t+pF7aRfhRmi36YyEPcQU7gIDqsjrf38+C0YIpFk=",
+                "url": "https://chromium.googlesource.com/external/github.com/microsoft/DirectXShaderCompiler",
+                "rev": "50c4c887f1ccfa1a4bfb158b7dbc93058659ed01"
+            },
+            "src/third_party/dawn/third_party/dxheaders": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-0Miw1Cy/jmOo7bLFBOHuTRDV04cSeyvUEyPkpVsX9DA=",
+                "url": "https://chromium.googlesource.com/external/github.com/microsoft/DirectX-Headers",
+                "rev": "980971e835876dc0cde415e8f9bc646e64667bf7"
+            },
+            "src/third_party/dawn/third_party/khronos/OpenGL-Registry": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-K3PcRIiD3AmnbiSm5TwaLs4Gu9hxaN8Y91WMKK8pOXE=",
+                "url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/OpenGL-Registry",
+                "rev": "5bae8738b23d06968e7c3a41308568120943ae77"
+            },
+            "src/third_party/dawn/third_party/khronos/EGL-Registry": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-Z6DwLfgQ1wsJXz0KKJyVieOatnDmx3cs0qJ6IEgSq1A=",
+                "url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/EGL-Registry",
+                "rev": "7dea2ed79187cd13f76183c4b9100159b9e3e071"
+            },
+            "src/third_party/dawn/third_party/webgpu-cts": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-gbZpmcbqLisjLb6vnKKvHS6eRqjqvavvTRgxJsaE/RQ=",
+                "url": "https://chromium.googlesource.com/external/github.com/gpuweb/cts",
+                "rev": "5dfa3b88f0863c3949f713804e0461c9cc34a030"
+            },
+            "src/third_party/highway/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-kNb9UVcFq2BIf9nftUgN8ciFFCzRCou/sLwVf08jf3E=",
+                "url": "https://chromium.googlesource.com/external/github.com/google/highway.git",
+                "rev": "8f20644eca693cfb74aa795b0006b6779c370e7a"
+            },
+            "src/third_party/google_benchmark/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-h2ryAQAuHI54Cni88L85e7Np4KATGVTRdDcmUvCNeWc=",
+                "url": "https://chromium.googlesource.com/external/github.com/google/benchmark.git",
+                "rev": "b177433f3ee2513b1075140c723d73ab8901790f"
+            },
+            "src/third_party/boringssl/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-P0Aj2Puy6S1aRIHrAhmokiAmSmHfuWQR6UW/AbQFW+M=",
+                "url": "https://boringssl.googlesource.com/boringssl.git",
+                "rev": "85081c6b3c0b26129893c1bff6bfa42bc3ba2d2c"
+            },
+            "src/third_party/breakpad/breakpad": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-8AkC/8oX4OWAcV21laJ0AeMRB9G04rFc6UJFy7Wus4A=",
+                "url": "https://chromium.googlesource.com/breakpad/breakpad.git",
+                "rev": "8988364bcddd9b194b0bf931c10bc125987330ed"
+            },
+            "src/third_party/cast_core/public/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-AalRQhJmornCqmvE2+36J/3LubaA0jr6P1PXy32lX4I=",
+                "url": "https://chromium.googlesource.com/cast_core/public",
+                "rev": "71f51fd6fa45fac73848f65421081edd723297cd"
+            },
+            "src/third_party/catapult": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-AK85yVeCR3GKGtdW8G9Of+6UMJirJ9BNVyp9pffft7s=",
+                "url": "https://chromium.googlesource.com/catapult.git",
+                "rev": "f16ca3c78e46cefa982100444844da3fcb25390e"
+            },
+            "src/third_party/ced/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-ySG74Rj2i2c/PltEgHVEDq+N8yd9gZmxNktc56zIUiY=",
+                "url": "https://chromium.googlesource.com/external/github.com/google/compact_enc_det.git",
+                "rev": "ba412eaaacd3186085babcd901679a48863c7dd5"
+            },
+            "src/third_party/chromium-variations": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-2lP3uGdqIZY3DpxGzfDhR2dW+o3Arduaeu56Au7h/5Q=",
+                "url": "https://chromium.googlesource.com/chromium-variations.git",
+                "rev": "e0c145ca93c0439a65bcb1607e813edfbc97520b"
+            },
+            "src/third_party/cld_3/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-C3MOMBUy9jgkT9BAi/Fgm2UH4cxRuwSBEcRl3hzM2Ss=",
+                "url": "https://chromium.googlesource.com/external/github.com/google/cld_3.git",
+                "rev": "b48dc46512566f5a2d41118c8c1116c4f96dc661"
+            },
+            "src/third_party/colorama/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-6ZTdPYSHdQOLYMSnE+Tp7PgsVTs3U2awGu9Qb4Rg/tk=",
+                "url": "https://chromium.googlesource.com/external/colorama.git",
+                "rev": "3de9f013df4b470069d03d250224062e8cf15c49"
+            },
+            "src/third_party/cpu_features/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-E8LoVzhe+TAmARWZTSuINlsVhzpUJMxPPCGe/dHZcyA=",
+                "url": "https://chromium.googlesource.com/external/github.com/google/cpu_features.git",
+                "rev": "936b9ab5515dead115606559502e3864958f7f6e"
+            },
+            "src/third_party/cpuinfo/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-oZjA2cMQMyhFcI+m6eOmdZ9A1oPAbyISeLxNyaoGivk=",
+                "url": "https://chromium.googlesource.com/external/github.com/pytorch/cpuinfo.git",
+                "rev": "c13d0bbb266d200a13532b5915d704c30d21081b"
+            },
+            "src/third_party/crc32c/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-urg0bmnfMfHagLPELp4WrNCz1gBZ6DFOWpDue1KsMtc=",
+                "url": "https://chromium.googlesource.com/external/github.com/google/crc32c.git",
+                "rev": "fa5ade41ee480003d9c5af6f43567ba22e4e17e6"
+            },
+            "src/third_party/cros_system_api": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-wq7fJVNRSiyaADrCYB0TEmWQ//BJg4GYiHZNtMb1QlI=",
+                "url": "https://chromium.googlesource.com/chromiumos/platform2/system_api.git",
+                "rev": "81ac4449008dffea00e4e8f251f87fabc5abe0d3"
+            },
+            "src/third_party/crossbench": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-s/+y5bMj+CRnljFZ5aWKirPCsRUjckLOZ5F65WnPYSY=",
+                "url": "https://chromium.googlesource.com/crossbench.git",
+                "rev": "06981428c28d66678ebec13ca1fac3785cf51bb1"
+            },
+            "src/third_party/depot_tools": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-EXxlQGA7qwjuZ2Qg/rZinkllkdfCbKXz8c4JJEr4mtU=",
+                "url": "https://chromium.googlesource.com/chromium/tools/depot_tools.git",
+                "rev": "7e251262409b3401809e57c5314dd158210355b8"
+            },
+            "src/third_party/devtools-frontend/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-D3W8U19i5pHWPLviMKbpzhiDoF6A0+tClYJcZWdbTqk=",
+                "url": "https://chromium.googlesource.com/devtools/devtools-frontend",
+                "rev": "bcf0ed097be848d234fb5290c1e4d69672dc5405"
+            },
+            "src/third_party/dom_distiller_js/dist": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-yuEBD2XQlV3FGI/i7lTmJbCqzeBiuG1Qow8wvsppGJw=",
+                "url": "https://chromium.googlesource.com/chromium/dom-distiller/dist.git",
+                "rev": "199de96b345ada7c6e7e6ba3d2fa7a6911b8767d"
+            },
+            "src/third_party/eigen3/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-c/4bf5+sJEgsKOJ34wPDNm1+6QUzETZZr/nE4SG5nKA=",
+                "url": "https://chromium.googlesource.com/external/gitlab.com/libeigen/eigen.git",
+                "rev": "66e8f38891841bf88ee976a316c0c78a52f0cee5"
+            },
+            "src/third_party/farmhash/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-5n58VEUxa/K//jAfZqG4cXyfxrp50ogWDNYcgiXVHdc=",
+                "url": "https://chromium.googlesource.com/external/github.com/google/farmhash.git",
+                "rev": "816a4ae622e964763ca0862d9dbd19324a1eaf45"
+            },
+            "src/third_party/ffmpeg": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-uRgHTVaCAEaoqY20SmePQbApPmjimgggm5922KKfnbc=",
+                "url": "https://chromium.googlesource.com/chromium/third_party/ffmpeg.git",
+                "rev": "0ba37733400593b162e5ae9ff26b384cff49c250"
+            },
+            "src/third_party/flac": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-gvTFPNOlBfozptaH7lTb9iD/09AmpdT3kCl9ClszjEs=",
+                "url": "https://chromium.googlesource.com/chromium/deps/flac.git",
+                "rev": "689da3a7ed50af7448c3f1961d1791c7c1d9c85c"
+            },
+            "src/third_party/flatbuffers/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-yibx1WMAwNajROMGVqox3naMU09RSayxUaTCJ860euo=",
+                "url": "https://chromium.googlesource.com/external/github.com/google/flatbuffers.git",
+                "rev": "28861d1d7d5ec6ce34d4bbdc10bec4aace341167"
+            },
+            "src/third_party/fontconfig/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-7PFmgr/+KNEYxCMuxMD2Zi9Ydcbp88IU7exr55a392Q=",
+                "url": "https://chromium.googlesource.com/external/fontconfig.git",
+                "rev": "2fb3419a92156569bc1ec707401258c922cd0d99"
+            },
+            "src/third_party/fp16/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-m2d9bqZoGWzuUPGkd29MsrdscnJRtuIkLIMp3fMmtRY=",
+                "url": "https://chromium.googlesource.com/external/github.com/Maratyszcza/FP16.git",
+                "rev": "0a92994d729ff76a58f692d3028ca1b64b145d91"
+            },
+            "src/third_party/gemmlowp/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-O5wD8wxgis0qYMaY+xZ21GBDVQFphMRvInCOswS6inA=",
+                "url": "https://chromium.googlesource.com/external/github.com/google/gemmlowp.git",
+                "rev": "13d57703abca3005d97b19df1f2db731607a7dc2"
+            },
+            "src/third_party/grpc/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-64JEVCx/PCM0dvv7kAQvSjLc0QbRAZVBDzwD/FAV6T8=",
+                "url": "https://chromium.googlesource.com/external/github.com/grpc/grpc.git",
+                "rev": "822dab21d9995c5cf942476b35ca12a1aa9d2737"
+            },
+            "src/third_party/freetype/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-RRieGqEeAk5AYzJqPRpF25FmxMpEYwR7AQWLzXkED50=",
+                "url": "https://chromium.googlesource.com/chromium/src/third_party/freetype2.git",
+                "rev": "45903920b984540bb629bc89f4c010159c23a89a"
+            },
+            "src/third_party/freetype-testing/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-2aHPchIK5Oce5+XxdXVCC+8EM6i0XT0rFbjSIVa2L1A=",
+                "url": "https://chromium.googlesource.com/external/github.com/freetype/freetype2-testing.git",
+                "rev": "7a69b1a2b028476f840ab7d4a2ffdfe4eb2c389f"
+            },
+            "src/third_party/fxdiv/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-LjX5kivfHbqCIA5pF9qUvswG1gjOFo3CMpX0VR+Cn38=",
+                "url": "https://chromium.googlesource.com/external/github.com/Maratyszcza/FXdiv.git",
+                "rev": "63058eff77e11aa15bf531df5dd34395ec3017c8"
+            },
+            "src/third_party/harfbuzz-ng/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-+fClyD9Rsge9qdGF8WCv8taLTWNL8iManpXZUzDL2LM=",
+                "url": "https://chromium.googlesource.com/external/github.com/harfbuzz/harfbuzz.git",
+                "rev": "db700b5670d9475cc8ed4880cc9447b232c5e432"
+            },
+            "src/third_party/emoji-segmenter/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-oT9mAKoKnrsFsBAeTRfPOXM76HRQQabFAlPpfKUGFhs=",
+                "url": "https://chromium.googlesource.com/external/github.com/google/emoji-segmenter.git",
+                "rev": "9ba6d25d0d9313569665d4a9d2b34f0f39f9a50e"
+            },
+            "src/third_party/ots/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-kiUXrXsaGOzPkKh0dVmU1I13WHt0Stzj7QLMqHN9FbU=",
+                "url": "https://chromium.googlesource.com/external/github.com/khaledhosny/ots.git",
+                "rev": "46bea9879127d0ff1c6601b078e2ce98e83fcd33"
+            },
+            "src/third_party/libgav1/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-dT8/Mdit3Qc5Sno6DYKv1qSNr+6Lhiy24ZNNBKoVq8I=",
+                "url": "https://chromium.googlesource.com/codecs/libgav1.git",
+                "rev": "df0023cc95b8e606a2fd243522d823401ef86637"
+            },
+            "src/third_party/googletest/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-VYRjcM3dDY2FarviXyFMgSkXCqKfWXwtGAj2Msgm7zg=",
+                "url": "https://chromium.googlesource.com/external/github.com/google/googletest.git",
+                "rev": "af29db7ec28d6df1c7f0f745186884091e602e07"
+            },
+            "src/third_party/hunspell_dictionaries": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-67mvpJRFFa9eMfyqFMURlbxOaTJBICnk+gl0b0mEHl8=",
+                "url": "https://chromium.googlesource.com/chromium/deps/hunspell_dictionaries.git",
+                "rev": "41cdffd71c9948f63c7ad36e1fb0ff519aa7a37e"
+            },
+            "src/third_party/icu": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-9yFRBrHdWcYgrZAaigS8XnxNsqJNklGdFkAAgVdHXFU=",
+                "url": "https://chromium.googlesource.com/chromium/deps/icu.git",
+                "rev": "a622de35ac311c5ad390a7af80724634e5dc61ed"
+            },
+            "src/third_party/jsoncpp/source": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-bSLNcoYBz3QCt5VuTR056V9mU2PmBuYBa0W6hFg2m8Q=",
+                "url": "https://chromium.googlesource.com/external/github.com/open-source-parsers/jsoncpp.git",
+                "rev": "42e892d96e47b1f6e29844cc705e148ec4856448"
+            },
+            "src/third_party/leveldatabase/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-TTX2FrmcWsgqrh4uzqMyGnnnG51cVC2ILfdLxD65MLY=",
+                "url": "https://chromium.googlesource.com/external/leveldb.git",
+                "rev": "068d5ee1a3ac40dabd00d211d5013af44be55bea"
+            },
+            "src/third_party/libFuzzer/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-Zp8Ea/7GwmEl964MEIk3UM6IR5+FtUz8InlqZaOniDA=",
+                "url": "https://chromium.googlesource.com/external/github.com/llvm/llvm-project/compiler-rt/lib/fuzzer.git",
+                "rev": "26cc39e59b2bf5cbc20486296248a842c536878d"
+            },
+            "src/third_party/fuzztest/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-tVtrSbLxnHrbh027cafNbqkfjq/afQxw57rW9yGsRe0=",
+                "url": "https://chromium.googlesource.com/external/github.com/google/fuzztest.git",
+                "rev": "25f44f341f701eccc29d22f69313a54363c6099b"
+            },
+            "src/third_party/libaddressinput/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-xvUUQSPrvqUp5DI9AqlRTWurwDW087c6v4RvI+4sfOQ=",
+                "url": "https://chromium.googlesource.com/external/libaddressinput.git",
+                "rev": "e8712e415627f22d0b00ebee8db99547077f39bd"
+            },
+            "src/third_party/libaom/source/libaom": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-Z8td6FIvHibTQsB6x/A/69xduogj2b2lteiQB6l56vE=",
+                "url": "https://aomedia.googlesource.com/aom.git",
+                "rev": "5f8db64abce68a3698fb732697ae50880bc9cac4"
+            },
+            "src/third_party/libavif/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-KfRRGTS8kBwi9Z9wafpSwL29RU38THG2xBCvNBXtZtg=",
+                "url": "https://chromium.googlesource.com/external/github.com/AOMediaCodec/libavif.git",
+                "rev": "b2d36b1c3bfc806694cd4ff0cb188270823fe6d8"
+            },
+            "src/third_party/libavifinfo/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-yTv1AGtWfxXcywZycpsQBkBRLwuUJMPFKtpj7nrsc4A=",
+                "url": "https://aomedia.googlesource.com/libavifinfo.git",
+                "rev": "707919b2f8ac1920b2f7ae252c233f9c6dcf84e1"
+            },
+            "src/third_party/nearby/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-5d7c8WvkjmBuwcwqhxQf0wRE3qaF8fFsiqUE1sHh0nc=",
+                "url": "https://chromium.googlesource.com/external/github.com/google/nearby-connections.git",
+                "rev": "8725391822b8901784b379a4573ab8828e7091d3"
+            },
+            "src/third_party/beto-core/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-qgsPK7RyVqGRji0sTcMck1JqX9iCsYIExGoGwNZyVT0=",
+                "url": "https://beto-core.googlesource.com/beto-core.git",
+                "rev": "b902b346037ea3f4aadf8177021f6f917b16e648"
+            },
+            "src/third_party/securemessage/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-GS4ccnuiqxMs/LVYAtvSlVAYFp4a5GoZsxcriTX3k78=",
+                "url": "https://chromium.googlesource.com/external/github.com/google/securemessage.git",
+                "rev": "fa07beb12babc3b25e0c5b1f38c16aa8cb6b8f84"
+            },
+            "src/third_party/speedometer/v3.0": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-PqrwtPFU3TI840za3UU8p+t4ZdyX0l79esEA602Mbq0=",
+                "url": "https://chromium.googlesource.com/external/github.com/WebKit/Speedometer.git",
+                "rev": "5107c739c1b2a008e7293e3b489c4f80a8fb2e01"
+            },
+            "src/third_party/ukey2/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-aaLs6ZS+CdBlCJ6ZhsmdAPFxiBIij6oufsDcNeRSV1E=",
+                "url": "https://chromium.googlesource.com/external/github.com/google/ukey2.git",
+                "rev": "0275885d8e6038c39b8a8ca55e75d1d4d1727f47"
+            },
+            "src/third_party/cros-components/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-s8pfcu5SkxXFCat76TJaDi1NTTQckZ1F+T8URCxOUdI=",
+                "url": "https://chromium.googlesource.com/external/google3/cros_components.git",
+                "rev": "bf7aaccb73b26c11e8bf21cb7d90314338e1743f"
+            },
+            "src/third_party/libdrm/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-NUxS2rBJ0nFblvHRQUfKT933+DAws5RUTDb+RLxRF4M=",
+                "url": "https://chromium.googlesource.com/chromiumos/third_party/libdrm.git",
+                "rev": "98e1db501173303e58ef6a1def94ab7a2d84afc1"
+            },
+            "src/third_party/expat/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-FXTDGAK03jc2wvazhRKqtsFRKZUYS/9HLpZNp4JfZJI=",
+                "url": "https://chromium.googlesource.com/external/github.com/libexpat/libexpat.git",
+                "rev": "441f98d02deafd9b090aea568282b28f66a50e36"
+            },
+            "src/third_party/libipp/libipp": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-gxU92lHLd6uxO8T3QWhZIK0hGy97cki705DV0VimCPY=",
+                "url": "https://chromium.googlesource.com/chromiumos/platform2/libipp.git",
+                "rev": "2209bb84a8e122dab7c02fe66cc61a7b42873d7f"
+            },
+            "src/third_party/libjpeg_turbo": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-bcmp8RqQYp4lRI9NfdfYgrAJsDLecJEhgRu9oosB9lQ=",
+                "url": "https://chromium.googlesource.com/chromium/deps/libjpeg_turbo.git",
+                "rev": "30bdb85e302ecfc52593636b2f44af438e05e784"
+            },
+            "src/third_party/liblouis/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-EI/uaHXe0NlqdEw764q0SjerThYEVLRogUlmrsZwXnY=",
+                "url": "https://chromium.googlesource.com/external/liblouis-github.git",
+                "rev": "9700847afb92cb35969bdfcbbfbbb74b9c7b3376"
+            },
+            "src/third_party/libphonenumber/dist": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-3hSnTFTD3KAdbyxfKg12qbIYTmw6YlTCH64gMP/HUJo=",
+                "url": "https://chromium.googlesource.com/external/libphonenumber.git",
+                "rev": "140dfeb81b753388e8a672900fb7a971e9a0d362"
+            },
+            "src/third_party/libprotobuf-mutator/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-ZyPweW+V5foxFQwjjMLkaRUo+FNV+kEDGIH/4oRV614=",
+                "url": "https://chromium.googlesource.com/external/github.com/google/libprotobuf-mutator.git",
+                "rev": "a304ec48dcf15d942607032151f7e9ee504b5dcf"
+            },
+            "src/third_party/libsrtp": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-pfLFh2JGk/g0ZZxBKTaYW9/PBpkCm0rtJeyNePUMTTc=",
+                "url": "https://chromium.googlesource.com/chromium/deps/libsrtp.git",
+                "rev": "5b7c744eb8310250ccc534f3f86a2015b3887a0a"
+            },
+            "src/third_party/libsync/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-Mkl6C1LxF3RYLwYbxiSfoQPt8QKFwQWj/Ati2sNJ32E=",
+                "url": "https://chromium.googlesource.com/aosp/platform/system/core/libsync.git",
+                "rev": "f4f4387b6bf2387efbcfd1453af4892e8982faf6"
+            },
+            "src/third_party/libvpx/source/libvpx": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-5x0Sk8/DXaTCIydK79vWZgIx3IHeQbLUxoNyE7E+Sdo=",
+                "url": "https://chromium.googlesource.com/webm/libvpx.git",
+                "rev": "38a707faef72eeff89d669c553e7bfe9e08dba8f"
+            },
+            "src/third_party/libwebm/source": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-u/5nkJed0DzdhR5OLL2kIhZhOnrbyzL1Kx37vV/jcEo=",
+                "url": "https://chromium.googlesource.com/webm/libwebm.git",
+                "rev": "e4fbea0c9751ae8aa86629b197a28d8276a2b0da"
+            },
+            "src/third_party/libwebp/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-79peh0y3eeiW5cVQqVq0mUgDcGZ9BlY+OXkPZylKARY=",
+                "url": "https://chromium.googlesource.com/webm/libwebp.git",
+                "rev": "2af26267cdfcb63a88e5c74a85927a12d6ca1d76"
+            },
+            "src/third_party/libyuv": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-jxs9kHI40gRFhm9cU6uS1Rxj+LLUUqT9b3myihxgW7s=",
+                "url": "https://chromium.googlesource.com/libyuv/libyuv.git",
+                "rev": "04821d1e7d60845525e8db55c7bcd41ef5be9406"
+            },
+            "src/third_party/lss": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-hE8uZf9Fst66qJkoVYChiB8G41ie+k9M4X0W+5JUSdw=",
+                "url": "https://chromium.googlesource.com/linux-syscall-support.git",
+                "rev": "ce877209e11aa69dcfffbd53ef90ea1d07136521"
+            },
+            "src/third_party/material_color_utilities/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-oi28dWuTd6ijn/RKSPukDr5GSzYiCTM2klFb7WSMDHY=",
+                "url": "https://chromium.googlesource.com/external/github.com/material-foundation/material-color-utilities.git",
+                "rev": "234a000e507d586c20df6e3bf5b9e035bc5ce7b1"
+            },
+            "src/third_party/minigbm/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-9HwvjTETerbQ7YKXH9kUB2eWa8PxGWMAJfx1jAluhrs=",
+                "url": "https://chromium.googlesource.com/chromiumos/platform/minigbm.git",
+                "rev": "3018207f4d89395cc271278fb9a6558b660885f5"
+            },
+            "src/third_party/nasm": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-L+b3X3vsfpY6FSlIK/AHhxhmq2cXd50vND6uT6yn8Qs=",
+                "url": "https://chromium.googlesource.com/chromium/deps/nasm.git",
+                "rev": "7fc833e889d1afda72c06220e5bed8fb43b2e5ce"
+            },
+            "src/third_party/neon_2_sse/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-299ZptvdTmCnIuVVBkrpf5ZTxKPwgcGUob81tEI91F0=",
+                "url": "https://chromium.googlesource.com/external/github.com/intel/ARM_NEON_2_x86_SSE.git",
+                "rev": "a15b489e1222b2087007546b4912e21293ea86ff"
+            },
+            "src/third_party/openh264/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-J7Eqe2QevZh1xfap19W8AVCcwfRu7ztknnbKFJUAH1c=",
+                "url": "https://chromium.googlesource.com/external/github.com/cisco/openh264",
+                "rev": "09a4f3ec842a8932341b195c5b01e141c8a16eb7"
+            },
+            "src/third_party/openscreen/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-TyZ/sZ0gnesWjKUnO2RVM2TTdpVIxsBWueHDgix0/wg=",
+                "url": "https://chromium.googlesource.com/openscreen",
+                "rev": "971d6055e7b78c474e2e734e55a2991fbb7ab665"
+            },
+            "src/third_party/openscreen/src/third_party/tinycbor/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-fMKBFUSKmODQyg4hKIa1hwnEKIV6WBbY1Gb8DOSnaHA=",
+                "url": "https://chromium.googlesource.com/external/github.com/intel/tinycbor.git",
+                "rev": "d393c16f3eb30d0c47e6f9d92db62272f0ec4dc7"
+            },
+            "src/third_party/pdfium": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-u+El2jEnvlcQs5j5TthpKj8s255n2AhJPW+Q/s0Ljm0=",
+                "url": "https://pdfium.googlesource.com/pdfium.git",
+                "rev": "6e55da0c45788fdc22fa3aab7ead414fc42b74c1"
+            },
+            "src/third_party/perfetto": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-/8WQO0r10Hz3yLNh1MtjE8rGfzbpDkUowA2OPwEuRvA=",
+                "url": "https://android.googlesource.com/platform/external/perfetto.git",
+                "rev": "43b72e3ce703b676c9c923b04540472d10790f56"
+            },
+            "src/third_party/pthreadpool/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-Pfvievhma1rOpbLdSrIX4KaZyRpdvrnjRzzPYl3fDQo=",
+                "url": "https://chromium.googlesource.com/external/github.com/Maratyszcza/pthreadpool.git",
+                "rev": "1787867f6183f056420e532eec640cba25efafea"
+            },
+            "src/third_party/pyelftools": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-I/7p3IEvfP/gkes4kx18PvWwhAKilQKb67GXoW4zFB4=",
+                "url": "https://chromium.googlesource.com/chromiumos/third_party/pyelftools.git",
+                "rev": "19b3e610c86fcadb837d252c794cb5e8008826ae"
+            },
+            "src/third_party/quic_trace/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-Nf9ZDLcE1JunhbpEMHhrY2ROnbgrvVZoRkPwWq1DU0g=",
+                "url": "https://chromium.googlesource.com/external/github.com/google/quic-trace.git",
+                "rev": "caa0a6eaba816ecb737f9a70782b7c80b8ac8dbc"
+            },
+            "src/third_party/pywebsocket3/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-WEqqu2/7fLqcf/2/IcD7/FewRSZ6jTgVlVBvnihthYQ=",
+                "url": "https://chromium.googlesource.com/external/github.com/GoogleChromeLabs/pywebsocket3.git",
+                "rev": "50602a14f1b6da17e0b619833a13addc6ea78bc2"
+            },
+            "src/third_party/re2/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-9V/Q5o24sL1TJUDNifUqpyrQ2zTSrhU0Bxo9qDwd0+4=",
+                "url": "https://chromium.googlesource.com/external/github.com/google/re2.git",
+                "rev": "87d09ef4f0307e53f1d3796843f4b90d41cfccaa"
+            },
+            "src/third_party/ruy/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-hNco0Jol4vQS1bkYiXaoZ1IPHwoRq3DD3iY0TeLygew=",
+                "url": "https://chromium.googlesource.com/external/github.com/google/ruy.git",
+                "rev": "c04e5e52ae6b144f74ac032652e3c538bda15c9b"
+            },
+            "src/third_party/skia": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-Ck15ddYoo8pVLHcwW5P8Ei1sBQf23EGd/ySGOVSWAFQ=",
+                "url": "https://skia.googlesource.com/skia.git",
+                "rev": "b4f0c1163c955e42489f62d842585720cf0df0ea"
+            },
+            "src/third_party/smhasher/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-RyC//me08hwGXRrWcK8GZ1uhIkBq4FByA7fHCVDsniw=",
+                "url": "https://chromium.googlesource.com/external/smhasher.git",
+                "rev": "e87738e57558e0ec472b2fc3a643b838e5b6e88f"
+            },
+            "src/third_party/snappy/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-5fV6NfO8vmqK+iCwpLtE2YjYOzjsshctauyjNIOxrH0=",
+                "url": "https://chromium.googlesource.com/external/github.com/google/snappy.git",
+                "rev": "c9f9edf6d75bb065fa47468bf035e051a57bec7c"
+            },
+            "src/third_party/sqlite/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-35rSG+ptFMC62FsprLvAqfXZknKu40Ee6H2qpAcA3wI=",
+                "url": "https://chromium.googlesource.com/chromium/deps/sqlite.git",
+                "rev": "b7e480172bb2411f9afedefdcc69a57a12f18b7b"
+            },
+            "src/third_party/swiftshader": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-PCPb5opTATGCCQmw8TGF09TbLL8QES+So+yaL68H//I=",
+                "url": "https://swiftshader.googlesource.com/SwiftShader.git",
+                "rev": "32f9332d1d7aacbdba7c1aa5df894bb1890bb2cc"
+            },
+            "src/third_party/text-fragments-polyfill/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-4rW2u1cQAF4iPWHAt1FvVXIpz2pmI901rEPks/w/iFA=",
+                "url": "https://chromium.googlesource.com/external/github.com/GoogleChromeLabs/text-fragments-polyfill.git",
+                "rev": "c036420683f672d685e27415de0a5f5e85bdc23f"
+            },
+            "src/third_party/tflite/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-3gawK1S5+nr5yOAHgYozLWSoT1TbJmB6Md1fID6du9w=",
+                "url": "https://chromium.googlesource.com/external/github.com/tensorflow/tensorflow.git",
+                "rev": "91946956f81a2d9fd12a6d6baba20c997d3f8890"
+            },
+            "src/third_party/vulkan-deps": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-xYX77wsgG+2TzS0AinFJndnID5P3/anY4TPh3cjRaIY=",
+                "url": "https://chromium.googlesource.com/vulkan-deps",
+                "rev": "4b7a5f2a3522cbc4e4334cdc64bfaf3f832b89c3"
+            },
+            "src/third_party/vulkan-deps/glslang/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-Y9AmEtFPj+sp/a5YnHChqlqgW/1kdaJ1CEbBB5r2cuI=",
+                "url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/glslang",
+                "rev": "e3a711b6fc942307be7cb634698015dfd13c37fe"
+            },
+            "src/third_party/vulkan-deps/spirv-cross/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-I8RXVat6//rlpmZuuC99Ar/Rct6MFce4FGKgQA2gBj0=",
+                "url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/SPIRV-Cross",
+                "rev": "54997fb4bc3adeb47b9b9f7bb67f1c25eaca2204"
+            },
+            "src/third_party/vulkan-deps/spirv-headers/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-OqLxyrTzg1Q2zmQd0YalWtl7vX5lRJFmE2VH7fHC8/8=",
+                "url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/SPIRV-Headers",
+                "rev": "d790ced752b5bfc06b6988baadef6eb2d16bdf96"
+            },
+            "src/third_party/vulkan-deps/spirv-tools/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-wFdAzbOQdOqeuVaWl5036qkli1gkSiL5JHH82Z5cFL4=",
+                "url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/SPIRV-Tools",
+                "rev": "4c16c35b16bbd462a0e89707ebeecc0bce956b2f"
+            },
+            "src/third_party/vulkan-deps/vulkan-headers/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-9+tHkkHsP5ft6+tbofOYV1yBFDpFlJz4Q6YS8c6T5As=",
+                "url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-Headers",
+                "rev": "2634c969d7dc0e983f005f7f2e665cce8449efe6"
+            },
+            "src/third_party/vulkan-deps/vulkan-loader/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-q7/dYKQ3O0aSs326YbEeLlS+SciFWugBGm/G+b8RNd0=",
+                "url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-Loader",
+                "rev": "d34bfafff23602e857064bea6d99a35eb63f37f2"
+            },
+            "src/third_party/vulkan-deps/vulkan-tools/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-tcaJmosHwTo38keV5qkumkLB1o1qq8v2ZmSsi2zDGoE=",
+                "url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-Tools",
+                "rev": "389110e4600669d82bca042859fddf898387c0d2"
+            },
+            "src/third_party/vulkan-deps/vulkan-utility-libraries/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-7M47ZCbNwIppaotMfJTFTRsYNvSZNc0FUufoyXyUu/g=",
+                "url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-Utility-Libraries",
+                "rev": "dd26ae7065a9ed60c8ab517ed79bf7935394aec7"
+            },
+            "src/third_party/vulkan-deps/vulkan-validation-layers/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-lj6MIQctcK6gsJlLdLwQ9PHbiAtTbNIPinii8vGZdGk=",
+                "url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-ValidationLayers",
+                "rev": "b89f48ae89ec064c91e8b77468cebc18c3faa682"
+            },
+            "src/third_party/vulkan_memory_allocator": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-FdRPPdLZHj3RX3YzcmF58JJuIqeWQV3TDiiXPEW2lsc=",
+                "url": "https://chromium.googlesource.com/external/github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator.git",
+                "rev": "e87036508bb156f9986ea959323de1869e328f58"
+            },
+            "src/third_party/wayland/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-aVcy7bW1cqEKbowlVgfa9FI8/oG7k5CzPZbRl+cPcX8=",
+                "url": "https://chromium.googlesource.com/external/anongit.freedesktop.org/git/wayland/wayland.git",
+                "rev": "a8c7553ec9af6462474524fd2bb4e9a7dc7217dd"
+            },
+            "src/third_party/wayland-protocols/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-3QK+ZN6IFUFkDxySSoQwP1J3JnTlD7JPaUk6Tr/d/k4=",
+                "url": "https://chromium.googlesource.com/external/anongit.freedesktop.org/git/wayland/wayland-protocols.git",
+                "rev": "4624cfaaf563cd7be5e2e2087c8de6d3a48ea867"
+            },
+            "src/third_party/wayland-protocols/kde": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-Dmcp/2ms/k7NxPPmPkp0YNfM9z2Es1ZO0uX10bc7N2Y=",
+                "url": "https://chromium.googlesource.com/external/github.com/KDE/plasma-wayland-protocols.git",
+                "rev": "0b07950714b3a36c9b9f71fc025fc7783e82926e"
+            },
+            "src/third_party/wayland-protocols/gtk": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-75XNnLkF5Lt1LMRGT+T61k0/mLa3kkynfN+QWvZ0LiQ=",
+                "url": "https://chromium.googlesource.com/external/github.com/GNOME/gtk.git",
+                "rev": "40ebed3a03aef096addc0af09fec4ec529d882a0"
+            },
+            "src/third_party/webdriver/pylib": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-WIqWXIKVgElgg8P8laLAlUrgwodGdeVcwohZxnPKedw=",
+                "url": "https://chromium.googlesource.com/external/github.com/SeleniumHQ/selenium/py.git",
+                "rev": "fc5e7e70c098bfb189a9a74746809ad3c5c34e04"
+            },
+            "src/third_party/webgl/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-h4by/1pp9oQGetZNnc1Rt5X5izgQf8ZUZDfsxQacqC0=",
+                "url": "https://chromium.googlesource.com/external/khronosgroup/webgl.git",
+                "rev": "eab0468fc0405b21e59bea30a441d8e38c9db2b7"
+            },
+            "src/third_party/webgpu-cts/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-Wch3opAvU/6rJVptOKxOJssev8NhNpbYZddScTlzuMw=",
+                "url": "https://chromium.googlesource.com/external/github.com/gpuweb/cts.git",
+                "rev": "4c8d2f67ecd03fbd3cb4c517ef8461427b6d635d"
+            },
+            "src/third_party/webrtc": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-KpiNGAue945kGCuQYGhxiWVUFTE1tcntSAXBZdkrE9A=",
+                "url": "https://webrtc.googlesource.com/src.git",
+                "rev": "d8f2b0380b3ec980af35ce4b92ba6a211ec8c76d"
+            },
+            "src/third_party/wuffs/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-HP8Vf1C9DuA9H+busf3lFoF9SsYqviLKv0l73CxmNEI=",
+                "url": "https://skia.googlesource.com/external/github.com/google/wuffs-mirror-release-c.git",
+                "rev": "fe9d08f2b6e80af691bfb1a718e144c49a1b9eba"
+            },
+            "src/third_party/weston/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-sfJm1CBGXX13pFcqeOVPqWlXrUfwjRl+rYf2BoT8Bt8=",
+                "url": "https://chromium.googlesource.com/external/anongit.freedesktop.org/git/wayland/weston.git",
+                "rev": "775f8a1edf357f59e6b2e284297f396f4fac95a4"
+            },
+            "src/third_party/xdg-utils": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-t3uV9JkkQQIwmezzSoEdTMLSizZdLQB7eLKTRQGH4kQ=",
+                "url": "https://chromium.googlesource.com/chromium/deps/xdg-utils.git",
+                "rev": "d80274d5869b17b8c9067a1022e4416ee7ed5e0d"
+            },
+            "src/third_party/xnnpack/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-vsn3lrog5affus0qxc4TK2Z/tdd/E6hBYeUQRWoDZPQ=",
+                "url": "https://chromium.googlesource.com/external/github.com/google/XNNPACK.git",
+                "rev": "b9d4073a6913891ce9cbd8965c8d506075d2a45a"
+            },
+            "src/tools/page_cycler/acid3": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-s/49EaYQRsyxuLejXc1zGDYTD7uO0ddaQIJBP50Bvw0=",
+                "url": "https://chromium.googlesource.com/chromium/deps/acid3.git",
+                "rev": "a926d0a32e02c4c03ae95bb798e6c780e0e184ba"
+            },
+            "src/third_party/zstd/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-yzv/R/GnqlXLeAjBEIev+8uM7MC0HeK0MfppnMTJ7Eg=",
+                "url": "https://chromium.googlesource.com/external/github.com/facebook/zstd.git",
+                "rev": "25822342be59d831bad65426ae51f5cc22157b09"
+            },
+            "src/v8": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-Fn4HoS7O2J3nGXFyq7r7AheRQzKy80USTQnNnC4rWqM=",
+                "url": "https://chromium.googlesource.com/v8/v8.git",
+                "rev": "36e4828ab658b8ad72f80974883c4c94f6e7012c"
+            },
+            "src/third_party/nan": {
+                "fetcher": "fetchFromGitHub",
+                "hash": "sha256-tur5CExvwuSmwqBwH9o8OZWzDuifRybjEb+4/tm6exk=",
+                "owner": "nodejs",
+                "repo": "nan",
+                "rev": "16fa32231e2ccd89d2804b3f765319128b20c4ac"
+            },
+            "src/third_party/electron_node": {
+                "fetcher": "fetchFromGitHub",
+                "hash": "sha256-SI4qIix+sXWIS3WJyJoTdPb1cmSIhpLAmfa9iX/5Jlg=",
+                "owner": "nodejs",
+                "repo": "node",
+                "rev": "v18.17.1"
+            },
+            "src/third_party/squirrel.mac": {
+                "fetcher": "fetchFromGitHub",
+                "hash": "sha256-4GfKQg0u3c9GI+jl3ixESNqWXQJKRMi+00QT0s2Shqw=",
+                "owner": "Squirrel",
+                "repo": "Squirrel.Mac",
+                "rev": "0e5d146ba13101a1302d59ea6e6e0b3cace4ae38"
+            },
+            "src/third_party/squirrel.mac/vendor/ReactiveObjC": {
+                "fetcher": "fetchFromGitHub",
+                "hash": "sha256-/MCqC1oFe3N9TsmfVLgl+deR6qHU6ZFQQjudb9zB5Mo=",
+                "owner": "ReactiveCocoa",
+                "repo": "ReactiveObjC",
+                "rev": "74ab5baccc6f7202c8ac69a8d1e152c29dc1ea76"
+            },
+            "src/third_party/squirrel.mac/vendor/Mantle": {
+                "fetcher": "fetchFromGitHub",
+                "hash": "sha256-ogFkMJybf2Ue606ojXJu6Gy5aXSi1bSKm60qcTAIaPk=",
+                "owner": "Mantle",
+                "repo": "Mantle",
+                "rev": "78d3966b3c331292ea29ec38661b25df0a245948"
+            }
+        },
+        "version": "27.3.2",
+        "modules": "118",
+        "chrome": "118.0.5993.159",
+        "node": "18.17.1",
+        "chromium": {
+            "version": "118.0.5993.159",
+            "deps": {
+                "gn": {
+                    "version": "2023-08-10",
+                    "url": "https://gn.googlesource.com/gn",
+                    "rev": "cc56a0f98bb34accd5323316e0292575ff17a5d4",
+                    "hash": "sha256-SwlET5h5xtDlQvlt8wbG73ZfUWJr4hlWc+uQsBH5x9M="
+                }
+            }
+        },
+        "electron_yarn_hash": "1yq854829a4q0yqyjyn2lq4l3amsqdhfd7fjcnc3mz8l2ci3n964",
+        "chromium_npm_hash": "sha256-5cjqpYB45nw2gop54VP+tL7/0w63nQGfQ4x6a6KS7XQ="
+    },
+    "26": {
+        "deps": {
+            "src/electron": {
+                "fetcher": "fetchFromGitHub",
+                "hash": "sha256-jIoRqmPge36KJBM+zXF2CXlPjjIVm9dEnt/EryHr7X4=",
+                "owner": "electron",
+                "repo": "electron",
+                "rev": "v26.6.9"
+            },
+            "src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-yctASyLtsBAxK7S34wVJB64QKnQkV3jGXshKWVpMjVo=",
+                "url": "https://chromium.googlesource.com/chromium/src.git",
+                "rev": "116.0.5845.228",
+                "postFetch": "rm -r $out/third_party/blink/web_tests; rm -r $out/third_party/hunspell/tests; rm -r $out/content/test/data; rm -r $out/courgette/testdata; rm -r $out/extensions/test/data; rm -r $out/media/test/data; "
+            },
+            "src/third_party/clang-format/script": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-IL6ReGM6+urkXfGYe1BBOv+0XgCZv5i3Lib1q9COhig=",
+                "url": "https://chromium.googlesource.com/external/github.com/llvm/llvm-project/clang/tools/clang-format.git",
+                "rev": "f97059df7f8b205064625cdb5f97b56668a125ef"
+            },
+            "src/buildtools/third_party/libc++/trunk": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-Sdhhr/tSo7B1tvFY7jFUw82pDrF0n5cEMq567WzD1uE=",
+                "url": "https://chromium.googlesource.com/external/github.com/llvm/llvm-project/libcxx.git",
+                "rev": "055b2e17ae4f0e2c025ad0c7508b01787df17758"
+            },
+            "src/buildtools/third_party/libc++abi/trunk": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-pZy10+P+RWGQavLqCI4M4bGHcxPnKulwC3WSE5lIXfU=",
+                "url": "https://chromium.googlesource.com/external/github.com/llvm/llvm-project/libcxxabi.git",
+                "rev": "8d21803b9076b16d46c32e2f10da191ee758520c"
+            },
+            "src/buildtools/third_party/libunwind/trunk": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-DVacn5wSGeXLfjEQoCo2qLySgzkA79cdWktDkZ2dLY8=",
+                "url": "https://chromium.googlesource.com/external/github.com/llvm/llvm-project/libunwind.git",
+                "rev": "b5a43ecdac82a248f8a700a68c722b4d98708377"
+            },
+            "src/chrome/test/data/perf/canvas_bench": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-svOuyBGKloBLM11xLlWCDsB4PpRjdKTBdW2UEW4JQjM=",
+                "url": "https://chromium.googlesource.com/chromium/canvas_bench.git",
+                "rev": "a7b40ea5ae0239517d78845a5fc9b12976bfc732"
+            },
+            "src/chrome/test/data/perf/frame_rate/content": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-t4kcuvH0rkPBkcdiMsoNQaRwU09eU+oSvyHDiAHrKXo=",
+                "url": "https://chromium.googlesource.com/chromium/frame_rate/content.git",
+                "rev": "c10272c88463efeef6bb19c9ec07c42bc8fe22b9"
+            },
+            "src/chrome/test/data/xr/webvr_info": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-BsAPwc4oEWri0TlqhyxqFNqKdfgVSrB0vQyISmYY4eg=",
+                "url": "https://chromium.googlesource.com/external/github.com/toji/webvr.info.git",
+                "rev": "c58ae99b9ff9e2aa4c524633519570bf33536248"
+            },
+            "src/docs/website": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-+iC1NPdw6LzzPbtLgO9ipvkeJjDAfBIODOtyIURlUX8=",
+                "url": "https://chromium.googlesource.com/website.git",
+                "rev": "715769197cbe967605f24842ffcfb733d31b40fd"
+            },
+            "src/media/cdm/api": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-6J6aSYW0or99VAgMNJJOdJqMJspoG7w1HxDN50MV5bw=",
+                "url": "https://chromium.googlesource.com/chromium/cdm.git",
+                "rev": "fef0b5aa1bd31efb88dfab804bdbe614f3d54f28"
+            },
+            "src/net/third_party/quiche/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-GMlLTzjU592zIc8hhFyAupY95+qR49r8x0q2l80XHDI=",
+                "url": "https://quiche.googlesource.com/quiche.git",
+                "rev": "037705cdfae29714daa24852021c2e5998a54446"
+            },
+            "src/third_party/angle": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-v4eIJssxzb2hE4NrKZMyhbzxwNc3koqcADVcBrw8iT8=",
+                "url": "https://chromium.googlesource.com/angle/angle.git",
+                "rev": "b48983ab8c74d2fcd9ef17c80727affb9e690c53"
+            },
+            "src/third_party/angle/third_party/glmark2/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-L7+zWM0qn8WFhmON7DGvarTsN1YHt1sn5+hazTOZrrk=",
+                "url": "https://chromium.googlesource.com/external/github.com/glmark2/glmark2",
+                "rev": "ca8de51fedb70bace5351c6b002eb952c747e889"
+            },
+            "src/third_party/angle/third_party/rapidjson/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-btUl1a/B0sXwf/+hyvCvVJjWqIkXfVYCpHm3TeBuOxk=",
+                "url": "https://chromium.googlesource.com/external/github.com/Tencent/rapidjson",
+                "rev": "781a4e667d84aeedbeb8184b7b62425ea66ec59f"
+            },
+            "src/third_party/angle/third_party/VK-GL-CTS/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-aiSGPLKRUErLohhLlcY/fWIJuUMzazDPIxiohiuCs6o=",
+                "url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/VK-GL-CTS",
+                "rev": "f29bd2feeafff80013d4b52a8abbc960cbbb7dbd"
+            },
+            "src/third_party/anonymous_tokens/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-TcNIocV0p53NJCudvy8wf+fIPIP2tnkoBf1F7mEBFLs=",
+                "url": "https://chromium.googlesource.com/external/github.com/google/anonymous-tokens.git",
+                "rev": "8c8d20953d502db31fec2353b199e6c22ef0236e"
+            },
+            "src/third_party/content_analysis_sdk/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-p4N3zAUoM/ApBlYvLsCcH9QLArz7T4+miDGVuTbrZEc=",
+                "url": "https://chromium.googlesource.com/external/github.com/chromium/content_analysis_sdk.git",
+                "rev": "b8744f00646d175057f0be7443c7c72a311b5381"
+            },
+            "src/third_party/dav1d/libdav1d": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-KSo2s3M3S13gY84NlAdnPsjoKfJZy7ipTlWSvUHD9Ak=",
+                "url": "https://chromium.googlesource.com/external/github.com/videolan/dav1d.git",
+                "rev": "f8ae94eca0f53502a2cddd29a263c1edea4822a0"
+            },
+            "src/third_party/dawn": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-rX6wJVOoTnkpniDWjwMoneszAokXXkdcpXNE/JXayEY=",
+                "url": "https://dawn.googlesource.com/dawn.git",
+                "rev": "5318d39e47819212769b974ed3a0b42e373df59e"
+            },
+            "src/third_party/dawn/third_party/glfw": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-TwAPRjQxIz3J+zbNxzCp5Tek7MwisxdekMpY5QGsKyg=",
+                "url": "https://chromium.googlesource.com/external/github.com/glfw/glfw",
+                "rev": "62e175ef9fae75335575964c845a302447c012c7"
+            },
+            "src/third_party/dawn/third_party/webgpu-cts": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-DoS9lSP9nVxeKpAtvWQbdYRSaiF0m+MXysfRC8bxqrY=",
+                "url": "https://chromium.googlesource.com/external/github.com/gpuweb/cts",
+                "rev": "b033a4f1ae4a0e19ae4d5563fae023001bbf570f"
+            },
+            "src/third_party/highway/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-kNb9UVcFq2BIf9nftUgN8ciFFCzRCou/sLwVf08jf3E=",
+                "url": "https://chromium.googlesource.com/external/github.com/google/highway.git",
+                "rev": "8f20644eca693cfb74aa795b0006b6779c370e7a"
+            },
+            "src/third_party/google_benchmark/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-h2ryAQAuHI54Cni88L85e7Np4KATGVTRdDcmUvCNeWc=",
+                "url": "https://chromium.googlesource.com/external/github.com/google/benchmark.git",
+                "rev": "b177433f3ee2513b1075140c723d73ab8901790f"
+            },
+            "src/third_party/boringssl/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-ZPao/g4Tqc6s/ZLDe3FDuw8rmO0ON07/t7y1c/C2bAs=",
+                "url": "https://boringssl.googlesource.com/boringssl.git",
+                "rev": "ae88f198a49d77993e9c44b017d0e69c810dc668"
+            },
+            "src/third_party/breakpad/breakpad": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-8AkC/8oX4OWAcV21laJ0AeMRB9G04rFc6UJFy7Wus4A=",
+                "url": "https://chromium.googlesource.com/breakpad/breakpad.git",
+                "rev": "8988364bcddd9b194b0bf931c10bc125987330ed"
+            },
+            "src/third_party/cast_core/public/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-pyjxQQYnsASHV2SxwZeIqkZJSpTrqyGg7Uee/GRp9VU=",
+                "url": "https://chromium.googlesource.com/cast_core/public",
+                "rev": "e42ef68aa05ac0c163805f60b9b19284f3c2dee3"
+            },
+            "src/third_party/catapult": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-MkkIztmLGRmxkRAPGZgeb+cc4Dn9Z24p+umwFzAxhpQ=",
+                "url": "https://chromium.googlesource.com/catapult.git",
+                "rev": "cef5cf05b2410be6cae210e4ae7de0ab808736c3"
+            },
+            "src/third_party/ced/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-ySG74Rj2i2c/PltEgHVEDq+N8yd9gZmxNktc56zIUiY=",
+                "url": "https://chromium.googlesource.com/external/github.com/google/compact_enc_det.git",
+                "rev": "ba412eaaacd3186085babcd901679a48863c7dd5"
+            },
+            "src/third_party/cld_3/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-C3MOMBUy9jgkT9BAi/Fgm2UH4cxRuwSBEcRl3hzM2Ss=",
+                "url": "https://chromium.googlesource.com/external/github.com/google/cld_3.git",
+                "rev": "b48dc46512566f5a2d41118c8c1116c4f96dc661"
+            },
+            "src/third_party/colorama/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-6ZTdPYSHdQOLYMSnE+Tp7PgsVTs3U2awGu9Qb4Rg/tk=",
+                "url": "https://chromium.googlesource.com/external/colorama.git",
+                "rev": "3de9f013df4b470069d03d250224062e8cf15c49"
+            },
+            "src/third_party/cpu_features/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-E8LoVzhe+TAmARWZTSuINlsVhzpUJMxPPCGe/dHZcyA=",
+                "url": "https://chromium.googlesource.com/external/github.com/google/cpu_features.git",
+                "rev": "936b9ab5515dead115606559502e3864958f7f6e"
+            },
+            "src/third_party/cpuinfo/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-1XazrNQwwIFeiUgFxiZq8lU1jdlusdld9ddssVLccEM=",
+                "url": "https://chromium.googlesource.com/external/github.com/pytorch/cpuinfo.git",
+                "rev": "f44a9dabb2192ffb203ddd0c71f6373c7d82faed"
+            },
+            "src/third_party/crc32c/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-urg0bmnfMfHagLPELp4WrNCz1gBZ6DFOWpDue1KsMtc=",
+                "url": "https://chromium.googlesource.com/external/github.com/google/crc32c.git",
+                "rev": "fa5ade41ee480003d9c5af6f43567ba22e4e17e6"
+            },
+            "src/third_party/cros_system_api": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-SlIa4iN8FAGrR5/T2JlPA0RRDkwKmJ+z6FAe83Doo9c=",
+                "url": "https://chromium.googlesource.com/chromiumos/platform2/system_api.git",
+                "rev": "ea8d35b6f6762ff618dabf307be7a03971afa02e"
+            },
+            "src/third_party/crossbench": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-IM81ppJX/ib//P2ESbQXMSL+BiOSVKbdXZdcMsq4xn0=",
+                "url": "https://chromium.googlesource.com/crossbench.git",
+                "rev": "cdc33384bfa900dfec28e6cf7b5f22cd7ff2c92f"
+            },
+            "src/third_party/depot_tools": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-UuF8ft26lKDc4tOmYN8yyGQ6J8YFFcK0oJ5aVskooLQ=",
+                "url": "https://chromium.googlesource.com/chromium/tools/depot_tools.git",
+                "rev": "fc75af35d41df6c7742caef751428aa875199990"
+            },
+            "src/third_party/devtools-frontend/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-xq+qY3WZPRCGSmdk71wVCOAFbK4f4C87IVkSQkA5oeA=",
+                "url": "https://chromium.googlesource.com/devtools/devtools-frontend",
+                "rev": "f7c236f0555abbe40cebfdc2d4148ea8dfdf0f10"
+            },
+            "src/third_party/dom_distiller_js/dist": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-yuEBD2XQlV3FGI/i7lTmJbCqzeBiuG1Qow8wvsppGJw=",
+                "url": "https://chromium.googlesource.com/chromium/dom-distiller/dist.git",
+                "rev": "199de96b345ada7c6e7e6ba3d2fa7a6911b8767d"
+            },
+            "src/third_party/eigen3/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-ycpxfxQBCMZzPBJNwkJanLUoRenC6Ja4k2KnxPZ73aA=",
+                "url": "https://chromium.googlesource.com/external/gitlab.com/libeigen/eigen.git",
+                "rev": "7d7576f3262fa15c34d5575637bd8d7ff4a83f16"
+            },
+            "src/third_party/farmhash/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-5n58VEUxa/K//jAfZqG4cXyfxrp50ogWDNYcgiXVHdc=",
+                "url": "https://chromium.googlesource.com/external/github.com/google/farmhash.git",
+                "rev": "816a4ae622e964763ca0862d9dbd19324a1eaf45"
+            },
+            "src/third_party/ffmpeg": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-dvn/4ufK0lbfB9GKpNKKS/aImSVRBAyEss5cWm8iA84=",
+                "url": "https://chromium.googlesource.com/chromium/third_party/ffmpeg.git",
+                "rev": "881c5c3f6412020c37e97e178e0f5da9ddd2ae90"
+            },
+            "src/third_party/flac": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-gvTFPNOlBfozptaH7lTb9iD/09AmpdT3kCl9ClszjEs=",
+                "url": "https://chromium.googlesource.com/chromium/deps/flac.git",
+                "rev": "689da3a7ed50af7448c3f1961d1791c7c1d9c85c"
+            },
+            "src/third_party/flatbuffers/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-sKBf+en13jDX84/2adz10Z248MifhZg+YaMABIqaduE=",
+                "url": "https://chromium.googlesource.com/external/github.com/google/flatbuffers.git",
+                "rev": "13fc75cb6b7b44793f3f5b4ba025ff403d012c9f"
+            },
+            "src/third_party/fontconfig/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-0R+FEhtGXFiQWHEPRrJqaBW1JVfCojYI4NPDvYMBhoU=",
+                "url": "https://chromium.googlesource.com/external/fontconfig.git",
+                "rev": "06929a556fdc39c8fe12965b69070c8df520a33e"
+            },
+            "src/third_party/fp16/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-m2d9bqZoGWzuUPGkd29MsrdscnJRtuIkLIMp3fMmtRY=",
+                "url": "https://chromium.googlesource.com/external/github.com/Maratyszcza/FP16.git",
+                "rev": "0a92994d729ff76a58f692d3028ca1b64b145d91"
+            },
+            "src/third_party/gemmlowp/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-O5wD8wxgis0qYMaY+xZ21GBDVQFphMRvInCOswS6inA=",
+                "url": "https://chromium.googlesource.com/external/github.com/google/gemmlowp.git",
+                "rev": "13d57703abca3005d97b19df1f2db731607a7dc2"
+            },
+            "src/third_party/grpc/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-64JEVCx/PCM0dvv7kAQvSjLc0QbRAZVBDzwD/FAV6T8=",
+                "url": "https://chromium.googlesource.com/external/github.com/grpc/grpc.git",
+                "rev": "822dab21d9995c5cf942476b35ca12a1aa9d2737"
+            },
+            "src/third_party/freetype/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-JN7Mw+Osobx3LqAf7lR1EK3Tv2M0JCvd/8oNFEENH/k=",
+                "url": "https://chromium.googlesource.com/chromium/src/third_party/freetype2.git",
+                "rev": "3829fdaae5f12590f93807e9bcb866be131a201a"
+            },
+            "src/third_party/freetype-testing/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-2aHPchIK5Oce5+XxdXVCC+8EM6i0XT0rFbjSIVa2L1A=",
+                "url": "https://chromium.googlesource.com/external/github.com/freetype/freetype2-testing.git",
+                "rev": "7a69b1a2b028476f840ab7d4a2ffdfe4eb2c389f"
+            },
+            "src/third_party/fxdiv/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-LjX5kivfHbqCIA5pF9qUvswG1gjOFo3CMpX0VR+Cn38=",
+                "url": "https://chromium.googlesource.com/external/github.com/Maratyszcza/FXdiv.git",
+                "rev": "63058eff77e11aa15bf531df5dd34395ec3017c8"
+            },
+            "src/third_party/harfbuzz-ng/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-+fClyD9Rsge9qdGF8WCv8taLTWNL8iManpXZUzDL2LM=",
+                "url": "https://chromium.googlesource.com/external/github.com/harfbuzz/harfbuzz.git",
+                "rev": "db700b5670d9475cc8ed4880cc9447b232c5e432"
+            },
+            "src/third_party/emoji-segmenter/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-oT9mAKoKnrsFsBAeTRfPOXM76HRQQabFAlPpfKUGFhs=",
+                "url": "https://chromium.googlesource.com/external/github.com/google/emoji-segmenter.git",
+                "rev": "9ba6d25d0d9313569665d4a9d2b34f0f39f9a50e"
+            },
+            "src/third_party/ots/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-kiUXrXsaGOzPkKh0dVmU1I13WHt0Stzj7QLMqHN9FbU=",
+                "url": "https://chromium.googlesource.com/external/github.com/khaledhosny/ots.git",
+                "rev": "46bea9879127d0ff1c6601b078e2ce98e83fcd33"
+            },
+            "src/third_party/libgav1/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-DY2BBK+bH1lGZNEl3rMDsPb7Z52YMIQy/3N0achugE0=",
+                "url": "https://chromium.googlesource.com/codecs/libgav1.git",
+                "rev": "cd53f7c0d6a1c005e38874d143c8876d375bae70"
+            },
+            "src/third_party/googletest/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-VYRjcM3dDY2FarviXyFMgSkXCqKfWXwtGAj2Msgm7zg=",
+                "url": "https://chromium.googlesource.com/external/github.com/google/googletest.git",
+                "rev": "af29db7ec28d6df1c7f0f745186884091e602e07"
+            },
+            "src/third_party/hunspell_dictionaries": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-67mvpJRFFa9eMfyqFMURlbxOaTJBICnk+gl0b0mEHl8=",
+                "url": "https://chromium.googlesource.com/chromium/deps/hunspell_dictionaries.git",
+                "rev": "41cdffd71c9948f63c7ad36e1fb0ff519aa7a37e"
+            },
+            "src/third_party/icu": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-SPWi626Y5WL+cBiedyofb7FRxzM+maQ+1Mp5sx/i1EA=",
+                "url": "https://chromium.googlesource.com/chromium/deps/icu.git",
+                "rev": "e8c3bc9ea97d4423ad0515e5f1c064f486dae8b1"
+            },
+            "src/third_party/jsoncpp/source": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-bSLNcoYBz3QCt5VuTR056V9mU2PmBuYBa0W6hFg2m8Q=",
+                "url": "https://chromium.googlesource.com/external/github.com/open-source-parsers/jsoncpp.git",
+                "rev": "42e892d96e47b1f6e29844cc705e148ec4856448"
+            },
+            "src/third_party/leveldatabase/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-TTX2FrmcWsgqrh4uzqMyGnnnG51cVC2ILfdLxD65MLY=",
+                "url": "https://chromium.googlesource.com/external/leveldb.git",
+                "rev": "068d5ee1a3ac40dabd00d211d5013af44be55bea"
+            },
+            "src/third_party/libFuzzer/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-Zp8Ea/7GwmEl964MEIk3UM6IR5+FtUz8InlqZaOniDA=",
+                "url": "https://chromium.googlesource.com/external/github.com/llvm/llvm-project/compiler-rt/lib/fuzzer.git",
+                "rev": "26cc39e59b2bf5cbc20486296248a842c536878d"
+            },
+            "src/third_party/fuzztest/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-SiZAiHQt37PdWYiVOexqoQnRqk+EbsZk8ELJ9eJ1iSk=",
+                "url": "https://chromium.googlesource.com/external/github.com/google/fuzztest.git",
+                "rev": "0e6385f1b48865f35889749046083586e110e390"
+            },
+            "src/third_party/libaddressinput/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-xvUUQSPrvqUp5DI9AqlRTWurwDW087c6v4RvI+4sfOQ=",
+                "url": "https://chromium.googlesource.com/external/libaddressinput.git",
+                "rev": "e8712e415627f22d0b00ebee8db99547077f39bd"
+            },
+            "src/third_party/libaom/source/libaom": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-pghv17RmD8w7eWiSB2pdR3ZWSFyhFEky0p7jfGKIu34=",
+                "url": "https://aomedia.googlesource.com/aom.git",
+                "rev": "414a2fcbb1bb0f4ac471613e12004651f4d67c25"
+            },
+            "src/third_party/libavif/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-roT/0RLGNKlz8gx209UtyM3YpM29y27P4zjZJMqnUPY=",
+                "url": "https://chromium.googlesource.com/external/github.com/AOMediaCodec/libavif.git",
+                "rev": "781d6a6467d82d8ba36256f31b6593a33c03345d"
+            },
+            "src/third_party/libavifinfo/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-9HrWIuA3nuvqT6Hy8DHoBRCEKEG/p9UHY5gPYd/5oaI=",
+                "url": "https://aomedia.googlesource.com/libavifinfo.git",
+                "rev": "8ed46385f4b6fb0b4680d791002cbd674b2b9cb6"
+            },
+            "src/third_party/nearby/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-WLmEKIxTm7Aae/riw2HLcNmITvBHG4Z6fDA1Ue9J0tM=",
+                "url": "https://chromium.googlesource.com/external/github.com/google/nearby-connections.git",
+                "rev": "44fb9b4fa24e1140202c53a7c56bea90a0426adb"
+            },
+            "src/third_party/beto-core/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-qlExr/AFxJL7JLDz7bDCCk9Ios++5/n/iT9Mv8YnYxY=",
+                "url": "https://beto-core.googlesource.com/beto-core.git",
+                "rev": "45756ea770c41085d5c71156b2c46da0b10117d6"
+            },
+            "src/third_party/securemessage/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-GS4ccnuiqxMs/LVYAtvSlVAYFp4a5GoZsxcriTX3k78=",
+                "url": "https://chromium.googlesource.com/external/github.com/google/securemessage.git",
+                "rev": "fa07beb12babc3b25e0c5b1f38c16aa8cb6b8f84"
+            },
+            "src/third_party/ukey2/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-aaLs6ZS+CdBlCJ6ZhsmdAPFxiBIij6oufsDcNeRSV1E=",
+                "url": "https://chromium.googlesource.com/external/github.com/google/ukey2.git",
+                "rev": "0275885d8e6038c39b8a8ca55e75d1d4d1727f47"
+            },
+            "src/third_party/cros-components/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-a58NnOGa2bcQ2WNULnFyjyYnw3QXUAWjsB7UAxuRakg=",
+                "url": "https://chromium.googlesource.com/external/google3/cros_components.git",
+                "rev": "81d1ad8e0ba89d207657f124de3d0829829484d7"
+            },
+            "src/third_party/libdrm/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-NUxS2rBJ0nFblvHRQUfKT933+DAws5RUTDb+RLxRF4M=",
+                "url": "https://chromium.googlesource.com/chromiumos/third_party/libdrm.git",
+                "rev": "98e1db501173303e58ef6a1def94ab7a2d84afc1"
+            },
+            "src/third_party/expat/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-FXTDGAK03jc2wvazhRKqtsFRKZUYS/9HLpZNp4JfZJI=",
+                "url": "https://chromium.googlesource.com/external/github.com/libexpat/libexpat.git",
+                "rev": "441f98d02deafd9b090aea568282b28f66a50e36"
+            },
+            "src/third_party/libipp/libipp": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-gxU92lHLd6uxO8T3QWhZIK0hGy97cki705DV0VimCPY=",
+                "url": "https://chromium.googlesource.com/chromiumos/platform2/libipp.git",
+                "rev": "2209bb84a8e122dab7c02fe66cc61a7b42873d7f"
+            },
+            "src/third_party/libjpeg_turbo": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-QnXMR9qqRiYfV1sUJvKVvLQ9A022lYKbsrI9HOU9LCs=",
+                "url": "https://chromium.googlesource.com/chromium/deps/libjpeg_turbo.git",
+                "rev": "aa4075f116e4312537d0d3e9dbd5e31096539f94"
+            },
+            "src/third_party/liblouis/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-EI/uaHXe0NlqdEw764q0SjerThYEVLRogUlmrsZwXnY=",
+                "url": "https://chromium.googlesource.com/external/liblouis-github.git",
+                "rev": "9700847afb92cb35969bdfcbbfbbb74b9c7b3376"
+            },
+            "src/third_party/libphonenumber/dist": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-3hSnTFTD3KAdbyxfKg12qbIYTmw6YlTCH64gMP/HUJo=",
+                "url": "https://chromium.googlesource.com/external/libphonenumber.git",
+                "rev": "140dfeb81b753388e8a672900fb7a971e9a0d362"
+            },
+            "src/third_party/libprotobuf-mutator/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-ZyPweW+V5foxFQwjjMLkaRUo+FNV+kEDGIH/4oRV614=",
+                "url": "https://chromium.googlesource.com/external/github.com/google/libprotobuf-mutator.git",
+                "rev": "a304ec48dcf15d942607032151f7e9ee504b5dcf"
+            },
+            "src/third_party/libsrtp": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-pfLFh2JGk/g0ZZxBKTaYW9/PBpkCm0rtJeyNePUMTTc=",
+                "url": "https://chromium.googlesource.com/chromium/deps/libsrtp.git",
+                "rev": "5b7c744eb8310250ccc534f3f86a2015b3887a0a"
+            },
+            "src/third_party/libsync/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-Mkl6C1LxF3RYLwYbxiSfoQPt8QKFwQWj/Ati2sNJ32E=",
+                "url": "https://chromium.googlesource.com/aosp/platform/system/core/libsync.git",
+                "rev": "f4f4387b6bf2387efbcfd1453af4892e8982faf6"
+            },
+            "src/third_party/libvpx/source/libvpx": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-9zyYyamGsDO+a6ggdlxJ78xIGmaNyD7NcmQVIZW9oLA=",
+                "url": "https://chromium.googlesource.com/webm/libvpx.git",
+                "rev": "278d0acd32c3fd544e6f99cbfd714df3430a6442"
+            },
+            "src/third_party/libwebm/source": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-u/5nkJed0DzdhR5OLL2kIhZhOnrbyzL1Kx37vV/jcEo=",
+                "url": "https://chromium.googlesource.com/webm/libwebm.git",
+                "rev": "e4fbea0c9751ae8aa86629b197a28d8276a2b0da"
+            },
+            "src/third_party/libwebp/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-isuuqzfc7cBxVEFrpHQP79B3s/5Jwu3qC4x3VPw7MuE=",
+                "url": "https://chromium.googlesource.com/webm/libwebp.git",
+                "rev": "4619a48fc3292743d7ce9658bee4245406734109"
+            },
+            "src/third_party/libyuv": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-jxs9kHI40gRFhm9cU6uS1Rxj+LLUUqT9b3myihxgW7s=",
+                "url": "https://chromium.googlesource.com/libyuv/libyuv.git",
+                "rev": "04821d1e7d60845525e8db55c7bcd41ef5be9406"
+            },
+            "src/third_party/lss": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-hE8uZf9Fst66qJkoVYChiB8G41ie+k9M4X0W+5JUSdw=",
+                "url": "https://chromium.googlesource.com/linux-syscall-support.git",
+                "rev": "ce877209e11aa69dcfffbd53ef90ea1d07136521"
+            },
+            "src/third_party/material_color_utilities/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-Cv1TjvOcswhp60LXblrLwY5jrudqKuDUqs1c//x49YE=",
+                "url": "https://chromium.googlesource.com/external/github.com/material-foundation/material-color-utilities.git",
+                "rev": "bd6537fb1c4aa2164d97f96e78a9c826e360a0ed"
+            },
+            "src/third_party/minigbm/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-9HwvjTETerbQ7YKXH9kUB2eWa8PxGWMAJfx1jAluhrs=",
+                "url": "https://chromium.googlesource.com/chromiumos/platform/minigbm.git",
+                "rev": "3018207f4d89395cc271278fb9a6558b660885f5"
+            },
+            "src/third_party/nasm": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-L+b3X3vsfpY6FSlIK/AHhxhmq2cXd50vND6uT6yn8Qs=",
+                "url": "https://chromium.googlesource.com/chromium/deps/nasm.git",
+                "rev": "7fc833e889d1afda72c06220e5bed8fb43b2e5ce"
+            },
+            "src/third_party/neon_2_sse/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-299ZptvdTmCnIuVVBkrpf5ZTxKPwgcGUob81tEI91F0=",
+                "url": "https://chromium.googlesource.com/external/github.com/intel/ARM_NEON_2_x86_SSE.git",
+                "rev": "a15b489e1222b2087007546b4912e21293ea86ff"
+            },
+            "src/third_party/openh264/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-J7Eqe2QevZh1xfap19W8AVCcwfRu7ztknnbKFJUAH1c=",
+                "url": "https://chromium.googlesource.com/external/github.com/cisco/openh264",
+                "rev": "09a4f3ec842a8932341b195c5b01e141c8a16eb7"
+            },
+            "src/third_party/openscreen/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-+Ea+CVr59WUyVk7sLdelPPwt/n5CLBNnAOW6XD7k/qM=",
+                "url": "https://chromium.googlesource.com/openscreen",
+                "rev": "2a4dbe656f38bf7617df013b54c683e461ed064d"
+            },
+            "src/third_party/openscreen/src/third_party/tinycbor/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-fMKBFUSKmODQyg4hKIa1hwnEKIV6WBbY1Gb8DOSnaHA=",
+                "url": "https://chromium.googlesource.com/external/github.com/intel/tinycbor.git",
+                "rev": "d393c16f3eb30d0c47e6f9d92db62272f0ec4dc7"
+            },
+            "src/third_party/pdfium": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-xYvjBv4gkVhpx8a4C1kmp6/Ngd0w9BFKizsTFR0weHM=",
+                "url": "https://pdfium.googlesource.com/pdfium.git",
+                "rev": "6c2c8ce87dfbf69b533e97f78807dff28c95f014"
+            },
+            "src/third_party/perfetto": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-mkfzktiI1aEOcBF8S1LPH9lEXaWFURV/q9RrcXrP4Yk=",
+                "url": "https://android.googlesource.com/platform/external/perfetto.git",
+                "rev": "271c226bfba2965bb5c72fd6964f016ed1f85c05"
+            },
+            "src/third_party/pthreadpool/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-Pfvievhma1rOpbLdSrIX4KaZyRpdvrnjRzzPYl3fDQo=",
+                "url": "https://chromium.googlesource.com/external/github.com/Maratyszcza/pthreadpool.git",
+                "rev": "1787867f6183f056420e532eec640cba25efafea"
+            },
+            "src/third_party/pyelftools": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-I/7p3IEvfP/gkes4kx18PvWwhAKilQKb67GXoW4zFB4=",
+                "url": "https://chromium.googlesource.com/chromiumos/third_party/pyelftools.git",
+                "rev": "19b3e610c86fcadb837d252c794cb5e8008826ae"
+            },
+            "src/third_party/quic_trace/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-Nf9ZDLcE1JunhbpEMHhrY2ROnbgrvVZoRkPwWq1DU0g=",
+                "url": "https://chromium.googlesource.com/external/github.com/google/quic-trace.git",
+                "rev": "caa0a6eaba816ecb737f9a70782b7c80b8ac8dbc"
+            },
+            "src/third_party/pywebsocket3/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-WEqqu2/7fLqcf/2/IcD7/FewRSZ6jTgVlVBvnihthYQ=",
+                "url": "https://chromium.googlesource.com/external/github.com/GoogleChromeLabs/pywebsocket3.git",
+                "rev": "50602a14f1b6da17e0b619833a13addc6ea78bc2"
+            },
+            "src/third_party/re2/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-j2v1NVMGqMieHdj/5/mgC+flpWCzxoCwLLmtZa3N5+0=",
+                "url": "https://chromium.googlesource.com/external/github.com/google/re2.git",
+                "rev": "7c5e396af825562ec8321fdbf2f1cf276b26e3ae"
+            },
+            "src/third_party/ruy/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-voWwpijTX+AZJPGH5Rgy4ISKpFV3i86/KJBU9S1IT0g=",
+                "url": "https://chromium.googlesource.com/external/github.com/google/ruy.git",
+                "rev": "caa244343de289f913c505100e6a463d46c174de"
+            },
+            "src/third_party/skia": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-y0v/eFfrFlEcVGT1W173bgqlFfWzz32TACAdV68uqrY=",
+                "url": "https://skia.googlesource.com/skia.git",
+                "rev": "bb40886d43b5fcbcdfb5587a2d20db418622990a"
+            },
+            "src/third_party/smhasher/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-RyC//me08hwGXRrWcK8GZ1uhIkBq4FByA7fHCVDsniw=",
+                "url": "https://chromium.googlesource.com/external/smhasher.git",
+                "rev": "e87738e57558e0ec472b2fc3a643b838e5b6e88f"
+            },
+            "src/third_party/snappy/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-5fV6NfO8vmqK+iCwpLtE2YjYOzjsshctauyjNIOxrH0=",
+                "url": "https://chromium.googlesource.com/external/github.com/google/snappy.git",
+                "rev": "c9f9edf6d75bb065fa47468bf035e051a57bec7c"
+            },
+            "src/third_party/sqlite/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-35rSG+ptFMC62FsprLvAqfXZknKu40Ee6H2qpAcA3wI=",
+                "url": "https://chromium.googlesource.com/chromium/deps/sqlite.git",
+                "rev": "b7e480172bb2411f9afedefdcc69a57a12f18b7b"
+            },
+            "src/third_party/swiftshader": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-KDBfCZeWZWdx+nkMQO4UxjYl96eLo2qksqC9mL+U+ls=",
+                "url": "https://swiftshader.googlesource.com/SwiftShader.git",
+                "rev": "b8f1a3ad5f9e077cd4c67e2f612e42bc8ef2fd30"
+            },
+            "src/third_party/text-fragments-polyfill/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-4rW2u1cQAF4iPWHAt1FvVXIpz2pmI901rEPks/w/iFA=",
+                "url": "https://chromium.googlesource.com/external/github.com/GoogleChromeLabs/text-fragments-polyfill.git",
+                "rev": "c036420683f672d685e27415de0a5f5e85bdc23f"
+            },
+            "src/third_party/tflite/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-roL+P9fJskz+9h2vK0eYud7J+IFPD1+ByHIL95JPahs=",
+                "url": "https://chromium.googlesource.com/external/github.com/tensorflow/tensorflow.git",
+                "rev": "f3e12f6b28647da499edb69794745f14869f0df9"
+            },
+            "src/third_party/vulkan-deps": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-disqOHrly1sqqBrDdRbpPlRE9EHSSdMxJXr+Kn7sia0=",
+                "url": "https://chromium.googlesource.com/vulkan-deps",
+                "rev": "73a4816c4b451e0e47b35478ba204acb7848b6b9"
+            },
+            "src/third_party/vulkan-deps/glslang/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-EKV4kjmLfChKmx3ozAVNx8CJii6hQGAUTTPQmLevkX0=",
+                "url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/glslang",
+                "rev": "6a7ec4be7b8a22ab16cea0f294b5973dbcdd637a"
+            },
+            "src/third_party/vulkan-deps/spirv-cross/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-8Xw0pKn6puTpALAkKMHQKbzBLENm37Iep8JnslooJI8=",
+                "url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/SPIRV-Cross",
+                "rev": "2d3a152081ca6e6bea7093940d0f81088fe4d01c"
+            },
+            "src/third_party/vulkan-deps/spirv-headers/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-JwgV3kDFvljDoWagDRjTIRRZRX5f6r9UUUxnCj1GEyc=",
+                "url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/SPIRV-Headers",
+                "rev": "6e09e44cd88a5297433411b2ee52f4cf9f50fa90"
+            },
+            "src/third_party/vulkan-deps/spirv-tools/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-/JyTxpmh57gr1OrzCvLvbPL/iqQeplA5mKpvY6+x1Ag=",
+                "url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/SPIRV-Tools",
+                "rev": "a63ac9f73d29cd27cdb6e3388d98d1d934e512bb"
+            },
+            "src/third_party/vulkan-deps/vulkan-headers/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-4erHZKx4jksAtyG8ZHtlVoEY3EqE4p2pEtcGHqv7G7A=",
+                "url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-Headers",
+                "rev": "c1a8560c5cf5e7bd6dbc71fe69b1a317411c36b8"
+            },
+            "src/third_party/vulkan-deps/vulkan-loader/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-PfVpvtBc80ZdL1SUJuoo8BGk90XSXX3l4mRVv3jdARA=",
+                "url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-Loader",
+                "rev": "db51885950c860961279168997b5cde12a77abf9"
+            },
+            "src/third_party/vulkan-deps/vulkan-tools/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-L+WNkMyIJNKjCRuhgoU6OvjcfQpwAtPtquIngYYrf1M=",
+                "url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-Tools",
+                "rev": "0cab6e8055fb0f3a54d8314552fd523a3da57c2c"
+            },
+            "src/third_party/vulkan-deps/vulkan-validation-layers/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-Ycvj5oOTE1fKHWk5Ubzr4lrzHQUjQXjguR2onXv3T5g=",
+                "url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-ValidationLayers",
+                "rev": "e2be2287f4820ed578d1adeca981736146a74d9a"
+            },
+            "src/third_party/vulkan_memory_allocator": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-rARuPHa/gEAOTM8/Fnob0bU0Jv+UKLiwe3o0UGWYlME=",
+                "url": "https://chromium.googlesource.com/external/github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator.git",
+                "rev": "ebe84bec02c041d28f902da0214bf442743fc907"
+            },
+            "src/third_party/wayland/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-aVcy7bW1cqEKbowlVgfa9FI8/oG7k5CzPZbRl+cPcX8=",
+                "url": "https://chromium.googlesource.com/external/anongit.freedesktop.org/git/wayland/wayland.git",
+                "rev": "a8c7553ec9af6462474524fd2bb4e9a7dc7217dd"
+            },
+            "src/third_party/wayland-protocols/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-3QK+ZN6IFUFkDxySSoQwP1J3JnTlD7JPaUk6Tr/d/k4=",
+                "url": "https://chromium.googlesource.com/external/anongit.freedesktop.org/git/wayland/wayland-protocols.git",
+                "rev": "4624cfaaf563cd7be5e2e2087c8de6d3a48ea867"
+            },
+            "src/third_party/wayland-protocols/kde": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-Dmcp/2ms/k7NxPPmPkp0YNfM9z2Es1ZO0uX10bc7N2Y=",
+                "url": "https://chromium.googlesource.com/external/github.com/KDE/plasma-wayland-protocols.git",
+                "rev": "0b07950714b3a36c9b9f71fc025fc7783e82926e"
+            },
+            "src/third_party/wayland-protocols/gtk": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-75XNnLkF5Lt1LMRGT+T61k0/mLa3kkynfN+QWvZ0LiQ=",
+                "url": "https://chromium.googlesource.com/external/github.com/GNOME/gtk.git",
+                "rev": "40ebed3a03aef096addc0af09fec4ec529d882a0"
+            },
+            "src/third_party/webdriver/pylib": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-WIqWXIKVgElgg8P8laLAlUrgwodGdeVcwohZxnPKedw=",
+                "url": "https://chromium.googlesource.com/external/github.com/SeleniumHQ/selenium/py.git",
+                "rev": "fc5e7e70c098bfb189a9a74746809ad3c5c34e04"
+            },
+            "src/third_party/webgl/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-jn0HFVHFGjbScUchFBynMekZIktPp25k8O/HfjvJHRU=",
+                "url": "https://chromium.googlesource.com/external/khronosgroup/webgl.git",
+                "rev": "b934957d2423492a9a8682f48517f07607503f3f"
+            },
+            "src/third_party/webgpu-cts/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-AW0VnZF9W1otb9+UGLGwrjXI6yqz7X0lqAMYtHVX6L8=",
+                "url": "https://chromium.googlesource.com/external/github.com/gpuweb/cts.git",
+                "rev": "82ed433cbcb632d6700551067a6d3acc6c2ab46e"
+            },
+            "src/third_party/webrtc": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-MoEeE9iXW4bbwhugT40njlxPWO04LomykQk/hZb6TwQ=",
+                "url": "https://webrtc.googlesource.com/src.git",
+                "rev": "402f60c2eabefbc7a120ec01659690c7fdf89769"
+            },
+            "src/third_party/wuffs/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-HP8Vf1C9DuA9H+busf3lFoF9SsYqviLKv0l73CxmNEI=",
+                "url": "https://skia.googlesource.com/external/github.com/google/wuffs-mirror-release-c.git",
+                "rev": "fe9d08f2b6e80af691bfb1a718e144c49a1b9eba"
+            },
+            "src/third_party/weston/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-EKl6oIM8Vml9wtSIb9ExFIuuJohbU/rsG3JVS5thaUU=",
+                "url": "https://chromium.googlesource.com/external/anongit.freedesktop.org/git/wayland/weston.git",
+                "rev": "420cfd00f2de91de74bd9d4d8348e43c582d29f0"
+            },
+            "src/third_party/xdg-utils": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-t3uV9JkkQQIwmezzSoEdTMLSizZdLQB7eLKTRQGH4kQ=",
+                "url": "https://chromium.googlesource.com/chromium/deps/xdg-utils.git",
+                "rev": "d80274d5869b17b8c9067a1022e4416ee7ed5e0d"
+            },
+            "src/third_party/xnnpack/src": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-vsn3lrog5affus0qxc4TK2Z/tdd/E6hBYeUQRWoDZPQ=",
+                "url": "https://chromium.googlesource.com/external/github.com/google/XNNPACK.git",
+                "rev": "b9d4073a6913891ce9cbd8965c8d506075d2a45a"
+            },
+            "src/tools/page_cycler/acid3": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-+7Ynz7k/dWdd4Wo7Rjzvc8GY9gTsjzjG3GdNsuDKszY=",
+                "url": "https://chromium.googlesource.com/chromium/deps/acid3.git",
+                "rev": "6be0a66a1ebd7ebc5abc1b2f405a945f6d871521"
+            },
+            "src/v8": {
+                "fetcher": "fetchFromGitiles",
+                "hash": "sha256-FniqsFWFZUclDsA+cOvX+FFxsnVd8lfMVCfrjiOn9fQ=",
+                "url": "https://chromium.googlesource.com/v8/v8.git",
+                "rev": "47bf74e7ed48d3a0d6ea92f46c32be46ebed08fe"
+            },
+            "src/third_party/nan": {
+                "fetcher": "fetchFromGitHub",
+                "hash": "sha256-tur5CExvwuSmwqBwH9o8OZWzDuifRybjEb+4/tm6exk=",
+                "owner": "nodejs",
+                "repo": "nan",
+                "rev": "16fa32231e2ccd89d2804b3f765319128b20c4ac"
+            },
+            "src/third_party/electron_node": {
+                "fetcher": "fetchFromGitHub",
+                "hash": "sha256-VwG8Q+PZudblqG+m4uuWEowNWlq/MUuyEpFs8k8NbHE=",
+                "owner": "nodejs",
+                "repo": "node",
+                "rev": "v18.16.1"
+            },
+            "src/third_party/squirrel.mac": {
+                "fetcher": "fetchFromGitHub",
+                "hash": "sha256-4GfKQg0u3c9GI+jl3ixESNqWXQJKRMi+00QT0s2Shqw=",
+                "owner": "Squirrel",
+                "repo": "Squirrel.Mac",
+                "rev": "0e5d146ba13101a1302d59ea6e6e0b3cace4ae38"
+            },
+            "src/third_party/squirrel.mac/vendor/ReactiveObjC": {
+                "fetcher": "fetchFromGitHub",
+                "hash": "sha256-/MCqC1oFe3N9TsmfVLgl+deR6qHU6ZFQQjudb9zB5Mo=",
+                "owner": "ReactiveCocoa",
+                "repo": "ReactiveObjC",
+                "rev": "74ab5baccc6f7202c8ac69a8d1e152c29dc1ea76"
+            },
+            "src/third_party/squirrel.mac/vendor/Mantle": {
+                "fetcher": "fetchFromGitHub",
+                "hash": "sha256-ogFkMJybf2Ue606ojXJu6Gy5aXSi1bSKm60qcTAIaPk=",
+                "owner": "Mantle",
+                "repo": "Mantle",
+                "rev": "78d3966b3c331292ea29ec38661b25df0a245948"
+            }
+        },
+        "version": "26.6.9",
+        "modules": "116",
+        "chrome": "116.0.5845.228",
+        "node": "18.16.1",
+        "chromium": {
+            "version": "116.0.5845.228",
+            "deps": {
+                "gn": {
+                    "version": "2023-06-09",
+                    "url": "https://gn.googlesource.com/gn",
+                    "rev": "4bd1a77e67958fb7f6739bd4542641646f264e5d",
+                    "hash": "sha256-XP+NQG8kjzXPzQ25YaZiPymexZwAGwhpodqgdTWWCZI="
+                }
+            }
+        },
+        "chromium_npm_hash": "sha256-5cjqpYB45nw2gop54VP+tL7/0w63nQGfQ4x6a6KS7XQ=",
+        "electron_yarn_hash": "05wkb1m0yjbai4153y49kwr1v2lj14fg75aqlvmmrhf3bxp9lg5g"
+    }
+}
diff --git a/nixpkgs/pkgs/development/tools/electron/update.py b/nixpkgs/pkgs/development/tools/electron/update.py
new file mode 100755
index 000000000000..128b1dc05067
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/electron/update.py
@@ -0,0 +1,279 @@
+#! /usr/bin/env nix-shell
+#! nix-shell -i python -p python3.pkgs.joblib python3.pkgs.click python3.pkgs.click-log nix nix-prefetch-git nix-universal-prefetch prefetch-yarn-deps prefetch-npm-deps
+
+import logging
+import click_log
+import click
+import random
+import traceback
+import csv
+import base64
+import os
+import re
+import tempfile
+import subprocess
+import json
+import sys
+from joblib import Parallel, delayed, Memory
+from codecs import iterdecode
+from datetime import datetime
+from urllib.request import urlopen
+
+os.chdir(os.path.dirname(__file__))
+
+depot_tools_checkout = tempfile.TemporaryDirectory()
+subprocess.check_call([
+    "nix-prefetch-git",
+    "--builder", "--quiet",
+    "--url", "https://chromium.googlesource.com/chromium/tools/depot_tools",
+    "--out", depot_tools_checkout.name,
+    "--rev", "7a69b031d58081d51c9e8e89557b343bba8518b1"])
+sys.path.append(depot_tools_checkout.name)
+
+import gclient_eval
+import gclient_utils
+
+memory = Memory("cache", verbose=0)
+
+@memory.cache
+def get_repo_hash(fetcher, args):
+    cmd = ['nix-universal-prefetch', fetcher]
+    for arg_name, arg in args.items():
+        cmd.append(f'--{arg_name}')
+        cmd.append(arg)
+
+    print(" ".join(cmd), file=sys.stderr)
+    out = subprocess.check_output(cmd)
+    return out.decode('utf-8').strip()
+
+@memory.cache
+def _get_yarn_hash(file):
+    print(f'prefetch-yarn-deps', file=sys.stderr)
+    with tempfile.TemporaryDirectory() as tmp_dir:
+        with open(tmp_dir + '/yarn.lock', 'w') as f:
+            f.write(file)
+        return subprocess.check_output(['prefetch-yarn-deps', tmp_dir + '/yarn.lock']).decode('utf-8').strip()
+def get_yarn_hash(repo, yarn_lock_path = 'yarn.lock'):
+    return _get_yarn_hash(repo.get_file(yarn_lock_path))
+
+@memory.cache
+def _get_npm_hash(file):
+    print(f'prefetch-npm-deps', file=sys.stderr)
+    with tempfile.TemporaryDirectory() as tmp_dir:
+        with open(tmp_dir + '/package-lock.json', 'w') as f:
+            f.write(file)
+        return subprocess.check_output(['prefetch-npm-deps', tmp_dir + '/package-lock.json']).decode('utf-8').strip()
+def get_npm_hash(repo, package_lock_path = 'package-lock.json'):
+    return _get_npm_hash(repo.get_file(package_lock_path))
+
+class Repo:
+    def __init__(self):
+        self.deps = {}
+        self.hash = "sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="
+
+    def get_deps(self, repo_vars, path):
+        print("evaluating " + json.dumps(self, default = vars), file=sys.stderr)
+
+        deps_file = self.get_file("DEPS")
+        evaluated = gclient_eval.Parse(deps_file, filename='DEPS')
+
+        repo_vars = dict(evaluated["vars"]) | repo_vars
+
+        prefix = f"{path}/" if evaluated.get("use_relative_paths", False) else ""
+
+        self.deps = {
+            prefix + dep_name: repo_from_dep(dep)
+            for dep_name, dep in evaluated["deps"].items()
+            if (gclient_eval.EvaluateCondition(dep["condition"], repo_vars) if "condition" in dep else True) and repo_from_dep(dep) != None
+        }
+
+        for key in evaluated.get("recursedeps", []):
+            dep_path = prefix + key
+            if dep_path in self.deps and dep_path != "src/third_party/squirrel.mac":
+                self.deps[dep_path].get_deps(repo_vars, dep_path)
+
+    def prefetch(self):
+        self.hash = get_repo_hash(self.fetcher, self.args)
+
+    def prefetch_all(self):
+        return sum([dep.prefetch_all() for [_, dep] in self.deps.items()], [delayed(self.prefetch)()])
+
+    def flatten_repr(self):
+        return {
+            "fetcher": self.fetcher,
+            "hash": self.hash,
+            **self.args
+        }
+
+    def flatten(self, path):
+        out = {
+            path: self.flatten_repr()
+        }
+        for dep_path, dep in self.deps.items():
+            out |= dep.flatten(dep_path)
+        return out
+
+class GitRepo(Repo):
+    def __init__(self, url, rev):
+        super().__init__()
+        self.fetcher = 'fetchgit'
+        self.args = {
+            "url": url,
+            "rev": rev,
+        }
+
+class GitHubRepo(Repo):
+    def __init__(self, owner, repo, rev):
+        super().__init__()
+        self.fetcher = 'fetchFromGitHub'
+        self.args = {
+            "owner": owner,
+            "repo": repo,
+            "rev": rev,
+        }
+
+    def get_file(self, filepath):
+        return urlopen(f"https://raw.githubusercontent.com/{self.args['owner']}/{self.args['repo']}/{self.args['rev']}/{filepath}").read().decode('utf-8')
+
+class GitilesRepo(Repo):
+    def __init__(self, url, rev):
+        super().__init__()
+        self.fetcher = 'fetchFromGitiles'
+        #self.fetcher = 'fetchgit'
+        self.args = {
+            "url": url,
+            "rev": rev,
+            #"fetchSubmodules": "false",
+        }
+
+        if url == "https://chromium.googlesource.com/chromium/src.git":
+            self.args['postFetch'] = "rm -r $out/third_party/blink/web_tests; "
+            self.args['postFetch'] += "rm -r $out/third_party/hunspell/tests; "
+            self.args['postFetch'] += "rm -r $out/content/test/data; "
+            self.args['postFetch'] += "rm -r $out/courgette/testdata; "
+            self.args['postFetch'] += "rm -r $out/extensions/test/data; "
+            self.args['postFetch'] += "rm -r $out/media/test/data; "
+
+    def get_file(self, filepath):
+        return base64.b64decode(urlopen(f"{self.args['url']}/+/{self.args['rev']}/{filepath}?format=TEXT").read()).decode('utf-8')
+
+def repo_from_dep(dep):
+    if "url" in dep:
+        url, rev = gclient_utils.SplitUrlRevision(dep["url"])
+
+        search_object = re.search(r'https://github.com/(.+)/(.+?)(\.git)?$', url)
+        if search_object:
+            return GitHubRepo(search_object.group(1), search_object.group(2), rev)
+
+        if re.match(r'https://.+.googlesource.com', url):
+            return GitilesRepo(url, rev)
+
+        return GitRepo(url, rev)
+    else:
+        # Not a git dependency; skip
+        return None
+
+def get_gn_source(repo):
+    gn_pattern = r"'gn_version': 'git_revision:([0-9a-f]{40})'"
+    gn_commit = re.search(gn_pattern, repo.get_file("DEPS")).group(1)
+    gn = subprocess.check_output([
+        "nix-prefetch-git",
+        "--quiet",
+        "https://gn.googlesource.com/gn",
+        "--rev", gn_commit
+        ])
+    gn = json.loads(gn)
+    return {
+        "gn": {
+            "version": datetime.fromisoformat(gn["date"]).date().isoformat(),
+            "url": gn["url"],
+            "rev": gn["rev"],
+            "hash": gn["hash"]
+        }
+    }
+
+def get_electron_info(major_version):
+    electron_releases = json.loads(urlopen("https://releases.electronjs.org/releases.json").read())
+    major_version_releases = filter(lambda item: item["version"].startswith(f"{major_version}."), electron_releases)
+    m = max(major_version_releases, key=lambda item: item["date"])
+
+    rev=f"v{m['version']}"
+
+    electron_repo = GitHubRepo("electron", "electron", rev)
+    electron_repo.recurse = True
+
+    electron_repo.get_deps({
+        f"checkout_{platform}": platform == "linux"
+        for platform in ["ios", "chromeos", "android", "mac", "win", "linux"]
+    }, "src/electron")
+
+    return (major_version, m, electron_repo)
+
+logger = logging.getLogger(__name__)
+click_log.basic_config(logger)
+
+@click.group()
+def cli():
+    pass
+
+@cli.command("eval")
+@click.option("--version", help="The major version, e.g. '23'")
+def eval(version):
+    (_, _, repo) = electron_repo = get_electron_info(version)
+    tree = electron_repo.flatten("src/electron")
+    print(json.dumps(tree, indent=4, default = vars))
+
+def get_update(repo):
+    (major_version, m, electron_repo) = repo
+
+    tasks = electron_repo.prefetch_all()
+    a = lambda: (
+        ("electron_yarn_hash", get_yarn_hash(electron_repo))
+    )
+    tasks.append(delayed(a)())
+    a = lambda: (
+        ("chromium_npm_hash", get_npm_hash(electron_repo.deps["src"], "third_party/node/package-lock.json"))
+    )
+    tasks.append(delayed(a)())
+    random.shuffle(tasks)
+
+    task_results = {n[0]: n[1] for n in Parallel(n_jobs=3, require='sharedmem', return_as="generator")(tasks) if n != None}
+
+    tree = electron_repo.flatten("src/electron")
+
+    return (f"{major_version}", {
+      "deps": tree,
+      **{key: m[key] for key in ["version", "modules", "chrome", "node"]},
+      "chromium": {
+          "version": m['chrome'],
+          "deps": get_gn_source(electron_repo.deps["src"])
+      },
+      **task_results
+    })
+
+@cli.command("update")
+@click.option("--version", help="The major version, e.g. '23'")
+def update(version):
+    try:
+        with open('info.json', 'r') as f:
+            old_info = json.loads(f.read())
+    except:
+        old_info = {}
+    repo = get_electron_info(version)
+    update = get_update(repo)
+    out = old_info | { update[0]: update[1] }
+    with open('info.json', 'w') as f:
+        f.write(json.dumps(out, indent=4, default = vars))
+        f.write('\n')
+
+@cli.command("update-all")
+def update_all():
+    repos = Parallel(n_jobs=2, require='sharedmem')(delayed(get_electron_info)(major_version) for major_version in range(28, 24, -1))
+    out = {n[0]: n[1] for n in Parallel(n_jobs=2, require='sharedmem')(delayed(get_update)(repo) for repo in repos)}
+
+    with open('info.json', 'w') as f:
+        f.write(json.dumps(out, indent=4, default = vars))
+        f.write('\n')
+
+if __name__ == "__main__":
+    cli()
diff --git a/nixpkgs/pkgs/development/tools/electron/version.patch b/nixpkgs/pkgs/development/tools/electron/version.patch
new file mode 100644
index 000000000000..00562225d767
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/electron/version.patch
@@ -0,0 +1,42 @@
+diff --git a/electron/BUILD.gn b/electron/BUILD.gn
+index c905891eb8..f2cf11fe88 100644
+--- a/electron/BUILD.gn
++++ b/electron/BUILD.gn
+@@ -111,8 +111,6 @@ electron_version = exec_script("script/print-version.py",
+                                [],
+                                "trim string",
+                                [
+-                                 ".git/packed-refs",
+-                                 ".git/HEAD",
+                                  "script/lib/get-version.js",
+                                ])
+ 
+diff --git a/electron/script/lib/get-version.js b/electron/script/lib/get-version.js
+index 45a120482b..ddaf8ab60e 100644
+--- a/electron/script/lib/get-version.js
++++ b/electron/script/lib/get-version.js
+@@ -1,22 +1 @@
+-const { spawnSync } = require('child_process');
+-const path = require('path');
+-
+-module.exports.getElectronVersion = () => {
+-  // Find the nearest tag to the current HEAD
+-  // This is equivilant to our old logic of "use a value in package.json" for the following reasons
+-  //
+-  // 1. Whenever we updated the package.json we ALSO pushed a tag with the same version
+-  // 2. Whenever we _reverted_ a bump all we actually did was push a commit that deleted the tag and changed the version number back
+-  //
+-  // The only difference in the "git describe" technique is that technically a commit can "change" it's version
+-  // number if a tag is created / removed retroactively.  i.e. the first time a commit is pushed it will be 1.2.3
+-  // and after the tag is made rebuilding the same commit will result in it being 1.2.4
+-  const output = spawnSync('git', ['describe', '--tags', '--abbrev=0'], {
+-    cwd: path.resolve(__dirname, '..', '..')
+-  });
+-  if (output.status !== 0) {
+-    console.error(output.stderr);
+-    throw new Error('Failed to get current electron version');
+-  }
+-  return output.stdout.toString().trim().replace(/^v/g, '');
+-};
++module.exports.getElectronVersion = () => "@version@";
+
diff --git a/nixpkgs/pkgs/development/tools/electron/wrapper.nix b/nixpkgs/pkgs/development/tools/electron/wrapper.nix
new file mode 100644
index 000000000000..5ecb0387b6a8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/electron/wrapper.nix
@@ -0,0 +1,37 @@
+{ stdenv
+, electron-unwrapped
+, wrapGAppsHook
+, makeWrapper
+, gsettings-desktop-schemas
+, glib
+, gtk3
+, gtk4
+}:
+
+stdenv.mkDerivation {
+  pname = "electron";
+  inherit (electron-unwrapped) version;
+
+  nativeBuildInputs = [ wrapGAppsHook makeWrapper ];
+  buildInputs = [
+    # needed for GSETTINGS_SCHEMAS_PATH
+    gsettings-desktop-schemas glib gtk3 gtk4
+  ];
+  dontWrapGApps = true;
+
+  buildCommand = ''
+    gappsWrapperArgsHook
+    mkdir -p $out/bin
+    makeWrapper "${electron-unwrapped}/libexec/electron/electron" "$out/bin/electron" \
+      "''${gappsWrapperArgs[@]}" \
+      --set CHROME_DEVEL_SANDBOX $out/libexec/electron/chrome-sandbox
+
+    ln -s ${electron-unwrapped}/libexec $out/libexec
+  '';
+
+  passthru = {
+    unwrapped = electron-unwrapped;
+    inherit (electron-unwrapped) headers;
+  };
+  inherit (electron-unwrapped) meta;
+}
diff --git a/nixpkgs/pkgs/development/tools/eliot-tree/default.nix b/nixpkgs/pkgs/development/tools/eliot-tree/default.nix
new file mode 100644
index 000000000000..21dfccd33e42
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/eliot-tree/default.nix
@@ -0,0 +1,38 @@
+{ lib, python3Packages, fetchPypi }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "eliot-tree";
+  version = "21.0.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-hTl+r+QJPPQ7ss73lty3Wm7DLy2SKGmmgIuJx38ilO8=";
+  };
+
+  nativeCheckInputs = with python3Packages; [
+    testtools
+    pytest
+   ];
+
+  propagatedBuildInputs = with python3Packages; [
+    colored
+    eliot
+    iso8601
+    jmespath
+    setuptools
+    toolz
+  ];
+
+  # Tests run eliot-tree in out/bin.
+  checkPhase = ''
+    export PATH=$out/bin:$PATH
+    pytest
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/jonathanj/eliottree";
+    description = "Render Eliot logs as an ASCII tree";
+    license = licenses.mit;
+    maintainers = [ maintainers.dpausp ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/elkhound/default.nix b/nixpkgs/pkgs/development/tools/elkhound/default.nix
new file mode 100644
index 000000000000..19bb3b7005a5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/elkhound/default.nix
@@ -0,0 +1,50 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, bison
+, cmake
+, flex
+, perl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "elkhound";
+  version = "unstable-2020-04-13";
+
+  src = fetchFromGitHub {
+    owner = "WeiDUorg";
+    repo = pname;
+    rev = "a7eb4bb2151c00cc080613a770d37560f62a285c";
+    sha256 = "sha256-Y96OFpBNrD3vrKoEZ4KdJuI1Q4RmYANsu7H3ZzfaA6g=";
+  };
+
+  postPatch = ''
+    patchShebangs scripts
+  '';
+
+  sourceRoot = "${src.name}/src";
+
+  nativeBuildInputs = [ bison cmake flex perl ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm555 -t $out/bin ast/astgen elkhound/elkhound
+    for d in ast elkhound smbase; do
+      install -Dm444 -t $out/lib $d/*.a
+      install -Dm444 -t $out/include/$d $src/src/$d/*.h
+    done
+    install -Dm444 -t $out/share/doc/${pname} $src/src/elkhound/*.txt
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "A parser generator which emits GLR parsers, either in OCaml or C++";
+    homepage = "https://scottmcpeak.com/elkhound/";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ peterhoeg ];
+    # possibly works on Darwin
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/eltclsh/default.nix b/nixpkgs/pkgs/development/tools/eltclsh/default.nix
new file mode 100644
index 000000000000..8b6b7678ecbe
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/eltclsh/default.nix
@@ -0,0 +1,49 @@
+{ lib
+, stdenv
+, fetchgit
+, automake
+, autoconf
+, libtool
+, libedit
+, tcl
+, tk
+}:
+
+tcl.mkTclDerivation rec {
+  pname = "eltclsh";
+  version = "1.19";
+
+  src = fetchgit {
+    url = "https://git.openrobots.org/robots/eltclsh.git";
+    rev = "eltclsh-${version}";
+    hash = "sha256-YcJRaNct/cLNsjWk+NLzGiDYOG0jNgKudBczKckQU14=";
+  };
+
+  nativeBuildInputs = [
+    automake
+    autoconf
+    libtool
+  ];
+  buildInputs = [
+    libedit
+    tk
+  ];
+
+  preConfigure = "NOCONFIGURE=1 ./autogen.sh";
+
+  configureFlags = [
+    "--enable-tclshrl"
+    "--enable-wishrl"
+    "--with-tk=${tk}/lib"
+    "--with-includes=${libedit.dev}/include/readline"
+    "--with-libtool=${libtool}"
+  ];
+
+  meta = with lib; {
+    description = "Interactive shell for the TCL programming language based on editline";
+    homepage = "https://homepages.laas.fr/mallet/soft/shell/eltclsh";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ iwanb ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/enochecker-test/default.nix b/nixpkgs/pkgs/development/tools/enochecker-test/default.nix
new file mode 100644
index 000000000000..ae1fb411861a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/enochecker-test/default.nix
@@ -0,0 +1,69 @@
+{ lib
+, buildPythonApplication
+, fetchPypi
+, pythonOlder
+, pythonRelaxDepsHook
+
+, certifi
+, charset-normalizer
+, enochecker-core
+, exceptiongroup
+, idna
+, iniconfig
+, jsons
+, packaging
+, pluggy
+, pytest
+, requests
+, tomli
+, typish
+, urllib3
+}:
+
+buildPythonApplication rec {
+  pname = "enochecker-test";
+  version = "0.9.0";
+  format = "setuptools";
+
+  disabled = pythonOlder "3.8";
+
+  src = fetchPypi {
+    inherit version;
+    pname = "enochecker_test";
+    hash = "sha256-M0RTstFePU7O51YVEncVDuuR6F7R8mfdKbO0j7k/o8Q=";
+  };
+
+  nativeBuildInputs = [
+    pythonRelaxDepsHook
+  ];
+
+  pythonRelaxDeps = true;
+
+  propagatedBuildInputs = [
+    certifi
+    charset-normalizer
+    enochecker-core
+    exceptiongroup
+    idna
+    iniconfig
+    jsons
+    packaging
+    pluggy
+    pytest
+    requests
+    tomli
+    typish
+    urllib3
+  ];
+
+  # tests require network access
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Automatically test services/checker using the enochecker API";
+    homepage = "https://github.com/enowars/enochecker_test";
+    changelog = "https://github.com/enowars/enochecker_test/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fwc ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ent/default.nix b/nixpkgs/pkgs/development/tools/ent/default.nix
new file mode 100644
index 000000000000..a1357c8ab2d3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ent/default.nix
@@ -0,0 +1,41 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles }:
+
+buildGoModule rec {
+  pname = "ent-go";
+  version = "0.12.5";
+
+  src = fetchFromGitHub {
+    owner = "ent";
+    repo = "ent";
+    rev = "v${version}";
+    sha256 = "sha256-g4n9cOTv/35WkvMjrtP2eEcbiu5kiafVXifz1zlEuCY=";
+  };
+
+  vendorHash = "sha256-DUi4Ik+qFbx4LIm9MDJ4H9/+sIfCzK8MMGKp0GIGX7w=";
+
+  subPackages = [ "cmd/ent" ];
+
+  ldflags = [
+    "-s"
+    "-w"
+  ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    installShellCompletion --cmd ent \
+      --bash <($out/bin/ent completion bash) \
+      --fish <($out/bin/ent completion fish) \
+      --zsh <($out/bin/ent completion zsh)
+  '';
+
+  meta = with lib; {
+    description = "An entity framework for Go";
+    homepage = "https://entgo.io/";
+    downloadPage = "https://github.com/ent/ent";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ ];
+    mainProgram = "ent";
+  };
+}
+
diff --git a/nixpkgs/pkgs/development/tools/errcheck/default.nix b/nixpkgs/pkgs/development/tools/errcheck/default.nix
new file mode 100644
index 000000000000..4ebcb8169527
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/errcheck/default.nix
@@ -0,0 +1,24 @@
+{ lib, fetchFromGitHub, buildGoModule }:
+
+buildGoModule rec {
+  pname = "errcheck";
+  version = "1.7.0";
+
+  src = fetchFromGitHub {
+    owner = "kisielk";
+    repo = "errcheck";
+    rev = "v${version}";
+    hash = "sha256-hl1EbAO4okfTahl+1WDsFuVgm6Ba98Ji0hxqVe7jGbk=";
+  };
+
+  vendorHash = "sha256-rO2FoFksN3OdKXwlJBuISs6FmCtepc4FDLdOa5AHvC4=";
+
+  subPackages = [ "." ];
+
+  meta = with lib; {
+    description = "Checks for unchecked errors in go programs";
+    homepage = "https://github.com/kisielk/errcheck";
+    license = licenses.mit;
+    maintainers = with maintainers; [ kalbasit ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/esbuild/default.nix b/nixpkgs/pkgs/development/tools/esbuild/default.nix
new file mode 100644
index 000000000000..75f103dec6cb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/esbuild/default.nix
@@ -0,0 +1,28 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+buildGoModule rec {
+  pname = "esbuild";
+  version = "0.20.0";
+
+  src = fetchFromGitHub {
+    owner = "evanw";
+    repo = "esbuild";
+    rev = "v${version}";
+    hash = "sha256-CJUBjDQAXSUFe37zYGbX6geeEk9goZ/aOalWDHPIZis=";
+  };
+
+  vendorHash = "sha256-+BfxCyg0KkDQpHt/wycy/8CTG6YBA/VJvJFhhzUnSiQ=";
+
+  subPackages = [ "cmd/esbuild" ];
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "An extremely fast JavaScript bundler";
+    homepage = "https://esbuild.github.io";
+    changelog = "https://github.com/evanw/esbuild/blob/v${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ lucus16 marsam undefined-moe ivan ];
+    mainProgram = "esbuild";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/esbuild/netlify.nix b/nixpkgs/pkgs/development/tools/esbuild/netlify.nix
new file mode 100644
index 000000000000..1ed35d64f027
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/esbuild/netlify.nix
@@ -0,0 +1,34 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, fetchpatch
+, netlify-cli
+}:
+
+buildGoModule rec {
+  pname = "esbuild";
+  version = "0.14.39";
+
+  src = fetchFromGitHub {
+    owner = "netlify";
+    repo = "esbuild";
+    rev = "5faa7ad54c99a953d05c06819298d2b6f8c82d80";
+    sha256 = "pYiwGjgFMclPYTW0Qml7Pr/knT1gywUAGANra5aojYM=";
+  };
+
+  vendorHash = "sha256-QPkBR+FscUc3jOvH7olcGUhM6OW4vxawmNJuRQxPuGs=";
+
+  passthru = {
+    tests = {
+      inherit netlify-cli;
+    };
+  };
+
+  meta = with lib; {
+    description = "A fork of esbuild maintained by netlify";
+    homepage = "https://github.com/netlify/esbuild";
+    license = licenses.mit;
+    maintainers = with maintainers; [ roberth ];
+    mainProgram = "esbuild";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/eslint_d/default.nix b/nixpkgs/pkgs/development/tools/eslint_d/default.nix
new file mode 100644
index 000000000000..1a59a96b08bf
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/eslint_d/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildNpmPackage, fetchFromGitHub }:
+
+buildNpmPackage rec {
+  pname = "eslint_d";
+  version = "13.0.0";
+
+  src = fetchFromGitHub {
+    owner = "mantoni";
+    repo = "eslint_d.js";
+    rev = "v${version}";
+    hash = "sha256-tlpuJ/p+U7DuzEmy5ulY3advKN+1ID9LDjUl8fDANVs=";
+  };
+
+  npmDepsHash = "sha256-MiuCupnzMUjwWh47SLnMRmtHBMbXdyjEZwgvaZz4JN0=";
+
+  dontNpmBuild = true;
+
+  meta = with lib; {
+    description = "Makes eslint the fastest linter on the planet";
+    homepage = "https://github.com/mantoni/eslint_d.js";
+    license = licenses.mit;
+    maintainers = [ maintainers.ehllie ];
+    mainProgram = "eslint_d";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/espup/default.nix b/nixpkgs/pkgs/development/tools/espup/default.nix
new file mode 100644
index 000000000000..145f681f1cbc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/espup/default.nix
@@ -0,0 +1,77 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, installShellFiles
+, bzip2
+, openssl
+, xz
+, zstd
+, stdenv
+, darwin
+, testers
+, espup
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "espup";
+  version = "0.11.0";
+
+  src = fetchFromGitHub {
+    owner = "esp-rs";
+    repo = "espup";
+    rev = "v${version}";
+    hash = "sha256-BW71yFX4jfx90KHdynkGSqWD4diyjEBQfdBNquVdDDI=";
+  };
+
+  cargoHash = "sha256-iUVOU1P996hLC1rR/wWtsDBkKSB0rD7PPh6ZsQkHq3I=";
+
+  nativeBuildInputs = [
+    pkg-config
+    installShellFiles
+  ];
+
+  buildInputs = [
+    bzip2
+    openssl
+    xz
+    zstd
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.CoreFoundation
+    darwin.apple_sdk.frameworks.Security
+    darwin.apple_sdk.frameworks.SystemConfiguration
+  ];
+
+  env = {
+    OPENSSL_NO_VENDOR = true;
+    ZSTD_SYS_USE_PKG_CONFIG = true;
+  };
+
+  preCheck = ''
+    export HOME=$(mktemp -d)
+  '';
+
+  checkFlags = [
+    # makes network calls
+    "--skip=toolchain::rust::tests::test_xtensa_rust_parse_version"
+  ];
+
+  postInstall = ''
+    installShellCompletion --cmd espup \
+      --bash <($out/bin/espup completions bash) \
+      --fish <($out/bin/espup completions fish) \
+      --zsh <($out/bin/espup completions zsh)
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = espup;
+  };
+
+  meta = with lib; {
+    description = "Tool for installing and maintaining Espressif Rust ecosystem.";
+    homepage = "https://github.com/esp-rs/espup/";
+    license = with licenses; [ mit asl20 ];
+    maintainers = with maintainers; [ knightpp beeb ];
+    mainProgram = "espup";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/evans/default.nix b/nixpkgs/pkgs/development/tools/evans/default.nix
new file mode 100644
index 000000000000..a9ea7bc2f8a4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/evans/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "evans";
+  version = "0.10.11";
+
+  src = fetchFromGitHub {
+    owner = "ktr0731";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-V5M7vXlBSQFX2YZ+Vjt63hLziWy0yuAbCMmSZFEO0OA=";
+  };
+
+  subPackages = [ "." ];
+
+  vendorHash = "sha256-oyFPycyQoYnN261kmGhkN9NMPMA6XChf4jXlYezKiCo=";
+
+  meta = with lib; {
+    description = "More expressive universal gRPC client";
+    homepage = "https://evans.syfm.me/";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ diogox ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/exhaustive/default.nix b/nixpkgs/pkgs/development/tools/exhaustive/default.nix
new file mode 100644
index 000000000000..7445ae5236db
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/exhaustive/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "exhaustive";
+  version = "0.10.0";
+
+  src = fetchFromGitHub {
+    owner = "nishanths";
+    repo = "exhaustive";
+    rev = "v${version}";
+    hash = "sha256-vMoFIyZcAdObeQD5bGcQHlGpJv/a8yl/2HUVc8aDiIA=";
+  };
+
+  vendorHash = "sha256-i3Cgefe4krvH99N233IeEWkVt9AhdzROkJ5JBeTIaAs=";
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "Check exhaustiveness of switch statements of enum-like constants in Go code";
+    homepage = "https://github.com/nishanths/exhaustive";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ meain ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/explain/default.nix b/nixpkgs/pkgs/development/tools/explain/default.nix
new file mode 100644
index 000000000000..47a9622be944
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/explain/default.nix
@@ -0,0 +1,48 @@
+{ lib, stdenv, fetchurl, fetchpatch
+, libtool, bison, groff, ghostscript, gettext
+, acl, libcap, lsof }:
+stdenv.mkDerivation rec {
+  pname = "explain";
+  version = "1.4";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/libexplain/libexplain-${version}.tar.gz";
+    hash = "sha256-KIY7ZezMdJNOI3ysQTZMs8GALDbJ4jGO0EF0YP7oP4A=";
+  };
+
+  patches = let
+    debian-src = "https://sources.debian.org/data/main";
+    debian-ver = "${version}.D001-12";
+    debian-patch = fname: hash: fetchpatch {
+      name = fname;
+      url = "${debian-src}/libe/libexplain/${debian-ver}/debian/patches/${fname}";
+      hash = hash;
+    };
+  in [
+    (debian-patch "sanitize-bison.patch"
+      "sha256-gU6JG32j2yIOwehZTUSvIr4TSDdlg+p1U3bhfZHMEDY=")
+    (debian-patch "03_fsflags-4.5.patch"
+      "sha256-ML7Qvf85vEBp+iwm6PSosMAn/frYdEOSHRToEggmR8M=")
+    (debian-patch "linux5.11.patch"
+      "sha256-N7WwnTfwOxBfIiKntcFOqHTH9r2gd7NMEzic7szzR+Y=")
+    (debian-patch "termiox-no-more-exists-since-kernel-5.12.patch"
+      "sha256-cocgEYKoDMDnGk9VNQDtgoVxMGnnNpdae0hzgUlacOw=")
+    (debian-patch "gcc-10.patch"
+      "sha256-YNcYGyOOqPUuwpUpXGcR7zsWbepVg8SAqcVKlxENSQk=")
+  ];
+
+  nativeBuildInputs = [ libtool bison groff ghostscript gettext ];
+  buildInputs = [ acl libcap lsof ];
+
+  outputs = [ "bin" "dev" "out" "man" "doc" ];
+
+  meta = with lib; {
+    description = "Library and utility to explain system call errors";
+    homepage = "https://libexplain.sourceforge.net";
+    license = licenses.lgpl3Plus;
+    maintainers = with maintainers; [ McSinyx ];
+    platforms = platforms.unix;
+    # never built on aarch64-linux since first introduction in nixpkgs
+    broken = stdenv.isLinux && stdenv.isAarch64;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/extism-cli/default.nix b/nixpkgs/pkgs/development/tools/extism-cli/default.nix
new file mode 100644
index 000000000000..67046d96e944
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/extism-cli/default.nix
@@ -0,0 +1,43 @@
+{
+  lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+}:
+
+buildGoModule rec {
+  pname = "extism-cli";
+  version = "1.0.3";
+
+  src = fetchFromGitHub {
+    owner = "extism";
+    repo = "cli";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-szs5tLjGCavHerQQi0Abla0kaHYQ/xN0O36Wrc1MG4Y=";
+  };
+
+  modRoot = "./extism";
+
+  vendorHash = "sha256-IRqn4XmFA6vyjtgTaxYh7ndHkQYuKC1eHKNoGC7Hh+U=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  doCheck = false; # Tests require network access
+
+  postInstall = ''
+    local INSTALL="$out/bin/extism"
+    installShellCompletion --cmd extism \
+      --bash <($out/bin/containerlab completion bash) \
+      --fish <($out/bin/containerlab completion fish) \
+      --zsh <($out/bin/containerlab completion zsh)
+  '';
+
+  meta = with lib; {
+    description = "The extism CLI is used to manage Extism installations";
+    homepage = "https://github.com/extism/cli";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ zshipko ];
+    mainProgram = "extism";
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/f2c/default.nix b/nixpkgs/pkgs/development/tools/f2c/default.nix
new file mode 100644
index 000000000000..63b3c5ae32eb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/f2c/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation {
+  pname = "f2c";
+  version = "20230428";
+
+  src = fetchurl {
+    url = "https://www.netlib.org/f2c/src.tgz";
+    sha256 = "sha256-dLpnwyGjtikhbH7VpIoGHD5cNyKshc6wHczmkTdRcFo=";
+  };
+
+  makeFlags = [ "-f" "makefile.u" ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin $out/share/man/man1
+    install -m755 f2c $out/bin
+    install -m755 xsum $out/bin
+    install f2c.1t $out/share/man/man1
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Convert Fortran 77 source code to C";
+    homepage = "https://www.netlib.org/f2c/";
+    license = licenses.mit;
+    maintainers = [ maintainers.markuskowa ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/faas-cli/default.nix b/nixpkgs/pkgs/development/tools/faas-cli/default.nix
new file mode 100644
index 000000000000..9eaadd43cedb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/faas-cli/default.nix
@@ -0,0 +1,65 @@
+{ lib
+, stdenv
+, buildGoModule
+, fetchFromGitHub
+, makeWrapper
+, git
+, installShellFiles
+, testers
+, faas-cli
+}:
+let
+  faasPlatform = platform:
+    let cpuName = platform.parsed.cpu.name; in {
+      "aarch64" = "arm64";
+      "armv7l" = "armhf";
+      "armv6l" = "armhf";
+    }.${cpuName} or cpuName;
+in
+buildGoModule rec {
+  pname = "faas-cli";
+  version = "0.16.23";
+
+  src = fetchFromGitHub {
+    owner = "openfaas";
+    repo = "faas-cli";
+    rev = version;
+    sha256 = "sha256-QbMwokFHaISvsNuHy/Do90bvXtwaJmie/hDLybuy2qk=";
+  };
+
+  vendorHash = null;
+
+  CGO_ENABLED = 0;
+
+  subPackages = [ "." ];
+
+  ldflags = [
+    "-s" "-w"
+    "-X github.com/openfaas/faas-cli/version.GitCommit=ref/tags/${version}"
+    "-X github.com/openfaas/faas-cli/version.Version=${version}"
+    "-X github.com/openfaas/faas-cli/commands.Platform=${faasPlatform stdenv.hostPlatform}"
+  ];
+
+  nativeBuildInputs = [ makeWrapper installShellFiles ];
+
+  postInstall = ''
+    wrapProgram "$out/bin/faas-cli" \
+      --prefix PATH : ${lib.makeBinPath [ git ]}
+
+    installShellCompletion --cmd metal \
+      --bash <($out/bin/faas-cli completion --shell bash) \
+      --zsh <($out/bin/faas-cli completion --shell zsh)
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    command = "${faas-cli}/bin/faas-cli version --short-version --warn-update=false";
+    package = faas-cli;
+  };
+
+  meta = with lib; {
+    description = "Official CLI for OpenFaaS ";
+    homepage = "https://github.com/openfaas/faas-cli";
+    license = licenses.mit;
+    maintainers = with maintainers; [ welteki techknowlogick ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/fable/default.nix b/nixpkgs/pkgs/development/tools/fable/default.nix
new file mode 100644
index 000000000000..10447afe20f3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/fable/default.nix
@@ -0,0 +1,18 @@
+{ buildDotnetGlobalTool, lib }:
+
+buildDotnetGlobalTool {
+  pname = "fable";
+  version = "4.11.0";
+
+  nugetSha256 = "sha256-AOsCthGk4YiTcKjIdCE1nnADWLqfd80vPFMmo9YLGUA=";
+  passthru.updateScript = ./update.sh;
+
+  meta = with lib; {
+    description = "Fable is an F# to JavaScript compiler";
+    homepage = "https://github.com/fable-compiler/fable";
+    changelog = "https://github.com/fable-compiler/fable/releases/tag/v${version}";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ anpin mdarocha ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/fable/update.sh b/nixpkgs/pkgs/development/tools/fable/update.sh
new file mode 100755
index 000000000000..9d23084ebd85
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/fable/update.sh
@@ -0,0 +1,39 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p curl gnused nix-prefetch jq
+
+set -euo pipefail
+URL="https://github.com/fable-compiler/fable"
+PKG="Fable"
+ROOT="$(dirname "$(readlink -f "$0")")"
+NIX_DRV="$ROOT/default.nix"
+if [ ! -f "$NIX_DRV" ]; then
+  echo "ERROR: cannot find default.nix in $ROOT"
+  exit 1
+fi
+
+TMP="$(mktemp -d)"
+clean_up() {
+    rm -rf "$TMP"
+}
+trap clean_up EXIT SIGINT SIGTERM
+PACKAGES="$TMP/packages"
+SRC_RW="$TMP/src"
+
+mkdir -p $SRC_RW
+mkdir -p $PACKAGES
+
+
+VER=$(curl -s "https://api.github.com/repos/fable-compiler/fable/releases/latest" | jq -r .tag_name | grep -oP '\d+\.\d+\.\d+' )
+
+CURRENT_VER=$(grep -oP '(?<=version = ")[^"]+' "$NIX_DRV")
+if [[ "$CURRENT_VER" == "$VER" ]]; then
+    echo "$PKG is already up to date: $CURRENT_VER"
+    exit
+fi
+
+
+NUGET_URL="$(curl -f "https://api.nuget.org/v3/index.json" | jq --raw-output '.resources[] | select(."@type" == "PackageBaseAddress/3.0.0")."@id"')$PKG/$VER/$PKG.$VER.nupkg"
+HASH=$(nix-hash --to-sri --type sha256 "$(nix-prefetch-url "$NUGET_URL")")
+
+sed -i "s/version = \".*\"/version = \"$VER\"/" "$NIX_DRV"
+sed -i "s#nugetSha256 = \"sha256-.\{44\}\"#nugetSha256 = \"$HASH\"#" "$NIX_DRV"
diff --git a/nixpkgs/pkgs/development/tools/faq/default.nix b/nixpkgs/pkgs/development/tools/faq/default.nix
new file mode 100644
index 000000000000..6a36ba73570b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/faq/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, jq
+, oniguruma
+}:
+
+buildGoModule rec {
+  pname = "faq";
+  # Latest git release (0.0.7) presents vendor issues - using latest commit instead.
+  version = "unstable-2022-01-09";
+
+  src = fetchFromGitHub {
+    owner = "jzelinskie";
+    repo = "faq";
+    rev = "594bb8e15dc4070300f39c168354784988646231";
+    sha256 = "1lqrchj4sj16n6y5ljsp8v4xmm57gzkavbddq23dhlgkg2lfyn91";
+  };
+  vendorHash = "sha256-731eINkboZiuPXX/HQ4r/8ogLedKBWx1IV7BZRKwU3A";
+
+  buildInputs = [
+    jq
+    oniguruma
+  ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/jzelinskie/faq/internal/version.Version=${version}"
+  ];
+
+  tags = [
+    "netgo"
+  ];
+
+  subPackages = [
+    "cmd/faq"
+  ];
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "faq is a tool intended to be a more flexible jq, supporting additional formats";
+    homepage = "https://github.com/jzelinskie/faq";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ quentin-m ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/fastddsgen/default.nix b/nixpkgs/pkgs/development/tools/fastddsgen/default.nix
new file mode 100644
index 000000000000..01d42f73b919
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/fastddsgen/default.nix
@@ -0,0 +1,99 @@
+{ lib, stdenv, runtimeShell, writeText, fetchFromGitHub, gradle_7, openjdk17, git, perl, cmake }:
+let
+  pname = "fastddsgen";
+  version = "3.2.1";
+
+  src = fetchFromGitHub {
+    owner = "eProsima";
+    repo = "Fast-DDS-Gen";
+    rev = "v${version}";
+    fetchSubmodules = true;
+    hash = "sha256-3REInKZ787RSXED8iAMlt2mJodJTp5+/ldQsbUGpn0g=";
+  };
+
+  gradle = gradle_7;
+
+  # fake build to pre-download deps into fixed-output derivation
+  deps = stdenv.mkDerivation {
+    pname = "${pname}-deps";
+    inherit src version;
+    nativeBuildInputs = [ gradle openjdk17 perl ];
+
+    buildPhase = ''
+      export GRADLE_USER_HOME=$(mktemp -d);
+      gradle --no-daemon -x submodulesUpdate assemble
+    '';
+
+    # perl code mavenizes paths (com.squareup.okio/okio/1.13.0/a9283170b7305c8d92d25aff02a6ab7e45d06cbe/okio-1.13.0.jar -> com/squareup/okio/okio/1.13.0/okio-1.13.0.jar)
+    installPhase = ''
+      find $GRADLE_USER_HOME/caches/modules-2 -type f -regex '.*\.\(jar\|pom\)' \
+        | perl -pe 's#(.*/([^/]+)/([^/]+)/([^/]+)/[0-9a-f]{30,40}/([^/\s]+))$# ($x = $2) =~ tr|\.|/|; "install -Dm444 $1 \$out/$x/$3/$4/$5" #e' \
+        | sh
+    '';
+
+    dontStrip = true;
+
+    outputHashAlgo = "sha256";
+    outputHashMode = "recursive";
+    outputHash = "sha256-YkVRp6TXI7/5O+u0DDYiCq7DITfGJ4lT/L4hT90JOL8=";
+  };
+in
+stdenv.mkDerivation {
+  inherit pname src version;
+
+  nativeBuildInputs = [ gradle openjdk17 ];
+
+  # use our offline deps
+  postPatch = ''
+    sed -ie '1i\
+    pluginManagement {\
+      repositories {\
+        maven { url "${deps}" }\
+      }\
+    }' thirdparty/idl-parser/settings.gradle
+    sed -ie "s#mavenCentral()#maven { url '${deps}' }#g" build.gradle
+    sed -ie "s#mavenCentral()#maven { url '${deps}' }#g" thirdparty/idl-parser/build.gradle
+  '';
+
+  buildPhase = ''
+    runHook preBuild
+
+    export GRADLE_USER_HOME=$(mktemp -d)
+
+    # Run gradle with daemon to make installPhase faster
+    gradle --offline -x submodulesUpdate assemble
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    gradle --offline -x submodulesUpdate install --install_path=$out
+
+    # Override the default start script to use absolute java path
+    cat  <<EOF >$out/bin/fastddsgen
+    #!${runtimeShell}
+    exec ${openjdk17}/bin/java -jar "$out/share/fastddsgen/java/fastddsgen.jar" "\$@"
+    EOF
+    chmod a+x "$out/bin/fastddsgen"
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Fast-DDS IDL code generator tool";
+    homepage = "https://github.com/eProsima/Fast-DDS-Gen";
+    license = licenses.asl20;
+    longDescription = ''
+      eProsima Fast DDS-Gen is a Java application that generates
+      eProsima Fast DDS C++ or Python source code using the data types
+      defined in an IDL (Interface Definition Language) file. This
+      generated source code can be used in any Fast DDS application in
+      order to define the data type of a topic, which will later be
+      used to publish or subscribe.
+    '';
+    maintainers = with maintainers; [ wentasah ];
+    platforms = openjdk17.meta.platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/fastgron/default.nix b/nixpkgs/pkgs/development/tools/fastgron/default.nix
new file mode 100644
index 000000000000..3e30d87d0dde
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/fastgron/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromGitHub, cmake, curl, testers }:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "fastgron";
+  version = "0.7.7";
+
+  src = fetchFromGitHub {
+    owner = "adamritter";
+    repo = "fastgron";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-dAfFSQ/UbAovQQr5AnCsyQtq1JkdQjvlG/SbuFnTx0E=";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  buildInputs = [ curl ];
+
+  passthru.tests.version = testers.testVersion {
+    package = finalAttrs.finalPackage;
+  };
+
+  meta = with lib; {
+    changelog = "https://github.com/adamritter/fastgron/releases/tag/${finalAttrs.src.rev}";
+    description = "High-performance JSON to GRON (greppable, flattened JSON) converter";
+    homepage = "https://github.com/adamritter/fastgron";
+    license = licenses.mit;
+    maintainers = with maintainers; [ zowoq ];
+    platforms = platforms.all;
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/fatcat/default.nix b/nixpkgs/pkgs/development/tools/fatcat/default.nix
new file mode 100644
index 000000000000..d5caaea08a4b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/fatcat/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, gitUpdater
+}:
+
+stdenv.mkDerivation rec {
+  pname = "fatcat";
+  version = "1.1.1";
+
+  src = fetchFromGitHub {
+    owner = "Gregwar";
+    repo = "fatcat";
+    rev = "v${version}";
+    hash = "sha256-/iGNVP7Bz/UZAR+dFxAKMKM9jm07h0x0F3VGpdxlHdk=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+  ];
+
+  passthru.updateScript = gitUpdater {
+    rev-prefix = "v";
+  };
+
+  meta = with lib; {
+    description = "FAT filesystems explore, extract, repair, and forensic tool";
+    homepage = "https://github.com/Gregwar/fatcat";
+    license = licenses.mit;
+    maintainers = with maintainers; [ cynerd ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/fblog/default.nix b/nixpkgs/pkgs/development/tools/fblog/default.nix
new file mode 100644
index 000000000000..b24981ffc49c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/fblog/default.nix
@@ -0,0 +1,22 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "fblog";
+  version = "4.8.0";
+
+  src = fetchFromGitHub {
+    owner = "brocode";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-ByojMOkdE3B9KrApOWPihg6vJHpLQy0gsIlKPd5xJog=";
+  };
+
+  cargoHash = "sha256-R7FLZ+yLvDltETphfqRLrcQZNt+rkJBFdmGL3pY0G04=";
+
+  meta = with lib; {
+    description = "A small command-line JSON log viewer";
+    homepage = "https://github.com/brocode/fblog";
+    license = licenses.wtfpl;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/fdroidserver/default.nix b/nixpkgs/pkgs/development/tools/fdroidserver/default.nix
new file mode 100644
index 000000000000..88fc8f6e4f0b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/fdroidserver/default.nix
@@ -0,0 +1,116 @@
+{ lib
+, fetchFromGitLab
+, fetchPypi
+, apksigner
+, buildPythonApplication
+, python3
+, pythonRelaxDepsHook
+, installShellFiles
+, androguard
+, babel
+, clint
+, defusedxml
+, gitpython
+, libcloud
+, mwclient
+, paramiko
+, pillow
+, pyasn1
+, pyasn1-modules
+, python-vagrant
+, pyyaml
+, qrcode
+, requests
+, ruamel-yaml
+, yamllint
+}:
+
+buildPythonApplication rec {
+  pname = "fdroidserver";
+  version = "unstable-2023-10-23";
+  format = "setuptools";
+
+  src = fetchFromGitLab {
+    owner = "fdroid";
+    repo = "fdroidserver";
+    rev = "f4b10cf83935432d19948dac669964384bef0728";
+    hash = "sha256-GmR6Td5pScwEKK9W6m26xQV4XxBdZ7frN2UvwUGY4Dw=";
+  };
+
+  pythonRelaxDeps = [
+    "pyasn1"
+    "pyasn1-modules"
+  ];
+
+  postPatch = ''
+    substituteInPlace fdroidserver/common.py \
+      --replace "FDROID_PATH = os.path.realpath(os.path.join(os.path.dirname(__file__), '..'))" "FDROID_PATH = '$out/bin'"
+  '';
+
+  preConfigure = ''
+    ${python3.pythonOnBuildForHost.interpreter} setup.py compile_catalog
+  '';
+
+  postInstall = ''
+    patchShebangs gradlew-fdroid
+    install -m 0755 gradlew-fdroid $out/bin
+    installShellCompletion --cmd fdroid \
+      --bash completion/bash-completion
+  '';
+
+  nativeBuildInputs = [
+    pythonRelaxDepsHook
+    installShellFiles
+  ];
+
+  buildInputs = [
+    babel
+  ];
+
+  propagatedBuildInputs = [
+    androguard
+    clint
+    defusedxml
+    gitpython
+    libcloud
+    mwclient
+    paramiko
+    pillow
+    pyasn1
+    pyasn1-modules
+    python-vagrant
+    pyyaml
+    qrcode
+    requests
+    (ruamel-yaml.overrideAttrs (old: {
+      src = fetchPypi {
+        pname = "ruamel.yaml";
+        version = "0.17.21";
+        hash = "sha256-i3zml6LyEnUqNcGsQURx3BbEJMlXO+SSa1b/P10jt68=";
+      };
+    }))
+    yamllint
+  ];
+
+  makeWrapperArgs = [
+    "--prefix"
+    "PATH"
+    ":"
+    "${lib.makeBinPath [ apksigner ]}"
+  ];
+
+  # no tests
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "fdroidserver"
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/f-droid/fdroidserver";
+    changelog = "https://github.com/f-droid/fdroidserver/blob/${version}/CHANGELOG.md";
+    description = "Server and tools for F-Droid, the Free Software repository system for Android";
+    license = licenses.agpl3Plus;
+    maintainers = with maintainers; [ linsui jugendhacker ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/fermyon-spin/default.nix b/nixpkgs/pkgs/development/tools/fermyon-spin/default.nix
new file mode 100644
index 000000000000..8091c64b974b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/fermyon-spin/default.nix
@@ -0,0 +1,62 @@
+{ lib
+, stdenv
+, fetchzip
+, autoPatchelfHook
+, gcc-unwrapped
+, zlib
+}:
+
+let
+  system = stdenv.hostPlatform.system;
+
+  platform = {
+    x86_64-linux = "linux-amd64";
+    aarch64-linux = "linux-aarch64";
+    x86_64-darwin = "macos-amd64";
+    aarch64-darwin = "macos-aarch64";
+  }.${system} or (throw "Unsupported system: ${system}");
+
+  packageHash = {
+    x86_64-linux = "sha256-Y0Inew0PncpnEpdLWtl/85t93eGSRewKh5mvGnn+yck=";
+    aarch64-linux = "sha256-HEm3TaLeaws8G73CU9BmxeplQdeF9nQbBSnbctaVhqI=";
+    x86_64-darwin = "sha256-mlshpN/4Od4qrXiqIEYo7G84Dtb+tp2nK2VnrRG2rto=";
+    aarch64-darwin = "sha256-aJH/vOidj0vbkttGDgelaAC/dMYguQPLjxl+V3pOVzI=";
+  }.${system} or (throw "Unsupported system: ${system}");
+
+in stdenv.mkDerivation rec {
+  pname = "fermyon-spin";
+  version = "2.2.0";
+
+  src = fetchzip {
+    url = "https://github.com/fermyon/spin/releases/download/v${version}/spin-v${version}-${platform}.tar.gz";
+    stripRoot = false;
+    hash = packageHash;
+  };
+
+  nativeBuildInputs = lib.optionals stdenv.isLinux [
+    autoPatchelfHook
+  ];
+
+  buildInputs = [
+    gcc-unwrapped.lib
+    zlib
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    cp $src/* $out/bin
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Framework for building, deploying, and running fast, secure, and composable cloud microservices with WebAssembly.";
+    homepage = "https://github.com/fermyon/spin";
+    license = with licenses; [ asl20 ];
+    mainProgram = "spin";
+    maintainers = with maintainers; [ mglolenstine ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/firebase-tools/default.nix b/nixpkgs/pkgs/development/tools/firebase-tools/default.nix
new file mode 100644
index 000000000000..895b018f50f7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/firebase-tools/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, stdenv
+, buildNpmPackage
+, fetchFromGitHub
+, python3
+, xcbuild
+}:
+
+buildNpmPackage rec {
+  pname = "firebase-tools";
+  version = "13.1.0";
+
+  src = fetchFromGitHub {
+    owner = "firebase";
+    repo = "firebase-tools";
+    rev = "v${version}";
+    hash = "sha256-S8biY6aOCvz//SLdqFkPLCfQn9CtrVxKgp9A/Z2vRHo=";
+  };
+
+  npmDepsHash = "sha256-SoRtQyGhKgaS1TK7ZmuIbNESQByQVJZkBUbvITiLF5w=";
+
+  postPatch = ''
+    ln -s npm-shrinkwrap.json package-lock.json
+  '';
+
+  nativeBuildInputs = [
+    python3
+  ] ++ lib.optionals stdenv.isDarwin [
+    xcbuild
+  ];
+
+  env = {
+    PUPPETEER_SKIP_DOWNLOAD = true;
+  };
+
+  meta = {
+    changelog = "https://github.com/firebase/firebase-tools/blob/${src.rev}/CHANGELOG.md";
+    description = "Manage, and deploy your Firebase project from the command line";
+    homepage = "https://github.com/firebase/firebase-tools";
+    license = lib.licenses.mit;
+    mainProgram = "firebase";
+    maintainers = with lib.maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/fission/default.nix b/nixpkgs/pkgs/development/tools/fission/default.nix
new file mode 100644
index 000000000000..b1ac93a81ee9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/fission/default.nix
@@ -0,0 +1,30 @@
+{ lib, fetchFromGitHub, buildGoModule }:
+
+buildGoModule rec {
+  pname = "fission";
+  version = "1.20.1";
+
+  src = fetchFromGitHub {
+    owner = "fission";
+    repo = "fission";
+    rev = "v${version}";
+    hash = "sha256-RT4hBr7qxhhJM1REJFIE9En1Vu3ACvXav242PBYz8IQ=";
+  };
+
+  vendorHash = "sha256-hZmQxG4cw1Len3ZyGhWVTXB8N9fDRkgNDyF18/8dKuo=";
+
+  ldflags = [ "-s" "-w" "-X info.Version=${version}" ];
+
+  subPackages = [ "cmd/fission-cli" ];
+
+  postInstall = ''
+    ln -s $out/bin/fission-cli $out/bin/fission
+  '';
+
+  meta = with lib; {
+    description = "The cli used by end user to interact Fission";
+    homepage = "https://fission.io";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ neverbehave ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/flamegraph/default.nix b/nixpkgs/pkgs/development/tools/flamegraph/default.nix
new file mode 100644
index 000000000000..3a64d741de5c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/flamegraph/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, perl }:
+
+stdenv.mkDerivation rec {
+  pname = "FlameGraph";
+  version = "2019-02-16";
+
+  src = fetchFromGitHub {
+    owner = "brendangregg";
+    repo = pname;
+    rev = "1b1c6deede9c33c5134c920bdb7a44cc5528e9a7";
+    sha256 = "1flvkmv2gbb003d51myl7r0wyhyw1bk9p7v19xagb8xjj4ci947b";
+  };
+
+  buildInputs = [ perl ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    for x in $src/*.pl $src/*.awk $src/dev/*.pl $src/dev/*.d; do
+      cp $x $out/bin
+    done
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    license = with licenses; [ asl20 cddl gpl2Plus ];
+    homepage = "http://www.brendangregg.com/flamegraphs.html";
+    description = "Visualization for profiled code";
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/flatpak-builder/default.nix b/nixpkgs/pkgs/development/tools/flatpak-builder/default.nix
new file mode 100644
index 000000000000..c3c59f1b2ba8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/flatpak-builder/default.nix
@@ -0,0 +1,158 @@
+{ lib, stdenv
+, fetchurl
+, substituteAll
+, nixosTests
+
+, autoreconfHook
+, docbook_xml_dtd_412
+, docbook_xml_dtd_42
+, docbook_xml_dtd_43
+, docbook_xsl
+, gettext
+, libxml2
+, libxslt
+, pkg-config
+, xmlto
+
+, acl
+, breezy
+, binutils
+, bzip2
+, coreutils
+, cpio
+, curl
+, debugedit
+, elfutils
+, flatpak
+, gitMinimal
+, glib
+, glibcLocales
+, gnumake
+, gnupg
+, gnutar
+, json-glib
+, libcap
+, libsoup
+, libyaml
+, ostree
+, patch
+, python2
+, rpm
+, unzip
+}:
+
+let
+  installed_testdir = "${placeholder "installedTests"}/libexec/installed-tests/flatpak-builder";
+  installed_test_metadir = "${placeholder "installedTests"}/share/installed-tests/flatpak-builder";
+in stdenv.mkDerivation rec {
+  pname = "flatpak-builder";
+  version = "1.2.3";
+
+  outputs = [ "out" "doc" "man" "installedTests" ];
+
+  src = fetchurl {
+    url = "https://github.com/flatpak/flatpak-builder/releases/download/${version}/${pname}-${version}.tar.xz";
+    sha256 = "sha256-4leCWkf3o+ceMPsPgPLZrG5IAfdG9VLfrw5WTj7jUcg=";
+  };
+
+  patches = [
+    # patch taken from gtk_doc
+    ./respect-xml-catalog-files-var.patch
+
+    # Hardcode paths
+    (substituteAll {
+      src = ./fix-paths.patch;
+      brz = "${breezy}/bin/brz";
+      cp = "${coreutils}/bin/cp";
+      patch = "${patch}/bin/patch";
+      tar = "${gnutar}/bin/tar";
+      unzip = "${unzip}/bin/unzip";
+      rpm2cpio = "${rpm}/bin/rpm2cpio";
+      cpio = "${cpio}/bin/cpio";
+      git = "${gitMinimal}/bin/git";
+      rofilesfuse = "${ostree}/bin/rofiles-fuse";
+      strip = "${binutils}/bin/strip";
+      eustrip = "${elfutils}/bin/eu-strip";
+      euelfcompress = "${elfutils}/bin/eu-elfcompress";
+    })
+
+    # The test scripts in Flatpak repo were updated so we are basing
+    # this on our patch for Flatpak 0.99.
+    (substituteAll {
+      src = ./fix-test-paths.patch;
+      inherit glibcLocales;
+      # FIXME use python3 for tests that rely on python2
+      # inherit python2;
+    })
+  ];
+
+  nativeBuildInputs = [
+    autoreconfHook
+    docbook_xml_dtd_43
+    docbook_xsl
+    gettext
+    libxml2
+    libxslt
+    pkg-config
+    xmlto
+  ];
+
+  buildInputs = [
+    acl
+    bzip2
+    curl
+    debugedit
+    elfutils
+    flatpak
+    glib
+    json-glib
+    libcap
+    libsoup
+    libxml2
+    libyaml
+    ostree
+  ];
+
+  configureFlags = [
+    "--enable-installed-tests"
+    "--with-system-debugedit"
+  ];
+
+  makeFlags = [
+    "installed_testdir=${installed_testdir}"
+    "installed_test_metadir=${installed_test_metadir}"
+  ];
+
+  # Some scripts used by tests  need to use shebangs that are available in Flatpak runtimes.
+  dontPatchShebangs = true;
+
+  enableParallelBuilding = true;
+
+  # Installed tests
+  postFixup = ''
+    for file in ${installed_testdir}/{test-builder.sh,test-builder-python.sh}; do
+      patchShebangs $file
+    done
+  '';
+
+  passthru = {
+    installedTestsDependencies = [
+      gnupg
+      ostree
+      # FIXME python2
+      gnumake
+    ];
+
+    tests = {
+      installedTests = nixosTests.installed-tests.flatpak-builder;
+    };
+  };
+
+  meta = with lib; {
+    description = "Tool to build flatpaks from source";
+    homepage = "https://github.com/flatpak/flatpak-builder";
+    license = licenses.lgpl21Plus;
+    maintainers = with maintainers; [ ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/flatpak-builder/fix-paths.patch b/nixpkgs/pkgs/development/tools/flatpak-builder/fix-paths.patch
new file mode 100644
index 000000000000..c0df2c6cbe7e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/flatpak-builder/fix-paths.patch
@@ -0,0 +1,151 @@
+diff --git a/src/builder-context.c b/src/builder-context.c
+index dde12790..3a379297 100644
+--- a/src/builder-context.c
++++ b/src/builder-context.c
+@@ -256,7 +256,7 @@ builder_context_init (BuilderContext *self)
+   g_autofree char *path = NULL;
+ 
+   self->rofiles_file_lock = init;
+-  path = g_find_program_in_path ("rofiles-fuse");
++  path = g_find_program_in_path ("@rofilesfuse@");
+   self->have_rofiles = path != NULL;
+ }
+ 
+@@ -800,7 +800,7 @@ builder_context_enable_rofiles (BuilderContext *self,
+   g_autoptr(GFile) rofiles_base = NULL;
+   g_autoptr(GFile) rofiles_dir = NULL;
+   g_autofree char *tmpdir_name = NULL;
+-  char *argv[] = { "rofiles-fuse",
++  char *argv[] = { "@rofilesfuse@",
+                    "-o",
+                    "kernel_cache,entry_timeout=60,attr_timeout=60,splice_write,splice_move",
+                    (char *)flatpak_file_get_path_cached (self->app_dir),
+diff --git a/src/builder-git.c b/src/builder-git.c
+index ef517adb..6ab095f0 100644
+--- a/src/builder-git.c
++++ b/src/builder-git.c
+@@ -44,7 +44,7 @@ git (GFile   *dir,
+   va_list ap;
+ 
+   va_start (ap, error);
+-  res = flatpak_spawn (dir, output, flags, error, "git", ap);
++  res = flatpak_spawn (dir, output, flags, error, "@git@", ap);
+   va_end (ap);
+ 
+   return res;
+@@ -58,7 +58,7 @@ cp (GError **error,
+   va_list ap;
+ 
+   va_start (ap, error);
+-  res = flatpak_spawn (NULL, NULL, 0, error, "cp", ap);
++  res = flatpak_spawn (NULL, NULL, 0, error, "@cp@", ap);
+   va_end (ap);
+ 
+   return res;
+diff --git a/src/builder-source-archive.c b/src/builder-source-archive.c
+index 3c694e57..0de62318 100644
+--- a/src/builder-source-archive.c
++++ b/src/builder-source-archive.c
+@@ -443,7 +443,7 @@ tar (GFile   *dir,
+   va_list ap;
+ 
+   va_start (ap, error);
+-  res = flatpak_spawn (dir, NULL, 0, error, "tar", ap);
++  res = flatpak_spawn (dir, NULL, 0, error, "@tar@", ap);
+   va_end (ap);
+ 
+   return res;
+@@ -458,7 +458,7 @@ unzip (GFile   *dir,
+   va_list ap;
+ 
+   va_start (ap, error);
+-  res = flatpak_spawn (dir, NULL, 0, error, "unzip", ap);
++  res = flatpak_spawn (dir, NULL, 0, error, "@unzip@", ap);
+   va_end (ap);
+ 
+   return res;
+@@ -483,7 +483,7 @@ unrpm (GFile   *dir,
+        GError **error)
+ {
+   gboolean res;
+-  const gchar *argv[] = { "sh", "-c", "rpm2cpio \"$1\" | cpio -i -d",
++  const gchar *argv[] = { "sh", "-c", "@rpm2cpio@ \"$1\" | @cpio@ -i -d",
+       "sh", /* shell's $0 */
+       rpm_path, /* shell's $1 */
+       NULL };
+@@ -631,7 +631,7 @@ git (GFile   *dir,
+   va_list ap;
+ 
+   va_start (ap, error);
+-  res = flatpak_spawn (dir, NULL, 0, error, "git", ap);
++  res = flatpak_spawn (dir, NULL, 0, error, "@git@", ap);
+   va_end (ap);
+ 
+   return res;
+diff --git a/src/builder-source-bzr.c b/src/builder-source-bzr.c
+index ceeec94a..8abe6f53 100644
+--- a/src/builder-source-bzr.c
++++ b/src/builder-source-bzr.c
+@@ -124,7 +124,7 @@ bzr (GFile   *dir,
+   gboolean res;
+   va_list ap;
+ 
+-  brz = g_find_program_in_path ("brz");
++  brz = g_find_program_in_path ("@brz@");
+ 
+   va_start (ap, error);
+   res = flatpak_spawn (dir, output, 0, error, brz ? brz : "bzr", ap);
+diff --git a/src/builder-source-patch.c b/src/builder-source-patch.c
+index 8721e1e4..d7f4d840 100644
+--- a/src/builder-source-patch.c
++++ b/src/builder-source-patch.c
+@@ -247,15 +247,15 @@ patch (GFile      *dir,
+ 
+   args = g_ptr_array_new ();
+   if (use_git) {
+-    g_ptr_array_add (args, "git");
++    g_ptr_array_add (args, "@git@");
+     g_ptr_array_add (args, "apply");
+     g_ptr_array_add (args, "-v");
+   } else if (use_git_am) {
+-    g_ptr_array_add (args, "git");
++    g_ptr_array_add (args, "@git@");
+     g_ptr_array_add (args, "am");
+     g_ptr_array_add (args, "--keep-cr");
+   } else {
+-    g_ptr_array_add (args, "patch");
++    g_ptr_array_add (args, "@patch@");
+   }
+   for (i = 0; extra_options != NULL && extra_options[i] != NULL; i++)
+     g_ptr_array_add (args, (gchar *) extra_options[i]);
+diff --git a/src/builder-utils.c b/src/builder-utils.c
+index f1c06db5..2e3347c5 100644
+--- a/src/builder-utils.c
++++ b/src/builder-utils.c
+@@ -149,7 +149,7 @@ strip (GError **error,
+   va_list ap;
+ 
+   va_start (ap, error);
+-  res = flatpak_spawn (NULL, NULL, 0, error, "strip", ap);
++  res = flatpak_spawn (NULL, NULL, 0, error, "@strip@", ap);
+   va_end (ap);
+ 
+   return res;
+@@ -163,7 +163,7 @@ eu_strip (GError **error,
+   va_list ap;
+ 
+   va_start (ap, error);
+-  res = flatpak_spawn (NULL, NULL, 0, error, "eu-strip", ap);
++  res = flatpak_spawn (NULL, NULL, 0, error, "@eustrip@", ap);
+   va_end (ap);
+ 
+   return res;
+@@ -177,7 +177,7 @@ eu_elfcompress (GError **error,
+   va_list ap;
+ 
+   va_start (ap, error);
+-  res = flatpak_spawn (NULL, NULL, 0, error, "eu-elfcompress", ap);
++  res = flatpak_spawn (NULL, NULL, 0, error, "@euelfcompress@", ap);
+   va_end (ap);
+ 
+   return res;
diff --git a/nixpkgs/pkgs/development/tools/flatpak-builder/fix-test-paths.patch b/nixpkgs/pkgs/development/tools/flatpak-builder/fix-test-paths.patch
new file mode 100644
index 000000000000..96212a30fcf8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/flatpak-builder/fix-test-paths.patch
@@ -0,0 +1,111 @@
+--- a/tests/libtest.sh
++++ b/tests/libtest.sh
+@@ -301,7 +301,7 @@
+ }
+ 
+ skip_without_python2 () {
+-    if ! test -f /usr/bin/python2 || ! /usr/bin/python2 -c "import sys; sys.exit(0 if sys.version_info >= (2, 7) else 1)" ; then
++    if ! test -f @python2@/bin/python2 || ! @python2@/bin/python2 -c "import sys; sys.exit(0 if sys.version_info >= (2, 7) else 1)" ; then
+         echo "1..0 # SKIP this test requires /usr/bin/python2 (2.7) support"
+         exit 0
+     fi
+--- a/tests/make-test-runtime.sh
++++ b/tests/make-test-runtime.sh
+@@ -26,6 +26,7 @@
+ PATH="$PATH:/usr/sbin:/sbin"
+ 
+ # Add bash and dependencies
++mkdir -p ${DIR}/nix/store
+ mkdir -p ${DIR}/usr/bin
+ mkdir -p ${DIR}/usr/lib
+ ln -s ../lib ${DIR}/usr/lib64
+@@ -35,73 +36,28 @@
+ else
+     cp `which ldconfig` ${DIR}/usr/bin
+ fi
+-LIBS=`mktemp`
+-BINS=`mktemp`
+-
+-add_bin() {
+-    local f=$1
+-    shift
+-
+-    if grep -qFe "${f}" $BINS; then
+-        # Already handled
+-        return 0
+-    fi
+-
+-    echo $f >> $BINS
+-
+-    # Add library dependencies
+-    (ldd "${f}" | sed "s/.* => //"  | awk '{ print $1}' | grep ^/ | sort -u -o $LIBS $LIBS -)  || true
+-
+-    local shebang=$(sed -n '1s/^#!\([^ ]*\).*/\1/p' "${f}")
+-    if [ x$shebang != x ]; then
+-        add_bin "$shebang"
+-    fi
+-}
+ 
+ for i in $@; do
+-    I=`which $i`
+-    add_bin $I
+-    if test $i == python2; then
+-        mkdir -p ${DIR}/usr/lib/python2.7/lib-dynload
+-        # This is a hardcoded minimal set of modules we need in the current tests.
+-        # Pretty hacky stuff. Add modules as needed.
+-        PYDIR=/usr/lib/python2.7
+-        if test -d /usr/lib64/python2.7; then PYDIR=/usr/lib64/python2.7; fi
+-        for py in site os stat posixpath genericpath warnings \
+-                       linecache types UserDict abc _abcoll \
+-                       _weakrefset copy_reg traceback sysconfig \
+-                       re sre_compile sre_parse sre_constants \
+-                       _sysconfigdata ; do
+-            cp ${PYDIR}/$py.py ${DIR}/usr/lib/python2.7
+-        done
+-        # These might not exist, depending how Python was configured; and the
+-        # part after ${so} might be "module" or ".x86_64-linux-gnu" or
+-        # something else
+-        for so in _locale strop ; do
+-            cp ${PYDIR}/lib-dynload/${so}*.so ${DIR}/usr/lib/python2.7/lib-dynload || :
+-        done
+-        for plat in $( cd ${PYDIR} && echo plat-* ); do
+-            test -e ${PYDIR}/${plat} || continue
+-            mkdir -p ${DIR}/usr/lib/python2.7/${plat}
+-            cp ${PYDIR}/${plat}/*.py ${DIR}/usr/lib/python2.7/${plat}/
+-        done
+-    fi
+-done
+-for i in `cat $BINS`; do
+-    echo Adding binary $i 1>&2
+-    cp "$i" ${DIR}/usr/bin/
+-done
+-for i in `cat $LIBS`; do
+-    echo Adding library $i 1>&2
+-    cp "$i" ${DIR}/usr/lib/
++    I=$(readlink -f $(which $i))
++    requisites=$(nix-store --query --requisites "$I")
++    for r in $requisites; do
++        # a single store item can be needed by multiple paths, no need to copy it again
++        if [ ! -e ${DIR}/$r ]; then
++            cp -r $r ${DIR}/$r
++        fi
++    done
++    ln -s $I ${DIR}/usr/bin/$i
+ done
+ ln -s bash ${DIR}/usr/bin/sh
+ 
+-# We copy the C.UTF8 locale and call it en_US. Its a bit of a lie, but
+-# the real en_US locale is often not available, because its in the
+-# local archive.
++mv ${DIR}/nix/store ${DIR}/usr/store # files outside /usr are not permitted, we will have to replace /nix/store with /usr/store
++chmod -R u+w ${DIR} # nix store has read-only directories which would cause problems during clean-up, files need to be writable for sed
++find ${DIR} -type f -print0 | xargs -0 sed -i 's~/nix/store/~/usr/store/~g' # replace hardcoded paths
++find ${DIR} -type l | xargs -I '{}' sh -c 'tg="$(readlink "$1")"; newtg="${tg#/nix/store/}"; if [ "$tg" != "$newtg" ]; then ln -fs "/usr/store/$newtg" "$1"; fi' -- '{}' # replace symlink targets
++
++# We copy the whole locale archive because we do not have C.UTF8 locale
+ mkdir -p ${DIR}/usr/lib/locale/
+-cp -r /usr/lib/locale/C.* ${DIR}/usr/lib/locale/en_US
++cp @glibcLocales@/lib/locale/locale-archive ${DIR}/usr/lib/locale/locale-archive
+ 
+ if [ x$COLLECTION_ID != x ]; then
+     collection_args=--collection-id=${COLLECTION_ID}
diff --git a/nixpkgs/pkgs/development/tools/flatpak-builder/respect-xml-catalog-files-var.patch b/nixpkgs/pkgs/development/tools/flatpak-builder/respect-xml-catalog-files-var.patch
new file mode 100644
index 000000000000..0e259aebd8a5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/flatpak-builder/respect-xml-catalog-files-var.patch
@@ -0,0 +1,13 @@
+--- a/acinclude.m4
++++ b/acinclude.m4
+@@ -40,8 +40,8 @@
+ [
+   AC_REQUIRE([JH_PATH_XML_CATALOG],[JH_PATH_XML_CATALOG(,[:])])dnl
+   AC_MSG_CHECKING([for ifelse([$2],,[$1],[$2]) in XML catalog])
+-  if $jh_found_xmlcatalog && \
+-     AC_RUN_LOG([$XMLCATALOG --noout "$XML_CATALOG_FILE" "$1" >&2]); then
++  # empty argument forces libxml to use XML_CATALOG_FILES variable
++  if AC_RUN_LOG([$XMLCATALOG --noout "" "$1" >&2]); then
+     AC_MSG_RESULT([found])
+     ifelse([$3],,,[$3
+ ])dnl
diff --git a/nixpkgs/pkgs/development/tools/flawfinder/default.nix b/nixpkgs/pkgs/development/tools/flawfinder/default.nix
new file mode 100644
index 000000000000..0129cf73741b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/flawfinder/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, fetchurl
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "flawfinder";
+  version = "2.0.19";
+
+  src = fetchurl {
+    url = "https://dwheeler.com/flawfinder/flawfinder-${version}.tar.gz";
+    sha256 = "sha256-/lUJgdNwq/oKKWcTRswLA4Ipqb2QsjnqsPAfEiEt9hg=";
+  };
+
+  # Project is using a combination of bash/Python for the tests
+  doCheck = false;
+
+  pythonImportsCheck = [ "flawfinder" ];
+
+  meta = with lib; {
+    description = "Tool to examines C/C++ source code for security flaws";
+    homepage = "https://dwheeler.com/flawfinder/";
+    license = with licenses; [ gpl2Only ];
+    maintainers = with maintainers; [ fab ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/flip-link/default.nix b/nixpkgs/pkgs/development/tools/flip-link/default.nix
new file mode 100644
index 000000000000..b4c21da38585
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/flip-link/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, rustPlatform, fetchFromGitHub, libiconv }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "flip-link";
+  version = "0.1.7";
+
+  src = fetchFromGitHub {
+    owner = "knurling-rs";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-bwNtIuAALSOSUkbx2UbOEzHv064BVAHTBdJGPZVyEis=";
+  };
+
+  cargoHash = "sha256-pY1/p3TMt/DCTadU0Ki0yMgmS7RwO9siZLvNNXSLrfg=";
+
+  buildInputs = lib.optional stdenv.isDarwin libiconv;
+
+  checkFlags = [
+    # requires embedded toolchains
+    "--skip should_link_example_firmware::case_1_normal"
+    "--skip should_link_example_firmware::case_2_custom_linkerscript"
+    "--skip should_verify_memory_layout"
+  ];
+
+  meta = with lib; {
+    description = "Adds zero-cost stack overflow protection to your embedded programs";
+    homepage = "https://github.com/knurling-rs/flip-link";
+    changelog = "https://github.com/knurling-rs/flip-link/blob/v${version}/CHANGELOG.md";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ FlorianFranzen newam ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/flock/default.nix b/nixpkgs/pkgs/development/tools/flock/default.nix
new file mode 100644
index 000000000000..7b6aadc47161
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/flock/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, lib, fetchFromGitHub, fetchpatch, autoreconfHook, ronn }:
+
+stdenv.mkDerivation rec {
+  pname = "flock";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "discoteq";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-cCpckORtogs6Nt7c5q2+z0acXAnALdLV6uzxa5ng3s4=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ronn ];
+
+  patches = [
+    (fetchpatch {
+      name = "fix-format-specifier.patch";
+      url = "https://github.com/discoteq/flock/commit/408bad42eb8d76cdd0c504c2f97f21c0b424c3b1.patch";
+      sha256 = "sha256-YuFKXWTBu9A2kBNqkg1Oek6vDbVo/y8dB1k9Fuh3QmA";
+    })
+  ];
+
+  meta = with lib; {
+    description = "Cross-platform version of flock(1)";
+    maintainers = with maintainers; [ matthewbauer msfjarvis ];
+    mainProgram = "flock";
+    platforms = platforms.all;
+    license = licenses.isc;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/flootty/default.nix b/nixpkgs/pkgs/development/tools/flootty/default.nix
new file mode 100644
index 000000000000..42829649c605
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/flootty/default.nix
@@ -0,0 +1,18 @@
+{ lib, python3Packages, fetchPypi }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "Flootty";
+  version = "3.2.2";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0gfl143ly81pmmrcml91yr0ypvwrs5q4s1sfdc0l2qkqpy233ih7";
+  };
+
+  meta = with lib; {
+    description = "A collaborative terminal. In practice, it's similar to a shared screen or tmux session";
+    homepage = "https://floobits.com/help/flootty";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ sellout ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/flyway/default.nix b/nixpkgs/pkgs/development/tools/flyway/default.nix
new file mode 100644
index 000000000000..cd42388f0f82
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/flyway/default.nix
@@ -0,0 +1,44 @@
+{ lib, stdenv, fetchurl, jre_headless, makeWrapper, testers }:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "flyway";
+  version = "9.22.3";
+  src = fetchurl {
+    url = "mirror://maven/org/flywaydb/flyway-commandline/${finalAttrs.version}/flyway-commandline-${finalAttrs.version}.tar.gz";
+    sha256 = "sha256-utAJpbU5NkKyJyyWB0yfwHZJxQAVJgiKm12wmGK1ojQ=";
+  };
+  nativeBuildInputs = [ makeWrapper ];
+  dontBuild = true;
+  dontStrip = true;
+  installPhase = ''
+    mkdir -p $out/bin $out/share/flyway
+    cp -r sql jars drivers conf $out/share/flyway
+    install -Dt $out/share/flyway/lib lib/community/*.jar lib/*.jar lib/aad/*.jar lib/oracle_wallet/*.jar
+    makeWrapper "${jre_headless}/bin/java" $out/bin/flyway \
+      --add-flags "-Djava.security.egd=file:/dev/../dev/urandom" \
+      --add-flags "-classpath '$out/share/flyway/lib/*:$out/share/flyway/drivers/*'" \
+      --add-flags "org.flywaydb.commandline.Main" \
+      --add-flags "-jarDirs='$out/share/flyway/jars'"
+  '';
+  passthru.tests = {
+    version = testers.testVersion { package = finalAttrs.finalPackage; };
+  };
+  meta = with lib; {
+    description = "Evolve your Database Schema easily and reliably across all your instances";
+    longDescription = ''
+      The Flyway command-line tool is a standalone Flyway distribution.
+      It is primarily meant for users who wish to migrate their database from the command-line
+      without having to integrate Flyway into their applications nor having to install a build tool.
+
+      This package is only the Community Edition of the Flyway command-line tool.
+    '';
+    mainProgram = "flyway";
+    downloadPage = "https://github.com/flyway/flyway";
+    homepage = "https://flywaydb.org/";
+    changelog = "https://documentation.red-gate.com/fd/release-notes-for-flyway-engine-179732572.html";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.asl20;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.cmcdragonkai ];
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/fnlfmt/default.nix b/nixpkgs/pkgs/development/tools/fnlfmt/default.nix
new file mode 100644
index 000000000000..14c783ce845b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/fnlfmt/default.nix
@@ -0,0 +1,42 @@
+{ lib, stdenv, fetchFromSourcehut, luaPackages, lua }:
+
+stdenv.mkDerivation rec {
+  pname = "fnlfmt";
+  version = "0.3.1";
+
+  src = fetchFromSourcehut {
+    owner = "~technomancy";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-rhbYG0TpqAZnbLaZOG739/pDA61Dwb4Y1HhBxWLtOus=";
+  };
+
+  nativeBuildInputs = [ luaPackages.fennel ];
+
+  buildInputs = [ lua ];
+
+  buildPhase = ''
+    runHook preBuild
+
+    echo "#!${lua}/bin/lua" > fnlfmt
+    ${luaPackages.fennel}/bin/fennel --require-as-include --compile cli.fnl >> fnlfmt
+    chmod +x fnlfmt
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    install -D ./fnlfmt $out/bin/fnlfmt
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Formatter for Fennel";
+    homepage = "https://git.sr.ht/~technomancy/fnlfmt";
+    license = licenses.lgpl3Plus;
+    platforms = lua.meta.platforms;
+    maintainers = with maintainers; [ chiroptical ];
+    mainProgram = "fnlfmt";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/fnm/default.nix b/nixpkgs/pkgs/development/tools/fnm/default.nix
new file mode 100644
index 000000000000..3cb367e820fe
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/fnm/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, installShellFiles
+, DiskArbitration
+, Foundation
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "fnm";
+  version = "1.35.1";
+
+  src = fetchFromGitHub {
+    owner = "Schniz";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-qRnxXh3m/peMNAR/EV+lkwDI+Z6komF8GGFyF5UDOFg=";
+  };
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  buildInputs = lib.optionals stdenv.isDarwin [ DiskArbitration Foundation Security ];
+
+  cargoHash = "sha256-//DCxAC8Jf7g8SkG4NfwkM0NyWUdASuw1g4COFIY0mU=";
+
+  doCheck = false;
+
+  postInstall = ''
+    installShellCompletion --cmd fnm \
+      --bash <($out/bin/fnm completions --shell bash) \
+      --fish <($out/bin/fnm completions --shell fish) \
+      --zsh <($out/bin/fnm completions --shell zsh)
+  '';
+
+  meta = with lib; {
+    description = "Fast and simple Node.js version manager";
+    homepage = "https://github.com/Schniz/fnm";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ kidonng ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/fprettify/default.nix b/nixpkgs/pkgs/development/tools/fprettify/default.nix
new file mode 100644
index 000000000000..a5eed6bdc28c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/fprettify/default.nix
@@ -0,0 +1,28 @@
+{ lib, python3Packages, fetchFromGitHub }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "fprettify";
+  version = "0.3.7";
+
+  src = fetchFromGitHub {
+    owner = "pseewald";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "17v52rylmsy3m3j5fcb972flazykz2rvczqfh8mxvikvd6454zyj";
+  };
+
+  preConfigure = ''
+    patchShebangs fprettify.py
+  '';
+
+  propagatedBuildInputs = with python3Packages; [
+    configargparse
+  ];
+
+  meta = with lib; {
+    description = "An auto-formatter for modern Fortran code that imposes strict whitespace formatting, written in Python.";
+    homepage = "https://pypi.org/project/fprettify/";
+    license = with licenses; [ gpl3Only ];
+    maintainers = with maintainers; [ fabiangd ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/fq/default.nix b/nixpkgs/pkgs/development/tools/fq/default.nix
new file mode 100644
index 000000000000..6a51af35b8f5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/fq/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, fq
+, testers
+}:
+
+buildGoModule rec {
+  pname = "fq";
+  version = "0.9.0";
+
+  src = fetchFromGitHub {
+    owner = "wader";
+    repo = "fq";
+    rev = "v${version}";
+    hash = "sha256-ohSjQxVbywOcZHwDditqDyQ+EAgzWtLXRc130dpIzzE=";
+  };
+
+  vendorHash = "sha256-yfunwj+0fVrWV1RgZtCsdmV4ESKF7VLr12P2nULyqOg=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X main.version=${version}"
+  ];
+
+  subPackages = [ "." ];
+
+  passthru.tests = testers.testVersion { package = fq; };
+
+  meta = with lib; {
+    description = "jq for binary formats";
+    homepage = "https://github.com/wader/fq";
+    license = licenses.mit;
+    maintainers = with maintainers; [ siraben ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/frece/default.nix b/nixpkgs/pkgs/development/tools/frece/default.nix
new file mode 100644
index 000000000000..64de6d162f0a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/frece/default.nix
@@ -0,0 +1,23 @@
+{ lib, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "frece";
+  version = "1.0.6";
+
+  src = fetchFromGitHub {
+    owner = "YodaEmbedding";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-CAiIqT5KuzrqbV9FVK3nZUe8MDs2KDdsKplJMI7rN9w=";
+  };
+
+  cargoSha256 = "sha256-eLN917L6l0vUWlAn3ROKrRdtyqaaMKjBQD2tEGWECUU=";
+
+  meta = with lib; {
+    description = "Maintain a database sorted by frecency (frequency + recency)";
+    homepage = "https://github.com/YodaEmbedding/frece";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/frink/default.nix b/nixpkgs/pkgs/development/tools/frink/default.nix
new file mode 100644
index 000000000000..dc902783c59c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/frink/default.nix
@@ -0,0 +1,65 @@
+{ fetchurl
+, frink
+, jdk
+, lib
+, rlwrap
+, stdenv
+, testers
+}:
+stdenv.mkDerivation rec {
+  pname = "frink";
+  version = "2023-07-31";
+
+  src = fetchurl {
+    # Upstream does not provide versioned download links
+    url = "https://web.archive.org/web/20230806114836/https://frinklang.org/frinkjar/frink.jar";
+    sha256 = "sha256-u44g/pM4ie3NcBh6MZpN8+oWZLYz0LN5ozetee1iXNk=";
+  };
+
+  dontUnpack = true;
+
+  nativeBuildInputs = [ jdk ];
+
+  buildInputs = [ jdk rlwrap ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin $out/lib
+
+    cp ${src} $out/lib/frink.jar
+
+    # Generate rlwrap helper files.
+    # See https://frinklang.org/fsp/colorize.fsp?f=listUnits.frink
+    # and https://frinklang.org/fsp/colorize.fsp?f=listFunctions.frink
+    java -classpath "$out/lib/frink.jar" frink.gui.FrinkStarter -e 'joinln[lexicalSort[units[]]]' > $out/lib/unitnames.txt
+    java -classpath "$out/lib/frink.jar" frink.gui.FrinkStarter -e 'joinln[map[{|f|
+        f =~ %s/\s+//g
+        return "$f$"
+      }, lexicalSort[functions[]]]]' > $out/lib/functionnames.txt
+
+    cat > "$out/bin/frink" << EOF
+    #!${stdenv.shell}
+    exec ${rlwrap}/bin/rlwrap -f $out/lib/unitnames.txt -b '$' -f $out/lib/functionnames.txt ${jdk}/bin/java -classpath "$out/lib/frink.jar" frink.gui.FrinkStarter "\$@"
+    EOF
+
+    chmod a+x "$out/bin/frink"
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "A practical calculating tool and programming language";
+    homepage = "https://frinklang.org/";
+    license = licenses.unfree;
+    sourceProvenance = [ sourceTypes.binaryBytecode ];
+    maintainers = [ maintainers.stefanfehrenbach ];
+  };
+
+  passthru.tests = {
+    callFrinkVersion = testers.testVersion {
+      package = frink;
+      command = "frink -e 'FrinkVersion[]'";
+    };
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/frugal/default.nix b/nixpkgs/pkgs/development/tools/frugal/default.nix
new file mode 100644
index 000000000000..21db72be81c3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/frugal/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "frugal";
+  version = "3.17.6";
+
+  src = fetchFromGitHub {
+    owner = "Workiva";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-N4XcU2D3HE/bQWA70T2XYR5QBsknEr1bgRnfTKgzMiY=";
+  };
+
+  subPackages = [ "." ];
+
+  vendorHash = "sha256-KxDtSrtDloUozUKE7pPR5TZsal9TSyA7Ohoe7HC0/VU=";
+
+  meta = with lib; {
+    description = "Thrift improved";
+    homepage = "https://github.com/Workiva/frugal";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ diogox ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/fsautocomplete/default.nix b/nixpkgs/pkgs/development/tools/fsautocomplete/default.nix
new file mode 100644
index 000000000000..7394cd3746b7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/fsautocomplete/default.nix
@@ -0,0 +1,42 @@
+{ lib, buildDotnetModule, fetchFromGitHub, dotnetCorePackages }:
+
+let
+  inherit (dotnetCorePackages) sdk_7_0;
+in
+buildDotnetModule rec {
+  pname = "fsautocomplete";
+  version = "0.69.0";
+
+  src = fetchFromGitHub {
+    owner = "fsharp";
+    repo = "FsAutoComplete";
+    rev = "v${version}";
+    hash = "sha256-o0aR4yRzRb3y8vARuhP7JnBQ72XBX0whfpC51b2cqF0=";
+  };
+
+  nugetDeps = ./deps.nix;
+
+  postPatch = ''
+    rm global.json
+
+    substituteInPlace src/FsAutoComplete/FsAutoComplete.fsproj \
+      --replace TargetFrameworks TargetFramework \
+  '';
+
+  dotnet-sdk = sdk_7_0;
+  dotnet-runtime = sdk_7_0;
+
+  projectFile = "src/FsAutoComplete/FsAutoComplete.fsproj";
+  executables = [ "fsautocomplete" ];
+
+  useDotnetFromEnv = true;
+
+  meta = with lib; {
+    description = "The FsAutoComplete project (FSAC) provides a backend service for rich editing or intellisense features for editors.";
+    homepage = "https://github.com/fsharp/FsAutoComplete";
+    changelog = "https://github.com/fsharp/FsAutoComplete/releases/tag/v${version}";
+    license = licenses.asl20;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ gbtb mdarocha ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/fsautocomplete/deps.nix b/nixpkgs/pkgs/development/tools/fsautocomplete/deps.nix
new file mode 100644
index 000000000000..76e84656687c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/fsautocomplete/deps.nix
@@ -0,0 +1,280 @@
+# This file was automatically generated by passthru.fetch-deps.
+# Please dont edit it manually, your changes might get overwritten!
+
+{ fetchNuGet }: [
+  (fetchNuGet { pname = "altcover"; version = "8.3.838"; sha256 = "0l8b5rwpxxxqn6fj3irxx5lsl18wdm2nlg831lg9anyms91lfifn"; })
+  (fetchNuGet { pname = "BenchmarkDotNet"; version = "0.13.5"; sha256 = "12z5l6naa711g5a7lsyl3rqc59ybxfphnw74jaz99mc327pzfn0c"; })
+  (fetchNuGet { pname = "BenchmarkDotNet.Annotations"; version = "0.13.5"; sha256 = "15zxj6h6v0a3cl9zc3ywj1q2l83j3f6sagp9vcbrfvlw332z2vy2"; })
+  (fetchNuGet { pname = "BlackFox.VsWhere"; version = "1.1.0"; sha256 = "1brk2rv4yjdbyc4x1qhcmii6rjqsyk52galjxir5carzhr72jrs1"; })
+  (fetchNuGet { pname = "CliWrap"; version = "3.4.4"; sha256 = "1g67sbhqxfl15ilazj64jc0z60ig1x03p2d4jwk6iw64smkp24x8"; })
+  (fetchNuGet { pname = "CommandLineParser"; version = "2.4.3"; sha256 = "1aca3q25n3dg55v4j3kzlzfzd5k2jpy6zhp8x7g74pdfdqzrhg55"; })
+  (fetchNuGet { pname = "CommunityToolkit.HighPerformance"; version = "7.0.1"; sha256 = "18xw7fn0nm8aqcah1n2dkx4m45pz464s4p8bpbvnhdbbri62467r"; })
+  (fetchNuGet { pname = "Destructurama.FSharp"; version = "1.2.0"; sha256 = "0zbk88akz2k49zi5f62klz4h193zb4dfasjdcz4k4wr87chi06nv"; })
+  (fetchNuGet { pname = "DiffPlex"; version = "1.7.1"; sha256 = "1q78r70pirgb7j5wkh454ws237lihh0fig212cpbj02cz53c2h6j"; })
+  (fetchNuGet { pname = "dotnet-reportgenerator-globaltool"; version = "5.0.2"; sha256 = "0grzjd6h82f3whx8iax23v9dvq5c5qvqraadnrpkxsfc8p1z0ynh"; })
+  (fetchNuGet { pname = "DotNet.ReproducibleBuilds"; version = "1.1.1"; sha256 = "0wa0xwbwv1lzjmqwg1vq06vrpb9kkbv3xw5nq50savj0dzhqakzq"; })
+  (fetchNuGet { pname = "Expecto"; version = "10.1.0"; sha256 = "127yy5i0p2lybhm5xcy2wa6j1rcahk61mb1nbym687b23pgizrq9"; })
+  (fetchNuGet { pname = "Expecto.Diff"; version = "9.0.4"; sha256 = "06g6nbr5kdr7hyayh24ry6xfghxpcfkqc8kma5qa5lcvhmy56f7j"; })
+  (fetchNuGet { pname = "Fake.Api.GitHub"; version = "5.20.4"; sha256 = "1hgzqin7bm5fm0n97w7s9cq3zcxyncjmd6xk2da3p12wi7kghx0v"; })
+  (fetchNuGet { pname = "Fake.Core.CommandLineParsing"; version = "5.23.1"; sha256 = "10zlkri6w2xly19v4qqvg9vii5mjwbjqfynn525swzwyna9jws76"; })
+  (fetchNuGet { pname = "Fake.Core.Context"; version = "5.23.1"; sha256 = "1z3a77d53f5084sai9r9w9cdnyp4xn3x0262nhsi0znx52vizppl"; })
+  (fetchNuGet { pname = "Fake.Core.Environment"; version = "5.23.1"; sha256 = "1cm25clxmpl66fg7bjggi4cziz99f7b9pym7528y94bmpskl3gra"; })
+  (fetchNuGet { pname = "Fake.Core.FakeVar"; version = "5.23.1"; sha256 = "11hap2xxz1kw3b16mkxlq0gigfg6k7dacq9l9pxc8jlkpq03pwd9"; })
+  (fetchNuGet { pname = "Fake.Core.Process"; version = "5.23.1"; sha256 = "0gpj6bi53hfkwxc7995fz9p1diq57azsl8znwj3cpc751phvg3dh"; })
+  (fetchNuGet { pname = "Fake.Core.ReleaseNotes"; version = "5.23.1"; sha256 = "1sxmpl2vp29s276vf8b7l7mxy7vsc8rsnbq5xzg97xgwi2s2k3wd"; })
+  (fetchNuGet { pname = "Fake.Core.SemVer"; version = "5.23.1"; sha256 = "0d94hwwmwqcl754wss35x61vbhpgry6gc5sj5ipva9kqhsp3d9a8"; })
+  (fetchNuGet { pname = "Fake.Core.String"; version = "5.23.1"; sha256 = "1znk6wzizkbslx8hfbpbr63sg05ilr9nr3vvxirxkmh37gkpwyb7"; })
+  (fetchNuGet { pname = "Fake.Core.Target"; version = "5.23.1"; sha256 = "1l51jlqab23yx3nfh46m3xblaqsfdh9sxsn457plxsf705vj9rgj"; })
+  (fetchNuGet { pname = "Fake.Core.Tasks"; version = "5.23.1"; sha256 = "1r6b6jma13z2075xpd69nai1wdzgkgbz6vnqbwr476gvlcfy6msl"; })
+  (fetchNuGet { pname = "Fake.Core.Trace"; version = "5.23.1"; sha256 = "0ji56f3w2g50rvq57xqcg7b3dcqgba71p9xihq06329bisk4pxca"; })
+  (fetchNuGet { pname = "Fake.Core.UserInput"; version = "5.23.1"; sha256 = "1anrmaxipyjbprwarjy57k5f4cghxwr7zb0cb4d61vr7njmdg9y2"; })
+  (fetchNuGet { pname = "Fake.Core.Xml"; version = "5.23.1"; sha256 = "1z7gmk3d44pgrzpna27v98wznia479s73f9234zxgrirm8jib5dw"; })
+  (fetchNuGet { pname = "Fake.DotNet.AssemblyInfoFile"; version = "5.23.1"; sha256 = "0ysmq83n1wilgl56z5bsrcqipl1i6l63rp807by7pwm2l0jjlazp"; })
+  (fetchNuGet { pname = "Fake.DotNet.Cli"; version = "5.23.1"; sha256 = "0m2d725rns19mvgmmcwwq641pygrg7xys8k89z0z721r9p1yfp1z"; })
+  (fetchNuGet { pname = "Fake.DotNet.MSBuild"; version = "5.23.1"; sha256 = "0j73cdxk4yzwkx7yk3yn3c7hzf6k60b6zmsjxipdv0h34cljinpp"; })
+  (fetchNuGet { pname = "Fake.DotNet.NuGet"; version = "5.23.1"; sha256 = "1mx0hip9pgdw246j80kcrj1m93gy49hlr7wn62cwh4nza845b9fk"; })
+  (fetchNuGet { pname = "Fake.DotNet.Paket"; version = "5.23.1"; sha256 = "15c58kpzdxifry9qdvch5aif6x3lildjdvb57gnlmxx4gwv1xcdq"; })
+  (fetchNuGet { pname = "Fake.IO.FileSystem"; version = "5.23.1"; sha256 = "0lgxbms4kg0ipfjclfpx9azqgg4rbl3jj97n1mmdzmgcpfhgfwwq"; })
+  (fetchNuGet { pname = "Fake.IO.Zip"; version = "5.23.1"; sha256 = "0iac86jlxb5bwgiich3zzvr7bz5aw8xq53ly263mwxhv9lrsd815"; })
+  (fetchNuGet { pname = "Fake.Net.Http"; version = "5.23.1"; sha256 = "1g0dpxi5b78qh7myz09pmjxzb0iblj3rqx5mpaammbppbbazvzdk"; })
+  (fetchNuGet { pname = "Fake.Tools.Git"; version = "5.23.1"; sha256 = "0cg1sbp7zl1d18cjhbs94ix8580hr6gyaxjw17q246lbaj9bfg8l"; })
+  (fetchNuGet { pname = "fantomas"; version = "6.2.3"; sha256 = "1x91w4sk402b6ah1y0r0c9rxwbbnjp4x4mr7x4n5zvjhiv97b282"; })
+  (fetchNuGet { pname = "Fantomas.Client"; version = "0.9.0"; sha256 = "1zixwk61fyk7y9q6f8266kwxi6byr8fmyp1lf57qhbbvhq2waj9d"; })
+  (fetchNuGet { pname = "Fantomas.Core"; version = "6.2.0"; sha256 = "07yl2hr06zk1nl66scm24di3nf1zbrnd6329prwirnv370rz4q92"; })
+  (fetchNuGet { pname = "Fantomas.FCS"; version = "6.2.0"; sha256 = "1hhsa7hbxsm2d8ap4sqzwlzjmf4wsgg74i731rprr0nshjvd8ic7"; })
+  (fetchNuGet { pname = "FParsec"; version = "1.1.1"; sha256 = "01s3zrxl9kfx0264wy0m555pfx0s0z165n4fvpgx63jlqwbd8m04"; })
+  (fetchNuGet { pname = "fsharp-analyzers"; version = "0.23.0"; sha256 = "115dqscxx02dss9s1shl6c1x6zc2dgrk9w8bj48cyjnwm79icqq9"; })
+  (fetchNuGet { pname = "FSharp.Analyzers.Build"; version = "0.3.0"; sha256 = "1c9ijc9lvyw4lfnd3m9260c8lwnh6ca91zslr29dpn525z9zgdif"; })
+  (fetchNuGet { pname = "FSharp.Analyzers.SDK"; version = "0.23.0"; sha256 = "0q4v03wkwfaf3hacy6jy0lyvmjkrsx5a9p000hx7bw5997vqzx8f"; })
+  (fetchNuGet { pname = "FSharp.Compiler.Service"; version = "43.8.100"; sha256 = "0lk8pqasbxkqp37fsnnidw8556l1k6s8w9qhq51w8zfnp7nw1xwm"; })
+  (fetchNuGet { pname = "FSharp.Control.AsyncSeq"; version = "3.2.1"; sha256 = "02c8d8snd529rrcj6lsmab3wdq2sjh90j8sanx50ck9acfn9jd3v"; })
+  (fetchNuGet { pname = "FSharp.Control.Reactive"; version = "5.0.5"; sha256 = "0ahvd3s5wfv610ks3b00ya5r71cqm34ap8ywx0pyrzhlsbk1ybqg"; })
+  (fetchNuGet { pname = "FSharp.Core"; version = "6.0.5"; sha256 = "07929km96znf6xnqzmxdk3h48kz2rg9msf4c5xxmnjqr0ikfb8c6"; })
+  (fetchNuGet { pname = "FSharp.Core"; version = "8.0.100"; sha256 = "06z3vg8yj7i83x6gmnzl2lka1bp4hzc07h6mrydpilxswnmy2a0l"; })
+  (fetchNuGet { pname = "FSharp.Data.Adaptive"; version = "1.2.13"; sha256 = "16l1h718h110yl2q83hzy1rpalyqlicdaxln7g0bf8kzq9b2v6rz"; })
+  (fetchNuGet { pname = "FSharp.Formatting"; version = "14.0.1"; sha256 = "0sx4jlxzmrdcmc937arc9v0r90qkpf2gd1m9ngkpg88qvqcx4xsa"; })
+  (fetchNuGet { pname = "FSharp.UMX"; version = "1.1.0"; sha256 = "1rzf5m38fcpphfhcv359plk2sval16kj00gdfwzpm9gi8wjw8j8k"; })
+  (fetchNuGet { pname = "FSharpLint.Core"; version = "0.21.2"; sha256 = "10wzcgrzmdpj00wb84yaclp5pgwk9h05cbrcwf99h81sjgkmczh0"; })
+  (fetchNuGet { pname = "FSharpx.Async"; version = "1.14.1"; sha256 = "1m0f4pv8sdm7iy7zbrmywc3j20pb6akld9y7yd5xvw26kbz5ndkc"; })
+  (fetchNuGet { pname = "FsToolkit.ErrorHandling"; version = "4.4.0"; sha256 = "0a5mii50a025ijmpvzh10zdqrgj7r87b75rswjmq6y03kk703iay"; })
+  (fetchNuGet { pname = "FsToolkit.ErrorHandling.TaskResult"; version = "4.4.0"; sha256 = "1qgw4mivfsdai30ldan7lqj8hhq6gbbdq4qdl63hm88q60bh34rq"; })
+  (fetchNuGet { pname = "Gee.External.Capstone"; version = "2.3.0"; sha256 = "119yll2zpc9m176i17lcan31zcvww47zsvw573vbwb0jbzy17mn1"; })
+  (fetchNuGet { pname = "GitHubActionsTestLogger"; version = "2.0.1"; sha256 = "155d1fmnxlq7p7wk4v74b8v8h36nq0i6bq1vhdjf8sbq7f95fj0f"; })
+  (fetchNuGet { pname = "Google.Protobuf"; version = "3.22.0"; sha256 = "1wjxxlqdrjjb0f3py8sbgsivqms8d22m7xk1zx68gfmyih671in7"; })
+  (fetchNuGet { pname = "Grpc"; version = "2.46.6"; sha256 = "1zj2j7h97qdns14z3ilfgqx3kir9p5a05kwsvyz3hpnx2z6j3ysj"; })
+  (fetchNuGet { pname = "Grpc.Core"; version = "2.46.6"; sha256 = "1lyy2l8xxjnfvrf9jxdffms70qqjlz41s0k3y53w637n5qif7hgz"; })
+  (fetchNuGet { pname = "Grpc.Core.Api"; version = "2.51.0"; sha256 = "1bz9dqkxwwjkdsh9lmqgc0ysdhysjs45xjcmffbs3hffnzd8jhrz"; })
+  (fetchNuGet { pname = "Grpc.Net.Client"; version = "2.51.0"; sha256 = "1l4qaa51i8pqjh6kz9w3zv9iqxxvk2gdd3yxg5w54904nl0jsanh"; })
+  (fetchNuGet { pname = "Grpc.Net.Common"; version = "2.51.0"; sha256 = "1b7iwf5qk4c449mi5lsnf6j99pwwrj79y8zkinzf5j2rslc97r0z"; })
+  (fetchNuGet { pname = "Humanizer.Core"; version = "2.14.1"; sha256 = "1ai7hgr0qwd7xlqfd92immddyi41j3ag91h3594yzfsgsy6yhyqi"; })
+  (fetchNuGet { pname = "Iced"; version = "1.17.0"; sha256 = "1999xavgpy2h83rh4indiq5mx5l509swqdi1raxj3ab6zvk49zpb"; })
+  (fetchNuGet { pname = "IcedTasks"; version = "0.9.2"; sha256 = "1i4sg398qvxyrprca9jssn4lccwn67zndbg1a3a37cmsms5rlbvj"; })
+  (fetchNuGet { pname = "ICSharpCode.Decompiler"; version = "7.2.1.6856"; sha256 = "19z68rgzl93lh1h8anbgzw119mhvcgr9nh5q2nxk6qihl2mx97ba"; })
+  (fetchNuGet { pname = "Ionide.Analyzers"; version = "0.7.0"; sha256 = "10s4wznblcdazrvghf64y59j1w4bvwar8iznjl0rncbka09ba4q5"; })
+  (fetchNuGet { pname = "Ionide.KeepAChangelog.Tasks"; version = "0.1.8"; sha256 = "066zla2rp1sal6by3h3sg6ibpkk52kbhn30bzk58l6ym7q1kqa6b"; })
+  (fetchNuGet { pname = "Ionide.LanguageServerProtocol"; version = "0.4.20"; sha256 = "08ym8lljnkqk638f2djw3c0p6h0nzxycifz1dqhzzd2my5ss46zf"; })
+  (fetchNuGet { pname = "Ionide.ProjInfo"; version = "0.62.0"; sha256 = "1da6hhca9vd6hxbz9jmwxwx2pc7d5ayd41sp6mzzmbk4n3jk32q2"; })
+  (fetchNuGet { pname = "Ionide.ProjInfo.FCS"; version = "0.62.0"; sha256 = "1mkw4b1sawv1p0c4a1fidkw02bh9iik7fi80ffgqi0msc3ql8lmg"; })
+  (fetchNuGet { pname = "Ionide.ProjInfo.ProjectSystem"; version = "0.62.0"; sha256 = "0kj9h5gvvrl720kg5jylx8w1jjmcci7bdhabr57sbq31vbgav74d"; })
+  (fetchNuGet { pname = "Ionide.ProjInfo.Sln"; version = "0.62.0"; sha256 = "05yxz0hhpi1b0kdyzbjbb0klmpbaq8i5d0s4y59wr2qbz2318xpa"; })
+  (fetchNuGet { pname = "LinkDotNet.StringBuilder"; version = "1.18.0"; sha256 = "0lgh4yjnim9qbqkmkgpx5fi2lha1cgcdbddvbsiw9jzp18fndxly"; })
+  (fetchNuGet { pname = "McMaster.NETCore.Plugins"; version = "1.4.0"; sha256 = "1k2qz0qnf2b1kfwbzcynivy93jm7dcwl866d0fl7qlgq5vql7niy"; })
+  (fetchNuGet { pname = "MessagePack"; version = "2.5.108"; sha256 = "0cnaz28lhrdmavnxjkakl9q8p2yv8mricvp1b0wxdfnz8v41gwzs"; })
+  (fetchNuGet { pname = "MessagePack.Annotations"; version = "2.5.108"; sha256 = "0nb1fx8dwl7304kw0bc375bvlhb7pg351l4cl3vqqd7d8zqjwx5v"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.App.Ref"; version = "6.0.26"; sha256 = "1d8nkz24vsm0iy2xm8y5ak2q1w1p99dxyz0y26acs6sfk2na0vm6"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.App.Runtime.linux-arm64"; version = "6.0.26"; sha256 = "1za8lc52m4z54d68wd64c2nhzy05g3gx171k5cdlx73fbymiys9z"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.App.Runtime.linux-x64"; version = "6.0.26"; sha256 = "1zpbmz6z8758gwywzg0bac8kx9x39sxxc9j4a4r2jl74l9ssw4vm"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.App.Runtime.osx-arm64"; version = "6.0.26"; sha256 = "1i8ydlwjzk7j0mzvn0rpljxfp1h50zwaqalnyvfxai1fwgigzgw5"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.App.Runtime.osx-x64"; version = "6.0.26"; sha256 = "02src68hd3213sd1a2ms1my7i92knfmdxclvv90il9cky2zsq8kw"; })
+  (fetchNuGet { pname = "Microsoft.Bcl.AsyncInterfaces"; version = "7.0.0"; sha256 = "1waiggh3g1cclc81gmjrqbh128kwfjky3z79ma4bd2ms9pa3gvfm"; })
+  (fetchNuGet { pname = "Microsoft.Bcl.HashCode"; version = "1.1.0"; sha256 = "1ggsadahlp76zcn1plapszd5v5ja8rh479fwrahqd3knql4dfnr0"; })
+  (fetchNuGet { pname = "Microsoft.Build"; version = "17.2.0"; sha256 = "09hs74nr0kv83wc1way9x7vq3nmxbr2s4vdy99hx78kj25pylcr7"; })
+  (fetchNuGet { pname = "Microsoft.Build"; version = "17.4.0"; sha256 = "0j8rqwl8h2hh4yl4bvsijm0rl8356a8vfvdqj4jk5blmvfcfs7b4"; })
+  (fetchNuGet { pname = "Microsoft.Build.Framework"; version = "17.6.3"; sha256 = "0gj182wih2rr90c045a7x1cy04szv83zr21c725h70s7dcshdvn6"; })
+  (fetchNuGet { pname = "Microsoft.Build.Locator"; version = "1.5.3"; sha256 = "0km0zafgbm4qjg0azv40aanfn38fplkz057gqhyd76h4zgvwpxg4"; })
+  (fetchNuGet { pname = "Microsoft.Build.Tasks.Core"; version = "17.4.0"; sha256 = "12d3jg8qpf4k5gknxv728270faiwzb0qb6m8cfjwsqy990v54z2c"; })
+  (fetchNuGet { pname = "Microsoft.Build.Tasks.Git"; version = "1.1.1"; sha256 = "1bb5p4zlnfn88skkvymxfsn0jybqncl4356hwnic9jxdq2d4fz1w"; })
+  (fetchNuGet { pname = "Microsoft.Build.Utilities.Core"; version = "17.4.0"; sha256 = "1lzswq96gi3si61n6i3ddla05gpn8myhn4kkfc0wx2bw7y6308y7"; })
+  (fetchNuGet { pname = "Microsoft.Build.Utilities.Core"; version = "17.6.3"; sha256 = "1fxhv26rhx5mcrz08k0n3vlsy8wxpvsds44a32bm61wazfqcylhn"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis"; version = "4.5.0"; sha256 = "1v1lk33wvrqh0k1ymyilfs3ic7ag40qkldqszv1pvlf2cg5mcqfx"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.Analyzers"; version = "3.3.3"; sha256 = "09m4cpry8ivm9ga1abrxmvw16sslxhy2k5sl14zckhqb1j164im6"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.Common"; version = "4.5.0"; sha256 = "0hjzca7v3qq4wqzi9chgxzycbaysnjgj28ps20695x61sia6i3da"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.CSharp"; version = "4.5.0"; sha256 = "1l6v0ii5lapmfnfpjwi3j5bwlx8v9nvyani5pwvqzdfqsd5m7mp5"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.CSharp.Workspaces"; version = "4.5.0"; sha256 = "0skg5a8i4fq6cndxcjwciai808p0zpqz9kbvck94mcywfzassv1a"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.VisualBasic"; version = "4.5.0"; sha256 = "0jx8c3fg7m0k98b1xhcvl212cz97x7g6dfni6mwwqlp1zvzacdsb"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.VisualBasic.Workspaces"; version = "4.5.0"; sha256 = "1wiizv47fxzy22dg2vy746nyq6l10zhh3avw8jzznlyasm0qnj47"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.Workspaces.Common"; version = "4.5.0"; sha256 = "1wjwsrnn5frahqciwaxsgalv80fs6xhqy6kcqy7hcsh7jrfc1kjq"; })
+  (fetchNuGet { pname = "Microsoft.CodeCoverage"; version = "17.4.1"; sha256 = "0bf68gq6mc6kzri4zi8ydc0xrazqwqg38bhbpjpj90zmqc28kari"; })
+  (fetchNuGet { pname = "Microsoft.Diagnostics.NETCore.Client"; version = "0.2.251802"; sha256 = "0h4mc6gx95l1mwcxhj7m7drsfgbhp0ssr6l8wr7k42y0nypgi4gm"; })
+  (fetchNuGet { pname = "Microsoft.Diagnostics.Runtime"; version = "2.2.332302"; sha256 = "1n64ya4fq6305xv8ybk7f22v0f39rylkqap7n9blhr1h98mp27z5"; })
+  (fetchNuGet { pname = "Microsoft.Diagnostics.Tracing.TraceEvent"; version = "3.0.2"; sha256 = "14swfz2myqv4zxznf5450b3485q629pk0zc483yszvq0956a4yq4"; })
+  (fetchNuGet { pname = "Microsoft.DotNet.PlatformAbstractions"; version = "3.1.6"; sha256 = "0b9myd7gqbpaw9pkd2bx45jhik9mwj0f1ss57sk2cxmag2lkdws5"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Caching.Abstractions"; version = "6.0.0"; sha256 = "0qn30d3pg4rx1x2k525jj4x5g1fxm2v5m0ksz2dmk1gmqalpask8"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Caching.Memory"; version = "6.0.1"; sha256 = "0ra0ldbg09r40jzvfqhpb3h42h80nafvka9hg51dja32k3mxn5gk"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Configuration"; version = "6.0.1"; sha256 = "0wg6ilgm0vkhgh8jkvpna7kqiix47zpcgzdvh6c237bi8h0lz7mz"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Configuration.Abstractions"; version = "6.0.0"; sha256 = "0w6wwxv12nbc3sghvr68847wc9skkdgsicrz3fx4chgng1i3xy0j"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Configuration.Binder"; version = "6.0.0"; sha256 = "15hb2rbzgri1fq8wpj4ll7czm3rxqzszs02phnhjnncp90m5rmpc"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.DependencyInjection"; version = "6.0.1"; sha256 = "0kl5ypidmzllyxb91gwy3z950dc416p1y8wikzbdbp0l7aaaxq2p"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.DependencyInjection.Abstractions"; version = "6.0.0"; sha256 = "1vi67fw7q99gj7jd64gnnfr4d2c0ijpva7g9prps48ja6g91x6a9"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.DependencyModel"; version = "6.0.0"; sha256 = "08c4fh1n8vsish1vh7h73mva34g0as4ph29s4lvps7kmjb4z64nl"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Logging"; version = "6.0.0"; sha256 = "0fd9jii3y3irfcwlsiww1y9npjgabzarh33rn566wpcz24lijszi"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Logging.Abstractions"; version = "6.0.2"; sha256 = "1wv54f3p3r2zj1pr9a6z8zqrh2ihm6v6qcw2pjwis1lcc0qb472m"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Logging.Configuration"; version = "6.0.0"; sha256 = "0plx785hk61arjxf0m3ywy9hl5nii25raj4523n3ql7mmv6hxqr1"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Options"; version = "6.0.0"; sha256 = "008pnk2p50i594ahz308v81a41mbjz9mwcarqhmrjpl2d20c868g"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Options.ConfigurationExtensions"; version = "6.0.0"; sha256 = "1k6q91vrhq1r74l4skibn7wzxzww9l74ibxb2i8gg4q6fzbiivba"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Primitives"; version = "6.0.0"; sha256 = "1kjiw6s4yfz9gm7mx3wkhp06ghnbs95icj9hi505shz9rjrg42q2"; })
+  (fetchNuGet { pname = "Microsoft.NET.StringTools"; version = "17.4.0"; sha256 = "1smx30nq22plrn2mw4wb5vfgxk6hyx12b60c4wabmpnr81lq3nzv"; })
+  (fetchNuGet { pname = "Microsoft.NET.StringTools"; version = "17.6.3"; sha256 = "0g5jdg0jp844a2ygwlm04igsxkrihqcq2rpmfx722nrv3vrk0r0z"; })
+  (fetchNuGet { pname = "Microsoft.NET.Test.Sdk"; version = "17.4.1"; sha256 = "02p1j9fncd4fb2hyp51kw49d0dz30vvazhzk24c9f5ccc00ijpra"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.App.Host.linux-arm64"; version = "6.0.26"; sha256 = "19y6c6v20bgf7x7rrh4rx9y7s5fy8vp5m4j9b6gi1wp4rpb5mza4"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.App.Host.linux-x64"; version = "6.0.26"; sha256 = "0p7hhidaa3mnyiwnsijwy8578v843x8hh99255s69qwwyld6falv"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.App.Host.osx-arm64"; version = "6.0.26"; sha256 = "1mq11xsv9g1vsasp6k80y7xlvwi9hrpk5dgm773fvy8538s01gfv"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.App.Host.osx-x64"; version = "6.0.26"; sha256 = "1chac9b4424ihrrnlzvc7qz6j4ymfjyv4kzyazzzw19yhymdkh2s"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.App.Ref"; version = "6.0.26"; sha256 = "12gb52dhg5h9hgnyqh1zgj2w46paxv2pfh33pphl9ajhrdr7hlsb"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.App.Runtime.linux-arm64"; version = "6.0.26"; sha256 = "164hfrwqz5dxcbb441lridk4mzcqmarb0b7ckgvqhsvpawyjw88v"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.App.Runtime.linux-x64"; version = "6.0.26"; sha256 = "0islayddpnflviqpbq4djc4f3v9nhsa2y76k5x6il3csq5vdw2hq"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.App.Runtime.osx-arm64"; version = "6.0.26"; sha256 = "1acn5zw1pxzmcg3c0pbf9hal36fbdh9mvbsiwra7simrk7hzqpdc"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.App.Runtime.osx-x64"; version = "6.0.26"; sha256 = "00f9l9dkdz0zv5csaw8fkm6s8ckrj5n9k3ygz12daa22l3bcn6ii"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "1.1.1"; sha256 = "164wycgng4mi9zqi2pnsf1pq6gccbqvw6ib916mqizgjmd8f44pj"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "7.0.4"; sha256 = "0afmivk3m0hmwsiqnl87frzi7g57aiv5fwnjds0icl66djpb6zsm"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Targets"; version = "1.1.3"; sha256 = "05smkcyxir59rgrmp7d6327vvrlacdgldfxhmyr1azclvga1zfsq"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Targets"; version = "5.0.0"; sha256 = "0z3qyv7qal5irvabc8lmkh58zsl42mrzd1i0sssvzhv4q4kl3cg6"; })
+  (fetchNuGet { pname = "Microsoft.NETFramework.ReferenceAssemblies"; version = "1.0.3"; sha256 = "0hc4d4d4358g5192mf8faijwk0bpf9pjwcfd3h85sr67j0zhj6hl"; })
+  (fetchNuGet { pname = "Microsoft.NETFramework.ReferenceAssemblies.net461"; version = "1.0.3"; sha256 = "1jcc552rwpaybd2ql0b31063ayj70sd3k6qqpf850xmqbyg2hlmx"; })
+  (fetchNuGet { pname = "Microsoft.SourceLink.AzureRepos.Git"; version = "1.1.1"; sha256 = "059c8i2vybprn63sw2jr7xma4yyl2syx6hzygfdpr0zd5jlgy9rz"; })
+  (fetchNuGet { pname = "Microsoft.SourceLink.Bitbucket.Git"; version = "1.1.1"; sha256 = "1p7di7lihraqisd4yfslvhpwlb9zf2casssjhyad1a0hcqmgw7n9"; })
+  (fetchNuGet { pname = "Microsoft.SourceLink.Common"; version = "1.1.1"; sha256 = "0xkdqs7az2cprar7jzjlgjpd64l6f8ixcmwmpkdm03fyb4s5m0bg"; })
+  (fetchNuGet { pname = "Microsoft.SourceLink.GitHub"; version = "1.1.1"; sha256 = "099y35f2npvva3jk1zp8hn0vb9pwm2l0ivjasdly6y2idv53s5yy"; })
+  (fetchNuGet { pname = "Microsoft.SourceLink.GitLab"; version = "1.1.1"; sha256 = "0fm50cc05fmkz77xnl6qvawkx43asdklzxhz65jnbkjp633zvx41"; })
+  (fetchNuGet { pname = "Microsoft.TestPlatform.ObjectModel"; version = "17.4.1"; sha256 = "0s68wf9yphm4hni9p6kwfk0mjld85f4hkrs93qbk5lzf6vv3kba1"; })
+  (fetchNuGet { pname = "Microsoft.TestPlatform.TestHost"; version = "17.4.1"; sha256 = "1n9ilq8n5rhyxcri06njkxb0h2818dbmzddwd2rrvav91647m2s4"; })
+  (fetchNuGet { pname = "Microsoft.VisualStudio.Setup.Configuration.Interop"; version = "3.6.2115"; sha256 = "0924lvb8i1y1majjph1hczi8p72mxlvkk3b7apdqgv5hmbn9sdxq"; })
+  (fetchNuGet { pname = "Microsoft.VisualStudio.Threading"; version = "17.6.40"; sha256 = "1iv67ndrvls7qa3wrh7mnswqbhx8ggr0w1hi7md1grfm4f0nqyz4"; })
+  (fetchNuGet { pname = "Microsoft.VisualStudio.Threading.Analyzers"; version = "17.6.40"; sha256 = "0ba9r9y3jsx3s3j190mv4gg47ibyl44s58whwvas9c64hhs4n22s"; })
+  (fetchNuGet { pname = "Microsoft.VisualStudio.Validation"; version = "17.6.11"; sha256 = "0qx4nzsx28galgzzjkgf541254d433dgxcaf7y2y1qyyxgsfjj1f"; })
+  (fetchNuGet { pname = "Microsoft.Win32.Registry"; version = "5.0.0"; sha256 = "102hvhq2gmlcbq8y2cb7hdr2dnmjzfp2k3asr1ycwrfacwyaak7n"; })
+  (fetchNuGet { pname = "Microsoft.Win32.SystemEvents"; version = "7.0.0"; sha256 = "1bh77misznh19m1swqm3dsbji499b8xh9gk6w74sgbkarf6ni8lb"; })
+  (fetchNuGet { pname = "Mono.Cecil"; version = "0.11.4"; sha256 = "1yxa7mh432s7g7p9r7scqxvxjk5ypwc567qdbf0gmk8fbf0d3f8y"; })
+  (fetchNuGet { pname = "Mono.Posix.NETStandard"; version = "1.0.0"; sha256 = "0xlja36hwpjm837haq15mjh2prcf68lyrmn72nvgpz8qnf9vappw"; })
+  (fetchNuGet { pname = "MSBuild.StructuredLogger"; version = "2.1.844"; sha256 = "0fp2gng4gk63ac0wz231zwbnpy6a35mq04gy8fc81gra6px4sy5v"; })
+  (fetchNuGet { pname = "Nerdbank.Streams"; version = "2.10.66"; sha256 = "04p4vd2v3mj1g315jj0fcb9ajwdr6clnbnl80mn6nyj3wmjb56nz"; })
+  (fetchNuGet { pname = "Newtonsoft.Json"; version = "13.0.1"; sha256 = "0fijg0w6iwap8gvzyjnndds0q4b8anwxxvik7y8vgq97dram4srb"; })
+  (fetchNuGet { pname = "Newtonsoft.Json"; version = "13.0.2"; sha256 = "1p9splg1min274dpz7xdfgzrwkyfd3xlkygwpr1xgjvvyjvs6b0i"; })
+  (fetchNuGet { pname = "NuGet.Common"; version = "6.7.0"; sha256 = "0h6k5ywqmnl3mn30d6hhvzzk0344f0cy3ks2rxvjfas1822hbpz9"; })
+  (fetchNuGet { pname = "NuGet.Configuration"; version = "6.7.0"; sha256 = "0bskqxz2b4z1f9m8kak6my9l08ngd8r0cnd7ac1h6pbf39iwfq0a"; })
+  (fetchNuGet { pname = "NuGet.Frameworks"; version = "6.3.0"; sha256 = "05mqbfgkif9qa5hg1sjmcvx69ifdhiqs2xjplqjrvrj9ybmd5i0c"; })
+  (fetchNuGet { pname = "NuGet.Frameworks"; version = "6.7.0"; sha256 = "02sg1qa00dq4hfrj4zrrlccpbrmr1ymac8vcp48q9ffsx5wx6895"; })
+  (fetchNuGet { pname = "NuGet.Packaging"; version = "6.7.0"; sha256 = "0q1q21cl6987f3q73g9549h637gm2qal3x1wy81qbag4aaxfqpb0"; })
+  (fetchNuGet { pname = "NuGet.Protocol"; version = "6.7.0"; sha256 = "1v5ibnq2mp801vw68zyj169hkj3xm7h55824i33n1jxxj2vs3vbk"; })
+  (fetchNuGet { pname = "NuGet.Versioning"; version = "6.7.0"; sha256 = "1k9dzgm3a9ahalykdvjnnd47940py8lqkfrjd1k9lkiczn1bkqmi"; })
+  (fetchNuGet { pname = "Octokit"; version = "0.48.0"; sha256 = "17ria1shx04rb6knbaswpqndmwam6v3r3lsfsd486q584798ccn8"; })
+  (fetchNuGet { pname = "OpenTelemetry"; version = "1.3.2"; sha256 = "1v9ipc75ipwjhhz4mkyjygw85i6ba5flcbhyspmf90vfi2nk7b79"; })
+  (fetchNuGet { pname = "OpenTelemetry.Api"; version = "1.3.2"; sha256 = "0fgl99k6nm3n47vv9mx6y36pnljj2b5g641cs2zsw6l86n57qwv1"; })
+  (fetchNuGet { pname = "OpenTelemetry.Exporter.OpenTelemetryProtocol"; version = "1.3.2"; sha256 = "14p6rn68mqrch3ani17vwyl4ggjz680nxkw1nf65xmf1ljlkb4iq"; })
+  (fetchNuGet { pname = "Paket"; version = "8.0.0-alpha002"; sha256 = "1c2kdndyb04plgwvqp78224zwk26dkicjy94pqh7shc9ifskrvsb"; })
+  (fetchNuGet { pname = "Perfolizer"; version = "0.2.1"; sha256 = "012aqqi3y3nfikqmn26yajpwd52c04zlzp0p91iyslw7mf26qncy"; })
+  (fetchNuGet { pname = "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "0rwpqngkqiapqc5c2cpkj7idhngrgss5qpnqg0yh40mbyflcxf8i"; })
+  (fetchNuGet { pname = "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "1n06gxwlinhs0w7s8a94r1q3lwqzvynxwd3mp10ws9bg6gck8n4r"; })
+  (fetchNuGet { pname = "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "0404wqrc7f2yc0wxv71y3nnybvqx8v4j9d47hlscxy759a525mc3"; })
+  (fetchNuGet { pname = "runtime.native.System"; version = "4.3.0"; sha256 = "15hgf6zaq9b8br2wi1i3x0zvmk410nlmsmva9p0bbg73v6hml5k4"; })
+  (fetchNuGet { pname = "runtime.native.System.Net.Http"; version = "4.3.0"; sha256 = "1n6rgz5132lcibbch1qlf0g9jk60r0kqv087hxc0lisy50zpm7kk"; })
+  (fetchNuGet { pname = "runtime.native.System.Security.Cryptography.Apple"; version = "4.3.0"; sha256 = "1b61p6gw1m02cc1ry996fl49liiwky6181dzr873g9ds92zl326q"; })
+  (fetchNuGet { pname = "runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "0zy5r25jppz48i2bkg8b9lfig24xixg6nm3xyr1379zdnqnpm8f6"; })
+  (fetchNuGet { pname = "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "096ch4n4s8k82xga80lfmpimpzahd2ip1mgwdqgar0ywbbl6x438"; })
+  (fetchNuGet { pname = "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "1dm8fifl7rf1gy7lnwln78ch4rw54g0pl5g1c189vawavll7p6rj"; })
+  (fetchNuGet { pname = "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple"; version = "4.3.0"; sha256 = "10yc8jdrwgcl44b4g93f1ds76b176bajd3zqi2faf5rvh1vy9smi"; })
+  (fetchNuGet { pname = "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "1m9z1k9kzva9n9kwinqxl97x2vgl79qhqjlv17k9s2ymcyv2bwr6"; })
+  (fetchNuGet { pname = "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "1cpx56mcfxz7cpn57wvj18sjisvzq8b5vd9rw16ihd2i6mcp3wa1"; })
+  (fetchNuGet { pname = "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "15gsm1a8jdmgmf8j5v1slfz8ks124nfdhk2vxs2rw3asrxalg8hi"; })
+  (fetchNuGet { pname = "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "0q0n5q1r1wnqmr5i5idsrd9ywl33k0js4pngkwq9p368mbxp8x1w"; })
+  (fetchNuGet { pname = "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "1x0g58pbpjrmj2x2qw17rdwwnrcl0wvim2hdwz48lixvwvp22n9c"; })
+  (fetchNuGet { pname = "SemanticVersioning"; version = "2.0.2"; sha256 = "025l5akirkd9g7d5g5wydvkn1wabglcyvbfshkmly7j3r0k596vp"; })
+  (fetchNuGet { pname = "Serilog"; version = "2.11.0"; sha256 = "1nvd3hm615xlcdmw1i7llkd3xvwvpv66c4y4s28npv47v3yci3lh"; })
+  (fetchNuGet { pname = "Serilog.Sinks.Async"; version = "1.5.0"; sha256 = "0bcb3n6lmg5wfj806mziybfmbb8gyiszrivs3swf0msy8w505gyg"; })
+  (fetchNuGet { pname = "Serilog.Sinks.Console"; version = "4.0.1"; sha256 = "080vh9kcyn9lx4j7p34146kp9byvhqlaz5jn9wzx70ql9cwd0hlz"; })
+  (fetchNuGet { pname = "Serilog.Sinks.File"; version = "5.0.0"; sha256 = "097rngmgcrdfy7jy8j7dq3xaq2qky8ijwg0ws6bfv5lx0f3vvb0q"; })
+  (fetchNuGet { pname = "StreamJsonRpc"; version = "2.16.36"; sha256 = "1bwbbzd8rg1mjsig046ihs53gn8ywf5j9mjfy32axfziisqr1c2w"; })
+  (fetchNuGet { pname = "System.Buffers"; version = "4.5.1"; sha256 = "04kb1mdrlcixj9zh1xdi5as0k0qi8byr5mi3p3jcxx72qz93s2y3"; })
+  (fetchNuGet { pname = "System.CodeDom"; version = "6.0.0"; sha256 = "1i55cxp8ycc03dmxx4n22qi6jkwfl23cgffb95izq7bjar8avxxq"; })
+  (fetchNuGet { pname = "System.Collections"; version = "4.3.0"; sha256 = "19r4y64dqyrq6k4706dnyhhw7fs24kpp3awak7whzss39dakpxk9"; })
+  (fetchNuGet { pname = "System.Collections.Concurrent"; version = "4.3.0"; sha256 = "0wi10md9aq33jrkh2c24wr2n9hrpyamsdhsxdcnf43b7y86kkii8"; })
+  (fetchNuGet { pname = "System.Collections.Immutable"; version = "7.0.0"; sha256 = "1n9122cy6v3qhsisc9lzwa1m1j62b8pi2678nsmnlyvfpk0zdagm"; })
+  (fetchNuGet { pname = "System.CommandLine"; version = "2.0.0-beta4.22272.1"; sha256 = "1iy5hwwgvx911g3yq65p4zsgpy08w4qz9j3h0igcf7yci44vw8yd"; })
+  (fetchNuGet { pname = "System.ComponentModel.Annotations"; version = "5.0.0"; sha256 = "021h7x98lblq9avm1bgpa4i31c2kgsa7zn4sqhxf39g087ar756j"; })
+  (fetchNuGet { pname = "System.Composition"; version = "6.0.0"; sha256 = "1p7hysns39cc24af6dwd4m48bqjsrr3clvi4aws152mh2fgyg50z"; })
+  (fetchNuGet { pname = "System.Composition.AttributedModel"; version = "6.0.0"; sha256 = "1mqrblb0l65hw39d0hnspqcv85didpn4wbiwhfgj4784wzqx2w6k"; })
+  (fetchNuGet { pname = "System.Composition.Convention"; version = "6.0.0"; sha256 = "02km3yb94p1c4s7liyhkmda0g71zm1rc8ijsfmy4bnlkq15xjw3b"; })
+  (fetchNuGet { pname = "System.Composition.Hosting"; version = "6.0.0"; sha256 = "0big5nk8c44rxp6cfykhk7rxvn2cgwa99w6c3v2a36adc3lj36ky"; })
+  (fetchNuGet { pname = "System.Composition.Runtime"; version = "6.0.0"; sha256 = "0vq5ik63yii1784gsa2f2kx9w6xllmm8b8rk0arid1jqdj1nyrlw"; })
+  (fetchNuGet { pname = "System.Composition.TypedParts"; version = "6.0.0"; sha256 = "0y9pq3y60nyrpfy51f576a0qjjdh61mcv8vnik32pm4bz56h9q72"; })
+  (fetchNuGet { pname = "System.Configuration.ConfigurationManager"; version = "6.0.0"; sha256 = "0sqapr697jbb4ljkq46msg0xx1qpmc31ivva6llyz2wzq3mpmxbw"; })
+  (fetchNuGet { pname = "System.Configuration.ConfigurationManager"; version = "7.0.0"; sha256 = "149d9kmakzkbw69cip1ny0wjlgcvnhrr7vz5pavpsip36k2mw02a"; })
+  (fetchNuGet { pname = "System.Diagnostics.Debug"; version = "4.3.0"; sha256 = "00yjlf19wjydyr6cfviaph3vsjzg3d5nvnya26i2fvfg53sknh3y"; })
+  (fetchNuGet { pname = "System.Diagnostics.DiagnosticSource"; version = "7.0.2"; sha256 = "1h97ikph775gya93qsjjaka87qcygbyh1064rh1hnfcnp5xv0ipi"; })
+  (fetchNuGet { pname = "System.Diagnostics.EventLog"; version = "7.0.0"; sha256 = "16p8z975dnzmncfifa9gw9n3k9ycpr2qvz7lglpghsvx0fava8k9"; })
+  (fetchNuGet { pname = "System.Diagnostics.Tracing"; version = "4.3.0"; sha256 = "1m3bx6c2s958qligl67q7grkwfz3w53hpy7nc97mh6f7j5k168c4"; })
+  (fetchNuGet { pname = "System.Drawing.Common"; version = "7.0.0"; sha256 = "0jwyv5zjxzr4bm4vhmz394gsxqa02q6pxdqd2hwy1f116f0l30dp"; })
+  (fetchNuGet { pname = "System.Formats.Asn1"; version = "6.0.0"; sha256 = "1vvr7hs4qzjqb37r0w1mxq7xql2b17la63jwvmgv65s1hj00g8r9"; })
+  (fetchNuGet { pname = "System.Formats.Asn1"; version = "7.0.0"; sha256 = "1a14kgpqz4k7jhi7bs2gpgf67ym5wpj99203zxgwjypj7x47xhbq"; })
+  (fetchNuGet { pname = "System.Globalization"; version = "4.3.0"; sha256 = "1cp68vv683n6ic2zqh2s1fn4c2sd87g5hpp6l4d4nj4536jz98ki"; })
+  (fetchNuGet { pname = "System.Globalization.Calendars"; version = "4.3.0"; sha256 = "1xwl230bkakzzkrggy1l1lxmm3xlhk4bq2pkv790j5lm8g887lxq"; })
+  (fetchNuGet { pname = "System.Globalization.Extensions"; version = "4.3.0"; sha256 = "02a5zfxavhv3jd437bsncbhd2fp1zv4gxzakp1an9l6kdq1mcqls"; })
+  (fetchNuGet { pname = "System.IO"; version = "4.3.0"; sha256 = "05l9qdrzhm4s5dixmx68kxwif4l99ll5gqmh7rqgw554fx0agv5f"; })
+  (fetchNuGet { pname = "System.IO.FileSystem"; version = "4.3.0"; sha256 = "0z2dfrbra9i6y16mm9v1v6k47f0fm617vlb7s5iybjjsz6g1ilmw"; })
+  (fetchNuGet { pname = "System.IO.FileSystem.Primitives"; version = "4.3.0"; sha256 = "0j6ndgglcf4brg2lz4wzsh1av1gh8xrzdsn9f0yznskhqn1xzj9c"; })
+  (fetchNuGet { pname = "System.IO.Pipelines"; version = "7.0.0"; sha256 = "1ila2vgi1w435j7g2y7ykp2pdbh9c5a02vm85vql89az93b7qvav"; })
+  (fetchNuGet { pname = "System.Linq"; version = "4.3.0"; sha256 = "1w0gmba695rbr80l1k2h4mrwzbzsyfl2z4klmpbsvsg5pm4a56s7"; })
+  (fetchNuGet { pname = "System.Management"; version = "6.0.0"; sha256 = "0ra1g75ykapg6i5y0za721kpjd6xcq6dalijkdm6fsxxmz8iz4dr"; })
+  (fetchNuGet { pname = "System.Memory"; version = "4.5.5"; sha256 = "08jsfwimcarfzrhlyvjjid61j02irx6xsklf32rv57x2aaikvx0h"; })
+  (fetchNuGet { pname = "System.Net.Http"; version = "4.3.4"; sha256 = "0kdp31b8819v88l719j6my0yas6myv9d1viql3qz5577mv819jhl"; })
+  (fetchNuGet { pname = "System.Net.Primitives"; version = "4.3.0"; sha256 = "0c87k50rmdgmxx7df2khd9qj7q35j9rzdmm2572cc55dygmdk3ii"; })
+  (fetchNuGet { pname = "System.Numerics.Vectors"; version = "4.5.0"; sha256 = "1kzrj37yzawf1b19jq0253rcs8hsq1l2q8g69d7ipnhzb0h97m59"; })
+  (fetchNuGet { pname = "System.Reactive"; version = "5.0.0"; sha256 = "1lafmpnadhiwxyd543kraxa3jfdpm6ipblxrjlibym9b1ykpr5ik"; })
+  (fetchNuGet { pname = "System.Reflection"; version = "4.3.0"; sha256 = "0xl55k0mw8cd8ra6dxzh974nxif58s3k1rjv1vbd7gjbjr39j11m"; })
+  (fetchNuGet { pname = "System.Reflection.Emit"; version = "4.7.0"; sha256 = "121l1z2ypwg02yz84dy6gr82phpys0njk7yask3sihgy214w43qp"; })
+  (fetchNuGet { pname = "System.Reflection.Emit.ILGeneration"; version = "4.7.0"; sha256 = "0l8jpxhpgjlf1nkz5lvp61r4kfdbhr29qi8aapcxn3izd9wd0j8r"; })
+  (fetchNuGet { pname = "System.Reflection.Emit.Lightweight"; version = "4.7.0"; sha256 = "0mbjfajmafkca47zr8v36brvknzks5a7pgb49kfq2d188pyv6iap"; })
+  (fetchNuGet { pname = "System.Reflection.Metadata"; version = "6.0.1"; sha256 = "0fjqifk4qz9lw5gcadpfalpplyr0z2b3p9x7h0ll481a9sqvppc9"; })
+  (fetchNuGet { pname = "System.Reflection.Metadata"; version = "7.0.0"; sha256 = "1wilasn2qmj870h2bhw348lspamm7pbinpb4m89icg113510l00v"; })
+  (fetchNuGet { pname = "System.Reflection.MetadataLoadContext"; version = "6.0.0"; sha256 = "1ijfiqpi3flp5g9amridhjjmzz6md1c6pnxx5h7pdbiqqx9rwrpk"; })
+  (fetchNuGet { pname = "System.Reflection.Primitives"; version = "4.3.0"; sha256 = "04xqa33bld78yv5r93a8n76shvc8wwcdgr1qvvjh959g3rc31276"; })
+  (fetchNuGet { pname = "System.Resources.Extensions"; version = "6.0.0"; sha256 = "1h73gps9ffw77vys4zwgm78fgackqw6a7rjrg75mmx79vdw1shgw"; })
+  (fetchNuGet { pname = "System.Resources.ResourceManager"; version = "4.3.0"; sha256 = "0sjqlzsryb0mg4y4xzf35xi523s4is4hz9q4qgdvlvgivl7qxn49"; })
+  (fetchNuGet { pname = "System.Runtime"; version = "4.3.1"; sha256 = "03ch4d2acf6q037a4njxpll2kkx3dwzlg07yxr4z5m6j1kqgmm27"; })
+  (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "6.0.0"; sha256 = "0qm741kh4rh57wky16sq4m0v05fxmkjjr87krycf5vp9f0zbahbc"; })
+  (fetchNuGet { pname = "System.Runtime.Extensions"; version = "4.3.1"; sha256 = "1bzkwqm1yhvm70yq2bx2s3mqfx2lr01sqsay8cl5n5xcbq07ynf6"; })
+  (fetchNuGet { pname = "System.Runtime.Handles"; version = "4.3.0"; sha256 = "0sw2gfj2xr7sw9qjn0j3l9yw07x73lcs97p8xfc9w1x9h5g5m7i8"; })
+  (fetchNuGet { pname = "System.Runtime.InteropServices"; version = "4.3.0"; sha256 = "00hywrn4g7hva1b2qri2s6rabzwgxnbpw9zfxmz28z09cpwwgh7j"; })
+  (fetchNuGet { pname = "System.Runtime.Numerics"; version = "4.3.0"; sha256 = "19rav39sr5dky7afygh309qamqqmi9kcwvz3i0c5700v0c5cg61z"; })
+  (fetchNuGet { pname = "System.Security.AccessControl"; version = "6.0.0"; sha256 = "0a678bzj8yxxiffyzy60z2w1nczzpi8v97igr4ip3byd2q89dv58"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Algorithms"; version = "4.3.0"; sha256 = "03sq183pfl5kp7gkvq77myv7kbpdnq3y0xj7vi4q1kaw54sny0ml"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Cng"; version = "5.0.0"; sha256 = "06hkx2za8jifpslkh491dfwzm5dxrsyxzj5lsc0achb6yzg4zqlw"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Csp"; version = "4.3.0"; sha256 = "1x5wcrddf2s3hb8j78cry7yalca4lb5vfnkrysagbn6r9x6xvrx1"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Encoding"; version = "4.3.0"; sha256 = "1jr6w70igqn07k5zs1ph6xja97hxnb3mqbspdrff6cvssgrixs32"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0givpvvj8yc7gv4lhb6s1prq6p2c4147204a0wib89inqzd87gqc"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Pkcs"; version = "6.0.4"; sha256 = "0hh5h38pnxmlrnvs72f2hzzpz4b2caiiv6xf8y7fzdg84r3imvfr"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Pkcs"; version = "7.0.3"; sha256 = "0gw07qhch88jvx393m7ibl4g3dml60s42f3pa8a9f3v88ckkaxws"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Primitives"; version = "4.3.0"; sha256 = "0pyzncsv48zwly3lw4f2dayqswcfvdwq2nz0dgwmi7fj3pn64wby"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.ProtectedData"; version = "6.0.0"; sha256 = "05kd3a8w7658hjxq9vvszxip30a479fjmfq4bq1r95nrsvs4hbss"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.ProtectedData"; version = "7.0.1"; sha256 = "1nq9ngkqha70rv41692c79zq09cx6m85wkp3xj9yc31s62afyl5i"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.X509Certificates"; version = "4.3.0"; sha256 = "0valjcz5wksbvijylxijjxb1mp38mdhv03r533vnx1q3ikzdav9h"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Xml"; version = "6.0.1"; sha256 = "15d0np1njvy2ywf0qzdqyjk5sjs4zbfxg917jrvlbfwrqpqxb5dj"; })
+  (fetchNuGet { pname = "System.Security.Permissions"; version = "7.0.0"; sha256 = "0wkm6bj4abknzj41ygkziifx8mzhj4bix92wjvj6lihaw1gniq8c"; })
+  (fetchNuGet { pname = "System.Security.Principal.Windows"; version = "5.0.0"; sha256 = "1mpk7xj76lxgz97a5yg93wi8lj0l8p157a5d50mmjy3gbz1904q8"; })
+  (fetchNuGet { pname = "System.Text.Encoding"; version = "4.3.0"; sha256 = "1f04lkir4iladpp51sdgmis9dj4y8v08cka0mbmsy0frc9a4gjqr"; })
+  (fetchNuGet { pname = "System.Text.Encoding.CodePages"; version = "6.0.0"; sha256 = "0gm2kiz2ndm9xyzxgi0jhazgwslcs427waxgfa30m7yqll1kcrww"; })
+  (fetchNuGet { pname = "System.Text.Encoding.CodePages"; version = "7.0.0"; sha256 = "0sn6hxdjm7bw3xgsmg041ccchsa4sp02aa27cislw3x61dbr68kq"; })
+  (fetchNuGet { pname = "System.Text.Encodings.Web"; version = "6.0.0"; sha256 = "06n9ql3fmhpjl32g3492sj181zjml5dlcc5l76xq2h38c4f87sai"; })
+  (fetchNuGet { pname = "System.Text.Encodings.Web"; version = "7.0.0"; sha256 = "1151hbyrcf8kyg1jz8k9awpbic98lwz9x129rg7zk1wrs6vjlpxl"; })
+  (fetchNuGet { pname = "System.Text.Json"; version = "6.0.5"; sha256 = "12fg196sdq3gcjcz365kypfkkmdrprpcw2fvjnww9jqa4yn8v99l"; })
+  (fetchNuGet { pname = "System.Text.Json"; version = "7.0.3"; sha256 = "0zjrnc9lshagm6kdb9bdh45dmlnkpwcpyssa896sda93ngbmj8k9"; })
+  (fetchNuGet { pname = "System.Text.RegularExpressions"; version = "4.3.1"; sha256 = "1hr4qqzrij3y2ayi8jj70yfg0i9imf6fpdam1gr8qgp795kh86qg"; })
+  (fetchNuGet { pname = "System.Threading"; version = "4.3.0"; sha256 = "0rw9wfamvhayp5zh3j7p1yfmx9b5khbf4q50d8k5rk993rskfd34"; })
+  (fetchNuGet { pname = "System.Threading.Channels"; version = "6.0.0"; sha256 = "1qbyi7yymqc56frqy7awvcqc1m7x3xrpx87a37dgb3mbrjg9hlcj"; })
+  (fetchNuGet { pname = "System.Threading.Tasks"; version = "4.3.0"; sha256 = "134z3v9abw3a6jsw17xl3f6hqjpak5l682k2vz39spj4kmydg6k7"; })
+  (fetchNuGet { pname = "System.Threading.Tasks.Dataflow"; version = "6.0.0"; sha256 = "1b4vyjdir9kdkiv2fqqm4f76h0df68k8gcd7jb2b38zgr2vpnk3c"; })
+  (fetchNuGet { pname = "System.Threading.Tasks.Dataflow"; version = "7.0.0"; sha256 = "0ham9l8xrmlq2qwin53n82iz1wanci2h695i3cq83jcw4n28qdr9"; })
+  (fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.5.4"; sha256 = "0y6ncasgfcgnjrhynaf0lwpkpkmv4a07sswwkwbwb5h7riisj153"; })
+  (fetchNuGet { pname = "System.Windows.Extensions"; version = "7.0.0"; sha256 = "11r9f0v7qp365bdpq5ax023yra4qvygljz18dlqs650d44iay669"; })
+  (fetchNuGet { pname = "YoloDev.Expecto.TestSdk"; version = "0.14.2"; sha256 = "1877gr3f8wl1x3njhgss9psxm21xpqv6cpg625f2mvvak79fzrra"; })
+]
diff --git a/nixpkgs/pkgs/development/tools/functiontrace-server/default.nix b/nixpkgs/pkgs/development/tools/functiontrace-server/default.nix
new file mode 100644
index 000000000000..abacb1d9f9d4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/functiontrace-server/default.nix
@@ -0,0 +1,23 @@
+{ lib, rustPlatform, fetchCrate, stdenv, darwin }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "functiontrace-server";
+  version = "0.5.2";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-p6ypMfg99ohQCyPB2O0wXbGmPvD2K9V3EnFDd5dC6js=";
+  };
+
+  cargoHash = "sha256-3tLjW7yiS1dNsV81KUZbfN2pvYT9kqiC62nWFid2NH8=";
+
+  buildInputs = lib.optionals stdenv.isDarwin
+    [ darwin.apple_sdk.frameworks.CoreFoundation ];
+
+  meta = with lib; {
+    description = "Server for FunctionTrace, a graphical Python profiler";
+    homepage = "https://functiontrace.com";
+    license = with licenses; [ prosperity30 ];
+    maintainers = with maintainers; [ tehmatt ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/fundoc/default.nix b/nixpkgs/pkgs/development/tools/fundoc/default.nix
new file mode 100644
index 000000000000..b53298046a21
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/fundoc/default.nix
@@ -0,0 +1,31 @@
+{ lib, rustPlatform, fetchFromGitHub, fetchpatch }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "fundoc";
+  version = "0.5.0";
+
+  src = fetchFromGitHub {
+    owner = "daynin";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-8WWaYgfqGWrTV2EEeSPz1BN2ur7gsxFiHeDNMJdVDcw=";
+  };
+
+  cargoPatches = [
+    # updates outdated lock file and fixes a test
+    (fetchpatch {
+      name = "fix-tests.patch";
+      url = "https://github.com/daynin/fundoc/commit/7dd3cf53a1d1ed72b00bf38ea3a45ba4590da7ef.patch";
+      hash = "sha256-9Xsw2P4t9gzwc/qDU6U5+HZevPiQOOQo88gybC8QpyM=";
+    })
+  ];
+
+  cargoHash = "sha256-yapFUkG2JfGb3N3iVEDpQunOyRnbNTs+q3zQ23B23/s=";
+
+  meta = with lib; {
+    description = "Language agnostic documentation generator";
+    homepage = "https://github.com/daynin/fundoc";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/fusee-launcher/default.nix b/nixpkgs/pkgs/development/tools/fusee-launcher/default.nix
new file mode 100644
index 000000000000..117bd0c9450e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/fusee-launcher/default.nix
@@ -0,0 +1,50 @@
+{ lib, stdenv
+, python3Packages
+, python3
+, fetchFromGitHub
+, pkgsCross
+, makeWrapper
+} :
+
+let
+  arm-embedded-cc = pkgsCross.arm-embedded.buildPackages.gcc;
+in
+
+stdenv.mkDerivation {
+  pname = "fusee-launcher";
+  version = "unstable-2018-07-14";
+
+  src = fetchFromGitHub {
+    owner = "Cease-and-DeSwitch";
+    repo = "fusee-launcher";
+    rev = "265e8f3e1987751ec41db6f1946d132b296aba43";
+    sha256 = "1pqkgw5bk0xcz9x7pc1f0r0b9nsc8jnnvcs1315d8ml8mx23fshm";
+  };
+
+  makeFlags = [
+    "CROSS_COMPILE=${arm-embedded-cc.targetPrefix}"
+  ];
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share
+    cp fusee-launcher.py $out/bin/fusee-launcher
+    cp intermezzo.bin $out/share/intermezzo.bin
+
+    # Wrap with path to intermezzo.bin relocator binary in /share
+    wrapProgram $out/bin/fusee-launcher \
+      --add-flags "--relocator $out/share/intermezzo.bin" \
+      --prefix PYTHONPATH : "$PYTHONPATH:$(toPythonPath $out)"
+  '';
+
+  nativeBuildInputs = [ arm-embedded-cc makeWrapper python3Packages.wrapPython ];
+  buildInputs = [ python3 python3Packages.pyusb ];
+  pythonPath = with python3Packages; [ pyusb ];
+
+  meta = with lib; {
+    homepage = "https://github.com/Cease-and-DeSwitch/fusee-launcher";
+    description = "Work-in-progress launcher for one of the Tegra X1 bootROM exploits";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ pneumaticat ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/tools/fusee-nano/default.nix b/nixpkgs/pkgs/development/tools/fusee-nano/default.nix
new file mode 100644
index 000000000000..e1c552002619
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/fusee-nano/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub, unixtools }:
+
+stdenv.mkDerivation {
+  pname = "fusee-nano";
+  version = "unstable-2023-05-17";
+
+  src = fetchFromGitHub {
+    owner = "DavidBuchanan314";
+    repo = "fusee-nano";
+    rev = "2979d34f470d02f34594d8d59be1f5c7bf4bf73f";
+    hash = "sha256-RUG10wvhB0qEuiLwn8wk6Uxok+gv4bFLD6tbx0P0yDc=";
+  };
+
+  nativeBuildInputs = [ unixtools.xxd ];
+
+  makeFlags = [ "PREFIX=$(out)/bin" ];
+
+  meta = {
+    description = "A minimalist re-implementation of the Fusée Gelée exploit";
+    homepage = "https://github.com/DavidBuchanan314/fusee-nano";
+    license = lib.licenses.mit;
+    platforms = lib.platforms.linux;
+    maintainers = [ lib.maintainers.leo60228 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/fx/default.nix b/nixpkgs/pkgs/development/tools/fx/default.nix
new file mode 100644
index 000000000000..05589b5c9747
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/fx/default.nix
@@ -0,0 +1,23 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "fx";
+  version = "31.0.0";
+
+  src = fetchFromGitHub {
+    owner = "antonmedv";
+    repo = pname;
+    rev = version;
+    hash = "sha256-AVaMViu+65xyYW3TzIigNXf5FfKb2v+TU/BMZqCX/Js=";
+  };
+
+  vendorHash = "sha256-kE6JotKP3YQ0B3HvyNU3fTvuwbnqTW8cwGVBYpiBvso=";
+
+  meta = with lib; {
+    description = "Terminal JSON viewer";
+    homepage = "https://github.com/antonmedv/fx";
+    changelog = "https://github.com/antonmedv/fx/releases/tag/${src.rev}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/galen/default.nix b/nixpkgs/pkgs/development/tools/galen/default.nix
new file mode 100644
index 000000000000..d1e02f411cd3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/galen/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchurl, jre8, unzip }:
+
+stdenv.mkDerivation rec {
+  pname = "galen";
+  version = "2.4.4";
+
+  inherit jre8;
+
+  src = fetchurl {
+    url = "https://github.com/galenframework/galen/releases/download/galen-${version}/galen-bin-${version}.zip";
+    sha256 = "13dq8cf0yy24vym6z7p8hb0mybgpcl4j5crsaq8a6pjfxz6d17mq";
+  };
+
+  nativeBuildInputs = [ unzip ];
+
+  buildPhase = ''
+  mkdir -p $out/bin
+  '';
+
+  installPhase = ''
+  cat galen | sed -e "s,java,$jre8/bin/java," > $out/bin/galen
+  chmod +x $out/bin/galen
+  cp galen.jar $out/bin
+  '';
+
+  meta = with lib; {
+    homepage = "http://galenframework.com";
+    description = "Automated layout testing for websites";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.asl20;
+    maintainers = [ ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gamecube-tools/default.nix b/nixpkgs/pkgs/development/tools/gamecube-tools/default.nix
new file mode 100644
index 000000000000..9b854d3671e5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gamecube-tools/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook
+, freeimage, libGL }:
+
+stdenv.mkDerivation rec {
+  version = "1.0.6";
+  pname = "gamecube-tools";
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ freeimage libGL ];
+
+  src = fetchFromGitHub {
+    owner = "devkitPro";
+    repo  = "gamecube-tools";
+    rev = "v${version}";
+    sha256 = "sha256-GsTmwyxBc36Qg+UGy+cRAjGW1eh1XxV0s94B14ZJAjU=";
+  };
+
+  meta = with lib; {
+    description = "Tools for gamecube/wii projects";
+    homepage = "https://github.com/devkitPro/gamecube-tools/";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ tomsmeets ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gammaray/default.nix b/nixpkgs/pkgs/development/tools/gammaray/default.nix
new file mode 100644
index 000000000000..29ab4973c994
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gammaray/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, pkg-config
+, wrapQtAppsHook
+, qtbase
+, wayland
+, elfutils
+, libbfd
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gammaray";
+  version = "3.0.0";
+
+  src = fetchFromGitHub {
+    owner = "KDAB";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-C8bej0q4p8F27hiJUye9G+sZbkAYaV8hW1GKWZyHAis=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    qtbase
+    wayland
+    elfutils
+    libbfd
+  ];
+
+  meta = with lib; {
+    description = "A software introspection tool for Qt applications developed by KDAB";
+    homepage = "https://github.com/KDAB/GammaRay";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ rewine ];
+    mainProgram = "gammaray";
+  };
+}
+
diff --git a/nixpkgs/pkgs/development/tools/garble/default.nix b/nixpkgs/pkgs/development/tools/garble/default.nix
new file mode 100644
index 000000000000..438d83405988
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/garble/default.nix
@@ -0,0 +1,35 @@
+{ stdenv
+, buildGoModule
+, fetchFromGitHub
+, lib
+, git
+}:
+buildGoModule rec {
+  pname = "garble";
+  version = "0.8.0";
+
+  src = fetchFromGitHub {
+    owner = "burrowers";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-f7coWG1CS4UL8GGqwADx5CvIk2sPONPlWW+JgRhFsb8=";
+  };
+
+  vendorHash = "sha256-SOdIlu0QrQokl9j9Ff594+1K6twU1mCuECFQaVKaPV4=";
+
+  # Used for some of the tests.
+  nativeCheckInputs = [git];
+
+  preBuild = lib.optionalString (!stdenv.isx86_64) ''
+    # The test assumex amd64 assembly
+    rm testdata/script/asm.txtar
+  '';
+
+  meta = {
+    description = "Obfuscate Go code by wrapping the Go toolchain";
+    homepage = "https://github.com/burrowers/garble/";
+    maintainers = with lib.maintainers; [ davhau ];
+    license = lib.licenses.bsd3;
+    broken = stdenv.isDarwin; # never built on Hydra https://hydra.nixos.org/job/nixpkgs/trunk/garble.x86_64-darwin
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gauge/default.nix b/nixpkgs/pkgs/development/tools/gauge/default.nix
new file mode 100644
index 000000000000..ae575baf19b0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gauge/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "gauge";
+  version = "1.6.1";
+
+  src = fetchFromGitHub {
+    owner = "getgauge";
+    repo = "gauge";
+    rev = "v${version}";
+    hash = "sha256-dgSrjSAO0MwVML07gIqI9hIgRu+Pgv2jZOItSFd0DVU=";
+  };
+
+  vendorHash = "sha256-IGxETjZ2RCvhcA7XUQYbr2jf+9P/WReuAOLIpE3kyes=";
+
+  excludedPackages = [ "build" "man" ];
+
+  meta = with lib; {
+    description = "Light weight cross-platform test automation";
+    homepage = "https://gauge.org";
+    license = licenses.asl20;
+    maintainers = [ maintainers.vdemeester ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gci/default.nix b/nixpkgs/pkgs/development/tools/gci/default.nix
new file mode 100644
index 000000000000..c1a96e1e9381
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gci/default.nix
@@ -0,0 +1,25 @@
+{
+  lib,
+  buildGoModule,
+  fetchFromGitHub,
+}:
+buildGoModule rec {
+  pname = "gci";
+  version = "0.12.1";
+
+  src = fetchFromGitHub {
+    owner = "daixiang0";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-h8vqpqohKQzd2IltHroo/AKnhufJsCC6qpSo8NYyhPI=";
+  };
+
+  vendorHash = "sha256-bPRcOvwbWEpcJUlIqQNeoYME4ky0YE5LlyWhSTWCIHQ=";
+
+  meta = with lib; {
+    description = "Controls golang package import order and makes it always deterministic";
+    homepage = "https://github.com/daixiang0/gci";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [krostar];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gcov2lcov/default.nix b/nixpkgs/pkgs/development/tools/gcov2lcov/default.nix
new file mode 100644
index 000000000000..5ee3476eac2c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gcov2lcov/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "gcov2lcov";
+  version = "1.0.6";
+
+  src = fetchFromGitHub {
+    owner = "jandelgado";
+    repo = "gcov2lcov";
+    rev = "v${version}";
+    hash = "sha256-S5fAhd0bh1XEeQwaya8LvnKQ/iz4PjAbpjK4uFI6H1g=";
+  };
+
+  vendorHash = "sha256-r95PFkTywGiDIEnDfLpzt97SkuDeXo4xg2N7ikG0hs0=";
+
+  ldflags = [ "-s" "-w" ];
+
+  # Some checks depend on looking up vcs root
+  checkPhase = false;
+
+  meta = with lib; {
+    description = "Convert go coverage files to lcov format";
+    homepage = "https://github.com/jandelgado/gcov2lcov";
+    changelog = "https://github.com/jandelgado/gcov2lcov/blob/${src.rev}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ meain ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gdlv/default.nix b/nixpkgs/pkgs/development/tools/gdlv/default.nix
new file mode 100644
index 000000000000..0992dc90b686
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gdlv/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, stdenv
+, buildGoModule
+, fetchFromGitHub
+, Foundation
+, CoreGraphics
+, Metal
+, AppKit
+}:
+
+buildGoModule rec {
+  pname = "gdlv";
+  version = "1.10.0";
+
+  src = fetchFromGitHub {
+    owner = "aarzilli";
+    repo = "gdlv";
+    rev = "v${version}";
+    hash = "sha256-OPsQOFwV6jIX4ZOVwJmpTeQUr/zkfkqCr86HmPhYarI=";
+  };
+
+  preBuild = lib.optionalString (stdenv.isDarwin && lib.versionOlder stdenv.hostPlatform.darwinMinVersion "11.0") ''
+    export MACOSX_DEPLOYMENT_TARGET=10.15
+  '';
+
+  vendorHash = null;
+
+  subPackages = ".";
+
+  buildInputs = lib.optionals stdenv.isDarwin [ Foundation CoreGraphics Metal AppKit ];
+
+  meta = with lib; {
+    description = "GUI frontend for Delve";
+    homepage = "https://github.com/aarzilli/gdlv";
+    maintainers = with maintainers; [ mmlb ];
+    license = licenses.gpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gdm/deps.nix b/nixpkgs/pkgs/development/tools/gdm/deps.nix
new file mode 100644
index 000000000000..62a3df65e3aa
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gdm/deps.nix
@@ -0,0 +1,12 @@
+# This file was generated by go2nix.
+[
+  {
+    goPackagePath = "golang.org/x/tools";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/tools";
+      rev = "0d047c8d5a8c3a1c89d9d78511f4ed7aef49ea0c";
+      sha256 = "0ahyxvqy25zpyppmrb7vsad332gmq2cdi7hb0si6ni0cmrlqcfwr";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/development/tools/gdtoolkit/default.nix b/nixpkgs/pkgs/development/tools/gdtoolkit/default.nix
new file mode 100644
index 000000000000..ea5e5ec8de9a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gdtoolkit/default.nix
@@ -0,0 +1,89 @@
+{ lib
+, python3
+, fetchFromGitHub
+, godot3-server
+}:
+
+let
+  python = python3.override {
+    packageOverrides = self: super: {
+      lark = super.lark.overridePythonAttrs (old: rec {
+        # gdtoolkit needs exactly this lark version
+        version = "0.8.0";
+        src = fetchFromGitHub {
+          owner = "lark-parser";
+          repo = "lark";
+          rev = version;
+          hash = "sha256-KN9buVlH8hJ8t0ZP5yefeYM5vH5Gg7a7TEDGKJYpozs=";
+          fetchSubmodules = true;
+        };
+        patches = [ ];
+      });
+    };
+  };
+in
+python.pkgs.buildPythonApplication rec {
+  pname = "gdtoolkit";
+  version = "3.3.1";
+
+  # If we try to get using fetchPypi it requires GeoIP (but the package dont has that dep!?)
+  src = fetchFromGitHub {
+    owner = "Scony";
+    repo = "godot-gdscript-toolkit";
+    rev = version;
+    sha256 = "13nnpwy550jf5qnm9ixpxl1bwfnhhbiys8vqfd25g3aim4bm3gnn";
+  };
+
+  disabled = python.pythonOlder "3.7";
+
+  propagatedBuildInputs = with python.pkgs; [
+    docopt
+    lark
+    pyyaml
+    setuptools
+  ];
+
+  doCheck = true;
+
+  nativeCheckInputs = with python.pkgs; [
+    pytestCheckHook
+    hypothesis
+    godot3-server
+  ];
+
+  preCheck =
+    let
+      godotServerMajorVersion = lib.versions.major godot3-server.version;
+      gdtoolkitMajorVersion = lib.versions.major version;
+      msg = ''
+        gdtoolkit major version ${gdtoolkitMajorVersion} does not match godot-server major version ${godotServerMajorVersion}!
+        gdtoolkit needs a matching godot-server for its tests.
+        If you see this error, you can either:
+         - disable doCheck for gdtoolkit, or
+         - provide a compatible godot-server version to gdtoolkit"
+      '';
+    in lib.throwIf (godotServerMajorVersion != gdtoolkitMajorVersion) msg ''
+      # The tests want to run the installed executables
+      export PATH=$out/bin:$PATH
+
+      # gdtoolkit tries to write cache variables to $HOME/.cache
+      export HOME=$TMP
+
+      # Work around https://github.com/godotengine/godot/issues/20503
+      # Without this, Godot will complain about a missing project file
+      touch project.godot
+
+      # Remove broken test case
+      # (hard to skip via disabledTests since the test name contains an absolute path)
+      rm tests/potential-godot-bugs/multiline-subscription-expression.gd
+    '';
+
+  pythonImportsCheck = [ "gdtoolkit" "gdtoolkit.formatter" "gdtoolkit.linter" "gdtoolkit.parser" ];
+
+  meta = with lib; {
+    description = "Independent set of tools for working with Godot's GDScript - parser, linter and formatter";
+    homepage = "https://github.com/Scony/godot-gdscript-toolkit";
+    license = licenses.mit;
+    maintainers = with maintainers; [ shiryel tmarkus ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/geckodriver/default.nix b/nixpkgs/pkgs/development/tools/geckodriver/default.nix
new file mode 100644
index 000000000000..a6b899e9f2f9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/geckodriver/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+, stdenv
+, Security
+, libiconv
+}:
+
+rustPlatform.buildRustPackage rec {
+  version = "0.34.0";
+  pname = "geckodriver";
+
+  src = fetchFromGitHub {
+    owner = "mozilla";
+    repo = "geckodriver";
+    rev = "refs/tags/v${version}";
+    sha256 = "sha256-jrF55j3/WKpGl7sJzRmPyaNMbxPqAoXWiuQJsxfIYgc=";
+  };
+
+  cargoHash = "sha256-4on4aBkRI9PiPgNcxVktTDX28qRy3hvV9+glNB6hT1k=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [ libiconv Security ];
+
+  meta = with lib; {
+    description = "Proxy for using W3C WebDriver-compatible clients to interact with Gecko-based browsers";
+    homepage = "https://github.com/mozilla/geckodriver";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ jraygauthier ];
+    mainProgram = "geckodriver";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gemstash/Gemfile b/nixpkgs/pkgs/development/tools/gemstash/Gemfile
new file mode 100644
index 000000000000..55e71911a52b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gemstash/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'gemstash'
diff --git a/nixpkgs/pkgs/development/tools/gemstash/Gemfile.lock b/nixpkgs/pkgs/development/tools/gemstash/Gemfile.lock
new file mode 100644
index 000000000000..eed8dffc6225
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gemstash/Gemfile.lock
@@ -0,0 +1,106 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    activesupport (7.1.2)
+      base64
+      bigdecimal
+      concurrent-ruby (~> 1.0, >= 1.0.2)
+      connection_pool (>= 2.2.5)
+      drb
+      i18n (>= 1.6, < 2)
+      minitest (>= 5.1)
+      mutex_m
+      tzinfo (~> 2.0)
+    base64 (0.2.0)
+    bigdecimal (3.1.4)
+    concurrent-ruby (1.2.2)
+    connection_pool (2.4.1)
+    dalli (3.2.6)
+    drb (2.2.0)
+      ruby2_keywords
+    faraday (1.10.3)
+      faraday-em_http (~> 1.0)
+      faraday-em_synchrony (~> 1.0)
+      faraday-excon (~> 1.1)
+      faraday-httpclient (~> 1.0)
+      faraday-multipart (~> 1.0)
+      faraday-net_http (~> 1.0)
+      faraday-net_http_persistent (~> 1.0)
+      faraday-patron (~> 1.0)
+      faraday-rack (~> 1.0)
+      faraday-retry (~> 1.0)
+      ruby2_keywords (>= 0.0.4)
+    faraday-em_http (1.0.0)
+    faraday-em_synchrony (1.0.0)
+    faraday-excon (1.1.0)
+    faraday-httpclient (1.0.1)
+    faraday-multipart (1.0.4)
+      multipart-post (~> 2)
+    faraday-net_http (1.0.1)
+    faraday-net_http_persistent (1.2.0)
+    faraday-patron (1.0.0)
+    faraday-rack (1.0.0)
+    faraday-retry (1.0.3)
+    faraday_middleware (1.2.0)
+      faraday (~> 1.0)
+    gemstash (2.7.1)
+      activesupport (>= 4.2, < 8)
+      dalli (>= 3.2.3, < 4)
+      faraday (>= 1, < 3)
+      faraday_middleware (~> 1.0)
+      lru_redux (~> 1.1)
+      psych (>= 3.2.1)
+      puma (~> 6.1)
+      sequel (~> 5.0)
+      server_health_check-rack (~> 0.1)
+      sinatra (>= 1.4, < 4.0)
+      sqlite3 (~> 1.3)
+      terminal-table (~> 3.0)
+      thor (~> 1.0)
+    i18n (1.14.1)
+      concurrent-ruby (~> 1.0)
+    lru_redux (1.1.0)
+    mini_portile2 (2.8.5)
+    minitest (5.20.0)
+    multipart-post (2.3.0)
+    mustermann (3.0.0)
+      ruby2_keywords (~> 0.0.1)
+    mutex_m (0.2.0)
+    nio4r (2.6.1)
+    psych (5.1.1.1)
+      stringio
+    puma (6.4.0)
+      nio4r (~> 2.0)
+    rack (2.2.8)
+    rack-protection (3.1.0)
+      rack (~> 2.2, >= 2.2.4)
+    ruby2_keywords (0.0.5)
+    sequel (5.74.0)
+      bigdecimal
+    server_health_check (1.0.2)
+    server_health_check-rack (0.1.0)
+      server_health_check (~> 1.0, >= 1.0.1)
+    sinatra (3.1.0)
+      mustermann (~> 3.0)
+      rack (~> 2.2, >= 2.2.4)
+      rack-protection (= 3.1.0)
+      tilt (~> 2.0)
+    sqlite3 (1.6.9)
+      mini_portile2 (~> 2.8.0)
+    stringio (3.1.0)
+    terminal-table (3.0.2)
+      unicode-display_width (>= 1.1.1, < 3)
+    thor (1.3.0)
+    tilt (2.3.0)
+    tzinfo (2.0.6)
+      concurrent-ruby (~> 1.0)
+    unicode-display_width (2.5.0)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  gemstash
+
+BUNDLED WITH
+   2.4.22
diff --git a/nixpkgs/pkgs/development/tools/gemstash/default.nix b/nixpkgs/pkgs/development/tools/gemstash/default.nix
new file mode 100644
index 000000000000..ce8fde604ab5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gemstash/default.nix
@@ -0,0 +1,19 @@
+{ lib, bundlerApp, bundlerUpdateScript, nixosTests }:
+
+bundlerApp rec {
+  pname = "gemstash";
+  gemdir = ./.;
+  exes = [ pname ];
+
+  passthru = {
+    updateScript = bundlerUpdateScript pname;
+    tests = { inherit (nixosTests) gemstash; };
+  };
+
+  meta = with lib; {
+    description = "A cache for RubyGems.org and a private gem server";
+    homepage    = "https://github.com/rubygems/gemstash";
+    license     = licenses.mit;
+    maintainers = [ maintainers.viraptor ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gemstash/gemset.nix b/nixpkgs/pkgs/development/tools/gemstash/gemset.nix
new file mode 100644
index 000000000000..ba5b0b9178e1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gemstash/gemset.nix
@@ -0,0 +1,467 @@
+{
+  activesupport = {
+    dependencies = ["base64" "bigdecimal" "concurrent-ruby" "connection_pool" "drb" "i18n" "minitest" "mutex_m" "tzinfo"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1l6hmf99zgckpn812qfxfz60rbh0zixv1hxnxhjlg8942pvixn2v";
+      type = "gem";
+    };
+    version = "7.1.2";
+  };
+  base64 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "01qml0yilb9basf7is2614skjp8384h2pycfx86cr8023arfj98g";
+      type = "gem";
+    };
+    version = "0.2.0";
+  };
+  bigdecimal = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "07y615s8yldk3k13lmkhpk1k190lcqvmxmnjwgh4bzjan9xrc36y";
+      type = "gem";
+    };
+    version = "3.1.4";
+  };
+  concurrent-ruby = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0krcwb6mn0iklajwngwsg850nk8k9b35dhmc2qkbdqvmifdi2y9q";
+      type = "gem";
+    };
+    version = "1.2.2";
+  };
+  connection_pool = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1x32mcpm2cl5492kd6lbjbaf17qsssmpx9kdyr7z1wcif2cwyh0g";
+      type = "gem";
+    };
+    version = "2.4.1";
+  };
+  dalli = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "137xw0nl7ixxqyam6fjgmzl24i3rdml37whgnks8y35w92i95447";
+      type = "gem";
+    };
+    version = "3.2.6";
+  };
+  drb = {
+    dependencies = ["ruby2_keywords"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "03ylflxbp9jrs1hx3d4wvx05yb9hdq4a0r706zz6qc6kvqfazr79";
+      type = "gem";
+    };
+    version = "2.2.0";
+  };
+  faraday = {
+    dependencies = ["faraday-em_http" "faraday-em_synchrony" "faraday-excon" "faraday-httpclient" "faraday-multipart" "faraday-net_http" "faraday-net_http_persistent" "faraday-patron" "faraday-rack" "faraday-retry" "ruby2_keywords"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1c760q0ks4vj4wmaa7nh1dgvgqiwaw0mjr7v8cymy7i3ffgjxx90";
+      type = "gem";
+    };
+    version = "1.10.3";
+  };
+  faraday-em_http = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "12cnqpbak4vhikrh2cdn94assh3yxza8rq2p9w2j34bqg5q4qgbs";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  faraday-em_synchrony = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vgrbhkp83sngv6k4mii9f2s9v5lmp693hylfxp2ssfc60fas3a6";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  faraday-excon = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0h09wkb0k0bhm6dqsd47ac601qiaah8qdzjh8gvxfd376x1chmdh";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  faraday-httpclient = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0fyk0jd3ks7fdn8nv3spnwjpzx2lmxmg2gh4inz3by1zjzqg33sc";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  faraday-multipart = {
+    dependencies = ["multipart-post"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09871c4hd7s5ws1wl4gs7js1k2wlby6v947m2bbzg43pnld044lh";
+      type = "gem";
+    };
+    version = "1.0.4";
+  };
+  faraday-net_http = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fi8sda5hc54v1w3mqfl5yz09nhx35kglyx72w7b8xxvdr0cwi9j";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  faraday-net_http_persistent = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0dc36ih95qw3rlccffcb0vgxjhmipsvxhn6cw71l7ffs0f7vq30b";
+      type = "gem";
+    };
+    version = "1.2.0";
+  };
+  faraday-patron = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19wgsgfq0xkski1g7m96snv39la3zxz6x7nbdgiwhg5v82rxfb6w";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  faraday-rack = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1h184g4vqql5jv9s9im6igy00jp6mrah2h14py6mpf9bkabfqq7g";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  faraday-retry = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "153i967yrwnswqgvnnajgwp981k9p50ys1h80yz3q94rygs59ldd";
+      type = "gem";
+    };
+    version = "1.0.3";
+  };
+  faraday_middleware = {
+    dependencies = ["faraday"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1bw8mfh4yin2xk7138rg3fhb2p5g2dlmdma88k82psah9mbmvlfy";
+      type = "gem";
+    };
+    version = "1.2.0";
+  };
+  gemstash = {
+    dependencies = ["activesupport" "dalli" "faraday" "faraday_middleware" "lru_redux" "psych" "puma" "sequel" "server_health_check-rack" "sinatra" "sqlite3" "terminal-table" "thor"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0sysgn3gxxdyqm08b9ldsbzmp3yhdwgala9dfv5yspw5nkksprpj";
+      type = "gem";
+    };
+    version = "2.7.1";
+  };
+  i18n = {
+    dependencies = ["concurrent-ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qaamqsh5f3szhcakkak8ikxlzxqnv49n2p7504hcz2l0f4nj0wx";
+      type = "gem";
+    };
+    version = "1.14.1";
+  };
+  lru_redux = {
+    gem_platform = "ruby";
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1yxghzg7476sivz8yyr9nkak2dlbls0b89vc2kg52k0nmg6d0wgf";
+      type = "gem";
+    };
+    target_platform = "ruby";
+    version = "1.1.0";
+  };
+  mini_portile2 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1kl9c3kdchjabrihdqfmcplk3lq4cw1rr9f378y6q22qwy5dndvs";
+      type = "gem";
+    };
+    version = "2.8.5";
+  };
+  minitest = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bkmfi9mb49m0fkdhl2g38i3xxa02d411gg0m8x0gvbwfmmg5ym3";
+      type = "gem";
+    };
+    version = "5.20.0";
+  };
+  multipart-post = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lgyysrpl50wgcb9ahg29i4p01z0irb3p9lirygma0kkfr5dgk9x";
+      type = "gem";
+    };
+    version = "2.3.0";
+  };
+  mustermann = {
+    dependencies = ["ruby2_keywords"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0rwbq20s2gdh8dljjsgj5s6wqqfmnbclhvv2c2608brv7jm6jdbd";
+      type = "gem";
+    };
+    version = "3.0.0";
+  };
+  mutex_m = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ma093ayps1m92q845hmpk0dmadicvifkbf05rpq9pifhin0rvxn";
+      type = "gem";
+    };
+    version = "0.2.0";
+  };
+  nio4r = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1y99dfzlb3kgzh7pfk8km0p5zjiblxyh5rm8yal9h523vi5awji8";
+      type = "gem";
+    };
+    version = "2.6.1";
+  };
+  psych = {
+    dependencies = ["stringio"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0wjzrkssjfjpynij5dpycyflhqbjvi1gc2j73xgq3b196s1d3c24";
+      type = "gem";
+    };
+    version = "5.1.1.1";
+  };
+  puma = {
+    dependencies = ["nio4r"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1y8jcw80zcxvdq0id329lzmp5pzx7hpac227d7sgjkblc89s3pfm";
+      type = "gem";
+    };
+    version = "6.4.0";
+  };
+  rack = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15rdwbyk71c9nxvd527bvb8jxkcys8r3dj3vqra5b3sa63qs30vv";
+      type = "gem";
+    };
+    version = "2.2.8";
+  };
+  rack-protection = {
+    dependencies = ["rack"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xsz78hccgza144n37bfisdkzpr2c8m0xl6rnlzgxdbsm1zrkg7r";
+      type = "gem";
+    };
+    version = "3.1.0";
+  };
+  ruby2_keywords = {
+    gem_platform = "ruby";
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vz322p8n39hz3b4a9gkmz9y7a5jaz41zrm2ywf31dvkqm03glgz";
+      type = "gem";
+    };
+    target_platform = "ruby";
+    version = "0.0.5";
+  };
+  sequel = {
+    dependencies = ["bigdecimal"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0zj66n0m1la1anxjjdb8a35frzabym112rf9ssyxq42mq05ln4m2";
+      type = "gem";
+    };
+    version = "5.74.0";
+  };
+  server_health_check = {
+    gem_platform = "ruby";
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "06chz92parchhj1457lf5lbj3hrmvqpq6mfskxcnj5f4qa14n5wd";
+      type = "gem";
+    };
+    target_platform = "ruby";
+    version = "1.0.2";
+  };
+  server_health_check-rack = {
+    dependencies = ["server_health_check"];
+    gem_platform = "ruby";
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0cgqr94x18f60n27sk9lgg471c6vk6qy132z7i1ppp32kvmjfphs";
+      type = "gem";
+    };
+    target_platform = "ruby";
+    version = "0.1.0";
+  };
+  sinatra = {
+    dependencies = ["mustermann" "rack" "rack-protection" "tilt"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "00541cnypsh1mnilfxxqlz6va9afrixf9m1asn4wzjp5m59777p8";
+      type = "gem";
+    };
+    version = "3.1.0";
+  };
+  sqlite3 = {
+    dependencies = ["mini_portile2"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08irz5llz31im8pmkk5k0kw433jyyji1qa98xkdmpphncdjr38am";
+      type = "gem";
+    };
+    version = "1.6.9";
+  };
+  stringio = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "063psvsn1aq6digpznxfranhcpmi0sdv2jhra5g0459sw0x2dxn1";
+      type = "gem";
+    };
+    version = "3.1.0";
+  };
+  terminal-table = {
+    dependencies = ["unicode-display_width"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "14dfmfjppmng5hwj7c5ka6qdapawm3h6k9lhn8zj001ybypvclgr";
+      type = "gem";
+    };
+    version = "3.0.2";
+  };
+  thor = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1hx77jxkrwi66yvs10wfxqa8s25ds25ywgrrf66acm9nbfg7zp0s";
+      type = "gem";
+    };
+    version = "1.3.0";
+  };
+  tilt = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0p3l7v619hwfi781l3r7ypyv1l8hivp09r18kmkn6g11c4yr1pc2";
+      type = "gem";
+    };
+    version = "2.3.0";
+  };
+  tzinfo = {
+    dependencies = ["concurrent-ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "16w2g84dzaf3z13gxyzlzbf748kylk5bdgg3n1ipvkvvqy685bwd";
+      type = "gem";
+    };
+    version = "2.0.6";
+  };
+  unicode-display_width = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1d0azx233nags5jx3fqyr23qa2rhgzbhv8pxp46dgbg1mpf82xky";
+      type = "gem";
+    };
+    version = "2.5.0";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gen-license/default.nix b/nixpkgs/pkgs/development/tools/gen-license/default.nix
new file mode 100644
index 000000000000..a3495866576d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gen-license/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchCrate
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "gen-license";
+  version = "0.1.2";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-YZcycLQ436cjr2YTT7TEyMdeLTOl9oEfa5x3lgnnYyo=";
+  };
+
+  cargoHash = "sha256-2PT20eoXxBPhGsmHlEEGE2ZDyhyrD7tFdwnn3khjKNo=";
+
+  buildInputs = lib.optional stdenv.isDarwin Security;
+
+  meta = with lib; {
+    description = "Create licenses for your projects right from your terminal";
+    homepage = "https://github.com/nexxeln/license-generator";
+    license = licenses.mit;
+    maintainers = [ maintainers.ryanccn ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gendef/default.nix b/nixpkgs/pkgs/development/tools/gendef/default.nix
new file mode 100644
index 000000000000..9b2418486f17
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gendef/default.nix
@@ -0,0 +1,22 @@
+{ fetchgit, lib, stdenv }:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "gendef";
+  version = "11.0.1";
+
+  src = fetchgit {
+    url = "https://git.code.sf.net/p/mingw-w64/mingw-w64.git";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-0vbAHSN+uwxoXXZtbuycP67PxjcB8Ftxd/Oij1gqE3Y=";
+  };
+
+  sourceRoot = "mingw-w64/mingw-w64-tools/gendef";
+
+  meta = {
+    description = "A tool which generate def files from DLLs";
+    homepage = "https://sourceforge.net/p/mingw-w64/wiki2/gendef/";
+    license = lib.licenses.gpl3Plus;
+    maintainers = with lib.maintainers; [ hughobrien ];
+    platforms = lib.platforms.linux;
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/gi-crystal/default.nix b/nixpkgs/pkgs/development/tools/gi-crystal/default.nix
new file mode 100644
index 000000000000..8b664ee1e00f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gi-crystal/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, fetchFromGitHub
+, crystal
+, gobject-introspection
+}:
+crystal.buildCrystalPackage rec {
+  pname = "gi-crystal";
+  version = "0.21.0";
+
+  src = fetchFromGitHub {
+    owner = "hugopl";
+    repo = "gi-crystal";
+    rev = "v${version}";
+    hash = "sha256-hL+4MvJn1z9UKCtyvU4zzIxOwRyYQ3Qt4qRb5F0J+sg=";
+  };
+
+  # Make sure gi-crystal picks up the name of the so or dylib and not the leading nix store path
+  # when the package name happens to start with “lib”.
+  patches = [ ./src.patch ./store-friendly-library-name.patch ];
+
+  nativeBuildInputs = [ gobject-introspection ];
+  buildTargets = [ "generator" ];
+
+  doCheck = false;
+  doInstallCheck = false;
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir $out
+    cp -r * $out
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "GI Crystal is a binding generator used to generate Crystal bindings for GObject based libraries using GObject Introspection.";
+    homepage = "https://github.com/hugopl/gi-crystal";
+    mainProgram = "gi-crystal";
+    maintainers = with maintainers; [ sund3RRR ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gi-crystal/src.patch b/nixpkgs/pkgs/development/tools/gi-crystal/src.patch
new file mode 100644
index 000000000000..eb18035f9941
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gi-crystal/src.patch
@@ -0,0 +1,57 @@
+--- a/src/generator/main.cr	2023-07-14 18:30:47.687581729 +0300
++++ b/src/generator/main.cr	2023-07-17 07:55:24.177630085 +0300
+@@ -1,6 +1,8 @@
+ require "colorize"
+ require "log"
+ require "option_parser"
++require "file"
++require "file_utils"
+ 
+ require "./binding_config"
+ require "./error"
+@@ -43,7 +45,7 @@
+     end
+   end
+ 
+-  output_dir = Path.new(project_dir, "lib/gi-crystal/src/auto").normalize if output_dir.nil?
++  output_dir = Path.new(Dir.current, "lib/gi-crystal/src/auto").normalize if output_dir.nil?
+   extra_bindings = argv.map { |path| Path.new(path).expand.to_s }
+ 
+   {output_dir:     output_dir,
+@@ -74,11 +76,23 @@
+   end
+ end
+ 
+-private def find_bindings : Array(String)
+-  find_pattern = Path.new(project_dir, "**/binding.yml").normalize
++private def find_bindings_yml(path) : Array(String)
++  find_pattern = File.join(path, "**/binding.yml")
+   Dir[find_pattern]
+ end
+ 
++private def find_bindings : Array(String)
++  current_directory = Dir.current
++
++  bindings = find_bindings_yml(current_directory)
++  Dir.glob(File.join(current_directory, "**/*")).each do |path|
++      if File.symlink?(path)
++        bindings += find_bindings_yml(path)
++      end
++  end
++  bindings
++end
++
+ private def format_files(dir)
+   # We need to chdir into output dir since the formatter ignores everything under `lib` dir.
+   Dir.cd(dir) { `crystal tool format` }
+@@ -102,7 +116,9 @@
+   Log.info { "Generating bindings at #{options[:output_dir]}" }
+ 
+   Generator::DocRepo.disable! unless options[:doc_gen]
+-
++  
++  FileUtils.cp_r(project_dir, File.join(Dir.current, "lib/gi-crystal"))
++  
+   binding_yamls = find_bindings.concat(options[:extra_bindings])
+   binding_yamls.each do |file|
+     Log.info { "Using binding config at #{file}" }
diff --git a/nixpkgs/pkgs/development/tools/gi-crystal/store-friendly-library-name.patch b/nixpkgs/pkgs/development/tools/gi-crystal/store-friendly-library-name.patch
new file mode 100644
index 000000000000..c6fd4e18c8db
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gi-crystal/store-friendly-library-name.patch
@@ -0,0 +1,10 @@
+--- a/src/generator/lib_gen.cr	1969-12-31 17:00:01.000000000 -0700
++++ b/src/generator/lib_gen.cr	2023-07-14 11:48:41.509397114 -0600
+@@ -10,7 +10,7 @@
+ 
+     private def libraries : Array(String)
+       namespace.shared_libraries.map do |library|
+-        library[/lib([^\/]+)\.(?:so|.+?\.dylib).*/, 1]
++        library[/(?:\/[^\/]*)+\/lib([^\/]+)\.(?:so|.+?\.dylib).*/, 1]
+       end
+     end
\ No newline at end of file
diff --git a/nixpkgs/pkgs/development/tools/ginkgo/default.nix b/nixpkgs/pkgs/development/tools/ginkgo/default.nix
new file mode 100644
index 000000000000..a894a65271a3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ginkgo/default.nix
@@ -0,0 +1,44 @@
+{ lib, buildGoModule, fetchFromGitHub, testers, ginkgo }:
+
+buildGoModule rec {
+  pname = "ginkgo";
+  version = "2.15.0";
+
+  src = fetchFromGitHub {
+    owner = "onsi";
+    repo = "ginkgo";
+    rev = "v${version}";
+    sha256 = "sha256-0Fwn62VORPmaufd7RqTkXjlXygXPVVixf8WwHgE57Lg=";
+  };
+  vendorHash = "sha256-F3z6gowVkei782qaSIOh7Ymeq1SFGxBaHM9fTSPG6qI=";
+
+  # integration tests expect more file changes
+  # types tests are missing CodeLocation
+  excludedPackages = [ "integration" "types" ];
+
+  __darwinAllowLocalNetworking = true;
+
+  passthru.tests.version = testers.testVersion {
+    package = ginkgo;
+    command = "ginkgo version";
+  };
+
+  meta = with lib; {
+    homepage = "https://onsi.github.io/ginkgo/";
+    changelog = "https://github.com/onsi/ginkgo/blob/master/CHANGELOG.md";
+    description = "A Modern Testing Framework for Go";
+    longDescription = ''
+      Ginkgo is a testing framework for Go designed to help you write expressive
+      tests. It is best paired with the Gomega matcher library. When combined,
+      Ginkgo and Gomega provide a rich and expressive DSL
+      (Domain-specific Language) for writing tests.
+
+      Ginkgo is sometimes described as a "Behavior Driven Development" (BDD)
+      framework. In reality, Ginkgo is a general purpose testing framework in
+      active use across a wide variety of testing contexts: unit tests,
+      integration tests, acceptance test, performance tests, etc.
+    '';
+    license = licenses.mit;
+    maintainers = with maintainers; [ saschagrunert jk ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gir/Cargo.lock b/nixpkgs/pkgs/development/tools/gir/Cargo.lock
new file mode 100644
index 000000000000..4a605d9ae634
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gir/Cargo.lock
@@ -0,0 +1,278 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "aho-corasick"
+version = "0.7.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac"
+dependencies = [
+ "memchr",
+]
+
+[[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 = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "clock_ticks"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c49a90f58e73ac5f41ed0ac249861ceb5f0976db35fabc2b9c2c856916042d63"
+
+[[package]]
+name = "env_logger"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0"
+dependencies = [
+ "log 0.4.17",
+]
+
+[[package]]
+name = "fix-getters-rules"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6af7c515020a47f109ddbb4ae0ea662e202c361e5d8570caaca2f1d9037d1bc"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "getopts"
+version = "0.2.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14dbbfd5c71d70241ecf9e6f13737f7b5ce823821063188d7e46c41d371eebd5"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "gir"
+version = "0.0.1"
+dependencies = [
+ "bitflags",
+ "env_logger",
+ "fix-getters-rules",
+ "getopts",
+ "hprof",
+ "log 0.4.17",
+ "once_cell",
+ "regex",
+ "rustdoc-stripper",
+ "toml",
+ "xml-rs",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+
+[[package]]
+name = "hprof"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17b42e67c01ef27237e424783538a0bc45721ecd53438fab5c3f8bbf5dfd8516"
+dependencies = [
+ "clock_ticks",
+ "log 0.3.9",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399"
+dependencies = [
+ "autocfg",
+ "hashbrown",
+]
+
+[[package]]
+name = "log"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b"
+dependencies = [
+ "log 0.4.17",
+]
+
+[[package]]
+name = "log"
+version = "0.4.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "nom8"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae01545c9c7fc4486ab7debaf2aad7003ac19431791868fb2e8066df97fad2f8"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f61fba1741ea2b3d6a1e3178721804bb716a68a6aeba1149b5d52e3d464ea66"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.50"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ef7d57beacfaf2d8aee5937dab7b7f28de3cb8b1828479bb5de2a7106f2bae2"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "regex"
+version = "1.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848"
+
+[[package]]
+name = "rustdoc-stripper"
+version = "0.1.18"
+source = "git+https://github.com/GuillaumeGomez/rustdoc-stripper#08114e390ea162c7ed35dc20cbf1d38bd8bfc130"
+
+[[package]]
+name = "serde"
+version = "1.0.152"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.152"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde_spanned"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c68e921cef53841b8925c2abadd27c9b891d9613bdc43d6b823062866df38e8"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "syn"
+version = "1.0.107"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "toml"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fb9d890e4dc9298b70f740f615f2e05b9db37dce531f6b24fb77ac993f9f217"
+dependencies = [
+ "indexmap",
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "toml_edit",
+]
+
+[[package]]
+name = "toml_datetime"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4553f467ac8e3d374bc9a177a26801e5d0f9b211aa1673fb137a403afd1c9cf5"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "729bfd096e40da9c001f778f5cdecbd2957929a24e10e5883d9392220a751581"
+dependencies = [
+ "indexmap",
+ "nom8",
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+]
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+
+[[package]]
+name = "xml-rs"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2d7d3948613f75c98fd9328cfdcc45acc4d360655289d0a7d4ec931392200a3"
diff --git a/nixpkgs/pkgs/development/tools/gir/default.nix b/nixpkgs/pkgs/development/tools/gir/default.nix
new file mode 100644
index 000000000000..afdfbda2c54e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gir/default.nix
@@ -0,0 +1,37 @@
+{ lib, fetchFromGitHub, rustPlatform }:
+
+let
+  version = "0.17.1";
+in
+rustPlatform.buildRustPackage {
+  pname = "gir";
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner = "gtk-rs";
+    repo = "gir";
+    rev = version;
+    sha256 = "sha256-WpTyT62bykq/uwzBFQXeJ1HxR1a2vKmtid8YAzk7J+Q=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "rustdoc-stripper-0.1.18" = "sha256-b+RRXJDGULEvkIZDBzU/ZchVF63pX0S9hBupeP12CkU=";
+    };
+  };
+
+  postPatch = ''
+    rm build.rs
+    sed -i '/build = "build\.rs"/d' Cargo.toml
+    echo "pub const VERSION: &str = \"$version\";" > src/gir_version.rs
+  '';
+
+  meta = with lib; {
+    description = "Tool to generate rust bindings and user API for glib-based libraries";
+    homepage = "https://github.com/gtk-rs/gir/";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ ekleog ];
+    mainProgram = "gir";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/git-ps-rs/default.nix b/nixpkgs/pkgs/development/tools/git-ps-rs/default.nix
new file mode 100644
index 000000000000..5ca3686baee7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/git-ps-rs/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+, stdenv
+, pkg-config
+, dbus
+, openssl
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "git-ps-rs";
+  version = "7.0.0";
+
+  src = fetchFromGitHub {
+    owner = "uptech";
+    repo = "git-ps-rs";
+    rev = version;
+    hash = "sha256-HPHFjYfug642NXeNmv50UzsdOAlDR9F/MtgYnzwiZP8=";
+  };
+
+  cargoHash = "sha256-mvRcOwCe5NQ+cJ9brnbZ6HLtLn+fnjYzSBQwA3Qn9PU=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ openssl dbus ] ++ lib.optionals stdenv.isDarwin [ Security ];
+
+  meta = with lib; {
+    description = "Tool for working with a stack of patches";
+    homepage = "https://git-ps.sh/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ alizter ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/github-changelog-generator/Gemfile b/nixpkgs/pkgs/development/tools/github-changelog-generator/Gemfile
new file mode 100644
index 000000000000..13106b879db9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/github-changelog-generator/Gemfile
@@ -0,0 +1,4 @@
+# frozen_string_literal: true
+source "https://rubygems.org"
+
+gem "github_changelog_generator", "1.16.4"
diff --git a/nixpkgs/pkgs/development/tools/github-changelog-generator/Gemfile.lock b/nixpkgs/pkgs/development/tools/github-changelog-generator/Gemfile.lock
new file mode 100644
index 000000000000..726ef5ae7bbe
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/github-changelog-generator/Gemfile.lock
@@ -0,0 +1,101 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    activesupport (7.0.1)
+      concurrent-ruby (~> 1.0, >= 1.0.2)
+      i18n (>= 1.6, < 2)
+      minitest (>= 5.1)
+      tzinfo (~> 2.0)
+    addressable (2.8.0)
+      public_suffix (>= 2.0.2, < 5.0)
+    async (1.30.1)
+      console (~> 1.10)
+      nio4r (~> 2.3)
+      timers (~> 4.1)
+    async-http (0.56.5)
+      async (>= 1.25)
+      async-io (>= 1.28)
+      async-pool (>= 0.2)
+      protocol-http (~> 0.22.0)
+      protocol-http1 (~> 0.14.0)
+      protocol-http2 (~> 0.14.0)
+    async-http-faraday (0.11.0)
+      async-http (~> 0.42)
+      faraday
+    async-io (1.32.2)
+      async
+    async-pool (0.3.9)
+      async (>= 1.25)
+    concurrent-ruby (1.1.9)
+    console (1.14.0)
+      fiber-local
+    faraday (1.9.3)
+      faraday-em_http (~> 1.0)
+      faraday-em_synchrony (~> 1.0)
+      faraday-excon (~> 1.1)
+      faraday-httpclient (~> 1.0)
+      faraday-multipart (~> 1.0)
+      faraday-net_http (~> 1.0)
+      faraday-net_http_persistent (~> 1.0)
+      faraday-patron (~> 1.0)
+      faraday-rack (~> 1.0)
+      faraday-retry (~> 1.0)
+      ruby2_keywords (>= 0.0.4)
+    faraday-em_http (1.0.0)
+    faraday-em_synchrony (1.0.0)
+    faraday-excon (1.1.0)
+    faraday-http-cache (2.2.0)
+      faraday (>= 0.8)
+    faraday-httpclient (1.0.1)
+    faraday-multipart (1.0.3)
+      multipart-post (>= 1.2, < 3)
+    faraday-net_http (1.0.1)
+    faraday-net_http_persistent (1.2.0)
+    faraday-patron (1.0.0)
+    faraday-rack (1.0.0)
+    faraday-retry (1.0.3)
+    fiber-local (1.0.0)
+    github_changelog_generator (1.16.4)
+      activesupport
+      async (>= 1.25.0)
+      async-http-faraday
+      faraday-http-cache
+      multi_json
+      octokit (~> 4.6)
+      rainbow (>= 2.2.1)
+      rake (>= 10.0)
+    i18n (1.8.11)
+      concurrent-ruby (~> 1.0)
+    minitest (5.15.0)
+    multi_json (1.15.0)
+    multipart-post (2.1.1)
+    nio4r (2.5.8)
+    octokit (4.22.0)
+      faraday (>= 0.9)
+      sawyer (~> 0.8.0, >= 0.5.3)
+    protocol-hpack (1.4.2)
+    protocol-http (0.22.5)
+    protocol-http1 (0.14.2)
+      protocol-http (~> 0.22)
+    protocol-http2 (0.14.2)
+      protocol-hpack (~> 1.4)
+      protocol-http (~> 0.18)
+    public_suffix (4.0.6)
+    rainbow (3.1.1)
+    rake (13.0.6)
+    ruby2_keywords (0.0.5)
+    sawyer (0.8.2)
+      addressable (>= 2.3.5)
+      faraday (> 0.8, < 2.0)
+    timers (4.3.3)
+    tzinfo (2.0.4)
+      concurrent-ruby (~> 1.0)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  github_changelog_generator (= 1.16.4)
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/development/tools/github-changelog-generator/default.nix b/nixpkgs/pkgs/development/tools/github-changelog-generator/default.nix
new file mode 100644
index 000000000000..0239259a0c81
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/github-changelog-generator/default.nix
@@ -0,0 +1,17 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "github_changelog_generator";
+  gemdir = ./.;
+  exes = [ "github_changelog_generator" ];
+
+  passthru.updateScript = bundlerUpdateScript "github-changelog-generator";
+
+  meta = with lib; {
+    description = "Fully automated changelog generation - This gem generates a changelog file based on tags, issues and merged pull requests";
+    homepage    = "https://github.com/github-changelog-generator/github-changelog-generator";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ Scriptkiddi nicknovitski ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/github-changelog-generator/gemset.nix b/nixpkgs/pkgs/development/tools/github-changelog-generator/gemset.nix
new file mode 100644
index 000000000000..3a68811b0f7b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/github-changelog-generator/gemset.nix
@@ -0,0 +1,420 @@
+{
+  activesupport = {
+    dependencies = ["concurrent-ruby" "i18n" "minitest" "tzinfo"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "02lys9pnb99hsczs551iqzjn008i8k7c728xxba7acfi9rdw9pa6";
+      type = "gem";
+    };
+    version = "7.0.1";
+  };
+  addressable = {
+    dependencies = ["public_suffix"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "022r3m9wdxljpbya69y2i3h9g3dhhfaqzidf95m6qjzms792jvgp";
+      type = "gem";
+    };
+    version = "2.8.0";
+  };
+  async = {
+    dependencies = ["console" "nio4r" "timers"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0mdv66xn5xjyaidyrp66mfnx7d4habkbfmx9y57k75h5q6fd2b65";
+      type = "gem";
+    };
+    version = "1.30.1";
+  };
+  async-http = {
+    dependencies = ["async" "async-io" "async-pool" "protocol-http" "protocol-http1" "protocol-http2"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0v3451bnn7rhgvl6ng0ys0dgm7cmyi3m41kmf5wyrpb83dhds13l";
+      type = "gem";
+    };
+    version = "0.56.5";
+  };
+  async-http-faraday = {
+    dependencies = ["async-http" "faraday"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ndynkfknabv6m9wzcmdnj4r4bhlxqkg9c6rzsjc1pk8q057kslv";
+      type = "gem";
+    };
+    version = "0.11.0";
+  };
+  async-io = {
+    dependencies = ["async"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "10l9m0x2ffvsaaxc4mfalrljjx13njkyir9w6yfif8wpszc291h8";
+      type = "gem";
+    };
+    version = "1.32.2";
+  };
+  async-pool = {
+    dependencies = ["async"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "02r6cyvralcv2yn1jj0plxynwr7rvxym13vlxd2wxk1bymfq9fd9";
+      type = "gem";
+    };
+    version = "0.3.9";
+  };
+  concurrent-ruby = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nwad3211p7yv9sda31jmbyw6sdafzmdi2i2niaz6f0wk5nq9h0f";
+      type = "gem";
+    };
+    version = "1.1.9";
+  };
+  console = {
+    dependencies = ["fiber-local"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13ylq7x9zk79r79pssnjvby14shcyamwcbap842p9gvmkf7xblmr";
+      type = "gem";
+    };
+    version = "1.14.0";
+  };
+  faraday = {
+    dependencies = ["faraday-em_http" "faraday-em_synchrony" "faraday-excon" "faraday-httpclient" "faraday-multipart" "faraday-net_http" "faraday-net_http_persistent" "faraday-patron" "faraday-rack" "faraday-retry" "ruby2_keywords"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0y32gj994ll3zlcqjmwp78r7s03iiwayij6fz2pjpkfywgvp71s6";
+      type = "gem";
+    };
+    version = "1.9.3";
+  };
+  faraday-em_http = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "12cnqpbak4vhikrh2cdn94assh3yxza8rq2p9w2j34bqg5q4qgbs";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  faraday-em_synchrony = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vgrbhkp83sngv6k4mii9f2s9v5lmp693hylfxp2ssfc60fas3a6";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  faraday-excon = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0h09wkb0k0bhm6dqsd47ac601qiaah8qdzjh8gvxfd376x1chmdh";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  faraday-http-cache = {
+    dependencies = ["faraday"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lhfwlk4mhmw9pdlgdsl2bq4x45w7s51jkxjryf18wym8iiw36g7";
+      type = "gem";
+    };
+    version = "2.2.0";
+  };
+  faraday-httpclient = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0fyk0jd3ks7fdn8nv3spnwjpzx2lmxmg2gh4inz3by1zjzqg33sc";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  faraday-multipart = {
+    dependencies = ["multipart-post"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "03qfi9020ynf7hkdiaq01sd2mllvw7fg4qiin3pk028b4wv23j3j";
+      type = "gem";
+    };
+    version = "1.0.3";
+  };
+  faraday-net_http = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fi8sda5hc54v1w3mqfl5yz09nhx35kglyx72w7b8xxvdr0cwi9j";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  faraday-net_http_persistent = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0dc36ih95qw3rlccffcb0vgxjhmipsvxhn6cw71l7ffs0f7vq30b";
+      type = "gem";
+    };
+    version = "1.2.0";
+  };
+  faraday-patron = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19wgsgfq0xkski1g7m96snv39la3zxz6x7nbdgiwhg5v82rxfb6w";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  faraday-rack = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1h184g4vqql5jv9s9im6igy00jp6mrah2h14py6mpf9bkabfqq7g";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  faraday-retry = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "153i967yrwnswqgvnnajgwp981k9p50ys1h80yz3q94rygs59ldd";
+      type = "gem";
+    };
+    version = "1.0.3";
+  };
+  fiber-local = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vrxxb09fc7aicb9zb0pmn5akggjy21dmxkdl3w949y4q05rldr9";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  github_changelog_generator = {
+    dependencies = ["activesupport" "async" "async-http-faraday" "faraday-http-cache" "multi_json" "octokit" "rainbow" "rake"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "04d6z2ysq3gzvpw91lq8mxmdlqcxkmvp8rw9zrzkmksh3pjdzli1";
+      type = "gem";
+    };
+    version = "1.16.4";
+  };
+  i18n = {
+    dependencies = ["concurrent-ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0vdd1kii40qhbr9n8qx71k2gskq6rkl8ygy8hw5hfj8bb5a364xf";
+      type = "gem";
+    };
+    version = "1.8.11";
+  };
+  minitest = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "06xf558gid4w8lwx13jwfdafsch9maz8m0g85wnfymqj63x5nbbd";
+      type = "gem";
+    };
+    version = "5.15.0";
+  };
+  multi_json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0pb1g1y3dsiahavspyzkdy39j4q377009f6ix0bh1ag4nqw43l0z";
+      type = "gem";
+    };
+    version = "1.15.0";
+  };
+  multipart-post = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zgw9zlwh2a6i1yvhhc4a84ry1hv824d6g2iw2chs3k5aylpmpfj";
+      type = "gem";
+    };
+    version = "2.1.1";
+  };
+  nio4r = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xk64wghkscs6bv2n22853k2nh39d131c6rfpnlw12mbjnnv9v1v";
+      type = "gem";
+    };
+    version = "2.5.8";
+  };
+  octokit = {
+    dependencies = ["faraday" "sawyer"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1nmdd7klyinvrrv2mggwwmc99ykaq7i379j00i37hvvaqx4giifj";
+      type = "gem";
+    };
+    version = "4.22.0";
+  };
+  protocol-hpack = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0sd85am1hj2w7z5hv19wy1nbisxfr1vqx3wlxjfz9xy7x7s6aczw";
+      type = "gem";
+    };
+    version = "1.4.2";
+  };
+  protocol-http = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lhg47b3w1d6pdwdkyha8ijzfhjrh90snwydkhwfnl5r10dd9cg5";
+      type = "gem";
+    };
+    version = "0.22.5";
+  };
+  protocol-http1 = {
+    dependencies = ["protocol-http"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0z56p7zqbyvwlrsbs19knny4v9f7ycsgblhv50ar8wgyifvsddf6";
+      type = "gem";
+    };
+    version = "0.14.2";
+  };
+  protocol-http2 = {
+    dependencies = ["protocol-hpack" "protocol-http"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1a9klpfmi7w465zq5xz8y8h1qvj42hkm0qd0nlws9d2idd767q5j";
+      type = "gem";
+    };
+    version = "0.14.2";
+  };
+  public_suffix = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1xqcgkl7bwws1qrlnmxgh8g4g9m10vg60bhlw40fplninb3ng6d9";
+      type = "gem";
+    };
+    version = "4.0.6";
+  };
+  rainbow = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0smwg4mii0fm38pyb5fddbmrdpifwv22zv3d3px2xx497am93503";
+      type = "gem";
+    };
+    version = "3.1.1";
+  };
+  rake = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15whn7p9nrkxangbs9hh75q585yfn66lv0v2mhj6q6dl6x8bzr2w";
+      type = "gem";
+    };
+    version = "13.0.6";
+  };
+  ruby2_keywords = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vz322p8n39hz3b4a9gkmz9y7a5jaz41zrm2ywf31dvkqm03glgz";
+      type = "gem";
+    };
+    version = "0.0.5";
+  };
+  sawyer = {
+    dependencies = ["addressable" "faraday"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0yrdchs3psh583rjapkv33mljdivggqn99wkydkjdckcjn43j3cz";
+      type = "gem";
+    };
+    version = "0.8.2";
+  };
+  timers = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "00xdi97gm01alfqhjgvv5sff9n1n2l6aym69s9jh8l9clg63b0jc";
+      type = "gem";
+    };
+    version = "4.3.3";
+  };
+  tzinfo = {
+    dependencies = ["concurrent-ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "10qp5x7f9hvlc0psv9gsfbxg4a7s0485wsbq1kljkxq94in91l4z";
+      type = "gem";
+    };
+    version = "2.0.4";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/github-commenter/default.nix b/nixpkgs/pkgs/development/tools/github-commenter/default.nix
new file mode 100644
index 000000000000..28986288f6c3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/github-commenter/default.nix
@@ -0,0 +1,22 @@
+{ lib, fetchFromGitHub, buildGoModule }:
+
+buildGoModule rec {
+  pname = "github-commenter";
+  version = "0.19.0";
+
+  src = fetchFromGitHub {
+    owner = "cloudposse";
+    repo = pname;
+    rev = version;
+    hash = "sha256-pCcTdj2ZgGIpa6784xkBX29LVu1o5ORqqk9j9wR/V8k=";
+  };
+
+  vendorHash = "sha256-etR//FfHRzCL6WEZSqeaKYu3eLjxA0x5mZJRe1yvycQ=";
+
+  meta = with lib; {
+    description = "Command line utility for creating GitHub comments on Commits, Pull Request Reviews or Issues";
+    license = licenses.asl20;
+    homepage = "https://github.com/cloudposse/github-commenter";
+    maintainers = [ maintainers.mmahut ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/github-copilot-intellij-agent/default.nix b/nixpkgs/pkgs/development/tools/github-copilot-intellij-agent/default.nix
new file mode 100644
index 000000000000..e6cf7744dd38
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/github-copilot-intellij-agent/default.nix
@@ -0,0 +1,82 @@
+{ stdenv, lib, fetchurl, unzip }:
+
+stdenv.mkDerivation rec {
+  pname = "github-copilot-intellij-agent";
+  version = "1.4.5.4049";
+
+  src = fetchurl {
+    name = "${pname}-${version}-plugin.zip";
+    url = "https://plugins.jetbrains.com/plugin/download?updateId=454005";
+    hash = "sha256-ibu3OcmtyLHuumhJQ6QipsNEIdEhvLUS7sb3xmnaR0U=";
+  };
+
+  nativeBuildInputs = [ unzip ];
+
+  dontUnpack = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    unzip -p $src github-copilot-intellij/copilot-agent/bin/copilot-agent-${
+      if stdenv.isDarwin then (if stdenv.isAarch64 then "macos-arm64" else "macos") else "linux"
+    } | install -m755 /dev/stdin $out/bin/copilot-agent
+
+    runHook postInstall
+  '';
+
+  # https://discourse.nixos.org/t/unrelatable-error-when-working-with-patchelf/12043
+  # https://github.com/NixOS/nixpkgs/blob/db0d8e10fc1dec84f1ccb111851a82645aa6a7d3/pkgs/development/web/now-cli/default.nix
+  preFixup = let
+    binaryLocation = "$out/bin/copilot-agent";
+    libPath = lib.makeLibraryPath [ stdenv.cc.cc ];
+  in ''
+    orig_size=$(stat --printf=%s ${binaryLocation})
+
+    patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" ${binaryLocation}
+    patchelf --set-rpath ${libPath} ${binaryLocation}
+    chmod +x ${binaryLocation}
+
+    new_size=$(stat --printf=%s ${binaryLocation})
+
+    var_skip=20
+    var_select=22
+    shift_by=$(expr $new_size - $orig_size)
+
+    function fix_offset {
+      location=$(grep -obUam1 "$1" ${binaryLocation} | cut -d: -f1)
+      location=$(expr $location + $var_skip)
+      value=$(dd if=${binaryLocation} iflag=count_bytes,skip_bytes skip=$location \
+                 bs=1 count=$var_select status=none)
+      value=$(expr $shift_by + $value)
+      echo -n $value | dd of=${binaryLocation} bs=1 seek=$location conv=notrunc
+    }
+
+    fix_offset PAYLOAD_POSITION
+    fix_offset PRELUDE_POSITION
+  '';
+
+  dontStrip = true;
+
+  meta = rec {
+    description = "The GitHub copilot IntelliJ plugin's native component";
+    longDescription = ''
+      The GitHub copilot IntelliJ plugin's native component.
+      bin/copilot-agent must be symlinked into the plugin directory, replacing the existing binary.
+
+      For example:
+
+      ```shell
+      ln -fs /run/current-system/sw/bin/copilot-agent ~/.local/share/JetBrains/IntelliJIdea2022.2/github-copilot-intellij/copilot-agent/bin/copilot-agent-linux
+      ```
+    '';
+    homepage = "https://plugins.jetbrains.com/plugin/17718-github-copilot";
+    downloadPage = homepage;
+    changelog = homepage;
+    license = lib.licenses.unfree;
+    maintainers = with lib.maintainers; [ hacker1024 ];
+    mainProgram = "copilot-agent";
+    platforms = [ "x86_64-linux" "x86_64-darwin" "aarch64-darwin" ];
+    sourceProvenance = [ lib.sourceTypes.binaryNativeCode ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/github/bump/default.nix b/nixpkgs/pkgs/development/tools/github/bump/default.nix
new file mode 100644
index 000000000000..2ba546699f17
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/github/bump/default.nix
@@ -0,0 +1,28 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+buildGoModule rec {
+  pname = "bump";
+  version = "0.2.4";
+
+  src = fetchFromGitHub {
+    owner = "mroth";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-DFgNx0H9/hZ+wUdPkEybRCIjnLsmuoYWruYgbDuFRhU=";
+  };
+
+  vendorHash = "sha256-AiXbCS3RXd6KZwIo7qzz3yM28cJloLRR+gdWqEpyims=";
+
+  doCheck = false;
+
+  ldflags = [
+    "-X main.buildVersion=${version}" "-X main.buildCommit=${version}" "-X main.buildDate=1970-01-01"
+  ];
+
+  meta = with lib; {
+    license = licenses.mit;
+    homepage = "https://github.com/mroth/bump";
+    description = "CLI tool to draft a GitHub Release for the next semantic version";
+    maintainers = with maintainers; [ doronbehar ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/github/cligh/default.nix b/nixpkgs/pkgs/development/tools/github/cligh/default.nix
new file mode 100644
index 000000000000..426a9735a90e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/github/cligh/default.nix
@@ -0,0 +1,32 @@
+{ lib, fetchFromGitHub, buildPythonApplication, pyxdg, pygithub }:
+
+buildPythonApplication rec {
+  pname = "cligh";
+  version = "0.3";
+
+  doCheck = false; # no tests
+
+  src = fetchFromGitHub {
+    owner = "CMB";
+    repo = "cligh";
+    rev = "v${version}";
+    sha256 = "0d1fd78rzl2n75xpmy1gnxh1shvcs4qm0j4qqszqvfriwkg2flxn";
+  };
+
+  propagatedBuildInputs = [ pyxdg pygithub ];
+
+  meta = with lib; {
+    homepage = "http://the-brannons.com/software/cligh.html";
+    description = "A simple command-line interface to the facilities of Github";
+    longDescription = ''
+        Cligh is a simple command-line interface to the facilities of GitHub.
+        It is written by Christopher Brannon chris@the-brannons.com. The
+        current version is 0.3, released July 23, 2016. This program is still
+        in the early stage of development. It is by no means feature-complete.
+        A friend and I consider it useful, but others may not.
+    '';
+    platforms = platforms.all;
+    license = licenses.bsd3;
+    maintainers = [ maintainers.jhhuh ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/github/github-release/default.nix b/nixpkgs/pkgs/development/tools/github/github-release/default.nix
new file mode 100644
index 000000000000..4326d4bf71ca
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/github/github-release/default.nix
@@ -0,0 +1,29 @@
+{ buildGoPackage, fetchFromGitHub, lib }:
+
+buildGoPackage rec {
+  pname = "github-release";
+  version = "0.10.0";
+
+  src = fetchFromGitHub {
+    owner = "github-release";
+    repo = "github-release";
+    rev = "v${version}";
+    sha256 = "sha256-J5Y0Kvon7DstTueCsoYvw6x4cOH/C1IaVArE0bXtZts=";
+  };
+
+  goPackagePath = "github.com/github-release/github-release";
+
+  meta = with lib; {
+    description = "Commandline app to create and edit releases on Github (and upload artifacts)";
+    longDescription = ''
+      A small commandline app written in Go that allows you to easily create and
+      delete releases of your projects on Github.
+      In addition it allows you to attach files to those releases.
+    '';
+
+    license = licenses.mit;
+    homepage = "https://github.com/github-release/github-release";
+    maintainers = with maintainers; [ ardumont j03 ];
+    platforms = with platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/glade/default.nix b/nixpkgs/pkgs/development/tools/glade/default.nix
new file mode 100644
index 000000000000..97e1cea9c6cd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/glade/default.nix
@@ -0,0 +1,85 @@
+{ stdenv
+, lib
+, gettext
+, fetchurl
+, python3
+, meson
+, ninja
+, pkg-config
+, gtk3
+, glib
+, gjs
+, enableWebkit2gtk ? stdenv.isLinux
+, webkitgtk_4_1
+, gobject-introspection
+, wrapGAppsHook
+, itstool
+, libxml2
+, docbook-xsl-nons
+, docbook_xml_dtd_42
+, gnome
+, gdk-pixbuf
+, libxslt
+, gsettings-desktop-schemas
+}:
+
+stdenv.mkDerivation rec {
+  pname = "glade";
+  version = "3.40.0";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/glade/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "McmtrqhJlyq5UXtWThmsGZd8qXdYsQntwxZwCPU+PZw=";
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    gettext
+    itstool
+    wrapGAppsHook
+    docbook-xsl-nons
+    docbook_xml_dtd_42
+    libxslt
+    libxml2
+    gobject-introspection
+  ];
+
+  buildInputs = [
+    gtk3
+    glib
+    gjs
+    libxml2
+    python3
+    python3.pkgs.pygobject3
+    gsettings-desktop-schemas
+    gdk-pixbuf
+    gnome.adwaita-icon-theme
+  ] ++ lib.optionals enableWebkit2gtk [
+    webkitgtk_4_1
+  ];
+
+  mesonFlags = [
+    (lib.mesonEnable "webkit2gtk" enableWebkit2gtk)
+  ];
+
+  postPatch = ''
+    substituteInPlace meson.build \
+      --replace 'webkit2gtk-4.0' 'webkit2gtk-4.1'
+  '';
+
+  passthru = {
+    updateScript = gnome.updateScript {
+      packageName = pname;
+    };
+  };
+
+  meta = with lib; {
+    homepage = "https://wiki.gnome.org/Apps/Glade";
+    description = "User interface designer for GTK applications";
+    maintainers = teams.gnome.members;
+    license = licenses.lgpl2;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/glamoroustoolkit/GlamorousToolkit-GetImage b/nixpkgs/pkgs/development/tools/glamoroustoolkit/GlamorousToolkit-GetImage
new file mode 100755
index 000000000000..20c2c315a350
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/glamoroustoolkit/GlamorousToolkit-GetImage
@@ -0,0 +1,25 @@
+#! /usr/bin/env nix-shell
+#! nix-shell -i bash --packages curl
+#
+# Download the latest GlamorousToolkit image to the current directory, which must be empty
+#
+set -e
+
+if [ ! -z "$(ls)" ]
+then
+	echo "Warning: the directory is not empty, continuing may overwrite some files"
+	read -p "Continue? (Y/N): " confirm && [[ $confirm == [yY] || $confirm == [yY][eE][sS] ]] || exit 1
+fi
+
+GTVERSION=$(curl -s https://api.github.com/repos/feenkcom/gtoolkit/releases/latest 2>/dev/null | grep tag_name | cut -d '"' -f 4)
+if [ -z "$GTVERSION" ]
+then
+	echo "Failed to get Gt Version string, exiting..."
+	exit 1
+fi
+
+curl -L \
+  -o gt-image.zip \
+  https://github.com/feenkcom/gtoolkit/releases/download/${GTVERSION}/GlamorousToolkit-Linux-x86_64-${GTVERSION}.zip
+unzip gt-image.zip
+rm -rf bin lib
diff --git a/nixpkgs/pkgs/development/tools/glamoroustoolkit/default.nix b/nixpkgs/pkgs/development/tools/glamoroustoolkit/default.nix
new file mode 100644
index 000000000000..3a32bfdaddaa
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/glamoroustoolkit/default.nix
@@ -0,0 +1,107 @@
+{ lib
+, stdenv
+, fetchzip
+, wrapGAppsHook
+, cairo
+, dbus
+, fontconfig
+, freetype
+, glib
+, gtk3
+, libX11
+, libXcursor
+, libXext
+, libXi
+, libXrandr
+, libXrender
+, libgit2
+, libglvnd
+, libuuid
+, libxcb
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "glamoroustoolkit";
+  version = "1.0.11";
+
+  src = fetchzip {
+    url = "https://github.com/feenkcom/gtoolkit-vm/releases/download/v${finalAttrs.version}/GlamorousToolkit-x86_64-unknown-linux-gnu.zip";
+    stripRoot = false;
+    hash = "sha256-GQeYR232zoHLIt1AzznD7rp6u4zMiAdj1+0OfXfT6AQ=";
+  };
+
+  nativeBuildInputs = [ wrapGAppsHook ];
+
+  sourceRoot = ".";
+
+  dontConfigure = true;
+  dontBuild = true;
+  dontPatchELF = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    install -d $out/bin $out/lib
+    cp -r $src/bin $src/lib $out/
+    cp ${./GlamorousToolkit-GetImage} $out/bin/GlamorousToolkit-GetImage
+
+    runHook postInstall
+  '';
+
+preFixup = let
+    libPath = lib.makeLibraryPath [
+      cairo
+      dbus
+      fontconfig
+      freetype
+      glib
+      gtk3
+      libX11
+      libXcursor
+      libXext
+      libXi
+      libXrandr
+      libXrender
+      libglvnd
+      libuuid
+      libxcb
+      stdenv.cc.cc.lib
+    ];
+  in ''
+    chmod +x $out/lib/*.so
+    patchelf \
+      --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+      --set-rpath "${libPath}:$out/lib" \
+      $out/bin/GlamorousToolkit $out/bin/GlamorousToolkit-cli
+    patchelf --shrink-rpath \
+      $out/bin/GlamorousToolkit $out/bin/GlamorousToolkit-cli
+    patchelf \
+      --set-rpath "${libPath}:$out/lib" \
+      $out/lib/*.so
+    patchelf --shrink-rpath $out/lib/*.so
+    #
+    # shrink-rpath gets it wrong for the following libraries,
+    # restore the full rpath.
+    #
+    patchelf \
+      --set-rpath "${libPath}:$out/lib" \
+      $out/lib/libPharoVMCore.so \
+      $out/lib/libWinit.so \
+      $out/lib/libPixels.so
+    patchelf --set-rpath $out/lib $out/lib/libssl.so
+
+    ln -s $out/lib/libcrypto.so $out/lib/libcrypto.so.1.1
+    ln -s $out/lib/libcairo.so $out/lib/libcairo.so.2
+    rm $out/lib/libgit2.so
+    ln -s "${libgit2}/lib/libgit2.so" $out/lib/libgit2.so.1.1
+  '';
+
+  meta = {
+    homepage = "https://gtoolkit.com";
+    description = "The GlamorousToolkit Development Environment";
+    license = lib.licenses.mit;
+    maintainers = [ lib.maintainers.akgrant43 ];
+    platforms = [ "x86_64-linux" ];
+    sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/gllvm/default.nix b/nixpkgs/pkgs/development/tools/gllvm/default.nix
new file mode 100644
index 000000000000..14b24d91dac5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gllvm/default.nix
@@ -0,0 +1,27 @@
+{ lib, buildGoModule, fetchFromGitHub, llvmPackages, getconf }:
+
+buildGoModule rec {
+  pname = "gllvm";
+  version = "1.3.1";
+
+  src = fetchFromGitHub {
+    owner = "SRI-CSL";
+    repo = "gllvm";
+    rev = "v${version}";
+    sha256 = "sha256-CoreqnMRuPuv+Ci1uyF3HJCJFwK2jwB79okynv6AHTA=";
+  };
+
+  vendorHash = null;
+
+  nativeCheckInputs = with llvmPackages; [
+    clang
+    llvm
+  ] ++ lib.optionals stdenv.isDarwin [ getconf ];
+
+  meta = with lib; {
+    homepage = "https://github.com/SRI-CSL/gllvm";
+    description = "Whole Program LLVM: wllvm ported to go";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ dtzWill ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/global-platform-pro/default.nix b/nixpkgs/pkgs/development/tools/global-platform-pro/default.nix
new file mode 100644
index 000000000000..dc533daf99a3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/global-platform-pro/default.nix
@@ -0,0 +1,71 @@
+{ lib, stdenv, fetchFromGitHub, jdk8, maven, makeWrapper, jre8_headless, pcsclite, proot, zlib }:
+
+let
+  mavenJdk8 = maven.override {
+    jdk = jdk8;
+  };
+
+  defineMvnWrapper = ''
+    mvn()
+    {
+        # One of the deps that are downloaded and run needs zlib.
+        export LD_LIBRARY_PATH="${lib.makeLibraryPath [zlib]}"
+        # Give access to ELF interpreter under FHS path, to be able to run
+        # prebuilt binaries.
+        "${lib.getExe proot}" -b "${stdenv.cc.libc}/lib:/lib64" mvn "$@"
+    }
+  '';
+in
+mavenJdk8.buildMavenPackage rec {
+  pname = "global-platform-pro";
+  version = "20.01.23";
+  GPPRO_VERSION = "v20.01.23-0-g5ad373b"; # git describe --tags --always --long --dirty
+
+  src = fetchFromGitHub {
+    owner = "martinpaljak";
+    repo = "GlobalPlatformPro";
+    rev = "v${version}";
+    sha256 = "sha256-z38I61JR4oiAkImkbwcvXoK5QsdoR986dDrOzhHsCeY=";
+  };
+
+  mvnHash = "sha256-Qbx1cNKFtSEnzhFImtCz2psYts2yhTDKzjmBBZavWwU=";
+
+  nativeBuildInputs = [ jdk8 makeWrapper ];
+
+  # Fix build error due to missing .git directory:
+  #  Failed to execute goal pl.project13.maven:git-commit-id-plugin:4.0.0:revision (retrieve-git-info) on project gppro: .git directory is not found! Please specify a valid [dotGitDirectory] in your pom.xml -> [Help 1]
+  mvnParameters = "-Dmaven.gitcommitid.skip=true";
+
+  mvnFetchExtraArgs = {
+    preConfigure = defineMvnWrapper;
+  };
+
+  preConfigure = defineMvnWrapper;
+
+  installPhase = ''
+    mkdir -p "$out/lib/java" "$out/share/java"
+    cp tool/target/gp.jar "$out/share/java"
+    makeWrapper "${jre8_headless}/bin/java" "$out/bin/gp" \
+      --add-flags "-jar '$out/share/java/gp.jar'" \
+      --prefix LD_LIBRARY_PATH : "${lib.getLib pcsclite}/lib"
+  '';
+
+  meta = with lib; {
+    description = "Command-line utility for managing applets and keys on Java Cards";
+    longDescription = ''
+      This command-line utility can be used to manage applets and keys
+      on Java Cards. It is made available as the `gp` executable.
+
+      The executable requires the PC/SC daemon running for correct execution.
+      If you run NixOS, it can be enabled with `services.pcscd.enable = true;`.
+    '';
+    homepage = "https://github.com/martinpaljak/GlobalPlatformPro";
+    sourceProvenance = with sourceTypes; [
+      fromSource
+      binaryBytecode # deps
+    ];
+    license = with licenses; [ lgpl3 ];
+    maintainers = with maintainers; [ ekleog ];
+    mainProgram = "gp";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/glock/default.nix b/nixpkgs/pkgs/development/tools/glock/default.nix
new file mode 100644
index 000000000000..b2d1e09e74f3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/glock/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "glock";
+  version = "20160816-${lib.strings.substring 0 7 rev}";
+  rev = "b8c84ff5ade15a6238ca61c20d3afc70d2e41276";
+
+  goPackagePath = "github.com/robfig/glock";
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "robfig";
+    repo = "glock";
+    sha256 = "10jwn3k71p340g8d43zjx7k1j534rcd7rss8pif09mpfrn9qndhh";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with lib; {
+    homepage = "https://github.com/robfig/glock";
+    description = "A command-line tool to lock Go dependencies to specific revisions";
+    license = licenses.mit;
+    maintainers = [ maintainers.rushmorem ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/glock/deps.nix b/nixpkgs/pkgs/development/tools/glock/deps.nix
new file mode 100644
index 000000000000..b7392d757cfc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/glock/deps.nix
@@ -0,0 +1,21 @@
+# This file was generated by go2nix.
+[
+  {
+    goPackagePath = "github.com/agtorre/gocolorize";
+    fetch = {
+      type = "git";
+      url = "https://github.com/agtorre/gocolorize";
+      rev = "f42b554bf7f006936130c9bb4f971afd2d87f671";
+      sha256 = "1dj7s8bgw9qky344d0k9gz661c0m317a08a590184drw7m51hy9p";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/tools";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/tools";
+      rev = "f1a397bba50dee815e8c73f3ec94ffc0e8df1a09";
+      sha256 = "1wy8nn2vg70n98g80i1zrk49129phyfbzxbicj748bmf82rnaxzg";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/development/tools/glpaper/default.nix b/nixpkgs/pkgs/development/tools/glpaper/default.nix
new file mode 100644
index 000000000000..3a2cb1c63c6e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/glpaper/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchFromSourcehut, meson, ninja, pkg-config, wayland
+, libX11, libGL }:
+
+stdenv.mkDerivation rec {
+  pname = "glpaper";
+  version = "unstable-2022-05-15";
+
+  src = fetchFromSourcehut {
+    owner = "~scoopta";
+    repo = pname;
+    vc = "hg";
+    rev = "f89e60b7941fb60f1069ed51af9c5bb4917aab35";
+    sha256 = "sha256-E7FKjt3NL0aAEibfaq+YS2IVvpjNjInA+Rs8SU63/3M=";
+  };
+
+  nativeBuildInputs = [ meson ninja pkg-config ];
+  buildInputs = [
+    wayland
+    libX11 # required by libglvnd
+    libGL
+  ];
+
+  meta = with lib; {
+    description =
+      "Wallpaper program for wlroots based Wayland compositors such as sway that allows you to render glsl shaders as your wallpaper";
+    homepage = "https://hg.sr.ht/~scoopta/glpaper";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ccellado ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/glslviewer/default.nix b/nixpkgs/pkgs/development/tools/glslviewer/default.nix
new file mode 100644
index 000000000000..4be67a29e399
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/glslviewer/default.nix
@@ -0,0 +1,60 @@
+{ lib, stdenv, fetchFromGitHub, glfw, pkg-config, libXrandr, libXdamage
+, libXext, libXrender, libXinerama, libXcursor, libXxf86vm, libXi
+, libX11, libGLU, python3Packages, ensureNewerSourcesForZipFilesHook
+, Cocoa
+}:
+
+stdenv.mkDerivation rec {
+  pname = "glslviewer";
+  version = "1.6.8";
+
+  src = fetchFromGitHub {
+    owner = "patriciogonzalezvivo";
+    repo = "glslViewer";
+    rev = version;
+    sha256 = "0v7x93b61ama0gmzlx1zc56jgi7bvzsfvbkfl82xzwf2h5g1zni7";
+  };
+
+  postPatch = ''
+    sed '1i#include <cstring>' -i src/tools/text.cpp # gcc12
+    sed '8i#include <cstdint>' -i src/io/fs.cpp # gcc13
+  '';
+
+  nativeBuildInputs = [ pkg-config ensureNewerSourcesForZipFilesHook python3Packages.six ];
+  buildInputs = [
+    glfw libGLU glfw libXrandr libXdamage
+    libXext libXrender libXinerama libXcursor libXxf86vm
+    libXi libX11
+  ] ++ (with python3Packages; [ python setuptools wrapPython ])
+    ++ lib.optional stdenv.isDarwin Cocoa;
+  pythonPath = with python3Packages; [ pyyaml requests ];
+
+  # Makefile has /usr/local/bin hard-coded for 'make install'
+  preConfigure = ''
+    substituteInPlace Makefile \
+        --replace '/usr/local' "$out" \
+        --replace '/usr/bin/clang++' 'clang++'
+    substituteInPlace Makefile \
+        --replace 'python setup.py install' "python setup.py install --prefix=$out"
+    2to3 -w bin/*
+  '';
+
+  preInstall = ''
+    mkdir -p $out/bin $(toPythonPath "$out")
+    export PYTHONPATH=$PYTHONPATH:$(toPythonPath "$out")
+  '';
+
+  postInstall = ''
+    wrapPythonPrograms
+  '';
+
+  meta = with lib; {
+    description = "Live GLSL coding renderer";
+    homepage = "https://patriciogonzalezvivo.com/2015/glslViewer/";
+    license = licenses.bsd3;
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = [ maintainers.hodapp ];
+    # never built on aarch64-darwin since first introduction in nixpkgs
+    broken = stdenv.isDarwin && stdenv.isAarch64;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gnome-desktop-testing/default.nix b/nixpkgs/pkgs/development/tools/gnome-desktop-testing/default.nix
new file mode 100644
index 000000000000..51f6eae6f341
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gnome-desktop-testing/default.nix
@@ -0,0 +1,46 @@
+{ stdenv
+, lib
+, glib
+, autoreconfHook
+, pkg-config
+, systemd
+, fetchFromGitLab
+, nix-update-script
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gnome-desktop-testing";
+  version = "2021.1";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.gnome.org";
+    owner = "GNOME";
+    repo = "gnome-desktop-testing";
+    rev = "v${version}";
+    sha256 = "sha256-PWn4eEZskY0YgMpf6O2dgXNSu8b8T311vFHREv2HE/Q=";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    pkg-config
+  ];
+
+  buildInputs = [
+    glib
+    systemd
+  ];
+
+  enableParallelBuilding = true;
+
+  passthru = {
+    updateScript = nix-update-script { };
+  };
+
+  meta = with lib; {
+    description = "GNOME test runner for installed tests";
+    homepage = "https://wiki.gnome.org/Initiatives/GnomeGoals/InstalledTests";
+    license = licenses.lgpl2Plus;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.jtojnar ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gnulib/default.nix b/nixpkgs/pkgs/development/tools/gnulib/default.nix
new file mode 100644
index 000000000000..be6719c3512c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gnulib/default.nix
@@ -0,0 +1,48 @@
+{ lib, stdenv, fetchFromSavannah, python3 }:
+
+stdenv.mkDerivation rec {
+  pname = "gnulib";
+  version = "20231109";
+
+  src = fetchFromSavannah {
+    repo = "gnulib";
+    rev = "2dd1a7984c6b3e6056cef7e3f9933e0039c21634";
+    hash = "sha256-QtWf3mljEnr0TTogkoKN63Y5HTm14A2e/sIXX3xe2SE=";
+  };
+
+  postPatch = ''
+    patchShebangs gnulib-tool.py
+  '';
+
+  buildInputs = [ python3 ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp -r * $out/
+    ln -s $out/lib $out/include
+    ln -s $out/gnulib-tool $out/bin/
+  '';
+
+  # do not change headers to not update all vendored build files
+  dontFixup = true;
+
+  passthru = {
+    # This patch is used by multiple other packages (currently:
+    # gnused, gettext) which contain vendored copies of gnulib.
+    # Without it, compilation will fail with error messages about
+    # "__LDBL_REDIR1_DECL" or similar on platforms with longdouble
+    # redirects (currently powerpc64).  Once all of those other
+    # packages make a release with a newer gnulib we can drop this
+    # patch.
+    longdouble-redirect-patch = ./gnulib-longdouble-redirect.patch;
+  };
+
+  meta = with lib; {
+    description = "Central location for code to be shared among GNU packages";
+    homepage = "https://www.gnu.org/software/gnulib/";
+    changelog = "https://git.savannah.gnu.org/gitweb/?p=gnulib.git;a=blob;f=ChangeLog";
+    license = licenses.gpl3Plus;
+    mainProgram = "gnulib-tool";
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gnulib/gnulib-longdouble-redirect.patch b/nixpkgs/pkgs/development/tools/gnulib/gnulib-longdouble-redirect.patch
new file mode 100644
index 000000000000..f684292dc8bd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gnulib/gnulib-longdouble-redirect.patch
@@ -0,0 +1,72 @@
+
+Below is the subset of gnulib commit
+776af40e09b476a41073131a90022572f448c189 which deals with long double
+redirects.  The rest of that commit has been removed.
+
+diff --git a/lib/cdefs.h b/lib/cdefs.h
+index fd72b7b..4383e70 100644
+--- a/lib/cdefs.h
++++ b/lib/cdefs.h
+@@ -483,7 +493,37 @@
+ # include <bits/long-double.h>
+ #endif
+ 
+-#if defined __LONG_DOUBLE_MATH_OPTIONAL && defined __NO_LONG_DOUBLE_MATH
++#if __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 1
++# ifdef __REDIRECT
++
++/* Alias name defined automatically.  */
++#  define __LDBL_REDIR(name, proto) ... unused__ldbl_redir
++#  define __LDBL_REDIR_DECL(name) \
++  extern __typeof (name) name __asm (__ASMNAME ("__" #name "ieee128"));
++
++/* Alias name defined automatically, with leading underscores.  */
++#  define __LDBL_REDIR2_DECL(name) \
++  extern __typeof (__##name) __##name \
++    __asm (__ASMNAME ("__" #name "ieee128"));
++
++/* Alias name defined manually.  */
++#  define __LDBL_REDIR1(name, proto, alias) ... unused__ldbl_redir1
++#  define __LDBL_REDIR1_DECL(name, alias) \
++  extern __typeof (name) name __asm (__ASMNAME (#alias));
++
++#  define __LDBL_REDIR1_NTH(name, proto, alias) \
++  __REDIRECT_NTH (name, proto, alias)
++#  define __REDIRECT_NTH_LDBL(name, proto, alias) \
++  __LDBL_REDIR1_NTH (name, proto, __##alias##ieee128)
++
++/* Unused.  */
++#  define __REDIRECT_LDBL(name, proto, alias) ... unused__redirect_ldbl
++#  define __LDBL_REDIR_NTH(name, proto) ... unused__ldbl_redir_nth
++
++# else
++_Static_assert (0, "IEEE 128-bits long double requires redirection on this platform");
++# endif
++#elif defined __LONG_DOUBLE_MATH_OPTIONAL && defined __NO_LONG_DOUBLE_MATH
+ # define __LDBL_COMPAT 1
+ # ifdef __REDIRECT
+ #  define __LDBL_REDIR1(name, proto, alias) __REDIRECT (name, proto, alias)
+@@ -492,6 +532,8 @@
+ #  define __LDBL_REDIR1_NTH(name, proto, alias) __REDIRECT_NTH (name, proto, alias)
+ #  define __LDBL_REDIR_NTH(name, proto) \
+   __LDBL_REDIR1_NTH (name, proto, __nldbl_##name)
++#  define __LDBL_REDIR2_DECL(name) \
++  extern __typeof (__##name) __##name __asm (__ASMNAME ("__nldbl___" #name));
+ #  define __LDBL_REDIR1_DECL(name, alias) \
+   extern __typeof (name) name __asm (__ASMNAME (#alias));
+ #  define __LDBL_REDIR_DECL(name) \
+@@ -502,11 +544,13 @@
+   __LDBL_REDIR1_NTH (name, proto, __nldbl_##alias)
+ # endif
+ #endif
+-#if !defined __LDBL_COMPAT || !defined __REDIRECT
++#if (!defined __LDBL_COMPAT && __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 0) \
++    || !defined __REDIRECT
+ # define __LDBL_REDIR1(name, proto, alias) name proto
+ # define __LDBL_REDIR(name, proto) name proto
+ # define __LDBL_REDIR1_NTH(name, proto, alias) name proto __THROW
+ # define __LDBL_REDIR_NTH(name, proto) name proto __THROW
++# define __LDBL_REDIR2_DECL(name)
+ # define __LDBL_REDIR_DECL(name)
+ # ifdef __REDIRECT
+ #  define __REDIRECT_LDBL(name, proto, alias) __REDIRECT (name, proto, alias)
diff --git a/nixpkgs/pkgs/development/tools/go-bindata-assetfs/default.nix b/nixpkgs/pkgs/development/tools/go-bindata-assetfs/default.nix
new file mode 100644
index 000000000000..dff78895fa57
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/go-bindata-assetfs/default.nix
@@ -0,0 +1,23 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "go-bindata-assetfs";
+  version = "unstable-2022-04-12";
+
+  src = fetchFromGitHub {
+    owner = "elazarl";
+    repo = "go-bindata-assetfs";
+    rev = "de3be3ce9537d87338bf26ac211d02d4fa568bb8";
+    hash = "sha256-yQgIaTl06nmIu8BfmQzrvEnlPQ2GQ/2nnvTmYXCL1oI=";
+  };
+
+  vendorHash = null;
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "Serve embedded files from jteeuwen/go-bindata";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ avnik ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/go-bindata/default.nix b/nixpkgs/pkgs/development/tools/go-bindata/default.nix
new file mode 100644
index 000000000000..5d3e5d714f25
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/go-bindata/default.nix
@@ -0,0 +1,27 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "go-bindata";
+  version = "4.0.2";
+
+  src = fetchFromGitHub {
+    owner = "kevinburke";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-3/1RqJrv1fsPKsZpurp2dHsMg8FJBcFlI/pwwCf5H6E=";
+  };
+
+  vendorHash = null;
+
+  subPackages = [ "go-bindata" ];
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/kevinburke/go-bindata";
+    changelog = "https://github.com/kevinburke/go-bindata/blob/v${version}/CHANGELOG.md";
+    description = "A small utility which generates Go code from any file, useful for embedding binary data in a Go program";
+    maintainers = with maintainers; [ ];
+    license = licenses.cc0;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/go-callvis/default.nix b/nixpkgs/pkgs/development/tools/go-callvis/default.nix
new file mode 100644
index 000000000000..d45ebc4ab60b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/go-callvis/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "go-callvis";
+  version = "0.7.0";
+
+  src = fetchFromGitHub {
+    owner = "ofabry";
+    repo = "go-callvis";
+    rev = "v${version}";
+    hash = "sha256-PIzmnqlK+uFtzZW4H0xpP5c+X30hFvOjQydvreJn4xM=";
+  };
+
+  vendorHash = "sha256-AfbUxA5C5dH70+vqC+1RGaTt7S0FL9CBcxel0ifmHKs=";
+
+  ldflags = [ "-s" "-w" ];
+
+  # Build errors in github.com/goccy/go-graphviz/internal/ccall when format hardening is enabled:
+  #   cc1: error: '-Wformat-security' ignored without '-Wformat' [-Werror=format-security]
+  hardeningDisable = [ "format" ];
+
+  meta = with lib; {
+    description = "Visualize call graph of a Go program using Graphviz";
+    homepage = "https://github.com/ofabry/go-callvis";
+    license = licenses.mit;
+    maintainers = with maintainers; [ meain ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/go-containerregistry/default.nix b/nixpkgs/pkgs/development/tools/go-containerregistry/default.nix
new file mode 100644
index 000000000000..a6e0d9c47681
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/go-containerregistry/default.nix
@@ -0,0 +1,43 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+let bins = [ "crane" "gcrane" ]; in
+
+buildGoModule rec {
+  pname = "go-containerregistry";
+  version = "0.19.0";
+
+  src = fetchFromGitHub {
+    owner = "google";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-9sKJM1QnQcGF9d5oT1YEoSeIlg0wh2VOQ6cC1QCrcgY=";
+  };
+  vendorHash = null;
+
+  subPackages = [ "cmd/crane" "cmd/gcrane" ];
+
+  outputs = [ "out" ] ++ bins;
+
+  ldflags =
+    let t = "github.com/google/go-containerregistry"; in
+    [ "-s" "-w" "-X ${t}/cmd/crane/cmd.Version=v${version}" "-X ${t}/pkg/v1/remote/transport.Version=${version}" ];
+
+  postInstall =
+    lib.concatStringsSep "\n" (
+      map (bin: ''
+        mkdir -p ''$${bin}/bin &&
+        mv $out/bin/${bin} ''$${bin}/bin/ &&
+        ln -s ''$${bin}/bin/${bin} $out/bin/
+      '') bins
+    );
+
+  # NOTE: no tests
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Tools for interacting with remote images and registries including crane and gcrane";
+    homepage = "https://github.com/google/go-containerregistry";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ yurrriq ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/go-jet/default.nix b/nixpkgs/pkgs/development/tools/go-jet/default.nix
new file mode 100644
index 000000000000..aea629bebefe
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/go-jet/default.nix
@@ -0,0 +1,53 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "go-jet";
+  version = "2.10.1";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = "jet";
+    rev = "v${version}";
+    sha256 = "sha256-G/yKS4YFKOVkuoqT/Qh12ul43dKo4W23EIyCgmeaUoo=";
+  };
+
+  vendorHash = "sha256-AwrtLTzKqKjFf5fV3JWYWyaqzHJjMNrYuSXhHXyV5HE=";
+
+  subPackages = [ "cmd/jet" ];
+
+  tags = [
+    "mysql"
+    "golang"
+    "postgres"
+    "sql"
+    "database"
+    "code-generator"
+    "sqlite"
+    "postgresql"
+    "mariadb"
+    "sql-query"
+    "codegenerator"
+    "typesafe"
+    "sql-builder"
+    "datamapper"
+    "code-completion"
+    "sql-queries"
+    "cockroachdb"
+    "sql-query-builder"
+    "sqlbuilder"
+    "typesafety"
+  ];
+
+  postPatch = ''
+    # removing the tests which depend on external data
+    rm -rf tests/{sqlite,postgres,mysql}
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/go-jet/jet";
+    description = "Type safe SQL builder with code generation and automatic query result data mapping";
+    maintainers = with maintainers; [ mrityunjaygr8 ];
+    license = licenses.asl20;
+    mainProgram = "jet";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/go-junit-report/default.nix b/nixpkgs/pkgs/development/tools/go-junit-report/default.nix
new file mode 100644
index 000000000000..2a7379db0847
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/go-junit-report/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "go-junit-report";
+  version = "2.1.0";
+
+  src = fetchFromGitHub {
+    owner = "jstemmer";
+    repo = "go-junit-report";
+    rev = "v${version}";
+    sha256 = "sha256-s4XVjACmpd10C5k+P3vtcS/aWxI6UkSUPyxzLhD2vRI=";
+  };
+
+  vendorHash = "sha256-+KmC7m6xdkWTT/8MkGaW9gqkzeZ6LWL0DXbt+12iTHY=";
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "Convert go test output to junit xml";
+    homepage = "https://github.com/jstemmer/go-junit-report";
+    license = licenses.mit;
+    maintainers = with maintainers; [ cryptix ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/go-migrate/default.nix b/nixpkgs/pkgs/development/tools/go-migrate/default.nix
new file mode 100644
index 000000000000..eec4419ef3bb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/go-migrate/default.nix
@@ -0,0 +1,28 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "go-migrate";
+  version = "4.17.0";
+
+  src = fetchFromGitHub {
+    owner = "golang-migrate";
+    repo = "migrate";
+    rev = "v${version}";
+    sha256 = "sha256-lsqSWhozTdLPwqnwYMLxH3kF62MsUCcjzKJ7qTU79qQ=";
+  };
+
+  proxyVendor = true; # darwin/linux hash mismatch
+  vendorHash = "sha256-3otiRbswhENs/YvKKr+ZeodLWtK7fhCjEtlMDlkLOlY=";
+
+  subPackages = [ "cmd/migrate" ];
+
+  tags = [ "postgres" "mysql" "redshift" "cassandra" "spanner" "cockroachdb" "clickhouse" "mongodb" "sqlserver" "firebird" "neo4j" "pgx" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/golang-migrate/migrate";
+    description = "Database migrations. CLI and Golang library";
+    maintainers = with maintainers; [ offline ];
+    license = licenses.mit;
+    mainProgram = "migrate";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/go-minimock/default.nix b/nixpkgs/pkgs/development/tools/go-minimock/default.nix
new file mode 100644
index 000000000000..279004b9c8c7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/go-minimock/default.nix
@@ -0,0 +1,31 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "go-minimock";
+  version = "3.3.6";
+
+  src = fetchFromGitHub {
+    owner = "gojuno";
+    repo = "minimock";
+    rev = "v${version}";
+    sha256 = "sha256-ru3+MJ1GbzVDi6niiz7SpL0qa9mE89uhcH5/PHbVugE=";
+  };
+
+  ldflags = [
+    "-s" "-w" "-X main.version=${version}"
+  ];
+
+  vendorHash = "sha256-eCM/EDdXZSa+pg35V6YiZ5gaC4rj8Wt8HhCgaMPoP+Y=";
+
+  doCheck = true;
+
+  subPackages = [ "cmd/minimock" "." ];
+
+  meta = with lib; {
+    homepage = "https://github.com/gojuno/minimock";
+    description = "A golang mock generator from interfaces";
+    license = licenses.mit;
+    maintainers = with maintainers; [ svrana ];
+    mainProgram = "minimock";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/go-mockery/default.nix b/nixpkgs/pkgs/development/tools/go-mockery/default.nix
new file mode 100644
index 000000000000..148e814b5568
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/go-mockery/default.nix
@@ -0,0 +1,67 @@
+{ lib, buildGoModule, fetchFromGitHub, go-mockery, runCommand, go }:
+
+buildGoModule rec {
+  pname = "go-mockery";
+  version = "2.38.0";
+
+  src = fetchFromGitHub {
+    owner = "vektra";
+    repo = "mockery";
+    rev = "v${version}";
+    sha256 = "sha256-fWS4oF/CWlOX6XgeLxsmEfPDDgp1WBSDC4fx2Aid9p0=";
+  };
+
+  preCheck = ''
+    substituteInPlace ./pkg/generator_test.go --replace 0.0.0-dev ${version}
+    substituteInPlace ./pkg/logging/logging_test.go --replace v0.0 v${lib.versions.majorMinor version}
+  '';
+
+  ldflags = [
+    "-s" "-w"
+    "-X" "github.com/vektra/mockery/v2/pkg/logging.SemVer=v${version}"
+  ];
+
+  CGO_ENABLED = false;
+
+  proxyVendor = true;
+  vendorHash = "sha256-iAZjWRW2TWKqcs94lepkcIXUPyPl9qlGhxlX84rN3ok=";
+
+  passthru.tests = {
+    generateMock = runCommand "${pname}-test" {
+      nativeBuildInputs = [ go-mockery ];
+      buildInputs = [ go ];
+    } ''
+      if [[ $(mockery --version) != *"${version}"* ]]; then
+        echo "Error: program version does not match package version"
+        exit 1
+      fi
+
+      export HOME=$TMPDIR
+
+      cat <<EOF > foo.go
+      package main
+
+      type Foo interface {
+        Bark() string
+      }
+      EOF
+
+      mockery --name Foo --dir .
+
+      if [[ ! -f "mocks/Foo.go" ]]; then
+        echo "Error: mocks/Foo.go was not generated by ${pname}"
+        exit 1
+      fi
+
+      touch $out
+    '';
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/vektra/mockery";
+    description = "A mock code autogenerator for Golang";
+    maintainers = with maintainers; [ fbrs ];
+    mainProgram = "mockery";
+    license = licenses.bsd3;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/go-mod-graph-chart/default.nix b/nixpkgs/pkgs/development/tools/go-mod-graph-chart/default.nix
new file mode 100644
index 000000000000..11f7f4c6d9cf
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/go-mod-graph-chart/default.nix
@@ -0,0 +1,29 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "go-mod-graph-chart";
+  version = "0.5.3";
+
+  src = fetchFromGitHub {
+    owner = "PaulXu-cn";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-vitUZXQyAj72ed9Gukr/sAT/iWWMhwsxjZhf2a9CM7I=";
+  };
+
+  vendorHash = null;
+
+  # check requires opening webpage
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A tool build chart by go mod graph output with zero dependencies";
+    homepage = "https://github.com/PaulXu-cn/go-mod-graph-chart";
+    mainProgram = "gmchart";
+    license = licenses.mit;
+    maintainers = with maintainers; [ aleksana ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/go-motion/default.nix b/nixpkgs/pkgs/development/tools/go-motion/default.nix
new file mode 100644
index 000000000000..7505522d46fd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/go-motion/default.nix
@@ -0,0 +1,34 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "motion";
+  version = "1.2.0";
+
+  src = fetchFromGitHub {
+    owner = "fatih";
+    repo = "motion";
+    rev = "v${version}";
+    sha256 = "sha256-7vkMhjO4JUAf0sUcKiMjqJ5GzLb//QoHd7Cagerx4/s=";
+  };
+
+  vendorHash = null;
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "Navigation and insight in Go";
+    longDescription = ''
+      Motion is a tool that was designed to work with editors. It is providing
+      contextual information for a given offset(option) from a file or
+      directory of files. Editors can use these informations to implement
+      navigation, text editing, etc... that are specific to a Go source code.
+
+      It's optimized and created to work with vim-go, but it's designed to work
+      with any editor. It's currently work in progress and open to change.
+    '';
+    homepage = "https://github.com/fatih/motion";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ kalbasit ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/go-outline/default.nix b/nixpkgs/pkgs/development/tools/go-outline/default.nix
new file mode 100644
index 000000000000..1d23818a96fb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/go-outline/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "go-outline";
+  version = "unstable-2021-06-08";
+
+  src = fetchFromGitHub {
+    owner = "ramya-rao-a";
+    repo = "go-outline";
+    rev = "9736a4bde949f321d201e5eaa5ae2bcde011bf00";
+    sha256 = "sha256-5ns6n1UO9kRSw8iio4dmJDncsyvFeN01bjxHxQ9Fae4=";
+  };
+
+  vendorHash = "sha256-jYYtSXdJd2eUc80UfwRRMPcX6tFiXE3LbxV3NAdKVKE=";
+
+  meta = with lib; {
+    description = "Utility to extract JSON representation of declarations from a Go source file";
+    homepage = "https://github.com/ramya-rao-a/go-outline";
+    maintainers = with maintainers; [ vdemeester ];
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/go-protobuf/default.nix b/nixpkgs/pkgs/development/tools/go-protobuf/default.nix
new file mode 100644
index 000000000000..0f2e302aad05
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/go-protobuf/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "go-protobuf";
+  version = "1.5.3";
+
+  src = fetchFromGitHub {
+    owner = "golang";
+    repo = "protobuf";
+    rev = "v${version}";
+    sha256 = "sha256-cRB4oicBfYvhqtzafWWmf82AuvSnB0NhHwpp0pjgwQ0=";
+  };
+
+  vendorHash = "sha256-CcJjFMslSUiZMM0LLMM3BR53YMxyWk8m7hxjMI9tduE=";
+
+  meta = with lib; {
+    homepage    = "https://github.com/golang/protobuf";
+    description = " Go bindings for protocol buffer";
+    maintainers = with maintainers; [ lewo ];
+    license     = licenses.bsd3;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/go-swag/default.nix b/nixpkgs/pkgs/development/tools/go-swag/default.nix
new file mode 100644
index 000000000000..0fc2781e5fe0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/go-swag/default.nix
@@ -0,0 +1,25 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+buildGoModule rec {
+  pname = "go-swag";
+  version = "1.8.12";
+
+  src = fetchFromGitHub {
+    owner = "swaggo";
+    repo = "swag";
+    rev = "v${version}";
+    sha256 = "sha256-2rnaPN4C4pn9Whk5X2z1VVxm679EUpQdumJZx5uulr4=";
+  };
+
+  vendorHash = "sha256-yQPmiK1CQNn3sr482OEkdRLK6YP8CvPMA/nPGdVJbMc=";
+
+  subPackages = [ "cmd/swag" ];
+
+  meta = with lib; {
+    description = "Automatically generate RESTful API documentation with Swagger 2.0 for Go";
+    homepage = "https://github.com/swaggo/swag";
+    license = licenses.mit;
+    maintainers = with maintainers; [ stephenwithph ];
+    mainProgram = "swag";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/go-swagger/default.nix b/nixpkgs/pkgs/development/tools/go-swagger/default.nix
new file mode 100644
index 000000000000..5a536db51c22
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/go-swagger/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "go-swagger";
+  version = "0.30.5";
+
+  src = fetchFromGitHub {
+    owner = "go-swagger";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-38Ytv/mQVi0xTydFTPNizJIjYPL+lOws6jHsRjxSC4o=";
+  };
+
+  vendorHash = "sha256-TqoTzxPGF0BBUfLtYWkljRcmr08m4zo5iroWMklxL7U=";
+
+  doCheck = false;
+
+  subPackages = [ "cmd/swagger" ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/go-swagger/go-swagger/cmd/swagger/commands.Version=${version}"
+    "-X github.com/go-swagger/go-swagger/cmd/swagger/commands.Commit=${src.rev}"
+  ];
+
+  meta = with lib; {
+    description = "Golang implementation of Swagger 2.0, representation of your RESTful API";
+    homepage = "https://github.com/go-swagger/go-swagger";
+    changelog = "https://github.com/go-swagger/go-swagger/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ kalbasit ];
+    mainProgram = "swagger";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/go-symbols/default.nix b/nixpkgs/pkgs/development/tools/go-symbols/default.nix
new file mode 100644
index 000000000000..a259b768561b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/go-symbols/default.nix
@@ -0,0 +1,23 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "go-symbols";
+  version = "0.1.1";
+
+  goPackagePath = "github.com/acroca/go-symbols";
+  goDeps = ./deps.nix;
+
+  src = fetchFromGitHub {
+    owner = "acroca";
+    repo = "go-symbols";
+    rev = "v${version}";
+    sha256 = "0yyzw6clndb2r5j9isyd727njs98zzp057v314vfvknsm8g7hqrz";
+  };
+
+  meta = {
+    description = "A utility for extracting a JSON representation of the package symbols from a go source tree";
+    homepage = "https://github.com/acroca/go-symbols";
+    maintainers = with lib.maintainers; [ vdemeester ];
+    license = lib.licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/go-symbols/deps.nix b/nixpkgs/pkgs/development/tools/go-symbols/deps.nix
new file mode 100644
index 000000000000..6a333b58bec6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/go-symbols/deps.nix
@@ -0,0 +1,11 @@
+[
+  {
+    goPackagePath = "golang.org/x/tools";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/tools";
+      rev = "96b5a5404f303f074e6117d832a9873c439508f0";
+      sha256 = "1h6r9xyp1v3w2x8d108vzghn65l6ia2h895irypmrwymfcp30y42";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/development/tools/go-task/default.nix b/nixpkgs/pkgs/development/tools/go-task/default.nix
new file mode 100644
index 000000000000..3c5e13473fc6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/go-task/default.nix
@@ -0,0 +1,53 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+, testers
+, go-task
+}:
+
+buildGoModule rec {
+  pname = "go-task";
+  version = "3.34.1";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = "task";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-ngDAItX7aTWDpf2lOiJYUC7QXXzrexPV3nvZ/esLb7g=";
+  };
+
+  vendorHash = "sha256-Czf7Bkld1NWJzU34NfDFL/Us9awnhlv8V9S4XxeoGxY=";
+
+  doCheck = false;
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  subPackages = [ "cmd/task" ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=github.com/go-task/task/v3/internal/version.version=${version}"
+  ];
+
+  postInstall = ''
+    ln -s $out/bin/task $out/bin/go-task
+
+    installShellCompletion completion/{bash,fish,zsh}/*
+  '';
+
+  passthru.tests = {
+    version = testers.testVersion {
+      package = go-task;
+    };
+  };
+
+  meta = with lib; {
+    homepage = "https://taskfile.dev/";
+    description = "A task runner / simpler Make alternative written in Go";
+    changelog = "https://github.com/go-task/task/blob/v${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ parasrah ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/go-toml/default.nix b/nixpkgs/pkgs/development/tools/go-toml/default.nix
new file mode 100644
index 000000000000..b9907280e387
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/go-toml/default.nix
@@ -0,0 +1,27 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "go-toml";
+  version = "2.1.1";
+
+  src = fetchFromGitHub {
+    owner = "pelletier";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-SnSdVBIIir7QSexk//ozpxnbNr92KyWP2sSBg87jGcw=";
+  };
+
+  vendorHash = "sha256-XOcCsb3zUChiYLTfOCbRQF71E2khzSt/ApFI8NAS13U=";
+
+  excludedPackages = [ "cmd/gotoml-test-decoder" "cmd/tomltestgen" ];
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "Go library for the TOML language";
+    homepage = "https://github.com/pelletier/go-toml";
+    changelog = "https://github.com/pelletier/go-toml/releases/tag/v${version}";
+    maintainers = [ maintainers.marsam ];
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/go-tools/default.nix b/nixpkgs/pkgs/development/tools/go-tools/default.nix
new file mode 100644
index 000000000000..9db6b7116f67
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/go-tools/default.nix
@@ -0,0 +1,29 @@
+{ buildGoModule
+, lib
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "go-tools";
+  version = "2023.1.6";
+
+  src = fetchFromGitHub {
+    owner = "dominikh";
+    repo = "go-tools";
+    rev = version;
+    sha256 = "sha256-Ecp3A3Go7mp8/ghMjTGqCNlRkCeEAb3fzRuwahWcM2I=";
+  };
+
+  vendorHash = "sha256-dUO2Iw+RYk8s+3IV2/TSKjaX61YkD/AROq3177r+wKE=";
+
+  excludedPackages = [ "website" ];
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A collection of tools and libraries for working with Go code, including linters and static analysis";
+    homepage = "https://staticcheck.io";
+    license = licenses.mit;
+    maintainers = with maintainers; [ rvolosatovs kalbasit smasher164 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/goa/default.nix b/nixpkgs/pkgs/development/tools/goa/default.nix
new file mode 100644
index 000000000000..19ac74f7f427
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/goa/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "goa";
+  version = "3.14.6";
+
+  src = fetchFromGitHub {
+    owner = "goadesign";
+    repo = "goa";
+    rev = "v${version}";
+    hash = "sha256-u26k4jKT68AMb9pQf/5FCuX+yGpcuGJ6uOIqXfWbg2o=";
+  };
+  vendorHash = "sha256-PcPYsTjWt4N27ahHCdx+ZylujmuX/hopN9o7vKUAA5w=";
+
+  subPackages = [ "cmd/goa" ];
+
+  meta = with lib; {
+    description = "Design-based APIs and microservices in Go";
+    homepage = "https://goa.design";
+    license = licenses.mit;
+    maintainers = with maintainers; [ rushmorem ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gocode-gomod/default.nix b/nixpkgs/pkgs/development/tools/gocode-gomod/default.nix
new file mode 100644
index 000000000000..9c1752b9ad11
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gocode-gomod/default.nix
@@ -0,0 +1,45 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "gocode-gomod";
+  version = "1.0.0";
+
+  # we must allow references to the original `go` package,
+  # because `gocode` needs to dig into $GOROOT to provide completions for the
+  # standard packages.
+  allowGoReference = true;
+
+  src = fetchFromGitHub {
+    owner = "stamblerre";
+    repo = "gocode";
+    rev = "v${version}";
+    sha256 = "YAOYrPPKgnjCErq8+iW0Le51clGBv0MJy2Nnn7UVo/s=";
+  };
+
+  vendorHash = null;
+
+  postInstall = ''
+    mv $out/bin/gocode $out/bin/gocode-gomod
+  '';
+
+  doCheck = false; # fails on go 1.17
+
+  meta = with lib; {
+    description = "An autocompletion daemon for the Go programming language";
+    longDescription = ''
+      Gocode is a helper tool which is intended to be integrated with your
+      source code editor, like vim, neovim and emacs. It provides several
+      advanced capabilities, which currently includes:
+
+        - Context-sensitive autocompletion
+
+      It is called daemon, because it uses client/server architecture for
+      caching purposes. In particular, it makes autocompletions very fast.
+      Typical autocompletion time with warm cache is 30ms, which is barely
+      noticeable.
+    '';
+    homepage = "https://github.com/stamblerre/gocode";
+    license = licenses.mit;
+    maintainers = with maintainers; [ kalbasit rvolosatovs ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/goconst/default.nix b/nixpkgs/pkgs/development/tools/goconst/default.nix
new file mode 100644
index 000000000000..da4e9e90ef8b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/goconst/default.nix
@@ -0,0 +1,27 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "goconst";
+  version = "1.7.0";
+
+  excludedPackages = [ "tests" ];
+
+  src = fetchFromGitHub {
+    owner = "jgautheron";
+    repo = "goconst";
+    rev = "v${version}";
+    sha256 = "sha256-yhvZucbFldjTPVdo0epNPFMgmvz0JFPF7Gra0t11zXU=";
+  };
+
+  vendorHash = null;
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "Find in Go repeated strings that could be replaced by a constant";
+    homepage = "https://github.com/jgautheron/goconst";
+    license = licenses.mit;
+    maintainers = with maintainers; [ kalbasit ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/goconvey/default.nix b/nixpkgs/pkgs/development/tools/goconvey/default.nix
new file mode 100644
index 000000000000..82bd7354ef45
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/goconvey/default.nix
@@ -0,0 +1,30 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "goconvey";
+  version = "1.8.0";
+
+  excludedPackages = "web/server/watch/integration_testing";
+
+  src = fetchFromGitHub {
+    owner = "smartystreets";
+    repo = "goconvey";
+    rev = "v${version}";
+    sha256 = "sha256-JgforTGu5aiQHltZrAfy16Bsu4UJ2pj6cCiof6sxz7s=";
+  };
+
+  vendorHash = "sha256-CCtWsljI14VOGjPid6ouzvieDbylh9ljoUcAoR9r4b4=";
+
+  ldflags = [ "-s" "-w" ];
+
+  preCheck = ''
+    buildFlagsArray+="-short"
+  '';
+
+  meta = {
+    description = "Go testing in the browser. Integrates with `go test`. Write behavioral tests in Go";
+    homepage = "https://github.com/smartystreets/goconvey";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ vdemeester ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gocyclo/default.nix b/nixpkgs/pkgs/development/tools/gocyclo/default.nix
new file mode 100644
index 000000000000..6dc87ccdc91c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gocyclo/default.nix
@@ -0,0 +1,25 @@
+{ buildGoModule
+, lib
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "gocyclo";
+  version = "0.6.0";
+
+  src = fetchFromGitHub {
+    owner = "fzipp";
+    repo = "gocyclo";
+    rev = "v${version}";
+    sha256 = "sha256-1IwtGUqshpLDyxH5NNkGUads1TKLs48eslNnFylGUPA=";
+  };
+
+  vendorHash = null;
+
+  meta = with lib; {
+    description = "Calculate cyclomatic complexities of functions in Go source code";
+    homepage = "https://github.com/fzipp/gocyclo";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ kalbasit ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/goda/default.nix b/nixpkgs/pkgs/development/tools/goda/default.nix
new file mode 100644
index 000000000000..19d363e1ef55
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/goda/default.nix
@@ -0,0 +1,25 @@
+{ lib, nix-update-script, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "goda";
+  version = "0.5.7";
+
+  src = fetchFromGitHub {
+    owner = "loov";
+    repo = "goda";
+    rev = "v${version}";
+    sha256 = "sha256-kilFb/2wXdzn/gXy9mBg0PZH8rd+MFIom4AGAZLgnBo=";
+  };
+
+  vendorHash = "sha256-FYjlOYB0L4l6gF8hYtJroV1qMQD0ZmKWXBarjyConRs=";
+
+  passthru.updateScript = nix-update-script { };
+
+  meta = with lib; {
+    homepage = "https://github.com/loov/goda";
+    description = "Go Dependency Analysis toolkit";
+    maintainers = with maintainers; [ michaeladler ];
+    license = licenses.mit;
+    mainProgram = "goda";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/godef/default.nix b/nixpkgs/pkgs/development/tools/godef/default.nix
new file mode 100644
index 000000000000..085e996f350f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/godef/default.nix
@@ -0,0 +1,27 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "godef";
+  version = "1.1.2";
+  rev = "v${version}";
+
+  subPackages = [ "." ];
+
+  vendorHash = null;
+
+  doCheck = false;
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "rogpeppe";
+    repo = "godef";
+    sha256 = "0rhhg73kzai6qzhw31yxw3nhpsijn849qai2v9am955svmnckvf4";
+  };
+
+  meta = {
+    description = "Print where symbols are defined in Go source code";
+    homepage = "https://github.com/rogpeppe/godef/";
+    maintainers = with lib.maintainers; [ vdemeester rvolosatovs ];
+    license = lib.licenses.bsd3;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/godot/3/debug-server.nix b/nixpkgs/pkgs/development/tools/godot/3/debug-server.nix
new file mode 100644
index 000000000000..5e134d71e1e6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/godot/3/debug-server.nix
@@ -0,0 +1,7 @@
+{ godot3-headless }:
+
+godot3-headless.overrideAttrs (self: base: {
+  pname = "godot3-debug-server";
+  godotBuildDescription = "debug server";
+  shouldBuildTools = false;
+})
diff --git a/nixpkgs/pkgs/development/tools/godot/3/default.nix b/nixpkgs/pkgs/development/tools/godot/3/default.nix
new file mode 100644
index 000000000000..c69fcfa57b46
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/godot/3/default.nix
@@ -0,0 +1,166 @@
+{ lib
+, stdenv
+, alsa-lib
+, alsa-plugins
+, autoPatchelfHook
+, fetchFromGitHub
+, freetype
+, installShellFiles
+, libGLU
+, libpulseaudio
+, libX11
+, libXcursor
+, libXext
+, libXfixes
+, libXi
+, libXinerama
+, libXrandr
+, libXrender
+, makeWrapper
+, openssl
+, pkg-config
+, scons
+, udev
+, yasm
+, zlib
+}:
+
+stdenv.mkDerivation (self: {
+  pname = "godot3";
+  version = "3.5.2";
+  godotBuildDescription = "X11 tools";
+
+  src = fetchFromGitHub {
+    owner = "godotengine";
+    repo = "godot";
+    rev = "${self.version}-stable";
+    sha256 = "sha256-C+1J5N0ETL1qKust+2xP9uB4x9NwrMqIm8aFAivVYQw=";
+  };
+
+  nativeBuildInputs = [
+    autoPatchelfHook
+    installShellFiles
+    makeWrapper
+    pkg-config
+    scons
+  ];
+
+  buildInputs = [
+    alsa-lib
+    freetype
+    libGLU
+    libpulseaudio
+    libX11
+    libXcursor
+    libXext
+    libXfixes
+    libXi
+    libXinerama
+    libXrandr
+    libXrender
+    openssl
+    udev
+    yasm
+    zlib
+  ];
+
+  shouldAddLinkFlagsToPulse = true;
+
+  patches = map (rp: ./patches + rp) [
+    # The version of SConstruct in the godot source appends the OS's PATH to the Scons PATH,
+    # but because it is an append, the Scons PATH takes precedence.  The Scons PATH contains a
+    # bunch of standard Linux paths like /usr/bin, so if they happen to contain versions of any
+    # build-time dependencies of Godot, they will be used instead of the Nix version of them.
+    #
+    # This patch simply replaces the entire Scons environment (including the PATH) with that
+    # of the OS. This isn't as surgical as just fixing the PATH, but it seems to work, and
+    # seems to be the Nix community's current strategy when using Scons.
+    /SConstruct/dontClobberEnvironment.patch
+  ];
+
+  enableParallelBuilding = true;
+  godotBuildPlatform = "x11";
+  shouldBuildTools = true;
+  godotBuildTarget = "release_debug";
+
+  shouldUseLinkTimeOptimization = self.godotBuildTarget == "release";
+
+  sconsFlags = [
+    "arch=${stdenv.hostPlatform.linuxArch}"
+    "platform=${self.godotBuildPlatform}"
+    "tools=${lib.boolToString self.shouldBuildTools}"
+    "target=${self.godotBuildTarget}"
+    "bits=${toString stdenv.hostPlatform.parsed.cpu.bits}"
+    "use_lto=${lib.boolToString self.shouldUseLinkTimeOptimization}"
+  ];
+
+  shouldWrapBinary = self.shouldBuildTools;
+  shouldInstallManual = self.shouldBuildTools;
+  shouldPatchBinary = self.shouldBuildTools;
+  shouldInstallHeaders = self.shouldBuildTools;
+  shouldInstallShortcut = self.shouldBuildTools && self.godotBuildPlatform != "server";
+
+  outputs = ["out"] ++ lib.optional self.shouldInstallManual "man" ++ lib.optional self.shouldBuildTools "dev";
+
+  builtGodotBinNamePattern = if self.godotBuildPlatform == "server" then "godot_server.*" else "godot.*";
+
+  godotBinInstallPath = "bin";
+  installedGodotBinName = self.pname;
+  installedGodotShortcutFileName = "org.godotengine.Godot3.desktop";
+  installedGodotShortcutDisplayName = "Godot Engine 3";
+
+  installPhase = ''
+    runHook preInstall
+
+    echo "Installing godot binaries."
+    outbin="$out/$godotBinInstallPath"
+    mkdir -p "$outbin"
+    cp -R bin/. "$outbin"
+    mv "$outbin"/$builtGodotBinNamePattern "$outbin/$installedGodotBinName"
+
+    if [ -n "$shouldWrapBinary" ]; then
+      wrapProgram "$outbin/$installedGodotBinName" \
+        --set ALSA_PLUGIN_DIR ${alsa-plugins}/lib/alsa-lib
+    fi
+
+    if [ -n "$shouldInstallManual" ]; then
+      echo "Installing godot manual."
+      mansrc=misc/dist/linux
+      mv "$mansrc"/godot.6 "$mansrc"/godot3.6
+      installManPage "$mansrc"/godot3.6
+    fi
+
+    if [ -n "$shouldInstallHeaders" ]; then
+      echo "Installing godot headers."
+      mkdir -p "$dev"
+      cp -R modules/gdnative/include "$dev"
+    fi
+
+    if [ -n "$shouldInstallShortcut" ]; then
+      echo "Installing godot shortcut."
+      mkdir -p "$out"/share/{applications,icons/hicolor/scalable/apps}
+      cp misc/dist/linux/org.godotengine.Godot.desktop "$out"/share/applications/$installedGodotShortcutFileName
+      cp icon.svg "$out"/share/icons/hicolor/scalable/apps/godot.svg
+      cp icon.png "$out"/share/icons/godot.png
+      substituteInPlace "$out"/share/applications/$installedGodotShortcutFileName \
+        --replace "Exec=godot" "Exec=\"$outbin/$installedGodotBinName\"" \
+        --replace "Name=Godot Engine" "Name=$installedGodotShortcutDisplayName"
+    fi
+
+    runHook postInstall
+  '';
+
+  runtimeDependencies = lib.optionals self.shouldPatchBinary (map lib.getLib [
+    alsa-lib
+    libpulseaudio
+    udev
+  ]);
+
+  meta = with lib; {
+    homepage = "https://godotengine.org";
+    description = "Free and Open Source 2D and 3D game engine (" + self.godotBuildDescription + ")";
+    license = licenses.mit;
+    platforms = [ "i686-linux" "x86_64-linux" "aarch64-linux" ];
+    maintainers = with maintainers; [ rotaerk twey ];
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/godot/3/export-templates.nix b/nixpkgs/pkgs/development/tools/godot/3/export-templates.nix
new file mode 100644
index 000000000000..714cd32869c0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/godot/3/export-templates.nix
@@ -0,0 +1,28 @@
+{ godot3 }:
+
+godot3.overrideAttrs (self: base: {
+  pname = "godot3-export-templates";
+  godotBuildDescription = "nix export templates";
+
+  # As described in default.nix, adding the link flags to pulseaudio in detect.py was necessary to
+  # allow the dlopen calls to succeed in Nix builds of godot. However, it seems that this *breaks*
+  # the export templates, resulting in programs exported from godot using these export templates to
+  # be unable to load this library.
+  shouldAddLinkFlagsToPulse = false;
+
+  shouldBuildTools = false;
+  godotBuildTarget = "release";
+  godotBinInstallPath = "share/godot/templates/${self.version}.stable";
+  installedGodotBinName = "linux_${self.godotBuildPlatform}_64_${self.godotBuildTarget}";
+
+  # https://docs.godotengine.org/en/stable/development/compiling/optimizing_for_size.html
+  # Stripping reduces the template size from around 500MB to 40MB for Linux.
+  # This also impacts the size of the exported games.
+  # This is added explicitly here because mkDerivation does not automatically
+  # strip binaries in the template directory.
+  stripAllList = (base.stripAllList or []) ++ [ "share/godot/templates" ];
+
+  meta = base.meta // {
+    homepage = "https://docs.godotengine.org/en/stable/development/compiling/compiling_for_x11.html#building-export-templates";
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/godot/3/headless.nix b/nixpkgs/pkgs/development/tools/godot/3/headless.nix
new file mode 100644
index 000000000000..85b998f3807c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/godot/3/headless.nix
@@ -0,0 +1,7 @@
+{ godot3 }:
+
+godot3.overrideAttrs (self: base: {
+  pname = "godot3-headless";
+  godotBuildDescription = "headless";
+  godotBuildPlatform = "server";
+})
diff --git a/nixpkgs/pkgs/development/tools/godot/3/mono/debug-server.nix b/nixpkgs/pkgs/development/tools/godot/3/mono/debug-server.nix
new file mode 100644
index 000000000000..28c18dbdb2ba
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/godot/3/mono/debug-server.nix
@@ -0,0 +1,7 @@
+{ godot3-mono-headless }:
+
+godot3-mono-headless.overrideAttrs (self: base: {
+  pname = "godot3-mono-debug-server";
+  godotBuildDescription = "mono debug server";
+  shouldBuildTools = false;
+})
diff --git a/nixpkgs/pkgs/development/tools/godot/3/mono/default.nix b/nixpkgs/pkgs/development/tools/godot/3/mono/default.nix
new file mode 100644
index 000000000000..22e95fb0e51a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/godot/3/mono/default.nix
@@ -0,0 +1,65 @@
+{ godot3
+, callPackage
+, mkNugetDeps
+, mkNugetSource
+, mono
+, dotnet-sdk
+, writeText
+}:
+
+godot3.overrideAttrs (self: base: {
+  pname = "godot3-mono";
+
+  godotBuildDescription = "mono build";
+
+  nativeBuildInputs = base.nativeBuildInputs ++ [ mono dotnet-sdk ];
+
+  glue = callPackage ./glue.nix {};
+
+  nugetDeps = mkNugetDeps { name = "deps"; nugetDeps = import ./deps.nix; };
+
+  nugetSource =
+    mkNugetSource {
+      name = "${self.pname}-nuget-source";
+      description = "A Nuget source with dependencies for ${self.pname}";
+      deps = [ self.nugetDeps ];
+    };
+
+  nugetConfig = writeText "NuGet.Config" ''
+    <?xml version="1.0" encoding="utf-8"?>
+    <configuration>
+      <packageSources>
+        <add key="${self.pname}-deps" value="${self.nugetSource}/lib" />
+      </packageSources>
+    </configuration>
+  '';
+
+  sconsFlags = base.sconsFlags ++ [
+    "module_mono_enabled=true"
+    "mono_prefix=${mono}"
+  ];
+
+  shouldConfigureNuget = true;
+
+  postConfigure = ''
+    echo "Setting up buildhome."
+    mkdir buildhome
+    export HOME="$PWD"/buildhome
+
+    echo "Overlaying godot glue."
+    cp -R --no-preserve=mode "$glue"/. .
+
+    if [ -n "$shouldConfigureNuget" ]; then
+      echo "Configuring NuGet."
+      mkdir -p ~/.nuget/NuGet
+      ln -s "$nugetConfig" ~/.nuget/NuGet/NuGet.Config
+    fi
+  '';
+
+  installedGodotShortcutFileName = "org.godotengine.GodotMono3.desktop";
+  installedGodotShortcutDisplayName = "Godot Engine (Mono) 3";
+
+  passthru = {
+    make-deps = callPackage ./make-deps.nix {};
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/godot/3/mono/deps.nix b/nixpkgs/pkgs/development/tools/godot/3/mono/deps.nix
new file mode 100644
index 000000000000..ea909921b431
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/godot/3/mono/deps.nix
@@ -0,0 +1,34 @@
+{ fetchNuGet }: [
+  (fetchNuGet { pname = "EnvDTE"; version = "8.0.2"; sha256 = "1wdvjzdmqbqyqlaijpjc959vvdic12vqr3c5sffhbxi7m1si5k63"; })
+  (fetchNuGet { pname = "GodotTools.IdeMessaging"; version = "1.1.1"; sha256 = "0v70acpw2yq9mx05jy2gmkqqdbpgj8rb29ny2f3bgvmw9g5qmq94"; })
+  (fetchNuGet { pname = "JetBrains.Annotations"; version = "2019.1.3"; sha256 = "188b0qw6lih0k3ddnmimadzr3y1y6vh6ramgkjnyskqd43prjzc2"; })
+  (fetchNuGet { pname = "Microsoft.Build"; version = "16.5.0"; sha256 = "0baihvnzanqhk125g0ass9hhsqgp55h770pjjmsxdvprv0aqq22i"; })
+  (fetchNuGet { pname = "Microsoft.Build.Framework"; version = "16.5.0"; sha256 = "1xgr02r7s9i6s70n237hss4yi9zicssia3zd2ny6s8vyxb7jpdyb"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "1.0.1"; sha256 = "01al6cfxp68dscl15z7rxfw9zvhm64dncsw09a1vmdkacsa2v6lr"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "1.1.0"; sha256 = "08vh1r12g6ykjygq5d3vq09zylgb84l63k49jc4v8faw9g93iqqm"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Targets"; version = "1.0.1"; sha256 = "0ppdkwy6s9p7x9jix3v4402wb171cdiibq7js7i13nxpdky7074p"; })
+  (fetchNuGet { pname = "Microsoft.NETFramework.ReferenceAssemblies"; version = "1.0.0"; sha256 = "0na724xhvqm63vq9y18fl9jw9q2v99bdwr353378s5fsi11qzxp9"; })
+  (fetchNuGet { pname = "Microsoft.NETFramework.ReferenceAssemblies.net472"; version = "1.0.0"; sha256 = "1bqinq2nxnpqxziypg1sqy3ly0nymxxjpn8fwkn3rl4vl6gdg3rc"; })
+  (fetchNuGet { pname = "Microsoft.VisualStudio.Setup.Configuration.Interop"; version = "1.16.30"; sha256 = "14022lx03vdcqlvbbdmbsxg5pqfx1rfq2jywxlyaz9v68cvsb0g4"; })
+  (fetchNuGet { pname = "Mono.Cecil"; version = "0.11.3"; sha256 = "0xcx7pk9y2n1hr15c0l1balzi69kw5gy8dk7sb8jwqyyvm35q4j3"; })
+  (fetchNuGet { pname = "NETStandard.Library"; version = "2.0.3"; sha256 = "1fn9fxppfcg4jgypp2pmrpr6awl3qz1xmnri0cygpkwvyx27df1y"; })
+  (fetchNuGet { pname = "Newtonsoft.Json"; version = "13.0.1"; sha256 = "0fijg0w6iwap8gvzyjnndds0q4b8anwxxvik7y8vgq97dram4srb"; })
+  (fetchNuGet { pname = "Semver"; version = "2.0.6"; sha256 = "136sd6d3ys49dipvc1h3ivmp8ryd4p7fdmdrr28521cqpvkw5f1k"; })
+  (fetchNuGet { pname = "stdole"; version = "7.0.3302"; sha256 = "1n8vbzlgyklazriwvb6kjyw5w0m9a1b3xsa0f0v29j03z23fx69p"; })
+  (fetchNuGet { pname = "System.Buffers"; version = "4.4.0"; sha256 = "183f8063w8zqn99pv0ni0nnwh7fgx46qzxamwnans55hhs2l0g19"; })
+  (fetchNuGet { pname = "System.Collections.Immutable"; version = "1.5.0"; sha256 = "1d5gjn5afnrf461jlxzawcvihz195gayqpcfbv6dd7pxa9ialn06"; })
+  (fetchNuGet { pname = "System.Globalization"; version = "4.0.11"; sha256 = "070c5jbas2v7smm660zaf1gh0489xanjqymkvafcs4f8cdrs1d5d"; })
+  (fetchNuGet { pname = "System.IO"; version = "4.1.0"; sha256 = "1g0yb8p11vfd0kbkyzlfsbsp5z44lwsvyc0h3dpw6vqnbi035ajp"; })
+  (fetchNuGet { pname = "System.Memory"; version = "4.5.3"; sha256 = "0naqahm3wljxb5a911d37mwjqjdxv9l0b49p5dmfyijvni2ppy8a"; })
+  (fetchNuGet { pname = "System.Numerics.Vectors"; version = "4.4.0"; sha256 = "0rdvma399070b0i46c4qq1h2yvjj3k013sqzkilz4bz5cwmx1rba"; })
+  (fetchNuGet { pname = "System.Reflection"; version = "4.1.0"; sha256 = "1js89429pfw79mxvbzp8p3q93il6rdff332hddhzi5wqglc4gml9"; })
+  (fetchNuGet { pname = "System.Reflection.Primitives"; version = "4.0.1"; sha256 = "1bangaabhsl4k9fg8khn83wm6yial8ik1sza7401621jc6jrym28"; })
+  (fetchNuGet { pname = "System.Resources.ResourceManager"; version = "4.0.1"; sha256 = "0b4i7mncaf8cnai85jv3wnw6hps140cxz8vylv2bik6wyzgvz7bi"; })
+  (fetchNuGet { pname = "System.Runtime"; version = "4.1.0"; sha256 = "02hdkgk13rvsd6r9yafbwzss8kr55wnj8d5c7xjnp8gqrwc8sn0m"; })
+  (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "4.5.2"; sha256 = "1vz4275fjij8inf31np78hw50al8nqkngk04p3xv5n4fcmf1grgi"; })
+  (fetchNuGet { pname = "System.Runtime.Serialization.Primitives"; version = "4.1.1"; sha256 = "042rfjixknlr6r10vx2pgf56yming8lkjikamg3g4v29ikk78h7k"; })
+  (fetchNuGet { pname = "System.Text.Encoding"; version = "4.0.11"; sha256 = "1dyqv0hijg265dwxg6l7aiv74102d6xjiwplh2ar1ly6xfaa4iiw"; })
+  (fetchNuGet { pname = "System.Threading.Tasks"; version = "4.0.11"; sha256 = "0nr1r41rak82qfa5m0lhk9mp0k93bvfd7bbd9sdzwx9mb36g28p5"; })
+  (fetchNuGet { pname = "System.Threading.Tasks.Dataflow"; version = "4.9.0"; sha256 = "1g6s9pjg4z8iy98df60y9a01imdqy59zd767vz74rrng78jl2dk5"; })
+  (fetchNuGet { pname = "System.Threading.Thread"; version = "4.0.0"; sha256 = "1gxxm5fl36pjjpnx1k688dcw8m9l7nmf802nxis6swdaw8k54jzc"; })
+]
diff --git a/nixpkgs/pkgs/development/tools/godot/3/mono/export-templates.nix b/nixpkgs/pkgs/development/tools/godot/3/mono/export-templates.nix
new file mode 100644
index 000000000000..da0d7cb2be3c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/godot/3/mono/export-templates.nix
@@ -0,0 +1,28 @@
+{ godot3-mono }:
+
+godot3-mono.overrideAttrs (self: base: {
+  pname = "godot3-mono-export-templates";
+  godotBuildDescription = "nix mono export templates";
+
+  # As described in default.nix, adding the link flags to pulseaudio in detect.py was necessary to
+  # allow the dlopen calls to succeed in Nix builds of godot. However, it seems that this *breaks*
+  # the export templates, resulting in programs exported from godot using these export templates to
+  # be unable to load this library.
+  shouldAddLinkFlagsToPulse = false;
+
+  shouldBuildTools = false;
+  godotBuildTarget = "release";
+  godotBinInstallPath = "share/godot/templates/${self.version}.stable.mono";
+  installedGodotBinName = "linux_${self.godotBuildPlatform}_64_${self.godotBuildTarget}";
+
+  # https://docs.godotengine.org/en/stable/development/compiling/optimizing_for_size.html
+  # Stripping reduces the template size from around 500MB to 40MB for Linux.
+  # This also impacts the size of the exported games.
+  # This is added explicitly here because mkDerivation does not automatically
+  # strip binaries in the template directory.
+  stripAllList = (base.stripAllList or []) ++ [ "share/godot/templates" ];
+
+  meta = base.meta // {
+    homepage = "https://docs.godotengine.org/en/stable/development/compiling/compiling_with_mono.html#export-templates";
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/godot/3/mono/glue.nix b/nixpkgs/pkgs/development/tools/godot/3/mono/glue.nix
new file mode 100644
index 000000000000..bbd046b4af0f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/godot/3/mono/glue.nix
@@ -0,0 +1,66 @@
+{ godot3, mono }:
+
+godot3.overrideAttrs (self: base: {
+  pname = "godot3-mono-glue";
+  godotBuildDescription = "mono glue";
+  godotBuildPlatform = "server";
+
+  sconsFlags = base.sconsFlags ++ [
+    "module_mono_enabled=true"
+    "mono_glue=false" # Indicates not to expect already existing glue.
+    "mono_prefix=${mono}"
+  ];
+
+  nativeBuildInputs = base.nativeBuildInputs ++ [ mono ];
+
+  patches =
+    base.patches ++
+    map (rp: ./patches + rp) (
+      [
+        # When building godot mono, a "glue version" gets baked into it, and into the mono glue code
+        # generated by it. Godot mono export templates are also get a glue version baked in. If you
+        # export a godot mono project using an export template for which the glue version doesn't
+        # match that of the godot mono tool itself, then the resulting game will fail with an error
+        # saying "The assembly 'GodotSharp' is out of sync." Thus, if we want our build of godot mono
+        # to be compatible with the official export templates, we need to ensure it is built with the
+        # same glue version as the official build.
+        #
+        # A python script in the godot source, i.e. modules/mono/build_scripts/gen_cs_glue_version.py,
+        # is used by the build process to generate the glue version number. The official version of it
+        # does so based on the latest modified time of all the C# files in the GodotSharp solution. This
+        # is problematic because it is difficult to reproduce the exact timestamps that the files had
+        # when the official build was created. This is further complicated by the fact that nix clears
+        # the timestamps on the source files when they're unpacked. Thus, we can't simply regenerate the
+        # official glue version by building from the official source.
+        #
+        # To address this, we are patching the python script with a hard-coded glue version number. This
+        # patch file needs to be updated for every new version of godot, so to enforce this, the godot
+        # version is baked in to the file name, causing the build to fail until the patch is updated.
+        #
+        # The correct glue version number for a given godot version is obtained by running the official
+        # build of that version of godot with the --generate-mono-glue flag. This generates the mono
+        # glue files.  One of those files, mono_glue.gen.cpp, has a function called get_cs_glue_version()
+        # which contains a hard-coded number.  This is the glue version to put in the patch file.
+        #
+        # For convenience, the accompanying update-glue-version.sh script automates this work. Run it by
+        # passing the godot version as an argument, e.g. "3.5.2".
+        "/gen_cs_glue_version.py/hardcodeGlueVersion_${self.version}.patch"
+      ]
+    );
+
+  outputs = [ "out" ];
+
+  installPhase = ''
+    runHook preInstall
+
+    glue="$out"/modules/mono/glue
+    mkdir -p "$glue"
+    bin/godot_server.x11.opt.tools.*.mono --generate-mono-glue "$glue"
+
+    runHook postInstall
+  '';
+
+  meta = base.meta // {
+    homepage = "https://docs.godotengine.org/en/stable/development/compiling/compiling_with_mono.html#generate-the-glue";
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/godot/3/mono/headless.nix b/nixpkgs/pkgs/development/tools/godot/3/mono/headless.nix
new file mode 100644
index 000000000000..fff5367e8613
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/godot/3/mono/headless.nix
@@ -0,0 +1,7 @@
+{ godot3-mono }:
+
+godot3-mono.overrideAttrs (self: base: {
+  pname = "godot3-mono-headless";
+  godotBuildDescription = "mono headless";
+  godotBuildPlatform = "server";
+})
diff --git a/nixpkgs/pkgs/development/tools/godot/3/mono/make-deps.nix b/nixpkgs/pkgs/development/tools/godot/3/mono/make-deps.nix
new file mode 100644
index 000000000000..e47a5a68d64b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/godot/3/mono/make-deps.nix
@@ -0,0 +1,59 @@
+{ godot3-mono, nuget-to-nix }:
+
+godot3-mono.overrideAttrs (self: base: {
+  pname = "godot3-mono-make-deps";
+
+  nativeBuildInputs = base.nativeBuildInputs ++ [ nuget-to-nix ];
+
+  nugetDeps = null;
+  nugetSource = null;
+  nugetConfig = null;
+
+  shouldConfigureNuget = false;
+
+  outputs = [ "out" ];
+  buildPhase = " ";
+  installPhase = ''echo "No output intended. Run make-deps.sh instead." > $out'';
+
+  # This script is used to update the accompanying deps.nix file, a nix expression listing the
+  # nuget packages that the godot-mono code depends on, along with their sha256 hashes. This
+  # file is referenced by the godot-mono derivation and needs to be updated every time the
+  # godot version is updated. The way it works is:
+  #
+  # 1) Creates and navigates to a temporary directory and then explicitly runs the unpack,
+  # patch, and configure phases from the godot-mono derivation.
+  # 2) Instead of building at this point, a nuget restore is performed, downloading all the
+  # nuget dependencies of godot-mono into a local folder.
+  # 3) Once these have been downloaded, the nuget-to-nix tool is used to generate a nix
+  # expression listing the locally obtained nuget packages, along with their sha256 hashes.
+  # 4) This nix expression is saved as deps.nix in the PWD.
+  #
+  # This process is impure, because it entails downloading files with unknown hashes, so it
+  # is run manually by the maintainer within a nix-shell environment. Running the accompanying
+  # make-deps.sh instead simplifies this.
+  makeDeps = ''
+    set -e
+    outdir="$(pwd)"
+    wrkdir="$(mktemp -d)"
+    trap 'rm -rf -- "$wrkdir"' EXIT
+    pushd "$wrkdir" > /dev/null
+      unpackPhase
+      cd source
+      patchPhase
+      configurePhase
+
+      # Without RestorePackagesPath set, it restores packages to a temp directory. Specifying
+      # a path ensures we have a place to run nuget-to-nix.
+      nugetRestore() { dotnet msbuild -t:Restore -p:RestorePackagesPath=nugetPackages $1; }
+
+      nugetRestore modules/mono/glue/GodotSharp/GodotSharp.sln
+      nugetRestore modules/mono/editor/GodotTools/GodotTools.sln
+
+      nuget-to-nix nugetPackages > "$outdir"/deps.nix
+    popd > /dev/null
+  '';
+
+  meta = base.meta // {
+    description = "Derivation with no output that exists to provide an environment for make-deps.sh";
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/godot/3/mono/make-deps.sh b/nixpkgs/pkgs/development/tools/godot/3/mono/make-deps.sh
new file mode 100755
index 000000000000..746ab0de3c1b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/godot/3/mono/make-deps.sh
@@ -0,0 +1,2 @@
+#!/usr/bin/env bash
+nix-shell "$(git rev-parse --show-toplevel)" -A godot3-mono.make-deps --run 'eval "$makeDeps"'
diff --git a/nixpkgs/pkgs/development/tools/godot/3/mono/patches/gen_cs_glue_version.py/hardcodeGlueVersion_3.5.2.patch b/nixpkgs/pkgs/development/tools/godot/3/mono/patches/gen_cs_glue_version.py/hardcodeGlueVersion_3.5.2.patch
new file mode 100644
index 000000000000..d8a3460126d0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/godot/3/mono/patches/gen_cs_glue_version.py/hardcodeGlueVersion_3.5.2.patch
@@ -0,0 +1,22 @@
+diff --git a/modules/mono/build_scripts/gen_cs_glue_version.py b/modules/mono/build_scripts/gen_cs_glue_version.py
+index 98bbb4d9be..5189f2551b 100644
+--- a/modules/mono/build_scripts/gen_cs_glue_version.py
++++ b/modules/mono/build_scripts/gen_cs_glue_version.py
+@@ -1,16 +1,5 @@
+ def generate_header(solution_dir, version_header_dst):
+-    import os
+-
+-    latest_mtime = 0
+-    for root, dirs, files in os.walk(solution_dir, topdown=True):
+-        dirs[:] = [d for d in dirs if d not in ["Generated"]]  # Ignored generated files
+-        files = [f for f in files if f.endswith(".cs")]
+-        for file in files:
+-            filepath = os.path.join(root, file)
+-            mtime = os.path.getmtime(filepath)
+-            latest_mtime = mtime if mtime > latest_mtime else latest_mtime
+-
+-    glue_version = int(latest_mtime)  # The latest modified time will do for now
++    glue_version = 1678112021
+ 
+     with open(version_header_dst, "w") as version_header:
+         version_header.write("/* THIS FILE IS GENERATED DO NOT EDIT */\n")
diff --git a/nixpkgs/pkgs/development/tools/godot/3/mono/server.nix b/nixpkgs/pkgs/development/tools/godot/3/mono/server.nix
new file mode 100644
index 000000000000..28049f320a0f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/godot/3/mono/server.nix
@@ -0,0 +1,7 @@
+{ godot3-mono-debug-server }:
+
+godot3-mono-debug-server.overrideAttrs (self: base: {
+  pname = "godot3-mono-server";
+  godotBuildDescription = "mono server";
+  godotBuildTarget = "release";
+})
diff --git a/nixpkgs/pkgs/development/tools/godot/3/mono/update-glue-version.sh b/nixpkgs/pkgs/development/tools/godot/3/mono/update-glue-version.sh
new file mode 100755
index 000000000000..bf409ae3e7c9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/godot/3/mono/update-glue-version.sh
@@ -0,0 +1,39 @@
+#! /usr/bin/env nix-shell
+#! nix-shell -i bash -p steam-run unzip wget
+
+# This script updates the hard-coded glue_version in:
+#
+#    patches/gen_cs_glue_version.py/hardcodeGlueVersionFor{version}.patch
+#
+# It does so by pulling it from the official build.
+
+set -e
+
+[ -z "$1" ] && echo "Godot version not specified. Exiting." && exit 1
+
+gdversion=$1
+
+# Download and extract the official stable 64-bit X11 mono build of Godot.
+gddir="$(mktemp -d)"
+trap 'rm -rf -- "$gddir"' EXIT
+wget -P "$gddir" https://downloads.tuxfamily.org/godotengine/$gdversion/mono/Godot_v$gdversion-stable_mono_x11_64.zip
+unzip "$gddir"/Godot_v$gdversion-stable_mono_x11_64.zip -d "$gddir"
+
+# Generate the mono glue from the official build.
+gluedir="$(mktemp -d)"
+trap 'rm -rf -- "$gluedir"' EXIT
+steam-run "$gddir"/Godot_v$gdversion-stable_mono_x11_64/Godot_v$gdversion-stable_mono_x11.64 --generate-mono-glue "$gluedir"
+
+# Extract the glue version.
+glueversion=$(grep -Po '(?<=get_cs_glue_version\(\) \{ return )[0-9]+(?=; \})' "$gluedir"/mono_glue.gen.cpp)
+
+patchdir=./patches/gen_cs_glue_version.py/
+patchprefix=hardcodeGlueVersion_
+newpatchname=$patchprefix$gdversion.patch
+
+# Update the patch with the obtained glue version.
+sed -i "s/^+    glue_version = [0-9]\+$/+    glue_version = $glueversion/" $patchdir/$patchprefix*.patch
+
+mv $patchdir/$patchprefix*.patch $patchdir/$patchprefix$gdversion.patch
+
+echo "Updated $patchdir/$patchprefix$gdversion.patch with glue_version: $glueversion"
diff --git a/nixpkgs/pkgs/development/tools/godot/3/patches/SConstruct/dontClobberEnvironment.patch b/nixpkgs/pkgs/development/tools/godot/3/patches/SConstruct/dontClobberEnvironment.patch
new file mode 100644
index 000000000000..d72d7ed11527
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/godot/3/patches/SConstruct/dontClobberEnvironment.patch
@@ -0,0 +1,20 @@
+diff --git a/SConstruct b/SConstruct
+index 057ec7628c..760be89fff 100644
+--- a/SConstruct
++++ b/SConstruct
+@@ -67,14 +67,7 @@ elif platform_arg == "javascript":
+ elif os.name == "nt" and methods.get_cmdline_bool("use_mingw", False):
+     custom_tools = ["mingw"]
+ 
+-# We let SCons build its default ENV as it includes OS-specific things which we don't
+-# want to have to pull in manually.
+-# Then we prepend PATH to make it take precedence, while preserving SCons' own entries.
+-env_base = Environment(tools=custom_tools)
+-env_base.PrependENVPath("PATH", os.getenv("PATH"))
+-env_base.PrependENVPath("PKG_CONFIG_PATH", os.getenv("PKG_CONFIG_PATH"))
+-if "TERM" in os.environ:  # Used for colored output.
+-    env_base["ENV"]["TERM"] = os.environ["TERM"]
++env_base = Environment(ENV = os.environ, tools=custom_tools)
+ 
+ env_base.disabled_modules = []
+ env_base.use_ptrcall = False
diff --git a/nixpkgs/pkgs/development/tools/godot/3/server.nix b/nixpkgs/pkgs/development/tools/godot/3/server.nix
new file mode 100644
index 000000000000..d2c4939167f1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/godot/3/server.nix
@@ -0,0 +1,7 @@
+{ godot3-debug-server }:
+
+godot3-debug-server.overrideAttrs (self: base: {
+  pname = "godot3-server";
+  godotBuildDescription = "server";
+  godotBuildTarget = "release";
+})
diff --git a/nixpkgs/pkgs/development/tools/godot/4/default.nix b/nixpkgs/pkgs/development/tools/godot/4/default.nix
new file mode 100644
index 000000000000..50cdeb857245
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/godot/4/default.nix
@@ -0,0 +1,153 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, pkg-config
+, autoPatchelfHook
+, installShellFiles
+, scons
+, vulkan-loader
+, libGL
+, libX11
+, libXcursor
+, libXinerama
+, libXext
+, libXrandr
+, libXrender
+, libXi
+, libXfixes
+, libxkbcommon
+, alsa-lib
+, libpulseaudio
+, dbus
+, speechd
+, fontconfig
+, udev
+, withPlatform ? "linuxbsd"
+, withTarget ? "editor"
+, withPrecision ? "single"
+, withPulseaudio ? true
+, withDbus ? true
+, withSpeechd ? true
+, withFontconfig ? true
+, withUdev ? true
+, withTouch ? true
+}:
+
+assert lib.asserts.assertOneOf "withPrecision" withPrecision [ "single" "double" ];
+
+let
+  mkSconsFlagsFromAttrSet = lib.mapAttrsToList (k: v:
+    if builtins.isString v
+    then "${k}=${v}"
+    else "${k}=${builtins.toJSON v}");
+in
+stdenv.mkDerivation rec {
+  pname = "godot";
+  version = "4.2.1-stable";
+  commitHash = "b09f793f564a6c95dc76acc654b390e68441bd01";
+
+  src = fetchFromGitHub {
+    owner = "godotengine";
+    repo = "godot";
+    rev = commitHash;
+    hash = "sha256-Q6Og1H4H2ygOryMPyjm6kzUB6Su6T9mJIp0alNAxvjQ=";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    autoPatchelfHook
+    installShellFiles
+  ];
+
+  buildInputs = [
+    scons
+  ];
+
+  runtimeDependencies = [
+    vulkan-loader
+    libGL
+    libX11
+    libXcursor
+    libXinerama
+    libXext
+    libXrandr
+    libXrender
+    libXi
+    libXfixes
+    libxkbcommon
+    alsa-lib
+  ]
+  ++ lib.optional withPulseaudio libpulseaudio
+  ++ lib.optional withDbus dbus
+  ++ lib.optional withDbus dbus.lib
+  ++ lib.optional withSpeechd speechd
+  ++ lib.optional withFontconfig fontconfig
+  ++ lib.optional withFontconfig fontconfig.lib
+  ++ lib.optional withUdev udev;
+
+  enableParallelBuilding = true;
+
+  # Set the build name which is part of the version. In official downloads, this
+  # is set to 'official'. When not specified explicitly, it is set to
+  # 'custom_build'. Other platforms packaging Godot (Gentoo, Arch, Flatpack
+  # etc.) usually set this to their name as well.
+  #
+  # See also 'methods.py' in the Godot repo and 'build' in
+  # https://docs.godotengine.org/en/stable/classes/class_engine.html#class-engine-method-get-version-info
+  BUILD_NAME = "nixpkgs";
+
+  # Required for the commit hash to be included in the version number.
+  #
+  # `methods.py` reads the commit hash from `.git/HEAD` and manually follows
+  # refs. Since we just write the hash directly, there is no need to emulate any
+  # other parts of the .git directory.
+  #
+  # See also 'hash' in
+  # https://docs.godotengine.org/en/stable/classes/class_engine.html#class-engine-method-get-version-info
+  preConfigure = ''
+    mkdir -p .git
+    echo ${commitHash} > .git/HEAD
+  '';
+
+  sconsFlags = mkSconsFlagsFromAttrSet {
+    # Options from 'SConstruct'
+    production = true; # Set defaults to build Godot for use in production
+    platform = withPlatform;
+    target = withTarget;
+    precision = withPrecision; # Floating-point precision level
+
+    # Options from 'platform/linuxbsd/detect.py'
+    pulseaudio = withPulseaudio; # Use PulseAudio
+    dbus = withDbus; # Use D-Bus to handle screensaver and portal desktop settings
+    speechd = withSpeechd; # Use Speech Dispatcher for Text-to-Speech support
+    fontconfig = withFontconfig; # Use fontconfig for system fonts support
+    udev = withUdev; # Use udev for gamepad connection callbacks
+    touch = withTouch; # Enable touch events
+  };
+
+  outputs = [ "out" "man" ];
+
+  installPhase = ''
+    mkdir -p "$out/bin"
+    cp bin/godot.* $out/bin/godot4
+
+    installManPage misc/dist/linux/godot.6
+
+    mkdir -p "$out"/share/{applications,icons/hicolor/scalable/apps}
+    cp misc/dist/linux/org.godotengine.Godot.desktop "$out/share/applications/org.godotengine.Godot4.desktop"
+    substituteInPlace "$out/share/applications/org.godotengine.Godot4.desktop" \
+      --replace "Exec=godot" "Exec=$out/bin/godot4" \
+      --replace "Godot Engine" "Godot Engine 4"
+    cp icon.svg "$out/share/icons/hicolor/scalable/apps/godot.svg"
+    cp icon.png "$out/share/icons/godot.png"
+  '';
+
+  meta = with lib; {
+    homepage = "https://godotengine.org";
+    description = "Free and Open Source 2D and 3D game engine";
+    license = licenses.mit;
+    platforms = [ "i686-linux" "x86_64-linux" "aarch64-linux" ];
+    maintainers = with maintainers; [ shiryel ];
+    mainProgram = "godot4";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gogetdoc/default.nix b/nixpkgs/pkgs/development/tools/gogetdoc/default.nix
new file mode 100644
index 000000000000..adbb01ea7e3d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gogetdoc/default.nix
@@ -0,0 +1,30 @@
+{ buildGoModule
+, lib
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "gogetdoc-unstable";
+  version = "2019-02-28";
+  rev = "b37376c5da6aeb900611837098f40f81972e63e4";
+
+  vendorHash = null;
+
+  doCheck = false;
+
+  src = fetchFromGitHub {
+    inherit rev;
+
+    owner = "zmb3";
+    repo = "gogetdoc";
+    sha256 = "1v74zd0x2xh10603p8raazssacv3y0x0lr9apkpsdk0bfp5jj0lr";
+  };
+
+  meta = with lib; {
+    description = "Gets documentation for items in Go source code";
+    homepage = "https://github.com/zmb3/gogetdoc";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ kalbasit ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/goimports-reviser/default.nix b/nixpkgs/pkgs/development/tools/goimports-reviser/default.nix
new file mode 100644
index 000000000000..30cf393334c9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/goimports-reviser/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "goimports-reviser";
+  version = "3.6.4";
+
+  src = fetchFromGitHub {
+    owner = "incu6us";
+    repo = "goimports-reviser";
+    rev = "v${version}";
+    hash = "sha256-+GVC/qJnqWm5tsn2Y5BPafapp7ct9kqHWlDNxukEZsM=";
+  };
+  vendorHash = "sha256-z+FeAXPXKi653im2X2WOP1R9gRl/x7UBnndoEXoxdwA=";
+
+  CGO_ENABLED = 0;
+
+  subPackages = [ "." ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=main.Tag=${src.rev}"
+  ];
+
+  checkFlags = [
+    "-skip=TestSourceFile_Fix_WithAliasForVersionSuffix/success_with_set_alias"
+  ];
+
+  preCheck = ''
+    # unset to run all tests
+    unset subPackages
+    # unset as some tests require cgo
+    unset CGO_ENABLED
+  '';
+
+  meta = with lib; {
+    description = "Right imports sorting & code formatting tool (goimports alternative)";
+    homepage = "https://github.com/incu6us/goimports-reviser";
+    license = licenses.mit;
+    maintainers = with maintainers; [ jk ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gojq/default.nix b/nixpkgs/pkgs/development/tools/gojq/default.nix
new file mode 100644
index 000000000000..af7bc42ca751
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gojq/default.nix
@@ -0,0 +1,30 @@
+{ lib, buildGoModule, fetchFromGitHub, testers, gojq }:
+
+buildGoModule rec {
+  pname = "gojq";
+  version = "0.12.14";
+
+  src = fetchFromGitHub {
+    owner = "itchyny";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-mgmgOi3nMPwmcofEAVIN9nTE2oXnNN89lqT+Vi+sjzY=";
+  };
+
+  vendorHash = "sha256-dv4k2dIFnlJrGDTDM4mXBOpr4MF7oxms0y02ml50YyY=";
+
+  ldflags = [ "-s" "-w" ];
+
+  passthru.tests.version = testers.testVersion {
+    package = gojq;
+  };
+
+  meta = with lib; {
+    description = "Pure Go implementation of jq";
+    homepage = "https://github.com/itchyny/gojq";
+    changelog = "https://github.com/itchyny/gojq/blob/v${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ aaronjheng ];
+    mainProgram = "gojq";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gojsontoyaml/default.nix b/nixpkgs/pkgs/development/tools/gojsontoyaml/default.nix
new file mode 100644
index 000000000000..88708f5b19fb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gojsontoyaml/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "gojsontoyaml";
+  version = "0.1.0";
+
+  src = fetchFromGitHub {
+    owner = "brancz";
+    repo = "gojsontoyaml";
+    rev = "v${version}";
+    sha256 = "sha256-ebxz2uTH7XwD3j6JnsfET6aCGYjvsCjow/sU9pagg50=";
+  };
+
+  vendorHash = null;
+
+  meta = with lib; {
+    description = "Simply tool to convert json to yaml written in Go";
+    homepage = "https://github.com/brancz/gojsontoyaml";
+    license = licenses.mit;
+    maintainers = [ maintainers.bryanasdev000 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gokart/default.nix b/nixpkgs/pkgs/development/tools/gokart/default.nix
new file mode 100644
index 000000000000..9521fcad96a4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gokart/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "gokart";
+  version = "0.5.1";
+
+  src = fetchFromGitHub {
+    owner = "praetorian-inc";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-G1IjlJ/rmviFWy6RFfLtP+bhfYcDuB97leimU39YCoQ=";
+  };
+
+  vendorHash = "sha256-lgKYVgJlmUJ/msdIqG7EKAZuISie1lG7+VeCF/rcSlE=";
+
+  # Would need files to scan which are not shipped by the project
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Static analysis tool for securing Go code";
+    homepage = "https://github.com/praetorian-inc/gokart";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/golangci-lint-langserver/default.nix b/nixpkgs/pkgs/development/tools/golangci-lint-langserver/default.nix
new file mode 100644
index 000000000000..ce43f3ed50b8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/golangci-lint-langserver/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "golangci-lint-langserver";
+  version = "0.0.9";
+
+  src = fetchFromGitHub {
+    owner = "nametake";
+    repo = "golangci-lint-langserver";
+    rev = "v${version}";
+    sha256 = "sha256-jNRDqg2a5dXo7QI4CBRw0MLwhfpdGuhygpMoSKNcgC0=";
+  };
+
+  vendorHash = "sha256-tAcl6P+cgqFX1eMYdS8vnfdNyb+1QNWwWdJsQU6Fpgg=";
+
+  subPackages = [ "." ];
+
+  meta = with lib; {
+    description = "Language server for golangci-lint";
+    homepage = "https://github.com/nametake/golangci-lint-langserver";
+    license = licenses.mit;
+    maintainers = with maintainers; [ kirillrdy ];
+    mainProgram = "golangci-lint-langserver";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/golangci-lint/default.nix b/nixpkgs/pkgs/development/tools/golangci-lint/default.nix
new file mode 100644
index 000000000000..123d12306f8f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/golangci-lint/default.nix
@@ -0,0 +1,43 @@
+{ buildGoModule, fetchFromGitHub, lib, installShellFiles }:
+
+buildGoModule rec {
+  pname = "golangci-lint";
+  version = "1.56.1";
+
+  src = fetchFromGitHub {
+    owner = "golangci";
+    repo = "golangci-lint";
+    rev = "v${version}";
+    hash = "sha256-6mwdDi9ltEKpDNa+GPEHiJdQO8csUg6MnuyiKQ02B80=";
+  };
+
+  vendorHash = "sha256-Y+y3X0pGFYeAMpvRWFgzcWRpHQL+X9J3/ehiO2N2P2o=";
+
+  subPackages = [ "cmd/golangci-lint" ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X main.version=${version}"
+    "-X main.commit=v${version}"
+    "-X main.date=19700101-00:00:00"
+  ];
+
+  postInstall = ''
+    for shell in bash zsh fish; do
+      HOME=$TMPDIR $out/bin/golangci-lint completion $shell > golangci-lint.$shell
+      installShellCompletion golangci-lint.$shell
+    done
+  '';
+
+  meta = with lib; {
+    description = "Fast linters Runner for Go";
+    homepage = "https://golangci-lint.run/";
+    changelog = "https://github.com/golangci/golangci-lint/blob/v${version}/CHANGELOG.md";
+    mainProgram = "golangci-lint";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ anpryl manveru mic92 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/golines/default.nix b/nixpkgs/pkgs/development/tools/golines/default.nix
new file mode 100644
index 000000000000..68ee00ecb638
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/golines/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "golines";
+  version = "0.12.2";
+
+  src = fetchFromGitHub {
+    owner = "segmentio";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-D0gI9BA0vgM1DBqwolNTfPsTCWuOGrcu5gAVFEdyVGg=";
+  };
+
+  vendorHash = "sha256-jI3/m1UdZMKrS3H9jPhcVAUCjc1G/ejzHi9SCTy24ak=";
+
+  meta = with lib; {
+    description = "A golang formatter that fixes long lines";
+    homepage = "https://github.com/segmentio/golines";
+    license = licenses.mit;
+    maintainers = with maintainers; [ meain ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/golint/default.nix b/nixpkgs/pkgs/development/tools/golint/default.nix
new file mode 100644
index 000000000000..34876a1e6400
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/golint/default.nix
@@ -0,0 +1,31 @@
+{ lib, buildGoModule, fetchgit }:
+
+buildGoModule rec {
+  pname = "golint";
+  version = "unstable-2020-12-08";
+
+  # we must allow references to the original `go` package, as golint uses
+  # compiler go/build package to load the packages it's linting.
+  allowGoReference = true;
+
+  src = fetchgit {
+    url = "https://go.googlesource.com/lint";
+    rev = "83fdc39ff7b56453e3793356bcff3070b9b96445";
+    sha256 = "sha256-g4Z9PREOxGoN7n/XhutawsITBznJlbz6StXeDYvOQ1c=";
+  };
+
+  vendorHash = "sha256-dPadFoymYu2Uw2AXZfbaBfxsN8IWMuK1TrcknHco3Bo=";
+
+  # tests no longer work:
+  # found packages pkg (4.go) and foo (blank-import-lib.go) in /build/lint-6edffad/testdata
+  # testdata/errorf-custom.go:9:2: cannot find package "." in:
+  #         /build/lint-6edffad/vendor/github.com/pkg/errors
+  doCheck = false;
+
+  meta = with lib; {
+    homepage = "https://golang.org";
+    description = "Linter for Go source code";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ jhillyerd tomberek ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gomacro/default.nix b/nixpkgs/pkgs/development/tools/gomacro/default.nix
new file mode 100644
index 000000000000..c172945b9067
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gomacro/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "gomacro";
+  rev = "b4c3ab9b218fd12f22759354f4f3e37635828d1f";
+  version = "20210131-${lib.strings.substring 0 7 rev}";
+
+  src = fetchFromGitHub {
+    owner = "cosmos72";
+    repo = "gomacro";
+    inherit rev;
+    hash = "sha256-zxiEt/RR7g5Q0wMLuRaybnT5dFfPCyvt0PvDjL9BJDI=";
+  };
+
+  vendorHash = "sha256-fQYuav0pT+/fGq0fmOWlsiVxA9tGV4JV8X7G3E6BZMU=";
+
+  subPackages = [ "." ];
+
+  meta = with lib; {
+    description = "Interactive Go interpreter and debugger with generics and macros";
+    homepage = "https://github.com/cosmos72/gomacro";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ shofius ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gomodifytags/default.nix b/nixpkgs/pkgs/development/tools/gomodifytags/default.nix
new file mode 100644
index 000000000000..08f95346306e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gomodifytags/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "gomodifytags";
+  version = "1.16.0";
+
+  src = fetchFromGitHub {
+    owner = "fatih";
+    repo = "gomodifytags";
+    rev = "v${version}";
+    sha256 = "1yhkn9mdvsn9i5v03c5smz32zlhkylnxhkcbjb7llafxzbhzgfm6";
+  };
+
+  vendorHash = "sha256-8efqJfu+gtoFbhdlDZfb8NsXV9hBDI2pvAQNH18VVhU=";
+
+  meta = {
+    description = "Go tool to modify struct field tags";
+    homepage = "https://github.com/fatih/gomodifytags";
+    maintainers = with lib.maintainers; [ vdemeester ];
+    license = lib.licenses.bsd3;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gomplate/default.nix b/nixpkgs/pkgs/development/tools/gomplate/default.nix
new file mode 100644
index 000000000000..28f9d8341fb4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gomplate/default.nix
@@ -0,0 +1,54 @@
+# Gomplate 3.x does not build with go > 1.20.
+# Version 4 of gomplate (yet unreleased) should not have this issue.
+#
+# see https://github.com/hairyhenderson/gomplate/issues/1872
+
+{ lib
+#, buildGoModule
+, buildGo120Module
+, fetchFromGitHub
+}:
+
+# buildGoModule rec {
+buildGo120Module rec {
+  pname = "gomplate";
+  version = "3.11.7";
+
+  src = fetchFromGitHub {
+    owner = "hairyhenderson";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-0cYQ44SF8fQ5Ml0tRUbqTFZ+zDVTV6elox1q6tNsG7Q=";
+  };
+
+  vendorHash = "sha256-8siITXKIqDbph/74aBEvkbLVqHE30VyRompFL6z92zA=";
+
+  postPatch = ''
+    # some tests require network access
+    rm net/net_test.go \
+      internal/tests/integration/datasources_blob_test.go \
+      internal/tests/integration/datasources_git_test.go
+    # some tests rely on external tools we'd rather not depend on
+    rm internal/tests/integration/datasources_consul_test.go \
+      internal/tests/integration/datasources_vault*_test.go
+  '';
+
+  # TestInputDir_RespectsUlimit
+  preCheck = ''
+    ulimit -n 1024
+  '';
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/${src.owner}/${pname}/v3/version.Version=${version}"
+  ];
+
+  meta = with lib; {
+    description = "A flexible commandline tool for template rendering";
+    homepage = "https://gomplate.ca/";
+    changelog = "https://github.com/hairyhenderson/gomplate/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ris jlesquembre ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/google-app-engine-go-sdk/default.nix b/nixpkgs/pkgs/development/tools/google-app-engine-go-sdk/default.nix
new file mode 100644
index 000000000000..1230ac606ecf
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/google-app-engine-go-sdk/default.nix
@@ -0,0 +1,47 @@
+{ lib, stdenv, fetchzip, python3Packages, makeWrapper }:
+
+with python3Packages;
+
+stdenv.mkDerivation rec {
+  pname = "google-app-engine-go-sdk";
+  version = "1.9.61";
+  src =
+    if stdenv.hostPlatform.system == "x86_64-linux" then
+      fetchzip {
+        url = "https://storage.googleapis.com/appengine-sdks/featured/go_appengine_sdk_linux_amd64-${version}.zip";
+        sha256 = "1i2j9ympl1218akwsmm7yb31v0gibgpzlb657bcravi1irfv1hhs";
+      }
+    else
+      fetchzip {
+        url = "https://storage.googleapis.com/appengine-sdks/featured/go_appengine_sdk_darwin_amd64-${version}.zip";
+        sha256 = "0s8sqyc72lnc7dxd4cl559gyfx83x71jjpsld3i3nbp3mwwamczp";
+      };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ python ];
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/
+    cp -r "$src" "$out/share/go_appengine"
+
+    # create wrappers with correct env
+    for i in goapp go-app-stager *.py; do
+      makeWrapper "$out/share/go_appengine/$i" "$out/bin/$i" \
+        --prefix PATH : "${python}/bin" \
+        --prefix PYTHONPATH : "$(toPythonPath ${cffi}):$(toPythonPath ${cryptography}):$(toPythonPath ${pyopenssl})"
+    done
+  '';
+
+  meta = with lib; {
+    description = "Google App Engine SDK for Go";
+    version = version;
+    homepage = "https://cloud.google.com/appengine/docs/go/";
+    sourceProvenance = with sourceTypes; [
+      fromSource
+      binaryNativeCode  # includes golang toolchain binaries
+    ];
+    license = licenses.asl20;
+    platforms = ["x86_64-linux" "x86_64-darwin"];
+    maintainers = with maintainers; [ lufia ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/google-clasp/default.nix b/nixpkgs/pkgs/development/tools/google-clasp/default.nix
new file mode 100644
index 000000000000..99520de7349c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/google-clasp/default.nix
@@ -0,0 +1,29 @@
+{ lib
+, buildNpmPackage
+, fetchFromGitHub
+}:
+
+buildNpmPackage rec {
+  pname = "clasp";
+  version = "2.4.2";
+
+  src = fetchFromGitHub {
+    owner = "google";
+    repo = "clasp";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-Cnnqbxjfx7hlRYIDtbjSbDO0QBHqLsleIGrAUQDLaCw=";
+  };
+
+  npmDepsHash = "sha256-4oYpGBpk4WBVnE1HNYmRRGHZgcPgta2YQB00YyWvbiI=";
+
+  # `npm run build` tries installing clasp globally
+  npmBuildScript = [ "compile" ];
+
+  meta = with lib; {
+    description = "Develop Apps Script Projects locally";
+    homepage = "https://github.com/google/clasp#readme";
+    changelog = "https://github.com/google/clasp/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ natsukium ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/google-java-format/default.nix b/nixpkgs/pkgs/development/tools/google-java-format/default.nix
new file mode 100644
index 000000000000..bf499e891dd6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/google-java-format/default.nix
@@ -0,0 +1,47 @@
+{ lib, stdenv, fetchurl, jre, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "google-java-format";
+  version = "1.19.2";
+
+  src = fetchurl {
+    url = "https://github.com/google/google-java-format/releases/download/v${version}/google-java-format-${version}-all-deps.jar";
+    sha256 = "sha256-2Ji19wxVr9z3wEMeSX1opIRyw4Ty0E/m8JeN/+Ysvio=";
+  };
+
+  dontUnpack = true;
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ jre ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/{bin,share/${pname}}
+    install -D ${src} $out/share/${pname}/google-java-format-${version}-all-deps.jar
+
+    makeWrapper ${jre}/bin/java $out/bin/${pname} \
+      --argv0 ${pname} \
+      --add-flags "--add-exports jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED" \
+      --add-flags "--add-exports jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED" \
+      --add-flags "--add-exports jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED" \
+      --add-flags "--add-exports jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED" \
+      --add-flags "--add-exports jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED" \
+      --add-flags "-jar $out/share/${pname}/google-java-format-${version}-all-deps.jar"
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Java source formatter by Google";
+    longDescription = ''
+      A program that reformats Java source code to comply with Google Java Style.
+    '';
+    homepage = "https://github.com/google/google-java-format";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.asl20;
+    maintainers = [ maintainers.emptyflask ];
+    platforms = platforms.all;
+    mainProgram = "google-java-format";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/goperf/default.nix b/nixpkgs/pkgs/development/tools/goperf/default.nix
new file mode 100644
index 000000000000..ed1a6c1a23b7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/goperf/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, buildGoModule
+, fetchgit
+, writeShellScript
+, unstableGitUpdater
+, sd
+}:
+
+buildGoModule rec {
+  pname = "goperf";
+  version = "unstable-2023-11-08";
+
+  src = fetchgit {
+    url = "https://go.googlesource.com/perf";
+    rev = "cb71e802ccb878a069712546879bf26489f0f300";
+    hash = "sha256-1NvrelLsy9lrepttXXnggc0oycC6EgJgU80iXDu3IoI=";
+  };
+
+  vendorHash = "sha256-dJQHqIR6v0yYbxplytkdA98IHtdxnsvi9X6kIESCsB8=";
+
+  passthru.updateScript = writeShellScript "update-goperf" ''
+    export UPDATE_NIX_ATTR_PATH=goperf
+    ${lib.escapeShellArgs (unstableGitUpdater { inherit (src) url; })}
+    set -x
+    oldhash="$(nix-instantiate . --eval --strict -A "goperf.go-modules.drvAttrs.outputHash" | cut -d'"' -f2)"
+    newhash="$(nix-build -A goperf.go-modules --no-out-link 2>&1 | tail -n3 | grep 'got:' | cut -d: -f2- | xargs echo || true)"
+    fname="$(nix-instantiate --eval -E 'with import ./. {}; (builtins.unsafeGetAttrPos "version" goperf).file' | cut -d'"' -f2)"
+    ${lib.getExe sd} --string-mode "$oldhash" "$newhash" "$fname"
+  '';
+
+  meta = with lib; {
+    description = "Tools and packages for analyzing Go benchmark results";
+    homepage = "https://cs.opensource.google/go/x/perf";
+    license = licenses.bsd3;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ pbsds ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gopkgs/default.nix b/nixpkgs/pkgs/development/tools/gopkgs/default.nix
new file mode 100644
index 000000000000..7b57354e3ea7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gopkgs/default.nix
@@ -0,0 +1,26 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "gopkgs";
+  version = "2.1.2";
+
+  src = fetchFromGitHub {
+    rev = "v${version}";
+    owner = "uudashr";
+    repo = "gopkgs";
+    hash = "sha256-ll5fhwzzCNL0UtMLNSGOY6Yyy0EqI8OZ1iqWad4KU8k=";
+  };
+
+  vendorHash = "sha256-WVikDxf79nEahKRn4Gw7Pv8AULQXW+RXGoA3ihBhmt8=";
+
+  subPackages = [ "cmd/gopkgs" ];
+
+  doCheck = false;
+
+  meta = {
+    description = "Tool to get list available Go packages";
+    homepage = "https://github.com/uudashr/gopkgs";
+    maintainers = with lib.maintainers; [ vdemeester ];
+    license = lib.licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gops/default.nix b/nixpkgs/pkgs/development/tools/gops/default.nix
new file mode 100644
index 000000000000..6b191d00bf3b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gops/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "gops";
+  version = "0.3.28";
+
+  src = fetchFromGitHub {
+    owner = "google";
+    repo = "gops";
+    rev = "v${version}";
+    sha256 = "sha256-HNM487WSfNWNF31ccDIdotsEG8Mj2C7V85UI47a9drU=";
+  };
+
+  vendorHash = "sha256-ptC2G7cXcAjthJcAXvuBqI2ZpPuSMBqzO+gJiyaAUP0=";
+
+  preCheck = "export HOME=$(mktemp -d)";
+
+  meta = with lib; {
+    description = "A tool to list and diagnose Go processes currently running on your system";
+    homepage = "https://github.com/google/gops";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ pborzenkov ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gore/default.nix b/nixpkgs/pkgs/development/tools/gore/default.nix
new file mode 100644
index 000000000000..4c6eac9f652a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gore/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "gore";
+  version = "0.5.7";
+
+  src = fetchFromGitHub {
+    owner = "motemen";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-J6rXz62y/qj4GFXnUwpfx9UEUQaUVQjf7KQCSzmNsws=";
+  };
+
+  vendorHash = "sha256-MpmDQ++32Rop1yYcibEr7hQJ7YAU1QvITzTSstL5V9w=";
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Yet another Go REPL that works nicely";
+    homepage = "https://github.com/motemen/gore";
+    license = licenses.mit;
+    maintainers = with maintainers; [ offline ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/goresym/default.nix b/nixpkgs/pkgs/development/tools/goresym/default.nix
new file mode 100644
index 000000000000..14d4d959020c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/goresym/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, lib, fetchFromGitHub, buildGoModule }:
+
+buildGoModule rec {
+  pname = "goresym";
+  version = "2.3";
+
+  src = fetchFromGitHub {
+    owner = "mandiant";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-o2t542q6UGjWdhJkcAm34kGhPUGNsvZKf940T+vydoE=";
+  };
+
+  subPackages = [ "." ];
+
+  vendorHash = "sha256-ElV5edbe1LQWbA1NKv52/rLZJeOLBahE4YBKg9OA7YY=";
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "Go symbol recovery tool";
+    homepage = "https://github.com/mandiant/GoReSym";
+    license = licenses.mit;
+    maintainers = with maintainers; [ thehedgeh0g ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gosec/default.nix b/nixpkgs/pkgs/development/tools/gosec/default.nix
new file mode 100644
index 000000000000..34a4c4da26fd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gosec/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "gosec";
+  version = "2.18.2";
+
+  src = fetchFromGitHub {
+    owner = "securego";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-y0ha9Za0QoZEsZG/eO9/LZ146q1Rg6wCGghe2roymHM=";
+  };
+
+  vendorHash = "sha256-cfAS1Z/ym4y2qcm8TPXqX4LZgaLsTjkwO9GOYLNjPN0=";
+
+  subPackages = [
+    "cmd/gosec"
+  ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X main.Version=${version}"
+    "-X main.GitTag=${src.rev}"
+    "-X main.BuildDate=unknown"
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/securego/gosec";
+    description = "Golang security checker";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ kalbasit nilp0inter ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gotags/default.nix b/nixpkgs/pkgs/development/tools/gotags/default.nix
new file mode 100644
index 000000000000..9fa71187aa31
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gotags/default.nix
@@ -0,0 +1,32 @@
+{ lib, buildGoModule, fetchFromGitHub, fetchpatch }:
+
+buildGoModule rec {
+  pname = "gotags";
+  version = "1.4.1";
+
+  src = fetchFromGitHub {
+    owner = "jstemmer";
+    repo = pname;
+    rev = "4c0c4330071a994fbdfdff68f412d768fbcca313";
+    hash = "sha256-cHTgt+zW6S6NDWBE6NxSXNPdn84CLD8WmqBe+uXN8sA=";
+  };
+
+  vendorHash = null;
+
+  patches = [
+    # Add Go Modules support
+    (fetchpatch {
+      url = "https://github.com/jstemmer/gotags/commit/9146999bce9a88e15b5f123d1aa1613926dd9a9c.patch";
+      hash = "sha256-6v/Ws15y50S6iCI1c0kEw5WHSg+1WqVT4mwdQKoi5G8=";
+    })
+  ];
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "ctags-compatible tag generator for Go";
+    homepage = "https://github.com/jstemmer/gotags";
+    license = licenses.mit;
+    maintainers = with maintainers; [ urandom ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gotemplate/default.nix b/nixpkgs/pkgs/development/tools/gotemplate/default.nix
new file mode 100644
index 000000000000..706fa7312d54
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gotemplate/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "gotemplate";
+  version = "3.7.5";
+
+  src = fetchFromGitHub {
+    owner = "coveooss";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-BMZyq7fa57WaE0cSkGjHWxtEnbC7vEy+kLaHDoI/KZU=";
+  };
+
+  vendorHash = "sha256-uRB3atrJ+A1/xXvgmkyM/AKN+9VKSIDvsnPIdtsc3vc=";
+
+  meta = with lib; {
+    description = "CLI for go text/template";
+    changelog = "https://github.com/coveooss/gotemplate/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ giorgiga ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gotest/default.nix b/nixpkgs/pkgs/development/tools/gotest/default.nix
new file mode 100644
index 000000000000..e618b3e9532d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gotest/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "gotest";
+  version = "0.0.6";
+
+  src = fetchFromGitHub {
+    owner = "rakyll";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1v11ccrjghq7nsz0f91r17di14yixsw28vs0m3dwzwqkh1a20img";
+  };
+
+  vendorHash = "sha256-pVq6H1HoKqCMRfJg7FftRf3vh+BWZQe6cQAX+TBzKqw=";
+
+  subPackages = [ "." ];
+
+  meta = with lib; {
+    description = "go test with colors";
+    homepage = "https://github.com/rakyll/gotest";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gotestfmt/default.nix b/nixpkgs/pkgs/development/tools/gotestfmt/default.nix
new file mode 100644
index 000000000000..0bd71fd5ea58
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gotestfmt/default.nix
@@ -0,0 +1,23 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+buildGoModule rec {
+  pname = "gotestfmt";
+  version = "2.5.0";
+
+  src = fetchFromGitHub {
+    owner = "gotesttools";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-7mLn2axlHoXau9JtLhk1zwzhxkFGHgYPo7igI+IAsP4=";
+  };
+
+  vendorHash = null;
+
+  meta = with lib; {
+    description = "Go test output for humans";
+    homepage = "https://github.com/gotesttools/gotestfmt";
+    changelog = "https://github.com/GoTestTools/gotestfmt/releases/tag/v${version}";
+    license = licenses.unlicense;
+    maintainers = with maintainers; [ urandom ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gotests/default.nix b/nixpkgs/pkgs/development/tools/gotests/default.nix
new file mode 100644
index 000000000000..70d1861e7416
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gotests/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "gotests";
+  version = "1.6.0";
+
+  src = fetchFromGitHub {
+    owner = "cweill";
+    repo = "gotests";
+    rev = "v${version}";
+    sha256 = "sha256-6IzUpAsFUgF2FwiC17OfDn1M+8WYFQPpRyXbkpHIztw=";
+  };
+
+  vendorHash = "sha256-WMeHZN3s+8pIYEVaSLjI3Bz+rPTWHr1AkZ8lydjBwCw=";
+
+  # tests are broken in nix environment
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Generate Go tests from your source code";
+    homepage = "https://github.com/cweill/gotests";
+    maintainers = with maintainers; [ vdemeester ];
+    license = licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gotestsum/default.nix b/nixpkgs/pkgs/development/tools/gotestsum/default.nix
new file mode 100644
index 000000000000..a944f344470c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gotestsum/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, fetchFromGitHub
+, buildGoModule
+}:
+
+buildGoModule rec {
+  pname = "gotestsum";
+  version = "1.10.1";
+
+  src = fetchFromGitHub {
+    owner = "gotestyourself";
+    repo = "gotestsum";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-Sq0ejnX7AJoPf3deBge8PMOq1NlMbw+Ljn145C5MQ+s=";
+  };
+
+  vendorHash = "sha256-zUqa6xlDV12ZV4N6+EZ7fLPsL8U+GB7boQ0qG9egvm0=";
+
+  doCheck = false;
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X gotest.tools/gotestsum/cmd.version=${version}"
+  ];
+
+  subPackages = [ "." ];
+
+  meta = with lib; {
+    homepage = "https://github.com/gotestyourself/gotestsum";
+    changelog = "https://github.com/gotestyourself/gotestsum/releases/tag/v${version}";
+    description = "A human friendly `go test` runner";
+    platforms = platforms.linux ++ platforms.darwin;
+    license = licenses.asl20;
+    maintainers = with maintainers; [ endocrimes ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gotools/default.nix b/nixpkgs/pkgs/development/tools/gotools/default.nix
new file mode 100644
index 000000000000..bbd77aedef7f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gotools/default.nix
@@ -0,0 +1,43 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "gotools";
+  version = "0.16.1";
+
+  # using GitHub instead of https://go.googlesource.com/tools because Gitiles UI is to basic to browse
+  src = fetchFromGitHub {
+    owner = "golang";
+    repo = "tools";
+    rev = "v${version}";
+    hash = "sha256-qFDi+d+2OuI+mMBceZiN+kJ0gPcfgXXRDrDDwqKeDOM=";
+  };
+
+  postPatch = ''
+    # The gopls folder contains a Go submodule which causes a build failure
+    # and lives in its own package named gopls.
+    rm -r gopls
+    # getgo is an experimental go installer which adds generic named server and client binaries to $out/bin
+    rm -r cmd/getgo
+  '';
+
+  vendorHash = "sha256-oOBdh4mK3x9HbxD00EDKLjFgd/4NQRlQXrnCigGOwLg=";
+
+  doCheck = false;
+
+  # Set GOTOOLDIR for derivations adding this to buildInputs
+  postInstall = ''
+    mkdir -p $out/nix-support
+    substitute ${./setup-hook.sh} $out/nix-support/setup-hook \
+      --subst-var-by bin $out
+  '';
+
+  meta = with lib; {
+    description = "Additional tools for Go development";
+    longDescription = ''
+      This package contains tools like: godoc, goimports, callgraph, digraph, stringer or toolstash.
+    '';
+    homepage = "https://go.googlesource.com/tools";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ danderson SuperSandro2000 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gotools/setup-hook.sh b/nixpkgs/pkgs/development/tools/gotools/setup-hook.sh
new file mode 100644
index 000000000000..e354e50c35aa
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gotools/setup-hook.sh
@@ -0,0 +1 @@
+export GOTOOLDIR=@bin@/bin
diff --git a/nixpkgs/pkgs/development/tools/gotraceui/default.nix b/nixpkgs/pkgs/development/tools/gotraceui/default.nix
new file mode 100644
index 000000000000..15cc09ffebd2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gotraceui/default.nix
@@ -0,0 +1,45 @@
+{
+  stdenv, lib, fetchFromGitHub, pkg-config, buildGoModule,
+  libGL, libX11, libXcursor, libXfixes, libxkbcommon, vulkan-headers, wayland,
+}:
+
+buildGoModule rec {
+  pname = "gotraceui";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "dominikh";
+    repo = "gotraceui";
+    rev = "v${version}";
+    sha256 = "sha256-Rforuh9YlTv/mTpQm0+BaY+Ssc4DAiDCzVkIerP5Uz0=";
+  };
+
+  vendorHash = "sha256-dNV5u6BG+2Nzci6dX/4/4WAeM/zXE5+Ix0HqIsNnm0E=";
+  subPackages = ["cmd/gotraceui"];
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [
+    vulkan-headers
+    libxkbcommon
+    wayland
+    libX11
+    libXcursor
+    libXfixes
+    libGL
+  ];
+
+  ldflags = ["-X gioui.org/app.ID=co.honnef.Gotraceui"];
+
+  postInstall = ''
+    cp -r share $out/
+  '';
+
+  meta = with lib; {
+    description = "An efficient frontend for Go execution traces";
+    homepage = "https://github.com/dominikh/gotraceui";
+    platforms = platforms.linux;
+    license = licenses.mit;
+    maintainers = with maintainers; [ dominikh ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/govers/default.nix b/nixpkgs/pkgs/development/tools/govers/default.nix
new file mode 100644
index 000000000000..eb234c82fc08
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/govers/default.nix
@@ -0,0 +1,20 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "govers";
+  version = "unstable-2016-06-23";
+
+  goPackagePath = "github.com/rogpeppe/govers";
+
+  src = fetchFromGitHub {
+    owner = "rogpeppe";
+    repo = "govers";
+    rev = "77fd787551fc5e7ae30696e009e334d52d2d3a43";
+    sha256 = "sha256-lpc8wFKAB+A8mBm9q3qNzTM8ktFS1MYdIvZVFP0eiIs=";
+  };
+
+  dontRenameImports = true;
+
+  doCheck = false; # fails, silently
+
+}
diff --git a/nixpkgs/pkgs/development/tools/gox/default.nix b/nixpkgs/pkgs/development/tools/gox/default.nix
new file mode 100644
index 000000000000..2cd8bbd8e06c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gox/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, makeWrapper
+, go
+}:
+
+buildGoModule rec {
+  pname = "gox";
+  version = "1.0.1";
+
+  src = fetchFromGitHub {
+    owner = "mitchellh";
+    repo = "gox";
+    rev = "v${version}";
+    sha256 = "0mkh81hd7kn45dz7b6yhzqsg2mvg1g6pwx89jjigxrnqhyg9vrl7";
+  };
+
+  vendorHash = null;
+
+  # This is required for wrapProgram.
+  allowGoReference = true;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postFixup = ''
+    wrapProgram $out/bin/gox --prefix PATH : ${lib.makeBinPath [ go ]}
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/mitchellh/gox";
+    description = "A dead simple, no frills Go cross compile tool";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ azahi ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gpp/default.nix b/nixpkgs/pkgs/development/tools/gpp/default.nix
new file mode 100644
index 000000000000..9e49b0c0284f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gpp/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook }:
+
+stdenv.mkDerivation {
+  pname = "gpp";
+  version = "2.25";
+
+  src = fetchFromGitHub {
+    owner = "logological";
+    repo = "gpp";
+    rev = "96c5dd8905384ea188f380f51d24cbd7fd58f642";
+    sha256 = "0bvhnx3yfhbfiqqhhz6k2a596ls5rval7ykbp3jl5b6062xj861b";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  installCheckPhase = "$out/bin/gpp --help";
+  doInstallCheck = true;
+
+  meta = with lib; {
+    description = "General-purpose preprocessor with customizable syntax";
+    homepage = "https://logological.org/gpp";
+    license = licenses.lgpl3;
+    maintainers = with maintainers; [ nmattia ];
+    platforms = with platforms; linux ++ darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gptcommit/default.nix b/nixpkgs/pkgs/development/tools/gptcommit/default.nix
new file mode 100644
index 000000000000..19d18edf1c42
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gptcommit/default.nix
@@ -0,0 +1,48 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, rustPlatform
+, pkg-config
+, nix-update-script
+, Security
+, SystemConfiguration
+, openssl
+}:
+
+let
+  pname = "gptcommit";
+  version = "0.5.16";
+in
+rustPlatform.buildRustPackage {
+  inherit pname version;
+
+  src = fetchFromGitHub {
+    owner = "zurawiki";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-JhMkK2zw3VL9o7j8DJmjY/im+GyCjfV2TJI3GDo8T8c=";
+  };
+
+  cargoHash = "sha256-ye9MAfG3m24ofV95Kr+KTP4FEqfrsm3aTQ464hG9q08=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  # 0.5.6 release has failing tests
+  doCheck = false;
+
+  buildInputs = lib.optionals stdenv.isDarwin [ Security SystemConfiguration ]
+    ++ lib.optionals stdenv.isLinux [ openssl ];
+
+  passthru = {
+    updateScript = nix-update-script { };
+  };
+
+  meta = with lib; {
+    description = "A git prepare-commit-msg hook for authoring commit messages with GPT-3. ";
+    homepage = "https://github.com/zurawiki/gptcommit";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ happysalada ];
+    platforms = with platforms; all;
+  };
+}
+
diff --git a/nixpkgs/pkgs/development/tools/gqlgenc/default.nix b/nixpkgs/pkgs/development/tools/gqlgenc/default.nix
new file mode 100644
index 000000000000..b421bb6e35af
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gqlgenc/default.nix
@@ -0,0 +1,24 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+buildGoModule rec {
+  pname = "gqlgenc";
+  version = "0.19.0";
+
+  src = fetchFromGitHub {
+    owner = "yamashou";
+    repo = "gqlgenc";
+    rev = "v${version}";
+    sha256 = "sha256-V2YKRRJP1KQDo0oIoKU3g/3H1Xeo2oLg3arCDU6NMto=";
+  };
+
+  excludedPackages = [ "example" ];
+
+  vendorHash = "sha256-lJ3oYDW7BJnguIJ/TzZSUgSuoDIKmb6hdXOKENtmk6M=";
+
+  meta = with lib; {
+    description = "Go tool for building GraphQL client with gqlgen";
+    homepage = "https://github.com/Yamashou/gqlgenc";
+    license = licenses.mit;
+    maintainers = with maintainers; [ milran ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gqlint/default.nix b/nixpkgs/pkgs/development/tools/gqlint/default.nix
new file mode 100644
index 000000000000..18fc0cc624b7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gqlint/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, buildNpmPackage
+, fetchFromGitHub
+}:
+
+buildNpmPackage rec {
+  pname = "gqlint";
+  version = "1.8.0";
+
+  src = fetchFromGitHub {
+    owner = "happylinks";
+    repo = "gqlint";
+    rev = "v${version}";
+    hash = "sha256-m/Y7i3+93UdPnKQlZUHgtRbfSmJ1xYjao+bU+zxMgHw=";
+  };
+
+  npmDepsHash = "sha256-Fc5RbBqrJB7KSqLgTmIsPf3MK2n7vef/UVeFqH0o7mE=";
+
+  dontNpmBuild = true;
+
+  meta = {
+    description = "GraphQL linter";
+    homepage = "https://github.com/happylinks/gqlint";
+    license = lib.licenses.mit;
+    mainProgram = "gqlint";
+    maintainers = with lib.maintainers; [ hardselius ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/grabserial/default.nix b/nixpkgs/pkgs/development/tools/grabserial/default.nix
new file mode 100644
index 000000000000..2ce3ff49c417
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/grabserial/default.nix
@@ -0,0 +1,26 @@
+{ lib, fetchFromGitHub, python3Packages }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "grabserial";
+  version = "2.0.2";
+
+  src = fetchFromGitHub {
+    owner = "tbird20d";
+    repo = "grabserial";
+    rev = "v${version}";
+    sha256 = "0ryk4w8q6zfmia71nwnk5b7xaxw0sf45dw9q50xp7k76i3k5f9f3";
+  };
+
+  propagatedBuildInputs = [ python3Packages.pyserial ];
+
+  # no usable tests
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Python based serial dump and timing program";
+    homepage = "https://github.com/tbird20d/grabserial";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ vmandela ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/graphql-client/default.nix b/nixpkgs/pkgs/development/tools/graphql-client/default.nix
new file mode 100644
index 000000000000..b41a7a02bdc6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/graphql-client/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, rustPlatform, fetchCrate, pkg-config, openssl, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "graphql-client";
+  version = "0.13.0";
+
+  src = fetchCrate {
+    inherit version;
+    crateName = "graphql_client_cli";
+    sha256 = "sha256-eQ+7Ru3au/rDQZtwFDXYyybqC5uFtNBs6cEzX2QSFI4=";
+  };
+
+  cargoSha256 = "sha256-fEjt7ax818hlIq2+UrIG6EismQUGdaq7/C3xN+Nrw2s=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+  buildInputs = [
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [ Security ];
+
+  meta = with lib; {
+    description = "A GraphQL tool for Rust projects";
+    homepage = "https://github.com/graphql-rust/graphql-client";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ bbigras ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gron/default.nix b/nixpkgs/pkgs/development/tools/gron/default.nix
new file mode 100644
index 000000000000..cc8a72190277
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gron/default.nix
@@ -0,0 +1,30 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "gron";
+  version = "0.7.1";
+
+  src = fetchFromGitHub {
+    owner = "tomnomnom";
+    repo = "gron";
+    rev = "v${version}";
+    sha256 = "sha256-ZkAfAQsaFX7npyDcBDFS4Xa8kOMVH6yGfxGD7c0iQ+o=";
+  };
+
+  vendorHash = "sha256-K/QAG9mCIHe7PQhex3TntlGYAK9l0bESWk616N97dBs=";
+
+  ldflags = [ "-s" "-w" "-X main.gronVersion=${version}" ];
+
+  meta = with lib; {
+    description = "Make JSON greppable!";
+    longDescription = ''
+      gron transforms JSON into discrete assignments to make it easier to grep
+      for what you want and see the absolute 'path' to it. It eases the
+      exploration of APIs that return large blobs of JSON but have terrible
+      documentation.
+    '';
+    homepage = "https://github.com/tomnomnom/gron";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fgaz SuperSandro2000 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/grpc-gateway/default.nix b/nixpkgs/pkgs/development/tools/grpc-gateway/default.nix
new file mode 100644
index 000000000000..83d5a575b838
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/grpc-gateway/default.nix
@@ -0,0 +1,48 @@
+{ buildGoModule, fetchFromGitHub, lib, testers, grpc-gateway }:
+
+buildGoModule rec {
+  pname = "grpc-gateway";
+  version = "2.19.1";
+
+  src = fetchFromGitHub {
+    owner = "grpc-ecosystem";
+    repo = "grpc-gateway";
+    rev = "v${version}";
+    sha256 = "sha256-CdGQpQfOSimeio8v1lZ7xzE/oAS2qFyu+uN+H9i7vpo=";
+  };
+
+  vendorHash = "sha256-no7kZGpf/VOuceC3J+izGFQp5aMS3b+Rn+x4BFZ2zgs=";
+
+  ldflags = [
+    "-X=main.version=${version}"
+    "-X=main.date=1970-01-01T00:00:00Z"
+    "-X=main.commit=unknown"
+  ];
+
+  passthru.tests = {
+    version = testers.testVersion {
+      package = grpc-gateway;
+      command = "protoc-gen-grpc-gateway --version";
+      version = "Version ${version}, commit unknown, built at 1970-01-01T00:00:00Z";
+    };
+    openapiv2Version = testers.testVersion {
+      package = grpc-gateway;
+      command = "protoc-gen-openapiv2 --version";
+      version = "Version ${version}, commit unknown, built at 1970-01-01T00:00:00Z";
+    };
+  };
+
+  meta = with lib; {
+    description =
+      "A gRPC to JSON proxy generator plugin for Google Protocol Buffers";
+    longDescription = ''
+      This is a plugin for the Google Protocol Buffers compiler (protoc). It reads
+      protobuf service definitions and generates a reverse-proxy server which
+      translates a RESTful HTTP API into gRPC. This server is generated according to
+      the google.api.http annotations in the protobuf service definitions.
+    '';
+    homepage = "https://github.com/grpc-ecosystem/grpc-gateway";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ happyalu ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gtk-mac-bundler/default.nix b/nixpkgs/pkgs/development/tools/gtk-mac-bundler/default.nix
new file mode 100644
index 000000000000..c4ac76f46123
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gtk-mac-bundler/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, lib, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "gtk-mac-bundler";
+  version = "0.7.4";
+
+  src = fetchFromGitHub {
+    owner = "GNOME";
+    repo = "gtk-mac-bundler";
+    rev = "bundler-${version}";
+    sha256 = "1kyyq2hc217i5vhbfff0ldgv0r3aziwryd1xlck5cw3s6hgskbza";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin
+    substitute gtk-mac-bundler.in $out/bin/gtk-mac-bundler \
+      --subst-var-by PATH $out/share
+    chmod a+x $out/bin/gtk-mac-bundler
+
+    mkdir -p $out/share
+    cp -r bundler $out/share
+  '';
+
+  meta = with lib; {
+    description = "a helper script that creates application bundles form GTK executables for macOS";
+    maintainers = [ maintainers.matthewbauer ];
+    platforms = platforms.darwin;
+    homepage = "https://wiki.gnome.org/Projects/GTK/OSX/Bundling";
+    license = licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/guile/g-wrap/default.nix b/nixpkgs/pkgs/development/tools/guile/g-wrap/default.nix
new file mode 100644
index 000000000000..516076012423
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/guile/g-wrap/default.nix
@@ -0,0 +1,36 @@
+{ fetchurl, lib, stdenv, guile, guile-lib, libffi, pkg-config, glib }:
+
+stdenv.mkDerivation rec {
+  pname = "g-wrap";
+  version = "1.9.15";
+
+  src = fetchurl {
+    url = "mirror://savannah/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "0ak0bha37dfpj9kmyw1r8fj8nva639aw5xr66wr5gd3l1rqf5xhg";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+
+  # Note: Glib support is optional, but it's quite useful (e.g., it's used by
+  # Guile-GNOME).
+  buildInputs = [ guile glib guile-lib ];
+
+  propagatedBuildInputs = [ libffi ];
+
+  env.NIX_CFLAGS_COMPILE = "-Wno-error=deprecated-declarations";
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "A wrapper generator for Guile";
+    longDescription = ''
+      G-Wrap is a tool (and Guile library) for generating function wrappers for
+      inter-language calls.  It currently only supports generating Guile
+      wrappers for C functions.
+    '';
+    homepage = "https://www.nongnu.org/g-wrap/";
+    license = licenses.lgpl2Plus;
+    maintainers = with maintainers; [ vyp ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/guile/guile-hall/default.nix b/nixpkgs/pkgs/development/tools/guile/guile-hall/default.nix
new file mode 100644
index 000000000000..b786a3427373
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/guile/guile-hall/default.nix
@@ -0,0 +1,44 @@
+{ lib, stdenv, fetchFromGitLab, autoreconfHook, pkg-config
+, texinfo, makeWrapper, guile, guile-config }:
+
+stdenv.mkDerivation rec {
+  pname = "guile-hall";
+  version = "0.4.1";
+
+  src = fetchFromGitLab {
+    owner = "a-sassmannshausen";
+    repo = "guile-hall";
+    rev = version;
+    hash = "sha256-TUCN8kW44X6iGbSJURurcz/Tc2eCH1xgmXH1sMOMOXs=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config texinfo makeWrapper ];
+
+  buildInputs = [ guile guile-config ];
+
+  enableParallelBuilding = true;
+
+  doCheck = true;
+
+  postInstall = ''
+    wrapProgram $out/bin/hall \
+      --prefix GUILE_LOAD_PATH : "$out/${guile.siteDir}:$GUILE_LOAD_PATH" \
+      --prefix GUILE_LOAD_COMPILED_PATH : "$out/${guile.siteCcacheDir}:$GUILE_LOAD_COMPILED_PATH"
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+    export HOME=$TMPDIR
+    $out/bin/hall --version | grep ${version} > /dev/null
+    runHook postInstallCheck
+  '';
+
+  meta = with lib; {
+    description = "Project manager and build tool for GNU guile";
+    homepage = "https://gitlab.com/a-sassmannshausen/guile-hall";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ sikmir ];
+    platforms = guile.meta.platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/halfempty/default.nix b/nixpkgs/pkgs/development/tools/halfempty/default.nix
new file mode 100644
index 000000000000..113647da9ff8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/halfempty/default.nix
@@ -0,0 +1,48 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, pkg-config, glib, hexdump, scowl }:
+
+stdenv.mkDerivation rec {
+  pname = "halfempty";
+  version = "0.40";
+
+  src = fetchFromGitHub {
+    owner = "googleprojectzero";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-YGq6fneAMo2jCpLPrjzRJ0eeOsStKaK5L+lwQfqcfpY=";
+  };
+
+  nativeBuildInputs = [ pkg-config hexdump ];
+  buildInputs = [ glib ];
+
+  makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
+
+  enableParallelBuilding = true;
+
+  patches = [
+    (fetchpatch {
+      name = "fix-bash-specific-syntax.patch";
+      url = "https://github.com/googleprojectzero/halfempty/commit/ad15964d0fcaba12e5aca65c8935ebe3f37d7ea3.patch";
+      sha256 = "sha256:0hgdci0wwi5wyw8i57w0545cxjmsmswm1y6g4vhykap0y40zizav";
+    })
+  ];
+
+  postPatch = ''
+    substituteInPlace test/Makefile \
+      --replace '/usr/share/dict/words' '${scowl}/share/dict/words.txt'
+  '';
+
+  installPhase = ''
+    install -vDt $out/bin halfempty
+  '';
+
+  doCheck = true;
+  checkTarget = "test";
+
+  meta = {
+    description = "Fast, parallel test case minimization tool";
+    homepage = "https://github.com/googleprojectzero/halfempty/";
+    maintainers = with lib.maintainers; [ fpletz ];
+    license = with lib.licenses; [ asl20 ];
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/haskell/dconf2nix/dconf2nix.nix b/nixpkgs/pkgs/development/tools/haskell/dconf2nix/dconf2nix.nix
new file mode 100644
index 000000000000..eae92da19267
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/haskell/dconf2nix/dconf2nix.nix
@@ -0,0 +1,25 @@
+{ mkDerivation, base, containers, emojis, fetchgit, hedgehog, lib
+, optparse-applicative, parsec, template-haskell, text
+}:
+mkDerivation {
+  pname = "dconf2nix";
+  version = "0.1.1";
+  src = fetchgit {
+    url = "https://github.com/gvolpe/dconf2nix.git";
+    sha256 = "0frqnq7ryr4gvkbb67n0615d9h1blps2kp55ic05n7wxyh26adgz";
+    rev = "2fc3b0dfbbce9f1ea2ee89f3689a7cb95b33b63f";
+    fetchSubmodules = true;
+  };
+  isLibrary = true;
+  isExecutable = true;
+  libraryHaskellDepends = [
+    base containers emojis optparse-applicative parsec text
+  ];
+  executableHaskellDepends = [ base ];
+  testHaskellDepends = [
+    base containers hedgehog parsec template-haskell text
+  ];
+  description = "Convert dconf files to Nix, as expected by Home Manager";
+  license = lib.licenses.asl20;
+  mainProgram = "dconf2nix";
+}
diff --git a/nixpkgs/pkgs/development/tools/haskell/dconf2nix/default.nix b/nixpkgs/pkgs/development/tools/haskell/dconf2nix/default.nix
new file mode 100644
index 000000000000..4cc137b54f75
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/haskell/dconf2nix/default.nix
@@ -0,0 +1,32 @@
+{ haskell, haskellPackages, lib, runCommand }:
+
+let
+  dconf2nix =
+    haskell.lib.compose.justStaticExecutables
+      (haskell.lib.compose.overrideCabal (oldAttrs: {
+        maintainers = (oldAttrs.maintainers or []) ++ [
+          lib.maintainers.gvolpe
+        ];
+      }) haskellPackages.dconf2nix);
+in
+
+dconf2nix.overrideAttrs (oldAttrs: {
+  passthru = (oldAttrs.passthru or {}) // {
+    updateScript = ./update.sh;
+
+    # These tests can be run with the following command.
+    #
+    # $ nix-build -A dconf2nix.passthru.tests
+    tests =
+      runCommand
+        "dconf2nix-tests"
+        {
+          nativeBuildInputs = [
+            dconf2nix
+          ];
+        }
+        ''
+          dconf2nix > $out
+        '';
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/haskell/dconf2nix/update.sh b/nixpkgs/pkgs/development/tools/haskell/dconf2nix/update.sh
new file mode 100755
index 000000000000..8129824e256b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/haskell/dconf2nix/update.sh
@@ -0,0 +1,26 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p cabal2nix curl jq
+#
+# This script will update the dconf2nix derivation to the latest version using
+# cabal2nix.
+
+set -eo pipefail
+
+# This is the directory of this update.sh script.
+script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
+
+# dconf2nix derivation created with cabal2nix.
+dconf2nix_derivation_file="${script_dir}/dconf2nix.nix"
+
+# This is the current revision of dconf2nix in Nixpkgs.
+old_version="$(sed -En 's/.*\bversion = "(.*?)".*/\1/p' "$dconf2nix_derivation_file")"
+
+# This is the latest release version of dconf2nix on GitHub.
+new_version=$(curl --silent "https://api.github.com/repos/gvolpe/dconf2nix/releases" | jq '.[0].tag_name' --raw-output)
+
+echo "Updating dconf2nix from old version $old_version to new version $new_version."
+echo "Running cabal2nix and outputting to ${dconf2nix_derivation_file}..."
+
+cabal2nix --revision "$new_version" "https://github.com/gvolpe/dconf2nix.git" > "$dconf2nix_derivation_file"
+
+echo "Finished."
diff --git a/nixpkgs/pkgs/development/tools/haskell/hadrian/disable-hyperlinked-source.patch b/nixpkgs/pkgs/development/tools/haskell/hadrian/disable-hyperlinked-source.patch
new file mode 100644
index 000000000000..72010f85cddc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/haskell/hadrian/disable-hyperlinked-source.patch
@@ -0,0 +1,12 @@
+diff --git a/hadrian/src/Settings/Builders/Haddock.hs b/hadrian/src/Settings/Builders/Haddock.hs
+index 902b2f85e2..429a441c3b 100644
+--- a/src/Settings/Builders/Haddock.hs
++++ b/src/Settings/Builders/Haddock.hs
+@@ -57,7 +57,6 @@ haddockBuilderArgs = mconcat
+             , arg $ "--odir=" ++ takeDirectory output
+             , arg $ "--dump-interface=" ++ output
+             , arg "--html"
+-            , arg "--hyperlinked-source"
+             , arg "--hoogle"
+             , arg "--quickjump"
+             , arg $ "--title=" ++ pkgName pkg ++ "-" ++ version
diff --git a/nixpkgs/pkgs/development/tools/haskell/hadrian/ghc-platform.nix b/nixpkgs/pkgs/development/tools/haskell/hadrian/ghc-platform.nix
new file mode 100644
index 000000000000..3b1b17fba2c7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/haskell/hadrian/ghc-platform.nix
@@ -0,0 +1,16 @@
+{ mkDerivation, base, lib
+  # GHC source tree to build ghc-toolchain from
+, ghcSrc
+, ghcVersion
+}:
+mkDerivation {
+  pname = "ghc-platform";
+  version = ghcVersion;
+  src = ghcSrc;
+  postUnpack = ''
+    sourceRoot="$sourceRoot/libraries/ghc-platform"
+  '';
+  libraryHaskellDepends = [ base ];
+  description = "Platform information used by GHC and friends";
+  license = lib.licenses.bsd3;
+}
diff --git a/nixpkgs/pkgs/development/tools/haskell/hadrian/ghc-toolchain.nix b/nixpkgs/pkgs/development/tools/haskell/hadrian/ghc-toolchain.nix
new file mode 100644
index 000000000000..035fee7aca80
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/haskell/hadrian/ghc-toolchain.nix
@@ -0,0 +1,19 @@
+{ mkDerivation, base, directory, filepath, ghc-platform, lib
+, process, text, transformers
+  # GHC source tree to build ghc-toolchain from
+, ghcVersion
+, ghcSrc
+}:
+mkDerivation {
+  pname = "ghc-toolchain";
+  version = ghcVersion;
+  src = ghcSrc;
+  postUnpack = ''
+    sourceRoot="$sourceRoot/utils/ghc-toolchain"
+  '';
+  libraryHaskellDepends = [
+    base directory filepath ghc-platform process text transformers
+  ];
+  description = "Utility for managing GHC target toolchains";
+  license = lib.licenses.bsd3;
+}
diff --git a/nixpkgs/pkgs/development/tools/haskell/hadrian/hadrian.nix b/nixpkgs/pkgs/development/tools/haskell/hadrian/hadrian.nix
new file mode 100644
index 000000000000..1be21d6f4519
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/haskell/hadrian/hadrian.nix
@@ -0,0 +1,55 @@
+# See also ./make-hadria.nix
+{ mkDerivation, base, bytestring, Cabal, containers, directory
+, extra, filepath, lib, mtl, parsec, shake, text, transformers
+, unordered-containers, cryptohash-sha256, base16-bytestring
+, writeText
+  # Dependencies that are not on Hackage and only used in certain Hadrian versions
+, ghc-platform ? null
+, ghc-toolchain ? null
+  # GHC source tree to build hadrian from
+, ghcSrc
+, ghcVersion
+  # Customization
+, userSettings ? null
+, enableHyperlinkedSource
+}:
+
+mkDerivation {
+  pname = "hadrian";
+  version = ghcVersion;
+  src = ghcSrc;
+  postUnpack = ''
+    sourceRoot="$sourceRoot/hadrian"
+  '';
+  patches = lib.optionals (!enableHyperlinkedSource) [
+    ./disable-hyperlinked-source.patch
+  ];
+  # Overwrite UserSettings.hs with a provided custom one
+  postPatch = lib.optionalString (userSettings != null) ''
+    install -m644 "${writeText "UserSettings.hs" userSettings}" src/UserSettings.hs
+  '';
+  configureFlags = [
+    # avoid QuickCheck dep which needs shared libs / TH
+    "-f-selftest"
+    # Building hadrian with -O1 takes quite some time with little benefit.
+    # Additionally we need to recompile it on every change of UserSettings.hs.
+    # See https://gitlab.haskell.org/ghc/ghc/-/merge_requests/1190
+    "-O0"
+  ];
+  isLibrary = false;
+  isExecutable = true;
+  executableHaskellDepends = [
+    base bytestring Cabal containers directory extra filepath mtl
+    parsec shake text transformers unordered-containers
+  ] ++ lib.optionals (lib.versionAtLeast ghcVersion "9.7") [
+    cryptohash-sha256 base16-bytestring
+  ] ++ lib.optionals (lib.versionAtLeast ghcVersion "9.9") [
+    ghc-platform ghc-toolchain
+  ];
+  passthru = {
+    # Expose »private« dependencies if any
+    inherit ghc-platform ghc-toolchain;
+  };
+  description = "GHC build system";
+  license = lib.licenses.bsd3;
+}
diff --git a/nixpkgs/pkgs/development/tools/haskell/hadrian/make-hadrian.nix b/nixpkgs/pkgs/development/tools/haskell/hadrian/make-hadrian.nix
new file mode 100644
index 000000000000..6aa30cb9e60c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/haskell/hadrian/make-hadrian.nix
@@ -0,0 +1,59 @@
+# Hadrian is the build system used to (exclusively) build GHC. It can
+# (theoretically) be used starting with GHC 9.4 and is required since 9.6. It is
+# developed in the GHC source tree and specific to the GHC version it is released
+# with, i.e. Hadrian always needs to be built from the same GHC source tree as
+# the GHC we want to build.
+#
+# This fact makes it impossible to integrate Hadrian into our Haskell package
+# sets which are also used to bootstrap GHC, since a package set can bootstrap
+# multiple GHC versions (usually two major versions). A bootstrap set would need
+# knowledge of the GHC it would eventually bootstrap which would make the logic
+# unnecessarily complicated.
+#
+# Luckily Hadrian is, while annoying to bootstrap, relatively simple. Specifically
+# all it requires to build is (relative to the GHC we are trying to build) a
+# build->build GHC and build->build Haskell packages. We can get all of this
+# from bootPkgs which is already passed to the GHC expression.
+#
+# The solution is the following: The GHC expression passes its source tree and
+# version along with some parameters to this function (./make-hadrian.nix)
+# which acts as a common expression builder for all Hadrian version as well as
+# related packages that are managed in the GHC source tree. Its main job is to
+# expose all possible compile time customization in a common interface and
+# take care of all differences between Hadrian versions.
+{ bootPkgs
+, lib
+}:
+
+{ # GHC source tree and version to build hadrian & friends from.
+  # These are passed on to the actual package expressions.
+  ghcSrc
+, ghcVersion
+  # Contents of a non-default UserSettings.hs to use when building hadrian, if any.
+  # Should be a string or null.
+, userSettings ? null
+  # Whether to pass --hyperlinked-source to haddock or not. This is a custom
+  # workaround as we wait for this to be configurable via userSettings or similar.
+  # https://gitlab.haskell.org/ghc/ghc/-/issues/23625
+, enableHyperlinkedSource ? false
+}:
+
+let
+  callPackage' = f: args: bootPkgs.callPackage f ({
+    inherit ghcSrc ghcVersion;
+  } // args);
+
+  ghc-platform = callPackage' ./ghc-platform.nix { };
+  ghc-toolchain = callPackage' ./ghc-toolchain.nix {
+    inherit ghc-platform;
+  };
+in
+
+callPackage' ./hadrian.nix ({
+  inherit userSettings enableHyperlinkedSource;
+} // lib.optionalAttrs (lib.versionAtLeast ghcVersion "9.9") {
+  # Starting with GHC 9.9 development, additional in tree packages are required
+  # to build hadrian. (Hackage-released conditional dependencies are handled
+  # in ./hadrian.nix without requiring intervention here.)
+  inherit ghc-platform ghc-toolchain;
+})
diff --git a/nixpkgs/pkgs/development/tools/haskell/haskell-language-server/withWrapper.nix b/nixpkgs/pkgs/development/tools/haskell/haskell-language-server/withWrapper.nix
new file mode 100644
index 000000000000..59a1303764ba
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/haskell/haskell-language-server/withWrapper.nix
@@ -0,0 +1,169 @@
+{ lib
+, stdenv
+, haskellPackages
+, haskell
+
+# Which GHC versions this hls can support.
+# These are looked up in nixpkgs as `pkgs.haskell.packages."ghc${version}`.
+# Run
+#  $ nix-instantiate --eval -E 'with import <nixpkgs> {}; builtins.attrNames pkgs.haskell.packages'
+# to list for your nixpkgs version.
+, supportedGhcVersions ? [ "94" ]
+
+# Whether to build hls with the dynamic run-time system.
+# See https://haskell-language-server.readthedocs.io/en/latest/troubleshooting.html#static-binaries for more information.
+, dynamic ? true
+
+# Which formatters are supported. Pass `[]` to remove all formatters.
+#
+# Maintainers: if a new formatter is added, add it here and down in knownFormatters
+, supportedFormatters ? [ "ormolu" "fourmolu" "floskell" "stylish-haskell" ]
+}:
+
+# make sure the user only sets GHC versions that actually exist
+assert supportedGhcVersions != [];
+assert
+  lib.asserts.assertEachOneOf
+    "supportedGhcVersions"
+    supportedGhcVersions
+    (lib.pipe haskell.packages [
+      lib.attrNames
+      (lib.filter (lib.hasPrefix "ghc"))
+      (map (lib.removePrefix "ghc"))
+    ]);
+
+let
+  # A mapping from formatter name to
+  # - cabal flag to disable
+  # - formatter-specific packages that can be stripped from the build of hls if it is disabled
+  knownFormatters = {
+    ormolu = {
+      cabalFlag = "ormolu";
+      packages = [
+        "hls-ormolu-plugin"
+      ];
+    };
+    fourmolu = {
+      cabalFlag = "fourmolu";
+      packages = [
+        "hls-fourmolu-plugin"
+      ];
+    };
+    floskell = {
+      cabalFlag = "floskell";
+      packages = [
+        "hls-floskell-plugin"
+      ];
+    };
+    stylish-haskell = {
+      cabalFlag = "stylishhaskell";
+      packages = [
+        "hls-stylish-haskell-plugin"
+      ];
+    };
+  };
+
+in
+
+# make sure any formatter that is set is actually supported by us
+assert
+  lib.asserts.assertEachOneOf
+    "supportedFormatters"
+    supportedFormatters
+    (lib.attrNames knownFormatters);
+
+#
+# The recommended way to override this package is
+#
+# pkgs.haskell-language-server.override { supportedGhcVersions = [ "90" "92"]; }
+#
+# for example. Read more about this in the haskell-language-server section of the nixpkgs manual.
+#
+let
+  inherit (haskell.lib.compose)
+    justStaticExecutables
+    overrideCabal
+    enableCabalFlag
+    disableCabalFlag
+    ;
+
+  getPackages = version: haskell.packages."ghc${version}";
+
+  # Given the list of `supportedFormatters`, remove every formatter that we know of (knownFormatters)
+  # by disabling the cabal flag and also removing the formatter libraries.
+  removeUnnecessaryFormatters =
+    let
+      # only formatters that were not requested
+      unwanted = lib.pipe knownFormatters [
+        (lib.filterAttrs (fmt: _: ! (lib.elem fmt supportedFormatters)))
+        lib.attrsToList
+      ];
+      # all flags to disable
+      flags = map (fmt: fmt.value.cabalFlag) unwanted;
+      # all dependencies to remove from hls
+      deps = lib.concatMap (fmt: fmt.value.packages) unwanted;
+
+      # remove nulls from a list
+      stripNulls = lib.filter (x: x != null);
+
+      # remove all unwanted dependencies of formatters we don’t want
+      stripDeps = overrideCabal (drv: {
+        libraryHaskellDepends = lib.pipe (drv.libraryHaskellDepends or []) [
+          # the existing list may contain nulls, so let’s strip them first
+          stripNulls
+          (lib.filter (dep: ! (lib.elem dep.pname deps)))
+        ];
+      });
+
+    in drv: lib.pipe drv ([stripDeps] ++ map disableCabalFlag flags);
+
+  tunedHls = hsPkgs:
+    lib.pipe hsPkgs.haskell-language-server ([
+      (haskell.lib.compose.overrideCabal (old: {
+        enableSharedExecutables = dynamic;
+        ${if !dynamic then "postInstall" else null} = ''
+          ${old.postInstall or ""}
+
+          remove-references-to -t ${hsPkgs.ghc} $out/bin/haskell-language-server
+        '';
+      }))
+      ((if dynamic then enableCabalFlag else disableCabalFlag) "dynamic")
+      removeUnnecessaryFormatters
+    ]
+    ++ lib.optionals (!dynamic) [
+      justStaticExecutables
+    ]);
+
+  targets = version:
+    let packages = getPackages version;
+    in [ "haskell-language-server-${packages.ghc.version}" ];
+
+  makeSymlinks = version:
+    lib.concatMapStringsSep "\n"
+      (x:
+        "ln -s ${
+          tunedHls (getPackages version)
+        }/bin/haskell-language-server $out/bin/${x}")
+      (targets version);
+
+in stdenv.mkDerivation {
+  pname = "haskell-language-server";
+  version = haskellPackages.haskell-language-server.version;
+
+  buildCommand = ''
+    mkdir -p $out/bin
+    ln -s ${tunedHls (getPackages (builtins.head supportedGhcVersions))}/bin/haskell-language-server-wrapper $out/bin/haskell-language-server-wrapper
+    ${lib.concatMapStringsSep "\n" makeSymlinks supportedGhcVersions}
+  '';
+
+  meta = haskellPackages.haskell-language-server.meta // {
+    maintainers = [ lib.maintainers.maralorn ];
+    longDescription = ''
+      This package provides the executables ${
+        lib.concatMapStringsSep ", " (x: lib.concatStringsSep ", " (targets x))
+        supportedGhcVersions
+      } and haskell-language-server-wrapper.
+      You can choose for which ghc versions to install hls with pkgs.haskell-language-server.override { supportedGhcVersions = [ "90" "92" ]; }.
+    '';
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/haskell/hyper-haskell/default.nix b/nixpkgs/pkgs/development/tools/haskell/hyper-haskell/default.nix
new file mode 100644
index 000000000000..2b3fb76903e5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/haskell/hyper-haskell/default.nix
@@ -0,0 +1,53 @@
+{ lib, stdenvNoCC, fetchFromGitHub, jshon, electron_10
+, runtimeShell, hyper-haskell-server, extra-packages ? [] }:
+
+let
+  binPath = lib.makeBinPath ([ hyper-haskell-server ] ++ extra-packages);
+  electron = electron_10;
+in stdenvNoCC.mkDerivation rec {
+  pname = "hyper-haskell";
+  version = "0.2.3.0";
+
+  src = fetchFromGitHub {
+    owner = "HeinrichApfelmus";
+    repo = "hyper-haskell";
+    rev = "v${version}";
+    sha256 = "1nmkry4wh6a2dy98fcs81mq2p7zhxp1k0f4m3szr6fm3j1zwrd43";
+  };
+
+  propagatedBuildInputs = extra-packages;
+
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/hyper-haskell/worksheets $out/share/applications $out/share/icons/hicolor/scalable/apps $out/share/mime/packages
+
+    # Electron app
+    cp -R app $out
+
+    # Desktop Launcher
+    cp resources/hyper-haskell.desktop $out/share/applications/hyper-haskell.desktop
+    cp resources/icons/icon.svg $out/share/icons/hicolor/scalable/apps/hyper-haskell.svg
+    cp resources/shared-mime-info.xml $out/share/mime/packages/hyper-haskell.xml
+
+    # install example worksheets with backend set to nix
+    for worksheet in "worksheets/"*.hhs; do
+      ${jshon}/bin/jshon -e settings -s nix -i packageTool -p < $worksheet > $out/share/hyper-haskell/worksheets/`basename $worksheet`
+    done
+
+    # install electron wrapper script
+    cat > $out/bin/hyper-haskell <<EOF
+    #!${runtimeShell}
+    export PATH="${binPath}:\$PATH"
+    exec ${electron}/bin/electron $out/app "\$@"
+    EOF
+    chmod 755 $out/bin/hyper-haskell
+  '';
+
+  meta = with lib; {
+    description = "The strongly hyped graphical interpreter for the Haskell programming language";
+    homepage = "https://github.com/HeinrichApfelmus/hyper-haskell";
+    license = licenses.bsd3;
+    maintainers = [ maintainers.rvl ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/haskell/hyper-haskell/server.nix b/nixpkgs/pkgs/development/tools/haskell/hyper-haskell/server.nix
new file mode 100644
index 000000000000..ca272eb36262
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/haskell/hyper-haskell/server.nix
@@ -0,0 +1,29 @@
+{ stdenv, ghcWithPackages, makeWrapper, packages, lib }:
+
+let
+hyperHaskellEnv = ghcWithPackages (self: [ self.hyper-haskell-server ] ++ packages self);
+in stdenv.mkDerivation {
+  pname = "hyper-haskell-server-with-packages";
+  version = hyperHaskellEnv.version;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  buildCommand = ''
+    mkdir -p $out/bin
+    makeWrapper ${hyperHaskellEnv}/bin/hyper-haskell-server $out/bin/hyper-haskell-server \
+      --set NIX_GHC ${hyperHaskellEnv}/bin/ghc \
+      --set NIX_GHCPKG ${hyperHaskellEnv}/bin/ghc-pkg \
+      --set NIX_GHC_LIBDIR ${hyperHaskellEnv}/lib/ghc-*
+  '';
+
+  # trivial derivation
+  preferLocalBuild = true;
+  allowSubstitutes = false;
+
+  meta = {
+    # Marked as broken because the underlying
+    # haskellPackages.hyper-haskell-server is marked as broken.
+    hydraPlatforms = lib.platforms.none;
+    broken = true;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/haskell/ihaskell/wrapper.nix b/nixpkgs/pkgs/development/tools/haskell/ihaskell/wrapper.nix
new file mode 100644
index 000000000000..b5ea07dde147
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/haskell/ihaskell/wrapper.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, writeScriptBin, makeWrapper, buildEnv, haskell, ghcWithPackages, jupyter, packages }:
+let
+  ihaskellEnv = ghcWithPackages (self: [
+    self.ihaskell
+    self.ihaskell-blaze
+    # Doesn't work with latest ihaskell versions missing an unrelated change
+    # https://github.com/IHaskell/IHaskell/issues/1378
+    # self.ihaskell-diagrams
+  ] ++ packages self);
+  ihaskellSh = writeScriptBin "ihaskell-notebook" ''
+    #! ${stdenv.shell}
+    export GHC_PACKAGE_PATH="$(echo ${ihaskellEnv}/lib/*/package.conf.d| tr ' ' ':'):$GHC_PACKAGE_PATH"
+    export PATH="${lib.makeBinPath ([ ihaskellEnv jupyter ])}''${PATH:+:}$PATH"
+    ${ihaskellEnv}/bin/ihaskell install -l $(${ihaskellEnv}/bin/ghc --print-libdir) && ${jupyter}/bin/jupyter notebook
+  '';
+in
+buildEnv {
+  name = "ihaskell-with-packages";
+  nativeBuildInputs = [ makeWrapper ];
+  paths = [ ihaskellEnv jupyter ];
+  postBuild = ''
+    ln -s ${ihaskellSh}/bin/ihaskell-notebook $out/bin/
+    for prg in $out/bin"/"*;do
+      if [[ -f $prg && -x $prg ]]; then
+        wrapProgram $prg --set PYTHONPATH "$(echo ${jupyter}/lib/*/site-packages)"
+      fi
+    done
+  '';
+}
diff --git a/nixpkgs/pkgs/development/tools/haskell/lambdabot/custom-config.patch b/nixpkgs/pkgs/development/tools/haskell/lambdabot/custom-config.patch
new file mode 100644
index 000000000000..db467f8dd29b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/haskell/lambdabot/custom-config.patch
@@ -0,0 +1,49 @@
+diff --git a/src/Main.hs b/src/Main.hs
+index 61da2f3..39e5c9b 100644
+--- a/src/Main.hs
++++ b/src/Main.hs
+@@ -73,11 +73,14 @@ main = do
+     config' <- sequence config
+     dir <- P.getDataDir
+     exitWith <=< lambdabotMain modulesInfo $
+-        [dataDir ==> dir, lbVersion ==> P.version] ++ config'
++        [dataDir ==> dir, lbVersion ==> P.version] ++ configInfo ++ config'
+ 
+ -- special online target for ghci use
+ online :: [String] -> IO ()
+ online strs = do
+     dir <- P.getDataDir
+-    void $ lambdabotMain modulesInfo
+-        [dataDir ==> dir, lbVersion ==> P.version, onStartupCmds ==> strs]
++    void $ lambdabotMain modulesInfo $
++        [dataDir ==> dir, lbVersion ==> P.version, onStartupCmds ==> strs] ++ configInfo
++
++configInfo :: [DSum Config Identity]
++configInfo = @config@
+diff --git a/src/Modules.hs b/src/Modules.hs
+index 036ea1f..eaafa50 100644
+--- a/src/Modules.hs
++++ b/src/Modules.hs
+@@ -14,10 +14,15 @@ import Lambdabot.Plugin.Reference
+ import Lambdabot.Plugin.Social
+ 
+ modulesInfo :: Modules
+-modulesInfo = $(modules $ corePlugins
+-    ++ haskellPlugins
+-    ++ ["irc", "localtime", "topic"] -- ircPlugins
+-    ++ ["dummy", "fresh", "todo"] -- miscPlugins
+-    ++ ["bf", "dice", "elite", "filter", "quote", "slap", "unlambda", "vixen"] -- noveltyPlugins
+-    ++ referencePlugins
+-    ++ socialPlugins)
++modulesInfo =
++  $(modules $
++    let oldDefaultModules =
++          corePlugins
++          ++ haskellPlugins
++          ++ ["irc", "localtime", "topic"] -- ircPlugins
++          ++ ["dummy", "fresh", "todo"] -- miscPlugins
++          ++ ["bf", "dice", "elite", "filter", "quote", "slap", "unlambda", "vixen"] -- noveltyPlugins
++          ++ referencePlugins
++          ++ socialPlugins
++    in @modules@
++   )
diff --git a/nixpkgs/pkgs/development/tools/haskell/lambdabot/default.nix b/nixpkgs/pkgs/development/tools/haskell/lambdabot/default.nix
new file mode 100644
index 000000000000..b563fa4b7a75
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/haskell/lambdabot/default.nix
@@ -0,0 +1,41 @@
+{ lib, haskellLib, makeWrapper, haskellPackages
+, mueval
+, withDjinn ? true
+, aspell ? null
+, packages ? (pkgs: [])
+, modules ? "oldDefaultModules"
+, configuration ? "[]"
+}:
+
+let allPkgs = pkgs: mueval.defaultPkgs pkgs ++ [ pkgs.lambdabot-trusted ] ++ packages pkgs;
+    mueval' = mueval.override {
+      inherit haskellPackages;
+      packages = allPkgs;
+    };
+    bins = lib.makeBinPath ([ mueval'
+                              (haskellPackages.ghcWithHoogle allPkgs)
+                              haskellPackages.unlambda
+                              haskellPackages.brainfuck
+                            ]
+                            ++ lib.optional withDjinn haskellPackages.djinn
+                            ++ lib.optional (aspell != null) aspell
+                           );
+    modulesStr = lib.replaceStrings ["\n"] [" "] modules;
+    configStr = lib.replaceStrings ["\n"] [" "] configuration;
+
+in haskellLib.overrideCabal (self: {
+  patches = (self.patches or []) ++ [ ./custom-config.patch ];
+  postPatch = (self.postPatch or "") + ''
+    substituteInPlace src/Main.hs \
+      --replace '@config@' '${configStr}'
+    substituteInPlace src/Modules.hs \
+      --replace '@modules@' '${modulesStr}'
+  '';
+
+  buildTools = (self.buildTools or []) ++ [ makeWrapper ];
+
+  postInstall = (self.postInstall or "") + ''
+    wrapProgram $out/bin/lambdabot \
+      --prefix PATH ":" '${bins}'
+  '';
+}) haskellPackages.lambdabot
diff --git a/nixpkgs/pkgs/development/tools/haskell/mueval/default.nix b/nixpkgs/pkgs/development/tools/haskell/mueval/default.nix
new file mode 100644
index 000000000000..0cbe57387282
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/haskell/mueval/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, makeWrapper, haskellPackages, packages ? (pkgs: [])
+}:
+
+let defaultPkgs = pkgs: [ pkgs.show
+                          pkgs.simple-reflect
+                          pkgs.QuickCheck
+                          pkgs.mtl
+                        ];
+    env = haskellPackages.ghcWithPackages
+           (pkgs: defaultPkgs pkgs ++ packages pkgs);
+    libDir = "${env}/lib/ghc-${env.version}";
+
+in stdenv.mkDerivation {
+  name = "mueval-env";
+
+  inherit (haskellPackages) mueval;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  buildCommand = ''
+    mkdir -p $out/bin
+
+    makeWrapper $mueval/bin/mueval $out/bin/mueval \
+      --set "NIX_GHC_LIBDIR" "${libDir}"
+  '';
+
+  passthru = { inherit defaultPkgs; };
+}
diff --git a/nixpkgs/pkgs/development/tools/haskell/vaultenv/default.nix b/nixpkgs/pkgs/development/tools/haskell/vaultenv/default.nix
new file mode 100644
index 000000000000..e3adef875245
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/haskell/vaultenv/default.nix
@@ -0,0 +1,101 @@
+{ mkDerivation
+, async
+, base
+, bytestring
+, connection
+, containers
+, directory
+, hpack
+, hspec
+, hspec-discover
+, hspec-expectations
+, http-client
+, http-conduit
+, lens
+, lens-aeson
+, megaparsec
+, mtl
+, optparse-applicative
+, parser-combinators
+, retry
+, lib
+, quickcheck-instances
+, text
+, unix
+, unordered-containers
+, utf8-string
+, fetchFromGitHub
+, dotenv
+}:
+mkDerivation rec {
+  pname = "vaultenv";
+  version = "0.16.0";
+
+  src = fetchFromGitHub {
+    owner = "channable";
+    repo = "vaultenv";
+    rev = "v${version}";
+    sha256 = "sha256-EPu4unzXIg8naFUEZwbJ2VJXD/TeCiKzPHCXnRkdyBE=";
+  };
+
+  buildTools = [ hpack ];
+
+  prePatch = ''
+    substituteInPlace package.yaml \
+        --replace -Werror ""
+  '';
+
+  isLibrary = false;
+  isExecutable = true;
+  executableHaskellDepends = [
+    async
+    base
+    bytestring
+    connection
+    containers
+    http-client
+    http-conduit
+    lens
+    lens-aeson
+    megaparsec
+    mtl
+    optparse-applicative
+    parser-combinators
+    retry
+    text
+    unix
+    unordered-containers
+    utf8-string
+    dotenv
+  ];
+  testHaskellDepends = [
+    async
+    base
+    bytestring
+    connection
+    containers
+    directory
+    hspec
+    hspec-discover
+    hspec-expectations
+    http-client
+    http-conduit
+    lens
+    lens-aeson
+    megaparsec
+    mtl
+    optparse-applicative
+    parser-combinators
+    retry
+    quickcheck-instances
+    text
+    unix
+    unordered-containers
+    utf8-string
+  ];
+  preConfigure = "hpack";
+  homepage = "https://github.com/channable/vaultenv#readme";
+  description = "Runs processes with secrets from HashiCorp Vault";
+  license = lib.licenses.bsd3;
+  maintainers = with lib.maintainers; [ lnl7 manveru ];
+}
diff --git a/nixpkgs/pkgs/development/tools/hatch/default.nix b/nixpkgs/pkgs/development/tools/hatch/default.nix
new file mode 100644
index 000000000000..2e967097d065
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/hatch/default.nix
@@ -0,0 +1,102 @@
+{ lib
+, stdenv
+, fetchPypi
+, python3
+, cargo
+, git
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "hatch";
+  version = "1.9.0";
+  format = "pyproject";
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-4ealEeFS7HzU26vE9Pahh0hwvUnJfRfTkLkjLdpoXOM=";
+  };
+
+  nativeBuildInputs = with python3.pkgs; [
+    hatchling
+    hatch-vcs
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    click
+    hatchling
+    httpx
+    hyperlink
+    keyring
+    packaging
+    pexpect
+    platformdirs
+    rich
+    shellingham
+    tomli-w
+    tomlkit
+    userpath
+    virtualenv
+    zstandard
+  ];
+
+  nativeCheckInputs = [
+    cargo
+  ] ++ (with python3.pkgs; [
+    binary
+    git
+    pytestCheckHook
+    pytest-mock
+    pytest-xdist
+    setuptools
+  ]);
+
+  preCheck = ''
+    export HOME=$(mktemp -d);
+  '';
+
+  disabledTests = [
+    # AssertionError: assert (1980, 1, 2, 0, 0, 0) == (2020, 2, 2, 0, 0, 0)
+    "test_default"
+    "test_explicit_path"
+    "test_default_auto_detection"
+    "test_editable_default"
+    "test_editable_default_extra_dependencies"
+    "test_editable_default_force_include"
+    "test_editable_default_force_include_option"
+    "test_editable_exact"
+    "test_editable_exact_extra_dependencies"
+    "test_editable_exact_force_include"
+    "test_editable_exact_force_include_option"
+    "test_editable_exact_force_include_build_data_precedence"
+    "test_editable_pth"
+    # AssertionError: assert len(extract_installed_requirements(output.splitlines())) > 0
+    "test_creation_allow_system_packages"
+    # cli table output mismatch
+    "test_context_formatting"
+    # expects sh, finds bash
+    "test_all"
+    "test_already_installed_update_flag"
+    "test_already_installed_update_prompt"
+    # unmet expectations about the binary module we provide
+    "test_dependency_not_found"
+    "test_marker_unmet"
+    # output capturing mismatch, likely stdout/stderr mixup
+    "test_no_compatibility_check_if_exists"
+  ] ++ lib.optionals stdenv.isDarwin [
+    # https://github.com/NixOS/nixpkgs/issues/209358
+    "test_scripts_no_environment"
+
+    # This test assumes it is running on macOS with a system shell on the PATH.
+    # It is not possible to run it in a nix build using a /nix/store shell.
+    # See https://github.com/pypa/hatch/pull/709 for the relevant code.
+    "test_populate_default_popen_kwargs_executable"
+  ];
+
+  meta = with lib; {
+    description = "Modern, extensible Python project manager";
+    homepage = "https://hatch.pypa.io/latest/";
+    changelog = "https://github.com/pypa/hatch/blob/hatch-v${version}/docs/history/hatch.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ onny ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/hclfmt/default.nix b/nixpkgs/pkgs/development/tools/hclfmt/default.nix
new file mode 100644
index 000000000000..03e934175c0f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/hclfmt/default.nix
@@ -0,0 +1,27 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "hclfmt";
+  version = "2.19.1";
+
+  src = fetchFromGitHub {
+    owner = "hashicorp";
+    repo = "hcl";
+    rev = "v${version}";
+    hash = "sha256-A7YfjXdblFGBABD/PeJMzh9WdPeIUWOWAr/UlD3ki28=";
+  };
+
+  vendorHash = "sha256-DA1IKaC+YSBzCfEMqHsHfwu1o5qvYFaFgDoGG0RZnoo=";
+
+  # The code repository includes other tools which are not useful. Only build
+  # hclfmt.
+  subPackages = [ "cmd/hclfmt" ];
+
+  meta = with lib; {
+    description = "a code formatter for the Hashicorp Configuration Language (HCL) format";
+    homepage = "https://github.com/hashicorp/hcl/tree/main/cmd/hclfmt";
+    license = licenses.mpl20;
+    mainProgram = "hclfmt";
+    maintainers = with maintainers; [ zimbatm ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/hcloud/default.nix b/nixpkgs/pkgs/development/tools/hcloud/default.nix
new file mode 100644
index 000000000000..6cfebf31ec89
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/hcloud/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+}:
+
+buildGoModule rec {
+  pname = "hcloud";
+  version = "1.42.0";
+
+  src = fetchFromGitHub {
+    owner = "hetznercloud";
+    repo = "cli";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-cJNCp60OZBPXtda787PDT9iInxidTvzYmf9orifmS/A=";
+  };
+
+  vendorHash = "sha256-IIszQCAsNSQYieM1JQH1Dald9saUhZ2kPhwZ1p2GTp4=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=github.com/hetznercloud/cli/internal/version.Version=${version}"
+  ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    for shell in bash fish zsh; do
+      $out/bin/hcloud completion $shell > hcloud.$shell
+      installShellCompletion hcloud.$shell
+    done
+  '';
+
+  meta = with lib; {
+    changelog = "https://github.com/hetznercloud/cli/releases/tag/v${version}";
+    description = "A command-line interface for Hetzner Cloud, a provider for cloud virtual private servers";
+    homepage = "https://github.com/hetznercloud/cli";
+    license = licenses.mit;
+    maintainers = with maintainers; [ zauberpony techknowlogick ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/headache/default.nix b/nixpkgs/pkgs/development/tools/headache/default.nix
new file mode 100644
index 000000000000..7ed249290136
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/headache/default.nix
@@ -0,0 +1,28 @@
+{ lib, fetchFromGitHub, nix-update-script, ocamlPackages }:
+
+with ocamlPackages;
+
+buildDunePackage rec {
+  pname = "headache";
+  version = "1.07";
+
+  src = fetchFromGitHub {
+    owner = "frama-c";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-RL80ggcJSJFu2UTECUNP6KufRhR8ZnG7sQeYzhrw37g=";
+  };
+
+  propagatedBuildInputs = [
+    camomile
+  ];
+
+  passthru.updateScript = nix-update-script { };
+
+  meta = with lib; {
+    homepage = "https://github.com/frama-c/${pname}";
+    description = "Lightweight tool for managing headers in source code files";
+    license = licenses.lgpl2Plus;
+    maintainers = with maintainers; [ niols ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/heroku/default.nix b/nixpkgs/pkgs/development/tools/heroku/default.nix
new file mode 100644
index 000000000000..888ce0b8ae46
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/heroku/default.nix
@@ -0,0 +1,45 @@
+{ stdenv, lib, fetchzip, makeWrapper, nodejs, writeScript }:
+
+stdenv.mkDerivation {
+  pname = "heroku";
+  version = "8.9.0";
+
+  src = fetchzip {
+    url = "https://cli-assets.heroku.com/versions/8.9.0/8f6ff45/heroku-v8.9.0-8f6ff45-linux-x64.tar.xz";
+    hash = "sha256-z9SRbQjjl+qthEOa9C/zb4lxTQLeipcl6JXMdirAFcg=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p $out/share/heroku $out/bin
+    cp -pr * $out/share/heroku
+    substituteInPlace $out/share/heroku/bin/run \
+      --replace "/usr/bin/env node" "${nodejs}/bin/node"
+    makeWrapper $out/share/heroku/bin/run $out/bin/heroku \
+      --set HEROKU_DISABLE_AUTOUPDATE 1
+  '';
+
+  passthru.updateScript = writeScript "update-heroku" ''
+    #!/usr/bin/env nix-shell
+    #!nix-shell -I nixpkgs=./. -i bash -p nix-prefetch curl jq common-updater-scripts
+    resp="$(
+        curl -L "https://cli-assets.heroku.com/versions/heroku-linux-x64-tar-xz.json" \
+            | jq '[to_entries[] | { version: .key, url: .value } | select(.version|contains("-")|not)] | sort_by(.version|split(".")|map(tonumber)) | .[-1]'
+    )"
+    url="$(jq <<<"$resp" .url --raw-output)"
+    version="$(jq <<<"$resp" .version --raw-output)"
+    hash="$(nix-prefetch fetchzip --url "$(jq <<<"$resp" .url --raw-output)")"
+    update-source-version heroku "$version" "$hash" "$url"
+  '';
+
+  meta = {
+    homepage = "https://devcenter.heroku.com/articles/heroku-cli";
+    description = "Everything you need to get started using Heroku";
+    maintainers = with lib.maintainers; [ aflatter mirdhyn marsam ];
+    license = lib.licenses.mit;
+    platforms = with lib.platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/hexio/default.nix b/nixpkgs/pkgs/development/tools/hexio/default.nix
new file mode 100644
index 000000000000..0b4e474515ab
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/hexio/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchFromGitHub, pcsclite, pth, python2 }:
+
+stdenv.mkDerivation rec {
+  pname = "hexio";
+  version = "1.0-RC1";
+
+  src = fetchFromGitHub {
+    sha256 = "08jxkdi0gjsi8s793f9kdlad0a58a0xpsaayrsnpn9bpmm5cgihq";
+    rev = "version-${version}";
+    owner = "vanrein";
+    repo = "hexio";
+  };
+
+  strictDeps = true;
+
+  buildInputs = [ pcsclite pth python2 ];
+
+  patchPhase = ''
+    substituteInPlace Makefile \
+      --replace '-I/usr/local/include/PCSC/' '-I${lib.getDev pcsclite}/include/PCSC/' \
+      --replace '-L/usr/local/lib/pth' '-I${pth}/lib/'
+    '';
+
+  installPhase = ''
+    mkdir -p $out/bin $out/lib $out/sbin $out/man
+    make DESTDIR=$out PREFIX=/ all
+    make DESTDIR=$out PREFIX=/ install
+    '';
+
+  meta = with lib; {
+    description = "Low-level I/O helpers for hexadecimal, tty/serial devices and so on";
+    homepage = "https://github.com/vanrein/hexio";
+    license = licenses.bsd2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ leenaars ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/hexo-cli/default.nix b/nixpkgs/pkgs/development/tools/hexo-cli/default.nix
new file mode 100644
index 000000000000..be5764c9f0c3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/hexo-cli/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, buildNpmPackage
+, fetchFromGitHub
+}:
+
+buildNpmPackage rec {
+  pname = "hexo-cli";
+  version = "4.3.1";
+
+  src = fetchFromGitHub {
+    owner = "hexojs";
+    repo = "hexo-cli";
+    rev = "v${version}";
+    hash = "sha256-mtbg9Fa9LBqG/aNfm4yEo4ymuaxuqhymkO1q6mYA2Fs=";
+  };
+
+  npmDepsHash = "sha256-VCHG1YMPRwEBbwgscSv6V+fTNVRpsCxWeyO8co4Zy6k=";
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out
+    cp -r bin/ dist/ node_modules/ package.json $out/
+
+    runHook postInstall
+  '';
+
+  meta = {
+    description = "Command line interface for Hexo";
+    mainProgram = "hexo";
+    homepage = "https://hexo.io/";
+    license = lib.licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/hobbes/default.nix b/nixpkgs/pkgs/development/tools/hobbes/default.nix
new file mode 100644
index 000000000000..851d64545d8f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/hobbes/default.nix
@@ -0,0 +1,72 @@
+{ lib
+, stdenv
+, llvmPackages
+, fetchFromGitHub
+, fetchpatch
+, cmake
+, llvm_12
+, ncurses
+, readline
+, zlib
+, libxml2
+, python3
+}:
+llvmPackages.stdenv.mkDerivation {
+  pname = "hobbes";
+  version = "0-unstable-2023-06-03";
+
+  src = fetchFromGitHub {
+    owner = "morganstanley";
+    repo = "hobbes";
+    rev = "88a712b85bc896a4c87e60c12321445f1cdcfd00";
+    hash = "sha256-2v0yk35/cLKTjX0Qbc8cjc7Y6bamRSa9GpPvGoxL2Cw=";
+  };
+
+  patches = [
+    # fix build for LLVM-12+
+    # https://github.com/morganstanley/hobbes/pull/452
+    (fetchpatch {
+      name = "include-cstdint.patch";
+      url = "https://github.com/morganstanley/hobbes/commit/924b71fca06c61e606792cc8db8521fb499d4237.patch";
+      hash = "sha256-/VsWtTYc3LBOnm4Obgx/MOqaaWZhUc8yzmkygtNz+mY=";
+    })
+  ];
+
+  # only one warning generated. try to remove on next update
+  env.CXXFLAGS = "-Wno-error=deprecated-copy";
+
+  # TODO: re-enable Python tests once they work on Python 3
+  # currently failing with "I don't know how to decode the primitive type: b'bool'"
+  postPatch = ''
+    rm test/Python.C
+  '';
+
+  nativeBuildInputs = [
+    cmake
+  ];
+
+  buildInputs = [
+    llvm_12
+    ncurses
+    readline
+    zlib
+    libxml2
+    python3
+  ];
+
+  doCheck = true;
+  checkTarget = "test";
+
+  meta = with lib; {
+    broken = stdenv.isDarwin;
+    description = "A language and an embedded JIT compiler";
+    longDescription = ''
+      Hobbes is a a language, embedded compiler, and runtime for efficient
+      dynamic expression evaluation, data storage and analysis.
+    '';
+    homepage = "https://github.com/morganstanley/hobbes";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ kthielen thmzlt ];
+    platforms = [ "x86_64-linux" "x86_64-darwin" ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/hors/default.nix b/nixpkgs/pkgs/development/tools/hors/default.nix
new file mode 100644
index 000000000000..579a2a27922f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/hors/default.nix
@@ -0,0 +1,28 @@
+{ lib, rustPlatform, fetchFromGitHub, stdenv, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "hors";
+  version = "0.8.2";
+
+  src = fetchFromGitHub {
+    owner = "windsoilder";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1q17i8zg7dwd8al42wfnkn891dy5hdhw4325plnihkarr50avbr0";
+  };
+
+  cargoSha256 = "sha256-1PB/JvgfC6qABI+cIePqtsSlZXPqMGQIay9SCXJkV9o=";
+
+  buildInputs = lib.optional stdenv.isDarwin Security;
+
+  # requires network access
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Instant coding answers via the command line";
+    homepage = "https://github.com/windsoilder/hors";
+    changelog = "https://github.com/WindSoilder/hors/blob/v${version}/CHANGELOG.md";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/hostess/default.nix b/nixpkgs/pkgs/development/tools/hostess/default.nix
new file mode 100644
index 000000000000..7bf78c403318
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/hostess/default.nix
@@ -0,0 +1,23 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "hostess";
+  version = "0.5.2";
+
+  src = fetchFromGitHub {
+    owner = "cbednarski";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1izszf60nsa6pyxx3kd8qdrz3h47ylm17r9hzh9wk37f61pmm42j";
+  };
+
+  subPackages = [ "." ];
+
+  vendorHash = null;
+
+  meta = with lib; {
+    description = "An idempotent command-line utility for managing your /etc/hosts* file.";
+    license = licenses.mit;
+    maintainers = with maintainers; [ edlimerkaj ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/hotdoc/default.nix b/nixpkgs/pkgs/development/tools/hotdoc/default.nix
new file mode 100644
index 000000000000..4f58f961b9f8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/hotdoc/default.nix
@@ -0,0 +1,126 @@
+{ lib
+, stdenv
+, buildPythonApplication
+, fetchpatch
+, fetchPypi
+, pytestCheckHook
+, pkg-config
+, cmake
+, flex
+, glib
+, json-glib
+, libxml2
+, appdirs
+, dbus-deviation
+, faust-cchardet
+, feedgen
+, lxml
+, networkx
+, pkgconfig
+, pyyaml
+, schema
+, setuptools
+, toposort
+, wheezy-template
+, llvmPackages
+, gst_all_1
+}:
+
+buildPythonApplication rec {
+  pname = "hotdoc";
+  version = "0.15";
+  format = "setuptools";
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-sfQ/iBd1Z+YqnaOg8j32rC2iucdiiK3Tff9NfYFnQyc=";
+  };
+
+  patches = [
+    (fetchpatch {
+      name = "fix-test-hotdoc.patch";
+      url = "https://github.com/hotdoc/hotdoc/commit/d2415a520e960a7b540742a0695b699be9189540.patch";
+      hash = "sha256-9ORZ91c+/oRqEp2EKXjKkz7u8mLnWCq3uPsc3G4NB9E=";
+    })
+  ];
+
+  nativeBuildInputs = [
+    pkg-config
+    cmake
+    flex
+  ];
+
+  buildInputs = [
+    glib
+    json-glib
+    libxml2.dev
+  ];
+
+  propagatedBuildInputs = [
+    appdirs
+    dbus-deviation
+    faust-cchardet
+    feedgen
+    lxml
+    networkx
+    pkgconfig
+    pyyaml
+    schema
+    setuptools  # for pkg_resources
+    toposort
+    wheezy-template
+  ];
+
+  nativeCheckInputs = [
+    pytestCheckHook
+  ];
+
+  # CMake is used to build CMARK, but the build system is still python
+  dontUseCmakeConfigure = true;
+
+  # Ensure C+GI+GST extensions are built and can be imported
+  pythonImportsCheck = [
+    "hotdoc.extensions.c.c_extension"
+    "hotdoc.extensions.gi.gi_extension"
+    "hotdoc.extensions.gst.gst_extension"
+  ];
+
+  # Run the tests by package instead of current dir
+  pytestFlagsArray = [ "--pyargs" "hotdoc" ];
+
+  disabledTests = [
+    # Test does not correctly handle path normalization for test comparison
+    "test_cli_overrides"
+  ] ++ lib.optionals stdenv.isDarwin [
+    # Test does not correctly handle absolute /home paths on Darwin (even fake ones)
+    "test_index"
+  ];
+
+  # Hardcode libclang paths
+  postPatch = ''
+    substituteInPlace hotdoc/extensions/c/c_extension.py \
+      --replace "shutil.which('llvm-config')" 'True' \
+      --replace "subprocess.check_output(['llvm-config', '--version']).strip().decode()" '"${lib.versions.major llvmPackages.libclang.version}"' \
+      --replace "subprocess.check_output(['llvm-config', '--prefix']).strip().decode()" '"${llvmPackages.libclang.lib}"' \
+      --replace "subprocess.check_output(['llvm-config', '--libdir']).strip().decode()" '"${llvmPackages.libclang.lib}/lib"'
+  '';
+
+  # Make pytest run from a temp dir to have it pick up installed package for cmark
+  preCheck = ''
+    pushd $TMPDIR
+  '';
+  postCheck = ''
+    popd
+  '';
+
+  passthru.tests = {
+    inherit (gst_all_1) gstreamer gst-plugins-base;
+  };
+
+  meta = with lib; {
+    description = "The tastiest API documentation system";
+    homepage = "https://hotdoc.github.io/";
+    license = [ licenses.lgpl21Plus ];
+    maintainers = with maintainers; [ lilyinstarlight ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/hover/default.nix b/nixpkgs/pkgs/development/tools/hover/default.nix
new file mode 100644
index 000000000000..dfaa976aa9e0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/hover/default.nix
@@ -0,0 +1,101 @@
+{ lib
+, buildGoModule
+, buildFHSEnv
+, binutils
+, dejavu_fonts
+, pkg-config
+, fetchFromGitHub
+, roboto
+, writeScript
+, xorg
+, libglvnd
+, addOpenGLRunpath
+, makeWrapper
+, gcc
+, go
+, flutter
+}:
+
+let
+  pname = "hover";
+  version = "0.47.0";
+
+  libs = with xorg; [
+    libX11.dev
+    libXcursor.dev
+    libXext.dev
+    libXi.dev
+    libXinerama.dev
+    libXrandr.dev
+    libXrender.dev
+    libXfixes.dev
+    libXxf86vm
+    libglvnd.dev
+    xorgproto
+  ];
+  hover = buildGoModule rec {
+    inherit pname version;
+
+    meta = with lib; {
+      description = "A build tool to run Flutter applications on desktop";
+      homepage = "https://github.com/go-flutter-desktop/hover";
+      license = licenses.bsd3;
+      platforms = platforms.linux;
+      maintainers = with maintainers; [ ericdallo ];
+    };
+
+    subPackages = [ "." ];
+
+    vendorHash = "sha256-GDoX5d2aDfaAx9JsKuS4r8137t3swT6rgcCghmaThSM=";
+
+    src = fetchFromGitHub {
+      rev = "v${version}";
+      owner = "go-flutter-desktop";
+      repo = pname;
+      sha256 = "sha256-ch59Wx4g72u7x99807ppURI4I+5aJ/W8Zr35q8X68v4=";
+    };
+
+    nativeBuildInputs = [ addOpenGLRunpath makeWrapper ];
+
+    buildInputs = libs;
+
+    checkRun = false;
+
+    patches = [
+      ./fix-assets-path.patch
+    ];
+
+    postPatch = ''
+      sed -i 's|@assetsFolder@|'"''${out}/share/assets"'|g' internal/fileutils/assets.go
+    '';
+
+    postInstall = ''
+      mkdir -p $out/share
+      cp -r assets $out/share/assets
+      chmod -R a+rx $out/share/assets
+
+      wrapProgram "$out/bin/hover" \
+      --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath libs}
+    '';
+
+    postFixup = ''
+      addOpenGLRunpath $out/bin/hover
+    '';
+  };
+
+in
+buildFHSEnv rec {
+  name = pname;
+  targetPkgs = pkgs: [
+    binutils
+    dejavu_fonts
+    flutter
+    gcc
+    go
+    hover
+    pkg-config
+    roboto
+  ] ++ libs;
+
+  runScript = "hover";
+}
diff --git a/nixpkgs/pkgs/development/tools/hover/fix-assets-path.patch b/nixpkgs/pkgs/development/tools/hover/fix-assets-path.patch
new file mode 100644
index 000000000000..00b1900bf776
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/hover/fix-assets-path.patch
@@ -0,0 +1,78 @@
+diff --git a/internal/fileutils/assets.go b/internal/fileutils/assets.go
+index 83eacd9..0b80e51 100644
+--- a/internal/fileutils/assets.go
++++ b/internal/fileutils/assets.go
+@@ -1,28 +1,7 @@
+ //go:generate rice embed
+ package fileutils
+ 
+-import (
+-	"os"
+-	"sync"
+-
+-	rice "github.com/GeertJohan/go.rice"
+-	"github.com/go-flutter-desktop/hover/internal/log"
+-)
+-
+-var (
+-	assetsBox     *rice.Box
+-	assetsBoxOnce sync.Once
+-)
+-
+ // AssetsBox hover's assets box
+-func AssetsBox() *rice.Box {
+-	assetsBoxOnce.Do(func() {
+-		var err error
+-		assetsBox, err = rice.FindBox("../../assets")
+-		if err != nil {
+-			log.Errorf("Failed to find hover assets: %v", err)
+-			os.Exit(1)
+-		}
+-	})
+-	return assetsBox
++func AssetsBox() string {
++	return "@assetsFolder@"
+ }
+diff --git a/internal/fileutils/file.go b/internal/fileutils/file.go
+index cb75563..3822e80 100644
+--- a/internal/fileutils/file.go
++++ b/internal/fileutils/file.go
+@@ -11,8 +11,6 @@ import (
+ 	"strings"
+ 	"text/template"
+ 
+-	rice "github.com/GeertJohan/go.rice"
+-
+ 	"github.com/go-flutter-desktop/hover/internal/log"
+ )
+ 
+@@ -215,24 +213,24 @@ func ExecuteTemplateFromFile(boxed, to string, templateData interface{}) {
+ }
+ 
+ // ExecuteTemplateFromAssetsBox create file from a template asset
+-func ExecuteTemplateFromAssetsBox(boxed, to string, assetsBox *rice.Box, templateData interface{}) {
+-	templateString, err := assetsBox.String(boxed)
++func ExecuteTemplateFromAssetsBox(boxed, to string, assetsBox string, templateData interface{}) {
++	templateString, err := ioutil.ReadFile(assetsBox + "/" + boxed)
+ 	if err != nil {
+ 		log.Errorf("Failed to find template file: %v\n", err)
+ 		os.Exit(1)
+ 	}
+-	executeTemplateFromString(templateString, to, templateData)
++	executeTemplateFromString(string(templateString), to, templateData)
+ }
+ 
+ // CopyAsset copies a file from asset
+-func CopyAsset(boxed, to string, assetsBox *rice.Box) {
++func CopyAsset(boxed string, to string, assetsBox string) {
+ 	file, err := os.Create(to)
+ 	if err != nil {
+ 		log.Errorf("Failed to create %s: %v", to, err)
+ 		os.Exit(1)
+ 	}
+ 	defer file.Close()
+-	boxedFile, err := assetsBox.Open(boxed)
++	boxedFile, err := os.OpenFile(assetsBox + "/" + boxed, os.O_RDONLY, 0666)
+ 	if err != nil {
+ 		log.Errorf("Failed to find boxed file %s: %v", boxed, err)
+ 		os.Exit(1)
diff --git a/nixpkgs/pkgs/development/tools/hred/default.nix b/nixpkgs/pkgs/development/tools/hred/default.nix
new file mode 100644
index 000000000000..5e9b7f9122b9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/hred/default.nix
@@ -0,0 +1,32 @@
+{ lib, buildNpmPackage, fetchFromGitHub, runCommand, hred, jq }:
+
+buildNpmPackage rec {
+  pname = "hred";
+  version = "1.5.0";
+
+  src = fetchFromGitHub {
+    owner = "danburzo";
+    repo = "hred";
+    rev = "v${version}";
+    hash = "sha256-rnobJG9Z1lXEeFm+c0f9OsbiTzxeP3+zut5LYpGzWfc=";
+  };
+
+  npmDepsHash = "sha256-POxlGWK0TJMwNWDpiK5+OXLGtAx4lFJO3imoe/h+7Sc=";
+
+  dontNpmBuild = true;
+
+  passthru.tests = {
+    simple = runCommand "${pname}-test" {} ''
+      set -e -o pipefail
+      echo '<i id="foo">bar</i>' | ${hred}/bin/hred 'i#foo { @id => id, @.textContent => text }' -c | ${jq}/bin/jq -c > $out
+      [ "$(cat $out)" = '{"id":"foo","text":"bar"}' ]
+    '';
+  };
+
+  meta = {
+    description = "A command-line tool to extract data from HTML";
+    license = lib.licenses.mit;
+    homepage = "https://github.com/danburzo/hred";
+    maintainers = with lib.maintainers; [ tejing ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/html-minifier/default.nix b/nixpkgs/pkgs/development/tools/html-minifier/default.nix
new file mode 100644
index 000000000000..6fd239fa816c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/html-minifier/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, buildNpmPackage
+, fetchFromGitHub
+}:
+
+buildNpmPackage rec {
+  pname = "html-minifier";
+  version = "4.0.0";
+
+  src = fetchFromGitHub {
+    owner = "kangax";
+    repo = "html-minifier";
+    rev = "v${version}";
+    hash = "sha256-OAykAqBxgr7tbeXXfSH23DALf7Eoh3VjDKNKWGAL3+A=";
+  };
+
+  npmDepsHash = "sha256-VWXc/nBXgvSE/DoLHR4XTFQ5kuwWC1m0/cj1CndfPH8=";
+
+  npmFlags = [ "--ignore-scripts" ];
+
+  dontNpmBuild = true;
+
+  meta = {
+    description = "Highly configurable, well-tested, JavaScript-based HTML minifier";
+    homepage = "https://github.com/kangax/html-minifier";
+    license = lib.licenses.mit;
+    mainProgram = "html-minifier";
+    maintainers = with lib.maintainers; [ chris-martin ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/htmlhint/default.nix b/nixpkgs/pkgs/development/tools/htmlhint/default.nix
new file mode 100644
index 000000000000..162bb82b28cf
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/htmlhint/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, buildNpmPackage
+, fetchFromGitHub
+}:
+
+buildNpmPackage rec {
+  pname = "htmlhint";
+  version = "1.1.4";
+
+  src = fetchFromGitHub {
+    owner = "htmlhint";
+    repo = "HTMLHint";
+    rev = "v${version}";
+    hash = "sha256-6R+/uwqWpuTjUnFeUFMzZBzhlFBxYceYZfLLuaYhc6k=";
+  };
+
+  npmDepsHash = "sha256-m5hHxA2YTk7qNpc1Z6TXxNTfIMY5LCM9Il9JHJxQJlI=";
+
+  meta = {
+    changelog = "https://github.com/htmlhint/HTMLHint/blob/${src.rev}/CHANGELOG.md";
+    description = "Static code analysis tool for HTML";
+    homepage = "https://github.com/htmlhint/HTMLHint";
+    license = lib.licenses.mit;
+    mainProgram = "htmlhint";
+    maintainers = with lib.maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/htmlq/default.nix b/nixpkgs/pkgs/development/tools/htmlq/default.nix
new file mode 100644
index 000000000000..6a5015c600fc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/htmlq/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "htmlq";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "mgdm";
+    repo = "htmlq";
+    rev = "v${version}";
+    sha256 = "sha256-kZtK2QuefzfxxuE1NjXphR7otr+RYfMif/RSpR6TxY0=";
+  };
+
+  cargoSha256 = "sha256-r9EnQQPGpPIcNYb1eqGrMnRdh0snIa5iVsTYTI+YErY=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [ Security ];
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Like jq, but for HTML";
+    homepage = "https://github.com/mgdm/htmlq";
+    license = licenses.mit;
+    maintainers = with maintainers; [ siraben nerdypepper ];
+    mainProgram = "htmlq";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/htmltest/default.nix b/nixpkgs/pkgs/development/tools/htmltest/default.nix
new file mode 100644
index 000000000000..4d9db942cdbc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/htmltest/default.nix
@@ -0,0 +1,38 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+}:
+
+buildGoModule rec {
+  pname = "htmltest";
+  version = "0.17.0";
+
+  src = fetchFromGitHub {
+    owner = "wjdp";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-8tkk476kGEfHo3XGu3/0r6fhX1c4vkYiUACpw0uEu2g=";
+  };
+
+  vendorHash = "sha256-dTn5aYb5IHFbksmhkXSTJtI0Gnn8Uz0PMZPFzFKMo38=";
+
+  ldflags = [
+    "-w"
+    "-s"
+    "-X main.version=${version}"
+  ];
+
+  # tests require network access
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Tool to test generated HTML output";
+    longDescription = ''
+      htmltest runs your HTML output through a series of checks to ensure all your
+      links, images, scripts references work, your alt tags are filled in, etc.
+    '';
+    homepage = "https://github.com/wjdp/htmltest";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/iaca/2.1.nix b/nixpkgs/pkgs/development/tools/iaca/2.1.nix
new file mode 100644
index 000000000000..584b8856e89f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/iaca/2.1.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, makeWrapper, requireFile, gcc, unzip }:
+
+# v2.1: last version with NHM/WSM arch support
+stdenv.mkDerivation rec {
+  pname = "iaca";
+  version = "2.1";
+  src = requireFile {
+    name = "iaca-version-${version}-lin64.zip";
+    sha256 = "11s1134ijf66wrc77ksky9mnb0lq6ml6fzmr86a6p6r5xclzay2m";
+    url = "https://software.intel.com/en-us/articles/intel-architecture-code-analyzer-download";
+  };
+  unpackCmd = ''${unzip}/bin/unzip "$src" -x __MACOSX/ __MACOSX/iaca-lin64/ __MACOSX/iaca-lin64/._.DS_Store'';
+  nativeBuildInputs = [ makeWrapper ];
+  installPhase = ''
+    mkdir -p $out/bin $out/lib
+    cp bin/iaca $out/bin/
+    cp lib/* $out/lib
+  '';
+  preFixup = let libPath = lib.makeLibraryPath [ stdenv.cc.cc.lib gcc ]; in ''
+    patchelf \
+        --set-interpreter ${stdenv.cc.libc}/lib/ld-linux-x86-64.so.2 \
+        --set-rpath $out/lib:"${libPath}" \
+        $out/bin/iaca
+  '';
+  postFixup = "wrapProgram $out/bin/iaca --set LD_LIBRARY_PATH $out/lib";
+  meta = with lib; {
+    description = "Intel Architecture Code Analyzer";
+    homepage = "https://software.intel.com/en-us/articles/intel-architecture-code-analyzer/";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ kazcw ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/iaca/3.0.nix b/nixpkgs/pkgs/development/tools/iaca/3.0.nix
new file mode 100644
index 000000000000..1c0a4f5460fd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/iaca/3.0.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, requireFile, unzip }:
+
+stdenv.mkDerivation rec {
+  pname = "iaca";
+  version = "3.0";
+  src = requireFile {
+    name = "iaca-version-v${version}-lin64.zip";
+    sha256 = "0qd81bxg269cwwvfmdp266kvhcl3sdvhrkfqdrbmanawk0w7lvp1";
+    url = "https://software.intel.com/en-us/articles/intel-architecture-code-analyzer-download";
+  };
+  unpackCmd = ''${unzip}/bin/unzip "$src"'';
+  installPhase = ''
+    mkdir -p $out/bin
+    cp iaca $out/bin
+    patchelf --set-interpreter ${stdenv.cc.libc}/lib/ld-linux-x86-64.so.2 $out/bin/iaca
+  '';
+  meta = with lib; {
+    description = "Intel Architecture Code Analyzer";
+    homepage = "https://software.intel.com/en-us/articles/intel-architecture-code-analyzer/";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ kazcw ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/icr/default.nix b/nixpkgs/pkgs/development/tools/icr/default.nix
new file mode 100644
index 000000000000..7f6b0440b949
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/icr/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, fetchFromGitHub
+, crystal
+, shards
+, makeWrapper
+, pkg-config
+, which
+, openssl
+, readline
+, libyaml
+, zlib
+}:
+
+crystal.buildCrystalPackage rec {
+  pname = "icr";
+  version = "0.9.0";
+
+  src = fetchFromGitHub {
+    owner = "crystal-community";
+    repo = "icr";
+    rev = "v${version}";
+    hash = "sha256-29B/i8oEjwNOYjnc78QcYTl6fC/M9VfAVCCBjLBKp0Q=";
+  };
+
+  shardsFile = ./shards.nix;
+
+  buildInputs = [ libyaml openssl readline zlib ];
+
+  nativeBuildInputs = [ makeWrapper pkg-config which ];
+
+  # tests are failing due to our sandbox
+  doCheck = false;
+
+  postFixup = ''
+    wrapProgram $out/bin/icr \
+      --prefix PATH : ${lib.makeBinPath [ crystal shards which ]}
+  '';
+
+  meta = with lib; {
+    description = "Interactive console for the Crystal programming language";
+    homepage = "https://github.com/crystal-community/icr";
+    license = licenses.mit;
+    maintainers = with maintainers; [ peterhoeg ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/icr/shards.nix b/nixpkgs/pkgs/development/tools/icr/shards.nix
new file mode 100644
index 000000000000..8f880fa9a6f0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/icr/shards.nix
@@ -0,0 +1,7 @@
+{
+  readline = {
+    url = "https://github.com/crystal-lang/crystal-readline.git";
+    rev = "0fb7d186da8e1b157998d98d1c96e99699b791eb";
+    sha256 = "1rk27vw3ssldgnfgprwvz2gag02v4g6d6yg56b3sk9w3fn8jyyi8";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/iferr/default.nix b/nixpkgs/pkgs/development/tools/iferr/default.nix
new file mode 100644
index 000000000000..0e8f797f77ce
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/iferr/default.nix
@@ -0,0 +1,28 @@
+{ buildGoPackage
+, lib
+, fetchFromGitHub
+}:
+
+buildGoPackage rec {
+  pname = "iferr-unstable";
+  version = "2018-06-15";
+  rev = "bb332a3b1d9129b6486c7ddcb7030c11b05cfc88";
+
+  goPackagePath = "github.com/koron/iferr";
+
+  src = fetchFromGitHub {
+    inherit rev;
+
+    owner = "koron";
+    repo = "iferr";
+    sha256 = "1nyqy1sgq2afiama4wy7wap8s03c0hiwwa0f6kwq3y59097rfc0c";
+  };
+
+  meta = with lib; {
+    description = ''Generate "if err != nil {" block'';
+    homepage = "https://github.com/koron/iferr";
+    license = licenses.mit;
+    maintainers = with maintainers; [ kalbasit ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ijq/default.nix b/nixpkgs/pkgs/development/tools/ijq/default.nix
new file mode 100644
index 000000000000..5334a2042600
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ijq/default.nix
@@ -0,0 +1,36 @@
+{ buildGoModule, fetchFromSourcehut, lib, jq, installShellFiles, makeWrapper, scdoc }:
+
+buildGoModule rec {
+  pname = "ijq";
+  version = "0.4.1";
+
+  src = fetchFromSourcehut {
+    owner = "~gpanders";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-WTA14W8JFHdouDgWmsc4wMygnwlANPjSYCAhxFVrwAA=";
+  };
+
+  vendorHash = "sha256-DX8m5FsqMZnzk1wgJA/ESZl0QeDv3p9huF4h1HY9DIA=";
+
+  nativeBuildInputs = [ installShellFiles makeWrapper scdoc ];
+
+  ldflags = [ "-s" "-w" "-X main.Version=${version}" ];
+
+  postBuild = ''
+    scdoc < ijq.1.scd > ijq.1
+    installManPage ijq.1
+  '';
+
+  postInstall = ''
+    wrapProgram "$out/bin/ijq" \
+      --prefix PATH : "${lib.makeBinPath [ jq ]}"
+  '';
+
+  meta = with lib; {
+    description = "Interactive wrapper for jq";
+    homepage = "https://git.sr.ht/~gpanders/ijq";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ justinas SuperSandro2000 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ilspycmd/default.nix b/nixpkgs/pkgs/development/tools/ilspycmd/default.nix
new file mode 100644
index 000000000000..265a17f224d9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ilspycmd/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, buildDotnetModule
+, dotnetCorePackages
+, powershell
+, autoSignDarwinBinariesHook
+, glibcLocales
+}:
+buildDotnetModule rec {
+  pname = "ilspycmd";
+  version = "8.0";
+
+  src = fetchFromGitHub {
+    owner = "icsharpcode";
+    repo = "ILSpy";
+    rev = "v${version}";
+    hash = "sha256-ERBYXgpBRXISfqBSBEydEQuD/5T1dvJ+wNg2U5pKip4=";
+  };
+
+  nativeBuildInputs = [
+    powershell
+  ] ++ lib.optionals (stdenv.hostPlatform.isDarwin && stdenv.hostPlatform.isAarch64) [ autoSignDarwinBinariesHook ];
+
+  # https://github.com/NixOS/nixpkgs/issues/38991
+  # bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
+  env.LOCALE_ARCHIVE = lib.optionalString stdenv.hostPlatform.isLinux "${glibcLocales}/lib/locale/locale-archive";
+
+  dotnet-sdk = dotnetCorePackages.sdk_6_0;
+  dotnet-runtime = dotnetCorePackages.runtime_6_0;
+
+  projectFile = "ICSharpCode.ILSpyCmd/ICSharpCode.ILSpyCmd.csproj";
+  nugetDeps = ./deps.nix;
+
+  meta = with lib; {
+    description = "Tool for decompiling .NET assemblies and generating portable PDBs";
+    homepage = "https://github.com/icsharpcode/ILSpy";
+    changelog = "https://github.com/icsharpcode/ILSpy/releases/tag/${src.rev}";
+    license = with licenses; [
+      mit
+      # third party dependencies
+      mspl
+      asl20
+    ];
+    sourceProvenance = with sourceTypes; [ fromSource binaryBytecode ];
+    maintainers = with maintainers; [ emilytrau ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ilspycmd/deps.nix b/nixpkgs/pkgs/development/tools/ilspycmd/deps.nix
new file mode 100644
index 000000000000..f95ab0d6c4f0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ilspycmd/deps.nix
@@ -0,0 +1,78 @@
+# This file was automatically generated by passthru.fetch-deps.
+# Please dont edit it manually, your changes might get overwritten!
+
+{ fetchNuGet }: [
+  (fetchNuGet { pname = "K4os.Compression.LZ4"; version = "1.3.5"; sha256 = "1nv9inhz0n25lhkw9xgp6g5xbqmcdccdhx6mwrli0pdp6hjmlh9k"; })
+  (fetchNuGet { pname = "McMaster.Extensions.CommandLineUtils"; version = "3.1.0"; sha256 = "075n1mfsxwz514r94l8i3ax0wp43c3xb4f9w25a96h6xxnj0k2hd"; })
+  (fetchNuGet { pname = "Microsoft.Build.Tasks.Git"; version = "1.1.1"; sha256 = "1bb5p4zlnfn88skkvymxfsn0jybqncl4356hwnic9jxdq2d4fz1w"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.App.Ref"; version = "6.0.0"; sha256 = "1skgkralqkg2srvgvrmbsmya67f37gzk40lg28j8nz5mg8k8g0ia"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "1.1.0"; sha256 = "08vh1r12g6ykjygq5d3vq09zylgb84l63k49jc4v8faw9g93iqqm"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Targets"; version = "1.1.0"; sha256 = "193xwf33fbm0ni3idxzbr5fdq3i2dlfgihsac9jj7whj0gd902nh"; })
+  (fetchNuGet { pname = "Microsoft.SourceLink.Common"; version = "1.1.1"; sha256 = "0xkdqs7az2cprar7jzjlgjpd64l6f8ixcmwmpkdm03fyb4s5m0bg"; })
+  (fetchNuGet { pname = "Microsoft.SourceLink.GitHub"; version = "1.1.1"; sha256 = "099y35f2npvva3jk1zp8hn0vb9pwm2l0ivjasdly6y2idv53s5yy"; })
+  (fetchNuGet { pname = "Mono.Cecil"; version = "0.11.4"; sha256 = "1yxa7mh432s7g7p9r7scqxvxjk5ypwc567qdbf0gmk8fbf0d3f8y"; })
+  (fetchNuGet { pname = "NETStandard.Library"; version = "2.0.3"; sha256 = "1fn9fxppfcg4jgypp2pmrpr6awl3qz1xmnri0cygpkwvyx27df1y"; })
+  (fetchNuGet { pname = "runtime.any.System.Collections"; version = "4.3.0"; sha256 = "0bv5qgm6vr47ynxqbnkc7i797fdi8gbjjxii173syrx14nmrkwg0"; })
+  (fetchNuGet { pname = "runtime.any.System.Globalization"; version = "4.3.0"; sha256 = "1daqf33hssad94lamzg01y49xwndy2q97i2lrb7mgn28656qia1x"; })
+  (fetchNuGet { pname = "runtime.any.System.IO"; version = "4.3.0"; sha256 = "0l8xz8zn46w4d10bcn3l4yyn4vhb3lrj2zw8llvz7jk14k4zps5x"; })
+  (fetchNuGet { pname = "runtime.any.System.Reflection"; version = "4.3.0"; sha256 = "02c9h3y35pylc0zfq3wcsvc5nqci95nrkq0mszifc0sjx7xrzkly"; })
+  (fetchNuGet { pname = "runtime.any.System.Reflection.Primitives"; version = "4.3.0"; sha256 = "0x1mm8c6iy8rlxm8w9vqw7gb7s1ljadrn049fmf70cyh42vdfhrf"; })
+  (fetchNuGet { pname = "runtime.any.System.Resources.ResourceManager"; version = "4.3.0"; sha256 = "03kickal0iiby82wa5flar18kyv82s9s6d4xhk5h4bi5kfcyfjzl"; })
+  (fetchNuGet { pname = "runtime.any.System.Runtime"; version = "4.3.0"; sha256 = "1cqh1sv3h5j7ixyb7axxbdkqx6cxy00p4np4j91kpm492rf4s25b"; })
+  (fetchNuGet { pname = "runtime.any.System.Runtime.Handles"; version = "4.3.0"; sha256 = "0bh5bi25nk9w9xi8z23ws45q5yia6k7dg3i4axhfqlnj145l011x"; })
+  (fetchNuGet { pname = "runtime.any.System.Runtime.InteropServices"; version = "4.3.0"; sha256 = "0c3g3g3jmhlhw4klrc86ka9fjbl7i59ds1fadsb2l8nqf8z3kb19"; })
+  (fetchNuGet { pname = "runtime.any.System.Text.Encoding"; version = "4.3.0"; sha256 = "0aqqi1v4wx51h51mk956y783wzags13wa7mgqyclacmsmpv02ps3"; })
+  (fetchNuGet { pname = "runtime.any.System.Text.Encoding.Extensions"; version = "4.3.0"; sha256 = "0lqhgqi0i8194ryqq6v2gqx0fb86db2gqknbm0aq31wb378j7ip8"; })
+  (fetchNuGet { pname = "runtime.any.System.Threading.Tasks"; version = "4.3.0"; sha256 = "03mnvkhskbzxddz4hm113zsch1jyzh2cs450dk3rgfjp8crlw1va"; })
+  (fetchNuGet { pname = "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "16rnxzpk5dpbbl1x354yrlsbvwylrq456xzpsha1n9y3glnhyx9d"; })
+  (fetchNuGet { pname = "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0hkg03sgm2wyq8nqk6dbm9jh5vcq57ry42lkqdmfklrw89lsmr59"; })
+  (fetchNuGet { pname = "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0c2p354hjx58xhhz7wv6div8xpi90sc6ibdm40qin21bvi7ymcaa"; })
+  (fetchNuGet { pname = "runtime.native.System"; version = "4.3.0"; sha256 = "15hgf6zaq9b8br2wi1i3x0zvmk410nlmsmva9p0bbg73v6hml5k4"; })
+  (fetchNuGet { pname = "runtime.native.System.IO.Compression"; version = "4.3.0"; sha256 = "1vvivbqsk6y4hzcid27pqpm5bsi6sc50hvqwbcx8aap5ifrxfs8d"; })
+  (fetchNuGet { pname = "runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "18pzfdlwsg2nb1jjjjzyb5qlgy6xjxzmhnfaijq5s2jw3cm3ab97"; })
+  (fetchNuGet { pname = "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0qyynf9nz5i7pc26cwhgi8j62ps27sqmf78ijcfgzab50z9g8ay3"; })
+  (fetchNuGet { pname = "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "1klrs545awhayryma6l7g2pvnp9xy4z0r1i40r80zb45q3i9nbyf"; })
+  (fetchNuGet { pname = "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0zcxjv5pckplvkg0r6mw3asggm7aqzbdjimhvsasb0cgm59x09l3"; })
+  (fetchNuGet { pname = "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0vhynn79ih7hw7cwjazn87rm9z9fj0rvxgzlab36jybgcpcgphsn"; })
+  (fetchNuGet { pname = "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "160p68l2c7cqmyqjwxydcvgw7lvl1cr0znkw8fp24d1by9mqc8p3"; })
+  (fetchNuGet { pname = "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "15zrc8fgd8zx28hdghcj5f5i34wf3l6bq5177075m2bc2j34jrqy"; })
+  (fetchNuGet { pname = "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "1p4dgxax6p7rlgj4q73k73rslcnz4wdcv8q2flg1s8ygwcm58ld5"; })
+  (fetchNuGet { pname = "runtime.unix.System.Diagnostics.Debug"; version = "4.3.0"; sha256 = "1lps7fbnw34bnh3lm31gs5c0g0dh7548wfmb8zz62v0zqz71msj5"; })
+  (fetchNuGet { pname = "runtime.unix.System.Private.Uri"; version = "4.3.0"; sha256 = "1jx02q6kiwlvfksq1q9qr17fj78y5v6mwsszav4qcz9z25d5g6vk"; })
+  (fetchNuGet { pname = "runtime.unix.System.Runtime.Extensions"; version = "4.3.0"; sha256 = "0pnxxmm8whx38dp6yvwgmh22smknxmqs5n513fc7m4wxvs1bvi4p"; })
+  (fetchNuGet { pname = "System.Buffers"; version = "4.5.1"; sha256 = "04kb1mdrlcixj9zh1xdi5as0k0qi8byr5mi3p3jcxx72qz93s2y3"; })
+  (fetchNuGet { pname = "System.Collections"; version = "4.3.0"; sha256 = "19r4y64dqyrq6k4706dnyhhw7fs24kpp3awak7whzss39dakpxk9"; })
+  (fetchNuGet { pname = "System.Collections.Immutable"; version = "6.0.0"; sha256 = "1js98kmjn47ivcvkjqdmyipzknb9xbndssczm8gq224pbaj1p88c"; })
+  (fetchNuGet { pname = "System.Collections.Immutable"; version = "7.0.0"; sha256 = "1n9122cy6v3qhsisc9lzwa1m1j62b8pi2678nsmnlyvfpk0zdagm"; })
+  (fetchNuGet { pname = "System.ComponentModel.Annotations"; version = "5.0.0"; sha256 = "021h7x98lblq9avm1bgpa4i31c2kgsa7zn4sqhxf39g087ar756j"; })
+  (fetchNuGet { pname = "System.Composition"; version = "6.0.0"; sha256 = "1p7hysns39cc24af6dwd4m48bqjsrr3clvi4aws152mh2fgyg50z"; })
+  (fetchNuGet { pname = "System.Composition.AttributedModel"; version = "6.0.0"; sha256 = "1mqrblb0l65hw39d0hnspqcv85didpn4wbiwhfgj4784wzqx2w6k"; })
+  (fetchNuGet { pname = "System.Composition.Convention"; version = "6.0.0"; sha256 = "02km3yb94p1c4s7liyhkmda0g71zm1rc8ijsfmy4bnlkq15xjw3b"; })
+  (fetchNuGet { pname = "System.Composition.Hosting"; version = "6.0.0"; sha256 = "0big5nk8c44rxp6cfykhk7rxvn2cgwa99w6c3v2a36adc3lj36ky"; })
+  (fetchNuGet { pname = "System.Composition.Runtime"; version = "6.0.0"; sha256 = "0vq5ik63yii1784gsa2f2kx9w6xllmm8b8rk0arid1jqdj1nyrlw"; })
+  (fetchNuGet { pname = "System.Composition.TypedParts"; version = "6.0.0"; sha256 = "0y9pq3y60nyrpfy51f576a0qjjdh61mcv8vnik32pm4bz56h9q72"; })
+  (fetchNuGet { pname = "System.Diagnostics.Debug"; version = "4.3.0"; sha256 = "00yjlf19wjydyr6cfviaph3vsjzg3d5nvnya26i2fvfg53sknh3y"; })
+  (fetchNuGet { pname = "System.Globalization"; version = "4.3.0"; sha256 = "1cp68vv683n6ic2zqh2s1fn4c2sd87g5hpp6l4d4nj4536jz98ki"; })
+  (fetchNuGet { pname = "System.IO"; version = "4.3.0"; sha256 = "05l9qdrzhm4s5dixmx68kxwif4l99ll5gqmh7rqgw554fx0agv5f"; })
+  (fetchNuGet { pname = "System.IO.Compression"; version = "4.3.0"; sha256 = "084zc82yi6yllgda0zkgl2ys48sypiswbiwrv7irb3r0ai1fp4vz"; })
+  (fetchNuGet { pname = "System.IO.FileSystem.Primitives"; version = "4.3.0"; sha256 = "0j6ndgglcf4brg2lz4wzsh1av1gh8xrzdsn9f0yznskhqn1xzj9c"; })
+  (fetchNuGet { pname = "System.Memory"; version = "4.5.4"; sha256 = "14gbbs22mcxwggn0fcfs1b062521azb9fbb7c113x0mq6dzq9h6y"; })
+  (fetchNuGet { pname = "System.Numerics.Vectors"; version = "4.4.0"; sha256 = "0rdvma399070b0i46c4qq1h2yvjj3k013sqzkilz4bz5cwmx1rba"; })
+  (fetchNuGet { pname = "System.Private.Uri"; version = "4.3.0"; sha256 = "04r1lkdnsznin0fj4ya1zikxiqr0h6r6a1ww2dsm60gqhdrf0mvx"; })
+  (fetchNuGet { pname = "System.Reflection"; version = "4.3.0"; sha256 = "0xl55k0mw8cd8ra6dxzh974nxif58s3k1rjv1vbd7gjbjr39j11m"; })
+  (fetchNuGet { pname = "System.Reflection.Metadata"; version = "6.0.0"; sha256 = "1x0b289r9yjzdqypi2x3dc8sa66s3b6bpc7l2f8hxrzl6czdg4al"; })
+  (fetchNuGet { pname = "System.Reflection.Metadata"; version = "7.0.0"; sha256 = "1wilasn2qmj870h2bhw348lspamm7pbinpb4m89icg113510l00v"; })
+  (fetchNuGet { pname = "System.Reflection.Primitives"; version = "4.3.0"; sha256 = "04xqa33bld78yv5r93a8n76shvc8wwcdgr1qvvjh959g3rc31276"; })
+  (fetchNuGet { pname = "System.Resources.ResourceManager"; version = "4.3.0"; sha256 = "0sjqlzsryb0mg4y4xzf35xi523s4is4hz9q4qgdvlvgivl7qxn49"; })
+  (fetchNuGet { pname = "System.Runtime"; version = "4.3.0"; sha256 = "066ixvgbf2c929kgknshcxqj6539ax7b9m570cp8n179cpfkapz7"; })
+  (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "6.0.0"; sha256 = "0qm741kh4rh57wky16sq4m0v05fxmkjjr87krycf5vp9f0zbahbc"; })
+  (fetchNuGet { pname = "System.Runtime.Extensions"; version = "4.3.0"; sha256 = "1ykp3dnhwvm48nap8q23893hagf665k0kn3cbgsqpwzbijdcgc60"; })
+  (fetchNuGet { pname = "System.Runtime.Handles"; version = "4.3.0"; sha256 = "0sw2gfj2xr7sw9qjn0j3l9yw07x73lcs97p8xfc9w1x9h5g5m7i8"; })
+  (fetchNuGet { pname = "System.Runtime.InteropServices"; version = "4.3.0"; sha256 = "00hywrn4g7hva1b2qri2s6rabzwgxnbpw9zfxmz28z09cpwwgh7j"; })
+  (fetchNuGet { pname = "System.Runtime.Loader"; version = "4.3.0"; sha256 = "07fgipa93g1xxgf7193a6vw677mpzgr0z0cfswbvqqb364cva8dk"; })
+  (fetchNuGet { pname = "System.Text.Encoding"; version = "4.3.0"; sha256 = "1f04lkir4iladpp51sdgmis9dj4y8v08cka0mbmsy0frc9a4gjqr"; })
+  (fetchNuGet { pname = "System.Text.Encoding.Extensions"; version = "4.3.0"; sha256 = "11q1y8hh5hrp5a3kw25cb6l00v5l5dvirkz8jr3sq00h1xgcgrxy"; })
+  (fetchNuGet { pname = "System.Threading"; version = "4.3.0"; sha256 = "0rw9wfamvhayp5zh3j7p1yfmx9b5khbf4q50d8k5rk993rskfd34"; })
+  (fetchNuGet { pname = "System.Threading.Tasks"; version = "4.3.0"; sha256 = "134z3v9abw3a6jsw17xl3f6hqjpak5l682k2vz39spj4kmydg6k7"; })
+  (fetchNuGet { pname = "TunnelVisionLabs.ReferenceAssemblyAnnotator"; version = "1.0.0-alpha.160"; sha256 = "1wvfa3098a984kydjgjvx43gncnr89fw20if2gqvz8kqn9pxqjbq"; })
+]
diff --git a/nixpkgs/pkgs/development/tools/img/default.nix b/nixpkgs/pkgs/development/tools/img/default.nix
new file mode 100644
index 000000000000..b14e6e3b2615
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/img/default.nix
@@ -0,0 +1,55 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+, makeWrapper
+, runc
+, wrapperDir ? "/run/wrappers/bin" # Default for NixOS, other systems might need customization.
+}:
+
+buildGoModule rec {
+  pname = "img";
+  version = "0.5.11";
+
+  src = fetchFromGitHub {
+    owner = "genuinetools";
+    repo = "img";
+    rev = "v${version}";
+    sha256 = "0r5hihzp2679ki9hr3p0f085rafy2hc8kpkdhnd4m5k4iibqib08";
+  };
+
+  vendorHash = null;
+
+  postPatch = ''
+    V={newgidmap,newgidmap} \
+      substituteInPlace ./internal/unshare/unshare.c \
+        --replace "/usr/bin/$V" "${wrapperDir}/$V"
+  '';
+
+  nativeBuildInputs = [
+    makeWrapper
+  ];
+
+  tags = [
+    "seccomp"
+    "noembed" # disables embedded `runc`
+  ];
+
+  ldflags = [
+    "-X github.com/genuinetools/img/version.VERSION=v${version}"
+    "-s -w"
+  ];
+
+  postInstall = ''
+    wrapProgram "$out/bin/img" --prefix PATH : ${lib.makeBinPath [ runc ]}
+  '';
+
+  # Tests fail as: internal/binutils/install.go:57:15: undefined: Asset
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Standalone, daemon-less, unprivileged Dockerfile and OCI compatible container image builder. ";
+    license = licenses.mit;
+    homepage = "https://github.com/genuinetools/img";
+    maintainers = with maintainers; [ bryanasdev000 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/impl/default.nix b/nixpkgs/pkgs/development/tools/impl/default.nix
new file mode 100644
index 000000000000..bec08cb7e90c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/impl/default.nix
@@ -0,0 +1,26 @@
+{ buildGoModule, lib, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "impl";
+  version = "1.2.0";
+
+  src = fetchFromGitHub {
+    owner = "josharian";
+    repo = "impl";
+    rev = "v${version}";
+    hash = "sha256-BqRoLh0MpNQgY9OHHRBbegWGsq3Y4wOqg94rWvex76I=";
+  };
+
+  vendorHash = "sha256-+5+CM5iGV54zRa7rJoQDBWrO98icNxlAv8JwATynanY=";
+
+  preCheck = ''
+    export GOROOT="$(go env GOROOT)"
+  '';
+
+  meta = with lib; {
+    description = "Generate method stubs for implementing an interface";
+    homepage = "https://github.com/josharian/impl";
+    license = licenses.mit;
+    maintainers = with maintainers; [ kalbasit ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ineffassign/default.nix b/nixpkgs/pkgs/development/tools/ineffassign/default.nix
new file mode 100644
index 000000000000..cd4f41ad670e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ineffassign/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, go
+}:
+
+buildGoModule rec {
+  pname = "ineffassign";
+  version = "unstable-2021-09-04";
+  rev = "4cc7213b9bc8b868b2990c372f6fa057fa88b91c";
+
+  src = fetchFromGitHub {
+    owner = "gordonklaus";
+    repo = "ineffassign";
+    inherit rev;
+    sha256 = "sha256-XLXANN9TOmrNOixWtlqnIC27u+0TW2P3s9MyeyVUcAQ=";
+  };
+
+  vendorHash = "sha256-QTgWicN2m2ughtLsEBMaQWfpDbmbL0nS5qaIKF3mTJM=";
+
+  allowGoReference = true;
+
+  nativeCheckInputs = [ go ];
+
+  meta = with lib; {
+    description = "Detect ineffectual assignments in Go code";
+    homepage = "https://github.com/gordonklaus/ineffassign";
+    license = licenses.mit;
+    maintainers = with maintainers; [ kalbasit ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/inferno/default.nix b/nixpkgs/pkgs/development/tools/inferno/default.nix
new file mode 100644
index 000000000000..d9490abad536
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/inferno/default.nix
@@ -0,0 +1,34 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "inferno";
+  version = "0.11.18";
+
+  src = fetchFromGitHub {
+    owner = "jonhoo";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-JP0n1sepH9kFOdrKTmt7Q79pe4GQInYKQH3xi2/G59s=";
+    fetchSubmodules = true;
+  };
+
+  cargoHash = "sha256-YCa4WL2sgdITKfdfH3PGdiRHbSkE6JSJRHipaN00GwA=";
+
+  # skip flaky tests
+  checkFlags = [
+    "--skip=collapse::dtrace::tests::test_collapse_multi_dtrace"
+    "--skip=collapse::dtrace::tests::test_collapse_multi_dtrace_simple"
+    "--skip=collapse::perf::tests::test_collapse_multi_perf"
+    "--skip=collapse::perf::tests::test_collapse_multi_perf_simple"
+    "--skip=flamegraph_base_symbol"
+    "--skip=flamegraph_multiple_base_symbol"
+  ];
+
+  meta = with lib; {
+    description = "A port of parts of the flamegraph toolkit to Rust";
+    homepage = "https://github.com/jonhoo/inferno";
+    changelog = "https://github.com/jonhoo/inferno/blob/v${version}/CHANGELOG.md";
+    license = licenses.cddl;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/infisical/default.nix b/nixpkgs/pkgs/development/tools/infisical/default.nix
new file mode 100644
index 000000000000..0f0c8e1ef89f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/infisical/default.nix
@@ -0,0 +1,87 @@
+{ stdenv, lib, fetchurl, testers, infisical, installShellFiles }:
+
+# this expression is mostly automated, and you are STRONGLY
+# RECOMMENDED to use to nix-update for updating this expression when new
+# releases come out, which runs the sibling `update.sh` script.
+#
+# from the root of the nixpkgs git repository, run:
+#
+#    nix-shell maintainers/scripts/update.nix \
+#      --argstr commit true \
+#      --argstr package infisical
+
+let
+  # build hashes, which correspond to the hashes of the precompiled binaries procured by GitHub Actions.
+  buildHashes = builtins.fromJSON (builtins.readFile ./hashes.json);
+
+  # the version of infisical
+  version = "0.16.10";
+
+  # the platform-specific, statically linked binary
+  src =
+    let
+      suffix = {
+        # map the platform name to the golang toolchain suffix
+        # NOTE: must be synchronized with update.sh!
+        x86_64-linux = "linux_amd64";
+        x86_64-darwin = "darwin_amd64";
+        aarch64-linux = "linux_arm64";
+        aarch64-darwin = "darwin_arm64";
+      }."${stdenv.hostPlatform.system}" or (throw "Unsupported system: ${stdenv.hostPlatform.system}");
+
+      name = "infisical_${version}_${suffix}.tar.gz";
+      hash = buildHashes."${stdenv.hostPlatform.system}";
+      url = "https://github.com/Infisical/infisical/releases/download/infisical-cli%2Fv${version}/${name}";
+    in
+    fetchurl { inherit name url hash; };
+
+in
+stdenv.mkDerivation {
+  pname = "infisical";
+  version = version;
+  inherit src;
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  doCheck = true;
+  dontConfigure = true;
+  dontStrip = true;
+
+  sourceRoot = ".";
+  buildPhase = "chmod +x ./infisical";
+  checkPhase = "./infisical --version";
+  installPhase = ''
+    mkdir -p $out/bin/ $out/share/completions/ $out/share/man/
+    cp infisical $out/bin
+    cp completions/* $out/share/completions/
+    cp manpages/* $out/share/man/
+  '';
+  postInstall = ''
+    installManPage share/man/infisical.1.gz
+    installShellCompletion share/completions/infisical.{bash,fish,zsh}
+  '';
+
+  passthru = {
+    updateScript = ./update.sh;
+    tests.version = testers.testVersion { package = infisical; };
+  };
+
+  meta = with lib; {
+    description = "The official Infisical CLI";
+    longDescription = ''
+      Infisical is the open-source secret management platform:
+      Sync secrets across your team/infrastructure and prevent secret leaks.
+    '';
+    homepage = "https://infisical.com";
+    changelog = "https://github.com/infisical/infisical/releases/tag/infisical-cli%2Fv${version}";
+    license = licenses.mit;
+    mainProgram = "infisical";
+    maintainers = [ maintainers.ivanmoreau maintainers.jgoux ];
+    platforms = [
+      "x86_64-linux"
+      "aarch64-linux"
+      "aarch64-darwin"
+      "x86_64-darwin"
+    ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/infisical/hashes.json b/nixpkgs/pkgs/development/tools/infisical/hashes.json
new file mode 100644
index 000000000000..4b631427a553
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/infisical/hashes.json
@@ -0,0 +1,6 @@
+{ "_comment": "@generated by pkgs/development/tools/infisical/update.sh"
+, "x86_64-linux": "sha256-EjAm8toawTRKlnVr/dXXvfZ7IubKgjJh5qkR5lwBga8="
+, "x86_64-darwin": "sha256-W2enmLucQpDLaUzsbSmQ2wq1nU5k5a93iqlAERJ/b/g="
+, "aarch64-linux": "sha256-i5irWQmZVqKuzgAmL1wvo/3V7czEiIG8yANDhdb0tPk="
+, "aarch64-darwin": "sha256-GjG8FBT3eulRYLyy4iiuXuQjiL+Au8Dd/h7buXDNlyQ="
+}
diff --git a/nixpkgs/pkgs/development/tools/infisical/update.sh b/nixpkgs/pkgs/development/tools/infisical/update.sh
new file mode 100755
index 000000000000..5810d2ee48b4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/infisical/update.sh
@@ -0,0 +1,41 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -I nixpkgs=./. -i bash -p curl jq nix-prefetch common-updater-scripts nix coreutils
+# shellcheck shell=bash
+set -euo pipefail
+
+RELEASE_NAME=$(curl -s https://api.github.com/repos/infisical/infisical/releases \
+  | jq -r 'sort_by(.created_at) | reverse |
+           (map
+             (select ((.prerelease == false) and (.draft == false))) |
+             first
+           ) | .name')
+VERSION=$(echo "$RELEASE_NAME" | sed -E 's/^infisical-cli\/v//')
+
+echo "Latest infisical release: $VERSION"
+
+ARCHS=(
+    "x86_64-linux:linux_amd64"
+    "x86_64-darwin:darwin_amd64"
+    "aarch64-linux:linux_arm64"
+    "aarch64-darwin:darwin_arm64"
+)
+
+NFILE=pkgs/development/tools/infisical/default.nix
+HFILE=pkgs/development/tools/infisical/hashes.json
+rm -f "$HFILE" && touch "$HFILE"
+
+printf "{ \"_comment\": \"@generated by pkgs/development/tools/infisical/update.sh\"\n" >> "$HFILE"
+
+for arch in "${ARCHS[@]}"; do
+    IFS=: read -r arch_name arch_target <<< "$arch"
+    sha256hash="$(nix-prefetch-url --type sha256 "https://github.com/infisical/infisical/releases/download/${RELEASE_NAME}/infisical_${VERSION}_${arch_target}.tar.gz")"
+    srihash="$(nix hash to-sri --type sha256 "$sha256hash")"
+    echo ", \"$arch_name\": \"$srihash\"" >> "$HFILE"
+done
+echo "}" >> "$HFILE"
+
+sed -i \
+  '0,/version\s*=\s*".*";/s//version = "'"$VERSION"'";/' \
+  "$NFILE"
+
+echo "Done; wrote $HFILE and updated version in $NFILE."
diff --git a/nixpkgs/pkgs/development/tools/initool/default.nix b/nixpkgs/pkgs/development/tools/initool/default.nix
new file mode 100644
index 000000000000..5658ba1eafdf
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/initool/default.nix
@@ -0,0 +1,41 @@
+{ stdenv
+, mlton
+, lib
+, fetchFromGitHub
+}:
+
+stdenv.mkDerivation rec {
+  pname = "initool";
+  version = "0.14.1";
+
+  src = fetchFromGitHub {
+    owner = "dbohdan";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-wb9hJ0R1R7kYt+TWznqfVGKms3hQjzB8TJYpS89da/E=";
+  };
+
+  nativeBuildInputs = [ mlton ];
+
+  doCheck = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    cp initool $out/bin/
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    inherit (mlton.meta) platforms;
+
+    description = "Manipulate INI files from the command line";
+    homepage = "https://github.com/dbohdan/initool";
+    license = licenses.mit;
+    maintainers = with maintainers; [ e1mo ];
+    changelog = "https://github.com/dbohdan/initool/releases/tag/v${version}";
+  };
+}
+
diff --git a/nixpkgs/pkgs/development/tools/irony-server/default.nix b/nixpkgs/pkgs/development/tools/irony-server/default.nix
new file mode 100644
index 000000000000..192a33ad7ca7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/irony-server/default.nix
@@ -0,0 +1,21 @@
+{ lib, stdenv, cmake, llvmPackages, llvm, irony }:
+
+stdenv.mkDerivation {
+  pname = "irony-server";
+  inherit (irony) src version;
+
+  nativeBuildInputs = [ cmake llvm ];
+  buildInputs = [ llvmPackages.libclang ];
+
+  dontUseCmakeBuildDir = true;
+
+  cmakeDir = "server";
+
+  meta = with lib; {
+    description = "The server part of irony";
+    homepage = "https://melpa.org/#/irony";
+    maintainers = [ maintainers.deepfire ];
+    platforms = platforms.unix;
+    license = licenses.free;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/jake/default.nix b/nixpkgs/pkgs/development/tools/jake/default.nix
new file mode 100644
index 000000000000..b91a779cb53c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jake/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, buildNpmPackage
+, fetchFromGitHub
+}:
+
+buildNpmPackage rec {
+  pname = "jake";
+  version = "10.8.7";
+
+  src = fetchFromGitHub {
+    owner = "jakejs";
+    repo = "jake";
+    rev = "v${version}";
+    hash = "sha256-Qado9huQx9MVTFp8t7szB+IUVNWQqT/ni62JnURQqeM=";
+  };
+
+  npmDepsHash = "sha256-3pOFrH/em/HMTswrZLAeqPAb9U0/odcZPt4AkQkMhZM=";
+
+  dontNpmBuild = true;
+
+  meta = {
+    description = "JavaScript build tool, similar to Make or Rake";
+    homepage = "https://github.com/jakejs/jake";
+    license = lib.licenses.asl20;
+    mainProgram = "jake";
+    maintainers = with lib.maintainers; [ jasoncarr ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/jaq/default.nix b/nixpkgs/pkgs/development/tools/jaq/default.nix
new file mode 100644
index 000000000000..b95473aac745
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jaq/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "jaq";
+  version = "1.3.0";
+
+  src = fetchFromGitHub {
+    owner = "01mf02";
+    repo = "jaq";
+    rev = "v${version}";
+    hash = "sha256-QXlHiVlKx9qmW5Cw4IGzjuUSUfoc9IvA5ZkTc1Ev37Q=";
+  };
+
+  cargoHash = "sha256-9fv8Z9AE9GV/Bq+iAsxUkD/CS25/kOBKKS4SAke/tFk=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  meta = with lib; {
+    description = "A jq clone focused on correctness, speed and simplicity";
+    homepage = "https://github.com/01mf02/jaq";
+    changelog = "https://github.com/01mf02/jaq/releases/tag/${src.rev}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda siraben ];
+    mainProgram = "jaq";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/java/cfr/default.nix b/nixpkgs/pkgs/development/tools/java/cfr/default.nix
new file mode 100644
index 000000000000..7dfd1a084162
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/java/cfr/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, makeWrapper, fetchurl, jre }:
+
+stdenv.mkDerivation rec {
+  pname = "cfr";
+  version = "0.152";
+
+  src = fetchurl {
+    url = "http://www.benf.org/other/cfr/cfr_${version}.jar";
+    sha256 = "sha256-9obo897Td9e8h9IWqQ6elRLfQVbnWwbGVaFmSK6HZbI=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  buildCommand = ''
+    jar=$out/share/java/cfr_${version}.jar
+    install -Dm444 $src $jar
+    makeWrapper ${jre}/bin/java $out/bin/cfr --add-flags "-jar $jar"
+  '';
+
+  meta = with lib; {
+    description = "Another java decompiler";
+    longDescription = ''
+      CFR will decompile modern Java features - Java 8 lambdas (pre and post
+      Java beta 103 changes), Java 7 String switches etc, but is written
+      entirely in Java 6.
+    '';
+    homepage = "http://www.benf.org/other/cfr/";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.mit;
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/java/dex2jar/default.nix b/nixpkgs/pkgs/development/tools/java/dex2jar/default.nix
new file mode 100644
index 000000000000..e0ce19dc8d2f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/java/dex2jar/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, stdenvNoCC
+, fetchurl
+, jre
+, makeWrapper
+, unzip
+}:
+
+stdenvNoCC.mkDerivation (finalAttrs: {
+  pname = "dex2jar";
+  version  = "2.4";
+
+  src = fetchurl {
+    url = "https://github.com/pxb1988/dex2jar/releases/download/v${finalAttrs.version}/dex-tools-v${finalAttrs.version}.zip";
+    hash = "sha256-7nxF6zwdJHSmFF2NRH5lGnNqItlmS209O+WlqBfdojo=";
+  };
+
+  nativeBuildInputs = [ makeWrapper unzip ];
+
+  postPatch = ''
+    rm *.bat
+    chmod +x *.sh
+  '';
+
+  installPhase = ''
+    f=$out/share/dex2jar/
+
+    mkdir -p $f $out/bin
+
+    mv * $f
+    for i in $f/*.sh; do
+      n=$(basename ''${i%.sh})
+      makeWrapper $i $out/bin/$n --prefix PATH : ${lib.makeBinPath [ jre ] }
+    done
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/pxb1988/dex2jar";
+    description = "Tools to work with android .dex and java .class files";
+    maintainers = with maintainers; [ makefu ];
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.asl20;
+    platforms = platforms.unix;
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/java/fastjar/default.nix b/nixpkgs/pkgs/development/tools/java/fastjar/default.nix
new file mode 100644
index 000000000000..c81df42edb11
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/java/fastjar/default.nix
@@ -0,0 +1,31 @@
+{ fetchurl, lib, stdenv, zlib }:
+
+stdenv.mkDerivation rec {
+  pname = "fastjar";
+  version = "0.98";
+
+  src = fetchurl {
+    url = "https://download.savannah.gnu.org/releases/fastjar/fastjar-${version}.tar.gz";
+    sha256 = "0iginbz2m15hcsa3x4y7v3mhk54gr1r7m3ghx0pg4n46vv2snmpi";
+  };
+
+  buildInputs = [ zlib ];
+
+  doCheck = true;
+
+  meta = {
+    description = "Fast Java archiver written in C";
+
+    longDescription = ''
+      Fastjar is a version of Sun's `jar' utility, written entirely in C, and
+      therefore quite a bit faster.  Fastjar can be up to 100x faster than
+      the stock `jar' program running without a JIT.
+    '';
+
+    homepage = "https://savannah.nongnu.org/projects/fastjar/";
+
+    license = lib.licenses.gpl2Plus;
+    platforms = lib.platforms.linux;
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/java/java-language-server/default.nix b/nixpkgs/pkgs/development/tools/java/java-language-server/default.nix
new file mode 100644
index 000000000000..d1f050f326f1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/java/java-language-server/default.nix
@@ -0,0 +1,60 @@
+{ lib, stdenv, fetchFromGitHub
+, jdk, maven
+, makeWrapper
+}:
+
+let
+  platform =
+    if stdenv.isLinux then "linux"
+    else if stdenv.isDarwin then "mac"
+    else if stdenv.isWindows then "windows"
+    else throw "unsupported platform";
+in
+maven.buildMavenPackage rec {
+  pname = "java-language-server";
+  version = "0.2.46";
+
+  src = fetchFromGitHub {
+    owner = "georgewfraser";
+    repo = pname;
+    # commit hash is used as owner sometimes forgets to set tags. See https://github.com/georgewfraser/java-language-server/issues/104
+    rev = "d7f4303cd233cdad84daffbb871dd4512a2c8da2";
+    sha256 = "sha256-BIcfwz+pLQarnK8XBPwDN2nrdvK8xqUo0XFXk8ZV/h0=";
+  };
+
+  mvnFetchExtraArgs.dontConfigure = true;
+  mvnParameters = "-DskipTests";
+  mvnHash = "sha256-2uthmSjFQ43N5lgV11DsxuGce+ZptZsmRLTgjDo0M2w=";
+
+  nativeBuildInputs = [ jdk makeWrapper ];
+
+  dontConfigure = true;
+  preBuild = ''
+    jlink \
+      ${lib.optionalString (!stdenv.isDarwin) "--module-path './jdks/${platform}/jdk-13/jmods'"} \
+      --add-modules java.base,java.compiler,java.logging,java.sql,java.xml,jdk.compiler,jdk.jdi,jdk.unsupported,jdk.zipfs \
+      --output dist/${platform} \
+      --no-header-files \
+      --no-man-pages \
+      --compress 2
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/share/java/java-language-server
+    cp -r dist/classpath dist/*${platform}* $out/share/java/java-language-server
+
+    # a link is not used as lang_server_${platform}.sh makes use of "dirname $0" to access other files
+    makeWrapper $out/share/java/java-language-server/lang_server_${platform}.sh $out/bin/java-language-server
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "A Java language server based on v3.0 of the protocol and implemented using the Java compiler API";
+    homepage = "https://github.com/georgewfraser/java-language-server";
+    license = licenses.mit;
+    maintainers = with maintainers; [ hqurve ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/java/jextract/default.nix b/nixpkgs/pkgs/development/tools/java/jextract/default.nix
new file mode 100644
index 000000000000..d4b514d43fef
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/java/jextract/default.nix
@@ -0,0 +1,96 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, emptyDirectory
+, writeText
+, makeWrapper
+, gradle
+, jdk21
+, llvmPackages
+}:
+
+let
+  gradleInit = writeText "init.gradle" ''
+    logger.lifecycle 'Replacing Maven repositories with empty directory...'
+    gradle.projectsLoaded {
+      rootProject.allprojects {
+        buildscript {
+          repositories {
+            clear()
+            maven { url '${emptyDirectory}' }
+          }
+        }
+        repositories {
+          clear()
+          maven { url '${emptyDirectory}' }
+        }
+      }
+    }
+    settingsEvaluated { settings ->
+      settings.pluginManagement {
+        repositories {
+          maven { url '${emptyDirectory}' }
+        }
+      }
+    }
+  '';
+in
+
+stdenv.mkDerivation {
+  pname = "jextract";
+  version = "unstable-2023-11-27";
+
+  src = fetchFromGitHub {
+    owner = "openjdk";
+    repo = "jextract";
+    rev = "8730fcf05c229d035b0db52ee6bd82622e9d03e9"; # Update jextract 21 with latest fixes
+    hash = "sha256-Wct/yx5C0EjDtDyXNYDH5LRmrfq7islXbPVIGBR6x5Y=";
+  };
+
+  nativeBuildInputs = [
+    gradle
+    makeWrapper
+  ];
+
+  env = {
+    ORG_GRADLE_PROJECT_llvm_home = llvmPackages.libclang.lib;
+    ORG_GRADLE_PROJECT_jdk21_home = jdk21;
+  };
+
+  buildPhase = ''
+    runHook preBuild
+
+    export GRADLE_USER_HOME=$(mktemp -d)
+    gradle --console plain --init-script "${gradleInit}" assemble
+
+    runHook postBuild
+  '';
+
+  doCheck = true;
+
+  checkPhase = ''
+    runHook preCheck
+    gradle --console plain --init-script "${gradleInit}" verify
+    runHook postCheck
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/opt/
+    cp -r ./build/jextract $out/opt/jextract
+
+    runHook postInstall
+  '';
+
+  postFixup = ''
+    makeWrapper "$out/opt/jextract/bin/jextract" "$out/bin/jextract"
+  '';
+
+  meta = with lib; {
+    description = "A tool which mechanically generates Java bindings from a native library headers";
+    homepage = "https://github.com/openjdk/jextract";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ sharzy ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/java/jhiccup/default.nix b/nixpkgs/pkgs/development/tools/java/jhiccup/default.nix
new file mode 100644
index 000000000000..453455dcd118
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/java/jhiccup/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchzip }:
+
+stdenv.mkDerivation rec {
+  pname = "jhiccup";
+  version = "2.0.10";
+
+  src = fetchzip {
+    url    = "https://www.azul.com/files/jHiccup-${version}-dist.zip";
+    sha256 = "1hsvi8wjh615fnjf75h7b5afp04chqcgvini30vfcn3m9a5icbgy";
+  };
+
+  dontConfigure = true;
+  buildPhase     = ":";
+  installPhase = ''
+    mkdir -p $out/bin $out/share/java
+    cp *.jar $out/share/java
+
+    # Fix version number (out of date at time of import), and path to
+    # jHiccup.jar
+    for x in ./jHiccup ./jHiccupLogProcessor; do
+      substituteInPlace $x \
+        --replace 'JHICCUP_Version=2.0.5' 'JHICCUP_Version=${version}' \
+        --replace '$INSTALLED_PATH' $out/share/java
+    done
+
+    mv jHiccup jHiccupLogProcessor $out/bin/
+  '';
+
+  meta = {
+    description = "Measure JVM application stalls and GC pauses";
+    homepage    = "https://www.azul.com/jhiccup/";
+    sourceProvenance = with lib.sourceTypes; [ binaryBytecode ];
+    license     = lib.licenses.cc0;
+    platforms   = lib.platforms.linux;
+    maintainers = with lib.maintainers; [ thoughtpolice ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/java/jprofiler/default.nix b/nixpkgs/pkgs/development/tools/java/jprofiler/default.nix
new file mode 100644
index 000000000000..3a74e491f0e5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/java/jprofiler/default.nix
@@ -0,0 +1,102 @@
+{ stdenv
+, lib
+, fetchurl
+, makeWrapper
+, makeDesktopItem
+, copyDesktopItems
+, _7zz
+, jdk
+}:
+
+let
+  inherit (stdenv.hostPlatform) system;
+  pname = "jprofiler";
+
+  version = "13.0.6";
+  nameApp = "JProfiler";
+
+  meta = with lib; {
+    description = "JProfiler's intuitive UI helps you resolve performance bottlenecks";
+    longDescription = ''
+      JProfiler's intuitive UI helps you resolve performance bottlenecks,
+      pin down memory leaks and understand threading issues.
+    '';
+    homepage = "https://www.ej-technologies.com/products/jprofiler/overview.html";
+    license = licenses.unfree;
+    maintainers = with maintainers; [ catap ];
+  };
+
+  src = if stdenv.isLinux then fetchurl {
+    url = "https://download-gcdn.ej-technologies.com/jprofiler/jprofiler_linux_${lib.replaceStrings ["."] ["_"]  version}.tar.gz";
+    hash = "sha256-orjBSaC7NvKcak+RSEa9V05oL3EZIBnp7TyaX/8XFyg=";
+  } else fetchurl {
+    url = "https://download-gcdn.ej-technologies.com/jprofiler/jprofiler_macos_${lib.replaceStrings ["."] ["_"]  version}.dmg";
+    hash = "sha256-OI6NSPqYws5Rv25U5jIPzkyJtB8LF04qHB3NPR9XBWg=";
+  };
+
+  srcIcon = fetchurl {
+    url = "https://www.ej-technologies.com/assets/content/header-product-jprofiler@2x-24bc4d84bd2a4eb641a5c8531758ff7c.png";
+    hash = "sha256-XUmuqhnNv7mZ3Gb4A0HLSlfiJd5xbCExVsw3hmXHeVE=";
+  };
+
+  desktopItems = makeDesktopItem {
+    name = pname;
+    exec = pname;
+    icon = pname;
+    comment = meta.description;
+    desktopName = nameApp;
+    genericName = "Java Profiler Tool";
+    categories = [ "Development" ];
+  };
+
+  linux = stdenv.mkDerivation {
+    inherit pname version src desktopItems;
+
+    nativeBuildInputs = [ makeWrapper copyDesktopItems ];
+
+    installPhase = ''
+      runHook preInstall
+      cp -r . $out
+
+      rm -f $out/bin/updater
+      rm -rf $out/bin/linux-ppc*
+      rm -rf $out/bin/linux-armhf
+      rm -rf $out/bin/linux-musl*
+
+      for f in $(find $out/bin -type f -executable); do
+        wrapProgram $f --set JAVA_HOME "${jdk.home}"
+      done
+
+      install -Dm644 "${srcIcon}" \
+        "$out/share/icons/hicolor/scalable/apps/jprofiler.png"
+      runHook postInstall
+    '';
+
+    meta = meta // { platforms = lib.platforms.linux; };
+  };
+
+  darwin = stdenv.mkDerivation {
+    inherit pname version src;
+
+    nativeBuildInputs = [ makeWrapper _7zz ];
+
+    unpackPhase = ''
+      runHook preUnpack
+      7zz x $src -x!JProfiler/\[\]
+      runHook postUnpack
+    '';
+
+    sourceRoot = nameApp;
+
+    installPhase = ''
+      runHook preInstall
+      mkdir -p $out/{Applications,bin}
+      cp -R ${nameApp}.app $out/Applications/
+      makeWrapper $out/Applications/${nameApp}.app/Contents/MacOS/JavaApplicationStub $out/bin/${pname}
+      runHook postInstall
+    '';
+
+    meta = meta // { platforms = lib.platforms.darwin; };
+  };
+in
+if stdenv.isDarwin then darwin else linux
diff --git a/nixpkgs/pkgs/development/tools/java/sawjap/default.nix b/nixpkgs/pkgs/development/tools/java/sawjap/default.nix
new file mode 100644
index 000000000000..0686d4fb2ed4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/java/sawjap/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, ocamlPackages }:
+
+let inherit (ocamlPackages) ocaml findlib sawja; in
+
+stdenv.mkDerivation {
+
+  pname = "sawjap";
+
+  inherit (sawja) src version;
+
+  prePatch = "cd test";
+
+  strictDeps = true;
+
+  nativeBuildInputs = [ ocaml findlib ];
+  buildInputs = [ sawja ];
+
+  buildPhase = ''
+    runHook preBuild
+    mkdir -p $out/bin
+    ocamlfind opt -o $out/bin/sawjap -package sawja -linkpkg sawjap.ml
+    runHook postBuild
+  '';
+
+  dontInstall = true;
+
+  meta = sawja.meta // {
+    description = "Pretty-print .class files";
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/tools/java/visualvm/default.nix b/nixpkgs/pkgs/development/tools/java/visualvm/default.nix
new file mode 100644
index 000000000000..04b74bc52570
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/java/visualvm/default.nix
@@ -0,0 +1,47 @@
+{ stdenv, fetchzip, lib, makeWrapper, makeDesktopItem, jdk, gawk }:
+
+stdenv.mkDerivation rec {
+  version = "2.1.7";
+  pname = "visualvm";
+
+  src = fetchzip {
+    url = "https://github.com/visualvm/visualvm.src/releases/download/${version}/visualvm_${builtins.replaceStrings ["."] [""]  version}.zip";
+    sha256 = "sha256-k9DnbLfpCQimRueHquDSuBDhn/w8ZyUKZzZ5o35YCNA=";
+  };
+
+  desktopItem = makeDesktopItem {
+      name = "visualvm";
+      exec = "visualvm";
+      comment = "Java Troubleshooting Tool";
+      desktopName = "VisualVM";
+      genericName = "Java Troubleshooting Tool";
+      categories = [ "Development" ];
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    find . -type f -name "*.dll" -o -name "*.exe"  -delete;
+
+    substituteInPlace etc/visualvm.conf \
+      --replace "#visualvm_jdkhome=" "visualvm_jdkhome=" \
+      --replace "/path/to/jdk" "${jdk.home}" \
+
+    cp -r . $out
+  '';
+
+  meta = with lib; {
+    description = "A visual interface for viewing information about Java applications";
+    longDescription = ''
+      VisualVM is a visual tool integrating several commandline JDK
+      tools and lightweight profiling capabilities. Designed for both
+      production and development time use, it further enhances the
+      capability of monitoring and performance analysis for the Java
+      SE platform.
+    '';
+    homepage = "https://visualvm.github.io";
+    license = licenses.gpl2ClasspathPlus;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ michalrus moaxcp ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/jazzy/Gemfile b/nixpkgs/pkgs/development/tools/jazzy/Gemfile
new file mode 100644
index 000000000000..27c230a9829a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jazzy/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'jazzy'
diff --git a/nixpkgs/pkgs/development/tools/jazzy/Gemfile.lock b/nixpkgs/pkgs/development/tools/jazzy/Gemfile.lock
new file mode 100644
index 000000000000..9f6050001ccd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jazzy/Gemfile.lock
@@ -0,0 +1,109 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    CFPropertyList (3.0.2)
+    activesupport (4.2.11.3)
+      i18n (~> 0.7)
+      minitest (~> 5.1)
+      thread_safe (~> 0.3, >= 0.3.4)
+      tzinfo (~> 1.1)
+    algoliasearch (1.27.3)
+      httpclient (~> 2.8, >= 2.8.3)
+      json (>= 1.5.1)
+    atomos (0.1.3)
+    claide (1.0.3)
+    cocoapods (1.9.3)
+      activesupport (>= 4.0.2, < 5)
+      claide (>= 1.0.2, < 2.0)
+      cocoapods-core (= 1.9.3)
+      cocoapods-deintegrate (>= 1.0.3, < 2.0)
+      cocoapods-downloader (>= 1.2.2, < 2.0)
+      cocoapods-plugins (>= 1.0.0, < 2.0)
+      cocoapods-search (>= 1.0.0, < 2.0)
+      cocoapods-stats (>= 1.0.0, < 2.0)
+      cocoapods-trunk (>= 1.4.0, < 2.0)
+      cocoapods-try (>= 1.1.0, < 2.0)
+      colored2 (~> 3.1)
+      escape (~> 0.0.4)
+      fourflusher (>= 2.3.0, < 3.0)
+      gh_inspector (~> 1.0)
+      molinillo (~> 0.6.6)
+      nap (~> 1.0)
+      ruby-macho (~> 1.4)
+      xcodeproj (>= 1.14.0, < 2.0)
+    cocoapods-core (1.9.3)
+      activesupport (>= 4.0.2, < 6)
+      algoliasearch (~> 1.0)
+      concurrent-ruby (~> 1.1)
+      fuzzy_match (~> 2.0.4)
+      nap (~> 1.0)
+      netrc (~> 0.11)
+      typhoeus (~> 1.0)
+    cocoapods-deintegrate (1.0.4)
+    cocoapods-downloader (1.4.0)
+    cocoapods-plugins (1.0.0)
+      nap
+    cocoapods-search (1.0.0)
+    cocoapods-stats (1.1.0)
+    cocoapods-trunk (1.5.0)
+      nap (>= 0.8, < 2.0)
+      netrc (~> 0.11)
+    cocoapods-try (1.2.0)
+    colored2 (3.1.2)
+    concurrent-ruby (1.1.6)
+    escape (0.0.4)
+    ethon (0.12.0)
+      ffi (>= 1.3.0)
+    ffi (1.13.1)
+    fourflusher (2.3.1)
+    fuzzy_match (2.0.4)
+    gh_inspector (1.1.3)
+    httpclient (2.8.3)
+    i18n (0.9.5)
+      concurrent-ruby (~> 1.0)
+    jazzy (0.13.5)
+      cocoapods (~> 1.5)
+      mustache (~> 1.1)
+      open4
+      redcarpet (~> 3.4)
+      rouge (>= 2.0.6, < 4.0)
+      sassc (~> 2.1)
+      sqlite3 (~> 1.3)
+      xcinvoke (~> 0.3.0)
+    json (2.3.1)
+    liferaft (0.0.6)
+    minitest (5.14.1)
+    molinillo (0.6.6)
+    mustache (1.1.1)
+    nanaimo (0.3.0)
+    nap (1.1.0)
+    netrc (0.11.0)
+    open4 (1.3.4)
+    redcarpet (3.5.0)
+    rouge (3.21.0)
+    ruby-macho (1.4.0)
+    sassc (2.4.0)
+      ffi (~> 1.9)
+    sqlite3 (1.4.2)
+    thread_safe (0.3.6)
+    typhoeus (1.4.0)
+      ethon (>= 0.9.0)
+    tzinfo (1.2.7)
+      thread_safe (~> 0.1)
+    xcinvoke (0.3.0)
+      liferaft (~> 0.0.6)
+    xcodeproj (1.17.1)
+      CFPropertyList (>= 2.3.3, < 4.0)
+      atomos (~> 0.1.3)
+      claide (>= 1.0.2, < 2.0)
+      colored2 (~> 3.1)
+      nanaimo (~> 0.3.0)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  jazzy
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/development/tools/jazzy/default.nix b/nixpkgs/pkgs/development/tools/jazzy/default.nix
new file mode 100644
index 000000000000..a0561040704c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jazzy/default.nix
@@ -0,0 +1,21 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "jazzy";
+  gemdir = ./.;
+  exes = [ "jazzy" ];
+
+  passthru.updateScript = bundlerUpdateScript "jazzy";
+
+  meta = with lib; {
+    description     = "A command-line utility that generates documentation for Swift or Objective-C";
+    homepage        = "https://github.com/realm/jazzy";
+    license         = licenses.mit;
+    platforms       = platforms.darwin;
+    maintainers     = with maintainers; [
+      peterromfeldhk
+      lilyball
+      nicknovitski
+    ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/jazzy/gemset.nix b/nixpkgs/pkgs/development/tools/jazzy/gemset.nix
new file mode 100644
index 000000000000..6e2b873d4fd3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jazzy/gemset.nix
@@ -0,0 +1,434 @@
+{
+  activesupport = {
+    dependencies = ["i18n" "minitest" "thread_safe" "tzinfo"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0wp36wi3r3dscmcr0q6sbz13hr5h911c24ar7zrmmcy7p32ial2i";
+      type = "gem";
+    };
+    version = "4.2.11.3";
+  };
+  algoliasearch = {
+    dependencies = ["httpclient" "json"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1z94dnx0rljsfa3k24i1nc0vf1nfk3bbk89nqc6n1ax25h4fs5sw";
+      type = "gem";
+    };
+    version = "1.27.3";
+  };
+  atomos = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "17vq6sjyswr5jfzwdccw748kgph6bdw30bakwnn6p8sl4hpv4hvx";
+      type = "gem";
+    };
+    version = "0.1.3";
+  };
+  CFPropertyList = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1825ll26p28swjiw8n3x2pnh5ygsmg83spf82fnzcjn2p87vc5lf";
+      type = "gem";
+    };
+    version = "3.0.2";
+  };
+  claide = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0kasxsms24fgcdsq680nz99d5lazl9rmz1qkil2y5gbbssx89g0z";
+      type = "gem";
+    };
+    version = "1.0.3";
+  };
+  cocoapods = {
+    dependencies = ["activesupport" "claide" "cocoapods-core" "cocoapods-deintegrate" "cocoapods-downloader" "cocoapods-plugins" "cocoapods-search" "cocoapods-stats" "cocoapods-trunk" "cocoapods-try" "colored2" "escape" "fourflusher" "gh_inspector" "molinillo" "nap" "ruby-macho" "xcodeproj"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0zqj1878izp34cn7552q2djs3zd4a5ylyv0af3yxbz34z0qllk60";
+      type = "gem";
+    };
+    version = "1.9.3";
+  };
+  cocoapods-core = {
+    dependencies = ["activesupport" "algoliasearch" "concurrent-ruby" "fuzzy_match" "nap" "netrc" "typhoeus"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0sn1561sdhq2bh35pmi9nhq1adjcgdkhxybd9pxcjs75zmqzpz13";
+      type = "gem";
+    };
+    version = "1.9.3";
+  };
+  cocoapods-deintegrate = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bf524f1za92i6rlr4cr6jm3c4vfjszsdc9lsr6wk5125c76ipzn";
+      type = "gem";
+    };
+    version = "1.0.4";
+  };
+  cocoapods-downloader = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1j03hxvz3m82fwgx3jayw0y2iqm7zpacn88r6nfj2arkbjxmvjwz";
+      type = "gem";
+    };
+    version = "1.4.0";
+  };
+  cocoapods-plugins = {
+    dependencies = ["nap"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "16na82sfyc8801qs1n22nwq486s4j7yj6rj7fcp8cbxmj371fpbj";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  cocoapods-search = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "02wmy5rbjk29c65zn62bffxv30qs11slql23qx65snkm0vd93mn6";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  cocoapods-stats = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1xhdh5v94p6l612rwrk290nd2hdfx8lbaqfbkmj34md218kilqww";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  cocoapods-trunk = {
+    dependencies = ["nap" "netrc"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "12c6028bmdwrbqcb49mr5qj1p3vcijnjqbsbzywfx1isp44j9mv5";
+      type = "gem";
+    };
+    version = "1.5.0";
+  };
+  cocoapods-try = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1znyp625rql37ivb5rk9fk9564cmax8icxfr041ysivpdrn98nql";
+      type = "gem";
+    };
+    version = "1.2.0";
+  };
+  colored2 = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jlbqa9q4mvrm73aw9mxh23ygzbjiqwisl32d8szfb5fxvbjng5i";
+      type = "gem";
+    };
+    version = "3.1.2";
+  };
+  concurrent-ruby = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "094387x4yasb797mv07cs3g6f08y56virc2rjcpb1k79rzaj3nhl";
+      type = "gem";
+    };
+    version = "1.1.6";
+  };
+  escape = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0sa1xkfc9jvkwyw1jbz3jhkq0ms1zrvswi6mmfiwcisg5fp497z4";
+      type = "gem";
+    };
+    version = "0.0.4";
+  };
+  ethon = {
+    dependencies = ["ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0gggrgkcq839mamx7a8jbnp2h7x2ykfn34ixwskwb0lzx2ak17g9";
+      type = "gem";
+    };
+    version = "0.12.0";
+  };
+  ffi = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "12lpwaw82bb0rm9f52v1498bpba8aj2l2q359mkwbxsswhpga5af";
+      type = "gem";
+    };
+    version = "1.13.1";
+  };
+  fourflusher = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1afabh3g3gwj0ad53fs62waks815xcckf7pkci76l6vrghffcg8v";
+      type = "gem";
+    };
+    version = "2.3.1";
+  };
+  fuzzy_match = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19gw1ifsgfrv7xdi6n61658vffgm1867f4xdqfswb2b5h6alzpmm";
+      type = "gem";
+    };
+    version = "2.0.4";
+  };
+  gh_inspector = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0f8r9byajj3bi2c7c5sqrc7m0zrv3nblfcd4782lw5l73cbsgk04";
+      type = "gem";
+    };
+    version = "1.1.3";
+  };
+  httpclient = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19mxmvghp7ki3klsxwrlwr431li7hm1lczhhj8z4qihl2acy8l99";
+      type = "gem";
+    };
+    version = "2.8.3";
+  };
+  i18n = {
+    dependencies = ["concurrent-ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "038qvz7kd3cfxk8bvagqhakx68pfbnmghpdkx7573wbf0maqp9a3";
+      type = "gem";
+    };
+    version = "0.9.5";
+  };
+  jazzy = {
+    dependencies = ["cocoapods" "mustache" "open4" "redcarpet" "rouge" "sassc" "sqlite3" "xcinvoke"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ysx3zq069mi1w69z0dqck9ss9iv18w8a2f6j663vqq6kn1b69dm";
+      type = "gem";
+    };
+    version = "0.13.5";
+  };
+  json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "158fawfwmv2sq4whqqaksfykkiad2xxrrj0nmpnc6vnlzi1bp7iz";
+      type = "gem";
+    };
+    version = "2.3.1";
+  };
+  liferaft = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1kasbbx84gzsxx8w8bgr6xjg43h9bvzzaqg7si8jirnja8yc27k3";
+      type = "gem";
+    };
+    version = "0.0.6";
+  };
+  minitest = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09bz9nsznxgaf06cx3b5z71glgl0hdw469gqx3w7bqijgrb55p5g";
+      type = "gem";
+    };
+    version = "5.14.1";
+  };
+  molinillo = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1hh40z1adl4lw16dj4hxgabx4rr28mgqycih1y1d91bwww0jjdg6";
+      type = "gem";
+    };
+    version = "0.6.6";
+  };
+  mustache = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1l0p4wx15mi3wnamfv92ipkia4nsx8qi132c6g51jfdma3fiz2ch";
+      type = "gem";
+    };
+    version = "1.1.1";
+  };
+  nanaimo = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xi36h3f7nm8bc2k0b6svpda1lyank2gf872lxjbhw3h95hdrbma";
+      type = "gem";
+    };
+    version = "0.3.0";
+  };
+  nap = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xm5xssxk5s03wjarpipfm39qmgxsalb46v1prsis14x1xk935ll";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  netrc = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0gzfmcywp1da8nzfqsql2zqi648mfnx6qwkig3cv36n9m0yy676y";
+      type = "gem";
+    };
+    version = "0.11.0";
+  };
+  open4 = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1cgls3f9dlrpil846q0w7h66vsc33jqn84nql4gcqkk221rh7px1";
+      type = "gem";
+    };
+    version = "1.3.4";
+  };
+  redcarpet = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0skcyx1h8b5ms0rp2zm3ql6g322b8c1adnkwkqyv7z3kypb4bm7k";
+      type = "gem";
+    };
+    version = "3.5.0";
+  };
+  rouge = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1agrrmj88k9jkk36ra1ml2c1jffpp595pkxmcla74ac9ia09vn3s";
+      type = "gem";
+    };
+    version = "3.21.0";
+  };
+  ruby-macho = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lhdjn91jkifsy2hzq2hgcm0pp8pbik87m58zmw1ifh6hkp9adjb";
+      type = "gem";
+    };
+    version = "1.4.0";
+  };
+  sassc = {
+    dependencies = ["ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0gpqv48xhl8mb8qqhcifcp0pixn206a7imc07g48armklfqa4q2c";
+      type = "gem";
+    };
+    version = "2.4.0";
+  };
+  sqlite3 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lja01cp9xd5m6vmx99zwn4r7s97r1w5cb76gqd8xhbm1wxyzf78";
+      type = "gem";
+    };
+    version = "1.4.2";
+  };
+  thread_safe = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nmhcgq6cgz44srylra07bmaw99f5271l0dpsvl5f75m44l0gmwy";
+      type = "gem";
+    };
+    version = "0.3.6";
+  };
+  typhoeus = {
+    dependencies = ["ethon"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1m22yrkmbj81rzhlny81j427qdvz57yk5wbcf3km0nf3bl6qiygz";
+      type = "gem";
+    };
+    version = "1.4.0";
+  };
+  tzinfo = {
+    dependencies = ["thread_safe"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1i3jh086w1kbdj3k5l60lc3nwbanmzdf8yjj3mlrx9b2gjjxhi9r";
+      type = "gem";
+    };
+    version = "1.2.7";
+  };
+  xcinvoke = {
+    dependencies = ["liferaft"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "16pyq7wvx2c0fywrqxk3vg6psa3yjhbd7hw7hv2mjim6myjkdsb7";
+      type = "gem";
+    };
+    version = "0.3.0";
+  };
+  xcodeproj = {
+    dependencies = ["CFPropertyList" "atomos" "claide" "colored2" "nanaimo"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0mv5rsbgwq4vzri31w2f1474arrsr5j69rdhklrci6jnjps8dmx9";
+      type = "gem";
+    };
+    version = "1.17.1";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/jbake/default.nix b/nixpkgs/pkgs/development/tools/jbake/default.nix
new file mode 100644
index 000000000000..48737ed668f7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jbake/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchzip, makeWrapper, jre }:
+
+stdenv.mkDerivation rec {
+  version = "2.6.7";
+  pname = "jbake";
+
+  src = fetchzip {
+    url = "https://github.com/jbake-org/jbake/releases/download/v${version}/jbake-${version}-bin.zip";
+    sha256 = "sha256-kikGnFsParq8g0dzzYtMr2vIJD2ie8PeF6TG2G5K7KE=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ jre ];
+
+  postPatch = "patchShebangs .";
+
+  installPhase = ''
+    mkdir -p $out
+    cp -vr * $out
+    wrapProgram $out/bin/jbake --set JAVA_HOME "${jre}"
+  '';
+
+  checkPhase = ''
+    export JAVA_HOME=${jre}
+    bin/jbake | grep -q "${version}" || (echo "jbake did not return correct version"; exit 1)
+  '';
+  doCheck = true;
+
+  meta = with lib; {
+    description = "Java based, open source, static site/blog generator for developers & designers";
+    homepage = "https://jbake.org/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ moaxcp ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/jbang/default.nix b/nixpkgs/pkgs/development/tools/jbang/default.nix
new file mode 100644
index 000000000000..abd08c6c9aa0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jbang/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, lib, fetchzip, jdk, makeWrapper, coreutils, curl }:
+
+stdenv.mkDerivation rec {
+  version = "0.114.0";
+  pname = "jbang";
+
+  src = fetchzip {
+    url = "https://github.com/jbangdev/jbang/releases/download/v${version}/${pname}-${version}.tar";
+    sha256 = "sha256-pLikm68JPG42XE5LCU/PB5rTUywWoQxtmHXYBDPASNE=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    runHook preInstall
+    rm bin/jbang.{cmd,ps1}
+    cp -r . $out
+    wrapProgram $out/bin/jbang \
+      --set JAVA_HOME ${jdk} \
+      --set PATH ${lib.makeBinPath [ coreutils jdk curl ]}
+    runHook postInstall
+  '';
+
+  installCheckPhase = ''
+    $out/bin/jbang --version 2>&1 | grep -q "${version}"
+  '';
+
+  meta = with lib; {
+    description = "Run java as scripts anywhere";
+    longDescription = ''
+      jbang uses the java language to build scripts similar to groovy scripts. Dependencies are automatically
+      downloaded and the java code runs.
+    '';
+    homepage = "https://www.jbang.dev";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ moaxcp ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/jd-diff-patch/default.nix b/nixpkgs/pkgs/development/tools/jd-diff-patch/default.nix
new file mode 100644
index 000000000000..a322ad52ddf4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jd-diff-patch/default.nix
@@ -0,0 +1,26 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "jd-diff-patch";
+  version = "1.7.1";
+
+  src = fetchFromGitHub {
+    owner  = "josephburnett";
+    repo   = "jd";
+    rev    = "v${version}";
+    sha256 = "sha256-fi+vj1vHhgw2OPQqQ0827P6Axy/cio0UVFLeD/nhFvw=";
+  };
+
+  # not including web ui
+  excludedPackages = [ "gae" "pack" ];
+
+  vendorHash = null;
+
+  meta = with lib; {
+    description = "Commandline utility and Go library for diffing and patching JSON values";
+    homepage = "https://github.com/josephburnett/jd";
+    license = licenses.mit;
+    maintainers = with maintainers; [ bryanasdev000 blaggacao ];
+    mainProgram = "jd";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/jet/default.nix b/nixpkgs/pkgs/development/tools/jet/default.nix
new file mode 100644
index 000000000000..b71b7caee2e9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jet/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, buildGraalvmNativeImage
+, fetchurl
+, testers
+, jet
+}:
+
+buildGraalvmNativeImage rec {
+  pname = "jet";
+  version = "0.7.27";
+
+  src = fetchurl {
+    url = "https://github.com/borkdude/${pname}/releases/download/v${version}/${pname}-${version}-standalone.jar";
+    sha256 = "sha256-250/1DBNCXlU1b4jjLUUOXI+uSbOyPXtBN1JJRpdmFc=";
+  };
+
+  extraNativeImageBuildArgs = [
+    "-H:+ReportExceptionStackTraces"
+    "-H:Log=registerResource:"
+    "--no-fallback"
+    "--no-server"
+  ];
+
+  passthru.tests.version = testers.testVersion {
+    inherit version;
+    package = jet;
+    command = "jet --version";
+  };
+
+  meta = with lib; {
+    description = "CLI to transform between JSON, EDN, YAML and Transit, powered with a minimal query language";
+    homepage = "https://github.com/borkdude/jet";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.epl10;
+    maintainers = with maintainers; [ ericdallo ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/jf/default.nix b/nixpkgs/pkgs/development/tools/jf/default.nix
new file mode 100644
index 000000000000..f28a02bbb24c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jf/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, rustPlatform, fetchFromGitHub, installShellFiles }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "jf";
+  version = "0.6.2";
+
+  src = fetchFromGitHub {
+    owner = "sayanarijit";
+    repo = "jf";
+    rev = "v${version}";
+    hash = "sha256-A29OvGdG6PyeKMf5RarEOrfnNSmXhXri0AlECHWep6M=";
+  };
+
+  cargoHash = "sha256-jZmFUvg6R15oL13OYKkirsepoJwOKCeXdKMcqhPEhNU=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  # skip auto manpage update
+  buildNoDefaultFeatures = true;
+
+  postInstall = ''
+    installManPage assets/jf.1
+  '';
+
+  meta = with lib; {
+    description = "A small utility to safely format and print JSON objects in the commandline";
+    homepage = "https://github.com/sayanarijit/jf";
+    license = licenses.mit;
+    maintainers = [ maintainers.sayanarijit ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/jfmt/default.nix b/nixpkgs/pkgs/development/tools/jfmt/default.nix
new file mode 100644
index 000000000000..45a18edfffbe
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jfmt/default.nix
@@ -0,0 +1,23 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "jfmt";
+  version = "1.2.1";
+
+  src = fetchFromGitHub {
+    owner = "scruffystuffs";
+    repo = "${pname}.rs";
+    rev = "v${version}";
+    hash = "sha256-X3wk669G07BTPAT5xGbAfIu2Qk90aaJIi1CLmOnSG80=";
+  };
+
+  cargoHash = "sha256-u/v3P7iPdBJU/0wlSNBq/cjnM3XOnoVfUjrrmo4sTAA=";
+
+  meta = with lib; {
+    description = "CLI utility to format json files";
+    homepage = "https://github.com/scruffystuffs/jfmt.rs";
+    changelog = "https://github.com/scruffystuffs/jfmt.rs/blob/${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = [ maintainers.psibi ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/jid/default.nix b/nixpkgs/pkgs/development/tools/jid/default.nix
new file mode 100644
index 000000000000..c4c891778114
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jid/default.nix
@@ -0,0 +1,34 @@
+{ lib, buildGoModule, fetchFromGitHub, testers, jid }:
+
+buildGoModule rec {
+  pname = "jid";
+  version = "0.7.6";
+
+  src = fetchFromGitHub {
+    owner = "simeji";
+    repo = "jid";
+    rev = "v${version}";
+    hash = "sha256-fZzEbVNGsDNQ/FhII+meQvKeyrgxn3wtFW8VfNmJz5U=";
+  };
+
+  vendorHash = "sha256-Lq8ouTjPsGhqDwrCMpqkSU7FEGszYwAkwl92vAEZ68w=";
+
+  patches = [
+    # Run go mod tidy
+    ./go-mod.patch
+  ];
+
+  ldflags = [ "-s" "-w" ];
+
+  passthru.tests.version = testers.testVersion {
+    package = jid;
+    version = "v${version}";
+  };
+
+  meta = {
+    description = "A command-line tool to incrementally drill down JSON";
+    homepage = "https://github.com/simeji/jid";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ stesie ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/jid/go-mod.patch b/nixpkgs/pkgs/development/tools/jid/go-mod.patch
new file mode 100644
index 000000000000..beca79fff86a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jid/go-mod.patch
@@ -0,0 +1,79 @@
+diff --git a/go.mod b/go.mod
+index d26c293..3276f36 100644
+--- a/go.mod
++++ b/go.mod
+@@ -1,12 +1,24 @@
+ module github.com/simeji/jid
+ 
++go 1.19
++
+ require (
+ 	github.com/bitly/go-simplejson v0.5.0
+-	github.com/fatih/color v1.7.0 // indirect
+-	github.com/mattn/go-colorable v0.0.9 // indirect
+-	github.com/mattn/go-isatty v0.0.4 // indirect
+ 	github.com/mattn/go-runewidth v0.0.4
+ 	github.com/nsf/termbox-go v0.0.0-20181027232701-60ab7e3d12ed
+ 	github.com/nwidger/jsoncolor v0.0.0-20170215171346-75a6de4340e5
+ 	github.com/pkg/errors v0.8.0
++	github.com/stretchr/testify v1.8.2
++)
++
++require (
++	github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 // indirect
++	github.com/davecgh/go-spew v1.1.1 // indirect
++	github.com/fatih/color v1.7.0 // indirect
++	github.com/kr/pretty v0.3.1 // indirect
++	github.com/mattn/go-colorable v0.0.9 // indirect
++	github.com/mattn/go-isatty v0.0.4 // indirect
++	github.com/pmezard/go-difflib v1.0.0 // indirect
++	golang.org/x/sys v0.5.0 // indirect
++	gopkg.in/yaml.v3 v3.0.1 // indirect
+ )
+diff --git a/go.sum b/go.sum
+index 2fb379f..07d786d 100644
+--- a/go.sum
++++ b/go.sum
+@@ -1,7 +1,17 @@
+ github.com/bitly/go-simplejson v0.5.0 h1:6IH+V8/tVMab511d5bn4M7EwGXZf9Hj6i2xSwkNEM+Y=
+ github.com/bitly/go-simplejson v0.5.0/go.mod h1:cXHtHw4XUPsvGaxgjIAn8PhEWG9NfngEKAMDJEczWVA=
++github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 h1:DDGfHa7BWjL4YnC6+E63dPcxHo2sUxDIu8g3QgEJdRY=
++github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4=
++github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
++github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
++github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
++github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+ github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys=
+ github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
++github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
++github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
++github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
++github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
+ github.com/mattn/go-colorable v0.0.9 h1:UVL0vNpWh04HeJXV0KLcaT7r06gOH2l4OW6ddYRUIY4=
+ github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
+ github.com/mattn/go-isatty v0.0.4 h1:bnP0vzxcAdeI1zdubAl5PjU6zsERjGZb7raWodagDYs=
+@@ -12,5 +22,24 @@ github.com/nsf/termbox-go v0.0.0-20181027232701-60ab7e3d12ed h1:bAVGG6B+R5qpSylr
+ github.com/nsf/termbox-go v0.0.0-20181027232701-60ab7e3d12ed/go.mod h1:IuKpRQcYE1Tfu+oAQqaLisqDeXgjyyltCfsaoYN18NQ=
+ github.com/nwidger/jsoncolor v0.0.0-20170215171346-75a6de4340e5 h1:d+C3xJdxZT7wNlxqEwbXn3R355CwAhYBL9raVNfSnK0=
+ github.com/nwidger/jsoncolor v0.0.0-20170215171346-75a6de4340e5/go.mod h1:GYFm0zZgTNeoK1QxuIofRDasy2ibmaJZhZLzwsMXUF4=
++github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
+ github.com/pkg/errors v0.8.0 h1:WdK/asTD0HN+q6hsWO3/vpuAkAr+tw6aNJNDFFf0+qw=
+ github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
++github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
++github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
++github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8=
++github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs=
++github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
++github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
++github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
++github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
++github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
++github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8=
++github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
++golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU=
++golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
++gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
++gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
++gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
++gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
++gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
diff --git a/nixpkgs/pkgs/development/tools/jira-cli-go/default.nix b/nixpkgs/pkgs/development/tools/jira-cli-go/default.nix
new file mode 100644
index 000000000000..d031cd9394d7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jira-cli-go/default.nix
@@ -0,0 +1,54 @@
+{ lib, buildGoModule, fetchFromGitHub, less, more, installShellFiles, testers, jira-cli-go, nix-update-script }:
+
+buildGoModule rec {
+  pname = "jira-cli-go";
+  version = "1.5.1";
+
+  src = fetchFromGitHub {
+    owner = "ankitpokhrel";
+    repo = "jira-cli";
+    rev = "v${version}";
+    hash = "sha256-edytj9hB8lDwy3qGSyLudu5G4DSRGKhD0vDoWz5eUgs=";
+  };
+
+  vendorHash = "sha256-DAdzbANqr0fa4uO8k/yJFoirgbZiKOQhOH8u8d+ncao=";
+
+  ldflags = [
+    "-s" "-w"
+    "-X github.com/ankitpokhrel/jira-cli/internal/version.GitCommit=${src.rev}"
+    "-X github.com/ankitpokhrel/jira-cli/internal/version.SourceDateEpoch=0"
+    "-X github.com/ankitpokhrel/jira-cli/internal/version.Version=${version}"
+  ];
+
+  __darwinAllowLocalNetworking = true;
+
+  nativeCheckInputs = [ less more ]; # Tests expect a pager in $PATH
+
+  passthru = {
+    tests.version = testers.testVersion {
+      package = jira-cli-go;
+      command = "jira version";
+      inherit version;
+    };
+    updateScript = nix-update-script { };
+  };
+
+  nativeBuildInputs = [ installShellFiles ];
+  postInstall = ''
+    installShellCompletion --cmd jira \
+      --bash <($out/bin/jira completion bash) \
+      --zsh <($out/bin/jira completion zsh)
+
+    $out/bin/jira man --generate --output man
+    installManPage man/*
+  '';
+
+  meta = with lib; {
+    description = "Feature-rich interactive Jira command line";
+    homepage = "https://github.com/ankitpokhrel/jira-cli";
+    changelog = "https://github.com/ankitpokhrel/jira-cli/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ bryanasdev000 anthonyroussel ];
+    mainProgram = "jira";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/jless/default.nix b/nixpkgs/pkgs/development/tools/jless/default.nix
new file mode 100644
index 000000000000..6c6c70f89092
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jless/default.nix
@@ -0,0 +1,29 @@
+{ lib, fetchFromGitHub, rustPlatform, stdenv, python3, AppKit, libxcb }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "jless";
+  version = "0.9.0";
+
+  src = fetchFromGitHub {
+    owner = "PaulJuliusMartinez";
+    repo = "jless";
+    rev = "v${version}";
+    hash = "sha256-76oFPUWROX389U8DeMjle/GkdItu+0eYxZkt1c6l0V4=";
+  };
+
+  cargoHash = "sha256-sas94liAOSIirIJGdexdApXic2gWIBDT4uJFRM3qMw0=";
+
+  nativeBuildInputs = lib.optionals stdenv.isLinux [ python3 ];
+
+  buildInputs = [ ]
+    ++ lib.optionals stdenv.isDarwin [ AppKit ]
+    ++ lib.optionals stdenv.isLinux [ libxcb ];
+
+  meta = with lib; {
+    description = "A command-line pager for JSON data";
+    homepage = "https://jless.io";
+    changelog = "https://github.com/PaulJuliusMartinez/jless/blob/${src.rev}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda jfchevrette ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/jmespath/default.nix b/nixpkgs/pkgs/development/tools/jmespath/default.nix
new file mode 100644
index 000000000000..5ec6120f01cd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jmespath/default.nix
@@ -0,0 +1,29 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "jmespath";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "jmespath";
+    repo = "go-jmespath";
+    rev = "v${version}";
+    sha256 = "sha256-djA/7TCmAqCsht28b1itoiWd8Mtdsn/5uLxyT23K/qM=";
+  };
+
+  vendorHash = "sha256-Q12muprcKB7fCxemESb4sGPyYIdmgOt3YXVUln7oabw=";
+
+  excludedPackages = [
+    "./internal/testify"
+  ];
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "A JMESPath implementation in Go";
+    homepage = "https://github.com/jmespath/go-jmespath";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ cransom ];
+    mainProgram = "jpgo";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/jo/default.nix b/nixpkgs/pkgs/development/tools/jo/default.nix
new file mode 100644
index 000000000000..06c4fa6477ff
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jo/default.nix
@@ -0,0 +1,26 @@
+{lib, stdenv, fetchFromGitHub, autoreconfHook, pandoc, pkg-config}:
+
+stdenv.mkDerivation rec {
+  pname = "jo";
+  version = "1.9";
+
+  src = fetchFromGitHub {
+    owner  = "jpmens";
+    repo = "jo";
+    rev = version;
+    sha256 ="sha256-1q4/RpxfoAdtY3m8bBuj7bhD17V+4dYo3Vb8zMbI1YU=";
+  };
+
+  enableParallelBuilding = true;
+
+  nativeBuildInputs = [ autoreconfHook pandoc pkg-config ];
+
+  meta = with lib; {
+    description = "A small utility to create JSON objects";
+    homepage = "https://github.com/jpmens/jo";
+    mainProgram = "jo";
+    license = licenses.gpl2Plus;
+    maintainers = [maintainers.markus1189];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/jp/default.nix b/nixpkgs/pkgs/development/tools/jp/default.nix
new file mode 100644
index 000000000000..f606fd19d48f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jp/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "jp";
+  version = "0.2.1";
+
+  src = fetchFromGitHub {
+    rev = version;
+    owner = "jmespath";
+    repo = "jp";
+    hash = "sha256-a3WvLAdUZk+Y+L+opPDMBvdN5x5B6nAi/lL8JHJG/gY=";
+  };
+
+  vendorHash = "sha256-K6ZNtART7tcVBH5myV6vKrKWfnwK8yTa6/KK4QLyr00=";
+
+  meta = with lib; {
+    description = "A command line interface to the JMESPath expression language for JSON";
+    homepage = "https://github.com/jmespath/jp";
+    maintainers = with maintainers; [ cransom ];
+    license = licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/jpexs/default.nix b/nixpkgs/pkgs/development/tools/jpexs/default.nix
new file mode 100644
index 000000000000..c61246016a8b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jpexs/default.nix
@@ -0,0 +1,56 @@
+{ lib, stdenv, fetchzip, makeWrapper, makeDesktopItem, jdk8 }:
+
+stdenv.mkDerivation rec {
+  pname = "jpexs";
+  version = "18.4.1";
+
+  src = fetchzip {
+    url = "https://github.com/jindrapetrik/jpexs-decompiler/releases/download/version${version}/ffdec_${version}.zip";
+    sha256 = "sha256-aaEL3xJZkFw78zo3IyauWJM9kOo0rJTUSKmWsv9xQZ8=";
+    stripRoot = false;
+  };
+
+  dontBuild = true;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    mkdir -p $out/share/{ffdec,icons/hicolor/512x512/apps}
+
+    cp ffdec.jar $out/share/ffdec
+    cp -r lib $out/share/ffdec
+    cp icon.png $out/share/icons/hicolor/512x512/apps/ffdec.png
+    cp -r ${desktopItem}/share/applications $out/share
+
+    makeWrapper ${jdk8}/bin/java $out/bin/ffdec \
+      --add-flags "-jar $out/share/ffdec/ffdec.jar"
+  '';
+
+  desktopItem = makeDesktopItem rec {
+    name = "ffdec";
+    exec = name;
+    icon = name;
+    desktopName = "JPEXS Free Flash Decompiler";
+    genericName = "Flash Decompiler";
+    comment = meta.description;
+    categories = [ "Development" "Java" ];
+    startupWMClass = "com-jpexs-decompiler-flash-gui-Main";
+  };
+
+  meta = with lib; {
+    description = "Flash SWF decompiler and editor";
+    longDescription = ''
+      Open-source Flash SWF decompiler and editor. Extract resources,
+      convert SWF to FLA, edit ActionScript, replace images, sounds,
+      texts or fonts.
+    '';
+    homepage = "https://github.com/jindrapetrik/jpexs-decompiler";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.gpl3;
+    platforms = jdk8.meta.platforms;
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/jq/default.nix b/nixpkgs/pkgs/development/tools/jq/default.nix
new file mode 100644
index 000000000000..432fe6826bd7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jq/default.nix
@@ -0,0 +1,84 @@
+{ lib
+, stdenv
+, fetchurl
+, removeReferencesTo
+, autoreconfHook
+, bison
+, onigurumaSupport ? true
+, oniguruma
+}:
+
+stdenv.mkDerivation rec {
+  pname = "jq";
+  version = "1.7.1";
+
+  # Note: do not use fetchpatch or fetchFromGitHub to keep this package available in __bootPackages
+  src = fetchurl {
+    url = "https://github.com/jqlang/jq/releases/download/jq-${version}/jq-${version}.tar.gz";
+    hash = "sha256-R4ycoSn9LjRD/icxS0VeIR4NjGC8j/ffcDhz3u7lgMI=";
+  };
+
+  outputs = [ "bin" "doc" "man" "dev" "lib" "out" ];
+
+  # Upstream script that writes the version that's eventually compiled
+  # and printed in `jq --help` relies on a .git directory which our src
+  # doesn't keep.
+  preConfigure = ''
+    echo "#!/bin/sh" > scripts/version
+    echo "echo ${version}" >> scripts/version
+    patchShebangs scripts/version
+  '';
+
+  # paranoid mode: make sure we never use vendored version of oniguruma
+  # Note: it must be run after automake, or automake will complain
+  preBuild = ''
+    rm -r ./modules/oniguruma
+  '';
+
+  buildInputs = lib.optionals onigurumaSupport [ oniguruma ];
+  nativeBuildInputs = [ removeReferencesTo autoreconfHook bison ];
+
+  # Darwin requires _REENTRANT be defined to use functions like `lgamma_r`.
+  # Otherwise, configure will detect that they’re in libm, but the build will fail
+  # with clang 16+ due to calls to undeclared functions.
+  # This is fixed upstream and can be removed once jq is updated (to 1.7 or an unstable release).
+  env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.isDarwin (toString [
+    "-D_REENTRANT=1"
+    "-D_DARWIN_C_SOURCE=1"
+  ]);
+
+  configureFlags = [
+    "--bindir=\${bin}/bin"
+    "--sbindir=\${bin}/bin"
+    "--datadir=\${doc}/share"
+    "--mandir=\${man}/share/man"
+  ] ++ lib.optional (!onigurumaSupport) "--with-oniguruma=no"
+  # jq is linked to libjq:
+  ++ lib.optional (!stdenv.isDarwin) "LDFLAGS=-Wl,-rpath,\\\${libdir}";
+
+  # Break the dependency cycle: $dev refers to $bin via propagated-build-outputs, and
+  # $bin refers to $dev because of https://github.com/jqlang/jq/commit/583e4a27188a2db097dd043dd203b9c106bba100
+  postFixup = ''
+    remove-references-to -t "$dev" "$bin/bin/jq"
+  '';
+
+  doInstallCheck = true;
+  installCheckTarget = "check";
+
+  postInstallCheck = ''
+    $bin/bin/jq --help >/dev/null
+    $bin/bin/jq -r '.values[1]' <<< '{"values":["hello","world"]}' | grep '^world$' > /dev/null
+  '';
+
+  passthru = { inherit onigurumaSupport; };
+
+  meta = with lib; {
+    description = "A lightweight and flexible command-line JSON processor";
+    homepage = "https://jqlang.github.io/jq/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ raskin artturin ncfavier ];
+    platforms = platforms.unix;
+    downloadPage = "https://jqlang.github.io/jq/download/";
+    mainProgram = "jq";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/jql/default.nix b/nixpkgs/pkgs/development/tools/jql/default.nix
new file mode 100644
index 000000000000..98ff0d6bb5be
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jql/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "jql";
+  version = "7.1.3";
+
+  src = fetchFromGitHub {
+    owner = "yamafaktory";
+    repo = pname;
+    rev = "jql-v${version}";
+    hash = "sha256-UiIIPA4JREWniNOcqMW2jnfaEDpkT1jbdv3whr49Gqg=";
+  };
+
+  cargoHash = "sha256-9ApucHYFHBritAdylzQuUDa47yG8dAeIQwPezXP3BXY=";
+
+  meta = with lib; {
+    description = "A JSON Query Language CLI tool built with Rust";
+    homepage = "https://github.com/yamafaktory/jql";
+    changelog = "https://github.com/yamafaktory/jql/releases/tag/${src.rev}";
+    license = with licenses; [ asl20 mit ];
+    maintainers = with maintainers; [ akshgpt7 figsoda ];
+    mainProgram = "jql";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/jqp/default.nix b/nixpkgs/pkgs/development/tools/jqp/default.nix
new file mode 100644
index 000000000000..58902f43d31b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jqp/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "jqp";
+  version = "0.5.0";
+
+  src = fetchFromGitHub {
+    owner = "noahgorstein";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-z2EKtSM+/wWGgwsHKDcxtc/M6UZ01AiTZaaCYCWjU7M=";
+  };
+
+  vendorHash = "sha256-7UiQjTgcwGOTEJEaWywEdZvpkM/MoXU3d6k8oVmUiW8=";
+
+  subPackages = [ "." ];
+
+  meta = with lib; {
+    description = "A TUI playground to experiment with jq";
+    homepage = "https://github.com/noahgorstein/jqp";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dit7ya ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/jsduck/Gemfile b/nixpkgs/pkgs/development/tools/jsduck/Gemfile
new file mode 100644
index 000000000000..483fc40ff799
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jsduck/Gemfile
@@ -0,0 +1,3 @@
+source "https://rubygems.org"
+
+gem "jsduck"
diff --git a/nixpkgs/pkgs/development/tools/jsduck/Gemfile.lock b/nixpkgs/pkgs/development/tools/jsduck/Gemfile.lock
new file mode 100644
index 000000000000..d8331181652b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jsduck/Gemfile.lock
@@ -0,0 +1,23 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    dimensions (1.2.0)
+    jsduck (5.3.4)
+      dimensions (~> 1.2.0)
+      json (~> 1.8.0)
+      parallel (~> 0.7.1)
+      rdiscount (~> 2.1.6)
+      rkelly-remix (~> 0.0.4)
+    json (1.8.6)
+    parallel (0.7.1)
+    rdiscount (2.1.8)
+    rkelly-remix (0.0.7)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  jsduck
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/development/tools/jsduck/default.nix b/nixpkgs/pkgs/development/tools/jsduck/default.nix
new file mode 100644
index 000000000000..5c11b87f76ff
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jsduck/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, lib, bundlerEnv, makeWrapper, bundlerUpdateScript }:
+
+stdenv.mkDerivation rec {
+  pname = "jsduck";
+  version = (import ./gemset.nix).jsduck.version;
+
+  env = bundlerEnv {
+    name = pname;
+    gemfile = ./Gemfile;
+    lockfile = ./Gemfile.lock;
+    gemset = ./gemset.nix;
+  };
+
+  dontUnpack = true;
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ env ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    makeWrapper ${env}/bin/jsduck $out/bin/jsduck
+  '';
+
+  passthru.updateScript = bundlerUpdateScript "jsduck";
+
+  meta = with lib; {
+    description = "Simple JavaScript Duckumentation generator";
+    homepage    = "https://github.com/senchalabs/jsduck";
+    license     = with licenses; gpl3;
+    maintainers = with maintainers; [ periklis nicknovitski ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/jsduck/gemset.nix b/nixpkgs/pkgs/development/tools/jsduck/gemset.nix
new file mode 100644
index 000000000000..493cc42f4f4e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jsduck/gemset.nix
@@ -0,0 +1,51 @@
+{
+  dimensions = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pqb7yzjcpbgbyi196ifqbd1wy570cn12bkzcvpcha4xilhajja0";
+      type = "gem";
+    };
+    version = "1.2.0";
+  };
+  jsduck = {
+    dependencies = ["dimensions" "json" "parallel" "rdiscount" "rkelly-remix"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0hac7g9g6gg10bigbm8dskwwbv1dfch8ca353gh2bkwf244qq2xr";
+      type = "gem";
+    };
+    version = "5.3.4";
+  };
+  json = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qmj7fypgb9vag723w1a49qihxrcf5shzars106ynw2zk352gbv5";
+      type = "gem";
+    };
+    version = "1.8.6";
+  };
+  parallel = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1kzz6ydg7r23ks2b7zbpx4vz3h186n19vhgnjcwi7xwd6h2f1fsq";
+      type = "gem";
+    };
+    version = "0.7.1";
+  };
+  rdiscount = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0vcyy90r6wfg0b0y5wqp3d25bdyqjbwjhkm1xy9jkz9a7j72n70v";
+      type = "gem";
+    };
+    version = "2.1.8";
+  };
+  rkelly-remix = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1g7hjl9nx7f953y7lncmfgp0xgxfxvgfm367q6da9niik6rp1y3j";
+      type = "gem";
+    };
+    version = "0.0.7";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/json2hcl/default.nix b/nixpkgs/pkgs/development/tools/json2hcl/default.nix
new file mode 100644
index 000000000000..47ee2cfe4bf1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/json2hcl/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "json2hcl";
+  version = "0.1.1";
+
+  src = fetchFromGitHub {
+    owner = "kvz";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-0ku8sON4fzWAirqY+dhYAks2LSyC7OH/LKI0kb+QhpM=";
+  };
+
+  vendorHash = "sha256-GxYuFak+5CJyHgC1/RsS0ub84bgmgL+bI4YKFTb+vIY=";
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "Convert JSON to HCL, and vice versa";
+    homepage = "https://github.com/kvz/json2hcl";
+    license = licenses.mit;
+    maintainers = with maintainers; [ matthewbauer ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/json2tsv/default.nix b/nixpkgs/pkgs/development/tools/json2tsv/default.nix
new file mode 100644
index 000000000000..49d0812eba44
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/json2tsv/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "json2tsv";
+  version = "1.1";
+
+  src = fetchurl {
+    url = "https://codemadness.org/releases/json2tsv/json2tsv-${version}.tar.gz";
+    hash = "sha256-7r5+YoZVivCqDbfFUqTB/x41DrZi7GZRVcJhGZCpw0o=";
+  };
+
+  postPatch = ''
+    substituteInPlace jaq --replace "json2tsv" "$out/bin/json2tsv"
+  '';
+
+  makeFlags = [ "RANLIB:=$(RANLIB)" ];
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "JSON to TSV converter";
+    homepage = "https://codemadness.org/json2tsv.html";
+    license = licenses.isc;
+    maintainers = with maintainers; [ sikmir ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/jsonnet-bundler/default.nix b/nixpkgs/pkgs/development/tools/jsonnet-bundler/default.nix
new file mode 100644
index 000000000000..256d90fd7652
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jsonnet-bundler/default.nix
@@ -0,0 +1,25 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+buildGoModule rec {
+  pname = "jsonnet-bundler";
+  version = "0.5.1";
+
+  src = fetchFromGitHub {
+    owner = "jsonnet-bundler";
+    repo = "jsonnet-bundler";
+    rev = "v${version}";
+    sha256 = "sha256-vjb5wEiJw48s7FUarpA94ZauFC7iEgRDAkRTwRIZ8pA=";
+  };
+
+  vendorHash = null;
+
+  ldflags = [ "-s" "-w" "-X main.Version=${version}" ];
+
+  meta = with lib; {
+    description = "A jsonnet package manager";
+    homepage = "https://github.com/jsonnet-bundler/jsonnet-bundler";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ preisschild ];
+    mainProgram = "jb";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/jtc/default.nix b/nixpkgs/pkgs/development/tools/jtc/default.nix
new file mode 100644
index 000000000000..c8a13c07cb60
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jtc/default.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch }:
+
+stdenv.mkDerivation rec {
+  pname = "jtc";
+  version = "1.76";
+
+  src = fetchFromGitHub {
+    owner = "ldn-softdev";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-VATRlOOV4wBInLOm9J0Dp2vhtL5mb0Yxdl/ya0JiqEU=";
+  };
+
+  patches = [
+    # Fix building with Clang. Removing with next release.
+    (fetchpatch {
+      url = "https://github.com/ldn-softdev/jtc/commit/92a5116e5524c0b6d2f539db7b5cc9fdd7c5b8ab.patch";
+      sha256 = "sha256-AAvDH0XsT8/CAguG611/odg0m1HR+veC0jbAw6KLHLM=";
+    })
+  ];
+
+  buildPhase = ''
+    runHook preBuild
+
+    $CXX -o jtc -Wall -std=gnu++14 -Ofast -pthread -lpthread jtc.cpp
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 -t $out/bin jtc
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "JSON manipulation and transformation tool";
+    homepage = "https://github.com/ldn-softdev/jtc";
+    license = licenses.mit;
+    maintainers = [ maintainers.marsam ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/just/default.nix b/nixpkgs/pkgs/development/tools/just/default.nix
new file mode 100644
index 000000000000..991da4278499
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/just/default.nix
@@ -0,0 +1,86 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, coreutils
+, installShellFiles
+, libiconv
+, mdbook
+, nix-update-script
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "just";
+  version = "1.24.0";
+  outputs = [ "out" "man" "doc" ];
+
+  src = fetchFromGitHub {
+    owner = "casey";
+    repo = pname;
+    rev = "refs/tags/${version}";
+    hash = "sha256-S5L8efxYpsZn51JvNVeBmA1+KtzpdYcHj7OVaG4Sckc=";
+  };
+
+  cargoHash = "sha256-wlCG3evv5VxtlfznCZSTtorZYLMiH3Wr+t6ZMq+VqFk=";
+
+  nativeBuildInputs = [ installShellFiles mdbook ];
+  buildInputs = lib.optionals stdenv.isDarwin [ libiconv ];
+
+  preCheck = ''
+    # USER must not be empty
+    export USER=just-user
+    export USERNAME=just-user
+    export JUST_CHOOSER="${coreutils}/bin/cat"
+
+    # Prevent string.rs from being changed
+    cp tests/string.rs $TMPDIR/string.rs
+
+    sed -i src/justfile.rs \
+        -i tests/*.rs \
+        -e "s@/bin/echo@${coreutils}/bin/echo@g" \
+        -e "s@/usr/bin/env@${coreutils}/bin/env@g"
+
+    # Return unchanged string.rs
+    cp $TMPDIR/string.rs tests/string.rs
+  '';
+
+  postBuild = ''
+    cargo run --package generate-book
+
+    # No linkcheck in sandbox
+    echo 'optional = true' >> book/en/book.toml
+    mdbook build book/en
+    find .
+  '';
+
+  checkFlags = [
+    "--skip=edit" # trying to run "vim" fails as there's no /usr/bin/env or which in the sandbox to find vim and the dependency is not easily patched
+    "--skip=run_shebang" # test case very rarely fails with "Text file busy"
+    "--skip=invoke_error_function" # wants JUST_CHOOSER to be fzf
+    "--skip=choose::default" # symlinks cat->fzf which fails as coreutils doesn't understand name
+  ];
+
+  postInstall = ''
+    mkdir -p $doc/share/doc/$name
+    mv ./book/en/build/html $doc/share/doc/$name
+    installManPage man/just.1
+
+    installShellCompletion --cmd just \
+      --bash completions/just.bash \
+      --fish completions/just.fish \
+      --zsh completions/just.zsh
+  '';
+
+  setupHook = ./setup-hook.sh;
+
+  passthru.updateScript = nix-update-script { };
+
+  meta = with lib; {
+    homepage = "https://github.com/casey/just";
+    changelog = "https://github.com/casey/just/blob/${version}/CHANGELOG.md";
+    description = "A handy way to save and run project-specific commands";
+    license = licenses.cc0;
+    maintainers = with maintainers; [ xrelkd jk adamcstephens ];
+    mainProgram = "just";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/just/setup-hook.sh b/nixpkgs/pkgs/development/tools/just/setup-hook.sh
new file mode 100644
index 000000000000..0ffcfc187ebf
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/just/setup-hook.sh
@@ -0,0 +1,58 @@
+justBuildPhase() {
+    runHook preBuild
+
+    local flagsArray=($justFlags "${justFlagsArray[@]}")
+
+    echoCmd 'build flags' "${flagsArray[@]}"
+    just "${flagsArray[@]}"
+
+    runHook postBuild
+}
+
+justCheckPhase() {
+    runHook preCheck
+
+    if [ -z "${checkTarget:-}" ]; then
+        if just -n test >/dev/null 2>&1; then
+            checkTarget=test
+        fi
+    fi
+
+    if [ -z "${checkTarget:-}" ]; then
+        echo "no test target found in just, doing nothing"
+    else
+        local flagsArray=(
+            $justFlags "${justFlagsArray[@]}"
+            $checkTarget
+        )
+
+        echoCmd 'check flags' "${flagsArray[@]}"
+        just "${flagsArray[@]}"
+    fi
+
+    runHook postCheck
+}
+
+justInstallPhase() {
+    runHook preInstall
+
+    # shellcheck disable=SC2086
+    local flagsArray=($justFlags "${justFlagsArray[@]}" ${installTargets:-install})
+
+    echoCmd 'install flags' "${flagsArray[@]}"
+    just "${flagsArray[@]}"
+
+    runHook postInstall
+}
+
+if [ -z "${dontUseJustBuild-}" -a -z "${buildPhase-}" ]; then
+    buildPhase=justBuildPhase
+fi
+
+if [ -z "${dontUseJustCheck-}" -a -z "${checkPhase-}" ]; then
+    checkPhase=justCheckPhase
+fi
+
+if [ -z "${dontUseJustInstall-}" -a -z "${installPhase-}" ]; then
+    installPhase=justInstallPhase
+fi
diff --git a/nixpkgs/pkgs/development/tools/k6/default.nix b/nixpkgs/pkgs/development/tools/k6/default.nix
new file mode 100644
index 000000000000..c5c8f85e9126
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/k6/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, buildGoModule, fetchFromGitHub, installShellFiles }:
+
+buildGoModule rec {
+  pname = "k6";
+  version = "0.49.0";
+
+  src = fetchFromGitHub {
+    owner = "grafana";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-zlsHEAGsey+qe0s7sle9Kt/V0hTp6uzelJmRlATznUY=";
+  };
+
+  subPackages = [ "./" ];
+
+  vendorHash = null;
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/k6 version | grep ${version} > /dev/null
+  '';
+
+  postInstall = lib.optionalString (stdenv.hostPlatform == stdenv.buildPlatform) ''
+    installShellCompletion --cmd k6 \
+      --bash <($out/bin/k6 completion bash) \
+      --fish <($out/bin/k6 completion fish) \
+      --zsh <($out/bin/k6 completion zsh)
+  '';
+
+  meta = with lib; {
+    description = "A modern load testing tool, using Go and JavaScript";
+    homepage = "https://k6.io/";
+    changelog = "https://github.com/grafana/k6/releases/tag/v${version}";
+    license = licenses.agpl3Plus;
+    maintainers = with maintainers; [ offline bryanasdev000 kashw2 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/kaf/default.nix b/nixpkgs/pkgs/development/tools/kaf/default.nix
new file mode 100644
index 000000000000..7ca0f6d7a26d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/kaf/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "kaf";
+  version = "0.2.7";
+
+  src = fetchFromGitHub {
+    owner = "birdayz";
+    repo = "kaf";
+    rev = "v${version}";
+    hash = "sha256-H21l8TXCl5UH7h0WXnJqFv/rozIzxBKJJcNzfqIATsQ=";
+  };
+
+  vendorHash = "sha256-//16AAQ2NK3yf9BKWECz5Mdy0lYuft9Em5cyM8osans=";
+
+  # Many tests require a running Kafka instance
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Modern CLI for Apache Kafka, written in Go";
+    homepage = "https://github.com/birdayz/kaf";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ zarelit ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/kafka-delta-ingest/Cargo.lock b/nixpkgs/pkgs/development/tools/kafka-delta-ingest/Cargo.lock
new file mode 100644
index 000000000000..53bbe80ada05
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/kafka-delta-ingest/Cargo.lock
@@ -0,0 +1,2898 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "addr2line"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3e61f2b7f93d2c7d2b08263acaa4a363b3e276806c68af6134c44f523bf1aacd"
+dependencies = [
+ "gimli",
+]
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "aho-corasick"
+version = "0.7.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "alloc-no-stdlib"
+version = "2.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35ef4730490ad1c4eae5c4325b2a95f521d023e5c885853ff7aca0a6a1631db3"
+
+[[package]]
+name = "alloc-stdlib"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "697ed7edc0f1711de49ce108c541623a0af97c6c60b2f6e2b65229847ac843c2"
+dependencies = [
+ "alloc-no-stdlib",
+]
+
+[[package]]
+name = "ansi_term"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.43"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28ae2b3dec75a406790005a200b1bd89785afc02517a00ca99ecfe093ee9e6cf"
+
+[[package]]
+name = "arrow"
+version = "6.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46cb449d481a6b13ea4e82e9fc662ea3e29cb5dc0a310fc42e27592cef3cb611"
+dependencies = [
+ "bitflags",
+ "chrono",
+ "csv",
+ "flatbuffers",
+ "hex",
+ "indexmap",
+ "lazy_static",
+ "lexical-core",
+ "multiversion",
+ "num 0.4.0",
+ "rand",
+ "regex",
+ "serde",
+ "serde_derive",
+ "serde_json",
+]
+
+[[package]]
+name = "async-trait"
+version = "0.1.51"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44318e776df68115a881de9a8fd1b9e53368d7a4a5ce4cc48517da3393233a5e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "atomic_refcell"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "681b971236e0f76b20fcafca0236b8718c9186ee778d67cd78bd5f28fd85427f"
+
+[[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.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a"
+
+[[package]]
+name = "backtrace"
+version = "0.3.61"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7a905d892734eea339e896738c14b9afce22b5318f64b951e70bf3844419b01"
+dependencies = [
+ "addr2line",
+ "cc",
+ "cfg-if 1.0.0",
+ "libc",
+ "miniz_oxide",
+ "object",
+ "rustc-demangle",
+]
+
+[[package]]
+name = "base-x"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4521f3e3d031370679b3b140beb36dfe4801b09ac77e30c61941f97df3ef28b"
+
+[[package]]
+name = "base64"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd"
+
+[[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.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "brotli"
+version = "3.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "71cb90ade945043d3d53597b2fc359bb063db8ade2bcffe7997351d0756e9d50"
+dependencies = [
+ "alloc-no-stdlib",
+ "alloc-stdlib",
+ "brotli-decompressor",
+]
+
+[[package]]
+name = "brotli-decompressor"
+version = "2.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59ad2d4653bf5ca36ae797b1f4bb4dbddb60ce49ca4aed8a2ce4829f60425b80"
+dependencies = [
+ "alloc-no-stdlib",
+ "alloc-stdlib",
+]
+
+[[package]]
+name = "bstr"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90682c8d613ad3373e66de8c6411e0ae2ab2571e879d2efbf73558cc66f21279"
+dependencies = [
+ "lazy_static",
+ "memchr",
+ "regex-automata",
+ "serde",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c59e7af012c713f529e7a3ee57ce9b31ddd858d4b512923602f74608b009631"
+
+[[package]]
+name = "byteorder"
+version = "1.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
+
+[[package]]
+name = "bytes"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8"
+
+[[package]]
+name = "cc"
+version = "1.0.70"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d26a6ce4b6a484fa3edb70f7efa6fc430fd2b87285fe8b84304fd0936faa0dc0"
+dependencies = [
+ "jobserver",
+]
+
+[[package]]
+name = "cfg-if"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
+
+[[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",
+ "serde",
+ "time 0.1.43",
+ "winapi",
+]
+
+[[package]]
+name = "clap"
+version = "2.33.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002"
+dependencies = [
+ "ansi_term",
+ "atty",
+ "bitflags",
+ "strsim 0.8.0",
+ "textwrap 0.11.0",
+ "unicode-width",
+ "vec_map",
+]
+
+[[package]]
+name = "clap"
+version = "3.0.0-beta.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fcd70aa5597dbc42f7217a543f9ef2768b2ef823ba29036072d30e1d88e98406"
+dependencies = [
+ "atty",
+ "bitflags",
+ "clap_derive",
+ "indexmap",
+ "lazy_static",
+ "os_str_bytes",
+ "strsim 0.10.0",
+ "termcolor",
+ "textwrap 0.14.2",
+ "vec_map",
+]
+
+[[package]]
+name = "clap_derive"
+version = "3.0.0-beta.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b5bb0d655624a0b8770d1c178fb8ffcb1f91cc722cb08f451e3dc72465421ac"
+dependencies = [
+ "heck",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "cloudabi"
+version = "0.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "const_fn"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f92cfa0fd5690b3cf8c1ef2cabbd9b7ef22fa53cf5e1f92b05103f6d5d1cf6e7"
+
+[[package]]
+name = "core-foundation"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0a89e2ae426ea83155dccf10c0fa6b1463ef6d5fcb44cee0b224a408fa640a62"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea221b5284a47e40033bf9b66f35f984ec0ea2931eb03505246cd27a963f981b"
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95059428f66df56b63431fdb4e1947ed2190586af5c5a8a8b71122bdf5a7f469"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crc32fast"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81156fece84ab6a9f2afdb109ce3ae577e42b1228441eded99bd77f627953b1a"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b153fe7cbef478c567df0f972e02e6d736db11affe43dfc9c56a9374d1adfb87"
+dependencies = [
+ "crossbeam-utils",
+ "maybe-uninit",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8"
+dependencies = [
+ "autocfg",
+ "cfg-if 0.1.10",
+ "lazy_static",
+]
+
+[[package]]
+name = "crypto-mac"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bff07008ec701e8028e2ceb8f83f0e4274ee62bd2dbdc4fefff2e9a91824081a"
+dependencies = [
+ "generic-array",
+ "subtle",
+]
+
+[[package]]
+name = "csv"
+version = "1.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "22813a6dc45b335f9bade10bf7271dc477e81113e89eb251a0bc2a8a81c536e1"
+dependencies = [
+ "bstr",
+ "csv-core",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "csv-core"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b2466559f260f48ad25fe6317b3c8dac77b5bdb5763ac7d9d6103530663bc90"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "debugid"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f91cf5a8c2f2097e2a32627123508635d47ce10563d999ec1a95addf08b502ba"
+dependencies = [
+ "serde",
+ "uuid",
+]
+
+[[package]]
+name = "deltalake"
+version = "0.4.1"
+source = "git+https://github.com/delta-io/delta-rs.git?rev=cba4e3d316c56c65dc1cb660dc7e6d380ddd3a6b#cba4e3d316c56c65dc1cb660dc7e6d380ddd3a6b"
+dependencies = [
+ "anyhow",
+ "arrow",
+ "async-trait",
+ "bytes",
+ "cfg-if 1.0.0",
+ "chrono",
+ "clap 3.0.0-beta.4",
+ "env_logger",
+ "errno",
+ "futures",
+ "glibc_version",
+ "lazy_static",
+ "libc",
+ "log",
+ "maplit",
+ "parquet",
+ "parquet-format",
+ "percent-encoding",
+ "regex",
+ "rusoto_core",
+ "rusoto_credential",
+ "rusoto_dynamodb",
+ "rusoto_s3",
+ "rusoto_sts",
+ "serde",
+ "serde_json",
+ "thiserror",
+ "tokio",
+ "tokio-stream",
+ "uuid",
+]
+
+[[package]]
+name = "derivative"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "deunicode"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "850878694b7933ca4c9569d30a34b55031b9b139ee1fc7b94a527c4ef960d690"
+
+[[package]]
+name = "digest"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "dipstick"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "596c026d3f177d5ef10f5ac01f9a9a2db64aa5c79730267d5a727b6d22db0566"
+dependencies = [
+ "atomic_refcell",
+ "crossbeam-channel",
+ "lazy_static",
+ "log",
+ "minreq",
+ "num 0.2.1",
+ "parking_lot 0.10.2",
+ "time 0.1.43",
+]
+
+[[package]]
+name = "dirs-next"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1"
+dependencies = [
+ "cfg-if 1.0.0",
+ "dirs-sys-next",
+]
+
+[[package]]
+name = "dirs-sys-next"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d"
+dependencies = [
+ "libc",
+ "redox_users",
+ "winapi",
+]
+
+[[package]]
+name = "discard"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "212d0f5754cb6769937f4501cc0e67f4f4483c8d2c3e1e922ee9edbe4ab4c7c0"
+
+[[package]]
+name = "dtoa"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56899898ce76aaf4a0f24d914c97ea6ed976d42fec6ad33fcbb0a1103e07b2b0"
+
+[[package]]
+name = "encoding_rs"
+version = "0.8.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80df024fbc5ac80f87dfef0d9f5209a252f2a497f7f42944cff24d8253cac065"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "env_logger"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b2cf0344971ee6c64c31be0d530793fba457d322dfec2810c453d0ef228f9c3"
+dependencies = [
+ "atty",
+ "humantime",
+ "log",
+ "regex",
+ "termcolor",
+]
+
+[[package]]
+name = "errno"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa68f2fb9cae9d37c9b2b3584aba698a2e97f72d7aef7b9f7aa71d8b54ce46fe"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "errno-dragonfly"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14ca354e36190500e1e1fb267c647932382b54053c50b14970856c0b00a35067"
+dependencies = [
+ "gcc",
+ "libc",
+]
+
+[[package]]
+name = "flatbuffers"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef4c5738bcd7fad10315029c50026f83c9da5e4a21f8ed66826f43e0e2bde5f6"
+dependencies = [
+ "bitflags",
+ "smallvec",
+ "thiserror",
+]
+
+[[package]]
+name = "flate2"
+version = "1.0.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80edafed416a46fb378521624fab1cfa2eb514784fd8921adbe8a8d8321da811"
+dependencies = [
+ "cfg-if 1.0.0",
+ "crc32fast",
+ "libc",
+ "miniz_oxide",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "foreign-types"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+dependencies = [
+ "foreign-types-shared",
+]
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+
+[[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 = "futures"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a12aa0eb539080d55c3f2d45a67c3b58b6b0773c1a3ca2dfec66d58c97fd66ca"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-io",
+ "futures-sink",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5da6ba8c3bb3c165d3c7319fc1cc8304facf1fb8db99c5de877183c08a273888"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88d1c26957f23603395cd326b0ffe64124b818f4449552f960d815cfba83a53d"
+
+[[package]]
+name = "futures-executor"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "45025be030969d763025784f7f355043dc6bc74093e4ecc5000ca4dc50d8745c"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-io"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "522de2a0fe3e380f1bc577ba0474108faf3f6b18321dbf60b3b9c39a75073377"
+
+[[package]]
+name = "futures-macro"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "18e4a4b95cea4b4ccbcf1c5675ca7c4ee4e9e75eb79944d07defde18068f79bb"
+dependencies = [
+ "autocfg",
+ "proc-macro-hack",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "36ea153c13024fe480590b3e3d4cad89a0cfacecc24577b68f86c6ced9c2bc11"
+
+[[package]]
+name = "futures-task"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d3d00f4eddb73e498a54394f228cd55853bdf059259e8e7bc6e69d408892e99"
+
+[[package]]
+name = "futures-util"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "36568465210a3a6ee45e1f165136d68671471a501e632e9a98d96872222b5481"
+dependencies = [
+ "autocfg",
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-macro",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "pin-utils",
+ "proc-macro-hack",
+ "proc-macro-nested",
+ "slab",
+]
+
+[[package]]
+name = "gcc"
+version = "0.3.55"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f5f3913fa0bfe7ee1fd8248b6b9f42a5af4b9d65ec2dd2c3c26132b950ecfc2"
+
+[[package]]
+name = "generic-array"
+version = "0.14.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "501466ecc8a30d1d3b7fc9229b122b2ce8ed6e9d9223f1138d4babb253e51817"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "gimli"
+version = "0.25.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0a01e0497841a3b2db4f8afa483cce65f7e96a3498bd6c541734792aeac8fe7"
+
+[[package]]
+name = "glibc_version"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "803ff7635f1ab4e2c064b68a0c60da917d3d18dc8d086130f689d62ce4f1c33e"
+dependencies = [
+ "regex",
+]
+
+[[package]]
+name = "h2"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c06815895acec637cd6ed6e9662c935b866d20a106f8361892893a7d9234964"
+dependencies = [
+ "bytes",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "http",
+ "indexmap",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tracing",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e"
+
+[[package]]
+name = "heck"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
+dependencies = [
+ "unicode-segmentation",
+]
+
+[[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"
+
+[[package]]
+name = "hmac"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1441c6b1e930e2817404b5046f1f989899143a12bf92de603b69f4e0aee1e15"
+dependencies = [
+ "crypto-mac",
+ "digest",
+]
+
+[[package]]
+name = "hostname"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867"
+dependencies = [
+ "libc",
+ "match_cfg",
+ "winapi",
+]
+
+[[package]]
+name = "http"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "527e8c9ac747e28542699a951517aa9a6945af506cd1f2e1b53a576c17b6cc11"
+dependencies = [
+ "bytes",
+ "fnv",
+ "itoa",
+]
+
+[[package]]
+name = "http-body"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "399c583b2979440c60be0821a6199eca73bc3c8dcd9d070d75ac726e2c6186e5"
+dependencies = [
+ "bytes",
+ "http",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "httparse"
+version = "1.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acd94fdbe1d4ff688b67b04eee2e17bd50995534a61539e45adfefb45e5e5503"
+
+[[package]]
+name = "httpdate"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6456b8a6c8f33fee7d958fcd1b60d55b11940a79e63ae87013e6d22e26034440"
+
+[[package]]
+name = "humantime"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
+
+[[package]]
+name = "hyper"
+version = "0.14.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "13f67199e765030fa08fe0bd581af683f0d5bc04ea09c2b1102012c5fb90e7fd"
+dependencies = [
+ "bytes",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "httparse",
+ "httpdate",
+ "itoa",
+ "pin-project-lite",
+ "socket2",
+ "tokio",
+ "tower-service",
+ "tracing",
+ "want",
+]
+
+[[package]]
+name = "hyper-tls"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905"
+dependencies = [
+ "bytes",
+ "hyper",
+ "native-tls",
+ "tokio",
+ "tokio-native-tls",
+]
+
+[[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 = "indexmap"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc633605454125dec4b66843673f01c7df2b89479b32e0ed634e43a91cff62a5"
+dependencies = [
+ "autocfg",
+ "hashbrown",
+]
+
+[[package]]
+name = "instant"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bee0328b1209d157ef001c94dd85b4f8f64139adb0eac2659f4b08382b2f474d"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "integer-encoding"
+version = "1.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "48dc51180a9b377fd75814d0cc02199c20f8e99433d6762f650d39cdbbd3b56f"
+
+[[package]]
+name = "ipnet"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68f2d64f2edebec4ce84ad108148e67e1064789bee435edc5b60ad398714a3a9"
+
+[[package]]
+name = "itoa"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4"
+
+[[package]]
+name = "jmespatch"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7acf91a732ade34d8eda2dee9500a051833f14f0d3d10d77c149845d6ac6a5f0"
+dependencies = [
+ "lazy_static",
+ "serde",
+ "serde_json",
+ "slug",
+]
+
+[[package]]
+name = "jobserver"
+version = "0.1.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af25a77299a7f711a01975c35a6a424eb6862092cc2d6c72c4ed6cbc56dfc1fa"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "js-sys"
+version = "0.3.55"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7cc9ffccd38c451a86bf13657df244e9c3f37493cce8e5e21e940963777acc84"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "kafka-delta-ingest"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "arrow",
+ "async-trait",
+ "base64",
+ "chrono",
+ "clap 3.0.0-beta.4",
+ "deltalake",
+ "dipstick",
+ "env_logger",
+ "futures",
+ "jmespatch",
+ "lazy_static",
+ "log",
+ "maplit",
+ "parquet",
+ "parquet-format",
+ "rdkafka",
+ "rusoto_core",
+ "rusoto_credential",
+ "rusoto_s3",
+ "sentry",
+ "serde",
+ "serde_json",
+ "serial_test",
+ "strum",
+ "strum_macros",
+ "tempfile",
+ "thiserror",
+ "tokio",
+ "tokio-stream",
+ "tokio-util",
+ "utime",
+ "uuid",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "lexical-core"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d32c80337884d5044fe54e9c1b8d64b92de67e10d9312e472a8ff6d6ea849daf"
+dependencies = [
+ "lexical-parse-float",
+ "lexical-parse-integer",
+ "lexical-util",
+ "lexical-write-float",
+ "lexical-write-integer",
+]
+
+[[package]]
+name = "lexical-parse-float"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "673a01c82cb851a33bb46cacc44c3ad5e7b39ea3b8d22ade21646221df58e45f"
+dependencies = [
+ "lexical-parse-integer",
+ "lexical-util",
+ "static_assertions",
+]
+
+[[package]]
+name = "lexical-parse-integer"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2c92badda8cc0fc4f3d3cc1c30aaefafb830510c8781ce4e8669881f3ed53ac"
+dependencies = [
+ "lexical-util",
+ "static_assertions",
+]
+
+[[package]]
+name = "lexical-util"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ff669ccaae16ee33af90dc51125755efed17f1309626ba5c12052512b11e291"
+dependencies = [
+ "static_assertions",
+]
+
+[[package]]
+name = "lexical-write-float"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f93601479eae2b41ad465e1f813ea98780069ef1d69063145e76c1bd108ab769"
+dependencies = [
+ "lexical-util",
+ "lexical-write-integer",
+ "static_assertions",
+]
+
+[[package]]
+name = "lexical-write-integer"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ece956492e0e40fd95ef8658a34d53a3b8c2015762fdcaaff2167b28de1f56ef"
+dependencies = [
+ "lexical-util",
+ "static_assertions",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.101"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3cb00336871be5ed2c8ed44b60ae9959dc5b9f08539422ed43f09e34ecaeba21"
+
+[[package]]
+name = "libz-sys"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de5435b8549c16d423ed0c03dbaafe57cf6c3344744f1242520d59c9d8ecec66"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "lock_api"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4da24a77a3d8a6d4862d95f72e6fdb9c09a643ecdb402d754004a557f2bec75"
+dependencies = [
+ "scopeguard",
+]
+
+[[package]]
+name = "lock_api"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712a4d093c9976e24e7dbca41db895dabcbac38eb5f4045393d17a95bdfb1109"
+dependencies = [
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "lz4"
+version = "1.23.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aac20ed6991e01bf6a2e68cc73df2b389707403662a8ba89f68511fb340f724c"
+dependencies = [
+ "libc",
+ "lz4-sys",
+]
+
+[[package]]
+name = "lz4-sys"
+version = "1.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dca79aa95d8b3226213ad454d328369853be3a1382d89532a854f4d69640acae"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "maplit"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d"
+
+[[package]]
+name = "match_cfg"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4"
+
+[[package]]
+name = "matches"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f"
+
+[[package]]
+name = "maybe-uninit"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00"
+
+[[package]]
+name = "md5"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "490cc448043f947bae3cbee9c203358d62dbee0db12107a74be5c30ccfd09771"
+
+[[package]]
+name = "memchr"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a"
+
+[[package]]
+name = "mime"
+version = "0.3.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b"
+dependencies = [
+ "adler",
+ "autocfg",
+]
+
+[[package]]
+name = "minreq"
+version = "2.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5f7db7a675c4b46b8842105b9371d6151e95fbbecd9b0e54dc2ea814397d2cc"
+dependencies = [
+ "log",
+]
+
+[[package]]
+name = "mio"
+version = "0.7.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c2bdb6314ec10835cd3293dd268473a835c02b7b352e788be788b3c6ca6bb16"
+dependencies = [
+ "libc",
+ "log",
+ "miow",
+ "ntapi",
+ "winapi",
+]
+
+[[package]]
+name = "miow"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "multiversion"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "025c962a3dd3cc5e0e520aa9c612201d127dcdf28616974961a649dca64f5373"
+dependencies = [
+ "multiversion-macros",
+]
+
+[[package]]
+name = "multiversion-macros"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8a3e2bde382ebf960c1f3e79689fa5941625fe9bf694a1cb64af3e85faff3af"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "native-tls"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "48ba9f7719b5a0f42f338907614285fb5fd70e53858141f69898a1fb7203b24d"
+dependencies = [
+ "lazy_static",
+ "libc",
+ "log",
+ "openssl",
+ "openssl-probe",
+ "openssl-sys",
+ "schannel",
+ "security-framework",
+ "security-framework-sys",
+ "tempfile",
+]
+
+[[package]]
+name = "ntapi"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f6bb902e437b6d86e03cce10a7e2af662292c5dfef23b65899ea3ac9354ad44"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "num"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8536030f9fea7127f841b45bb6243b27255787fb4eb83958aa1ef9d2fdc0c36"
+dependencies = [
+ "num-complex 0.2.4",
+ "num-integer",
+ "num-iter",
+ "num-rational 0.2.4",
+ "num-traits",
+]
+
+[[package]]
+name = "num"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43db66d1170d347f9a065114077f7dccb00c1b9478c89384490a3425279a4606"
+dependencies = [
+ "num-bigint",
+ "num-complex 0.4.0",
+ "num-integer",
+ "num-iter",
+ "num-rational 0.4.0",
+ "num-traits",
+]
+
+[[package]]
+name = "num-bigint"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "74e768dff5fb39a41b3bcd30bb25cf989706c90d028d1ad71971987aa309d535"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-complex"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6b19411a9719e753aff12e5187b74d60d3dc449ec3f4dc21e3989c3f554bc95"
+dependencies = [
+ "autocfg",
+ "num-traits",
+]
+
+[[package]]
+name = "num-complex"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26873667bbbb7c5182d4a37c1add32cdf09f841af72da53318fdb81543c15085"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "num-integer"
+version = "0.1.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db"
+dependencies = [
+ "autocfg",
+ "num-traits",
+]
+
+[[package]]
+name = "num-iter"
+version = "0.1.42"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2021c8337a54d21aca0d59a92577a029af9431cb59b909b03252b9c164fad59"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-rational"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c000134b5dbf44adc5cb772486d335293351644b801551abe8f75c84cfa4aef"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-rational"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d41702bd167c2df5520b384281bc111a4b5efcf7fbc4c9c222c815b07e0a6a6a"
+dependencies = [
+ "autocfg",
+ "num-bigint",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3"
+dependencies = [
+ "hermit-abi",
+ "libc",
+]
+
+[[package]]
+name = "num_enum"
+version = "0.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9bd055fb730c4f8f4f57d45d35cd6b3f0980535b056dc7ff119cee6a66ed6f"
+dependencies = [
+ "derivative",
+ "num_enum_derive",
+]
+
+[[package]]
+name = "num_enum_derive"
+version = "0.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "486ea01961c4a818096de679a8b740b26d9033146ac5291b1c98557658f8cdd9"
+dependencies = [
+ "proc-macro-crate",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "object"
+version = "0.26.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39f37e50073ccad23b6d09bcb5b263f4e76d3bb6038e4a3c08e52162ffa8abc2"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56"
+
+[[package]]
+name = "opaque-debug"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
+
+[[package]]
+name = "openssl"
+version = "0.10.36"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8d9facdb76fec0b73c406f125d44d86fdad818d66fef0531eec9233ca425ff4a"
+dependencies = [
+ "bitflags",
+ "cfg-if 1.0.0",
+ "foreign-types",
+ "libc",
+ "once_cell",
+ "openssl-sys",
+]
+
+[[package]]
+name = "openssl-probe"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28988d872ab76095a6e6ac88d99b54fd267702734fd7ffe610ca27f533ddb95a"
+
+[[package]]
+name = "openssl-src"
+version = "111.16.0+1.1.1l"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ab2173f69416cf3ec12debb5823d244127d23a9b127d5a5189aa97c5fa2859f"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "openssl-sys"
+version = "0.9.66"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1996d2d305e561b70d1ee0c53f1542833f4e1ac6ce9a6708b6ff2738ca67dc82"
+dependencies = [
+ "autocfg",
+ "cc",
+ "libc",
+ "openssl-src",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "ordered-float"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3305af35278dd29f46fcdd139e0b1fbfae2153f0e5928b39b035542dd31e37b7"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "os_str_bytes"
+version = "3.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6acbef58a60fe69ab50510a55bc8cdd4d6cf2283d27ad338f54cb52747a9cf2d"
+
+[[package]]
+name = "parking_lot"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3a704eb390aafdc107b0e392f56a82b668e3a71366993b5340f5833fd62505e"
+dependencies = [
+ "lock_api 0.3.4",
+ "parking_lot_core 0.7.2",
+]
+
+[[package]]
+name = "parking_lot"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99"
+dependencies = [
+ "instant",
+ "lock_api 0.4.5",
+ "parking_lot_core 0.8.5",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d58c7c768d4ba344e3e8d72518ac13e259d7c7ade24167003b8488e10b6740a3"
+dependencies = [
+ "cfg-if 0.1.10",
+ "cloudabi",
+ "libc",
+ "redox_syscall 0.1.57",
+ "smallvec",
+ "winapi",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216"
+dependencies = [
+ "cfg-if 1.0.0",
+ "instant",
+ "libc",
+ "redox_syscall 0.2.10",
+ "smallvec",
+ "winapi",
+]
+
+[[package]]
+name = "parquet"
+version = "6.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "479de475fbb7abf51e39cde69da3cc902d13a6fcb9259993f98688325e6a1ee7"
+dependencies = [
+ "arrow",
+ "base64",
+ "brotli",
+ "byteorder",
+ "chrono",
+ "clap 2.33.3",
+ "flate2",
+ "lz4",
+ "num-bigint",
+ "parquet-format",
+ "rand",
+ "serde_json",
+ "snap",
+ "thrift",
+ "zstd",
+]
+
+[[package]]
+name = "parquet-format"
+version = "2.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a5bc6b23543b5dedc8f6cce50758a35e5582e148e0cfa26bd0cacd569cda5b71"
+dependencies = [
+ "thrift",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8d31d11c69a6b52a174b42bdc0c30e5e11670f90788b2c471c31c1d17d449443"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3831453b3449ceb48b6d9c7ad7c96d5ea673e9b470a1dc578c2ce6521230884c"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857"
+
+[[package]]
+name = "proc-macro-crate"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41fdbd1df62156fbc5945f4762632564d7d038153091c3fcf1067f6aef7cff92"
+dependencies = [
+ "thiserror",
+ "toml",
+]
+
+[[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-macro-hack"
+version = "0.5.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5"
+
+[[package]]
+name = "proc-macro-nested"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc881b2c22681370c6a780e47af9840ef841837bc98118431d4e1868bd0c1086"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9f5105d4fdaab20335ca9565e106a5d9b82b6219b5ba735731124ac6711d23d"
+dependencies = [
+ "unicode-xid",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e7573632e6454cf6b99d7aac4ccca54be06da05aca2ef7423d22d27d4d4bcd8"
+dependencies = [
+ "libc",
+ "rand_chacha",
+ "rand_core",
+ "rand_hc",
+]
+
+[[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",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "rand_hc"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d51e9f596de227fda2ea6c84607f5558e196eeaf43c986b724ba4fb8fdf497e7"
+dependencies = [
+ "rand_core",
+]
+
+[[package]]
+name = "rdkafka"
+version = "0.26.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af78bc431a82ef178c4ad6db537eb9cc25715a8591d27acc30455ee7227a76f4"
+dependencies = [
+ "futures",
+ "libc",
+ "log",
+ "rdkafka-sys",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "slab",
+ "tokio",
+]
+
+[[package]]
+name = "rdkafka-sys"
+version = "4.0.0+1.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54f24572851adfeb525fdc4a1d51185898e54fed4e8d8dba4fadb90c6b4f0422"
+dependencies = [
+ "libc",
+ "libz-sys",
+ "num_enum",
+ "openssl-sys",
+ "pkg-config",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.1.57"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce"
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "redox_users"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "528532f3d801c87aec9def2add9ca802fe569e44a544afe633765267840abe64"
+dependencies = [
+ "getrandom",
+ "redox_syscall 0.2.10",
+]
+
+[[package]]
+name = "regex"
+version = "1.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b"
+
+[[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 = "reqwest"
+version = "0.11.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "51c732d463dd300362ffb44b7b125f299c23d2990411a4253824630ebc7467fb"
+dependencies = [
+ "base64",
+ "bytes",
+ "encoding_rs",
+ "futures-core",
+ "futures-util",
+ "http",
+ "http-body",
+ "hyper",
+ "hyper-tls",
+ "ipnet",
+ "js-sys",
+ "lazy_static",
+ "log",
+ "mime",
+ "native-tls",
+ "percent-encoding",
+ "pin-project-lite",
+ "serde",
+ "serde_json",
+ "serde_urlencoded 0.7.0",
+ "tokio",
+ "tokio-native-tls",
+ "url",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+ "winreg",
+]
+
+[[package]]
+name = "rusoto_core"
+version = "0.46.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "02aff20978970d47630f08de5f0d04799497818d16cafee5aec90c4b4d0806cf"
+dependencies = [
+ "async-trait",
+ "base64",
+ "bytes",
+ "crc32fast",
+ "futures",
+ "http",
+ "hyper",
+ "hyper-tls",
+ "lazy_static",
+ "log",
+ "rusoto_credential",
+ "rusoto_signature",
+ "rustc_version 0.2.3",
+ "serde",
+ "serde_json",
+ "tokio",
+ "xml-rs",
+]
+
+[[package]]
+name = "rusoto_credential"
+version = "0.46.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e91e4c25ea8bfa6247684ff635299015845113baaa93ba8169b9e565701b58e"
+dependencies = [
+ "async-trait",
+ "chrono",
+ "dirs-next",
+ "futures",
+ "hyper",
+ "serde",
+ "serde_json",
+ "shlex",
+ "tokio",
+ "zeroize",
+]
+
+[[package]]
+name = "rusoto_dynamodb"
+version = "0.46.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f26af40f36409cb8fae3069690f78f638f747b55c7b90f338d5ed36016b0cda"
+dependencies = [
+ "async-trait",
+ "bytes",
+ "futures",
+ "rusoto_core",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "rusoto_s3"
+version = "0.46.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abc3f56f14ccf91f880b9a9c2d0556d8523e8c155041c54db155b384a1dd1119"
+dependencies = [
+ "async-trait",
+ "bytes",
+ "futures",
+ "rusoto_core",
+ "xml-rs",
+]
+
+[[package]]
+name = "rusoto_signature"
+version = "0.46.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5486e6b1673ab3e0ba1ded284fb444845fe1b7f41d13989a54dd60f62a7b2baa"
+dependencies = [
+ "base64",
+ "bytes",
+ "futures",
+ "hex",
+ "hmac",
+ "http",
+ "hyper",
+ "log",
+ "md5",
+ "percent-encoding",
+ "pin-project-lite",
+ "rusoto_credential",
+ "rustc_version 0.2.3",
+ "serde",
+ "sha2",
+ "time 0.2.27",
+ "tokio",
+]
+
+[[package]]
+name = "rusoto_sts"
+version = "0.46.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2f93005e0c3b9e40a424b50ca71886d2445cc19bb6cdac3ac84c2daff482eb59"
+dependencies = [
+ "async-trait",
+ "bytes",
+ "chrono",
+ "futures",
+ "rusoto_core",
+ "serde_urlencoded 0.6.1",
+ "xml-rs",
+]
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342"
+
+[[package]]
+name = "rustc_version"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
+dependencies = [
+ "semver 0.9.0",
+]
+
+[[package]]
+name = "rustc_version"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
+dependencies = [
+ "semver 1.0.4",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e"
+
+[[package]]
+name = "schannel"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f05ba609c234e60bee0d547fe94a4c7e9da733d1c962cf6e59efa4cd9c8bc75"
+dependencies = [
+ "lazy_static",
+ "winapi",
+]
+
+[[package]]
+name = "scopeguard"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+
+[[package]]
+name = "security-framework"
+version = "2.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "525bc1abfda2e1998d152c45cf13e696f76d0a4972310b22fac1658b05df7c87"
+dependencies = [
+ "bitflags",
+ "core-foundation",
+ "core-foundation-sys",
+ "libc",
+ "security-framework-sys",
+]
+
+[[package]]
+name = "security-framework-sys"
+version = "2.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9dd14d83160b528b7bfd66439110573efcfbe281b17fc2ca9f39f550d619c7e"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "semver"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
+dependencies = [
+ "semver-parser",
+]
+
+[[package]]
+name = "semver"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "568a8e6258aa33c13358f81fd834adb854c6f7c9468520910a9b1e8fac068012"
+
+[[package]]
+name = "semver-parser"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
+
+[[package]]
+name = "sentry"
+version = "0.23.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "546b9b6f76c26c60ffbcf0b7136e15169fe13d43949b4aadb7c1edc1c3f3a26f"
+dependencies = [
+ "httpdate",
+ "reqwest",
+ "sentry-backtrace",
+ "sentry-contexts",
+ "sentry-core",
+ "sentry-panic",
+ "tokio",
+]
+
+[[package]]
+name = "sentry-backtrace"
+version = "0.23.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9cd0cba2aff36ac98708f7a6e7abbdde82dbaf180d5870c41084dc1b473648b9"
+dependencies = [
+ "backtrace",
+ "lazy_static",
+ "regex",
+ "sentry-core",
+]
+
+[[package]]
+name = "sentry-contexts"
+version = "0.23.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9bacf1c62427c6c97b896640d0c4dd204bbd3b79dd192d7cb40891aa5ee11d58"
+dependencies = [
+ "hostname",
+ "lazy_static",
+ "libc",
+ "regex",
+ "rustc_version 0.4.0",
+ "sentry-core",
+ "uname",
+]
+
+[[package]]
+name = "sentry-core"
+version = "0.23.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9a957270c9a430218f8031c866493061a27e35a70250e9527f093563a33ce6b"
+dependencies = [
+ "chrono",
+ "lazy_static",
+ "rand",
+ "sentry-types",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "sentry-panic"
+version = "0.23.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "692bf989f0c99f025e33d7f58e62822c3771f56d189698c66dcc863122255d95"
+dependencies = [
+ "sentry-backtrace",
+ "sentry-core",
+]
+
+[[package]]
+name = "sentry-types"
+version = "0.23.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4dd2266fee014a86e250e98e389191ecd23be546b5c42b6a2fb9af2972fadac"
+dependencies = [
+ "chrono",
+ "debugid",
+ "serde",
+ "serde_json",
+ "thiserror",
+ "url",
+ "uuid",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.130"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f12d06de37cf59146fbdecab66aa99f9fe4f78722e3607577a5375d66bd0c913"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.130"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d7bc1a1ab1961464eae040d96713baa5a724a8152c1222492465b54322ec508b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.67"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a7f9e390c27c3c0ce8bc5d725f6e4d30a29d26659494aa4b17535f7522c5c950"
+dependencies = [
+ "indexmap",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_urlencoded"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ec5d77e2d4c73717816afac02670d5c4f534ea95ed430442cad02e7a6e32c97"
+dependencies = [
+ "dtoa",
+ "itoa",
+ "serde",
+ "url",
+]
+
+[[package]]
+name = "serde_urlencoded"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "edfa57a7f8d9c1d260a549e7224100f6c43d43f9103e06dd8b4095a9b2b43ce9"
+dependencies = [
+ "form_urlencoded",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serial_test"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0bccbcf40c8938196944a3da0e133e031a33f4d6b72db3bda3cc556e361905d"
+dependencies = [
+ "lazy_static",
+ "parking_lot 0.11.2",
+ "serial_test_derive",
+]
+
+[[package]]
+name = "serial_test_derive"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2acd6defeddb41eb60bb468f8825d0cfd0c2a76bc03bfd235b6a1dc4f6a1ad5"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "sha1"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2579985fda508104f7587689507983eadd6a6e84dd35d6d115361f530916fa0d"
+
+[[package]]
+name = "sha2"
+version = "0.9.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9204c41a1597a8c5af23c82d1c921cb01ec0a4c59e07a9c7306062829a3903f3"
+dependencies = [
+ "block-buffer",
+ "cfg-if 1.0.0",
+ "cpufeatures",
+ "digest",
+ "opaque-debug",
+]
+
+[[package]]
+name = "shlex"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fdf1b9db47230893d76faad238fd6097fd6d6a9245cd7a4d90dbd639536bbd2"
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "slab"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c307a32c1c5c437f38c7fd45d753050587732ba8628319fbdf12a7e289ccc590"
+
+[[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.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e"
+
+[[package]]
+name = "snap"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "45456094d1983e2ee2a18fdfebce3189fa451699d0502cb8e3b49dba5ba41451"
+
+[[package]]
+name = "socket2"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "765f090f0e423d2b55843402a07915add955e7d60657db13707a159727326cad"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "standback"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e113fb6f3de07a243d434a56ec6f186dfd51cb08448239fe7bcae73f87ff28ff"
+dependencies = [
+ "version_check",
+]
+
+[[package]]
+name = "static_assertions"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+
+[[package]]
+name = "stdweb"
+version = "0.4.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d022496b16281348b52d0e30ae99e01a73d737b2f45d38fed4edf79f9325a1d5"
+dependencies = [
+ "discard",
+ "rustc_version 0.2.3",
+ "stdweb-derive",
+ "stdweb-internal-macros",
+ "stdweb-internal-runtime",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "stdweb-derive"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c87a60a40fccc84bef0652345bbbbbe20a605bf5d0ce81719fc476f5c03b50ef"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "serde",
+ "serde_derive",
+ "syn",
+]
+
+[[package]]
+name = "stdweb-internal-macros"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "58fa5ff6ad0d98d1ffa8cb115892b6e69d67799f6763e162a1c9db421dc22e11"
+dependencies = [
+ "base-x",
+ "proc-macro2",
+ "quote",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "sha1",
+ "syn",
+]
+
+[[package]]
+name = "stdweb-internal-runtime"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "213701ba3370744dcd1a12960caa4843b3d68b4d1c0a5d575e0d65b2ee9d16c0"
+
+[[package]]
+name = "strsim"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "strum"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7318c509b5ba57f18533982607f24070a55d353e90d4cae30c467cdb2ad5ac5c"
+
+[[package]]
+name = "strum_macros"
+version = "0.20.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee8bc6b87a5112aeeab1f4a9f7ab634fe6cbefc4850006df31267f4cfb9e3149"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "subtle"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601"
+
+[[package]]
+name = "syn"
+version = "1.0.76"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c6f107db402c2c2055242dbf4d2af0e69197202e9faacbef9571bbe47f5a1b84"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-xid",
+]
+
+[[package]]
+name = "tempfile"
+version = "3.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dac1c663cfc93810f88aed9b8941d48cabf856a1b111c29a40439018d870eb22"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "rand",
+ "redox_syscall 0.2.10",
+ "remove_dir_all",
+ "winapi",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dfed899f0eb03f32ee8c6a0aabdb8a7949659e3466561fc0adf54e26d88c5f4"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.14.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0066c8d12af8b5acd21e00547c3797fde4e8677254a7ee429176ccebbe93dd80"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "602eca064b2d83369e2b2f34b09c70b605402801927c65c11071ac911d299b88"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bad553cc2c78e8de258400763a647e80e6d1b31ee237275d756f6836d204494c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "threadpool"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa"
+dependencies = [
+ "num_cpus",
+]
+
+[[package]]
+name = "thrift"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c6d965454947cc7266d22716ebfd07b18d84ebaf35eec558586bbb2a8cb6b5b"
+dependencies = [
+ "byteorder",
+ "integer-encoding",
+ "log",
+ "ordered-float",
+ "threadpool",
+]
+
+[[package]]
+name = "time"
+version = "0.1.43"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca8a50ef2360fbd1eeb0ecd46795a87a19024eb4b53c5dc916ca1fd95fe62438"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "time"
+version = "0.2.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4752a97f8eebd6854ff91f1c1824cd6160626ac4bd44287f7f4ea2035a02a242"
+dependencies = [
+ "const_fn",
+ "libc",
+ "standback",
+ "stdweb",
+ "time-macros",
+ "version_check",
+ "winapi",
+]
+
+[[package]]
+name = "time-macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "957e9c6e26f12cb6d0dd7fc776bb67a706312e7299aed74c8dd5b17ebb27e2f1"
+dependencies = [
+ "proc-macro-hack",
+ "time-macros-impl",
+]
+
+[[package]]
+name = "time-macros-impl"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd3c141a1b43194f3f56a1411225df8646c55781d5f26db825b3d98507eb482f"
+dependencies = [
+ "proc-macro-hack",
+ "proc-macro2",
+ "quote",
+ "standback",
+ "syn",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "848a1e1181b9f6753b5e96a092749e29b11d19ede67dfbbd6c7dc7e0f49b5338"
+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 = "tokio"
+version = "1.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4efe6fc2395938c8155973d7be49fe8d03a843726e285e100a8a383cc0154ce"
+dependencies = [
+ "autocfg",
+ "bytes",
+ "libc",
+ "memchr",
+ "mio",
+ "num_cpus",
+ "once_cell",
+ "parking_lot 0.11.2",
+ "pin-project-lite",
+ "signal-hook-registry",
+ "tokio-macros",
+ "winapi",
+]
+
+[[package]]
+name = "tokio-macros"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54473be61f4ebe4efd09cec9bd5d16fa51d70ea0192213d754d2d500457db110"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "tokio-native-tls"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7d995660bd2b7f8c1568414c1126076c13fbb725c40112dc0120b78eb9b717b"
+dependencies = [
+ "native-tls",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-stream"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b2f3f698253f03119ac0102beaa64f67a67e08074d03a22d18784104543727f"
+dependencies = [
+ "futures-core",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.6.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08d3725d3efa29485e87311c5b699de63cde14b00ed4d256b8318aa30ca452cd"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-sink",
+ "log",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "toml"
+version = "0.5.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "tower-service"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6"
+
+[[package]]
+name = "tracing"
+version = "0.1.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09adeb8c97449311ccd28a427f96fb563e7fd31aabf994189879d9da2394b89d"
+dependencies = [
+ "cfg-if 1.0.0",
+ "pin-project-lite",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2ca517f43f0fb96e0c3072ed5c275fe5eece87e8cb52f4a77b69226d3b1c9df8"
+dependencies = [
+ "lazy_static",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642"
+
+[[package]]
+name = "typenum"
+version = "1.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b63708a265f51345575b27fe43f9500ad611579e764c79edbc2037b1121959ec"
+
+[[package]]
+name = "uname"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b72f89f0ca32e4db1c04e2a72f5345d59796d4866a1ee0609084569f73683dc8"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "246f4c42e67e7a4e3c6106ff716a5d067d4132a642840b242e357e468a2a0085"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d54590932941a9e9266f0832deed84ebe1bf2e4c9e4a3554d393d18f5e854bf9"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8895849a949e7845e06bd6dc1aa51731a103c42707010a5b591c0038fb73385b"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3"
+
+[[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"
+checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "matches",
+ "percent-encoding",
+ "serde",
+]
+
+[[package]]
+name = "utime"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91baa0c65eabd12fcbdac8cc35ff16159cab95cae96d0222d6d0271db6193cef"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "uuid"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7"
+dependencies = [
+ "getrandom",
+ "serde",
+]
+
+[[package]]
+name = "vcpkg"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+
+[[package]]
+name = "vec_map"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
+
+[[package]]
+name = "version_check"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe"
+
+[[package]]
+name = "want"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0"
+dependencies = [
+ "log",
+ "try-lock",
+]
+
+[[package]]
+name = "wasi"
+version = "0.10.2+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.78"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "632f73e236b219150ea279196e54e610f5dbafa5d61786303d4da54f84e47fce"
+dependencies = [
+ "cfg-if 1.0.0",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.78"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a317bf8f9fba2476b4b2c85ef4c4af8ff39c3c7f0cdfeed4f82c34a880aa837b"
+dependencies = [
+ "bumpalo",
+ "lazy_static",
+ "log",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e8d7523cb1f2a4c96c1317ca690031b714a51cc14e05f712446691f413f5d39"
+dependencies = [
+ "cfg-if 1.0.0",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.78"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d56146e7c495528bf6587663bea13a8eb588d39b36b679d83972e1a2dbbdacf9"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.78"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7803e0eea25835f8abdc585cd3021b3deb11543c6fe226dcd30b228857c5c5ab"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.78"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0237232789cf037d5480773fe568aac745bfe2afbc11a863e97901780a6b47cc"
+
+[[package]]
+name = "web-sys"
+version = "0.3.55"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38eb105f1c59d9eaa6b5cdc92b859d85b926e82cb2e0945cd0c9259faa6fe9fb"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[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"
+
+[[package]]
+name = "winreg"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0120db82e8a1e0b9fb3345a539c478767c0048d842860994d96113d5b667bd69"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "xml-rs"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2d7d3948613f75c98fd9328cfdcc45acc4d360655289d0a7d4ec931392200a3"
+
+[[package]]
+name = "zeroize"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "377db0846015f7ae377174787dd452e1c5f5a9050bc6f954911d01f116daa0cd"
+
+[[package]]
+name = "zstd"
+version = "0.9.0+zstd.1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07749a5dc2cb6b36661290245e350f15ec3bbb304e493db54a1d354480522ccd"
+dependencies = [
+ "zstd-safe",
+]
+
+[[package]]
+name = "zstd-safe"
+version = "4.1.1+zstd.1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c91c90f2c593b003603e5e0493c837088df4469da25aafff8bce42ba48caf079"
+dependencies = [
+ "libc",
+ "zstd-sys",
+]
+
+[[package]]
+name = "zstd-sys"
+version = "1.6.1+zstd.1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "615120c7a2431d16cf1cf979e7fc31ba7a5b5e5707b29c8a99e5dbf8a8392a33"
+dependencies = [
+ "cc",
+ "libc",
+]
diff --git a/nixpkgs/pkgs/development/tools/kafka-delta-ingest/default.nix b/nixpkgs/pkgs/development/tools/kafka-delta-ingest/default.nix
new file mode 100644
index 000000000000..9f8983305f7c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/kafka-delta-ingest/default.nix
@@ -0,0 +1,51 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, pkg-config
+, openssl
+, perl
+, rdkafka
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "kafka-delta-ingest";
+  version = "unstable-2021-12-08";
+
+  src = fetchFromGitHub {
+    owner = "delta-io";
+    repo = pname;
+    rev = "c48c854145b5aab1b8f36cc04978880794a2273c";
+    sha256 = "sha256-q0jOVZlxMHIhnc8y2N8o7Sl5Eg7DfJ96kXrPIV8RD1Y=";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    perl
+  ];
+
+  buildFeatures = [ "dynamic-linking" ];
+
+  buildInputs = [
+    openssl
+    rdkafka
+  ];
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "deltalake-0.4.1" = "sha256-0v3n+qMbBhw53qPuZdhGSO+aqc6j8T577fnyEIQmPDU=";
+    };
+  };
+
+  # many tests seem to require a running kafka instance
+  doCheck = false;
+
+  meta = with lib; {
+    broken = stdenv.isDarwin;
+    description = "A highly efficient daemon for streaming data from Kafka into Delta Lake";
+    homepage = "https://github.com/delta-io/kafka-delta-ingest";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/kafkactl/default.nix b/nixpkgs/pkgs/development/tools/kafkactl/default.nix
new file mode 100644
index 000000000000..ef5aafa501e6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/kafkactl/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "kafkactl";
+  version = "4.0.0";
+
+  src = fetchFromGitHub {
+    owner = "deviceinsight";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-GtveC2W9y/mBuiZjpxCXjCE6WO0ub4wX85Is6MUTvlw=";
+  };
+
+  vendorHash = "sha256-B7kP1ksH7t/1PQrI8mSgIEGdH02RhgN4A1z4S0UJG/g=";
+
+  doCheck = false;
+
+  meta = with lib; {
+    homepage = "https://github.com/deviceinsight/kafkactl";
+    changelog = "https://github.com/deviceinsight/kafkactl/blob/v${version}/CHANGELOG.md";
+    description = "Command Line Tool for managing Apache Kafka";
+    longDescription = ''
+      A command-line interface for interaction with Apache Kafka.
+      Features:
+      - command auto-completion for bash, zsh, fish shell including dynamic completion for e.g. topics or consumer groups
+      - support for avro schemas
+      - Configuration of different contexts
+      - directly access kafka clusters inside your kubernetes cluster
+    '';
+    license = licenses.asl20;
+    maintainers = with maintainers; [ grburst ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/karate/default.nix b/nixpkgs/pkgs/development/tools/karate/default.nix
new file mode 100644
index 000000000000..bd99903e984f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/karate/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenvNoCC, fetchurl, jre, makeWrapper }:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "karate";
+  version = "1.4.1";
+
+  src = fetchurl {
+    url = "https://github.com/karatelabs/karate/releases/download/v${version}/karate-${version}.jar";
+    sha256 = "sha256-3gNoXUchrfGkZC6UAfw2TXorzSlqnOZCe0gnuUHIIb4=";
+  };
+  dontUnpack = true;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    runHook preInstall
+    makeWrapper ${jre}/bin/java $out/bin/karate --add-flags "-jar $src"
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "API Test Automation Made Simple";
+    longDescription = ''
+      Karate is the only open-source tool to combine API
+      test-automation, mocks, performance-testing and even UI
+      automation into a single, unified framework. The BDD syntax
+      popularized by Cucumber is language-neutral, and easy for even
+      non-programmers. Assertions and HTML reports are built-in, and
+      you can run tests in parallel for speed.
+    '';
+    homepage = "https://github.com/karatelabs/karate";
+    changelog = "https://github.com/karatelabs/karate/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = [ maintainers.kephasp ];
+    platforms = jre.meta.platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/karma-runner/default.nix b/nixpkgs/pkgs/development/tools/karma-runner/default.nix
new file mode 100644
index 000000000000..d05d0e7e3969
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/karma-runner/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, buildNpmPackage
+, fetchFromGitHub
+}:
+
+buildNpmPackage rec {
+  pname = "karma";
+  version = "6.4.2";
+
+  src = fetchFromGitHub {
+    owner = "karma-runner";
+    repo = "karma";
+    rev = "v${version}";
+    hash = "sha256-v6IiLz65NS8GwM/FPqRxR5qcFDDu7EqloR0SIensdDI=";
+  };
+
+  patches = [
+    ./fix-package-lock.patch
+  ];
+
+  npmDepsHash = "sha256-nX4/96WdPEDZ6DASp+AOBbBbHyq+p2zIh2dZUbtmIPI=";
+
+  env.PUPPETEER_SKIP_CHROMIUM_DOWNLOAD = true;
+
+  meta = {
+    description = "Spectacular Test Runner for JavaScript";
+    homepage = "http://karma-runner.github.io/";
+    license = lib.licenses.mit;
+    mainProgram = "karma";
+    maintainers = with lib.maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/karma-runner/fix-package-lock.patch b/nixpkgs/pkgs/development/tools/karma-runner/fix-package-lock.patch
new file mode 100644
index 000000000000..c1a835382513
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/karma-runner/fix-package-lock.patch
@@ -0,0 +1,53 @@
+diff --git a/package-lock.json b/package-lock.json
+index 413cf4d1..1d03d9f5 100644
+--- a/package-lock.json
++++ b/package-lock.json
+@@ -5226,36 +5226,6 @@
+       "integrity": "sha512-ApcjaOdVTJ7y4r08xI5wIqpvwS48Q0PBG4DJROcEkH1f8MdAiNFyFxz3xoL0LWAVwjrwPYZdVHHxhRHcx/uGLA==",
+       "dev": true
+     },
+-    "karma": {
+-      "version": "file:",
+-      "dev": true,
+-      "requires": {
+-        "@colors/colors": "1.5.0",
+-        "body-parser": "^1.19.0",
+-        "braces": "^3.0.2",
+-        "chokidar": "^3.5.1",
+-        "connect": "^3.7.0",
+-        "di": "^0.0.1",
+-        "dom-serialize": "^2.2.1",
+-        "glob": "^7.1.7",
+-        "graceful-fs": "^4.2.6",
+-        "http-proxy": "^1.18.1",
+-        "isbinaryfile": "^4.0.8",
+-        "lodash": "^4.17.21",
+-        "log4js": "^6.4.1",
+-        "mime": "^2.5.2",
+-        "minimatch": "^3.0.4",
+-        "mkdirp": "^0.5.5",
+-        "qjobs": "^1.2.0",
+-        "range-parser": "^1.2.1",
+-        "rimraf": "^3.0.2",
+-        "socket.io": "^4.4.1",
+-        "source-map": "^0.6.1",
+-        "tmp": "^0.2.1",
+-        "ua-parser-js": "^0.7.30",
+-        "yargs": "^16.1.1"
+-      }
+-    },
+     "karma-browserify": {
+       "version": "7.0.0",
+       "resolved": "https://registry.npmjs.org/karma-browserify/-/karma-browserify-7.0.0.tgz",
+diff --git a/package.json b/package.json
+index 347d9e95..90f6d036 100644
+--- a/package.json
++++ b/package.json
+@@ -471,7 +471,6 @@
+     "eslint-plugin-standard": "^4.0.1",
+     "http2": "^3.3.6",
+     "jasmine-core": "^3.6.0",
+-    "karma": ".",
+     "karma-browserify": "^7.0.0",
+     "karma-browserstack-launcher": "^1.6.0",
+     "karma-chai": "^0.1.0",
diff --git a/nixpkgs/pkgs/development/tools/kcat/default.nix b/nixpkgs/pkgs/development/tools/kcat/default.nix
new file mode 100644
index 000000000000..f363e4e51039
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/kcat/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, zlib, rdkafka, yajl, avro-c, libserdes, which }:
+
+stdenv.mkDerivation rec {
+  pname = "kcat";
+
+  version = "1.7.1";
+
+  src = fetchFromGitHub {
+    owner = "edenhill";
+    repo = "kcat";
+    rev = version;
+    sha256 = "sha256-pCIYNx0GYPGDYzTLq9h/LbOrJjhKWLAV4gq07Ikl5O4=";
+  };
+
+  nativeBuildInputs = [ pkg-config which ];
+
+  buildInputs = [ zlib rdkafka yajl avro-c libserdes ];
+
+  meta = with lib; {
+    description = "A generic non-JVM producer and consumer for Apache Kafka";
+    homepage = "https://github.com/edenhill/kcat";
+    license = licenses.bsd2;
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = with maintainers; [ nyarly ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/kcli/default.nix b/nixpkgs/pkgs/development/tools/kcli/default.nix
new file mode 100644
index 000000000000..fa4e88745136
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/kcli/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "kcli";
+  version = "1.8.3";
+
+  src = fetchFromGitHub {
+    owner = "cswank";
+    repo = "kcli";
+    rev = version;
+    sha256 = "0whijr2r2j5bvfy8jgmpxsa0zvwk5kfjlpnkw4za5k35q7bjffls";
+  };
+
+  vendorHash = null;
+
+  subPackages = [ "." ];
+
+  meta = with lib; {
+    description = "A kafka command line browser";
+    homepage = "https://github.com/cswank/kcli";
+    license = licenses.mit;
+    maintainers = with maintainers; [ cswank ];
+    broken = true; # vendor isn't reproducible with go > 1.17: nix-build -A $name.goModules --check
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/kdash/default.nix b/nixpkgs/pkgs/development/tools/kdash/default.nix
new file mode 100644
index 000000000000..73746875247d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/kdash/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, pkg-config
+, perl
+, python3
+, openssl
+, xorg
+, AppKit
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "kdash";
+  version = "0.6.0";
+
+  src = fetchFromGitHub {
+    owner = "kdash-rs";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-XY6aBqLHbif3RsytNm7JnDXspICJuhS7SJ+ApwTeqX4=";
+  };
+
+  nativeBuildInputs = [ perl python3 pkg-config ];
+
+  buildInputs = [ openssl xorg.xcbutil ]
+    ++ lib.optional stdenv.isDarwin AppKit;
+
+  cargoHash = "sha256-ODQf+Fvil+oBJcM38h1HdrcgtJw0b65f5auLuZtUgik=";
+
+  meta = with lib; {
+    description = "A simple and fast dashboard for Kubernetes";
+    homepage = "https://github.com/kdash-rs/kdash";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ matthiasbeyer ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/kdoctor/default.nix b/nixpkgs/pkgs/development/tools/kdoctor/default.nix
new file mode 100644
index 000000000000..6c6969482609
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/kdoctor/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, stdenv
+, fetchurl
+, unzip
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "kdoctor";
+  version = "1.1.0";
+
+  src = fetchurl {
+    url = "https://github.com/Kotlin/${finalAttrs.pname}/releases/download/v${finalAttrs.version}/kdoctor_${finalAttrs.version}+97.zip";
+    hash = "sha256-H4lpdMf1AIU8BC+6DlvcwM1wLuEl+Hd9xBli/TGFMV4=";
+  };
+
+  nativeBuildInputs = [ unzip ];
+
+  unpackPhase = ''
+    runHook preUnpack
+    unzip $src -x META-INF/*
+    runHook postUnpack
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm755 kdoctor -t $out/bin/
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Environment analysis tool for Kotlin Multiplatform Mobile";
+    longDescription = ''
+      KDoctor is a command-line tool that helps to set up the environment for
+      Kotlin Multiplatform Mobile app development.
+    '';
+    homepage = "https://github.com/Kotlin/kdoctor";
+    license = licenses.asl20;
+    mainProgram = "kdoctor";
+    maintainers = with maintainers; [ sironheart ];
+    platforms = platforms.darwin;
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/kgt/default.nix b/nixpkgs/pkgs/development/tools/kgt/default.nix
new file mode 100644
index 000000000000..cb716e317d6f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/kgt/default.nix
@@ -0,0 +1,81 @@
+{ lib, stdenv, fetchFromGitHub, bmake, cleanPackaging }:
+
+stdenv.mkDerivation {
+  pname = "kgt";
+  version = "2023-06-03";
+
+  src = fetchFromGitHub {
+    owner = "katef";
+    repo = "kgt";
+    # 2023-06-03, no version tags (yet)
+    rev = "dc881796aa691f1fddb1d01ec77216b34fe8134d";
+    hash = "sha256-Az5995/eGUHFL1C1WAdgh1td3goHUYgzWFeVFz2zb8g=";
+    fetchSubmodules = true;
+  };
+
+  outputs = [ "bin" "doc" "out" ];
+
+  nativeBuildInputs = [ bmake ];
+  enableParallelBuilding = true;
+
+  makeFlags = [ "-r" "PREFIX=$(bin)" ];
+
+  installPhase = ''
+    runHook preInstall
+
+    ${cleanPackaging.commonFileActions {
+        docFiles = [
+          "README.md"
+          "LICENCE"
+          "examples"
+          # TODO: this is just a docbook file, not a mangpage yet
+          # https://github.com/katef/kgt/issues/50
+          "man"
+          "examples"
+          "doc"
+        ];
+        noiseFiles = [
+          "build/src"
+          "build/lib"
+          "Makefile"
+          "src/**/*.c"
+          "src/**/*.h"
+          "src/**/Makefile"
+          "src/**/lexer.lx"
+          "src/**/parser.sid"
+          "src/**/parser.act"
+          "share/git"
+          "share/css"
+          "share/xsl"
+          ".gitignore"
+          ".gitmodules"
+          ".gitattributes"
+          ".github"
+        ];
+      }} $doc/share/doc/kgt
+
+    install -Dm755 build/bin/kgt $bin/bin/kgt
+    rm build/bin/kgt
+
+    runHook postInstall
+  '';
+
+  postFixup = ''
+    ${cleanPackaging.checkForRemainingFiles}
+  '';
+
+  meta = with lib; {
+    description = "BNF wrangling and railroad diagrams";
+    longDescription = ''
+      KGT: Kate's Grammar Tool
+
+      Input: Various BNF-like syntaxes
+      Output: Various BNF-like syntaxes, AST dumps, and Railroad Syntax Diagrams
+    '';
+    homepage    = "https://github.com/katef/kgt";
+    license     = licenses.bsd2;
+    platforms   = platforms.unix;
+    maintainers = with maintainers; [ Profpatsch ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/tools/kind/default.nix b/nixpkgs/pkgs/development/tools/kind/default.nix
new file mode 100644
index 000000000000..1f58fd637a6d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/kind/default.nix
@@ -0,0 +1,43 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles }:
+
+buildGoModule rec {
+  pname = "kind";
+  version = "0.20.0";
+
+  src = fetchFromGitHub {
+    rev    = "v${version}";
+    owner  = "kubernetes-sigs";
+    repo   = "kind";
+    sha256 = "sha256-5yDoxrsnmz8N0Y35juItLtyclTz+pSb75B1P716XPxU=";
+  };
+
+  patches = [
+    # fix kernel module path used by kind
+    ./kernel-module-path.patch
+  ];
+
+  vendorHash = "sha256-J/sJd2LLMBr53Z3sGrWgnWA8Ry+XqqfCEObqFyUD96g=";
+
+  CGO_ENABLED = 0;
+  GOFLAGS = [ "-trimpath" ];
+  ldflags = [ "-w" ];
+
+  doCheck = false;
+
+  subPackages = [ "." ];
+
+  nativeBuildInputs = [ installShellFiles ];
+  postInstall = ''
+    for shell in bash fish zsh; do
+      $out/bin/kind completion $shell > kind.$shell
+      installShellCompletion kind.$shell
+    done
+  '';
+
+  meta = with lib; {
+    description = "Kubernetes IN Docker - local clusters for testing Kubernetes";
+    homepage    = "https://github.com/kubernetes-sigs/kind";
+    maintainers = with maintainers; [ offline rawkode ];
+    license     = licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/kind/kernel-module-path.patch b/nixpkgs/pkgs/development/tools/kind/kernel-module-path.patch
new file mode 100644
index 000000000000..dd04c9ec3050
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/kind/kernel-module-path.patch
@@ -0,0 +1,47 @@
+diff --git a/pkg/cluster/internal/providers/common/getmodules.go b/pkg/cluster/internal/providers/common/getmodules.go
+new file mode 100644
+index 00000000..1cce5675
+--- /dev/null
++++ b/pkg/cluster/internal/providers/common/getmodules.go
+@@ -0,0 +1,15 @@
++package common
++
++import "os"
++
++const (
++	fhsKernelModulePath = "/lib/modules"
++	nixKernelModulePath = "/run/booted-system/kernel-modules/lib/modules"
++)
++
++func GetKernelModulePath() string {
++	if _, err := os.Stat(nixKernelModulePath); !os.IsNotExist(err) {
++		return nixKernelModulePath
++	}
++	return fhsKernelModulePath
++}
+diff --git a/pkg/cluster/internal/providers/docker/provision.go b/pkg/cluster/internal/providers/docker/provision.go
+index 97b05594..3aaa9830 100644
+--- a/pkg/cluster/internal/providers/docker/provision.go
++++ b/pkg/cluster/internal/providers/docker/provision.go
+@@ -230,7 +230,7 @@ func runArgsForNode(node *config.Node, clusterIPFamily config.ClusterIPFamily, n
+ 		// (please don't depend on doing this though!)
+ 		"--volume", "/var",
+ 		// some k8s things want to read /lib/modules
+-		"--volume", "/lib/modules:/lib/modules:ro",
++		"--volume", fmt.Sprintf("%s:/lib/modules:ro", common.GetKernelModulePath()),
+ 		// propagate KIND_EXPERIMENTAL_CONTAINERD_SNAPSHOTTER to the entrypoint script
+ 		"-e", "KIND_EXPERIMENTAL_CONTAINERD_SNAPSHOTTER",
+ 	},
+diff --git a/pkg/cluster/internal/providers/podman/provision.go b/pkg/cluster/internal/providers/podman/provision.go
+index 50aa7018..7e25a4de 100644
+--- a/pkg/cluster/internal/providers/podman/provision.go
++++ b/pkg/cluster/internal/providers/podman/provision.go
+@@ -203,7 +203,7 @@ func runArgsForNode(node *config.Node, clusterIPFamily config.ClusterIPFamily, n
+ 		// dev: devices on the volume will be able to be used by processes within the container
+ 		"--volume", fmt.Sprintf("%s:/var:suid,exec,dev", varVolume),
+ 		// some k8s things want to read /lib/modules
+-		"--volume", "/lib/modules:/lib/modules:ro",
++		"--volume", fmt.Sprintf("%s:/lib/modules:ro", common.GetKernelModulePath()),
+ 		// propagate KIND_EXPERIMENTAL_CONTAINERD_SNAPSHOTTER to the entrypoint script
+ 		"-e", "KIND_EXPERIMENTAL_CONTAINERD_SNAPSHOTTER",
+ 	},
diff --git a/nixpkgs/pkgs/development/tools/knightos/genkfs/default.nix b/nixpkgs/pkgs/development/tools/knightos/genkfs/default.nix
new file mode 100644
index 000000000000..fc13b68258ab
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/knightos/genkfs/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub, asciidoc, cmake, libxslt }:
+
+stdenv.mkDerivation rec {
+  pname = "genkfs";
+  version = "1.3.2";
+
+  src = fetchFromGitHub {
+    owner = "KnightOS";
+    repo = "genkfs";
+    rev = version;
+    sha256 = "0f50idd2bb73b05qjmwlirjnhr1bp43zhrgy6z949ab9a7hgaydp";
+  };
+
+  strictDeps = true;
+
+  nativeBuildInputs = [ asciidoc libxslt.bin cmake ];
+
+  hardeningDisable = [ "format" ];
+
+  meta = with lib; {
+    homepage    = "https://knightos.org/";
+    description = "Utility to write a KFS filesystem into a ROM file";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ siraben ];
+    platforms   = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/knightos/kcc/default.nix b/nixpkgs/pkgs/development/tools/knightos/kcc/default.nix
new file mode 100644
index 000000000000..90a493697c8a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/knightos/kcc/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub, cmake, bison, flex, boost }:
+
+stdenv.mkDerivation rec {
+  pname = "kcc";
+
+  version = "4.0.4";
+
+  src = fetchFromGitHub {
+    owner = "KnightOS";
+    repo = "kcc";
+    rev = version;
+    sha256 = "13sbpv8ynq8sjackv93jqxymk0bsy76c5fc0v29wz97v53q3izjp";
+  };
+
+  strictDeps = true;
+
+  nativeBuildInputs = [ bison cmake flex ];
+
+  buildInputs = [ boost ];
+
+  meta = with lib; {
+    homepage    = "https://knightos.org/";
+    description = "KnightOS C compiler";
+    license     = licenses.gpl2Plus;
+    maintainers = with maintainers; [ siraben ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/knightos/kimg/default.nix b/nixpkgs/pkgs/development/tools/knightos/kimg/default.nix
new file mode 100644
index 000000000000..70eea0f7b6a4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/knightos/kimg/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub, cmake, libxslt, asciidoc }:
+
+stdenv.mkDerivation rec {
+  pname = "kimg";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "KnightOS";
+    repo = "kimg";
+    rev = version;
+    sha256 = "040782k3rh2a5mhbfgr9gnbfis0wgxvi27vhfn7l35vrr12sw1l3";
+  };
+
+  strictDeps = true;
+
+  nativeBuildInputs = [ asciidoc cmake libxslt.bin ];
+
+  hardeningDisable = [ "format" ];
+
+  meta = with lib; {
+    homepage    = "https://knightos.org/";
+    description = "Converts image formats supported by stb_image to the KnightOS image format";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ siraben ];
+    platforms   = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/knightos/kpack/default.nix b/nixpkgs/pkgs/development/tools/knightos/kpack/default.nix
new file mode 100644
index 000000000000..447959a1e612
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/knightos/kpack/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub, cmake, asciidoc, libxslt }:
+
+stdenv.mkDerivation rec {
+  pname = "kpack";
+
+  version = "1.1.1";
+
+  src = fetchFromGitHub {
+    owner = "KnightOS";
+    repo = "kpack";
+    rev = version;
+    sha256 = "1l6bm2j45946i80qgwhrixg9sckazwb5x4051s76d3mapq9bara8";
+  };
+
+  strictDeps = true;
+
+  nativeBuildInputs = [ asciidoc cmake libxslt.bin ];
+
+  hardeningDisable = [ "fortify" ];
+
+  meta = with lib; {
+    homepage    = "https://knightos.org/";
+    description = "A tool to create or extract KnightOS packages";
+    license     = licenses.lgpl2Only;
+    maintainers = with maintainers; [ siraben ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/knightos/mkrom/default.nix b/nixpkgs/pkgs/development/tools/knightos/mkrom/default.nix
new file mode 100644
index 000000000000..21caa5b8b32a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/knightos/mkrom/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub, libxslt, asciidoc }:
+
+stdenv.mkDerivation rec {
+  pname = "mkrom";
+  version = "1.0.4";
+
+  src = fetchFromGitHub {
+    owner = "KnightOS";
+    repo = "mkrom";
+    rev = version;
+    sha256 = "sha256-YFrh0tOGiM90uvU9ZWopW1+9buHDQtetuOtPDSYYaXw=";
+  };
+
+  strictDeps = true;
+  nativeBuildInputs = [ asciidoc libxslt.bin ];
+
+  installFlags = [ "DESTDIR=$(out)" ];
+  installTargets = [ "install" "install_man" ];
+
+  meta = with lib; {
+    homepage    = "https://knightos.org/";
+    description = "Packages KnightOS distribution files into a ROM";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ siraben ];
+    platforms   = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/knightos/mktiupgrade/default.nix b/nixpkgs/pkgs/development/tools/knightos/mktiupgrade/default.nix
new file mode 100644
index 000000000000..efe8d454b2c4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/knightos/mktiupgrade/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub, cmake, libxslt, asciidoc }:
+
+stdenv.mkDerivation rec {
+  pname = "mktiupgrade";
+  version = "1.1.6";
+
+  src = fetchFromGitHub {
+    owner = "KnightOS";
+    repo = "mktiupgrade";
+    rev = version;
+    sha256 = "15y3rxvv7ipgc80wrvrpksxzdyqr21ywysc9hg6s7d3w8lqdq8dm";
+  };
+
+  strictDeps = true;
+
+  nativeBuildInputs = [ asciidoc cmake libxslt.bin ];
+
+  hardeningDisable = [ "format" ];
+
+  meta = with lib; {
+    homepage    = "https://knightos.org/";
+    description = "Makes TI calculator upgrade files from ROM dumps";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ siraben ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/knightos/patchrom/default.nix b/nixpkgs/pkgs/development/tools/knightos/patchrom/default.nix
new file mode 100644
index 000000000000..67d7159e5021
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/knightos/patchrom/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub, cmake, asciidoc, libxslt }:
+
+
+stdenv.mkDerivation rec {
+  pname = "patchrom";
+
+  version = "1.1.3";
+
+  src = fetchFromGitHub {
+    owner = "KnightOS";
+    repo = "patchrom";
+    rev = version;
+    sha256 = "0yc4q7n3k7k6rx3cxq5ddd5r0la8gw1287a74kql6gwkxjq0jmcv";
+  };
+
+  strictDeps = true;
+
+  nativeBuildInputs = [ asciidoc cmake libxslt.bin ];
+
+  hardeningDisable = [ "format" ];
+
+  meta = with lib; {
+    homepage    = "https://knightos.org/";
+    description = "Patches jumptables into TI calculator ROM files and generates an include file";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ siraben ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/knightos/regenkfs/default.nix b/nixpkgs/pkgs/development/tools/knightos/regenkfs/default.nix
new file mode 100644
index 000000000000..c50b10527f52
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/knightos/regenkfs/default.nix
@@ -0,0 +1,25 @@
+{ lib, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage {
+  pname = "regenkfs";
+  version = "unstable-2020-10-17";
+
+  src = fetchFromGitHub {
+    owner = "siraben";
+    repo = "regenkfs";
+    rev = "652155445fc39bbe6628f6b9415b5cd6863f592f";
+    sha256 = "sha256-zkwOpMNPGstn/y1l1s8blUKpBebY4Ta9hiPYxVLvG6Y=";
+  };
+
+  cargoSha256 = "sha256-05VmQdop4vdzw2XEvVdp9+RNmyZvay1Q7gKN2n8rDEQ=";
+
+  buildFeatures = [ "c-undef" ];
+
+  meta = with lib; {
+    description = "Reimplementation of genkfs in Rust";
+    homepage = "https://github.com/siraben/regenkfs";
+    license = licenses.mit;
+    maintainers = with maintainers; [ siraben ];
+    mainProgram = "regenkfs";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/knightos/remkrom/default.nix b/nixpkgs/pkgs/development/tools/knightos/remkrom/default.nix
new file mode 100644
index 000000000000..bfc01c469b59
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/knightos/remkrom/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, lib, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage {
+  pname = "remkrom";
+  version = "unstable-2020-10-17";
+
+  src = fetchFromGitHub {
+    owner = "siraben";
+    repo = "remkrom";
+    rev = "86a0b19c1d382a029ecaa96eeca7e9f76c8561d6";
+    sha256 = "sha256-DhfNfV9bd0p5dLXKgrVLyugQHK+RHsepeg0tGq5J6cI=";
+  };
+
+  cargoSha256 = "sha256-JUyIbg1SxQ7pdqypGv7Kz2MM0ZwL3M9YJekO9oSftLM=";
+
+  meta = with lib; {
+    description = "Reimplementation of mkrom in Rust";
+    homepage = "https://github.com/siraben/remkrom";
+    license = licenses.mit;
+    maintainers = with maintainers; [ siraben ];
+    mainProgram = "remkrom";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/knightos/scas/default.nix b/nixpkgs/pkgs/development/tools/knightos/scas/default.nix
new file mode 100644
index 000000000000..221c5a0d12d5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/knightos/scas/default.nix
@@ -0,0 +1,39 @@
+{ fetchFromGitHub, lib, stdenv, cmake, buildPackages, asciidoc, libxslt }:
+
+let
+  isCrossCompiling = stdenv.hostPlatform != stdenv.buildPlatform;
+in
+
+stdenv.mkDerivation rec {
+  pname = "scas";
+  version = "0.5.5";
+
+  src = fetchFromGitHub {
+    owner = "KnightOS";
+    repo = "scas";
+    rev = version;
+    sha256 = "sha256-JGQE+orVDKKJsTt8sIjPX+3yhpZkujISroQ6g19+MzU=";
+  };
+
+  cmakeFlags = [ "-DSCAS_LIBRARY=1" ];
+  postPatch = ''
+    substituteInPlace CMakeLists.txt \
+      --replace "TARGETS scas scdump scwrap" "TARGETS scas scdump scwrap generate_tables"
+  '';
+  strictDeps = true;
+
+  depsBuildBuild = lib.optionals isCrossCompiling [ buildPackages.knightos-scas ];
+  nativeBuildInputs = [ asciidoc libxslt.bin cmake ];
+  postInstall = ''
+    cd ..
+    make DESTDIR=$out install_man
+  '';
+
+  meta = with lib; {
+    homepage    = "https://knightos.org/";
+    description = "Assembler and linker for the Z80";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ siraben ];
+    platforms   = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/knightos/z80e/default.nix b/nixpkgs/pkgs/development/tools/knightos/z80e/default.nix
new file mode 100644
index 000000000000..b8aa281d413d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/knightos/z80e/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub, cmake, knightos-scas, readline, SDL2 }:
+
+stdenv.mkDerivation rec {
+  pname = "z80e";
+  version = "0.5.3";
+
+  src = fetchFromGitHub {
+    owner = "KnightOS";
+    repo = "z80e";
+    rev = version;
+    sha256 = "sha256-FQMYHxKxHEP+x98JbGyjaM0OL8QK/p3epsAWvQkv6bc=";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  buildInputs = [ readline SDL2 knightos-scas ];
+
+  cmakeFlags = [ "-Denable-sdl=YES" ];
+
+  meta = with lib; {
+    homepage    = "https://knightos.org/";
+    description = "A Z80 calculator emulator and debugger";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ siraben ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ko/default.nix b/nixpkgs/pkgs/development/tools/ko/default.nix
new file mode 100644
index 000000000000..3f9bc4c0b3fc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ko/default.nix
@@ -0,0 +1,71 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, git
+, installShellFiles
+}:
+
+buildGoModule rec {
+  pname = "ko";
+  version = "0.15.1";
+
+  src = fetchFromGitHub {
+    owner = "ko-build";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-BEKsa5mzJplcyR65/4T0MizrYxEk8/ON8SDFt8ZxqMU=";
+  };
+
+  vendorHash = null;
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  # Pin so that we don't build the several other development tools
+  subPackages = ".";
+
+  ldflags = [ "-s" "-w" "-X github.com/google/ko/pkg/commands.Version=${version}" ];
+
+  checkFlags = [
+    # requires docker daemon
+    "-skip=TestNewPublisherCanPublish"
+  ];
+
+  nativeCheckInputs = [ git ];
+  preCheck = ''
+    # Feed in all the tests for testing
+    # This is because subPackages above limits what is built to just what we
+    # want but also limits the tests
+    getGoDirs() {
+      go list ./...
+    }
+
+    # resolves some complaints from ko
+    export GOROOT="$(go env GOROOT)"
+    git init
+
+    # ko tests will fail if any of those env are set, as ko tries
+    # to make sure it can build and target multiple GOOS/GOARCH
+    unset GOOS GOARCH GOARM
+  '';
+
+  postInstall = ''
+    installShellCompletion --cmd ko \
+      --bash <($out/bin/ko completion bash) \
+      --fish <($out/bin/ko completion fish) \
+      --zsh <($out/bin/ko completion zsh)
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/ko-build/ko";
+    changelog = "https://github.com/ko-build/ko/releases/tag/v${version}";
+    description = "Build and deploy Go applications on Kubernetes";
+    longDescription = ''
+      ko is a simple, fast container image builder for Go applications.
+      It's ideal for use cases where your image contains a single Go application without any/many dependencies on the OS base image (e.g. no cgo, no OS package dependencies).
+      ko builds images by effectively executing go build on your local machine, and as such doesn't require docker to be installed. This can make it a good fit for lightweight CI/CD use cases.
+      ko also includes support for simple YAML templating which makes it a powerful tool for Kubernetes applications.
+    '';
+    license = licenses.asl20;
+    maintainers = with maintainers; [ nickcao jk vdemeester developer-guy ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/konf/default.nix b/nixpkgs/pkgs/development/tools/konf/default.nix
new file mode 100644
index 000000000000..5a1a4c7bc547
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/konf/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "konf";
+  version = "0.5.1";
+
+  src = fetchFromGitHub {
+    owner = "SimonTheLeg";
+    repo = "konf-go";
+    rev = "v${version}";
+    hash = "sha256-uzB3quuex00Gp7YRkgo7gF92oPcBoQtLwG6hqMzK6oo=";
+  };
+
+  vendorHash = "sha256-sB3j19HrTtaRqNcooqNy8vBvuzxxyGDa7MOtiGoVgN8=";
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "Lightweight and blazing fast kubeconfig manager which allows to use different kubeconfigs at the same time";
+    homepage = "https://github.com/SimonTheLeg/konf-go";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ arikgrahl ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/konstraint/default.nix b/nixpkgs/pkgs/development/tools/konstraint/default.nix
new file mode 100644
index 000000000000..b60011095f44
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/konstraint/default.nix
@@ -0,0 +1,49 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles }:
+
+buildGoModule rec {
+  pname = "konstraint";
+  version = "0.33.0";
+
+  src = fetchFromGitHub {
+    owner = "plexsystems";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-rZDLnr3FNLNOadmST70p5ZusK+p9SiUmVrnc5TrKuK4=";
+  };
+  vendorHash = "sha256-gaY3U6+Emk6La5wPyT5TvgTwPsh2Ws2t7C8B5T4c46E=";
+
+  # Exclude go within .github folder
+  excludedPackages = ".github";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  ldflags = [ "-s" "-w" "-X github.com/plexsystems/konstraint/internal/commands.version=${version}" ];
+
+  postInstall = ''
+    installShellCompletion --cmd konstraint \
+      --bash <($out/bin/konstraint completion bash) \
+      --fish <($out/bin/konstraint completion fish) \
+      --zsh <($out/bin/konstraint completion zsh)
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+    $out/bin/konstraint --help
+    $out/bin/konstraint --version | grep "${version}"
+    runHook postInstallCheck
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/plexsystems/konstraint";
+    changelog = "https://github.com/plexsystems/konstraint/releases/tag/v${version}";
+    description = "A policy management tool for interacting with Gatekeeper";
+    longDescription = ''
+      konstraint is a CLI tool to assist with the creation and management of templates and constraints when using
+      Gatekeeper. Automatically copy Rego to the ConstraintTemplate. Automatically update all ConstraintTemplates with
+      library changes. Enable writing the same policies for Conftest and Gatekeeper.
+    '';
+    license = licenses.mit;
+    maintainers = with maintainers; [ jk ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/krankerl/default.nix b/nixpkgs/pkgs/development/tools/krankerl/default.nix
new file mode 100644
index 000000000000..6951b358b6b0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/krankerl/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+, pkg-config
+, openssl
+, dbus
+, sqlite
+, file
+, makeWrapper
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "krankerl";
+  version = "0.14.0";
+
+  src = fetchFromGitHub {
+    owner = "ChristophWurst";
+    repo = "krankerl";
+    rev = "v${version}";
+    sha256 = "sha256-fFtjQFkNB5vn9nlFJI6nRdqxB9PmOGl3ySZ5LG2tgPg=";
+  };
+
+  cargoSha256 = "sha256-0V2ftZmuKXRhOFWCroYOxQqW3NFh9Uuwcg0CM1sFlcQ=";
+
+  nativeBuildInputs = [
+    pkg-config
+    makeWrapper
+  ];
+
+  buildInputs = [
+    openssl
+    dbus
+    sqlite
+  ];
+
+  nativeCheckInputs = [
+    file
+  ];
+
+  meta = with lib; {
+    description = "A CLI helper to manage, package and publish Nextcloud apps";
+    homepage = "https://github.com/ChristophWurst/krankerl";
+    license = licenses.gpl3Only;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ onny ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/krew/default.nix b/nixpkgs/pkgs/development/tools/krew/default.nix
new file mode 100644
index 000000000000..900698989a45
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/krew/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "krew";
+  version = "0.4.4";
+
+  src = fetchFromGitHub {
+    owner = "kubernetes-sigs";
+    repo = "krew";
+    rev = "v${version}";
+    sha256 = "sha256-SN6F7EmkgjtU4UHYPXWBiuXSSagjQYD6SBYBXRrSVGA=";
+  };
+
+  vendorHash = "sha256-3tEesDezIyB6005PZmOcrnEeAIvc5za3FxTmBBbKf7s=";
+
+  subPackages = [ "cmd/krew" ];
+
+  meta = with lib; {
+    description = "Package manager for kubectl plugins";
+    homepage = "https://github.com/kubernetes-sigs/krew";
+    maintainers = with maintainers; [ vdemeester ];
+    license = lib.licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ktlint/default.nix b/nixpkgs/pkgs/development/tools/ktlint/default.nix
new file mode 100644
index 000000000000..83ecedf8a640
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ktlint/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchurl, makeWrapper, jre_headless, gnused }:
+
+stdenv.mkDerivation rec {
+  pname = "ktlint";
+  version = "1.1.1";
+
+  src = fetchurl {
+    url = "https://github.com/pinterest/ktlint/releases/download/${version}/ktlint";
+    sha256 = "sha256:01cl4jaa2bq52wii1wkzsy6sw546xh8wa8kyhvnfwp34m9d32r4w";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  dontUnpack = true;
+
+  installPhase = ''
+    install -Dm755 $src $out/bin/ktlint
+  '';
+
+  postFixup = ''
+    wrapProgram $out/bin/ktlint --prefix PATH : "${lib.makeBinPath [ jre_headless gnused ]}"
+  '';
+
+  meta = with lib; {
+    description = "An anti-bikeshedding Kotlin linter with built-in formatter";
+    homepage = "https://ktlint.github.io/";
+    license = licenses.mit;
+    platforms = jre_headless.meta.platforms;
+    changelog = "https://github.com/pinterest/ktlint/blob/master/CHANGELOG.md";
+    maintainers = with maintainers; [ tadfisher SubhrajyotiSen ];
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    mainProgram = "ktlint";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/kube-linter/default.nix b/nixpkgs/pkgs/development/tools/kube-linter/default.nix
new file mode 100644
index 000000000000..141239c403f2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/kube-linter/default.nix
@@ -0,0 +1,44 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles, testers, kube-linter }:
+
+buildGoModule rec {
+  pname = "kube-linter";
+  version = "0.6.7";
+
+  src = fetchFromGitHub {
+    owner = "stackrox";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-D9QJsYaYvGjDucr0Xedg2LEqfwTxzIQBBNNFZ1m5D/U=";
+  };
+
+  vendorHash = "sha256-ARrMHjR/fOGS8EDMCKiEr3ubWjqDySb/AdX9jNYWOVA=";
+
+  ldflags = [
+    "-s" "-w" "-X golang.stackrox.io/kube-linter/internal/version.version=${version}"
+  ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  checkFlags = [ "-skip=TestCreateContextsWithIgnorePaths" ];
+
+  postInstall = ''
+    installShellCompletion --cmd kube-linter \
+      --bash <($out/bin/kube-linter completion bash) \
+      --fish <($out/bin/kube-linter completion fish) \
+      --zsh <($out/bin/kube-linter completion zsh)
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = kube-linter;
+    command = "kube-linter version";
+  };
+
+  meta = with lib; {
+    description = "A static analysis tool that checks Kubernetes YAML files and Helm charts";
+    homepage = "https://kubelinter.io";
+    changelog   = "https://github.com/stackrox/kube-linter/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ mtesseract stehessel Intuinewin ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/kube-prompt/default.nix b/nixpkgs/pkgs/development/tools/kube-prompt/default.nix
new file mode 100644
index 000000000000..52449342630e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/kube-prompt/default.nix
@@ -0,0 +1,25 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "kube-prompt";
+  version = "1.0.11";
+
+  src = fetchFromGitHub {
+    owner = "c-bata";
+    repo = "kube-prompt";
+    rev = "v${version}";
+    sha256 = "sha256-9OWsITbC7YO51QzsRwDWvojU54DiuGJhkSGwmesEj9w=";
+  };
+
+  vendorHash = "sha256-wou5inOX8vadEBCIBccwSRjtzf0GH1abwNdUu4JBvyM=";
+
+  meta = with lib; {
+    description = "An interactive kubernetes client featuring auto-complete";
+    license = licenses.mit;
+    homepage = "https://github.com/c-bata/kube-prompt";
+    maintainers = with maintainers; [ vdemeester ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/kubectx/default.nix b/nixpkgs/pkgs/development/tools/kubectx/default.nix
new file mode 100644
index 000000000000..839525c30eba
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/kubectx/default.nix
@@ -0,0 +1,34 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles }:
+
+buildGoModule rec {
+  pname = "kubectx";
+  version = "0.9.5";
+
+  src = fetchFromGitHub {
+    owner = "ahmetb";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-HVmtUhdMjbkyMpTgbsr5Mm286F9Q7zbc5rOxi7OBZEg=";
+  };
+
+  vendorHash = "sha256-3xetjviMuH+Nev12DB2WN2Wnmw1biIDAckUSGVRHQwM=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X main.version=${version}"
+  ];
+
+  postInstall = ''
+    installShellCompletion completion/*
+  '';
+
+  meta = with lib; {
+    description = "Fast way to switch between clusters and namespaces in kubectl!";
+    license = licenses.asl20;
+    homepage = "https://github.com/ahmetb/kubectx";
+    maintainers = with maintainers; [ jlesquembre ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/kubedock/default.nix b/nixpkgs/pkgs/development/tools/kubedock/default.nix
new file mode 100644
index 000000000000..39a9262a204b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/kubedock/default.nix
@@ -0,0 +1,32 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "kubedock";
+  version = "0.15.3";
+
+  src = fetchFromGitHub {
+    owner = "joyrex2001";
+    repo = "kubedock";
+    rev = version;
+    hash = "sha256-klrjXL6Crqi74uwZTC0Sp/zMn0fHcA1m8jX3ehRKNHU=";
+  };
+
+  vendorHash = "sha256-me56QyJi77dP3geNecfO19SxFyuM2CqwmJRkwomsG1o=";
+
+  # config.Build not defined as it would break r-ryantm
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/joyrex2001/kubedock/internal/config.Version=${version}"
+  ];
+
+  CGO_ENABLED = 0;
+
+  meta = with lib; {
+    description = "Minimal implementation of the Docker API that will orchestrate containers on a Kubernetes cluster";
+    homepage = "https://github.com/joyrex2001/kubedock";
+    license = licenses.mit;
+    maintainers = with maintainers; [ mausch ];
+    mainProgram = "kubedock";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/kubeprompt/default.nix b/nixpkgs/pkgs/development/tools/kubeprompt/default.nix
new file mode 100644
index 000000000000..28f628389d29
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/kubeprompt/default.nix
@@ -0,0 +1,30 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "kubeprompt";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "jlesquembre";
+    repo = pname;
+    rev = version;
+    hash = "sha256-is6Rz0tw/g4HyGJMTHj+r390HZAytVhfGVRzZ5wKZkU=";
+  };
+
+  vendorHash = "sha256-UUMulGnqfIshN2WIejZgwrWWlywj5TpnAQ4A5/d0NCE=";
+
+  ldflags = [
+    "-w"
+    "-s"
+    "-X github.com/jlesquembre/kubeprompt/pkg/version.Version=${version}"
+  ];
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Kubernetes prompt";
+    homepage = "https://github.com/jlesquembre/kubeprompt";
+    license = licenses.epl20;
+    maintainers = with maintainers; [ jlesquembre ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/kubepug/default.nix b/nixpkgs/pkgs/development/tools/kubepug/default.nix
new file mode 100644
index 000000000000..fc6f9c30daa0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/kubepug/default.nix
@@ -0,0 +1,28 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "kubepug";
+  version = "1.7.1";
+
+  src = fetchFromGitHub {
+    owner = "kubepug";
+    repo = "kubepug";
+    rev = "v${version}";
+    hash = "sha256-VNxaYQy81U0JWd6KS0jCvMexpyWL4v1cKpjxLRkxBLE=";
+  };
+
+  vendorHash = "sha256-HVsaQBd7fSZp2fOpOOmlDhYrHcHqWKiYWPFLQX0azEw=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X sigs.k8s.io/release-utils/version.gitVersion=${version}"
+  ];
+
+  meta = with lib; {
+    description = "Checks a Kubernetes cluster for objects using deprecated API versions";
+    homepage = "https://github.com/kubepug/kubepug";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ mausch ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/kubernetes-code-generator/default.nix b/nixpkgs/pkgs/development/tools/kubernetes-code-generator/default.nix
new file mode 100644
index 000000000000..69ffeaf8db31
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/kubernetes-code-generator/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "code-generator";
+  version = "0.25.4";
+
+  src = fetchFromGitHub {
+    owner = "kubernetes";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-GKF6DXvyZujInOZbV0ePUu71BEl1s/chNTN1PucdIYw=";
+  };
+
+  vendorHash = "sha256-zjgTtGen6a8TPi/DrwheTS1VQ+hd+KI7UHoyMZ4W4+k=";
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/kubernetes/code-generator";
+    changelog = "https://github.com/kubernetes/code-generator/releases/tag/v${version}";
+    description = "Kubernetes code generation";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ urandom ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/kubernetes-controller-tools/default.nix b/nixpkgs/pkgs/development/tools/kubernetes-controller-tools/default.nix
new file mode 100644
index 000000000000..bf318108c430
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/kubernetes-controller-tools/default.nix
@@ -0,0 +1,38 @@
+{ buildGoModule, lib, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "controller-tools";
+  version = "0.13.0";
+
+  src = fetchFromGitHub {
+    owner = "kubernetes-sigs";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-strTBBpmG60H38WWLakIjZHVUgKC/ajS7ZEFDhZWnlo=";
+  };
+
+  patches = [ ./version.patch ];
+
+  vendorHash = "sha256-YQfMq0p3HfLgOjAk/anZpGx/fDnvovI3HtmYdKRKq5w=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X sigs.k8s.io/controller-tools/pkg/version.version=v${version}"
+  ];
+
+  doCheck = false;
+
+  subPackages = [
+    "cmd/controller-gen"
+    "cmd/type-scaffold"
+    "cmd/helpgen"
+  ];
+
+  meta = with lib; {
+    description = "Tools to use with the Kubernetes controller-runtime libraries";
+    homepage = "https://github.com/kubernetes-sigs/controller-tools";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ michojel ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/kubernetes-controller-tools/version.patch b/nixpkgs/pkgs/development/tools/kubernetes-controller-tools/version.patch
new file mode 100644
index 000000000000..b86c3d69c3a9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/kubernetes-controller-tools/version.patch
@@ -0,0 +1,23 @@
+diff --git a/pkg/version/version.go b/pkg/version/version.go
+index 09c8efcf..b9ec798a 100644
+--- a/pkg/version/version.go
++++ b/pkg/version/version.go
+@@ -20,14 +20,12 @@ import (
+ 	"runtime/debug"
+ )
+ 
++var version string
++
+ // Version returns the version of the main module
+ func Version() string {
+-	info, ok := debug.ReadBuildInfo()
+-	if !ok || info == nil || info.Main.Version == "" {
+-		// binary has not been built with module support or doesn't contain a version.
+-		return "(unknown)"
+-	}
+-	return info.Main.Version
++	_ = debug.ReadBuildInfo
++	return version
+ }
+ 
+ // Print prints the main module version on stdout.
diff --git a/nixpkgs/pkgs/development/tools/kubeswitch/default.nix b/nixpkgs/pkgs/development/tools/kubeswitch/default.nix
new file mode 100644
index 000000000000..76aeeb2e94c8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/kubeswitch/default.nix
@@ -0,0 +1,40 @@
+{ lib, buildGoModule, fetchFromGitHub, testers, kubeswitch }:
+
+buildGoModule rec {
+  pname = "kubeswitch";
+  version = "0.8.1";
+
+  src = fetchFromGitHub {
+    owner = "danielfoehrKn";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-zf7o41YYAppRge0EMXgIN8rI5Kco4/n7BJ90b/X6L1M=";
+  };
+
+  vendorHash = null;
+
+  subPackages = [ "cmd/main.go" ];
+
+  ldflags = [
+    "-s" "-w"
+    "-X github.com/danielfoehrkn/kubeswitch/cmd/switcher.version=${version}"
+    "-X github.com/danielfoehrkn/kubeswitch/cmd/switcher.buildDate=1970-01-01"
+
+  ];
+
+  passthru.tests.version = testers.testVersion {
+    package = kubeswitch;
+  };
+
+  postInstall = ''
+    mv $out/bin/main $out/bin/switch
+  '';
+
+  meta = with lib; {
+    description = "The kubectx for operators";
+    license = licenses.asl20;
+    homepage = "https://github.com/danielfoehrKn/kubeswitch";
+    maintainers = with maintainers; [ bryanasdev000 ];
+    mainProgram = "switch";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/kubie/default.nix b/nixpkgs/pkgs/development/tools/kubie/default.nix
new file mode 100644
index 000000000000..550e99d97e08
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/kubie/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, rustPlatform, fetchFromGitHub, installShellFiles, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "kubie";
+  version = "0.23.0";
+
+  src = fetchFromGitHub {
+    rev = "v${version}";
+    owner = "sbstp";
+    repo = "kubie";
+    sha256 = "sha256-3sFtYUFUYYHDqF22XJ+pmg+fW2f03IS5CgIXjWg2+Bo=";
+  };
+
+  cargoHash = "sha256-9eUGGDBoeF6EM3Np95rFHU3luGuVZk5iE4kIYlUnEEw=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  buildInputs = lib.optionals stdenv.isDarwin [ Security ];
+
+  postInstall = ''
+    installShellCompletion completion/kubie.bash
+  '';
+
+  meta = with lib; {
+    description = "Shell independent context and namespace switcher for kubectl";
+    homepage = "https://github.com/sbstp/kubie";
+    license = with licenses; [ zlib ];
+    maintainers = with maintainers; [ illiusdope ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/kustomize/3.nix b/nixpkgs/pkgs/development/tools/kustomize/3.nix
new file mode 100644
index 000000000000..01cb1fd48615
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/kustomize/3.nix
@@ -0,0 +1,41 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "kustomize_3";
+  version = "3.10.0";
+  # rev is the commit of the tag, mainly for kustomize version command output
+  rev = "602ad8aa98e2e17f6c9119e027a09757e63c8bec";
+
+  ldflags = let t = "sigs.k8s.io/kustomize/api/provenance"; in [
+    "-s -w"
+    "-X ${t}.version=${version}"
+    "-X ${t}.gitCommit=${rev}"
+  ];
+
+  src = fetchFromGitHub {
+    owner = "kubernetes-sigs";
+    repo = "kustomize";
+    rev = "kustomize/v${version}";
+    sha256 = "sha256-ESIykbAKXdv8zM9be0zEJ71rBAzZby0aTg25NlCsIOM=";
+  };
+
+  doCheck = true;
+
+  # avoid finding test and development commands
+  sourceRoot = "${src.name}/kustomize";
+
+  vendorHash = "sha256-xLeetcmzvpILLLMhMx7oahWLxguFjG3qbYpeeWpFUlw=";
+
+  meta = with lib; {
+    description = "Customization of kubernetes YAML configurations";
+    longDescription = ''
+      kustomize lets you customize raw, template-free YAML files for
+      multiple purposes, leaving the original YAML untouched and usable
+      as is.
+    '';
+    homepage = "https://github.com/kubernetes-sigs/kustomize";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ carlosdagos vdemeester zaninime Chili-Man saschagrunert ];
+    mainProgram = "kustomize";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/kustomize/4.nix b/nixpkgs/pkgs/development/tools/kustomize/4.nix
new file mode 100644
index 000000000000..bb31aeefc39a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/kustomize/4.nix
@@ -0,0 +1,48 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles }:
+
+buildGoModule rec {
+  pname = "kustomize_4";
+  version = "4.5.7";
+
+  src = fetchFromGitHub {
+    owner = "kubernetes-sigs";
+    repo = "kustomize";
+    rev = "kustomize/v${version}";
+    hash = "sha256-AHDUwXcYkI04nOBY8jScf+OE6k9Z5OqzhtWExK1rrKg=";
+  };
+
+  # rev is the commit of the tag, mainly for kustomize version command output
+  rev = "56d82a8378dfc8dc3b3b1085e5a6e67b82966bd7";
+  ldflags = let t = "sigs.k8s.io/kustomize/api/provenance"; in
+    [
+      "-s"
+      "-X ${t}.version=${version}"
+      "-X ${t}.gitCommit=${rev}"
+    ];
+
+  # avoid finding test and development commands
+  modRoot = "kustomize";
+  proxyVendor = true;
+  vendorHash = "sha256-9+k0Me5alZDNC27Mx0Q6vp0B2SEa+Qy0FoLSr/Rahkc=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    installShellCompletion --cmd kustomize \
+      --bash <($out/bin/kustomize completion bash) \
+      --fish <($out/bin/kustomize completion fish) \
+      --zsh <($out/bin/kustomize completion zsh)
+  '';
+
+  meta = with lib; {
+    description = "Customization of kubernetes YAML configurations";
+    longDescription = ''
+      kustomize lets you customize raw, template-free YAML files for
+      multiple purposes, leaving the original YAML untouched and usable
+      as is.
+    '';
+    homepage = "https://github.com/kubernetes-sigs/kustomize";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ carlosdagos vdemeester periklis zaninime Chili-Man saschagrunert ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/kustomize/default.nix b/nixpkgs/pkgs/development/tools/kustomize/default.nix
new file mode 100644
index 000000000000..3906f98510bc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/kustomize/default.nix
@@ -0,0 +1,46 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles }:
+
+buildGoModule rec {
+  pname = "kustomize";
+  version = "5.3.0";
+
+  ldflags = let t = "sigs.k8s.io/kustomize/api/provenance"; in
+    [
+      "-s"
+      "-X ${t}.version=${version}"
+      "-X ${t}.gitCommit=${src.rev}"
+    ];
+
+  src = fetchFromGitHub {
+    owner = "kubernetes-sigs";
+    repo = pname;
+    rev = "kustomize/v${version}";
+    hash = "sha256-TleO28Q6JaOz1OAJKbvLhN99a841FEhHL15NTMhS1Oc=";
+  };
+
+  # avoid finding test and development commands
+  modRoot = "kustomize";
+  proxyVendor = true;
+  vendorHash = "sha256-6+8cwRH37lkQvnHBUlSqyNrZMfDpKbeUNJS4YMflBq0=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    installShellCompletion --cmd kustomize \
+      --bash <($out/bin/kustomize completion bash) \
+      --fish <($out/bin/kustomize completion fish) \
+      --zsh <($out/bin/kustomize completion zsh)
+  '';
+
+  meta = with lib; {
+    description = "Customization of kubernetes YAML configurations";
+    longDescription = ''
+      kustomize lets you customize raw, template-free YAML files for
+      multiple purposes, leaving the original YAML untouched and usable
+      as is.
+    '';
+    homepage = "https://github.com/kubernetes-sigs/kustomize";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ carlosdagos vdemeester periklis zaninime Chili-Man saschagrunert ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/kustomize/kustomize-sops.nix b/nixpkgs/pkgs/development/tools/kustomize/kustomize-sops.nix
new file mode 100644
index 000000000000..adc354d496de
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/kustomize/kustomize-sops.nix
@@ -0,0 +1,34 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "kustomize-sops";
+  version = "4.3.1";
+
+  src = fetchFromGitHub {
+    owner = "viaduct-ai";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-zEiRbbQzUqFHNtrzyZDNEaXT/T+TfB6KqOXkdjrCiW4=";
+  };
+
+  vendorHash = "sha256-aNrhS4oCG5DB3yjolWL49DtNqZA5dNRqQ2YPBeKQzWI=";
+
+  installPhase = ''
+    mkdir -p $out/lib/viaduct.ai/v1/ksops-exec/
+    mv $GOPATH/bin/kustomize-sops $out/lib/viaduct.ai/v1/ksops-exec/ksops-exec
+  '';
+
+  # Tests are broken in a nix environment
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A Flexible Kustomize Plugin for SOPS Encrypted Resource";
+    longDescription = ''
+      KSOPS can be used to decrypt any Kubernetes resource, but is most commonly
+      used to decrypt encrypted Kubernetes Secrets and ConfigMaps.
+    '';
+    homepage = "https://github.com/viaduct-ai/kustomize-sops";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ starcraft66 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/kythe/default.nix b/nixpkgs/pkgs/development/tools/kythe/default.nix
new file mode 100644
index 000000000000..4cac7a0e3b7b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/kythe/default.nix
@@ -0,0 +1,49 @@
+{ lib, stdenv, binutils , fetchurl, ncurses5 }:
+
+stdenv.mkDerivation rec {
+  version = "0.0.30";
+  pname = "kythe";
+
+  src = fetchurl {
+    url = "https://github.com/kythe/kythe/releases/download/v${version}/${pname}-v${version}.tar.gz";
+    sha256 = "12bwhqkxfbkh3mm4wfvqflwhmbzpmlhlfykdpy6h7p9ih9ky8w6r";
+  };
+
+  buildInputs =
+    [ binutils ];
+
+  doCheck = false;
+
+  dontBuild = true;
+
+  installPhase = ''
+    cd tools
+    for exe in http_server \
+                kythe read_entries triples verifier \
+                write_entries write_tables entrystream; do
+      echo "Patching:" $exe
+      patchelf --interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" $exe
+      patchelf --set-rpath "${lib.makeLibraryPath [ stdenv.cc.cc ncurses5 ]}" $exe
+    done
+    cd ../
+    cp -R ./ $out
+    ln -s $out/tools $out/bin
+  '';
+
+  meta = with lib; {
+    description = "A pluggable, (mostly) language-agnostic ecosystem for building tools that work with code";
+    longDescription = ''
+    The Kythe project was founded to provide and support tools and standards
+      that encourage interoperability among programs that manipulate source
+      code. At a high level, the main goal of Kythe is to provide a standard,
+      language-agnostic interchange mechanism, allowing tools that operate on
+      source code — including build systems, compilers, interpreters, static
+      analyses, editors, code-review applications, and more — to share
+      information with each other smoothly.  '';
+    homepage = "https://kythe.io/";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.asl20;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.mpickering ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/lalrpop/default.nix b/nixpkgs/pkgs/development/tools/lalrpop/default.nix
new file mode 100644
index 000000000000..32e6ec7a35b2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/lalrpop/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, substituteAll
+, stdenv
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "lalrpop";
+  version = "0.20.0";
+
+  src = fetchFromGitHub {
+    owner = "lalrpop";
+    repo = "lalrpop";
+    # there's no tag for 0.20.0
+    rev = "1584ddb243726195b540fdd2b3ccf693876288e0";
+    # rev = version;
+    hash = "sha256-aYlSR8XqJnj76Hm3MFqfA5d9L3SO/iCCKpzOES5YQGY=";
+  };
+
+  cargoHash = "sha256-JaU5ZJbmlV/HfFT/ODpB3xFjZc2XiljhEVz/dql8o/c=";
+
+  patches = [
+    (substituteAll {
+      src = ./use-correct-binary-path-in-tests.patch;
+      target_triple = stdenv.hostPlatform.rust.rustcTarget;
+    })
+  ];
+
+  buildAndTestSubdir = "lalrpop";
+
+  # there are some tests in lalrpop-test and some in lalrpop
+  checkPhase = ''
+    buildAndTestSubdir=lalrpop-test cargoCheckHook
+    cargoCheckHook
+  '';
+
+  meta = with lib; {
+    description = "LR(1) parser generator for Rust";
+    homepage = "https://github.com/lalrpop/lalrpop";
+    changelog = "https://github.com/lalrpop/lalrpop/blob/${src.rev}/RELEASES.md";
+    license = with licenses; [ asl20 /* or */ mit ];
+    mainProgram = "lalrpop";
+    maintainers = with maintainers; [ chayleaf ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/lalrpop/use-correct-binary-path-in-tests.patch b/nixpkgs/pkgs/development/tools/lalrpop/use-correct-binary-path-in-tests.patch
new file mode 100644
index 000000000000..c7e691b864e8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/lalrpop/use-correct-binary-path-in-tests.patch
@@ -0,0 +1,13 @@
+diff --git a/lalrpop-test/src/lib.rs b/lalrpop-test/src/lib.rs
+index cb4f2b0..725b0d4 100644
+--- a/lalrpop-test/src/lib.rs
++++ b/lalrpop-test/src/lib.rs
+@@ -1089,7 +1089,7 @@ fn verify_lalrpop_generates_itself() {
+     // Don't remove the .rs file that already exist
+     fs::copy(&grammar_file, &copied_grammar_file).expect("no grammar file found");
+ 
+-    assert!(Command::new("../target/debug/lalrpop")
++    assert!(Command::new("../target/@target_triple@/release/lalrpop")
+         .args([
+             "--force",
+             "--no-whitespace",
diff --git a/nixpkgs/pkgs/development/tools/language-servers/ansible-language-server/default.nix b/nixpkgs/pkgs/development/tools/language-servers/ansible-language-server/default.nix
new file mode 100644
index 000000000000..2f0907d36b7d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/language-servers/ansible-language-server/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, buildNpmPackage
+, fetchFromGitHub
+, nix-update-script
+}:
+
+buildNpmPackage rec {
+  pname = "ansible-language-server";
+  version = "1.2.1";
+
+  src = fetchFromGitHub {
+    owner = "ansible";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-e6cOWoryOxWnl8q62rlGmSgwLVnoxLMwNFoGlUZw2bQ=";
+  };
+
+  npmDepsHash = "sha256-Lzwj0/2fxa44DJBsgDPa43AbRxggqh881X/DFnlNLig=";
+  npmBuildScript = "compile";
+
+  # We remove/ignore the prepare and prepack scripts because they run the
+  # build script, and therefore are redundant.
+  #
+  # Additionally, the prepack script runs npm ci in addition to the
+  # build script. Directly before npm pack is run, we make npm unaware
+  # of the dependency cache, causing the npm ci invocation to fail,
+  # wiping out node_modules, which causes a mysterious error stating that tsc isn't installed.
+  postPatch = ''
+    sed -i '/"prepare"/d' package.json
+    sed -i '/"prepack"/d' package.json
+  '';
+
+  npmPackFlags = [ "--ignore-scripts" ];
+  passthru.updateScript = nix-update-script { };
+
+  meta = with lib; {
+    changelog = "https://github.com/ansible/ansible-language-server/releases/tag/v${version}";
+    description = "Ansible Language Server";
+    homepage = "https://github.com/ansible/ansible-language-server";
+    license = licenses.mit;
+    maintainers = with maintainers; [ hexa ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/language-servers/beancount-language-server/default.nix b/nixpkgs/pkgs/development/tools/language-servers/beancount-language-server/default.nix
new file mode 100644
index 000000000000..844bc89567d0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/language-servers/beancount-language-server/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+, stdenv
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "beancount-language-server";
+  version = "1.3.4";
+
+  src = fetchFromGitHub {
+    owner = "polarmutex";
+    repo = "beancount-language-server";
+    rev = "v${version}";
+    hash = "sha256-C44Z8JaEZvwgocaGjWT3rUAgIBtCRo0xZappMsydR7g=";
+  };
+
+  cargoHash = "sha256-NMSNCURSO1iIWHH27FI5Y0q7+Ghds8VSxRGBOp+fH6A=";
+
+  # Workaround for https://github.com/NixOS/nixpkgs/issues/166205
+  env = lib.optionalAttrs (stdenv.cc.libcxx != null) {
+    NIX_LDFLAGS = "-l${stdenv.cc.libcxx.cxxabi.libName}";
+  };
+
+  doInstallCheck = true;
+  postInstallCheck = ''
+    $out/bin/beancount-language-server --help > /dev/null
+  '';
+
+  meta = with lib; {
+    description = "A Language Server Protocol (LSP) for beancount files";
+    homepage = "https://github.com/polarmutex/beancount-language-server";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ polarmutex ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/language-servers/buf-language-server/default.nix b/nixpkgs/pkgs/development/tools/language-servers/buf-language-server/default.nix
new file mode 100644
index 000000000000..8cfa35a1639a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/language-servers/buf-language-server/default.nix
@@ -0,0 +1,27 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "buf-language-server";
+  version = "unstable-2022-08-19";
+
+  src = fetchFromGitHub {
+    owner = "bufbuild";
+    repo = pname;
+    rev = "6f08a7eed22c5a178cb55613f454319e09be112c";
+    sha256 = "sha256-UHsWrWDOC/f3YS2g533CgUkuUmz4MUQRunClQiY/YPQ=";
+  };
+
+  vendorHash = "sha256-ORzCOmBx6k1GZj6pYLhqPsdneCc7Tt1yHpI5mw5ruFU=";
+
+  ldflags = [
+    "-s"
+    "-w"
+  ];
+
+  meta = with lib; {
+    description = "Language server for protocol buffers";
+    homepage = "https://github.com/bufbuild/buf-language-server";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ svrana ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/language-servers/ccls/default.nix b/nixpkgs/pkgs/development/tools/language-servers/ccls/default.nix
new file mode 100644
index 000000000000..6afbc1d4d9ab
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/language-servers/ccls/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchFromGitHub
+, cmake, llvmPackages, rapidjson, runtimeShell }:
+
+stdenv.mkDerivation rec {
+  pname = "ccls";
+  version = "0.20230717";
+
+  src = fetchFromGitHub {
+    owner = "MaskRay";
+    repo = "ccls";
+    rev = version;
+    sha256 = "sha256-u499fHd2lyqOYXJApFdiIXHQGF+QEVlQ4E8jm5VMb3w=";
+  };
+
+  nativeBuildInputs = [ cmake llvmPackages.llvm.dev ];
+  buildInputs = with llvmPackages; [ libclang llvm rapidjson ];
+
+  cmakeFlags = [ "-DCCLS_VERSION=${version}" ];
+
+  preConfigure = ''
+    cmakeFlagsArray+=(-DCMAKE_CXX_FLAGS="-fvisibility=hidden -fno-rtti")
+  '';
+
+  clang = llvmPackages.clang;
+  shell = runtimeShell;
+
+  postFixup = ''
+    export wrapped=".ccls-wrapped"
+    mv $out/bin/ccls $out/bin/$wrapped
+    substituteAll ${./wrapper} $out/bin/ccls
+    chmod --reference=$out/bin/$wrapped $out/bin/ccls
+  '';
+
+  meta = with lib; {
+    description = "A c/c++ language server powered by clang";
+    homepage    = "https://github.com/MaskRay/ccls";
+    license     = licenses.asl20;
+    platforms   = platforms.linux ++ platforms.darwin;
+    maintainers = with maintainers; [ mic92 tobim ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/language-servers/ccls/wrapper b/nixpkgs/pkgs/development/tools/language-servers/ccls/wrapper
new file mode 100644
index 000000000000..294b60893a3f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/language-servers/ccls/wrapper
@@ -0,0 +1,9 @@
+#! @shell@ -e
+
+printf -v extraArgs ',\"%s\"' \
+  $(cat @clang@/nix-support/libc-cflags \
+        @clang@/nix-support/libcxx-cxxflags) \
+  ${NIX_CFLAGS_COMPILE}
+initString="--init={\"clang\":{\"extraArgs\":[${extraArgs:1}],\"resourceDir\":\"@clang@/resource-root\"}}"
+
+exec -a "$0" "@out@/bin/@wrapped@" "${initString}" "$@"
diff --git a/nixpkgs/pkgs/development/tools/language-servers/crystalline/default.nix b/nixpkgs/pkgs/development/tools/language-servers/crystalline/default.nix
new file mode 100644
index 000000000000..67ecfdcb7fb8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/language-servers/crystalline/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, crystal
+, fetchFromGitHub
+, llvmPackages
+, openssl
+, makeWrapper
+}:
+
+let
+  version = "0.10.0";
+in
+crystal.buildCrystalPackage {
+  pname = "crystalline";
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner = "elbywan";
+    repo = "crystalline";
+    rev = "v${version}";
+    hash = "sha256-g4k/vP7yYbTAy2bTAfr6HQhkskWfI6Zv2lxP+AZf6yw=";
+  };
+
+  format = "crystal";
+  shardsFile = ./shards.nix;
+
+  nativeBuildInputs = [ llvmPackages.llvm openssl makeWrapper ];
+
+  doCheck = false;
+  doInstallCheck = false;
+
+  crystalBinaries.crystalline = {
+    src = "src/crystalline.cr";
+    options = [ "--release" "--no-debug" "--progress" "-Dpreview_mt" ];
+  };
+
+  postInstall = ''
+    wrapProgram "$out/bin/crystalline" --prefix PATH : '${
+      lib.makeBinPath [llvmPackages.llvm.dev]
+    }'
+  '';
+
+  meta = with lib; {
+    description = "A Language Server Protocol implementation for Crystal";
+    homepage = "https://github.com/elbywan/crystalline";
+    license = licenses.mit;
+    maintainers = with maintainers; [ donovanglover ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/language-servers/crystalline/shards.nix b/nixpkgs/pkgs/development/tools/language-servers/crystalline/shards.nix
new file mode 100644
index 000000000000..2e53527fd0b8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/language-servers/crystalline/shards.nix
@@ -0,0 +1,27 @@
+{
+  bisect = {
+    url = "https://github.com/spider-gazelle/bisect.git";
+    rev = "v1.2.1";
+    sha256 = "1ddz7fag1l65m6g0vw6xa96yv00rdwjj2z69k26rvyz37qk9ccqg";
+  };
+  lsp = {
+    url = "https://github.com/elbywan/crystal-lsp.git";
+    rev = "v0.1.2";
+    sha256 = "0knw8xaq3ssyb34w77a390j79m4w6bks5hlwr8m8fci2gq9a0r6z";
+  };
+  priority-queue = {
+    url = "https://github.com/spider-gazelle/priority-queue.git";
+    rev = "v1.0.1";
+    sha256 = "1rkppd8win4yalxcvsxikqcq6sw0npdqjajqbj57m78bzlxpyjv6";
+  };
+  sentry = {
+    url = "https://github.com/samueleaton/sentry.git";
+    rev = "e448ce83486f99ef016c311e10ec0cac805cded3";
+    sha256 = "13yp7805xpd605jpfpb3srqb0psy25w7n6x9mpkcyvzhqmpnpfyq";
+  };
+  version_from_shard = {
+    url = "https://github.com/hugopl/version_from_shard.git";
+    rev = "v1.2.5";
+    sha256 = "0xizj0q4rd541rwjbx04cjifc2gfx4l5v6q2y7gmd0ndjmkgb8ik";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/language-servers/csharp-ls/default.nix b/nixpkgs/pkgs/development/tools/language-servers/csharp-ls/default.nix
new file mode 100644
index 000000000000..f3c412232136
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/language-servers/csharp-ls/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, buildDotnetGlobalTool
+, dotnetCorePackages
+}:
+let
+  inherit (dotnetCorePackages) sdk_8_0;
+in
+
+buildDotnetGlobalTool rec {
+  pname = "csharp-ls";
+  version = "0.11.0";
+
+  nugetSha256 = "sha256-zB8uJqlf8kL8jh3WNsPQF7EJpONqi23co3O/iBzfEoU=";
+
+  dotnet-sdk = sdk_8_0;
+  dotnet-runtime = sdk_8_0;
+
+  meta = with lib; {
+    description = "Roslyn-based LSP language server for C#";
+    homepage = "https://github.com/razzmatazz/csharp-language-server";
+    changelog = "https://github.com/razzmatazz/csharp-language-server/releases/tag/v${version}";
+    license = licenses.mit;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ GaetanLepage ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/language-servers/docker-compose-language-service/default.nix b/nixpkgs/pkgs/development/tools/language-servers/docker-compose-language-service/default.nix
new file mode 100644
index 000000000000..e699d8a26dff
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/language-servers/docker-compose-language-service/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, buildNpmPackage
+, fetchFromGitHub
+}:
+
+buildNpmPackage rec {
+  pname = "docker-compose-language-service";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "microsoft";
+    repo = "compose-language-service";
+    rev = "v${version}";
+    hash = "sha256-UBnABi7DMKrAFkRA8H6us/Oq4yM0mJ+kwOm0Rt8XnGw=";
+  };
+
+  npmDepsHash = "sha256-G1X9WrnwN6wM9S76PsGrPTmmiMBUKu4T2Al3HH3Wo+w=";
+
+  meta = with lib; {
+    description = "Language service for Docker Compose documents";
+    homepage = "https://github.com/microsoft/compose-language-service";
+    changelog = "https://github.com/microsoft/compose-language-service/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ natsukium ];
+    mainProgram = "docker-compose-langserver";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/language-servers/dockerfile-language-server-nodejs/default.nix b/nixpkgs/pkgs/development/tools/language-servers/dockerfile-language-server-nodejs/default.nix
new file mode 100644
index 000000000000..f8f0043650f0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/language-servers/dockerfile-language-server-nodejs/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, buildNpmPackage
+, fetchFromGitHub
+}:
+
+buildNpmPackage rec {
+  pname = "dockerfile-language-server-nodejs";
+  version = "0.11.0";
+
+  src = fetchFromGitHub {
+    owner = "rcjsuen";
+    repo = "dockerfile-language-server-nodejs";
+    rev = "v${version}";
+    hash = "sha256-xhb540hXATfSo+O+BAYt4VWOa6QHLzKHoi0qKrdBVjw=";
+  };
+
+  preBuild = ''
+    npm run prepublishOnly
+  '';
+
+  npmDepsHash = "sha256-+u4AM6wzVMhfQisw/kcwg4u0rzrbbQeIIk6qBXUM+5I=";
+
+  meta = {
+    changelog = "https://github.com/rcjsuen/dockerfile-language-server-nodejs/blob/${src.rev}/CHANGELOG.md";
+    description = "A language server for Dockerfiles powered by Node.js, TypeScript, and VSCode technologies";
+    homepage = "https://github.com/rcjsuen/dockerfile-language-server-nodejs";
+    license = lib.licenses.mit;
+    mainProgram = "docker-langserver";
+    maintainers = with lib.maintainers; [ rvolosatovs net-mist ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/language-servers/dot-language-server/default.nix b/nixpkgs/pkgs/development/tools/language-servers/dot-language-server/default.nix
new file mode 100644
index 000000000000..d269b63ecf81
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/language-servers/dot-language-server/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildNpmPackage, fetchFromGitHub }:
+
+buildNpmPackage rec {
+  pname = "dot-language-server";
+  version = "1.2.1";
+
+  src = fetchFromGitHub {
+    owner = "nikeee";
+    repo = "dot-language-server";
+    rev = "v${version}";
+    hash = "sha256-NGkobMZrvWlW/jteFowZgGUVQiNm3bS5gv5tN2485VA=";
+  };
+
+  npmDepsHash = "sha256-spskj0vqfR9GoQeKyfLsQgRp6JasZeVLCVBt6wZiSP8=";
+
+  npmBuildScript = "compile";
+
+  meta = with lib; {
+    description = "A language server for the DOT language";
+    homepage = "https://github.com/nikeee/dot-language-server";
+    license = licenses.mit;
+    maintainers = [ maintainers.marsam ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/language-servers/emmet-language-server/default.nix b/nixpkgs/pkgs/development/tools/language-servers/emmet-language-server/default.nix
new file mode 100644
index 000000000000..09e08aa6477b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/language-servers/emmet-language-server/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, buildNpmPackage
+, fetchFromGitHub
+}:
+
+buildNpmPackage rec {
+  pname = "emmet-language-server";
+  version = "2.2.0";
+
+  src = fetchFromGitHub {
+    owner = "olrtg";
+    repo = "emmet-language-server";
+    rev = "v${version}";
+    hash = "sha256-53FbZ0hC2s9o6yXPYAy0vqe4tLcYMHLqeBMNuNI8Nd0=";
+  };
+
+  npmDepsHash = "sha256-luE8iYfTsSrBVcv0sE1yYnAksE2+icx9K4yNzjUV7U4=";
+
+  # Upstream doesn't have a lockfile
+  postPatch = ''
+    cp ${./package-lock.json} ./package-lock.json
+  '';
+
+  meta = with lib; {
+    description = "A language server for emmet.io";
+    homepage = "https://github.com/olrtg/emmet-language-server";
+    changelog = "https://github.com/olrtg/emmet-language-server/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ stnley ];
+    mainProgram = "emmet-language-server";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/language-servers/emmet-language-server/package-lock.json b/nixpkgs/pkgs/development/tools/language-servers/emmet-language-server/package-lock.json
new file mode 100644
index 000000000000..c82924552b67
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/language-servers/emmet-language-server/package-lock.json
@@ -0,0 +1,896 @@
+{
+  "name": "@olrtg/emmet-language-server",
+  "version": "2.2.0",
+  "lockfileVersion": 3,
+  "requires": true,
+  "packages": {
+    "": {
+      "name": "@olrtg/emmet-language-server",
+      "version": "2.2.0",
+      "license": "MIT",
+      "dependencies": {
+        "@vscode/emmet-helper": "^2.9.2",
+        "bumpp": "^9.1.1",
+        "vscode-languageserver": "^8.1.0",
+        "vscode-languageserver-textdocument": "^1.0.8"
+      },
+      "bin": {
+        "emmet-language-server": "dist/index.js"
+      },
+      "devDependencies": {
+        "@tsconfig/recommended": "^1.0.2",
+        "typescript": "^5.1.6"
+      }
+    },
+    "node_modules/@emmetio/abbreviation": {
+      "version": "2.3.3",
+      "resolved": "https://registry.npmjs.org/@emmetio/abbreviation/-/abbreviation-2.3.3.tgz",
+      "integrity": "sha512-mgv58UrU3rh4YgbE/TzgLQwJ3pFsHHhCLqY20aJq+9comytTXUDNGG/SMtSeMJdkpxgXSXunBGLD8Boka3JyVA==",
+      "dependencies": {
+        "@emmetio/scanner": "^1.0.4"
+      }
+    },
+    "node_modules/@emmetio/css-abbreviation": {
+      "version": "2.1.8",
+      "resolved": "https://registry.npmjs.org/@emmetio/css-abbreviation/-/css-abbreviation-2.1.8.tgz",
+      "integrity": "sha512-s9yjhJ6saOO/uk1V74eifykk2CBYi01STTK3WlXWGOepyKa23ymJ053+DNQjpFcy1ingpaO7AxCcwLvHFY9tuw==",
+      "dependencies": {
+        "@emmetio/scanner": "^1.0.4"
+      }
+    },
+    "node_modules/@emmetio/scanner": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/@emmetio/scanner/-/scanner-1.0.4.tgz",
+      "integrity": "sha512-IqRuJtQff7YHHBk4G8YZ45uB9BaAGcwQeVzgj/zj8/UdOhtQpEIupUhSk8dys6spFIWVZVeK20CzGEnqR5SbqA=="
+    },
+    "node_modules/@jsdevtools/ez-spawn": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/@jsdevtools/ez-spawn/-/ez-spawn-3.0.4.tgz",
+      "integrity": "sha512-f5DRIOZf7wxogefH03RjMPMdBF7ADTWUMoOs9kaJo06EfwF+aFhMZMDZxHg/Xe12hptN9xoZjGso2fdjapBRIA==",
+      "dependencies": {
+        "call-me-maybe": "^1.0.1",
+        "cross-spawn": "^7.0.3",
+        "string-argv": "^0.3.1",
+        "type-detect": "^4.0.8"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/@nodelib/fs.scandir": {
+      "version": "2.1.5",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+      "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+      "dependencies": {
+        "@nodelib/fs.stat": "2.0.5",
+        "run-parallel": "^1.1.9"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/@nodelib/fs.stat": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+      "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/@nodelib/fs.walk": {
+      "version": "1.2.8",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+      "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+      "dependencies": {
+        "@nodelib/fs.scandir": "2.1.5",
+        "fastq": "^1.6.0"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/@tsconfig/recommended": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/@tsconfig/recommended/-/recommended-1.0.3.tgz",
+      "integrity": "sha512-+jby/Guq9H8O7NWgCv6X8VAiQE8Dr/nccsCtL74xyHKhu2Knu5EAKmOZj3nLCnLm1KooUzKY+5DsnGVqhM8/wQ==",
+      "dev": true
+    },
+    "node_modules/@vscode/emmet-helper": {
+      "version": "2.9.2",
+      "resolved": "https://registry.npmjs.org/@vscode/emmet-helper/-/emmet-helper-2.9.2.tgz",
+      "integrity": "sha512-MaGuyW+fa13q3aYsluKqclmh62Hgp0BpKIqS66fCxfOaBcVQ1OnMQxRRgQUYnCkxFISAQlkJ0qWWPyXjro1Qrg==",
+      "dependencies": {
+        "emmet": "^2.4.3",
+        "jsonc-parser": "^2.3.0",
+        "vscode-languageserver-textdocument": "^1.0.1",
+        "vscode-languageserver-types": "^3.15.1",
+        "vscode-uri": "^2.1.2"
+      }
+    },
+    "node_modules/acorn": {
+      "version": "8.10.0",
+      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz",
+      "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==",
+      "bin": {
+        "acorn": "bin/acorn"
+      },
+      "engines": {
+        "node": ">=0.4.0"
+      }
+    },
+    "node_modules/agent-base": {
+      "version": "6.0.2",
+      "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
+      "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
+      "dependencies": {
+        "debug": "4"
+      },
+      "engines": {
+        "node": ">= 6.0.0"
+      }
+    },
+    "node_modules/anymatch": {
+      "version": "3.1.3",
+      "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+      "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+      "dependencies": {
+        "normalize-path": "^3.0.0",
+        "picomatch": "^2.0.4"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/binary-extensions": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
+      "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/braces": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+      "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+      "dependencies": {
+        "fill-range": "^7.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/bumpp": {
+      "version": "9.2.0",
+      "resolved": "https://registry.npmjs.org/bumpp/-/bumpp-9.2.0.tgz",
+      "integrity": "sha512-pgp7y3jp33QTaXFVDrE0IKuZF5Y8EsIz+ywZXFALW2nD+ZD+4crxJe/GypBQBoJuZrr5dc6TGrR3wl7fk3+C6w==",
+      "dependencies": {
+        "@jsdevtools/ez-spawn": "^3.0.4",
+        "c12": "^1.4.2",
+        "cac": "^6.7.14",
+        "fast-glob": "^3.3.1",
+        "prompts": "^2.4.2",
+        "semver": "^7.5.4"
+      },
+      "bin": {
+        "bumpp": "bin/bumpp.js"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/c12": {
+      "version": "1.4.2",
+      "resolved": "https://registry.npmjs.org/c12/-/c12-1.4.2.tgz",
+      "integrity": "sha512-3IP/MuamSVRVw8W8+CHWAz9gKN4gd+voF2zm/Ln6D25C2RhytEZ1ABbC8MjKr4BR9rhoV1JQ7jJA158LDiTkLg==",
+      "dependencies": {
+        "chokidar": "^3.5.3",
+        "defu": "^6.1.2",
+        "dotenv": "^16.3.1",
+        "giget": "^1.1.2",
+        "jiti": "^1.18.2",
+        "mlly": "^1.4.0",
+        "ohash": "^1.1.2",
+        "pathe": "^1.1.1",
+        "perfect-debounce": "^1.0.0",
+        "pkg-types": "^1.0.3",
+        "rc9": "^2.1.1"
+      }
+    },
+    "node_modules/cac": {
+      "version": "6.7.14",
+      "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz",
+      "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/call-me-maybe": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz",
+      "integrity": "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ=="
+    },
+    "node_modules/chokidar": {
+      "version": "3.5.3",
+      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
+      "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+      "funding": [
+        {
+          "type": "individual",
+          "url": "https://paulmillr.com/funding/"
+        }
+      ],
+      "dependencies": {
+        "anymatch": "~3.1.2",
+        "braces": "~3.0.2",
+        "glob-parent": "~5.1.2",
+        "is-binary-path": "~2.1.0",
+        "is-glob": "~4.0.1",
+        "normalize-path": "~3.0.0",
+        "readdirp": "~3.6.0"
+      },
+      "engines": {
+        "node": ">= 8.10.0"
+      },
+      "optionalDependencies": {
+        "fsevents": "~2.3.2"
+      }
+    },
+    "node_modules/chownr": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
+      "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/colorette": {
+      "version": "2.0.20",
+      "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz",
+      "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w=="
+    },
+    "node_modules/cross-spawn": {
+      "version": "7.0.3",
+      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+      "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+      "dependencies": {
+        "path-key": "^3.1.0",
+        "shebang-command": "^2.0.0",
+        "which": "^2.0.1"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/debug": {
+      "version": "4.3.4",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+      "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+      "dependencies": {
+        "ms": "2.1.2"
+      },
+      "engines": {
+        "node": ">=6.0"
+      },
+      "peerDependenciesMeta": {
+        "supports-color": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/defu": {
+      "version": "6.1.2",
+      "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.2.tgz",
+      "integrity": "sha512-+uO4+qr7msjNNWKYPHqN/3+Dx3NFkmIzayk2L1MyZQlvgZb/J1A0fo410dpKrN2SnqFjt8n4JL8fDJE0wIgjFQ=="
+    },
+    "node_modules/destr": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.1.tgz",
+      "integrity": "sha512-M1Ob1zPSIvlARiJUkKqvAZ3VAqQY6Jcuth/pBKQ2b1dX/Qx0OnJ8Vux6J2H5PTMQeRzWrrbTu70VxBfv/OPDJA=="
+    },
+    "node_modules/dotenv": {
+      "version": "16.3.1",
+      "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz",
+      "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==",
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/motdotla/dotenv?sponsor=1"
+      }
+    },
+    "node_modules/emmet": {
+      "version": "2.4.6",
+      "resolved": "https://registry.npmjs.org/emmet/-/emmet-2.4.6.tgz",
+      "integrity": "sha512-dJfbdY/hfeTyf/Ef7Y7ubLYzkBvPQ912wPaeVYpAxvFxkEBf/+hJu4H6vhAvFN6HlxqedlfVn2x1S44FfQ97pg==",
+      "dependencies": {
+        "@emmetio/abbreviation": "^2.3.3",
+        "@emmetio/css-abbreviation": "^2.1.8"
+      }
+    },
+    "node_modules/fast-glob": {
+      "version": "3.3.1",
+      "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz",
+      "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==",
+      "dependencies": {
+        "@nodelib/fs.stat": "^2.0.2",
+        "@nodelib/fs.walk": "^1.2.3",
+        "glob-parent": "^5.1.2",
+        "merge2": "^1.3.0",
+        "micromatch": "^4.0.4"
+      },
+      "engines": {
+        "node": ">=8.6.0"
+      }
+    },
+    "node_modules/fastq": {
+      "version": "1.15.0",
+      "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
+      "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
+      "dependencies": {
+        "reusify": "^1.0.4"
+      }
+    },
+    "node_modules/fill-range": {
+      "version": "7.0.1",
+      "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+      "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+      "dependencies": {
+        "to-regex-range": "^5.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/flat": {
+      "version": "5.0.2",
+      "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
+      "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
+      "bin": {
+        "flat": "cli.js"
+      }
+    },
+    "node_modules/fs-minipass": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
+      "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
+      "dependencies": {
+        "minipass": "^3.0.0"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/fs-minipass/node_modules/minipass": {
+      "version": "3.3.6",
+      "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+      "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+      "dependencies": {
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/fsevents": {
+      "version": "2.3.3",
+      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+      "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+      "hasInstallScript": true,
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+      }
+    },
+    "node_modules/giget": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/giget/-/giget-1.1.2.tgz",
+      "integrity": "sha512-HsLoS07HiQ5oqvObOI+Qb2tyZH4Gj5nYGfF9qQcZNrPw+uEFhdXtgJr01aO2pWadGHucajYDLxxbtQkm97ON2A==",
+      "dependencies": {
+        "colorette": "^2.0.19",
+        "defu": "^6.1.2",
+        "https-proxy-agent": "^5.0.1",
+        "mri": "^1.2.0",
+        "node-fetch-native": "^1.0.2",
+        "pathe": "^1.1.0",
+        "tar": "^6.1.13"
+      },
+      "bin": {
+        "giget": "dist/cli.mjs"
+      }
+    },
+    "node_modules/glob-parent": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+      "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+      "dependencies": {
+        "is-glob": "^4.0.1"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/https-proxy-agent": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
+      "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
+      "dependencies": {
+        "agent-base": "6",
+        "debug": "4"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/is-binary-path": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+      "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+      "dependencies": {
+        "binary-extensions": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/is-extglob": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+      "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/is-glob": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+      "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+      "dependencies": {
+        "is-extglob": "^2.1.1"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/is-number": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+      "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+      "engines": {
+        "node": ">=0.12.0"
+      }
+    },
+    "node_modules/isexe": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+      "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
+    },
+    "node_modules/jiti": {
+      "version": "1.20.0",
+      "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.20.0.tgz",
+      "integrity": "sha512-3TV69ZbrvV6U5DfQimop50jE9Dl6J8O1ja1dvBbMba/sZ3YBEQqJ2VZRoQPVnhlzjNtU1vaXRZVrVjU4qtm8yA==",
+      "bin": {
+        "jiti": "bin/jiti.js"
+      }
+    },
+    "node_modules/jsonc-parser": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.3.1.tgz",
+      "integrity": "sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg=="
+    },
+    "node_modules/kleur": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
+      "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/lru-cache": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+      "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+      "dependencies": {
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/merge2": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+      "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/micromatch": {
+      "version": "4.0.5",
+      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
+      "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+      "dependencies": {
+        "braces": "^3.0.2",
+        "picomatch": "^2.3.1"
+      },
+      "engines": {
+        "node": ">=8.6"
+      }
+    },
+    "node_modules/minipass": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz",
+      "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/minizlib": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
+      "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
+      "dependencies": {
+        "minipass": "^3.0.0",
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/minizlib/node_modules/minipass": {
+      "version": "3.3.6",
+      "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+      "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+      "dependencies": {
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/mkdirp": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+      "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+      "bin": {
+        "mkdirp": "bin/cmd.js"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/mlly": {
+      "version": "1.4.2",
+      "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.4.2.tgz",
+      "integrity": "sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==",
+      "dependencies": {
+        "acorn": "^8.10.0",
+        "pathe": "^1.1.1",
+        "pkg-types": "^1.0.3",
+        "ufo": "^1.3.0"
+      }
+    },
+    "node_modules/mri": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz",
+      "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==",
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/ms": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+    },
+    "node_modules/node-fetch-native": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.4.0.tgz",
+      "integrity": "sha512-F5kfEj95kX8tkDhUCYdV8dg3/8Olx/94zB8+ZNthFs6Bz31UpUi8Xh40TN3thLwXgrwXry1pEg9lJ++tLWTcqA=="
+    },
+    "node_modules/normalize-path": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+      "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/ohash": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/ohash/-/ohash-1.1.3.tgz",
+      "integrity": "sha512-zuHHiGTYTA1sYJ/wZN+t5HKZaH23i4yI1HMwbuXm24Nid7Dv0KcuRlKoNKS9UNfAVSBlnGLcuQrnOKWOZoEGaw=="
+    },
+    "node_modules/path-key": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+      "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/pathe": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.1.tgz",
+      "integrity": "sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q=="
+    },
+    "node_modules/perfect-debounce": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz",
+      "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA=="
+    },
+    "node_modules/picomatch": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+      "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+      "engines": {
+        "node": ">=8.6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/jonschlinkert"
+      }
+    },
+    "node_modules/pkg-types": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz",
+      "integrity": "sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==",
+      "dependencies": {
+        "jsonc-parser": "^3.2.0",
+        "mlly": "^1.2.0",
+        "pathe": "^1.1.0"
+      }
+    },
+    "node_modules/pkg-types/node_modules/jsonc-parser": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz",
+      "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w=="
+    },
+    "node_modules/prompts": {
+      "version": "2.4.2",
+      "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
+      "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==",
+      "dependencies": {
+        "kleur": "^3.0.3",
+        "sisteransi": "^1.0.5"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/queue-microtask": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+      "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ]
+    },
+    "node_modules/rc9": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/rc9/-/rc9-2.1.1.tgz",
+      "integrity": "sha512-lNeOl38Ws0eNxpO3+wD1I9rkHGQyj1NU1jlzv4go2CtEnEQEUfqnIvZG7W+bC/aXdJ27n5x/yUjb6RoT9tko+Q==",
+      "dependencies": {
+        "defu": "^6.1.2",
+        "destr": "^2.0.0",
+        "flat": "^5.0.2"
+      }
+    },
+    "node_modules/readdirp": {
+      "version": "3.6.0",
+      "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+      "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+      "dependencies": {
+        "picomatch": "^2.2.1"
+      },
+      "engines": {
+        "node": ">=8.10.0"
+      }
+    },
+    "node_modules/reusify": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+      "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+      "engines": {
+        "iojs": ">=1.0.0",
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/run-parallel": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+      "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "dependencies": {
+        "queue-microtask": "^1.2.2"
+      }
+    },
+    "node_modules/semver": {
+      "version": "7.5.4",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+      "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+      "dependencies": {
+        "lru-cache": "^6.0.0"
+      },
+      "bin": {
+        "semver": "bin/semver.js"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/shebang-command": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+      "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+      "dependencies": {
+        "shebang-regex": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/shebang-regex": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+      "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/sisteransi": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
+      "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg=="
+    },
+    "node_modules/string-argv": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz",
+      "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==",
+      "engines": {
+        "node": ">=0.6.19"
+      }
+    },
+    "node_modules/tar": {
+      "version": "6.2.0",
+      "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz",
+      "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==",
+      "dependencies": {
+        "chownr": "^2.0.0",
+        "fs-minipass": "^2.0.0",
+        "minipass": "^5.0.0",
+        "minizlib": "^2.1.1",
+        "mkdirp": "^1.0.3",
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/to-regex-range": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+      "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+      "dependencies": {
+        "is-number": "^7.0.0"
+      },
+      "engines": {
+        "node": ">=8.0"
+      }
+    },
+    "node_modules/type-detect": {
+      "version": "4.0.8",
+      "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
+      "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/typescript": {
+      "version": "5.2.2",
+      "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz",
+      "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==",
+      "dev": true,
+      "bin": {
+        "tsc": "bin/tsc",
+        "tsserver": "bin/tsserver"
+      },
+      "engines": {
+        "node": ">=14.17"
+      }
+    },
+    "node_modules/ufo": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.3.0.tgz",
+      "integrity": "sha512-bRn3CsoojyNStCZe0BG0Mt4Nr/4KF+rhFlnNXybgqt5pXHNFRlqinSoQaTrGyzE4X8aHplSb+TorH+COin9Yxw=="
+    },
+    "node_modules/vscode-jsonrpc": {
+      "version": "8.1.0",
+      "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.1.0.tgz",
+      "integrity": "sha512-6TDy/abTQk+zDGYazgbIPc+4JoXdwC8NHU9Pbn4UJP1fehUyZmM4RHp5IthX7A6L5KS30PRui+j+tbbMMMafdw==",
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/vscode-languageserver": {
+      "version": "8.1.0",
+      "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-8.1.0.tgz",
+      "integrity": "sha512-eUt8f1z2N2IEUDBsKaNapkz7jl5QpskN2Y0G01T/ItMxBxw1fJwvtySGB9QMecatne8jFIWJGWI61dWjyTLQsw==",
+      "dependencies": {
+        "vscode-languageserver-protocol": "3.17.3"
+      },
+      "bin": {
+        "installServerIntoExtension": "bin/installServerIntoExtension"
+      }
+    },
+    "node_modules/vscode-languageserver-protocol": {
+      "version": "3.17.3",
+      "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.3.tgz",
+      "integrity": "sha512-924/h0AqsMtA5yK22GgMtCYiMdCOtWTSGgUOkgEDX+wk2b0x4sAfLiO4NxBxqbiVtz7K7/1/RgVrVI0NClZwqA==",
+      "dependencies": {
+        "vscode-jsonrpc": "8.1.0",
+        "vscode-languageserver-types": "3.17.3"
+      }
+    },
+    "node_modules/vscode-languageserver-textdocument": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.8.tgz",
+      "integrity": "sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q=="
+    },
+    "node_modules/vscode-languageserver-types": {
+      "version": "3.17.3",
+      "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.3.tgz",
+      "integrity": "sha512-SYU4z1dL0PyIMd4Vj8YOqFvHu7Hz/enbWtpfnVbJHU4Nd1YNYx8u0ennumc6h48GQNeOLxmwySmnADouT/AuZA=="
+    },
+    "node_modules/vscode-uri": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-2.1.2.tgz",
+      "integrity": "sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A=="
+    },
+    "node_modules/which": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+      "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+      "dependencies": {
+        "isexe": "^2.0.0"
+      },
+      "bin": {
+        "node-which": "bin/node-which"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/yallist": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+    }
+  }
+}
diff --git a/nixpkgs/pkgs/development/tools/language-servers/emmet-ls/default.nix b/nixpkgs/pkgs/development/tools/language-servers/emmet-ls/default.nix
new file mode 100644
index 000000000000..5950dc543855
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/language-servers/emmet-ls/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, buildNpmPackage
+, fetchFromGitHub
+, fetchpatch
+}:
+
+buildNpmPackage rec {
+  pname = "emmet-ls";
+  version = "0.4.1";
+
+  src = fetchFromGitHub {
+    owner = "aca";
+    repo = "emmet-ls";
+    rev = version;
+    hash = "sha256-TmsJpVLF9FZf/6uOM9LZBKC6S3bMPjA3QMiRMPaY9Dg=";
+  };
+
+  npmDepsHash = "sha256-Boaxkad7S6H+eTW5AHwBa/zj/f1oAGGSsmW1QrzuFWc=";
+
+  patches = [
+    # update package-lock.json as it is outdated
+    (fetchpatch {
+      name = "fix-lock-file-to-match-package-json.patch";
+      url = "https://github.com/aca/emmet-ls/commit/111111a2c2113f751fa12a716ccfbeae61c32079.patch";
+      hash = "sha256-/3ZbOBxScnfhL1F66cnIoD2flVeYTJ2sLxNHQ9Yrgjw=";
+    })
+  ];
+
+  meta = with lib; {
+    description = "Emmet support based on LSP";
+    homepage = "https://github.com/aca/emmet-ls";
+    changelog = "https://github.com/aca/emmet-ls/releases/tag/${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "emmet-ls";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/language-servers/fortls/default.nix b/nixpkgs/pkgs/development/tools/language-servers/fortls/default.nix
new file mode 100644
index 000000000000..74f07f84ffc1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/language-servers/fortls/default.nix
@@ -0,0 +1,33 @@
+{ buildPythonApplication
+, lib
+, fetchFromGitHub
+, setuptools-scm
+, json5
+, packaging
+}:
+
+buildPythonApplication rec {
+  pname = "fortls";
+  version = "2.13.0";
+
+  src = fetchFromGitHub {
+    owner = "fortran-lang";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-kFk2Dlnb0FXM3Ysvsy+g2AAMgpWmwzxuyJPovDm/FJU=";
+  };
+
+  nativeBuildInputs = [ setuptools-scm ];
+
+  propagatedBuildInputs = [ json5 packaging ];
+
+  doCheck = true;
+  checkPhase = "$out/bin/fortls --help 1>/dev/null";
+
+  meta = with lib; {
+    description = "Fortran Language Server ";
+    homepage = "https://github.com/fortran-lang/fortls";
+    license = [ licenses.mit ];
+    maintainers = [ maintainers.sheepforce ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/language-servers/fortran-language-server/default.nix b/nixpkgs/pkgs/development/tools/language-servers/fortran-language-server/default.nix
new file mode 100644
index 000000000000..2c606ab715b5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/language-servers/fortran-language-server/default.nix
@@ -0,0 +1,21 @@
+{ lib, fetchPypi, buildPythonApplication }:
+
+buildPythonApplication rec {
+  pname = "fortran-language-server";
+  version = "1.12.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "7Dkh7yPX4rULkzfJFxg47YxrCaxuHk+k3TOINHS9T5A=";
+  };
+
+  checkPhase = "$out/bin/fortls --help 1>/dev/null";
+  pythonImportsCheck = [ "fortls" ];
+
+  meta = with lib; {
+    description = "FORTRAN Language Server for the Language Server Protocol";
+    homepage = "https://pypi.org/project/fortran-language-server/";
+    license = [ licenses.mit ];
+    maintainers = [ maintainers.sheepforce ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/language-servers/glslls/default.nix b/nixpkgs/pkgs/development/tools/language-servers/glslls/default.nix
new file mode 100644
index 000000000000..093f6c583b16
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/language-servers/glslls/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, ninja
+, python3
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "glslls";
+  version = "0.5.0";
+
+  src = fetchFromGitHub {
+    owner = "svenstaro";
+    repo = "glsl-language-server";
+    rev = finalAttrs.version;
+    fetchSubmodules = true;
+    hash = "sha256-wi1QiqaWRh1DmIhwmu94lL/4uuMv6DnB+whM61Jg1Zs=";
+  };
+
+  nativeBuildInputs = [
+    python3
+    cmake
+    ninja
+  ];
+
+  meta = {
+    description = "A language server implementation for GLSL";
+    homepage = "https://github.com/svenstaro/glsl-language-server";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ declan ];
+    platforms = lib.platforms.linux;
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/language-servers/gopls/default.nix b/nixpkgs/pkgs/development/tools/language-servers/gopls/default.nix
new file mode 100644
index 000000000000..c7bf7da64d24
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/language-servers/gopls/default.nix
@@ -0,0 +1,29 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "gopls";
+  version = "0.14.2";
+
+  src = fetchFromGitHub {
+    owner = "golang";
+    repo = "tools";
+    rev = "gopls/v${version}";
+    hash = "sha256-hcicI5ka6m0W2Sj8IaxNsLfIc97eR8SKKp81mJvM2GM=";
+  };
+
+  modRoot = "gopls";
+  vendorHash = "sha256-jjUTRLRySRy3sfUDfg7cXRiDHk1GWHijgEA5XjS+9Xo=";
+
+  doCheck = false;
+
+  # Only build gopls, and not the integration tests or documentation generator.
+  subPackages = [ "." ];
+
+  meta = with lib; {
+    description = "Official language server for the Go language";
+    homepage = "https://github.com/golang/tools/tree/master/gopls";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ mic92 rski SuperSandro2000 zimbatm ];
+    mainProgram = "gopls";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/language-servers/helm-ls/default.nix b/nixpkgs/pkgs/development/tools/language-servers/helm-ls/default.nix
new file mode 100644
index 000000000000..841546c176e6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/language-servers/helm-ls/default.nix
@@ -0,0 +1,51 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+, testers
+, helm-ls
+}:
+
+buildGoModule rec {
+  pname = "helm-ls";
+  version = "0.0.10";
+
+  src = fetchFromGitHub {
+    owner = "mrjosh";
+    repo = "helm-ls";
+    rev = "v${version}";
+    hash = "sha256-m+kr1NIrWqQGbWxOOu2mbPEk3AQPt8KqsByylUanbTM=";
+  };
+
+  vendorHash = "sha256-8mSX7fwgxwZ8aIXfv3WxLiVH5PjSFzcxM0oekod84tA=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X main.Version=${version}"
+  ];
+
+  postInstall = ''
+    mv $out/bin/helm-ls $out/bin/helm_ls
+    installShellCompletion --cmd helm_ls \
+      --bash <($out/bin/helm_ls completion bash) \
+      --fish <($out/bin/helm_ls completion fish) \
+      --zsh <($out/bin/helm_ls completion zsh)
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = helm-ls;
+    command = "helm_ls version";
+  };
+
+  meta = with lib; {
+    description = "Language server for Helm";
+    changelog = "https://github.com/mrjosh/helm-ls/releases/tag/v${version}";
+    homepage = "https://github.com/mrjosh/helm-ls";
+    license = licenses.mit;
+    maintainers = with maintainers; [ stehessel ];
+    mainProgram = "helm_ls";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/language-servers/javascript-typescript-langserver/default.nix b/nixpkgs/pkgs/development/tools/language-servers/javascript-typescript-langserver/default.nix
new file mode 100644
index 000000000000..bdfc1d8f40c8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/language-servers/javascript-typescript-langserver/default.nix
@@ -0,0 +1,25 @@
+{ lib
+, buildNpmPackage
+, fetchFromGitHub
+}:
+
+buildNpmPackage rec {
+  pname = "javascript-typescript-langserver";
+  version = "2.11.3";
+
+  src = fetchFromGitHub {
+    owner = "sourcegraph";
+    repo = "javascript-typescript-langserver";
+    rev = "v${version}";
+    hash = "sha256-vd7Hj0jPFgK0u3CBlMfOFERmW+w9CnKIY9nvs48KqsI=";
+  };
+
+  npmDepsHash = "sha256-nHGTi1aH9YY01dzBeNyUEUEswrdjZPWaoycDVZZmIAA=";
+
+  meta = {
+    description = "JavaScript and TypeScript code intelligence through the Language Server Protocol";
+    homepage = "https://github.com/sourcegraph/javascript-typescript-langserver";
+    license = lib.licenses.asl20;
+    maintainers = with lib.maintainers; [ dywedir ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/language-servers/jq-lsp/default.nix b/nixpkgs/pkgs/development/tools/language-servers/jq-lsp/default.nix
new file mode 100644
index 000000000000..13f852790662
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/language-servers/jq-lsp/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "jq-lsp";
+  version = "0.1.2";
+
+  src = fetchFromGitHub {
+    owner = "wader";
+    repo = "jq-lsp";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-a3ZqVWG7kjWQzL1efrKc4s4D14qD/+6JM26vaduxhWg=";
+  };
+
+  vendorHash = "sha256-bIe006I1ryvIJ4hC94Ux2YVdlmDIM4oZaK/qXafYYe0=";
+
+  # based on https://github.com/wader/jq-lsp/blob/master/.goreleaser.yml
+  CGO_ENABLED = 0;
+  GOFLAGS = [ "-trimpath" ];
+  ldflags = [
+    "-s"
+    "-w"
+    "-X main.version=${version}"
+    "-X main.commit=${src.rev}"
+    "-X main.builtBy=Nix"
+  ];
+
+  meta = with lib; {
+    description = "jq language server";
+    homepage = "https://github.com/wader/jq-lsp";
+    license = licenses.mit;
+    maintainers = with maintainers; [ sysedwinistrator ];
+    mainProgram = "jq-lsp";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/language-servers/jsonnet-language-server/default.nix b/nixpkgs/pkgs/development/tools/language-servers/jsonnet-language-server/default.nix
new file mode 100644
index 000000000000..1331d02810fd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/language-servers/jsonnet-language-server/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, stdenv
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "jsonnet-language-server";
+  version = "0.13.1";
+
+  src = fetchFromGitHub {
+    owner = "grafana";
+    repo = "jsonnet-language-server";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-4tJrEipVbiYQY0L9sDH0f/qT8WY7c3md/Bar/dST+VI=";
+  };
+
+  vendorHash = "sha256-/mfwBHaouYN8JIxPz720/7MlMVh+5EEB+ocnYe4B020=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X 'main.version=${version}'"
+  ];
+
+  meta = with lib; {
+    description = "Language Server Protocol server for Jsonnet";
+    homepage = "https://github.com/grafana/jsonnet-language-server";
+    changelog = "https://github.com/grafana/jsonnet-language-server/releases/tag/v${version}";
+    license = licenses.agpl3Only;
+    maintainers = with maintainers; [ hardselius ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/language-servers/kotlin-language-server/default.nix b/nixpkgs/pkgs/development/tools/language-servers/kotlin-language-server/default.nix
new file mode 100644
index 000000000000..af7775f57246
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/language-servers/kotlin-language-server/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, fetchzip, openjdk, gradle, makeWrapper, maven }:
+
+stdenv.mkDerivation rec {
+  pname = "kotlin-language-server";
+  version = "1.3.9";
+  src = fetchzip {
+    url = "https://github.com/fwcd/kotlin-language-server/releases/download/${version}/server.zip";
+    hash = "sha256-4piXggWK/BXDXrgkvJisaO5nOs72cvU1F47rKy4z+rc=";
+  };
+
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p $out/lib
+    mkdir -p $out/bin
+    cp -r lib/* $out/lib
+    cp -r bin/* $out/bin
+  '';
+
+  nativeBuildInputs = [ gradle makeWrapper ];
+  buildInputs = [ openjdk gradle ];
+
+  postFixup = ''
+    wrapProgram "$out/bin/kotlin-language-server" --set JAVA_HOME ${openjdk} --prefix PATH : ${lib.strings.makeBinPath [ openjdk maven ] }
+  '';
+
+  meta = {
+    description = "kotlin language server";
+    longDescription = ''
+      About Kotlin code completion, linting and more for any editor/IDE
+      using the Language Server Protocol Topics'';
+    maintainers = with lib.maintainers; [ vtuan10 ];
+    homepage = "https://github.com/fwcd/kotlin-language-server";
+    changelog = "https://github.com/fwcd/kotlin-language-server/blob/${version}/CHANGELOG.md";
+    license = lib.licenses.mit;
+    platforms = lib.platforms.unix;
+    sourceProvenance = [ lib.sourceTypes.binaryBytecode ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/language-servers/lua-language-server/default.nix b/nixpkgs/pkgs/development/tools/language-servers/lua-language-server/default.nix
new file mode 100644
index 000000000000..e56d3240cafb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/language-servers/lua-language-server/default.nix
@@ -0,0 +1,92 @@
+{ lib, stdenv, fetchFromGitHub, ninja, makeWrapper, CoreFoundation, Foundation, ditto }:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "lua-language-server";
+  version = "3.7.4";
+
+  src = fetchFromGitHub {
+    owner = "luals";
+    repo = "lua-language-server";
+    rev = finalAttrs.version;
+    hash = "sha256-wJOOzKM2pgxfRqx5WZjOcCyRapz0Sub3AYm51LRYpFU=";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [
+    ninja
+    makeWrapper
+  ];
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    CoreFoundation
+    Foundation
+    ditto
+  ];
+
+  postPatch = ''
+    # filewatch tests are failing on darwin
+    # this feature is not used in lua-language-server
+    sed -i /filewatch/d 3rd/bee.lua/test/test.lua
+
+    pushd 3rd/luamake
+  '' + lib.optionalString stdenv.isDarwin ''
+    # This package uses the program clang for C and C++ files. The language
+    # is selected via the command line argument -std, but this do not work
+    # in combination with the nixpkgs clang wrapper. Therefor we have to
+    # find all c++ compiler statements and replace $cc (which expands to
+    # clang) with clang++.
+    sed -i compile/ninja/macos.ninja \
+      -e '/c++/s,$cc,clang++,' \
+      -e '/test.lua/s,= .*,= true,' \
+      -e '/ldl/s,$cc,clang++,'
+    sed -i scripts/compiler/gcc.lua \
+      -e '/cxx_/s,$cc,clang++,'
+  '';
+
+  # Work around https://github.com/NixOS/nixpkgs/issues/166205.
+  env = lib.optionalAttrs stdenv.cc.isClang {
+    NIX_LDFLAGS = "-l${stdenv.cc.libcxx.cxxabi.libName}";
+  };
+
+  ninjaFlags = [
+    "-fcompile/ninja/${if stdenv.isDarwin then "macos" else "linux"}.ninja"
+  ];
+
+  postBuild = ''
+    popd
+    ./3rd/luamake/luamake rebuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dt "$out"/share/lua-language-server/bin bin/lua-language-server
+    install -m644 -t "$out"/share/lua-language-server/bin bin/*.*
+    install -m644 -t "$out"/share/lua-language-server {debugger,main}.lua
+    cp -r locale meta script "$out"/share/lua-language-server
+
+    # necessary for --version to work:
+    install -m644 -t "$out"/share/lua-language-server changelog.md
+
+    makeWrapper "$out"/share/lua-language-server/bin/lua-language-server \
+      $out/bin/lua-language-server \
+      --add-flags "-E $out/share/lua-language-server/main.lua \
+      --logpath=\''${XDG_CACHE_HOME:-\$HOME/.cache}/lua-language-server/log \
+      --metapath=\''${XDG_CACHE_HOME:-\$HOME/.cache}/lua-language-server/meta"
+
+    runHook postInstall
+  '';
+
+  # some tests require local networking
+  __darwinAllowLocalNetworking = true;
+
+  meta = with lib; {
+    description = "A language server that offers Lua language support";
+    homepage = "https://github.com/luals/lua-language-server";
+    changelog = "https://github.com/LuaLS/lua-language-server/blob/${version}/changelog.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda gepbird sei40kr ];
+    mainProgram = "lua-language-server";
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/language-servers/metals/default.nix b/nixpkgs/pkgs/development/tools/language-servers/metals/default.nix
new file mode 100644
index 000000000000..4cd17ece484f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/language-servers/metals/default.nix
@@ -0,0 +1,42 @@
+{ stdenv, lib, coursier, jre, makeWrapper, setJavaClassPath }:
+
+stdenv.mkDerivation rec {
+  pname = "metals";
+  version = "1.2.0";
+
+  deps = stdenv.mkDerivation {
+    name = "${pname}-deps-${version}";
+    buildCommand = ''
+      export COURSIER_CACHE=$(pwd)
+      ${coursier}/bin/cs fetch org.scalameta:metals_2.13:${version} \
+        -r bintray:scalacenter/releases \
+        -r sonatype:snapshots > deps
+      mkdir -p $out/share/java
+      cp $(< deps) $out/share/java/
+    '';
+    outputHashMode = "recursive";
+    outputHashAlgo = "sha256";
+    outputHash = "sha256-nikQ/GFRWmYYzboc9TWIi9gd5kwgCxOLhvIEQWusFik=";
+  };
+
+  nativeBuildInputs = [ makeWrapper setJavaClassPath ];
+  buildInputs = [ deps ];
+
+  dontUnpack = true;
+
+  extraJavaOpts = "-XX:+UseG1GC -XX:+UseStringDeduplication -Xss4m -Xms100m";
+
+  installPhase = ''
+    mkdir -p $out/bin
+
+    makeWrapper ${jre}/bin/java $out/bin/metals \
+      --add-flags "${extraJavaOpts} -cp $CLASSPATH scala.meta.metals.Main"
+  '';
+
+  meta = with lib; {
+    homepage = "https://scalameta.org/metals/";
+    license = licenses.asl20;
+    description = "Language server for Scala";
+    maintainers = with maintainers; [ fabianhjr tomahna ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/language-servers/millet/Cargo.lock b/nixpkgs/pkgs/development/tools/language-servers/millet/Cargo.lock
new file mode 100644
index 000000000000..9275df8c1c14
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/language-servers/millet/Cargo.lock
@@ -0,0 +1,1655 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "addr2line"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb"
+dependencies = [
+ "gimli",
+]
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "aho-corasick"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "analysis"
+version = "0.14.2"
+dependencies = [
+ "config",
+ "diagnostic",
+ "elapsed",
+ "fast-hash",
+ "fmt-util",
+ "input",
+ "mlb-statics",
+ "paths",
+ "sml-file-syntax",
+ "sml-fixity",
+ "sml-hir",
+ "sml-naive-fmt",
+ "sml-namespace",
+ "sml-statics",
+ "sml-statics-types",
+ "sml-symbol-kind",
+ "sml-syntax",
+ "str-util",
+ "text-pos",
+ "text-size-util",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.75"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6"
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "backtrace"
+version = "0.3.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837"
+dependencies = [
+ "addr2line",
+ "cc",
+ "cfg-if",
+ "libc",
+ "miniz_oxide",
+ "object",
+ "rustc-demangle",
+]
+
+[[package]]
+name = "better-panic"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6fa9e1d11a268684cbd90ed36370d7577afb6c62d912ddff5c15fc34343e5036"
+dependencies = [
+ "backtrace",
+ "console",
+]
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bitflags"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07"
+
+[[package]]
+name = "cc"
+version = "1.0.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "chain-map"
+version = "0.14.2"
+dependencies = [
+ "fast-hash",
+ "str-util",
+]
+
+[[package]]
+name = "char-name"
+version = "0.1.0"
+source = "git+https://github.com/azdavis/language-util.git#50962261bfd5159c350fdd5c397af60746dcf6fe"
+
+[[package]]
+name = "cm-syntax"
+version = "0.14.2"
+dependencies = [
+ "lex-util",
+ "paths",
+ "slash-var-path",
+ "sml-file",
+ "str-util",
+ "text-size-util",
+]
+
+[[package]]
+name = "code-h2-md-map"
+version = "0.1.0"
+source = "git+https://github.com/azdavis/language-util.git#50962261bfd5159c350fdd5c397af60746dcf6fe"
+dependencies = [
+ "fast-hash",
+]
+
+[[package]]
+name = "codespan-reporting"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e"
+dependencies = [
+ "termcolor",
+ "unicode-width",
+]
+
+[[package]]
+name = "config"
+version = "0.14.2"
+dependencies = [
+ "fast-hash",
+ "serde",
+ "sml-path",
+ "str-util",
+]
+
+[[package]]
+name = "console"
+version = "0.15.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c926e00cc70edefdc64d3a5ff31cc65bb97a3460097762bd23afb4d8145fccf8"
+dependencies = [
+ "encode_unicode",
+ "lazy_static",
+ "libc",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "countme"
+version = "3.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7704b5fdd17b18ae31c4c1da5a2e0305a2bf17b5249300a9ee9ed7b72114c636"
+
+[[package]]
+name = "cov-mark"
+version = "0.14.2"
+dependencies = [
+ "fast-hash",
+ "once_cell",
+]
+
+[[package]]
+name = "crc32fast"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200"
+dependencies = [
+ "cfg-if",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "diagnostic"
+version = "0.1.0"
+source = "git+https://github.com/azdavis/language-util.git#50962261bfd5159c350fdd5c397af60746dcf6fe"
+
+[[package]]
+name = "diff"
+version = "0.1.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8"
+
+[[package]]
+name = "drop_bomb"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9bda8e21c04aca2ae33ffc2fd8c23134f3cac46db123ba97bd9d3f3b8a4a85e1"
+
+[[package]]
+name = "dunce"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b"
+
+[[package]]
+name = "elapsed"
+version = "0.1.0"
+source = "git+https://github.com/azdavis/language-util.git#50962261bfd5159c350fdd5c397af60746dcf6fe"
+dependencies = [
+ "log",
+]
+
+[[package]]
+name = "encode_unicode"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
+
+[[package]]
+name = "env_logger"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95b3f3e67048839cb0d0781f445682a35113da7121f7c949db0e2be96a4fbece"
+dependencies = [
+ "humantime",
+ "is-terminal",
+ "log",
+ "regex",
+ "termcolor",
+]
+
+[[package]]
+name = "equivalent"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
+
+[[package]]
+name = "errno"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245"
+dependencies = [
+ "libc",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "event-parse"
+version = "0.1.0"
+source = "git+https://github.com/azdavis/language-util.git#50962261bfd5159c350fdd5c397af60746dcf6fe"
+dependencies = [
+ "drop_bomb",
+ "rowan",
+ "token",
+]
+
+[[package]]
+name = "fast-hash"
+version = "0.1.0"
+source = "git+https://github.com/azdavis/language-util.git#50962261bfd5159c350fdd5c397af60746dcf6fe"
+dependencies = [
+ "rustc-hash",
+]
+
+[[package]]
+name = "fastrand"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5"
+
+[[package]]
+name = "flate2"
+version = "1.0.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide",
+]
+
+[[package]]
+name = "fmt-util"
+version = "0.1.0"
+source = "git+https://github.com/azdavis/language-util.git#50962261bfd5159c350fdd5c397af60746dcf6fe"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "getopts"
+version = "0.2.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14dbbfd5c71d70241ecf9e6f13737f7b5ce823821063188d7e46c41d371eebd5"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "gimli"
+version = "0.28.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253"
+
+[[package]]
+name = "glob"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+
+[[package]]
+name = "hashbrown"
+version = "0.14.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604"
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7"
+
+[[package]]
+name = "humantime"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
+
+[[package]]
+name = "identifier-case"
+version = "0.1.0"
+source = "git+https://github.com/azdavis/language-util.git#50962261bfd5159c350fdd5c397af60746dcf6fe"
+
+[[package]]
+name = "idna"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "idx"
+version = "0.1.0"
+source = "git+https://github.com/azdavis/language-util.git#50962261bfd5159c350fdd5c397af60746dcf6fe"
+dependencies = [
+ "nohash-hasher",
+]
+
+[[package]]
+name = "indexmap"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f"
+dependencies = [
+ "equivalent",
+ "hashbrown 0.14.3",
+]
+
+[[package]]
+name = "input"
+version = "0.14.2"
+dependencies = [
+ "cm-syntax",
+ "config",
+ "cov-mark",
+ "diagnostic",
+ "fast-hash",
+ "mlb-hir",
+ "mlb-syntax",
+ "paths",
+ "slash-var-path",
+ "sml-file",
+ "sml-file-syntax",
+ "sml-fixity",
+ "sml-namespace",
+ "sml-path",
+ "sml-syntax",
+ "str-util",
+ "text-pos",
+ "text-size-util",
+ "toml",
+ "topo-sort",
+]
+
+[[package]]
+name = "is-terminal"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b"
+dependencies = [
+ "hermit-abi",
+ "rustix",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
+
+[[package]]
+name = "la-arena"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3752f229dcc5a481d60f385fa479ff46818033d881d2d801aa27dffcfb5e8306"
+
+[[package]]
+name = "lang-srv"
+version = "0.14.2"
+dependencies = [
+ "analysis",
+ "anyhow",
+ "config",
+ "crossbeam-channel",
+ "diagnostic",
+ "elapsed",
+ "fast-hash",
+ "input",
+ "log",
+ "lsp-server",
+ "lsp-types",
+ "paths",
+ "serde",
+ "serde_json",
+ "sml-namespace",
+ "text-pos",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "lex-util"
+version = "0.14.2"
+
+[[package]]
+name = "libc"
+version = "0.2.150"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c"
+
+[[package]]
+name = "line-index"
+version = "0.1.0-pre.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2cad96769710c1745e11d4f940a8ff36000ade4bbada4285b001cb8aa2f745ce"
+dependencies = [
+ "nohash-hasher",
+ "text-size",
+]
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.4.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "969488b55f8ac402214f3f5fd243ebb7206cf82de60d3172994707a4bcc2b829"
+
+[[package]]
+name = "log"
+version = "0.4.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
+
+[[package]]
+name = "lsp-server"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b52dccdf3302eefab8c8a1273047f0a3c3dca4b527c8458d00c09484c8371928"
+dependencies = [
+ "crossbeam-channel",
+ "log",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "lsp-types"
+version = "0.94.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c66bfd44a06ae10647fe3f8214762e9369fd4248df1350924b4ef9e770a85ea1"
+dependencies = [
+ "bitflags 1.3.2",
+ "serde",
+ "serde_json",
+ "serde_repr",
+ "url",
+]
+
+[[package]]
+name = "memchr"
+version = "2.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167"
+
+[[package]]
+name = "memoffset"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "millet-cli"
+version = "0.14.2"
+dependencies = [
+ "analysis",
+ "codespan-reporting",
+ "config",
+ "diagnostic",
+ "env_logger",
+ "input",
+ "panic-hook",
+ "paths",
+ "pico-args",
+ "sml-naive-fmt",
+ "text-pos",
+ "text-size-util",
+]
+
+[[package]]
+name = "millet-ls"
+version = "0.14.2"
+dependencies = [
+ "anyhow",
+ "env_logger",
+ "lang-srv",
+ "log",
+ "panic-hook",
+]
+
+[[package]]
+name = "miniz_oxide"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "mlb-hir"
+version = "0.14.2"
+dependencies = [
+ "fast-hash",
+ "paths",
+ "sml-file",
+ "sml-namespace",
+ "str-util",
+ "text-size-util",
+]
+
+[[package]]
+name = "mlb-statics"
+version = "0.14.2"
+dependencies = [
+ "config",
+ "diagnostic",
+ "fast-hash",
+ "mlb-hir",
+ "paths",
+ "sml-comment",
+ "sml-file",
+ "sml-file-syntax",
+ "sml-fixity",
+ "sml-hir",
+ "sml-hir-lower",
+ "sml-libs",
+ "sml-namespace",
+ "sml-statics",
+ "sml-statics-types",
+ "sml-syntax",
+ "str-util",
+ "text-pos",
+ "text-size-util",
+]
+
+[[package]]
+name = "mlb-syntax"
+version = "0.14.2"
+dependencies = [
+ "lex-util",
+ "paths",
+ "slash-var-path",
+ "sml-file",
+ "sml-namespace",
+ "str-util",
+ "text-size-util",
+]
+
+[[package]]
+name = "nohash-hasher"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451"
+
+[[package]]
+name = "num-bigint"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[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-traits"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "object"
+version = "0.32.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
+
+[[package]]
+name = "panic-hook"
+version = "0.14.2"
+dependencies = [
+ "better-panic",
+]
+
+[[package]]
+name = "paths"
+version = "0.1.0"
+source = "git+https://github.com/azdavis/language-util.git#50962261bfd5159c350fdd5c397af60746dcf6fe"
+dependencies = [
+ "dunce",
+ "fast-hash",
+ "glob",
+ "idx",
+ "nohash-hasher",
+ "str-util",
+]
+
+[[package]]
+name = "pattern-match"
+version = "0.1.0"
+source = "git+https://github.com/azdavis/language-util.git#50962261bfd5159c350fdd5c397af60746dcf6fe"
+dependencies = [
+ "fast-hash",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
+
+[[package]]
+name = "pico-args"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315"
+
+[[package]]
+name = "pretty_assertions"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af7cee1a6c8a5b9208b3cb1061f10c0cb689087b3d8ce85fb9d2dd7a29b6ba66"
+dependencies = [
+ "diff",
+ "yansi",
+]
+
+[[package]]
+name = "prettyplease"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae005bd773ab59b4725093fd7df83fd7892f7d8eafb48dbd7de6e024e4215f9d"
+dependencies = [
+ "proc-macro2",
+ "syn",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.70"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39278fbbf5fb4f646ce651690877f89d1c5811a3d4acb27700c1cb3cdb78fd3b"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "pulldown-cmark"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77a1a2f1f0a7ecff9c31abbe177637be0e97a0aef46cf8738ece09327985d998"
+dependencies = [
+ "bitflags 1.3.2",
+ "getopts",
+ "memchr",
+ "unicase",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "regex"
+version = "1.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-automata",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
+
+[[package]]
+name = "rowan"
+version = "0.15.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "906057e449592587bf6724f00155bf82a6752c868d78a8fb3aa41f4e6357cfe8"
+dependencies = [
+ "countme",
+ "hashbrown 0.12.3",
+ "memoffset",
+ "rustc-hash",
+ "text-size",
+]
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
+
+[[package]]
+name = "rustc-hash"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
+
+[[package]]
+name = "rustix"
+version = "0.38.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc99bc2d4f1fed22595588a013687477aedf3cdcfb26558c559edb67b4d9b22e"
+dependencies = [
+ "bitflags 2.4.1",
+ "errno",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741"
+
+[[package]]
+name = "serde"
+version = "1.0.193"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.193"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.108"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_repr"
+version = "0.1.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3081f5ffbb02284dda55132aa26daecedd7372a42417bbbab6f14ab7d6bb9145"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde_spanned"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12022b835073e5b11e90a14f86838ceb1c8fb0325b72416845c487ac0fa95e80"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "slash-var-path"
+version = "0.14.2"
+dependencies = [
+ "fast-hash",
+ "str-util",
+]
+
+[[package]]
+name = "sml-comment"
+version = "0.14.2"
+dependencies = [
+ "sml-syntax",
+]
+
+[[package]]
+name = "sml-dynamics"
+version = "0.14.2"
+dependencies = [
+ "fast-hash",
+ "fmt-util",
+ "sml-hir",
+ "sml-statics-types",
+ "str-util",
+]
+
+[[package]]
+name = "sml-dynamics-tests"
+version = "0.14.2"
+dependencies = [
+ "config",
+ "pretty_assertions",
+ "sml-dynamics",
+ "sml-file",
+ "sml-file-syntax",
+ "sml-fixity",
+ "sml-hir",
+ "sml-path",
+ "sml-statics",
+ "sml-statics-types",
+ "str-util",
+]
+
+[[package]]
+name = "sml-file"
+version = "0.14.2"
+
+[[package]]
+name = "sml-file-syntax"
+version = "0.14.2"
+dependencies = [
+ "config",
+ "elapsed",
+ "sml-file",
+ "sml-fixity",
+ "sml-hir-lower",
+ "sml-lex",
+ "sml-parse",
+ "sml-ty-var-scope",
+ "text-pos",
+]
+
+[[package]]
+name = "sml-fixity"
+version = "0.14.2"
+dependencies = [
+ "fast-hash",
+ "once_cell",
+ "str-util",
+]
+
+[[package]]
+name = "sml-hir"
+version = "0.14.2"
+dependencies = [
+ "la-arena",
+ "sml-lab",
+ "sml-path",
+ "sml-scon",
+ "str-util",
+]
+
+[[package]]
+name = "sml-hir-lower"
+version = "0.14.2"
+dependencies = [
+ "config",
+ "cov-mark",
+ "diagnostic",
+ "fast-hash",
+ "lex-util",
+ "sml-file",
+ "sml-hir",
+ "sml-path",
+ "sml-syntax",
+ "str-util",
+ "text-size-util",
+]
+
+[[package]]
+name = "sml-lab"
+version = "0.14.2"
+dependencies = [
+ "str-util",
+]
+
+[[package]]
+name = "sml-lex"
+version = "0.14.2"
+dependencies = [
+ "cov-mark",
+ "diagnostic",
+ "lex-util",
+ "sml-syntax",
+ "text-size-util",
+ "token",
+]
+
+[[package]]
+name = "sml-libs"
+version = "0.1.0"
+source = "git+https://github.com/azdavis/sml-libs.git#0d94e3ce13f2a489dff86151f74b26074affec2a"
+
+[[package]]
+name = "sml-naive-fmt"
+version = "0.14.2"
+dependencies = [
+ "fast-hash",
+ "sml-comment",
+ "sml-syntax",
+ "text-size-util",
+]
+
+[[package]]
+name = "sml-namespace"
+version = "0.14.2"
+
+[[package]]
+name = "sml-parse"
+version = "0.14.2"
+dependencies = [
+ "diagnostic",
+ "event-parse",
+ "fast-hash",
+ "sml-fixity",
+ "sml-syntax",
+ "str-util",
+ "text-size-util",
+ "token",
+]
+
+[[package]]
+name = "sml-path"
+version = "0.14.2"
+dependencies = [
+ "str-util",
+]
+
+[[package]]
+name = "sml-scon"
+version = "0.14.2"
+dependencies = [
+ "num-bigint",
+ "num-traits",
+ "str-util",
+]
+
+[[package]]
+name = "sml-statics"
+version = "0.14.2"
+dependencies = [
+ "chain-map",
+ "config",
+ "cov-mark",
+ "diagnostic",
+ "elapsed",
+ "fast-hash",
+ "fmt-util",
+ "log",
+ "paths",
+ "pattern-match",
+ "sml-hir",
+ "sml-namespace",
+ "sml-path",
+ "sml-statics-types",
+ "sml-symbol-kind",
+ "str-util",
+ "uniq",
+]
+
+[[package]]
+name = "sml-statics-types"
+version = "0.14.2"
+dependencies = [
+ "chain-map",
+ "code-h2-md-map",
+ "config",
+ "cov-mark",
+ "drop_bomb",
+ "fast-hash",
+ "fmt-util",
+ "idx",
+ "once_cell",
+ "paths",
+ "sml-hir",
+ "sml-path",
+ "str-util",
+]
+
+[[package]]
+name = "sml-symbol-kind"
+version = "0.14.2"
+dependencies = [
+ "sml-namespace",
+ "sml-statics-types",
+]
+
+[[package]]
+name = "sml-syntax"
+version = "0.14.2"
+dependencies = [
+ "code-h2-md-map",
+ "fast-hash",
+ "rowan",
+ "syntax-gen",
+ "token",
+]
+
+[[package]]
+name = "sml-ty-var-scope"
+version = "0.14.2"
+dependencies = [
+ "fast-hash",
+ "sml-hir",
+]
+
+[[package]]
+name = "smol_str"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "74212e6bbe9a4352329b2f68ba3130c15a3f26fe88ff22dbdc6cdd58fa85e99c"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "str-util"
+version = "0.1.0"
+source = "git+https://github.com/azdavis/language-util.git#50962261bfd5159c350fdd5c397af60746dcf6fe"
+dependencies = [
+ "smol_str",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.39"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syntax-gen"
+version = "0.1.0"
+source = "git+https://github.com/azdavis/language-util.git#50962261bfd5159c350fdd5c397af60746dcf6fe"
+dependencies = [
+ "char-name",
+ "fast-hash",
+ "identifier-case",
+ "prettyplease",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "ungrammar",
+]
+
+[[package]]
+name = "tempfile"
+version = "3.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5"
+dependencies = [
+ "cfg-if",
+ "fastrand",
+ "redox_syscall",
+ "rustix",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff1bc3d3f05aff0403e8ac0d92ced918ec05b666a43f83297ccef5bea8a3d449"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "tests"
+version = "0.14.2"
+dependencies = [
+ "analysis",
+ "cm-syntax",
+ "config",
+ "cov-mark",
+ "diagnostic",
+ "env_logger",
+ "fast-hash",
+ "input",
+ "log",
+ "mlb-syntax",
+ "once_cell",
+ "paths",
+ "pretty_assertions",
+ "pulldown-cmark",
+ "serde_json",
+ "slash-var-path",
+ "sml-file",
+ "sml-syntax",
+ "str-util",
+ "text-pos",
+]
+
+[[package]]
+name = "text-pos"
+version = "0.1.0"
+source = "git+https://github.com/azdavis/language-util.git#50962261bfd5159c350fdd5c397af60746dcf6fe"
+dependencies = [
+ "line-index",
+ "text-size-util",
+]
+
+[[package]]
+name = "text-size"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f18aa187839b2bdb1ad2fa35ead8c4c2976b64e4363c386d45ac0f7ee85c9233"
+
+[[package]]
+name = "text-size-util"
+version = "0.1.0"
+source = "git+https://github.com/azdavis/language-util.git#50962261bfd5159c350fdd5c397af60746dcf6fe"
+dependencies = [
+ "text-size",
+]
+
+[[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.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+[[package]]
+name = "token"
+version = "0.1.0"
+source = "git+https://github.com/azdavis/language-util.git#50962261bfd5159c350fdd5c397af60746dcf6fe"
+
+[[package]]
+name = "toml"
+version = "0.7.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257"
+dependencies = [
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "toml_edit",
+]
+
+[[package]]
+name = "toml_datetime"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.19.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421"
+dependencies = [
+ "indexmap",
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "winnow",
+]
+
+[[package]]
+name = "topo-sort"
+version = "0.1.0"
+source = "git+https://github.com/azdavis/language-util.git#50962261bfd5159c350fdd5c397af60746dcf6fe"
+
+[[package]]
+name = "ungrammar"
+version = "1.16.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3e5df347f0bf3ec1d670aad6ca5c6a1859cd9ea61d2113125794654ccced68f"
+
+[[package]]
+name = "unicase"
+version = "2.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89"
+dependencies = [
+ "version_check",
+]
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-width"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85"
+
+[[package]]
+name = "uniq"
+version = "0.1.0"
+source = "git+https://github.com/azdavis/language-util.git#50962261bfd5159c350fdd5c397af60746dcf6fe"
+
+[[package]]
+name = "url"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "percent-encoding",
+ "serde",
+]
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[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.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596"
+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"
+
+[[package]]
+name = "windows-sys"
+version = "0.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
+dependencies = [
+ "windows-targets 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
+dependencies = [
+ "windows-targets 0.52.0",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
+dependencies = [
+ "windows_aarch64_gnullvm 0.48.5",
+ "windows_aarch64_msvc 0.48.5",
+ "windows_i686_gnu 0.48.5",
+ "windows_i686_msvc 0.48.5",
+ "windows_x86_64_gnu 0.48.5",
+ "windows_x86_64_gnullvm 0.48.5",
+ "windows_x86_64_msvc 0.48.5",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd"
+dependencies = [
+ "windows_aarch64_gnullvm 0.52.0",
+ "windows_aarch64_msvc 0.52.0",
+ "windows_i686_gnu 0.52.0",
+ "windows_i686_msvc 0.52.0",
+ "windows_x86_64_gnu 0.52.0",
+ "windows_x86_64_gnullvm 0.52.0",
+ "windows_x86_64_msvc 0.52.0",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04"
+
+[[package]]
+name = "winnow"
+version = "0.5.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "829846f3e3db426d4cee4510841b71a8e58aa2a76b1132579487ae430ccd9c7b"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "xtask"
+version = "0.14.2"
+dependencies = [
+ "anyhow",
+ "flate2",
+ "pico-args",
+ "tempfile",
+]
+
+[[package]]
+name = "yansi"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec"
diff --git a/nixpkgs/pkgs/development/tools/language-servers/millet/default.nix b/nixpkgs/pkgs/development/tools/language-servers/millet/default.nix
new file mode 100644
index 000000000000..42f932c04ef9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/language-servers/millet/default.nix
@@ -0,0 +1,38 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "millet";
+  version = "0.14.2";
+
+  src = fetchFromGitHub {
+    owner = "azdavis";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-UtdkflM9ftmSVQI4CF0PAlLlbQ9l0EHF5SzJL4sU08Q=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "char-name-0.1.0" = "sha256-zi5XI0exL0D0RMN5FlNqdXl5DDFEnvWOBZvgeUTMKKc=";
+      "sml-libs-0.1.0" = "sha256-zQrhH24XlA9SeQ+sVzaVwJwrm80TRIjFq99Vay7QEN8=";
+    };
+  };
+
+  postPatch = ''
+    rm .cargo/config.toml
+  '';
+
+  cargoBuildFlags = [ "--package" "millet-ls" ];
+
+  cargoTestFlags = [ "--package" "millet-ls" ];
+
+  meta = with lib; {
+    description = "A language server for Standard ML";
+    homepage = "https://github.com/azdavis/millet";
+    changelog = "https://github.com/azdavis/millet/blob/v${version}/docs/CHANGELOG.md";
+    license = [ licenses.mit /* or */ licenses.asl20 ];
+    maintainers = with maintainers; [ marsam ];
+    mainProgram = "millet-ls";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/language-servers/neocmakelsp/default.nix b/nixpkgs/pkgs/development/tools/language-servers/neocmakelsp/default.nix
new file mode 100644
index 000000000000..0b8c3b5f7b49
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/language-servers/neocmakelsp/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "neocmakelsp";
+  version = "0.6.19";
+
+  src = fetchFromGitHub {
+    owner = "Decodetalkers";
+    repo = "neocmakelsp";
+    rev = "v${version}";
+    hash = "sha256-nYZ9H66sA5umOTn/w/P62kJy3WHLwYPWWs1B74bTAEM=";
+  };
+
+  cargoHash = "sha256-1jpKo/fSWLf0pFgzTvnkaghz/Fdy+MJhZsKQPaJHlfs=";
+
+  meta = with lib; {
+    description = "A cmake lsp based on tower-lsp and treesitter";
+    homepage = "https://github.com/Decodetalkers/neocmakelsp";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ rewine ];
+    mainProgram = "neocmakelsp";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/language-servers/nil/default.nix b/nixpkgs/pkgs/development/tools/language-servers/nil/default.nix
new file mode 100644
index 000000000000..19822d2977fc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/language-servers/nil/default.nix
@@ -0,0 +1,37 @@
+{ lib, rustPlatform, fetchFromGitHub, nixVersions, nix-update-script }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "nil";
+  version = "2023-08-09";
+
+  src = fetchFromGitHub {
+    owner = "oxalica";
+    repo = pname;
+    rev = version;
+    hash = "sha256-fZ8KfBMcIFO/R7xaWtB85SFeuUjb9SCH8fxYBnY8068=";
+  };
+
+  cargoHash = "sha256-lyKPmzuZB9rCBI9JxhxlyDtNHLia8FXGnSgV+D/dwgo=";
+
+  nativeBuildInputs = [
+    (lib.getBin nixVersions.unstable)
+  ];
+
+  env.CFG_RELEASE = version;
+
+  # might be related to https://github.com/NixOS/nix/issues/5884
+  preBuild = ''
+    export NIX_STATE_DIR=$(mktemp -d)
+  '';
+
+  passthru.updateScript = nix-update-script { };
+
+  meta = with lib; {
+    description = "Yet another language server for Nix";
+    homepage = "https://github.com/oxalica/nil";
+    changelog = "https://github.com/oxalica/nil/releases/tag/${version}";
+    license = with licenses; [ mit asl20 ];
+    maintainers = with maintainers; [ figsoda oxalica ];
+    mainProgram = "nil";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/language-servers/nixd/default.nix b/nixpkgs/pkgs/development/tools/language-servers/nixd/default.nix
new file mode 100644
index 000000000000..601a568554be
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/language-servers/nixd/default.nix
@@ -0,0 +1,92 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, nix-update-script
+, bison
+, boost182
+, flex
+, fmt
+, gtest
+, libbacktrace
+, lit
+, llvmPackages
+, meson
+, ninja
+, nix
+, nixpkgs-fmt
+, pkg-config
+}:
+
+stdenv.mkDerivation rec {
+  pname = "nixd";
+  version = "1.2.3";
+
+  src = fetchFromGitHub {
+    owner = "nix-community";
+    repo = "nixd";
+    rev = version;
+    hash = "sha256-i/z5VnsWPWloQfdk48i+a4XaGnTMPJ6QougChkT9IWw=";
+  };
+
+  mesonBuildType = "release";
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    bison
+    flex
+  ];
+
+  nativeCheckInputs = [
+    lit
+    nixpkgs-fmt
+  ];
+
+  buildInputs = [
+    libbacktrace
+    nix
+    fmt
+    gtest
+    boost182
+    llvmPackages.llvm
+  ];
+
+  env.CXXFLAGS = "-include ${nix.dev}/include/nix/config.h";
+
+  # https://github.com/nix-community/nixd/issues/215
+  doCheck = !stdenv.isDarwin;
+
+  checkPhase = ''
+    runHook preCheck
+    dirs=(store var var/nix var/log/nix etc home)
+
+    for dir in $dirs; do
+      mkdir -p "$TMPDIR/$dir"
+    done
+
+    export NIX_STORE_DIR=$TMPDIR/store
+    export NIX_LOCALSTATE_DIR=$TMPDIR/var
+    export NIX_STATE_DIR=$TMPDIR/var/nix
+    export NIX_LOG_DIR=$TMPDIR/var/log/nix
+    export NIX_CONF_DIR=$TMPDIR/etc
+    export HOME=$TMPDIR/home
+
+    # Disable nixd regression tests, because it uses some features provided by
+    # nix, and does not correctly work in the sandbox
+    meson test --print-errorlogs server regression/nix-ast-dump
+    runHook postCheck
+  '';
+
+  passthru.updateScript = nix-update-script { };
+
+  meta = {
+    description = "Nix language server";
+    homepage = "https://github.com/nix-community/nixd";
+    changelog = "https://github.com/nix-community/nixd/releases/tag/${version}";
+    license = lib.licenses.lgpl3Plus;
+    maintainers = with lib.maintainers; [ inclyc Ruixi-rebirth marsam ];
+    mainProgram = "nixd";
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/language-servers/openscad-lsp/default.nix b/nixpkgs/pkgs/development/tools/language-servers/openscad-lsp/default.nix
new file mode 100644
index 000000000000..c09a80119897
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/language-servers/openscad-lsp/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "openscad-lsp";
+  version = "1.2.5";
+
+  src = fetchFromGitHub {
+    owner = "Leathong";
+    repo = "openscad-LSP";
+    rev = "dc1283df080b981f8da620744b0fb53b22f2eb84";
+    hash = "sha256-IPTBWX0kKmusijg4xAvS1Ysi9WydFaUWx/BkZbMvgJk=";
+  };
+
+  cargoHash = "sha256-AQpjamyHienqB501lruxk56N6r8joocWrJ5srsm5baY=";
+
+  # no tests exist
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A LSP (Language Server Protocol) server for OpenSCAD";
+    homepage = "https://github.com/Leathong/openscad-LSP";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ c-h-johnson ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/language-servers/perlnavigator/default.nix b/nixpkgs/pkgs/development/tools/language-servers/perlnavigator/default.nix
new file mode 100644
index 000000000000..adaa30747f6e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/language-servers/perlnavigator/default.nix
@@ -0,0 +1,80 @@
+{ lib
+, buildNpmPackage
+, fetchFromGitHub
+}:
+
+let
+  version = "0.6.3";
+  src = fetchFromGitHub {
+    owner = "bscan";
+    repo = "PerlNavigator";
+    rev = "v${version}";
+    hash = "sha256-CNsgFf+W7YQwAR++GwfTka4Cy8woRu02BQIJRmRAxK4=";
+  };
+  browser-ext = buildNpmPackage {
+    pname = "perlnavigator-web-server";
+    inherit version src;
+    sourceRoot = "${src.name}/browser-ext";
+    npmDepsHash = "sha256-PJKW+ni2wKw1ivkgQsL6g0jaxoYboa3XpVEEwgT4jWo=";
+    dontNpmBuild = true;
+    installPhase = ''
+      cp -r . "$out"
+    '';
+  };
+  client = buildNpmPackage {
+    pname = "perlnavigator-client";
+    inherit version src;
+    sourceRoot = "${src.name}/client";
+    npmDepsHash = "sha256-CM0l+D1VNkXBrZQHQGDiB/vAxMvpbHYoYlIugoLxSfA=";
+    dontNpmBuild = true;
+    installPhase = ''
+      cp -r . "$out"
+    '';
+  };
+  server = buildNpmPackage {
+    pname = "perlnavigator-server";
+    inherit version src;
+    sourceRoot = "${src.name}/server";
+    npmDepsHash = "sha256-TxK3ba9T97p8TBlULHUov6YX7WRl2QMq6TiNHxBoQeY=";
+    dontNpmBuild = true;
+    installPhase = ''
+      cp -r . "$out"
+    '';
+  };
+in buildNpmPackage rec {
+  pname = "perlnavigator";
+  inherit version src;
+
+  npmDepsHash = "sha256-nEinmgrbbFC+nkfTwu9djiUS+tj0VM4WKl2oqKpcGtM=";
+
+  postPatch = ''
+    sed -i /postinstall/d package.json
+
+    rm -r browser-ext client server
+    cp -r ${browser-ext} browser-ext
+    cp -r ${client} client
+    cp -r ${server} server
+    chmod +w browser-ext client server
+  '';
+
+  env = {
+    PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD = 1;
+  };
+
+  npmBuildScript = "compile";
+
+  postInstall = ''
+    cp -r ${browser-ext}/node_modules "$out/lib/node_modules/perlnavigator/browser-ext"
+    cp -r ${client}/node_modules "$out/lib/node_modules/perlnavigator/client"
+    cp -r ${server}/node_modules "$out/lib/node_modules/perlnavigator/server"
+  '';
+
+  meta = {
+    changelog = "https://github.com/bscan/PerlNavigator/blob/${src.rev}/CHANGELOG.md";
+    description = "Perl Language Server that includes syntax checking, perl critic, and code navigation";
+    homepage = "https://github.com/bscan/PerlNavigator/tree/main/server";
+    license = lib.licenses.mit;
+    mainProgram = "perlnavigator";
+    maintainers = with lib.maintainers; [ wolfangaukang ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/language-servers/postgres-lsp/default.nix b/nixpkgs/pkgs/development/tools/language-servers/postgres-lsp/default.nix
new file mode 100644
index 000000000000..6f9e41cb3c86
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/language-servers/postgres-lsp/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, protobuf
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "postgres-lsp";
+  version = "unstable-2024-01-11";
+
+  src = fetchFromGitHub {
+    owner = "supabase";
+    repo = "postgres_lsp";
+    rev = "bbc24cc541cd1619997193ed81ad887252c7e467";
+    hash = "sha256-llVsHSEUDRsqjSTGr3hGUK6jYlKPX60rpjngBk1TG2Y=";
+    fetchSubmodules = true;
+  };
+
+  cargoHash = "sha256-Npx/sSbMr4PKnNPslvjpOyKH0bpQLzW6cLNW+7H/TQ0=";
+
+  nativeBuildInputs = [
+    protobuf
+    rustPlatform.bindgenHook
+  ];
+
+  cargoBuildFlags = [ "-p=postgres_lsp" ];
+  cargoTestFlags = cargoBuildFlags;
+
+  RUSTC_BOOTSTRAP = 1; # We need rust unstable features
+
+  meta = with lib; {
+    description = "A Language Server for Postgres";
+    homepage = "https://github.com/supabase/postgres_lsp";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "postgres_lsp";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/language-servers/pylyzer/default.nix b/nixpkgs/pkgs/development/tools/language-servers/pylyzer/default.nix
new file mode 100644
index 000000000000..3f48b0b9d824
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/language-servers/pylyzer/default.nix
@@ -0,0 +1,70 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+, git
+, python3
+, makeWrapper
+, writeScriptBin
+, darwin
+, which
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "pylyzer";
+  version = "0.0.51";
+
+  src = fetchFromGitHub {
+    owner = "mtshiba";
+    repo = "pylyzer";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-TKAmIy5dP2m1iokxSqfxTj79UDkW00+se/NDGS3euwA=";
+  };
+
+  cargoHash = "sha256-035ueF42g6By+6TOGEultc8n350g3mRT00raQgWIcUM=";
+
+  nativeBuildInputs = [
+    git
+    python3
+    makeWrapper
+  ] ++ lib.optionals stdenv.isDarwin [
+    (writeScriptBin "diskutil" "")
+  ];
+
+  buildInputs = [
+    python3
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  preBuild = ''
+    export HOME=$TMPDIR
+  '';
+
+  postInstall = ''
+    mkdir -p $out/lib
+    cp -r $HOME/.erg/ $out/lib/erg
+  '';
+
+  nativeCheckInputs = [
+    which
+  ];
+
+  checkFlags = [
+    # this test causes stack overflow
+    # > thread 'exec_import' has overflowed its stack
+    "--skip=exec_import"
+  ];
+
+  postFixup = ''
+    wrapProgram $out/bin/pylyzer --set ERG_PATH $out/lib/erg
+  '';
+
+  meta = with lib; {
+    description = "A fast static code analyzer & language server for Python";
+    homepage = "https://github.com/mtshiba/pylyzer";
+    changelog = "https://github.com/mtshiba/pylyzer/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ natsukium ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/language-servers/rnix-lsp/default.nix b/nixpkgs/pkgs/development/tools/language-servers/rnix-lsp/default.nix
new file mode 100644
index 000000000000..41b50afb01d9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/language-servers/rnix-lsp/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, lib, fetchFromGitHub, rustPlatform, nix }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rnix-lsp";
+  version = "unstable-2022-11-27";
+
+  src = fetchFromGitHub {
+    owner = "nix-community";
+    repo = "rnix-lsp";
+    rev = "95d40673fe43642e2e1144341e86d0036abd95d9";
+    sha256 = "sha256-F0s0m62S5bHNVWNHLZD6SeHiLrsDx98VQbRjDyIu+qQ=";
+  };
+
+  cargoSha256 = "sha256-RKHBp+/bEH9FEPLcf1MKmTugk1A8rQU447mNm9Le3DE=";
+
+  nativeCheckInputs = lib.optional (!stdenv.isDarwin) nix;
+
+  meta = with lib; {
+    description = "A work-in-progress language server for Nix, with syntax checking and basic completion";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ];
+    mainProgram = "rnix-lsp";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/language-servers/ruff-lsp/default.nix b/nixpkgs/pkgs/development/tools/language-servers/ruff-lsp/default.nix
new file mode 100644
index 000000000000..e446df7f70e2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/language-servers/ruff-lsp/default.nix
@@ -0,0 +1,74 @@
+{ lib
+, stdenv
+, pythonOlder
+, buildPythonPackage
+, fetchFromGitHub
+, ruff
+, pygls
+, lsprotocol
+, hatchling
+, typing-extensions
+, packaging
+, pytestCheckHook
+, python-lsp-jsonrpc
+, pytest-asyncio
+}:
+
+buildPythonPackage rec {
+  pname = "ruff-lsp";
+  version = "0.0.52";
+  pyproject = true;
+  disabled = pythonOlder "3.7";
+
+  src = fetchFromGitHub {
+    owner = "astral-sh";
+    repo = "ruff-lsp";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-T18c0vKy/RUWiDjX2oScVxgVIhlj7t3M/+IoKsQ0N4w=";
+  };
+
+  postPatch = ''
+    # ruff binary added to PATH in wrapper so it's not needed
+    sed -i '/"ruff>=/d' pyproject.toml
+  '';
+
+  nativeBuildInputs = [
+    hatchling
+  ];
+
+  propagatedBuildInputs = [
+    packaging
+    pygls
+    lsprotocol
+    typing-extensions
+  ];
+
+  # fails in linux sandbox
+  doCheck = stdenv.isDarwin;
+
+  nativeCheckInputs = [
+    pytestCheckHook
+    pytest-asyncio
+    python-lsp-jsonrpc
+    ruff
+  ];
+
+  makeWrapperArgs = [
+    # prefer ruff from user's PATH, that's usually desired behavior
+    "--suffix PATH : ${lib.makeBinPath [ ruff ]}"
+
+    # Unset ambient PYTHONPATH in the wrapper, so ruff-lsp only ever runs with
+    # its own, isolated set of dependencies. This works because the correct
+    # PYTHONPATH is set in the Python script, which runs after the wrapper.
+    "--unset PYTHONPATH"
+  ];
+
+  meta = with lib; {
+    changelog = "https://github.com/astral-sh/ruff-lsp/releases/tag/v${version}";
+    description = "A Language Server Protocol implementation for Ruff";
+    homepage = "https://github.com/astral-sh/ruff-lsp";
+    license = licenses.mit;
+    mainProgram = "ruff-lsp";
+    maintainers = with maintainers; [ figsoda kalekseev ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/language-servers/rune-languageserver/default.nix b/nixpkgs/pkgs/development/tools/language-servers/rune-languageserver/default.nix
new file mode 100644
index 000000000000..32bec82979e9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/language-servers/rune-languageserver/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, rustPlatform
+, fetchCrate
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rune-languageserver";
+  version = "0.12.4";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-KVNof5s3hiCabsoypwS22FMyJIPF9aU8HNqVKPNo7Fk=";
+  };
+
+  cargoHash = "sha256-HiydWqOHz4LJJwJTclRlQfOphE1W03HTMjCtqr1XnJs=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  env = {
+    RUNE_VERSION = version;
+  };
+
+  meta = with lib; {
+    description = "A language server for the Rune Language, an embeddable dynamic programming language for Rust";
+    homepage = "https://crates.io/crates/rune-languageserver";
+    changelog = "https://github.com/rune-rs/rune/releases/tag/${version}";
+    license = with licenses; [ asl20 mit ];
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "rune-languageserver";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/language-servers/svls/default.nix b/nixpkgs/pkgs/development/tools/language-servers/svls/default.nix
new file mode 100644
index 000000000000..88cfac40bfb0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/language-servers/svls/default.nix
@@ -0,0 +1,25 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "svls";
+  version = "0.2.11";
+
+  src = fetchFromGitHub {
+    owner = "dalance";
+    repo = "svls";
+    rev = "v${version}";
+    sha256 = "sha256-pvvtJOwb9N7CzCXoLG19iuLQjABABaOUe6wKfYizgQc=";
+  };
+
+  cargoHash = "sha256-sMprdvBSfCIzoTHyUC447pyZWGgZkKa9t3A9BiGbQvY=";
+
+  meta = with lib; {
+    description = "SystemVerilog language server";
+    homepage = "https://github.com/dalance/svls";
+    license = licenses.mit;
+    maintainers = with maintainers; [ trepetti ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/language-servers/typst-lsp/Cargo.lock b/nixpkgs/pkgs/development/tools/language-servers/typst-lsp/Cargo.lock
new file mode 100644
index 000000000000..3f457a74403c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/language-servers/typst-lsp/Cargo.lock
@@ -0,0 +1,4197 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "addr2line"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb"
+dependencies = [
+ "gimli",
+]
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "ahash"
+version = "0.7.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a824f2aa7e75a0c98c5a504fceb80649e9c35265d44525b5f94de4771a395cd"
+dependencies = [
+ "getrandom",
+ "once_cell",
+ "version_check",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "android-tzdata"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
+
+[[package]]
+name = "android_system_properties"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.75"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6"
+
+[[package]]
+name = "approx"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "arrayref"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545"
+
+[[package]]
+name = "arrayvec"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711"
+
+[[package]]
+name = "async-channel"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35"
+dependencies = [
+ "concurrent-queue",
+ "event-listener",
+ "futures-core",
+]
+
+[[package]]
+name = "async-compression"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc2d0cfb2a7388d34f590e76686704c494ed7aaceed62ee1ba35cbf363abc2a5"
+dependencies = [
+ "flate2",
+ "futures-core",
+ "memchr",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "async-trait"
+version = "0.1.74"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a66537f1bb974b254c98ed142ff995236e81b9d0fe4db0575f46612cb15eb0f9"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "auto_impl"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fee3da8ef1276b0bee5dd1c7258010d8fffd31801447323115a25560e1327b89"
+dependencies = [
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "az"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b7e4c2464d97fe331d41de9d5db0def0a96f4d823b8b32a2efd503578988973"
+
+[[package]]
+name = "backtrace"
+version = "0.3.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837"
+dependencies = [
+ "addr2line",
+ "cc",
+ "cfg-if",
+ "libc",
+ "miniz_oxide",
+ "object",
+ "rustc-demangle",
+]
+
+[[package]]
+name = "base64"
+version = "0.21.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9"
+
+[[package]]
+name = "biblatex"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a3638fc10f65e552d53318e042cefa542418633451163228fcbfb1a58a0ca85"
+dependencies = [
+ "numerals",
+ "paste",
+ "strum",
+ "unicode-normalization",
+ "unscanny",
+]
+
+[[package]]
+name = "bincode"
+version = "1.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "bit-set"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1"
+dependencies = [
+ "bit-vec",
+]
+
+[[package]]
+name = "bit-vec"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bitflags"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "bpaf"
+version = "0.9.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "565688a36ddfcfc189cc927c94a6b69cc96c9f8a69030151ae8f0ed2b54a2ad3"
+dependencies = [
+ "owo-colors",
+ "supports-color",
+]
+
+[[package]]
+name = "bstr"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "542f33a8835a0884b006a0c3df3dadd99c0c3f296ed26c2fdc8028e01ad6230c"
+dependencies = [
+ "memchr",
+ "serde",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec"
+
+[[package]]
+name = "bytemuck"
+version = "1.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6"
+
+[[package]]
+name = "byteorder"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
+
+[[package]]
+name = "bytes"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223"
+
+[[package]]
+name = "camino"
+version = "1.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c59e92b5a388f549b863a7bea62612c09f24c8393560709a54558a9abdfb3b9c"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "cargo-platform"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e34637b3140142bdf929fb439e8aa4ebad7651ebf7b1080b3930aa16ac1459ff"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "cargo_metadata"
+version = "0.18.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037"
+dependencies = [
+ "camino",
+ "cargo-platform",
+ "semver",
+ "serde",
+ "serde_json",
+ "thiserror",
+]
+
+[[package]]
+name = "castaway"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2698f953def977c68f935bb0dfa959375ad4638570e969e2f1e9f433cbf1af6"
+
+[[package]]
+name = "cc"
+version = "1.0.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "chinese-number"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b3b2ffc31f235dfd4a5fa440c9b9822144183821be28aeb269e205d5541164dd"
+dependencies = [
+ "chinese-variant",
+ "enum-ordinalize",
+ "num-bigint",
+ "num-traits",
+]
+
+[[package]]
+name = "chinese-variant"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17df2e16b0704fc5413214165d1bfdd619f18b1044d5991d5c5351b05fee852e"
+
+[[package]]
+name = "chrono"
+version = "0.4.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38"
+dependencies = [
+ "android-tzdata",
+ "iana-time-zone",
+ "num-traits",
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "ciborium"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "effd91f6c78e5a4ace8a5d3c0b6bfaec9e2baaef55f3efc00e45fb2e477ee926"
+dependencies = [
+ "ciborium-io",
+ "ciborium-ll",
+ "serde",
+]
+
+[[package]]
+name = "ciborium-io"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cdf919175532b369853f5d5e20b26b43112613fd6fe7aee757e35f7a44642656"
+
+[[package]]
+name = "ciborium-ll"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "defaa24ecc093c77630e6c15e17c51f5e187bf35ee514f4e2d67baaa96dae22b"
+dependencies = [
+ "ciborium-io",
+ "half",
+]
+
+[[package]]
+name = "citationberg"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c15a0bf8014b266d11f20451dc9202d8d26180ffd8b094d73ecbe74d821f01fb"
+dependencies = [
+ "quick-xml 0.28.2",
+ "serde",
+]
+
+[[package]]
+name = "cobs"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67ba02a97a2bd10f4b59b25c7973101c79642302776489e030cd13cdab09ed15"
+
+[[package]]
+name = "color_quant"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b"
+
+[[package]]
+name = "comemo"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf5705468fa80602ee6a5f9318306e6c428bffd53e43209a78bc05e6e667c6f4"
+dependencies = [
+ "comemo-macros",
+ "siphasher 1.0.0",
+]
+
+[[package]]
+name = "comemo-macros"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54af6ac68ada2d161fa9cc1ab52676228e340866d094d6542107e74b82acc095"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "concurrent-queue"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d16048cd947b08fa32c24458a22f5dc5e835264f689f4f5653210c69fd107363"
+dependencies = [
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "core-foundation"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f"
+
+[[package]]
+name = "core_maths"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3b02505ccb8c50b0aa21ace0fc08c3e53adebd4e58caa18a36152803c7709a3"
+dependencies = [
+ "libm",
+]
+
+[[package]]
+name = "crc32fast"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200"
+dependencies = [
+ "cfg-if",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
+dependencies = [
+ "cfg-if",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7"
+dependencies = [
+ "autocfg",
+ "cfg-if",
+ "crossbeam-utils",
+ "memoffset",
+ "scopeguard",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "csv"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac574ff4d437a7b5ad237ef331c17ccca63c46479e5b5453eb8e10bb99a759fe"
+dependencies = [
+ "csv-core",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "csv-core"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5efa2b3d7902f4b634a20cae3c9c4e6209dc4779feb6863329607560143efa70"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "curl"
+version = "0.4.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "509bd11746c7ac09ebd19f0b17782eae80aadee26237658a6b4808afb5c11a22"
+dependencies = [
+ "curl-sys",
+ "libc",
+ "openssl-probe",
+ "openssl-sys",
+ "schannel",
+ "socket2 0.4.10",
+ "winapi",
+]
+
+[[package]]
+name = "curl-sys"
+version = "0.4.68+curl-8.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4a0d18d88360e374b16b2273c832b5e57258ffc1d4aa4f96b108e0738d5752f"
+dependencies = [
+ "cc",
+ "libc",
+ "libz-sys",
+ "openssl-sys",
+ "pkg-config",
+ "vcpkg",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "dashmap"
+version = "5.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856"
+dependencies = [
+ "cfg-if",
+ "hashbrown 0.14.3",
+ "lock_api",
+ "once_cell",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "data-url"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c297a1c74b71ae29df00c3e22dd9534821d60eb9af5a0192823fa2acea70c2a"
+
+[[package]]
+name = "deranged"
+version = "0.3.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8eb30d70a07a3b04884d2677f06bec33509dc67ca60d92949e5535352d3191dc"
+dependencies = [
+ "powerfmt",
+]
+
+[[package]]
+name = "dirs"
+version = "5.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225"
+dependencies = [
+ "dirs-sys",
+]
+
+[[package]]
+name = "dirs-sys"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c"
+dependencies = [
+ "libc",
+ "option-ext",
+ "redox_users",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "displaydoc"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "downcast-rs"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650"
+
+[[package]]
+name = "ecow"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d1990d053cf6edf3f030682dba3b0eb65ef01fabb2686072765d8a17d6728e8"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "ecow"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6ea5e3f9cda726431da9d1a8d5a29785d544b31e98e1ca7a210906244002e02"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "either"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
+
+[[package]]
+name = "elsa"
+version = "1.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d98e71ae4df57d214182a2e5cb90230c0192c6ddfcaa05c36453d46a54713e10"
+dependencies = [
+ "stable_deref_trait",
+]
+
+[[package]]
+name = "embedded-io"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef1a6892d9eef45c8fa6b9e0086428a2cca8491aca8f787c534a3d6d0bcb3ced"
+
+[[package]]
+name = "encoding_rs"
+version = "0.8.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "enum-ordinalize"
+version = "4.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b365ed566a2be6c61cb68e4faca9e74687004c5fd9a7291be8bc30992dd9195c"
+dependencies = [
+ "enum-ordinalize-derive",
+]
+
+[[package]]
+name = "enum-ordinalize-derive"
+version = "4.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ac2fa9cc04a3dec245e68a29ac309a03c1fe638522b0d8c24ec14bbe9c08323"
+dependencies = [
+ "num-bigint",
+ "num-traits",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "equivalent"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
+
+[[package]]
+name = "errno"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245"
+dependencies = [
+ "libc",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "event-listener"
+version = "2.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0"
+
+[[package]]
+name = "fancy-regex"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b95f7c0680e4142284cf8b22c14a476e87d61b004a3a0861872b32ef7ead40a2"
+dependencies = [
+ "bit-set",
+ "regex",
+]
+
+[[package]]
+name = "fast-srgb8"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd2e7510819d6fbf51a5545c8f922716ecfb14df168a3242f7d33e0239efe6a1"
+
+[[package]]
+name = "fastrand"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "fastrand"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5"
+
+[[package]]
+name = "fdeflate"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64d6dafc854908ff5da46ff3f8f473c6984119a2876a383a860246dd7841a868"
+dependencies = [
+ "simd-adler32",
+]
+
+[[package]]
+name = "filetime"
+version = "0.2.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4029edd3e734da6fe05b6cd7bd2960760a616bd2ddd0d59a0124746d6272af0"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall 0.3.5",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "flate2"
+version = "1.0.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide",
+]
+
+[[package]]
+name = "float-cmp"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4"
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "fontconfig-parser"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "674e258f4b5d2dcd63888c01c68413c51f565e8af99d2f7701c7b81d79ef41c4"
+dependencies = [
+ "roxmltree",
+]
+
+[[package]]
+name = "fontdb"
+version = "0.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "020e203f177c0fb250fb19455a252e838d2bbbce1f80f25ecc42402aafa8cd38"
+dependencies = [
+ "log",
+ "slotmap",
+ "tinyvec",
+ "ttf-parser 0.19.2",
+]
+
+[[package]]
+name = "fontdb"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "98b88c54a38407f7352dd2c4238830115a6377741098ffd1f997c813d0e088a6"
+dependencies = [
+ "fontconfig-parser",
+ "log",
+ "memmap2",
+ "slotmap",
+ "tinyvec",
+ "ttf-parser 0.20.0",
+]
+
+[[package]]
+name = "foreign-types"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+dependencies = [
+ "foreign-types-shared",
+]
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "futures"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da0290714b38af9b4a7b094b8a37086d1b4e61f2df9122c3cad2577669145335"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-io",
+ "futures-sink",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff4dd66668b557604244583e3e1e1eada8c5c2e96a6d0d6653ede395b78bbacb"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c"
+
+[[package]]
+name = "futures-executor"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f4fb8693db0cf099eadcca0efe2a5a22e4550f98ed16aba6c48700da29597bc"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-io"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa"
+
+[[package]]
+name = "futures-lite"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce"
+dependencies = [
+ "fastrand 1.9.0",
+ "futures-core",
+ "futures-io",
+ "memchr",
+ "parking",
+ "pin-project-lite",
+ "waker-fn",
+]
+
+[[package]]
+name = "futures-macro"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53b153fd91e4b0147f4aced87be237c98248656bb01050b96bf3ee89220a8ddb"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e36d3378ee38c2a36ad710c5d30c2911d752cb941c00c72dbabfb786a7970817"
+
+[[package]]
+name = "futures-task"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2"
+
+[[package]]
+name = "futures-util"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-macro",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "gif"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80792593675e051cf94a4b111980da2ba60d4a83e43e0048c5693baab3977045"
+dependencies = [
+ "color_quant",
+ "weezl",
+]
+
+[[package]]
+name = "gimli"
+version = "0.28.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253"
+
+[[package]]
+name = "glob"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
+
+[[package]]
+name = "globmatch"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3755076379cc2b2bbf53855fe718e1eed3093cfb769ebf5d290f617fa9cc09a0"
+dependencies = [
+ "globset",
+ "log",
+ "walkdir",
+]
+
+[[package]]
+name = "globset"
+version = "0.4.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57da3b9b5b85bd66f31093f8c408b90a74431672542466497dcbdfdc02034be1"
+dependencies = [
+ "aho-corasick",
+ "bstr",
+ "log",
+ "regex-automata",
+ "regex-syntax 0.8.2",
+]
+
+[[package]]
+name = "h2"
+version = "0.3.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d6250322ef6e60f93f9a2162799302cd6f68f79f6e5d85c8c16f14d1d958178"
+dependencies = [
+ "bytes",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "http",
+ "indexmap",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tracing",
+]
+
+[[package]]
+name = "half"
+version = "1.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7"
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+dependencies = [
+ "ahash",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.14.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604"
+
+[[package]]
+name = "hayagriva"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9f97c07366b7f686741521ca63cc14baf18cea53c39b0c09873cd1d4a1b2b8c"
+dependencies = [
+ "biblatex",
+ "ciborium",
+ "citationberg",
+ "indexmap",
+ "numerals",
+ "paste",
+ "serde",
+ "serde_yaml",
+ "thiserror",
+ "unic-langid",
+ "unicode-segmentation",
+ "unscanny",
+ "url",
+]
+
+[[package]]
+name = "heck"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7"
+
+[[package]]
+name = "http"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb"
+dependencies = [
+ "bytes",
+ "fnv",
+ "itoa",
+]
+
+[[package]]
+name = "http-body"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
+dependencies = [
+ "bytes",
+ "http",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "httparse"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
+
+[[package]]
+name = "httpdate"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
+
+[[package]]
+name = "hyper"
+version = "0.14.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468"
+dependencies = [
+ "bytes",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "httparse",
+ "httpdate",
+ "itoa",
+ "pin-project-lite",
+ "socket2 0.4.10",
+ "tokio",
+ "tower-service",
+ "tracing",
+ "want",
+]
+
+[[package]]
+name = "hyper-rustls"
+version = "0.24.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590"
+dependencies = [
+ "futures-util",
+ "http",
+ "hyper",
+ "rustls",
+ "tokio",
+ "tokio-rustls",
+]
+
+[[package]]
+name = "hyper-tls"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905"
+dependencies = [
+ "bytes",
+ "hyper",
+ "native-tls",
+ "tokio",
+ "tokio-native-tls",
+]
+
+[[package]]
+name = "hypher"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94bf16dd62ea2bec617a6f8a3e1ba03107311783069a647787ac689d1f35321e"
+
+[[package]]
+name = "iana-time-zone"
+version = "0.1.58"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8326b86b6cff230b97d0d312a6c40a60726df3332e721f72a1b035f451663b20"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys",
+ "iana-time-zone-haiku",
+ "js-sys",
+ "wasm-bindgen",
+ "windows-core",
+]
+
+[[package]]
+name = "iana-time-zone-haiku"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "icu_collections"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "137d96353afc8544d437e8a99eceb10ab291352699573b0de5b08bda38c78c60"
+dependencies = [
+ "displaydoc",
+ "serde",
+ "yoke",
+ "zerofrom",
+ "zerovec",
+]
+
+[[package]]
+name = "icu_locid"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c0aa2536adc14c07e2a521e95512b75ed8ef832f0fdf9299d4a0a45d2be2a9d"
+dependencies = [
+ "displaydoc",
+ "litemap",
+ "tinystr",
+ "writeable",
+ "zerovec",
+]
+
+[[package]]
+name = "icu_locid_transform"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57c17d8f6524fdca4471101dd71f0a132eb6382b5d6d7f2970441cb25f6f435a"
+dependencies = [
+ "displaydoc",
+ "icu_locid",
+ "icu_locid_transform_data",
+ "icu_provider",
+ "tinystr",
+ "zerovec",
+]
+
+[[package]]
+name = "icu_locid_transform_data"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "545c6c3e8bf9580e2dafee8de6f9ec14826aaf359787789c7724f1f85f47d3dc"
+
+[[package]]
+name = "icu_properties"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "976e296217453af983efa25f287a4c1da04b9a63bf1ed63719455068e4453eb5"
+dependencies = [
+ "displaydoc",
+ "icu_collections",
+ "icu_locid_transform",
+ "icu_properties_data",
+ "icu_provider",
+ "serde",
+ "tinystr",
+ "zerovec",
+]
+
+[[package]]
+name = "icu_properties_data"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6a86c0e384532b06b6c104814f9c1b13bcd5b64409001c0d05713a1f3529d99"
+
+[[package]]
+name = "icu_provider"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba58e782287eb6950247abbf11719f83f5d4e4a5c1f2cd490d30a334bc47c2f4"
+dependencies = [
+ "displaydoc",
+ "icu_locid",
+ "icu_provider_macros",
+ "postcard",
+ "serde",
+ "stable_deref_trait",
+ "tinystr",
+ "writeable",
+ "yoke",
+ "zerofrom",
+ "zerovec",
+]
+
+[[package]]
+name = "icu_provider_adapters"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a229f978260da7c3aabb68cb7dc7316589936680570fe55e50fdd3f97711a4dd"
+dependencies = [
+ "icu_locid",
+ "icu_locid_transform",
+ "icu_provider",
+ "tinystr",
+ "zerovec",
+]
+
+[[package]]
+name = "icu_provider_blob"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4a7202cddda672db167c6352719959e9b01cb1ca576d32fa79103f61b5a73601"
+dependencies = [
+ "icu_provider",
+ "postcard",
+ "serde",
+ "writeable",
+ "zerotrie",
+ "zerovec",
+]
+
+[[package]]
+name = "icu_provider_macros"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2abdd3a62551e8337af119c5899e600ca0c88ec8f23a46c60ba216c803dcf1a"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "icu_segmenter"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2dc1e8f4ba33a6a4956770ac5c08570f255d6605519fb3a859a0c0a270a2f8f"
+dependencies = [
+ "core_maths",
+ "displaydoc",
+ "icu_collections",
+ "icu_locid",
+ "icu_provider",
+ "icu_segmenter_data",
+ "serde",
+ "utf8_iter",
+ "zerovec",
+]
+
+[[package]]
+name = "icu_segmenter_data"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3673d6698dcffce08cfe8fc5da3c11c3f2c663d5d6137fd58ab2cbf44235ab46"
+
+[[package]]
+name = "idna"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "if_chain"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb56e1aa765b4b4f3aadfab769793b7087bb03a4ea4920644a6d238e2df5b9ed"
+
+[[package]]
+name = "image"
+version = "0.24.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f3dfdbdd72063086ff443e297b61695500514b1e41095b6fb9a5ab48a70a711"
+dependencies = [
+ "bytemuck",
+ "byteorder",
+ "color_quant",
+ "gif",
+ "jpeg-decoder",
+ "num-rational",
+ "num-traits",
+ "png",
+]
+
+[[package]]
+name = "imagesize"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "029d73f573d8e8d63e6d5020011d3255b28c3ba85d6cf870a07184ed23de9284"
+
+[[package]]
+name = "indexmap"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f"
+dependencies = [
+ "equivalent",
+ "hashbrown 0.14.3",
+ "serde",
+]
+
+[[package]]
+name = "indexmap-nostd"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e04e2fd2b8188ea827b32ef11de88377086d690286ab35747ef7f9bf3ccb590"
+
+[[package]]
+name = "instant"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "integer-encoding"
+version = "3.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8bb03732005da905c88227371639bf1ad885cc712789c011c31c5fb3ab3ccf02"
+
+[[package]]
+name = "internment"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e976188335292f66a1533fd41d5c2ce24b32dc2c000569b8dccf4e57f489806"
+dependencies = [
+ "hashbrown 0.12.3",
+ "parking_lot",
+]
+
+[[package]]
+name = "ipnet"
+version = "2.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3"
+
+[[package]]
+name = "is-terminal"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b"
+dependencies = [
+ "hermit-abi",
+ "rustix",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "is_ci"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "616cde7c720bb2bb5824a224687d8f77bfd38922027f01d825cd7453be5099fb"
+
+[[package]]
+name = "isahc"
+version = "1.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "334e04b4d781f436dc315cb1e7515bd96826426345d498149e4bde36b67f8ee9"
+dependencies = [
+ "async-channel",
+ "castaway",
+ "crossbeam-utils",
+ "curl",
+ "curl-sys",
+ "event-listener",
+ "futures-lite",
+ "http",
+ "log",
+ "once_cell",
+ "polling",
+ "slab",
+ "sluice",
+ "tracing",
+ "tracing-futures",
+ "url",
+ "waker-fn",
+]
+
+[[package]]
+name = "itertools"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itertools"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25db6b064527c5d482d0423354fcd07a89a2dfe07b67892e62411946db7f07b0"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
+
+[[package]]
+name = "jpeg-decoder"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc0000e42512c92e31c2252315bda326620a4e034105e900c98ec492fa077b3e"
+
+[[package]]
+name = "js-sys"
+version = "0.3.66"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cee9c64da59eae3b50095c18d3e74f8b73c0b86d2792824ff01bbce68ba229ca"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "kurbo"
+version = "0.9.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd85a5776cd9500c2e2059c8c76c3b01528566b7fcbaf8098b55a33fc298849b"
+dependencies = [
+ "arrayvec",
+]
+
+[[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.150"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c"
+
+[[package]]
+name = "libm"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058"
+
+[[package]]
+name = "libredox"
+version = "0.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8"
+dependencies = [
+ "bitflags 2.4.1",
+ "libc",
+ "redox_syscall 0.4.1",
+]
+
+[[package]]
+name = "libz-sys"
+version = "1.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d97137b25e321a73eef1418d1d5d2eda4d77e12813f8e6dead84bc52c5870a7b"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "line-wrap"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f30344350a2a51da54c1d53be93fade8a237e545dbcc4bdbe635413f2117cab9"
+dependencies = [
+ "safemem",
+]
+
+[[package]]
+name = "linked-hash-map"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.4.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4cd1a83af159aa67994778be9070f0ae1bd732942279cabb14f86f986a21456"
+
+[[package]]
+name = "lipsum"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c5e9ef2d2ad6fe67a59ace27c203c8d3a71d195532ee82e3bbe0d5f9a9ca541"
+dependencies = [
+ "rand",
+ "rand_chacha",
+]
+
+[[package]]
+name = "litemap"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9d642685b028806386b2b6e75685faadd3eb65a85fff7df711ce18446a422da"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "lock_api"
+version = "0.4.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45"
+dependencies = [
+ "autocfg",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
+
+[[package]]
+name = "lsp-types"
+version = "0.94.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c66bfd44a06ae10647fe3f8214762e9369fd4248df1350924b4ef9e770a85ea1"
+dependencies = [
+ "bitflags 1.3.2",
+ "serde",
+ "serde_json",
+ "serde_repr",
+ "url",
+]
+
+[[package]]
+name = "memchr"
+version = "2.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167"
+
+[[package]]
+name = "memmap2"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "deaba38d7abf1d4cca21cc89e932e542ba2b9258664d2a9ef0e61512039c9375"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "memoffset"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "mime"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
+dependencies = [
+ "adler",
+ "simd-adler32",
+]
+
+[[package]]
+name = "mio"
+version = "0.8.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3dce281c5e46beae905d4de1870d8b1509a9142b62eedf18b443b011ca8343d0"
+dependencies = [
+ "libc",
+ "wasi",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "native-tls"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e"
+dependencies = [
+ "lazy_static",
+ "libc",
+ "log",
+ "openssl",
+ "openssl-probe",
+ "openssl-sys",
+ "schannel",
+ "security-framework",
+ "security-framework-sys",
+ "tempfile",
+]
+
+[[package]]
+name = "num-bigint"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[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-rational"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
+dependencies = [
+ "hermit-abi",
+ "libc",
+]
+
+[[package]]
+name = "numerals"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e25be21376a772d15f97ae789845340a9651d3c4246ff5ebb6a2b35f9c37bd31"
+
+[[package]]
+name = "object"
+version = "0.32.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
+
+[[package]]
+name = "openssl"
+version = "0.10.60"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "79a4c6c3a2b158f7f8f2a2fc5a969fa3a068df6fc9dbb4a43845436e3af7c800"
+dependencies = [
+ "bitflags 2.4.1",
+ "cfg-if",
+ "foreign-types",
+ "libc",
+ "once_cell",
+ "openssl-macros",
+ "openssl-sys",
+]
+
+[[package]]
+name = "openssl-macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "openssl-probe"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
+
+[[package]]
+name = "openssl-sys"
+version = "0.9.96"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3812c071ba60da8b5677cc12bcb1d42989a65553772897a7e0355545a819838f"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "opentelemetry"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e32339a5dc40459130b3bd269e9892439f55b33e772d2a9d402a789baaf4e8a"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+ "indexmap",
+ "js-sys",
+ "once_cell",
+ "pin-project-lite",
+ "thiserror",
+ "urlencoding",
+]
+
+[[package]]
+name = "opentelemetry-http"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f51189ce8be654f9b5f7e70e49967ed894e84a06fc35c6c042e64ac1fc5399e"
+dependencies = [
+ "async-trait",
+ "bytes",
+ "http",
+ "isahc",
+ "opentelemetry",
+]
+
+[[package]]
+name = "opentelemetry-jaeger"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e617c66fd588e40e0dbbd66932fdc87393095b125d4459b1a3a10feb1712f8a1"
+dependencies = [
+ "async-trait",
+ "futures-core",
+ "futures-util",
+ "http",
+ "isahc",
+ "opentelemetry",
+ "opentelemetry-http",
+ "opentelemetry-semantic-conventions",
+ "opentelemetry_sdk",
+ "thrift",
+ "tokio",
+]
+
+[[package]]
+name = "opentelemetry-semantic-conventions"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f5774f1ef1f982ef2a447f6ee04ec383981a3ab99c8e77a1a7b30182e65bbc84"
+dependencies = [
+ "opentelemetry",
+]
+
+[[package]]
+name = "opentelemetry_sdk"
+version = "0.21.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "968ba3f2ca03e90e5187f5e4f46c791ef7f2c163ae87789c8ce5f5ca3b7b7de5"
+dependencies = [
+ "async-trait",
+ "crossbeam-channel",
+ "futures-channel",
+ "futures-executor",
+ "futures-util",
+ "glob",
+ "once_cell",
+ "opentelemetry",
+ "ordered-float 4.1.1",
+ "percent-encoding",
+ "rand",
+ "thiserror",
+ "tokio",
+ "tokio-stream",
+]
+
+[[package]]
+name = "option-ext"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d"
+
+[[package]]
+name = "ordered-float"
+version = "2.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68f19d67e5a2795c94e73e0bb1cc1a7edeb2e28efd39e2e1c9b7a40c1108b11c"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "ordered-float"
+version = "4.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "536900a8093134cf9ccf00a27deb3532421099e958d9dd431135d0c7543ca1e8"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "owo-colors"
+version = "3.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f"
+
+[[package]]
+name = "palette"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2e2f34147767aa758aa649415b50a69eeb46a67f9dc7db8011eeb3d84b351dc"
+dependencies = [
+ "approx",
+ "fast-srgb8",
+ "libm",
+ "palette_derive",
+]
+
+[[package]]
+name = "palette_derive"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7db010ec5ff3d4385e4f133916faacd9dad0f6a09394c92d825b3aed310fa0a"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "parking"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae"
+
+[[package]]
+name = "parking_lot"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+dependencies = [
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall 0.4.1",
+ "smallvec",
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "paste"
+version = "1.0.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c"
+
+[[package]]
+name = "pdf-writer"
+version = "0.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "644b654f2de28457bf1e25a4905a76a563d1128a33ce60cf042f721f6818feaf"
+dependencies = [
+ "bitflags 1.3.2",
+ "itoa",
+ "memchr",
+ "ryu",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
+
+[[package]]
+name = "pico-args"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315"
+
+[[package]]
+name = "pin-project"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422"
+dependencies = [
+ "pin-project-internal",
+]
+
+[[package]]
+name = "pin-project-internal"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
+
+[[package]]
+name = "plist"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5699cc8a63d1aa2b1ee8e12b9ad70ac790d65788cd36101fa37f87ea46c4cef"
+dependencies = [
+ "base64",
+ "indexmap",
+ "line-wrap",
+ "quick-xml 0.31.0",
+ "serde",
+ "time",
+]
+
+[[package]]
+name = "png"
+version = "0.17.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd75bf2d8dd3702b9707cdbc56a5b9ef42cec752eb8b3bafc01234558442aa64"
+dependencies = [
+ "bitflags 1.3.2",
+ "crc32fast",
+ "fdeflate",
+ "flate2",
+ "miniz_oxide",
+]
+
+[[package]]
+name = "polling"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce"
+dependencies = [
+ "autocfg",
+ "bitflags 1.3.2",
+ "cfg-if",
+ "concurrent-queue",
+ "libc",
+ "log",
+ "pin-project-lite",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "postcard"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a55c51ee6c0db07e68448e336cf8ea4131a620edefebf9893e759b2d793420f8"
+dependencies = [
+ "cobs",
+ "embedded-io",
+ "serde",
+]
+
+[[package]]
+name = "powerfmt"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+
+[[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 1.0.109",
+ "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.70"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39278fbbf5fb4f646ce651690877f89d1c5811a3d4acb27700c1cb3cdb78fd3b"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "psm"
+version = "0.1.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5787f7cda34e3033a72192c018bc5883100330f362ef279a8cbccfce8bb4e874"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "quick-xml"
+version = "0.28.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ce5e73202a820a31f8a0ee32ada5e21029c81fd9e3ebf668a40832e4219d9d1"
+dependencies = [
+ "memchr",
+ "serde",
+]
+
+[[package]]
+name = "quick-xml"
+version = "0.31.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1004a344b30a54e2ee58d66a71b32d2db2feb0a31f9a2d302bf0536f15de2a33"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
+dependencies = [
+ "proc-macro2",
+]
+
+[[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",
+]
+
+[[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",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "rayon"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1"
+dependencies = [
+ "either",
+ "rayon-core",
+]
+
+[[package]]
+name = "rayon-core"
+version = "1.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed"
+dependencies = [
+ "crossbeam-deque",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "rctree"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b42e27ef78c35d3998403c1d26f3efd9e135d3e5121b0a4845cc5cc27547f4f"
+
+[[package]]
+name = "redox_syscall"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "redox_users"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4"
+dependencies = [
+ "getrandom",
+ "libredox",
+ "thiserror",
+]
+
+[[package]]
+name = "regex"
+version = "1.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-automata",
+ "regex-syntax 0.8.2",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax 0.8.2",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da"
+
+[[package]]
+name = "regex-syntax"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
+
+[[package]]
+name = "reqwest"
+version = "0.11.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "046cd98826c46c2ac8ddecae268eb5c2e58628688a5fc7a2643704a73faba95b"
+dependencies = [
+ "base64",
+ "bytes",
+ "encoding_rs",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "hyper",
+ "hyper-rustls",
+ "hyper-tls",
+ "ipnet",
+ "js-sys",
+ "log",
+ "mime",
+ "native-tls",
+ "once_cell",
+ "percent-encoding",
+ "pin-project-lite",
+ "rustls",
+ "rustls-pemfile",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "system-configuration",
+ "tokio",
+ "tokio-native-tls",
+ "tokio-rustls",
+ "tokio-util",
+ "tower-service",
+ "url",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "wasm-streams",
+ "web-sys",
+ "webpki-roots",
+ "winreg",
+]
+
+[[package]]
+name = "ring"
+version = "0.17.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "684d5e6e18f669ccebf64a92236bb7db9a34f07be010e3627368182027180866"
+dependencies = [
+ "cc",
+ "getrandom",
+ "libc",
+ "spin",
+ "untrusted",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "roxmltree"
+version = "0.18.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "862340e351ce1b271a378ec53f304a5558f7db87f3769dc655a8f6ecbb68b302"
+dependencies = [
+ "xmlparser",
+]
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
+
+[[package]]
+name = "rustix"
+version = "0.38.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9470c4bf8246c8daf25f9598dca807fb6510347b1e1cfa55749113850c79d88a"
+dependencies = [
+ "bitflags 2.4.1",
+ "errno",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "rustls"
+version = "0.21.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "629648aced5775d558af50b2b4c7b02983a04b312126d45eeead26e7caa498b9"
+dependencies = [
+ "log",
+ "ring",
+ "rustls-webpki",
+ "sct",
+]
+
+[[package]]
+name = "rustls-pemfile"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c"
+dependencies = [
+ "base64",
+]
+
+[[package]]
+name = "rustls-webpki"
+version = "0.101.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "rustversion"
+version = "1.0.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4"
+
+[[package]]
+name = "rustybuzz"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "71cd15fef9112a1f94ac64b58d1e4628192631ad6af4dc69997f995459c874e7"
+dependencies = [
+ "bitflags 1.3.2",
+ "bytemuck",
+ "smallvec",
+ "ttf-parser 0.19.2",
+ "unicode-bidi-mirroring",
+ "unicode-ccc",
+ "unicode-properties",
+ "unicode-script",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741"
+
+[[package]]
+name = "safemem"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072"
+
+[[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 = "schannel"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88"
+dependencies = [
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "scopeguard"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+
+[[package]]
+name = "sct"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "security-framework"
+version = "2.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de"
+dependencies = [
+ "bitflags 1.3.2",
+ "core-foundation",
+ "core-foundation-sys",
+ "libc",
+ "security-framework-sys",
+]
+
+[[package]]
+name = "security-framework-sys"
+version = "2.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "semver"
+version = "1.0.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.193"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.193"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.108"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_repr"
+version = "0.1.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3081f5ffbb02284dda55132aa26daecedd7372a42417bbbab6f14ab7d6bb9145"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "serde_spanned"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12022b835073e5b11e90a14f86838ceb1c8fb0325b72416845c487ac0fa95e80"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde_urlencoded"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
+dependencies = [
+ "form_urlencoded",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_yaml"
+version = "0.9.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3cc7a1570e38322cfe4154732e5110f887ea57e22b76f4bfd32b5bdd3368666c"
+dependencies = [
+ "indexmap",
+ "itoa",
+ "ryu",
+ "serde",
+ "unsafe-libyaml",
+]
+
+[[package]]
+name = "sharded-slab"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6"
+dependencies = [
+ "lazy_static",
+]
+
+[[package]]
+name = "simd-adler32"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe"
+
+[[package]]
+name = "simplecss"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a11be7c62927d9427e9f40f3444d5499d868648e2edbc4e2116de69e7ec0e89d"
+dependencies = [
+ "log",
+]
+
+[[package]]
+name = "siphasher"
+version = "0.3.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d"
+
+[[package]]
+name = "siphasher"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54ac45299ccbd390721be55b412d41931911f654fa99e2cb8bfb57184b2061fe"
+
+[[package]]
+name = "slab"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "slotmap"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a"
+dependencies = [
+ "version_check",
+]
+
+[[package]]
+name = "sluice"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d7400c0eff44aa2fcb5e31a5f24ba9716ed90138769e4977a2ba6014ae63eb5"
+dependencies = [
+ "async-channel",
+ "futures-core",
+ "futures-io",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970"
+
+[[package]]
+name = "socket2"
+version = "0.4.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "socket2"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9"
+dependencies = [
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "spin"
+version = "0.9.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
+
+[[package]]
+name = "stable_deref_trait"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
+
+[[package]]
+name = "stacker"
+version = "0.1.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c886bd4480155fd3ef527d45e9ac8dd7118a898a46530b7b94c3e21866259fce"
+dependencies = [
+ "cc",
+ "cfg-if",
+ "libc",
+ "psm",
+ "winapi",
+]
+
+[[package]]
+name = "strict-num"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6637bab7722d379c8b41ba849228d680cc12d0a45ba1fa2b48f2a30577a06731"
+dependencies = [
+ "float-cmp",
+]
+
+[[package]]
+name = "strum"
+version = "0.25.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125"
+dependencies = [
+ "strum_macros",
+]
+
+[[package]]
+name = "strum_macros"
+version = "0.25.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23dc1fa9ac9c169a78ba62f0b841814b7abae11bdd047b9c58f893439e309ea0"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "rustversion",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "subsetter"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09eab8a83bff89ba2200bd4c59be45c7c787f988431b936099a5a266c957f2f9"
+
+[[package]]
+name = "supports-color"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6398cde53adc3c4557306a96ce67b302968513830a77a95b2b17305d9719a89"
+dependencies = [
+ "is-terminal",
+ "is_ci",
+]
+
+[[package]]
+name = "svg2pdf"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a81da66842e426278f20062cd249779565e13f9ab4bfe0ac9e94eb476bc3a0f3"
+dependencies = [
+ "image",
+ "miniz_oxide",
+ "once_cell",
+ "pdf-writer",
+ "usvg",
+]
+
+[[package]]
+name = "svgtypes"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d71499ff2d42f59d26edb21369a308ede691421f79ebc0f001e2b1fd3a7c9e52"
+dependencies = [
+ "kurbo",
+ "siphasher 0.3.11",
+]
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.39"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "synstructure"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "285ba80e733fac80aa4270fbcdf83772a79b80aa35c97075320abfee4a915b06"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+ "unicode-xid",
+]
+
+[[package]]
+name = "syntect"
+version = "5.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e02b4b303bf8d08bfeb0445cba5068a3d306b6baece1d5582171a9bf49188f91"
+dependencies = [
+ "bincode",
+ "bitflags 1.3.2",
+ "fancy-regex",
+ "flate2",
+ "fnv",
+ "once_cell",
+ "plist",
+ "regex-syntax 0.7.5",
+ "serde",
+ "serde_json",
+ "thiserror",
+ "walkdir",
+ "yaml-rust",
+]
+
+[[package]]
+name = "system-configuration"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7"
+dependencies = [
+ "bitflags 1.3.2",
+ "core-foundation",
+ "system-configuration-sys",
+]
+
+[[package]]
+name = "system-configuration-sys"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "temp-dir"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af547b166dd1ea4b472165569fc456cfb6818116f854690b0ff205e636523dab"
+
+[[package]]
+name = "tempfile"
+version = "3.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5"
+dependencies = [
+ "cfg-if",
+ "fastrand 2.0.1",
+ "redox_syscall 0.4.1",
+ "rustix",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.50"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.50"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "thread_local"
+version = "1.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+]
+
+[[package]]
+name = "threadpool"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa"
+dependencies = [
+ "num_cpus",
+]
+
+[[package]]
+name = "thrift"
+version = "0.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e54bc85fc7faa8bc175c4bab5b92ba8d9a3ce893d0e9f42cc455c8ab16a9e09"
+dependencies = [
+ "byteorder",
+ "integer-encoding",
+ "log",
+ "ordered-float 2.10.1",
+ "threadpool",
+]
+
+[[package]]
+name = "time"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4a34ab300f2dee6e562c10a046fc05e358b29f9bf92277f30c3c8d82275f6f5"
+dependencies = [
+ "deranged",
+ "itoa",
+ "powerfmt",
+ "serde",
+ "time-core",
+ "time-macros",
+]
+
+[[package]]
+name = "time-core"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3"
+
+[[package]]
+name = "time-macros"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ad70d68dba9e1f8aceda7aa6711965dfec1cac869f311a51bd08b3a2ccbce20"
+dependencies = [
+ "time-core",
+]
+
+[[package]]
+name = "tiny-skia-path"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5de35e8a90052baaaf61f171680ac2f8e925a1e43ea9d2e3a00514772250e541"
+dependencies = [
+ "arrayref",
+ "bytemuck",
+ "strict-num",
+]
+
+[[package]]
+name = "tinystr"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "83c02bf3c538ab32ba913408224323915f4ef9a6d61c0e85d493f355921c0ece"
+dependencies = [
+ "displaydoc",
+ "serde",
+ "zerovec",
+]
+
+[[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.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+[[package]]
+name = "tokio"
+version = "1.35.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c89b4efa943be685f629b149f53829423f8f5531ea21249408e8e2f8671ec104"
+dependencies = [
+ "backtrace",
+ "bytes",
+ "libc",
+ "mio",
+ "num_cpus",
+ "pin-project-lite",
+ "socket2 0.5.5",
+ "tokio-macros",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "tokio-macros"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "tokio-native-tls"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2"
+dependencies = [
+ "native-tls",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-rustls"
+version = "0.24.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081"
+dependencies = [
+ "rustls",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-stream"
+version = "0.1.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842"
+dependencies = [
+ "futures-core",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-tar"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d5714c010ca3e5c27114c1cdeb9d14641ace49874aa5626d7149e47aedace75"
+dependencies = [
+ "filetime",
+ "futures-core",
+ "libc",
+ "redox_syscall 0.3.5",
+ "tokio",
+ "tokio-stream",
+ "xattr",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.7.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-sink",
+ "pin-project-lite",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "toml"
+version = "0.7.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257"
+dependencies = [
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "toml_edit 0.19.15",
+]
+
+[[package]]
+name = "toml"
+version = "0.8.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1a195ec8c9da26928f773888e0742ca3ca1040c6cd859c919c9f59c1954ab35"
+dependencies = [
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "toml_edit 0.21.0",
+]
+
+[[package]]
+name = "toml_datetime"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.19.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421"
+dependencies = [
+ "indexmap",
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "winnow",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d34d383cd00a163b4a5b85053df514d45bc330f6de7737edfe0a93311d1eaa03"
+dependencies = [
+ "indexmap",
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "winnow",
+]
+
+[[package]]
+name = "tower"
+version = "0.4.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c"
+dependencies = [
+ "futures-core",
+ "futures-util",
+ "pin-project",
+ "pin-project-lite",
+ "tower-layer",
+ "tower-service",
+]
+
+[[package]]
+name = "tower-layer"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0"
+
+[[package]]
+name = "tower-lsp"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4ba052b54a6627628d9b3c34c176e7eda8359b7da9acd497b9f20998d118508"
+dependencies = [
+ "async-trait",
+ "auto_impl",
+ "bytes",
+ "dashmap",
+ "futures",
+ "httparse",
+ "lsp-types",
+ "memchr",
+ "serde",
+ "serde_json",
+ "tokio",
+ "tokio-util",
+ "tower",
+ "tower-lsp-macros",
+ "tracing",
+]
+
+[[package]]
+name = "tower-lsp-macros"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "84fd902d4e0b9a4b27f2f440108dc034e1758628a9b702f8ec61ad66355422fa"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "tower-service"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
+
+[[package]]
+name = "tracing"
+version = "0.1.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef"
+dependencies = [
+ "log",
+ "pin-project-lite",
+ "tracing-attributes",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-attributes"
+version = "0.1.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54"
+dependencies = [
+ "once_cell",
+ "valuable",
+]
+
+[[package]]
+name = "tracing-futures"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2"
+dependencies = [
+ "pin-project",
+ "tracing",
+]
+
+[[package]]
+name = "tracing-log"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3"
+dependencies = [
+ "log",
+ "once_cell",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-opentelemetry"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c67ac25c5407e7b961fafc6f7e9aa5958fd297aada2d20fa2ae1737357e55596"
+dependencies = [
+ "js-sys",
+ "once_cell",
+ "opentelemetry",
+ "opentelemetry_sdk",
+ "smallvec",
+ "tracing",
+ "tracing-core",
+ "tracing-log",
+ "tracing-subscriber",
+ "web-time",
+]
+
+[[package]]
+name = "tracing-subscriber"
+version = "0.3.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b"
+dependencies = [
+ "sharded-slab",
+ "thread_local",
+ "tracing-core",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
+
+[[package]]
+name = "ttf-parser"
+version = "0.19.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49d64318d8311fc2668e48b63969f4343e0a85c4a109aa8460d6672e364b8bd1"
+
+[[package]]
+name = "ttf-parser"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17f77d76d837a7830fe1d4f12b7b4ba4192c1888001c7164257e4bc6d21d96b4"
+
+[[package]]
+name = "typed-arena"
+version = "2.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6af6ae20167a9ece4bcb41af5b80f8a1f1df981f6391189ce00fd257af04126a"
+
+[[package]]
+name = "typst"
+version = "0.10.0"
+source = "git+https://github.com/typst/typst.git?tag=v0.10.0#70ca0d257bb4ba927f63260e20443f244e0bb58c"
+dependencies = [
+ "az",
+ "bitflags 2.4.1",
+ "chinese-number",
+ "ciborium",
+ "comemo",
+ "csv",
+ "ecow 0.2.0",
+ "fontdb 0.15.0",
+ "hayagriva",
+ "hypher",
+ "icu_properties",
+ "icu_provider",
+ "icu_provider_adapters",
+ "icu_provider_blob",
+ "icu_segmenter",
+ "image",
+ "indexmap",
+ "kurbo",
+ "lipsum",
+ "log",
+ "once_cell",
+ "palette",
+ "rayon",
+ "regex",
+ "roxmltree",
+ "rustybuzz",
+ "serde",
+ "serde_json",
+ "serde_yaml",
+ "siphasher 1.0.0",
+ "smallvec",
+ "stacker",
+ "syntect",
+ "time",
+ "toml 0.8.8",
+ "tracing",
+ "ttf-parser 0.19.2",
+ "typed-arena",
+ "typst-macros",
+ "typst-syntax 0.10.0",
+ "unicode-bidi",
+ "unicode-math-class",
+ "unicode-script",
+ "unicode-segmentation",
+ "usvg",
+ "wasmi",
+]
+
+[[package]]
+name = "typst-ide"
+version = "0.10.0"
+source = "git+https://github.com/typst/typst.git?tag=v0.10.0#70ca0d257bb4ba927f63260e20443f244e0bb58c"
+dependencies = [
+ "comemo",
+ "ecow 0.2.0",
+ "if_chain",
+ "log",
+ "serde",
+ "typst",
+ "unscanny",
+]
+
+[[package]]
+name = "typst-lsp"
+version = "0.12.1"
+dependencies = [
+ "anyhow",
+ "async-compression",
+ "async-trait",
+ "bpaf",
+ "cargo_metadata",
+ "chrono",
+ "comemo",
+ "dirs",
+ "elsa",
+ "fontdb 0.16.0",
+ "futures",
+ "if_chain",
+ "indexmap",
+ "internment",
+ "itertools 0.12.0",
+ "lazy_static",
+ "once_cell",
+ "opentelemetry",
+ "opentelemetry-jaeger",
+ "parking_lot",
+ "percent-encoding",
+ "regex",
+ "reqwest",
+ "same-file",
+ "serde",
+ "serde_json",
+ "siphasher 1.0.0",
+ "strum",
+ "temp-dir",
+ "thiserror",
+ "tokio",
+ "tokio-tar",
+ "tokio-util",
+ "tower-lsp",
+ "tracing",
+ "tracing-opentelemetry",
+ "tracing-subscriber",
+ "typst",
+ "typst-ide",
+ "typst-pdf",
+ "typstfmt_lib",
+ "walkdir",
+]
+
+[[package]]
+name = "typst-macros"
+version = "0.10.0"
+source = "git+https://github.com/typst/typst.git?tag=v0.10.0#70ca0d257bb4ba927f63260e20443f244e0bb58c"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "typst-pdf"
+version = "0.10.0"
+source = "git+https://github.com/typst/typst.git?tag=v0.10.0#70ca0d257bb4ba927f63260e20443f244e0bb58c"
+dependencies = [
+ "base64",
+ "bytemuck",
+ "comemo",
+ "ecow 0.2.0",
+ "image",
+ "miniz_oxide",
+ "once_cell",
+ "pdf-writer",
+ "subsetter",
+ "svg2pdf",
+ "tracing",
+ "ttf-parser 0.19.2",
+ "typst",
+ "unicode-properties",
+ "unscanny",
+ "xmp-writer",
+]
+
+[[package]]
+name = "typst-syntax"
+version = "0.7.0"
+source = "git+https://github.com/typst/typst.git?tag=v0.7.0#da8367e189b02918a8fe1a98fd3059fd11a82cd9"
+dependencies = [
+ "comemo",
+ "ecow 0.1.2",
+ "once_cell",
+ "serde",
+ "tracing",
+ "unicode-ident",
+ "unicode-math-class",
+ "unicode-segmentation",
+ "unscanny",
+]
+
+[[package]]
+name = "typst-syntax"
+version = "0.10.0"
+source = "git+https://github.com/typst/typst.git?tag=v0.10.0#70ca0d257bb4ba927f63260e20443f244e0bb58c"
+dependencies = [
+ "comemo",
+ "ecow 0.2.0",
+ "once_cell",
+ "serde",
+ "tracing",
+ "unicode-ident",
+ "unicode-math-class",
+ "unicode-script",
+ "unicode-segmentation",
+ "unscanny",
+]
+
+[[package]]
+name = "typstfmt_lib"
+version = "0.2.7"
+source = "git+https://github.com/astrale-sharp/typstfmt?tag=0.2.7#46b4ec34b4726c3c6541012f433c68c22d9e509c"
+dependencies = [
+ "globmatch",
+ "itertools 0.10.5",
+ "regex",
+ "serde",
+ "toml 0.7.8",
+ "tracing",
+ "typst-syntax 0.7.0",
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "unic-langid"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "398f9ad7239db44fd0f80fe068d12ff22d78354080332a5077dc6f52f14dcf2f"
+dependencies = [
+ "unic-langid-impl",
+]
+
+[[package]]
+name = "unic-langid-impl"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e35bfd2f2b8796545b55d7d3fd3e89a0613f68a0d1c8bc28cb7ff96b411a35ff"
+dependencies = [
+ "serde",
+ "tinystr",
+]
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
+
+[[package]]
+name = "unicode-bidi-mirroring"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56d12260fb92d52f9008be7e4bca09f584780eb2266dc8fecc6a192bec561694"
+
+[[package]]
+name = "unicode-ccc"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc2520efa644f8268dce4dcd3050eaa7fc044fca03961e9998ac7e2e92b77cf1"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
+
+[[package]]
+name = "unicode-math-class"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d246cf599d5fae3c8d56e04b20eb519adb89a8af8d0b0fbcded369aa3647d65"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-properties"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c7f91c8b21fbbaa18853c3d0801c78f4fc94cdb976699bb03e832e75f7fd22f0"
+
+[[package]]
+name = "unicode-script"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d817255e1bed6dfd4ca47258685d14d2bdcfbc64fdc9e3819bd5848057b8ecc"
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
+
+[[package]]
+name = "unicode-vo"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1d386ff53b415b7fe27b50bb44679e2cc4660272694b7b6f3326d8480823a94"
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c"
+
+[[package]]
+name = "unsafe-libyaml"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab4c90930b95a82d00dc9e9ac071b4991924390d46cbd0dfe566148667605e4b"
+
+[[package]]
+name = "unscanny"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e9df2af067a7953e9c3831320f35c1cc0600c30d44d9f7a12b01db1cd88d6b47"
+
+[[package]]
+name = "untrusted"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1"
+
+[[package]]
+name = "url"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "percent-encoding",
+ "serde",
+]
+
+[[package]]
+name = "urlencoding"
+version = "2.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da"
+
+[[package]]
+name = "usvg"
+version = "0.36.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c51daa774fe9ee5efcf7b4fec13019b8119cda764d9a8b5b06df02bb1445c656"
+dependencies = [
+ "base64",
+ "log",
+ "pico-args",
+ "usvg-parser",
+ "usvg-text-layout",
+ "usvg-tree",
+ "xmlwriter",
+]
+
+[[package]]
+name = "usvg-parser"
+version = "0.36.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "45c88a5ffaa338f0e978ecf3d4e00d8f9f493e29bed0752e1a808a1db16afc40"
+dependencies = [
+ "data-url",
+ "flate2",
+ "imagesize",
+ "kurbo",
+ "log",
+ "roxmltree",
+ "simplecss",
+ "siphasher 0.3.11",
+ "svgtypes",
+ "usvg-tree",
+]
+
+[[package]]
+name = "usvg-text-layout"
+version = "0.36.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d2374378cb7a3fb8f33894e0fdb8625e1bbc4f25312db8d91f862130b541593"
+dependencies = [
+ "fontdb 0.15.0",
+ "kurbo",
+ "log",
+ "rustybuzz",
+ "unicode-bidi",
+ "unicode-script",
+ "unicode-vo",
+ "usvg-tree",
+]
+
+[[package]]
+name = "usvg-tree"
+version = "0.36.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6cacb0c5edeaf3e80e5afcf5b0d4004cc1d36318befc9a7c6606507e5d0f4062"
+dependencies = [
+ "rctree",
+ "strict-num",
+ "svgtypes",
+ "tiny-skia-path",
+]
+
+[[package]]
+name = "utf8_iter"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be"
+
+[[package]]
+name = "valuable"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
+
+[[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 = "waker-fn"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3c4517f54858c779bbcbf228f4fca63d121bf85fbecb2dc578cdf4a39395690"
+
+[[package]]
+name = "walkdir"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee"
+dependencies = [
+ "same-file",
+ "winapi-util",
+]
+
+[[package]]
+name = "want"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e"
+dependencies = [
+ "try-lock",
+]
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.89"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ed0d4f68a3015cc185aff4db9506a015f4b96f95303897bfa23f846db54064e"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.89"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b56f625e64f3a1084ded111c4d5f477df9f8c92df113852fa5a374dbda78826"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.39"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac36a15a220124ac510204aec1c3e5db8a22ab06fd6706d881dc6149f8ed9a12"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.89"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0162dbf37223cd2afce98f3d0785506dcb8d266223983e4b5b525859e6e182b2"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.89"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0eb82fcb7930ae6219a7ecfd55b217f5f0893484b7a13022ebb2b2bf20b5283"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.89"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ab9b36309365056cd639da3134bf87fa8f3d86008abf99e612384a6eecd459f"
+
+[[package]]
+name = "wasm-streams"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4609d447824375f43e1ffbc051b50ad8f4b3ae8219680c94452ea05eb240ac7"
+dependencies = [
+ "futures-util",
+ "js-sys",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+]
+
+[[package]]
+name = "wasmi"
+version = "0.31.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acfc1e384a36ca532d070a315925887247f3c7e23567e23e0ac9b1c5d6b8bf76"
+dependencies = [
+ "smallvec",
+ "spin",
+ "wasmi_arena",
+ "wasmi_core",
+ "wasmparser-nostd",
+]
+
+[[package]]
+name = "wasmi_arena"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "401c1f35e413fac1846d4843745589d9ec678977ab35a384db8ae7830525d468"
+
+[[package]]
+name = "wasmi_core"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dcf1a7db34bff95b85c261002720c00c3a6168256dcb93041d3fa2054d19856a"
+dependencies = [
+ "downcast-rs",
+ "libm",
+ "num-traits",
+ "paste",
+]
+
+[[package]]
+name = "wasmparser-nostd"
+version = "0.100.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9157cab83003221bfd385833ab587a039f5d6fa7304854042ba358a3b09e0724"
+dependencies = [
+ "indexmap-nostd",
+]
+
+[[package]]
+name = "web-sys"
+version = "0.3.66"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50c24a44ec86bb68fbecd1b3efed7e85ea5621b39b35ef2766b66cd984f8010f"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "web-time"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57099a701fb3a8043f993e8228dc24229c7b942e2b009a1b962e54489ba1d3bf"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "webpki-roots"
+version = "0.25.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1778a42e8b3b90bff8d0f5032bf22250792889a5cdc752aa0020c84abe3aaf10"
+
+[[package]]
+name = "weezl"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9193164d4de03a926d909d3bc7c30543cecb35400c02114792c2cae20d5e2dbb"
+
+[[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.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596"
+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"
+
+[[package]]
+name = "windows-core"
+version = "0.51.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64"
+dependencies = [
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
+dependencies = [
+ "windows-targets 0.52.0",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
+dependencies = [
+ "windows_aarch64_gnullvm 0.48.5",
+ "windows_aarch64_msvc 0.48.5",
+ "windows_i686_gnu 0.48.5",
+ "windows_i686_msvc 0.48.5",
+ "windows_x86_64_gnu 0.48.5",
+ "windows_x86_64_gnullvm 0.48.5",
+ "windows_x86_64_msvc 0.48.5",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd"
+dependencies = [
+ "windows_aarch64_gnullvm 0.52.0",
+ "windows_aarch64_msvc 0.52.0",
+ "windows_i686_gnu 0.52.0",
+ "windows_i686_msvc 0.52.0",
+ "windows_x86_64_gnu 0.52.0",
+ "windows_x86_64_gnullvm 0.52.0",
+ "windows_x86_64_msvc 0.52.0",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04"
+
+[[package]]
+name = "winnow"
+version = "0.5.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "829846f3e3db426d4cee4510841b71a8e58aa2a76b1132579487ae430ccd9c7b"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "winreg"
+version = "0.50.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1"
+dependencies = [
+ "cfg-if",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "writeable"
+version = "0.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dad7bb64b8ef9c0aa27b6da38b452b0ee9fd82beaf276a87dd796fb55cbae14e"
+
+[[package]]
+name = "xattr"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4686009f71ff3e5c4dbcf1a282d0a44db3f021ba69350cd42086b3e5f1c6985"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "xmlparser"
+version = "0.13.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "66fee0b777b0f5ac1c69bb06d361268faafa61cd4682ae064a171c16c433e9e4"
+
+[[package]]
+name = "xmlwriter"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec7a2a501ed189703dba8b08142f057e887dfc4b2cc4db2d343ac6376ba3e0b9"
+
+[[package]]
+name = "xmp-writer"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4543ba138f64a94b19e1e9c66c165bca7e03d470e1c066cb76ea279d9d0e1989"
+
+[[package]]
+name = "yaml-rust"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85"
+dependencies = [
+ "linked-hash-map",
+]
+
+[[package]]
+name = "yoke"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "65e71b2e4f287f467794c671e2b8f8a5f3716b3c829079a1c44740148eff07e4"
+dependencies = [
+ "serde",
+ "stable_deref_trait",
+ "yoke-derive",
+ "zerofrom",
+]
+
+[[package]]
+name = "yoke-derive"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e6936f0cce458098a201c245a11bef556c6a0181129c7034d10d76d1ec3a2b8"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+ "synstructure",
+]
+
+[[package]]
+name = "zerofrom"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "655b0814c5c0b19ade497851070c640773304939a6c0fd5f5fb43da0696d05b7"
+dependencies = [
+ "zerofrom-derive",
+]
+
+[[package]]
+name = "zerofrom-derive"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6a647510471d372f2e6c2e6b7219e44d8c574d24fdc11c610a61455782f18c3"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+ "synstructure",
+]
+
+[[package]]
+name = "zerotrie"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d0594125a0574fb93059c92c588ab209cc036a23d1baeb3410fa9181bea551a0"
+dependencies = [
+ "displaydoc",
+ "litemap",
+ "serde",
+ "zerovec",
+]
+
+[[package]]
+name = "zerovec"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eff4439ae91fb5c72b8abc12f3f2dbf51bd27e6eadb9f8a5bc8898dddb0e27ea"
+dependencies = [
+ "serde",
+ "yoke",
+ "zerofrom",
+ "zerovec-derive",
+]
+
+[[package]]
+name = "zerovec-derive"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b4e5997cbf58990550ef1f0e5124a05e47e1ebd33a84af25739be6031a62c20"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
diff --git a/nixpkgs/pkgs/development/tools/language-servers/typst-lsp/default.nix b/nixpkgs/pkgs/development/tools/language-servers/typst-lsp/default.nix
new file mode 100644
index 000000000000..5fcde6476d11
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/language-servers/typst-lsp/default.nix
@@ -0,0 +1,56 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "typst-lsp";
+  # Please update the corresponding vscode extension when updating
+  # this derivation.
+  version = "0.12.1";
+
+  src = fetchFromGitHub {
+    owner = "nvarner";
+    repo = "typst-lsp";
+    rev = "v${version}";
+    hash = "sha256-KFW2CzdDi/z3Tk9qEubssy/iTh7Awl/tLQGv9CVkdXw=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "typst-0.10.0" = "sha256-qiskc0G/ZdLRZjTicoKIOztRFem59TM4ki23Rl55y9s=";
+      "typst-syntax-0.7.0" = "sha256-yrtOmlFAKOqAmhCP7n0HQCOQpU3DWyms5foCdUb9QTg=";
+      "typstfmt_lib-0.2.7" = "sha256-LBYsTCjZ+U+lgd7Z3H1sBcWwseoHsuepPd66bWgfvhI=";
+    };
+  };
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.SystemConfiguration
+  ];
+
+  checkFlags = [
+    # requires internet access
+    "--skip=workspace::package::external::remote_repo::test::full_download"
+  ] ++ lib.optionals stdenv.isDarwin [
+    # both tests fail on darwin with 'Attempted to create a NULL object.'
+    "--skip=workspace::fs::local::test::read"
+    "--skip=workspace::package::external::manager::test::local_package"
+  ];
+
+  # workspace::package::external::manager::test::local_package tries to access the data directory
+  preCheck = ''
+    export HOME=$(mktemp -d)
+  '';
+
+  meta = with lib; {
+    description = "A brand-new language server for Typst";
+    homepage = "https://github.com/nvarner/typst-lsp";
+    mainProgram = "typst-lsp";
+    changelog = "https://github.com/nvarner/typst-lsp/releases/tag/${src.rev}";
+    license = with licenses; [ asl20 mit ];
+    maintainers = with maintainers; [ figsoda GaetanLepage ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/language-servers/vala-language-server/default.nix b/nixpkgs/pkgs/development/tools/language-servers/vala-language-server/default.nix
new file mode 100644
index 000000000000..40710ad83da3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/language-servers/vala-language-server/default.nix
@@ -0,0 +1,57 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, nix-update-script
+, meson
+, ninja
+, pkg-config
+, scdoc
+, gnome-builder
+, glib
+, libgee
+, json-glib
+, jsonrpc-glib
+, vala
+}:
+
+stdenv.mkDerivation rec {
+  pname = "vala-language-server";
+  version = "0.48.7";
+
+  src = fetchFromGitHub {
+    owner = "vala-lang";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-Vl5DjKBdpk03aPD+0xGoTwD9Slg1rREorqZGX5o10cY=";
+  };
+
+  passthru = {
+    updateScript = nix-update-script { };
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    scdoc
+  ] ++ lib.optionals stdenv.isLinux [
+    # GNOME Builder Plugin
+    gnome-builder
+  ];
+
+  buildInputs = [
+    glib
+    libgee
+    json-glib
+    jsonrpc-glib
+    vala
+  ];
+
+  meta = with lib; {
+    description = "Code Intelligence for Vala & Genie";
+    homepage = "https://github.com/vala-lang/vala-language-server";
+    license = licenses.lgpl21Plus;
+    maintainers = with maintainers; [ andreasfelix ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/language-servers/verible/default.nix b/nixpkgs/pkgs/development/tools/language-servers/verible/default.nix
new file mode 100644
index 000000000000..4809b85e2e5b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/language-servers/verible/default.nix
@@ -0,0 +1,97 @@
+{ lib
+, stdenv
+, buildBazelPackage
+, fetchFromGitHub
+, bazel_5
+, jdk
+, bison
+, flex
+, python3
+}:
+
+let
+  system = stdenv.hostPlatform.system;
+in
+buildBazelPackage rec {
+  pname = "verible";
+
+  # These environment variables are read in bazel/build-version.py to create
+  # a build string shown in the tools --version output.
+  # If env variables not set, it would attempt to extract it from .git/.
+  GIT_DATE = "2024-02-01";
+  GIT_VERSION = "v0.0-3515-g2d841599";
+
+  # Derive nix package version from GIT_VERSION: "v1.2-345-abcde" -> "1.2.345"
+  version = builtins.concatStringsSep "." (lib.take 3 (lib.drop 1 (builtins.splitVersion GIT_VERSION)));
+
+  src = fetchFromGitHub {
+    owner = "chipsalliance";
+    repo  = "verible";
+    rev   = "${GIT_VERSION}";
+    hash  = "sha256-D/blcex/St1nLKvjzuKnmAJE8HVlGy8ampmXIxKK11M=";
+  };
+
+  bazel = bazel_5;
+  bazelFlags = [
+    "--//bazel:use_local_flex_bison"
+    "--java_runtime_version=local_jdk"
+    "--tool_java_runtime_version=local_jdk"
+  ];
+
+  fetchAttrs = {
+    sha256 = "sha256-2YruKvU7OZQ7mKNrqYITat+cmf/DEytDElYw7CvkxJk=";
+  };
+
+  nativeBuildInputs = [
+    jdk        # bazel uses that.
+    bison      # We use local flex and bison as WORKSPACE sources fail
+    flex       # .. to compile with newer glibc
+    python3
+  ];
+
+  postPatch = ''
+    patchShebangs\
+      bazel/build-version.py \
+      bazel/sh_test_with_runfiles_lib.sh \
+      common/lsp/dummy-ls_test.sh \
+      common/tools/patch_tool_test.sh \
+      common/tools/verible-transform-interactive.sh \
+      common/tools/verible-transform-interactive-test.sh \
+      kythe-browse.sh \
+      verilog/tools
+  '';
+
+  removeRulesCC = false;
+  bazelTargets = [ ":install-binaries" ];
+  bazelTestTargets = [ "//..." ];
+  bazelBuildFlags = [
+    "-c opt"
+  ];
+  buildAttrs = {
+    installPhase = ''
+      mkdir -p "$out/bin"
+
+      install bazel-bin/common/tools/verible-patch-tool "$out/bin"
+
+      V_TOOLS_DIR=bazel-bin/verilog/tools
+      install $V_TOOLS_DIR/diff/verible-verilog-diff "$out/bin"
+      install $V_TOOLS_DIR/formatter/verible-verilog-format "$out/bin"
+      install $V_TOOLS_DIR/kythe/verible-verilog-kythe-extractor "$out/bin"
+      install $V_TOOLS_DIR/lint/verible-verilog-lint "$out/bin"
+      install $V_TOOLS_DIR/ls/verible-verilog-ls "$out/bin"
+      install $V_TOOLS_DIR/obfuscator/verible-verilog-obfuscate "$out/bin"
+      install $V_TOOLS_DIR/preprocessor/verible-verilog-preprocessor "$out/bin"
+      install $V_TOOLS_DIR/project/verible-verilog-project "$out/bin"
+      install $V_TOOLS_DIR/syntax/verible-verilog-syntax "$out/bin"
+    '';
+  };
+
+  meta = with lib; {
+    description = "Suite of SystemVerilog developer tools. Including a style-linter, indexer, formatter, and language server.";
+    homepage = "https://github.com/chipsalliance/verible";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ hzeller newam ];
+    # Platforms linux only currently; some LIBTOOL issue on Darwin w/ bazel
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/language-servers/vhdl-ls/default.nix b/nixpkgs/pkgs/development/tools/language-servers/vhdl-ls/default.nix
new file mode 100644
index 000000000000..1ca6f8930709
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/language-servers/vhdl-ls/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "vhdl-ls";
+  version = "0.77.0";
+
+  src = fetchFromGitHub {
+    owner = "VHDL-LS";
+    repo = "rust_hdl";
+    rev = "v${version}";
+    hash = "sha256-IAe4m/GC6ubCcZZESC6fToWVQT73XrhjJOiGCGzNxnQ=";
+  };
+
+  cargoHash = "sha256-p7BL8WuQiB1KihwAl5aeO6Fa9INYRTQgoQPHcSMnaiQ=";
+
+  postPatch = ''
+    substituteInPlace vhdl_lang/src/config.rs \
+      --replace /usr/lib $out/lib
+  '';
+
+  postInstall = ''
+    mkdir -p $out/lib/rust_hdl
+    cp -r vhdl_libraries $out/lib/rust_hdl
+  '';
+
+  meta = {
+    description = "A fast VHDL language server";
+    homepage = "https://github.com/VHDL-LS/rust_hdl";
+    license = lib.licenses.mpl20;
+    mainProgram = "vhdl_ls";
+    maintainers = with lib.maintainers; [ doronbehar ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/language-servers/vscode-langservers-extracted/default.nix b/nixpkgs/pkgs/development/tools/language-servers/vscode-langservers-extracted/default.nix
new file mode 100644
index 000000000000..aa7705641615
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/language-servers/vscode-langservers-extracted/default.nix
@@ -0,0 +1,43 @@
+{ lib, stdenv, buildNpmPackage, fetchFromGitHub, vscodium, vscode-extensions }:
+
+buildNpmPackage rec {
+  pname = "vscode-langservers-extracted";
+  version = "4.8.0";
+
+  src = fetchFromGitHub {
+    owner = "hrsh7th";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-sGnxmEQ0J74zNbhRpsgF/cYoXwn4jh9yBVjk6UiUdK0=";
+  };
+
+  npmDepsHash = "sha256-LFWC87Ahvjf2moijayFze1Jk0TmTc7rOUd/s489PHro=";
+
+  buildPhase =
+    let
+      extensions =
+        if stdenv.isDarwin
+        then "${vscodium}/Applications/VSCodium.app/Contents/Resources/app/extensions"
+        else "${vscodium}/lib/vscode/resources/app/extensions";
+    in
+    ''
+      npx babel ${extensions}/css-language-features/server/dist/node \
+        --out-dir lib/css-language-server/node/
+      npx babel ${extensions}/html-language-features/server/dist/node \
+        --out-dir lib/html-language-server/node/
+      npx babel ${extensions}/json-language-features/server/dist/node \
+        --out-dir lib/json-language-server/node/
+      npx babel ${extensions}/markdown-language-features/server/dist/node \
+        --out-dir lib/markdown-language-server/node/
+      cp -r ${vscode-extensions.dbaeumer.vscode-eslint}/share/vscode/extensions/dbaeumer.vscode-eslint/server/out \
+        lib/eslint-language-server
+      mv lib/markdown-language-server/node/workerMain.js lib/markdown-language-server/node/main.js
+    '';
+
+  meta = with lib; {
+    description = "HTML/CSS/JSON/ESLint language servers extracted from vscode";
+    homepage = "https://github.com/hrsh7th/vscode-langservers-extracted";
+    license = licenses.mit;
+    maintainers = with maintainers; [ lord-valen ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/language-servers/yaml-language-server/default.nix b/nixpkgs/pkgs/development/tools/language-servers/yaml-language-server/default.nix
new file mode 100644
index 000000000000..080b39dcf46e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/language-servers/yaml-language-server/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, mkYarnPackage
+, fetchYarnDeps
+, fetchFromGitHub
+}:
+
+mkYarnPackage rec {
+  pname = "yaml-language-server";
+  version = "1.14.0";
+
+  src = fetchFromGitHub {
+    owner = "redhat-developer";
+    repo = "yaml-language-server";
+    rev = version;
+    hash = "sha256-DS5kMw/x8hP2MzxHdHXnBqqBGLq21NiZBb5ApjEe/ts=";
+  };
+
+  packageJSON = ./package.json;
+  offlineCache = fetchYarnDeps {
+    yarnLock = "${src}/yarn.lock";
+    hash = "sha256-zHcxZ4VU6CGux72Nsy0foU4gFshK1wO/LTfnwOoirmg=";
+  };
+
+  buildPhase = ''
+    runHook preBuild
+
+    export HOME=$(mktemp -d)
+    yarn --offline build
+
+    runHook postBuild
+  '';
+
+  meta = {
+    changelog = "https://github.com/redhat-developer/yaml-language-server/blob/${src.rev}/CHANGELOG.md";
+    description = "Language Server for YAML Files";
+    homepage = "https://github.com/redhat-developer/yaml-language-server";
+    license = lib.licenses.mit;
+    mainProgram = "yaml-language-server";
+    maintainers = with lib.maintainers; [ wolfangaukang ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/language-servers/yaml-language-server/package.json b/nixpkgs/pkgs/development/tools/language-servers/yaml-language-server/package.json
new file mode 100644
index 000000000000..c270da41f4df
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/language-servers/yaml-language-server/package.json
@@ -0,0 +1,108 @@
+{
+  "name": "yaml-language-server",
+  "description": "YAML language server",
+  "version": "1.14.0",
+  "author": "Gorkem Ercan (Red Hat)",
+  "license": "MIT",
+  "contributors": [
+    {
+      "name": "Joshua Pinkney",
+      "email": "joshpinkney@gmail.com"
+    },
+    {
+      "name": "Yevhen Vydolob",
+      "email": "yvydolob@redhat.com"
+    },
+    {
+      "name": "Google LLC"
+    }
+  ],
+  "bin": {
+    "yaml-language-server": "./bin/yaml-language-server"
+  },
+  "main": "./out/server/src/index.js",
+  "keywords": [
+    "yaml",
+    "LSP"
+  ],
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/redhat-developer/yaml-language-server.git"
+  },
+  "optionalDependencies": {
+    "prettier": "2.8.7"
+  },
+  "dependencies": {
+    "ajv": "^8.11.0",
+    "lodash": "4.17.21",
+    "request-light": "^0.5.7",
+    "vscode-json-languageservice": "4.1.8",
+    "vscode-languageserver": "^7.0.0",
+    "vscode-languageserver-textdocument": "^1.0.1",
+    "vscode-languageserver-types": "^3.16.0",
+    "vscode-nls": "^5.0.0",
+    "vscode-uri": "^3.0.2",
+    "yaml": "2.2.2"
+  },
+  "devDependencies": {
+    "@microsoft/eslint-formatter-sarif": "3.0.0",
+    "@types/chai": "^4.2.12",
+    "@types/mocha": "8.2.2",
+    "@types/node": "16.x",
+    "@types/prettier": "2.7.2",
+    "@types/sinon": "^9.0.5",
+    "@types/sinon-chai": "^3.2.5",
+    "@typescript-eslint/eslint-plugin": "^5.38.0",
+    "@typescript-eslint/parser": "^5.38.0",
+    "chai": "^4.2.0",
+    "coveralls": "3.1.1",
+    "eslint": "^8.24.0",
+    "eslint-config-prettier": "^8.5.0",
+    "eslint-plugin-import": "^2.26.0",
+    "eslint-plugin-prettier": "^4.2.1",
+    "http-proxy-agent": "^5.0.0",
+    "https-proxy-agent": "^5.0.0",
+    "mocha": "9.2.2",
+    "mocha-lcov-reporter": "^1.3.0",
+    "nyc": "^15.1.0",
+    "rimraf": "^3.0.2",
+    "sinon": "^9.0.3",
+    "sinon-chai": "^3.5.0",
+    "source-map-support": "^0.5.19",
+    "ts-node": "^10.0.0",
+    "typescript": "^4.8.3"
+  },
+  "scripts": {
+    "clean": "rimraf out/server && rimraf lib",
+    "compile": "tsc -p .",
+    "watch": "tsc --watch -p .",
+    "test": "mocha --require ts-node/register --timeout 5000 --ui bdd ./test/*.test.ts",
+    "coverage": "nyc mocha --require ts-node/register --timeout 5000 --require source-map-support/register --recursive --ui bdd ./test/*.test.ts",
+    "coveralls": "nyc --reporter=lcov --reporter=text mocha --timeout 5000 --require ts-node/register --require source-map-support/register --recursive --ui bdd ./test/*.test.ts",
+    "lint": "eslint --max-warnings 0 -c .eslintrc.js --ext .ts src test",
+    "lint-ci": "eslint --max-warnings 0 -c .eslintrc.js -f @microsoft/eslint-formatter-sarif -o eslint-result.sarif --ext .ts src test",
+    "prettier-fix": "yarn prettier --write .",
+    "build": "yarn clean && yarn lint && yarn compile && yarn build:libs",
+    "build:libs": "yarn compile:umd && yarn compile:esm",
+    "compile:umd": "tsc -p ./tsconfig.umd.json",
+    "compile:esm": "tsc -p ./tsconfig.esm.json",
+    "check-dependencies": "node ./scripts/check-dependencies.js",
+    "pull-remote": "git pull https://github.com/redhat-developer/yaml-language-server.git main"
+  },
+  "nyc": {
+    "extension": [
+      ".ts",
+      ".tsx"
+    ],
+    "exclude": [
+      "**/*.d.ts",
+      "test/",
+      "out",
+      "lib",
+      "coverage/",
+      ".eslintrc.js",
+      "scripts"
+    ],
+    "all": true
+  }
+}
diff --git a/nixpkgs/pkgs/development/tools/language-servers/zls/default.nix b/nixpkgs/pkgs/development/tools/language-servers/zls/default.nix
new file mode 100644
index 000000000000..2188af2a1166
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/language-servers/zls/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, zig_0_11
+, callPackage
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "zls";
+  version = "0.11.0";
+
+  src = fetchFromGitHub {
+    owner = "zigtools";
+    repo = "zls";
+    rev = finalAttrs.version;
+    fetchSubmodules = true;
+    hash = "sha256-WrbjJyc4pj7R4qExdzd0DOQ9Tz3TFensAfHdecBA8UI=";
+  };
+
+  nativeBuildInputs = [
+    zig_0_11.hook
+  ];
+
+  postPatch = ''
+    ln -s ${callPackage ./deps.nix { }} $ZIG_GLOBAL_CACHE_DIR/p
+  '';
+
+  meta = {
+    description = "Zig LSP implementation + Zig Language Server";
+    changelog = "https://github.com/zigtools/zls/releases/tag/${finalAttrs.version}";
+    homepage = "https://github.com/zigtools/zls";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ figsoda moni ];
+    platforms = lib.platforms.unix;
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/language-servers/zls/deps.nix b/nixpkgs/pkgs/development/tools/language-servers/zls/deps.nix
new file mode 100644
index 000000000000..5c1b2ce89d3c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/language-servers/zls/deps.nix
@@ -0,0 +1,27 @@
+# generated by zon2nix (https://github.com/figsoda/zon2nix)
+
+{ linkFarm, fetchzip }:
+
+linkFarm "zig-packages" [
+  {
+    name = "1220363c7e27b2d3f39de6ff6e90f9537a0634199860fea237a55ddb1e1717f5d6a5";
+    path = fetchzip {
+      url = "https://gist.github.com/antlilja/8372900fcc09e38d7b0b6bbaddad3904/archive/6c3321e0969ff2463f8335da5601986cf2108690.tar.gz";
+      hash = "sha256-m/kr4kmkG2rLkAj5YwvM0HmXTd+chAiQHzYK6ozpWlw=";
+    };
+  }
+  {
+    name = "122048992ca58a78318b6eba4f65c692564be5af3b30fbef50cd4abeda981b2e7fa5";
+    path = fetchzip {
+      url = "https://github.com/ziglibs/known-folders/archive/fa75e1bc672952efa0cf06160bbd942b47f6d59b.tar.gz";
+      hash = "sha256-U/h4bVarq8CFKbFyNXKl3vBRPubYooLxA1xUz3qMGPE=";
+    };
+  }
+  {
+    name = "122089a8247a693cad53beb161bde6c30f71376cd4298798d45b32740c3581405864";
+    path = fetchzip {
+      url = "https://github.com/ziglibs/diffz/archive/90353d401c59e2ca5ed0abe5444c29ad3d7489aa.tar.gz";
+      hash = "sha256-3CdYo6WevT0alRwKmbABahjhFKz7V9rdkDUZ43VtDeU=";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/development/tools/lazygit/default.nix b/nixpkgs/pkgs/development/tools/lazygit/default.nix
new file mode 100644
index 000000000000..97233ab11582
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/lazygit/default.nix
@@ -0,0 +1,31 @@
+{ lib, buildGoModule, fetchFromGitHub, lazygit, testers }:
+
+buildGoModule rec {
+  pname = "lazygit";
+  version = "0.40.2";
+
+  src = fetchFromGitHub {
+    owner = "jesseduffield";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-xj5WKAduaJWA3NhWuMsF5EXF91+NTGAXkbdhpeFqLxE=";
+  };
+
+  vendorHash = null;
+  subPackages = [ "." ];
+
+  ldflags = [ "-X main.version=${version}" "-X main.buildSource=nix" ];
+
+  passthru.tests.version = testers.testVersion {
+    package = lazygit;
+  };
+
+  meta = with lib; {
+    description = "Simple terminal UI for git commands";
+    homepage = "https://github.com/jesseduffield/lazygit";
+    changelog = "https://github.com/jesseduffield/lazygit/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ Br1ght0ne equirosa paveloom ];
+    mainProgram = "lazygit";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/lc3tools/0001-mangle-configure.patch b/nixpkgs/pkgs/development/tools/lc3tools/0001-mangle-configure.patch
new file mode 100644
index 000000000000..80b5c7d21174
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/lc3tools/0001-mangle-configure.patch
@@ -0,0 +1,29 @@
+diff --git a/configure b/configure
+index 46f9af4..dfc1b3e 100755
+--- a/configure
++++ b/configure
+@@ -17,10 +17,11 @@ esac
+ 
+ # Some binaries that we'll need, and the places that we might find them.
+ 
+-binlist="uname flex gcc wish rm cp mkdir chmod sed"
+-pathlist="/bin /usr/bin /usr/local/bin /sw/bin /usr/x116/bin /usr/X11R6/bin"
+-libpathlist="/lib /usr/lib /usr/local/lib"
+-incpathlist="/include /usr/include /usr/local/include"
++IFS=:
++binlist="uname:flex:gcc:wish:rm:cp:mkdir:chmod:sed"
++pathlist=$PATH
++libpathlist=$LIBS
++incpathlist=$INCLUDES
+ 
+ 
+ # Find the binaries (or die trying).
+@@ -55,7 +56,7 @@ case `$uname -s` in
+ 		echo "Configuring for Cygwin..."
+ 		;;
+ 	Linux*) echo "Configuring for Linux..."
+-		OS_SIM_LIBS="-lcurses"
++		# OS_SIM_LIBS="-lcurses"
+ 		;;
+ 	SunOS*)  echo "Configuring for Solaris..."
+ 		OS_SIM_LIBS="-lcurses -lsocket -lnsl"
diff --git a/nixpkgs/pkgs/development/tools/lc3tools/0002-lc3os-path.patch b/nixpkgs/pkgs/development/tools/lc3tools/0002-lc3os-path.patch
new file mode 100644
index 000000000000..413c95e12f64
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/lc3tools/0002-lc3os-path.patch
@@ -0,0 +1,21 @@
+diff --git a/lc3sim.c b/lc3sim.c
+index dac7f7a..736fd7c 100644
+--- a/lc3sim.c
++++ b/lc3sim.c
+@@ -665,14 +665,14 @@ init_machine ()
+     bzero (lc3_sym_hash, sizeof (lc3_sym_hash));
+     clear_all_breakpoints ();
+ 
+-    if (read_obj_file (INSTALL_DIR "/lc3os.obj", &os_start, &os_end) == -1) {
++    if (read_obj_file (INSTALL_DIR "/share/lc3tools/lc3os.obj", &os_start, &os_end) == -1) {
+ 	if (gui_mode)
+ 	    puts ("ERR {Failed to read LC-3 OS code.}");
+ 	else
+ 	    puts ("Failed to read LC-3 OS code.");
+ 	show_state_if_stop_visible ();
+     } else {
+-	if (read_sym_file (INSTALL_DIR "/lc3os.sym") == -1) {
++	if (read_sym_file (INSTALL_DIR "/share/lc3tools/lc3os.sym") == -1) {
+ 	    if (gui_mode)
+ 		puts ("ERR {Failed to read LC-3 OS symbols.}");
+ 	    else
diff --git a/nixpkgs/pkgs/development/tools/lc3tools/0003-lc3sim-tk-path.patch b/nixpkgs/pkgs/development/tools/lc3tools/0003-lc3sim-tk-path.patch
new file mode 100644
index 000000000000..38bc9daaf59c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/lc3tools/0003-lc3sim-tk-path.patch
@@ -0,0 +1,13 @@
+diff --git a/Makefile.def b/Makefile.def
+index 34f7df3..05dc86c 100644
+--- a/Makefile.def
++++ b/Makefile.def
+@@ -155,7 +155,7 @@ dist_lc3sim-tk: lc3sim-tk
+ 
+ lc3sim-tk: lc3sim-tk.def
+ 	${SED} -e 's @@WISH@@ ${WISH} g' \
+-		-e 's*@@LC3_SIM@@*"${INSTALL_DIR}/lc3sim"*g' \
++		-e 's*@@LC3_SIM@@*"${INSTALL_DIR}/bin/lc3sim"*g' \
+ 		-e 's!@@CODE_FONT@@!${CODE_FONT}!g' \
+ 		-e 's!@@BUTTON_FONT@@!${BUTTON_FONT}!g' \
+ 		-e 's!@@CONSOLE_FONT@@!${CONSOLE_FONT}!g' \
diff --git a/nixpkgs/pkgs/development/tools/lc3tools/0004-configure-use-cc.patch b/nixpkgs/pkgs/development/tools/lc3tools/0004-configure-use-cc.patch
new file mode 100644
index 000000000000..caaec2200008
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/lc3tools/0004-configure-use-cc.patch
@@ -0,0 +1,22 @@
+diff --git a/configure b/configure
+index dfc1b3e..55577af 100755
+--- a/configure
++++ b/configure
+@@ -18,7 +18,7 @@ esac
+ # Some binaries that we'll need, and the places that we might find them.
+ 
+ IFS=:
+-binlist="uname:flex:gcc:wish:rm:cp:mkdir:chmod:sed"
++binlist="uname:flex:cc:wish:rm:cp:mkdir:chmod:sed"
+ pathlist=$PATH
+ libpathlist=$LIBS
+ incpathlist=$INCLUDES
+@@ -109,7 +109,7 @@ fi
+ # Splice it all in to Makefile.def to create the Makefile.
+ 
+ rm -f Makefile
+-sed -e "s __GCC__ $gcc g" -e "s __FLEX__ $flex g" -e "s __EXE__ $EXE g"     \
++sed -e "s __GCC__ $cc g" -e "s __FLEX__ $flex g" -e "s __EXE__ $EXE g"     \
+     -e "s*__OS_SIM_LIBS__*$OS_SIM_LIBS*g" -e "s __RM__ $rm g"               \
+     -e "s __CP__ $cp g" -e "s __MKDIR__ $mkdir g" -e "s __CHMOD__ $chmod g" \
+     -e "s __USE_READLINE__ $USE_READLINE g" -e "s*__RLLPATH__*$RLLPATH*g"   \
diff --git a/nixpkgs/pkgs/development/tools/lc3tools/default.nix b/nixpkgs/pkgs/development/tools/lc3tools/default.nix
new file mode 100644
index 000000000000..c6120a227a99
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/lc3tools/default.nix
@@ -0,0 +1,57 @@
+{ lib, stdenv, fetchurl, unzip, flex, tk, ncurses, readline }:
+
+stdenv.mkDerivation {
+  pname = "lc3tools";
+  version = "0.12";
+
+  src = fetchurl {
+    url = "https://highered.mheducation.com/sites/dl/free/0072467509/104652/lc3tools_v12.zip";
+    hash = "sha256-PTM0ole8pHiJmUaahjPwcBQY8/hVVgQhADZ4bSABt3I=";
+  };
+
+  patches = [
+    # the original configure looks for things in the FHS path
+    # I have modified it to take environment vars
+    ./0001-mangle-configure.patch
+
+    # lc3sim looks for the LC3 OS in $out/share/lc3tools instead of $out
+    ./0002-lc3os-path.patch
+
+    # lc3sim-tk looks for lc3sim in $out/bin instead of $out
+    ./0003-lc3sim-tk-path.patch
+
+    # use `cc` instead of `gcc`; on macOS the latter is not present
+    ./0004-configure-use-cc.patch
+  ];
+
+  nativeBuildInputs = [ unzip ];
+  buildInputs = [ flex tk ncurses readline ];
+
+  # lumetta published this a while ago but handrolled his configure
+  # jank in the original packaging makes this necessary:
+  LIBS = "${flex}/lib:${ncurses}/lib:${readline}/lib";
+  INCLUDES = "${flex}/include:${ncurses}/include:${readline}/include";
+
+  # it doesn't take `--prefix`
+  prefixKey = "--installdir ";
+
+  postInstall = ''
+    mkdir -p $out/{bin,share/lc3tools}
+
+    mv -t $out/share/lc3tools $out/{COPYING,NO_WARRANTY,README} $out/lc3os*
+    mv -t $out/bin $out/lc3*
+  '';
+
+  meta = with lib; {
+    longDescription = ''
+      The LC-3 tools package contains the lc3as assembler, the lc3sim simulator,
+      and lc3sim-tk, a Tcl/Tk-based GUI frontend to the simulator.
+    '';
+    description = "Toolchain and emulator for the LC-3 architecture";
+    homepage = "https://highered.mheducation.com/sites/0072467509/student_view0/lc-3_simulator.html";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ anna328p ];
+    mainProgram = "lc3sim-tk";
+    platforms = with lib.platforms; unix ++ windows;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ldid-procursus/default.nix b/nixpkgs/pkgs/development/tools/ldid-procursus/default.nix
new file mode 100644
index 000000000000..b9ffbb2fc871
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ldid-procursus/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, installShellFiles
+, pkg-config
+, libplist
+, openssl
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "ldid-procursus";
+  version = "2.1.5-procursus7";
+
+  src = fetchFromGitHub {
+    owner = "ProcursusTeam";
+    repo = "ldid";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-QnSmWY9zCOPYAn2VHc5H+VQXjTCyr0EuosxvKGGpDtQ=";
+  };
+
+  nativeBuildInputs = [ pkg-config installShellFiles ];
+  buildInputs = [ libplist openssl ];
+
+  stripDebugFlags = [ "--strip-unneeded" ];
+  makeFlags = [ "PREFIX=${placeholder "out"}" ];
+
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace "pkg-config" "$PKG_CONFIG"
+  '';
+
+  postInstall = ''
+    installShellCompletion --cmd ldid --zsh _ldid
+  '';
+
+  meta = with lib; {
+    mainProgram = "ldid";
+    description = "Put real or fake signatures in a Mach-O binary";
+    homepage = "https://github.com/ProcursusTeam/ldid";
+    maintainers = with maintainers; [ keto ];
+    platforms = platforms.unix;
+    license = licenses.agpl3Only;
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/ldid/default.nix b/nixpkgs/pkgs/development/tools/ldid/default.nix
new file mode 100644
index 000000000000..40cfc1e53ff5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ldid/default.nix
@@ -0,0 +1,67 @@
+{ lib
+, stdenv
+, callPackage
+, fetchgit
+, libplist
+, libxml2
+, openssl
+, CoreFoundation
+, Security
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ldid";
+  version = "2.1.5";
+
+  src = fetchgit {
+    url = "git://git.saurik.com/ldid.git";
+    rev = "v${version}";
+    sha256 = "sha256-RM5pU3mrgyvwNfWKNvCT3UYVGKtVhD7ifgp8fq9xXiM=";
+  };
+
+  strictDeps = true;
+
+  buildInputs = [
+    libplist
+    libxml2
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [
+    CoreFoundation
+    Security
+  ];
+
+  NIX_LDFLAGS = [
+    "-lcrypto"
+    "-lplist-2.0"
+    "-lxml2"
+  ] ++ lib.optionals stdenv.isDarwin [
+    "-framework CoreFoundation"
+    "-framework Security"
+  ];
+
+  buildPhase = ''
+    runHook preBuild
+
+    cc -c -o lookup2.o lookup2.c -I.
+    c++ -std=c++11 -o ldid lookup2.o ldid.cpp -I. ${toString NIX_LDFLAGS}
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 {,$out/bin/}ldid
+    ln -s $out/bin/ldid $out/bin/ldid2
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Link Identity Editor";
+    homepage = "https://cydia.saurik.com/info/ldid/";
+    maintainers = with maintainers; [ wegank ];
+    platforms = platforms.unix;
+    license = licenses.agpl3Only;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/leaps/default.nix b/nixpkgs/pkgs/development/tools/leaps/default.nix
new file mode 100644
index 000000000000..a0f99496a438
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/leaps/default.nix
@@ -0,0 +1,27 @@
+{ lib, buildGoModule, fetchFromGitHub, testers, leaps }:
+
+buildGoModule rec {
+  pname = "leaps";
+  version = "0.9.1";
+
+  src = fetchFromGitHub {
+    owner = "Jeffail";
+    repo = "leaps";
+    rev = "v${version}";
+    sha256 = "sha256-9AYE8+K6B6/odwNR+UhTTqmJ1RD6HhKvtC3WibWUZic=";
+  };
+
+  proxyVendor = true; # darwin/linux hash mismatch
+  vendorHash = "sha256-0dwUOoV2bxPB+B6CKxJPImPIDlBMPcm0AwEMrVUkALc=";
+
+  ldflags = [ "-s" "-w" "-X main.version=${version}" ];
+
+  passthru.tests.version = testers.testVersion { package = leaps; };
+
+  meta = with lib; {
+    description = "A pair programming tool and library written in Golang";
+    homepage = "https://github.com/jeffail/leaps/";
+    license = licenses.mit;
+    maintainers = with lib.maintainers; [ qknight ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/legitify/default.nix b/nixpkgs/pkgs/development/tools/legitify/default.nix
new file mode 100644
index 000000000000..8a6e9387fed3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/legitify/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "legitify";
+  version = "0.1.5";
+
+  src = fetchFromGitHub {
+    owner = "Legit-Labs";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-Sr6P5S5+DqbP0ihCj97l84739/NRAlYJLnXp4B5gHNE=";
+  };
+
+  vendorHash = "sha256-EJMXzWrOXFl7JFYBp/XAcHLcNyWCKbOBAyo/Yf2mh5s=";
+
+  ldflags = [
+    "-w"
+    "-s"
+    "-X github.com/Legit-Labs/legitify/internal/version.Version=${version}"
+  ];
+
+  meta = with lib; {
+    description = "Tool to detect and remediate misconfigurations and security risks of GitHub assets";
+    homepage = "https://github.com/Legit-Labs/legitify";
+    changelog = "https://github.com/Legit-Labs/legitify/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/librarian-puppet-go/default.nix b/nixpkgs/pkgs/development/tools/librarian-puppet-go/default.nix
new file mode 100644
index 000000000000..411660a1f0be
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/librarian-puppet-go/default.nix
@@ -0,0 +1,25 @@
+{ lib, fetchFromGitHub, buildGoPackage }:
+
+buildGoPackage rec {
+  pname = "librarian-puppet-go";
+  version = "0.3.10";
+
+  goPackagePath = "github.com/tmtk75/librarian-puppet-go";
+
+  src = fetchFromGitHub {
+    owner = "tmtk75";
+    repo = "librarian-puppet-go";
+    rev = "v${version}";
+    sha256 = "sha256-IEhqyowyLTXDEhg4nkix1N45S0+k+RngMP6TsaZQ4mI=";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with lib; {
+    inherit (src.meta) homepage;
+    description = "librarian-puppet implementation in go";
+    license = licenses.mit;
+    maintainers = with maintainers; [ womfoo ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/librarian-puppet-go/deps.nix b/nixpkgs/pkgs/development/tools/librarian-puppet-go/deps.nix
new file mode 100644
index 000000000000..e5729707d8ab
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/librarian-puppet-go/deps.nix
@@ -0,0 +1,12 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.2.1
+[
+  {
+    goPackagePath = "github.com/jawher/mow.cli";
+    fetch = {
+      type = "git";
+      url = "https://github.com/jawher/mow.cli";
+      rev = "3ff64ca21987cfa628bd8d1865162b7ccd6107d7";
+      sha256 = "0vws79q4x3c9kjdsin3vw5200sinkxag3bfa0n9k69svsb222bij";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/development/tools/libsigrok/default.nix b/nixpkgs/pkgs/development/tools/libsigrok/default.nix
new file mode 100644
index 000000000000..ca9aee9c4592
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/libsigrok/default.nix
@@ -0,0 +1,63 @@
+{ lib
+, stdenv
+, fetchgit
+, autoreconfHook
+, pkg-config
+, libzip
+, glib
+, libusb1
+, libftdi1
+, check
+, libserialport
+, doxygen
+, glibmm
+, python
+, hidapi
+, libieee1284
+, bluez
+, sigrok-firmware-fx2lafw
+}:
+
+stdenv.mkDerivation rec {
+  pname = "libsigrok";
+  version = "0.5.2-unstable-2024-01-03";
+
+  src = fetchgit {
+    url = "git://sigrok.org/libsigrok";
+    rev = "b503d24cdf56abf8c0d66d438ccac28969f01670";
+    hash = "sha256-9EW0UCzU6MqBX6rkT5CrBsDkAi6/CLyS9MZHsDV+1IQ=";
+  };
+
+  enableParallelBuilding = true;
+
+  nativeBuildInputs = [ autoreconfHook doxygen pkg-config python ];
+  buildInputs = [
+    libzip glib libusb1 libftdi1 check libserialport glibmm hidapi
+  ] ++ lib.optionals stdenv.isLinux [ libieee1284 bluez ];
+
+  strictDeps = true;
+
+  postInstall = ''
+    mkdir -p $out/etc/udev/rules.d
+    cp contrib/*.rules $out/etc/udev/rules.d
+
+    mkdir -p "$out/share/sigrok-firmware/"
+    cp ${sigrok-firmware-fx2lafw}/share/sigrok-firmware/* "$out/share/sigrok-firmware/"
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    # assert that c++ bindings are included
+    # note that this is only true for modern (>0.5) versions; the 0.3 series does not have these
+    [[ -f $out/include/libsigrokcxx/libsigrokcxx.hpp ]] \
+      || { echo 'C++ bindings were not generated; check configure output'; false; }
+  '';
+
+  meta = with lib; {
+    description = "Core library of the sigrok signal analysis software suite";
+    homepage = "https://sigrok.org/";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = with maintainers; [ bjornfor vifino ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/libsigrokdecode/default.nix b/nixpkgs/pkgs/development/tools/libsigrokdecode/default.nix
new file mode 100644
index 000000000000..972c413ccddd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/libsigrokdecode/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchgit, pkg-config, autoreconfHook, glib, python3, check, libxcrypt }:
+
+stdenv.mkDerivation rec {
+  pname = "libsigrokdecode";
+  version = "0.5.3-unstable-2023-10-23";
+
+  src = fetchgit {
+    url = "git://sigrok.org/libsigrokdecode";
+    rev = "0c35c5c5845d05e5f624c99d58af992d2f004446";
+    hash = "sha256-1kQB7uk2c+6Uriw+1o6brThDcBLoCdPV0MVWAha7ohk=";
+  };
+
+  nativeBuildInputs = [ pkg-config autoreconfHook ];
+  buildInputs = [ glib python3 libxcrypt ];
+  nativeCheckInputs = [ check ];
+  doCheck = true;
+
+  meta = with lib; {
+    description = "Protocol decoding library for the sigrok signal analysis software suite";
+    homepage = "https://sigrok.org/";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = with maintainers; [ bjornfor vifino ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/license-scanner/default.nix b/nixpkgs/pkgs/development/tools/license-scanner/default.nix
new file mode 100644
index 000000000000..c1ea963f44b1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/license-scanner/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "license-scanner";
+  version = "0.11.0";
+
+  src = fetchFromGitHub {
+    owner = "CycloneDX";
+    repo = "license-scanner";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-2KUaVDAZxMwZ3AAMEUmRiuvenPSFliUp6rZCZrVTDps=";
+  };
+
+  vendorHash = "sha256-7xa2tdCDCXkOZCLL8YPtO7i1VqD61Mow7un0690I8mM=";
+
+  meta = with lib; {
+    description = "Utility that provides an API and CLI to identify licenses and legal terms";
+    homepage = "https://github.com/CycloneDX/license-scanner";
+    changelog = "https://github.com/CycloneDX/license-scanner/blob/${version}/CHANGELOG.md";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/license_finder/Gemfile b/nixpkgs/pkgs/development/tools/license_finder/Gemfile
new file mode 100644
index 000000000000..0a936674240b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/license_finder/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'license_finder'
diff --git a/nixpkgs/pkgs/development/tools/license_finder/Gemfile.lock b/nixpkgs/pkgs/development/tools/license_finder/Gemfile.lock
new file mode 100644
index 000000000000..9adea6fc73ff
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/license_finder/Gemfile.lock
@@ -0,0 +1,26 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    license_finder (7.0.1)
+      bundler
+      rubyzip (>= 1, < 3)
+      thor (~> 1.2)
+      tomlrb (>= 1.3, < 2.1)
+      with_env (= 1.1.0)
+      xml-simple (~> 1.1.9)
+    rexml (3.2.5)
+    rubyzip (2.3.2)
+    thor (1.2.1)
+    tomlrb (2.0.1)
+    with_env (1.1.0)
+    xml-simple (1.1.9)
+      rexml
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  license_finder
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/development/tools/license_finder/default.nix b/nixpkgs/pkgs/development/tools/license_finder/default.nix
new file mode 100644
index 000000000000..954e2dcd5183
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/license_finder/default.nix
@@ -0,0 +1,19 @@
+{ lib, bundlerEnv, bundlerUpdateScript, ruby }:
+
+bundlerEnv {
+  pname = "license_finder";
+  version = "7.0.1";
+
+  inherit ruby;
+  gemdir = ./.;
+
+  passthru.updateScript = bundlerUpdateScript "license_finder";
+
+  meta = with lib; {
+    description = "Find licenses for your project's dependencies";
+    homepage = "https://github.com/pivotal/licensefinder";
+    license = licenses.mit;
+    maintainers = with maintainers; [ wolfangaukang ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/license_finder/gemset.nix b/nixpkgs/pkgs/development/tools/license_finder/gemset.nix
new file mode 100644
index 000000000000..89becfc04d35
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/license_finder/gemset.nix
@@ -0,0 +1,74 @@
+{
+  license_finder = {
+    dependencies = ["rubyzip" "thor" "tomlrb" "with_env" "xml-simple"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0sig4ifxzvcz3fwjnz93dpv61v6sxpmlknj5f8n112ragrbcj8hb";
+      type = "gem";
+    };
+    version = "7.0.1";
+  };
+  rexml = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08ximcyfjy94pm1rhcx04ny1vx2sk0x4y185gzn86yfsbzwkng53";
+      type = "gem";
+    };
+    version = "3.2.5";
+  };
+  rubyzip = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0grps9197qyxakbpw02pda59v45lfgbgiyw48i0mq9f2bn9y6mrz";
+      type = "gem";
+    };
+    version = "2.3.2";
+  };
+  thor = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0inl77jh4ia03jw3iqm5ipr76ghal3hyjrd6r8zqsswwvi9j2xdi";
+      type = "gem";
+    };
+    version = "1.2.1";
+  };
+  tomlrb = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0a83cb5xpyzlr651d46rk5xgq37s46hs9nfqy9baawzs31hm9k2g";
+      type = "gem";
+    };
+    version = "2.0.1";
+  };
+  with_env = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1r5ns064mbb99hf1dyxsk9183hznc5i7mn3bi86zka6dlvqf9csh";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  xml-simple = {
+    dependencies = ["rexml"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0pb9plyl71mdbjr4kllfy53qx6g68ryxblmnq9dilvy837jk24fj";
+      type = "gem";
+    };
+    version = "1.1.9";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/lightningcss/default.nix b/nixpkgs/pkgs/development/tools/lightningcss/default.nix
new file mode 100644
index 000000000000..7edc7e3695aa
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/lightningcss/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "lightningcss";
+  version = "1.23.0";
+
+  src = fetchFromGitHub {
+    owner = "parcel-bundler";
+    repo = "lightningcss";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-vMxf5WQtoj7FycU1zHn5t/bJtwh6t4wqyKfoetzojzU=";
+  };
+
+  cargoHash = "sha256-g7/1s3FvuwsJvypeHOqJA/lVBkQcLATWtlygI8IW+QA=";
+
+  buildFeatures = [
+    "cli"
+  ];
+
+  cargoBuildFlags = [
+    "--lib"
+    "--bin=lightningcss"
+  ];
+
+  cargoTestFlags = [
+    "--lib"
+  ];
+
+  meta = with lib; {
+    description = "Extremely fast CSS parser, transformer, and minifier written in Rust";
+    homepage = "https://lightningcss.dev/";
+    changelog = "https://github.com/parcel-bundler/lightningcss/releases/tag/v${version}";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ toastal ];
+    mainProgram = "lightningcss";
+    # never built on aarch64-linux since first introduction in nixpkgs
+    broken = stdenv.isLinux && stdenv.isAarch64;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/literate-programming/Literate/default.nix b/nixpkgs/pkgs/development/tools/literate-programming/Literate/default.nix
new file mode 100644
index 000000000000..1aabc4c86b3d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/literate-programming/Literate/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub, ldc, dub }:
+
+stdenv.mkDerivation {
+  pname = "Literate";
+  version = "unstable-2021-01-22";
+
+  src = fetchFromGitHub {
+    owner = "zyedidia";
+    repo = "Literate";
+    rev = "7004dffec0cff3068828514eca72172274fd3f7d";
+    sha256 = "sha256-erNFe0+FlrslEENyO/YxYQbmec0voK31UWr5qVt+nXQ=";
+    fetchSubmodules = true;
+  };
+
+  buildInputs = [ ldc dub ];
+
+  HOME = "home";
+
+  installPhase = "install -D bin/lit $out/bin/lit";
+
+  meta = with lib; {
+    description = "A literate programming tool for any language";
+    homepage = "https://zyedidia.github.io/literate/";
+    license = licenses.mit;
+    mainProgram = "lit";
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/literate-programming/eweb/default.nix b/nixpkgs/pkgs/development/tools/literate-programming/eweb/default.nix
new file mode 100644
index 000000000000..7ad966c6b69f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/literate-programming/eweb/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchurl, python3, asciidoc }:
+
+stdenv.mkDerivation rec {
+  pname = "eweb";
+  version = "9.10";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/eweb/${pname}-${version}.tar.bz2";
+    sha256 = "1xy7vm2sj5q6s620fm25klmnwnz9xkrxmx4q2f8h6c85ydisayd5";
+  };
+
+  buildInputs = [ python3 asciidoc ];
+
+  installPhase = ''
+    install -d $out/bin $out/share/doc/${pname}-${version}
+    cp etangle.py $out/bin
+    cp etangle.w etangle.html $out/share/doc/${pname}-${version}
+  '';
+
+  meta = with lib; {
+    homepage = "https://eweb.sourceforge.net/";
+    description = "An Asciidoc-based literate programming tool, written in Python";
+    platforms = platforms.linux;
+    license = licenses.gpl3Plus;
+    maintainers = [ maintainers.AndersonTorres ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/literate-programming/funnelweb/default.nix b/nixpkgs/pkgs/development/tools/literate-programming/funnelweb/default.nix
new file mode 100644
index 000000000000..56d53104a206
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/literate-programming/funnelweb/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "funnelweb";
+  version = "3.20";
+
+  src = fetchurl {
+    url = "http://www.ross.net/funnelweb/download/funnelweb_v320/funnelweb_v320_source.tar.gz";
+    sha256 = "0zqhys0j9gabrd12mnk8ibblpc8dal4kbl8vnhxmdlplsdpwn4wg";
+  };
+
+  buildPhase = ''
+    cd source
+    ${stdenv.cc}/bin/cc -D__linux__ -o fw *.c
+  '';
+
+  installPhase = ''
+    install -d $out/bin
+    install fw $out/bin/fw
+  '';
+
+  meta = with lib; {
+    version = "3.20";
+    description = "A simple, reliable literate-programming macro preprocessor";
+    homepage = "http://www.ross.net/funnelweb/";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.AndersonTorres ];
+  };
+}
+#TODO: implement it for other platforms
+#TODO: Documentation files
diff --git a/nixpkgs/pkgs/development/tools/literate-programming/md-tangle/default.nix b/nixpkgs/pkgs/development/tools/literate-programming/md-tangle/default.nix
new file mode 100644
index 000000000000..fd895c96c047
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/literate-programming/md-tangle/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, python3
+, fetchFromGitHub
+}:
+
+python3.pkgs.buildPythonPackage rec {
+  pname = "md-tangle";
+  version = "1.3.1";
+
+  # By some strange reason, fetchPypi fails miserably
+  src = fetchFromGitHub {
+    owner = "joakimmj";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-cUME2AHK/Fva+1TSTE6hNu0SE/V1FOwcSxWF0+iZhS4=";
+  };
+
+  # Pure Python application, uses only standard modules and comes without
+  # testing suite
+  doCheck = false;
+
+  meta = with lib;{
+    homepage = "https://github.com/joakimmj/md-tangle/";
+    description = "Generates (\"tangles\") source code from Markdown documents";
+    license = licenses.mit;
+    maintainers = with maintainers; [ AndersonTorres ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/literate-programming/noweb/default.nix b/nixpkgs/pkgs/development/tools/literate-programming/noweb/default.nix
new file mode 100644
index 000000000000..26ce4d6891af
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/literate-programming/noweb/default.nix
@@ -0,0 +1,86 @@
+{ lib, stdenv, fetchFromGitHub, nawk, groff, icon-lang, useIcon ? true }:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "noweb";
+  version = "2.13";
+
+  src = fetchFromGitHub {
+    owner = "nrnrnr";
+    repo = "noweb";
+    rev = "v${builtins.replaceStrings ["."] ["_"] finalAttrs.version}";
+    sha256 = "sha256-COcWyrYkheRaSr2gqreRRsz9SYRTX2PSl7km+g98ljs=";
+  };
+
+  sourceRoot = "${finalAttrs.src.name}/src";
+
+  patches = [
+    # Remove FAQ
+    ./no-FAQ.patch
+  ];
+
+  postPatch = ''
+    substituteInPlace Makefile --replace 'strip' '${stdenv.cc.targetPrefix}strip'
+    substituteInPlace Makefile --replace '`./gitversion`' '${finalAttrs.src.rev}'
+  '';
+
+  nativeBuildInputs = [ groff ] ++ lib.optionals useIcon [ icon-lang ];
+  buildInputs = [ nawk ];
+
+  preBuild = ''
+    mkdir -p "$out/lib/noweb"
+  '';
+
+  makeFlags = lib.optionals useIcon [
+    "LIBSRC=icon"
+    "ICONC=icont"
+  ] ++ [ "CC=${stdenv.cc.targetPrefix}cc" ];
+
+  preInstall = ''
+    mkdir -p "$tex/tex/latex/noweb"
+    installFlagsArray+=(                                   \
+        "BIN=${placeholder "out"}/bin"                     \
+        "ELISP=${placeholder "out"}/share/emacs/site-lisp" \
+        "LIB=${placeholder "out"}/lib/noweb"               \
+        "MAN=${placeholder "out"}/share/man"               \
+        "TEXINPUTS=${placeholder "tex"}/tex/latex/noweb"   \
+    )
+  '';
+
+  installTargets = [ "install-code" "install-tex" "install-elisp" ];
+
+  postInstall = ''
+    substituteInPlace "$out/bin/cpif" --replace "PATH=/bin:/usr/bin" ""
+
+    for f in $out/bin/no{index,roff,roots,untangle,web} \
+             $out/lib/noweb/to{ascii,html,roff,tex} \
+             $out/lib/noweb/{bt,empty}defn \
+             $out/lib/noweb/{noidx,pipedocs,unmarkup}; do
+        # NOTE: substituteInPlace breaks Icon binaries, so make sure the script
+        #       uses (n)awk before calling.
+        if grep -q nawk "$f"; then
+            substituteInPlace "$f" --replace "nawk" "${nawk}/bin/nawk"
+        fi
+    done
+
+    # HACK: This is ugly, but functional.
+    PATH=$out/bin:$PATH make -BC xdoc
+    make "''${installFlagsArray[@]}" install-man
+
+    ln -s "$tex" "$out/share/texmf"
+  '';
+
+  outputs = [ "out" "tex" ];
+
+  passthru = {
+    tlType = "run";
+    pkgs = [ finalAttrs.finalPackage.tex ];
+  };
+
+  meta = with lib; {
+    description = "A simple, extensible literate-programming tool";
+    homepage = "https://www.cs.tufts.edu/~nr/noweb";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ yurrriq ];
+    platforms = with platforms; linux ++ darwin;
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/literate-programming/noweb/no-FAQ.patch b/nixpkgs/pkgs/development/tools/literate-programming/noweb/no-FAQ.patch
new file mode 100644
index 000000000000..7fa5c475c400
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/literate-programming/noweb/no-FAQ.patch
@@ -0,0 +1,13 @@
+diff --git a/Makefile b/Makefile
+index 1897c09..770e108 100644
+--- a/Makefile
++++ b/Makefile
+@@ -195,7 +195,7 @@ install-elisp:
+ 
+ uninstall-elisp:
+ 	rm -f $(ELISP)/noweb-mode.el
+-source: FAQ
++source:
+ 	for i in c shell lib xdoc icon awk tex; do (cd $$i && $(MAKE) CPIF=">" $@); done
+ 	sleep 1
+ 	for i in c shell lib xdoc icon awk tex; do (cd $$i && $(MAKE) touch); done
diff --git a/nixpkgs/pkgs/development/tools/literate-programming/nuweb/default.nix b/nixpkgs/pkgs/development/tools/literate-programming/nuweb/default.nix
new file mode 100644
index 000000000000..9bc67375e269
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/literate-programming/nuweb/default.nix
@@ -0,0 +1,45 @@
+{lib, stdenv, fetchurl, texliveMedium}:
+
+stdenv.mkDerivation rec {
+
+  pname = "nuweb";
+  version = "1.62";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/nuweb/${pname}-${version}.tar.gz";
+    sha256 = "sha256-JVqPYkYPXBT0xLNWuW4DV6N6ZlKuBYQGT46frhnpU64=";
+  };
+
+  buildInputs = [ texliveMedium ];
+
+  patchPhase = ''
+    sed -ie 's|nuweb -r|./nuweb -r|' Makefile
+  '';
+
+  # Workaround build failure on -fno-common toolchains like upstream
+  # gcc-10. Otherwise build fails as:
+  #   ld: global.o:/build/nuweb-1.62/global.h:91: multiple definition of
+  #     `current_sector'; main.o:/build/nuweb-1.62/global.h:91: first defined here
+  env.NIX_CFLAGS_COMPILE = "-fcommon";
+
+  buildPhase = ''
+    make nuweb
+    make nuweb.pdf nuwebdoc.pdf all
+  '';
+  installPhase = ''
+    install -d $out/bin $out/share/man/man1 $out/share/doc/${pname}-${version} $out/share/emacs/site-lisp
+    cp nuweb $out/bin
+    cp nuweb.el $out/share/emacs/site-lisp
+    gzip -c nuweb.1 > $out/share/man/man1/nuweb.1.gz
+    cp htdocs/index.html nuweb.w nuweb.pdf nuwebdoc.pdf README $out/share/doc/${pname}-${version}
+  '';
+
+  meta = with lib; {
+    description = "A simple literate programming tool";
+    homepage = "https://nuweb.sourceforge.net";
+    license = licenses.free;
+    maintainers = [ maintainers.AndersonTorres ];
+    platforms = platforms.unix;
+  };
+}
+# TODO: nuweb.el Emacs integration
diff --git a/nixpkgs/pkgs/development/tools/loganalyzer/default.nix b/nixpkgs/pkgs/development/tools/loganalyzer/default.nix
new file mode 100644
index 000000000000..d992b539dafd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/loganalyzer/default.nix
@@ -0,0 +1,56 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, qtbase
+, qtsvg
+, wrapQtAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "loganalyzer";
+  version = "23.5.1";
+
+  src = fetchFromGitHub {
+    owner = "pbek";
+    repo = "loganalyzer";
+    rev = "v${version}";
+    fetchSubmodules = true;
+    hash = "sha256-k9hOGI/TmiftwhSHQEh3ZVV8kkMSs1yKejqHelFSQJ4=";
+  };
+
+  buildInputs = [
+    qtbase
+    qtsvg
+  ];
+
+  nativeBuildInputs = [
+    wrapQtAppsHook
+  ];
+
+  sourceRoot = "${src.name}/src";
+
+  buildPhase = ''
+    runHook preBuild
+
+    qmake LogAnalyzer.pro CONFIG+=release PREFIX=/
+    make
+
+    runHook postBuild
+  '';
+
+  installFlags = [ "INSTALL_ROOT=$(out)" ];
+
+  postInstall = ''
+    ln -s $out/bin/LogAnalyzer $out/bin/loganalyzer
+  '';
+
+  meta = with lib; {
+    description = "Tool that helps you to analyze your log files by reducing the content with patterns you define";
+    homepage = "https://github.com/pbek/loganalyzer";
+    changelog = "https://github.com/pbek/loganalyzer/blob/develop/CHANGELOG.md";
+    downloadPage = "https://github.com/pbek/loganalyzer/releases/tag/v${version}";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ pbek ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ls-lint/default.nix b/nixpkgs/pkgs/development/tools/ls-lint/default.nix
new file mode 100644
index 000000000000..7a6ae03aea78
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ls-lint/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "ls-lint";
+  version = "2.2.2";
+
+  src = fetchFromGitHub {
+    owner = "loeffel-io";
+    repo = "ls-lint";
+    rev = "v${version}";
+    sha256 = "sha256-twXaiPccc6DZdzKdvB+BzHbRuwgDy05C3jNg7Ur8yrA=";
+  };
+
+  vendorHash = "sha256-uyNOcIjrICr76Q8izXGRMhofDcjQrzbB/ISHTqRY5fI=";
+
+  meta = with lib; {
+    description = "An extremely fast file and directory name linter";
+    homepage = "https://ls-lint.org/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ flokli ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/luaformatter/default.nix b/nixpkgs/pkgs/development/tools/luaformatter/default.nix
new file mode 100644
index 000000000000..eb8b5a799ce1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/luaformatter/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchFromGitHub, substituteAll, antlr4_9, libargs, catch2, cmake, yaml-cpp }:
+
+let
+  antlr4 = antlr4_9;
+in
+
+stdenv.mkDerivation rec {
+  pname = "luaformatter";
+  version = "1.3.6";
+
+  src = fetchFromGitHub {
+    owner = "Koihik";
+    repo = "LuaFormatter";
+    rev = version;
+    sha256 = "14l1f9hrp6m7z3cm5yl0njba6gfixzdirxjl8nihp9val0685vm0";
+  };
+
+  patches = [
+    (substituteAll {
+      src = ./fix-lib-paths.patch;
+      antlr4RuntimeCpp = antlr4.runtime.cpp.dev;
+      inherit libargs catch2 yaml-cpp;
+    })
+  ];
+
+  nativeBuildInputs = [ cmake ];
+
+  buildInputs = [ antlr4.runtime.cpp yaml-cpp ];
+
+  meta = with lib; {
+    description = "Code formatter for Lua";
+    homepage = "https://github.com/Koihik/LuaFormatter";
+    license = licenses.asl20;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "lua-format";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/luaformatter/fix-lib-paths.patch b/nixpkgs/pkgs/development/tools/luaformatter/fix-lib-paths.patch
new file mode 100644
index 000000000000..610a313ca27c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/luaformatter/fix-lib-paths.patch
@@ -0,0 +1,67 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 4a21b94..0ac7911 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -67,10 +67,10 @@ endif()
+ 
+ include_directories(
+   ${PROJECT_SOURCE_DIR}/generated/
+-  ${PROJECT_SOURCE_DIR}/third_party/
+-  ${PROJECT_SOURCE_DIR}/third_party/Catch2/single_include
+-  ${PROJECT_SOURCE_DIR}/third_party/yaml-cpp/include
+-  ${PROJECT_SOURCE_DIR}/third_party/antlr4/runtime/Cpp/runtime/src
++  @libargs@/include
++  @catch2@/include
++  @yaml-cpp@/include
++  @antlr4RuntimeCpp@/include/antlr4-runtime
+   ${PROJECT_SOURCE_DIR}/src/
+   )
+ 
+@@ -92,9 +92,6 @@ file(GLOB_RECURSE yaml-cpp-src
+   ${PROJECT_SOURCE_DIR}/third_party/yaml-cpp/src/*.cpp
+   )
+ 
+-add_library (antlr4-cpp-runtime ${antlr4-cpp-src})
+-add_library (yaml-cpp ${yaml-cpp-src})
+-
+ add_executable(lua-format ${src_dir} src/main.cpp)
+ 
+ if(WIN32)
+@@ -104,7 +101,7 @@ endif()
+ 
+ set_target_properties(lua-format PROPERTIES LINKER_LANGUAGE CXX)
+ 
+-target_link_libraries(lua-format yaml-cpp antlr4-cpp-runtime ${extra-libs})
++target_link_libraries(lua-format yaml-cpp antlr4-runtime ${extra-libs})
+ 
+ install(TARGETS lua-format
+   RUNTIME DESTINATION bin
+@@ -135,7 +132,7 @@ if(BUILD_TESTS)
+   endif()
+ 
+   target_compile_definitions(lua-format-test PUBLIC PROJECT_PATH="${PROJECT_SOURCE_DIR}")
+-  target_link_libraries(lua-format-test yaml-cpp antlr4-cpp-runtime ${extra-libs})
++  target_link_libraries(lua-format-test yaml-cpp antlr4-runtime ${extra-libs})
+ 
+   add_test(NAME args COMMAND lua-format-test [args])
+   add_test(NAME config COMMAND lua-format-test [config])
+diff --git a/src/main.cpp b/src/main.cpp
+index 38962a2..332aad6 100644
+--- a/src/main.cpp
++++ b/src/main.cpp
+@@ -1,4 +1,4 @@
+-#include <args/args.hxx>
++#include <args.hxx>
+ #include <cstdlib>
+ #include <fstream>
+ #include <iostream>
+diff --git a/test/test_args.cpp b/test/test_args.cpp
+index 69a5746..b988d00 100644
+--- a/test/test_args.cpp
++++ b/test/test_args.cpp
+@@ -1,4 +1,4 @@
+-#include <args/args.hxx>
++#include <args.hxx>
+ #include <catch2/catch.hpp>
+ #include <iostream>
+ #include <tuple>
diff --git a/nixpkgs/pkgs/development/tools/lurk/default.nix b/nixpkgs/pkgs/development/tools/lurk/default.nix
new file mode 100644
index 000000000000..b7ab1f95dead
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/lurk/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "lurk";
+  version = "0.3.4";
+
+  src = fetchFromGitHub {
+    owner = "jakwai01";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-7Yi77IsP/tmzrTvBVgIj2+fOXYKCT59pILeEuGuk4Y4=";
+  };
+
+  cargoHash = "sha256-Cvtg9msoYkIIlaUw4hxWy2wSrE1uORR/2R2Geq4SI4w=";
+
+  meta = with lib; {
+    description = "A simple and pretty alternative to strace";
+    homepage = "https://github.com/jakwai01/lurk";
+    changelog = "https://github.com/jakwai01/lurk/releases/tag/${src.rev}";
+    license = licenses.agpl3Only;
+    maintainers = with maintainers; [ figsoda ];
+    platforms = [ "i686-linux" "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/lv_img_conv/default.nix b/nixpkgs/pkgs/development/tools/lv_img_conv/default.nix
new file mode 100644
index 000000000000..e00b960c46b9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/lv_img_conv/default.nix
@@ -0,0 +1,64 @@
+{ lib
+, stdenv
+, buildNpmPackage
+, fetchFromGitHub
+, pkg-config
+, python3
+, pixman
+, libpng
+, libjpeg
+, librsvg
+, giflib
+, cairo
+, pango
+, nodePackages
+, makeWrapper
+, CoreText
+, nix-update-script
+}:
+
+buildNpmPackage rec {
+  pname = "lv_img_conv";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "lvgl";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-LB7NZKwrpvps1cKzRoARHL4S48gBHadvxwA6JMmm/ME=";
+  };
+
+  npmDepsHash = "sha256-uDF22wlL3BlMQ/+Wmtgyjp4CVN6sDnjqjEPB4SeQuPk=";
+
+  nativeBuildInputs = [
+    pkg-config
+    python3
+    makeWrapper
+  ];
+
+  buildInputs = [
+    pixman
+    libpng
+    libjpeg
+    librsvg
+    giflib
+    cairo
+    pango
+  ] ++ lib.optionals stdenv.isDarwin [
+    CoreText
+  ];
+
+  postInstall = ''
+    makeWrapper ${nodePackages.ts-node}/bin/ts-node $out/bin/lv_img_conv --add-flags $out/lib/node_modules/lv_img_conv/lib/cli.ts
+  '';
+
+  passthru.updateScript = nix-update-script { };
+
+  meta = with lib; {
+    changelog = "https://github.com/lvgl/lv_img_conv/releases/tag/v${version}";
+    description = "Image converter for LVGL";
+    homepage = "https://github.com/lvgl/lv_img_conv";
+    license = licenses.mit;
+    maintainers = with maintainers; [ stargate01 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/maizzle/default.nix b/nixpkgs/pkgs/development/tools/maizzle/default.nix
new file mode 100644
index 000000000000..eac30c4da054
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/maizzle/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, buildNpmPackage
+, fetchFromGitHub
+}:
+
+buildNpmPackage rec {
+  pname = "maizzle";
+  version = "1.5.7";
+
+  src = fetchFromGitHub {
+    owner = "maizzle";
+    repo = "cli";
+    rev = "v${version}";
+    hash = "sha256-6AV5irttsI76CQH0GixnCufZ35Il+JQjy3hkK9Iktbo=";
+  };
+
+  npmDepsHash = "sha256-DeAV3uOo5UpSX0RP0cIb6IwS759PLKK0DtguQH3m73M=";
+
+  dontNpmBuild = true;
+
+  meta = {
+    description = "CLI tool for the Maizzle Email Framework";
+    homepage = "https://github.com/maizzle/cli";
+    license = lib.licenses.mit;
+    mainProgram = "maizzle";
+    maintainers = with lib.maintainers; [ happysalada ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/makerpm/default.nix b/nixpkgs/pkgs/development/tools/makerpm/default.nix
new file mode 100644
index 000000000000..5b7fc83df407
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/makerpm/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub, zlib, libarchive, openssl }:
+
+stdenv.mkDerivation rec {
+  version = "1.0";
+  pname = "makerpm";
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp makerpm $out/bin
+  '';
+
+  buildInputs = [ zlib libarchive openssl ];
+
+  src = fetchFromGitHub {
+    owner = "ivan-tkatchev";
+    repo = "makerpm";
+    rev = version;
+    sha256 = "089dkbh5705ppyi920rd0ksjc0143xmvnhm8qrx93rsgwc1ggi1y";
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/ivan-tkatchev/makerpm/";
+    description = "A clean, simple RPM packager reimplemented completely from scratch";
+    license = licenses.free;
+    platforms = platforms.all;
+    maintainers = [ maintainers.ivan-tkatchev ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/maligned/default.nix b/nixpkgs/pkgs/development/tools/maligned/default.nix
new file mode 100644
index 000000000000..96290040761b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/maligned/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, go
+}:
+
+buildGoModule rec {
+  pname = "maligned";
+  version = "unstable-2022-02-04";
+  rev = "d7cd9a96ae47d02b08234503b54709ad4ae82105";
+
+  src = fetchFromGitHub {
+    owner = "mdempsky";
+    repo = "maligned";
+    inherit rev;
+    sha256 = "sha256-exljmDNtVhjJkvh0EomcbBXSsmQx4I59MHDfMWSQyKk=";
+  };
+
+  vendorHash = "sha256-q/0lxZWk3a7brMsbLvZUSZ8XUHfWfx79qxjir1Vygx4=";
+
+  allowGoReference = true;
+
+  nativeCheckInputs = [ go ];
+
+  meta = with lib; {
+    description = "Tool to detect Go structs that would take less memory if their fields were sorted";
+    homepage = "https://github.com/mdempsky/maligned";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ kalbasit ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/mani/default.nix b/nixpkgs/pkgs/development/tools/mani/default.nix
new file mode 100644
index 000000000000..19b1d673962a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/mani/default.nix
@@ -0,0 +1,47 @@
+{ buildGoModule, fetchFromGitHub, lib, installShellFiles, git, makeWrapper}:
+
+buildGoModule rec {
+  pname = "mani";
+  version = "0.25.0";
+
+  src = fetchFromGitHub {
+    owner = "alajmo";
+    repo = "mani";
+    rev = "v${version}";
+    sha256 = "sha256-TqxoU2g4ZegJGHrnNO+ivPu209NDFcLnxpHGj8pOA4E=";
+  };
+
+  vendorHash = "sha256-mFan09oJ+BPVJHAxoROj282WJ+4e7TD0ZqeQH1kDabQ=";
+
+  nativeBuildInputs = [ installShellFiles makeWrapper ];
+
+  ldflags = [ "-s" "-w" "-X github.com/alajmo/mani/cmd.version=${version}" ];
+
+  postInstall = ''
+    installShellCompletion --cmd mani \
+      --bash <($out/bin/mani completion bash) \
+      --fish <($out/bin/mani completion fish) \
+      --zsh <($out/bin/mani completion zsh)
+
+    wrapProgram $out/bin/mani \
+      --prefix PATH : ${lib.makeBinPath [ git ]}
+  '';
+
+  # Skip tests
+  # The repo's test folder has a README.md with detailed information. I don't
+  # know how to wrap the dependencies for these integration tests so skip for now.
+  doCheck = false;
+
+  meta = with lib; {
+    description = "CLI tool to help you manage multiple repositories";
+    longDescription = ''
+      mani is a CLI tool that helps you manage multiple repositories. It's useful
+      when you are working with microservices, multi-project systems, many
+      libraries or just a bunch of repositories and want a central place for
+      pulling all repositories and running commands over them.
+    '';
+    homepage = "https://manicli.com/";
+    changelog = "https://github.com/alajmo/mani/releases/tag/v${version}";
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/manifest-tool/default.nix b/nixpkgs/pkgs/development/tools/manifest-tool/default.nix
new file mode 100644
index 000000000000..bba035d01e7c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/manifest-tool/default.nix
@@ -0,0 +1,62 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, git
+, stdenv
+, testers
+, manifest-tool
+}:
+
+buildGoModule rec {
+  pname = "manifest-tool";
+  version = "2.1.5";
+  modRoot = "v2";
+
+  src = fetchFromGitHub {
+    owner = "estesp";
+    repo = "manifest-tool";
+    rev = "v${version}";
+    hash = "sha256-TCR8A35oETAZszrZFtNZulzCsh9UwGueTyHyYe+JQeI=";
+    leaveDotGit = true;
+    postFetch = ''
+      git -C $out rev-parse HEAD > $out/.git-revision
+      rm -rf $out/.git
+    '';
+  };
+
+  vendorHash = null;
+
+  nativeBuildInputs = [ git ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X main.version=${version}"
+  ] ++ lib.optionals stdenv.hostPlatform.isStatic [
+    "-linkmode=external"
+    "-extldflags"
+    "-static"
+  ];
+
+  preConfigure = ''
+    export ldflags+=" -X main.gitCommit=$(cat .git-revision)"
+  '';
+
+  tags = lib.optionals stdenv.hostPlatform.isStatic [
+    "cgo"
+    "netgo"
+    "osusergo"
+    "static_build"
+  ];
+
+  passthru.tests.version = testers.testVersion {
+    package = manifest-tool;
+  };
+
+  meta = with lib; {
+    description = "Command line tool to create and query container image manifest list/indexes";
+    homepage = "https://github.com/estesp/manifest-tool";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ tricktron ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/marksman/default.nix b/nixpkgs/pkgs/development/tools/marksman/default.nix
new file mode 100644
index 000000000000..0cc85cf91bc7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/marksman/default.nix
@@ -0,0 +1,59 @@
+{ lib
+, fetchFromGitHub
+, buildDotnetModule
+, dotnetCorePackages
+, marksman
+, testers
+}:
+
+buildDotnetModule rec {
+  pname = "marksman";
+  version = "2023-12-09";
+
+  src = fetchFromGitHub {
+    owner = "artempyanykh";
+    repo = "marksman";
+    rev = version;
+    sha256 = "sha256-g+Y4BZh5r4FQJe1q79hxj7WZe7z9346+5cB7tgJ5+Wo=";
+  };
+
+  projectFile = "Marksman/Marksman.fsproj";
+  dotnetBuildFlags = [ "-p:VersionString=${version}" ];
+
+  doCheck = true;
+  testProjectFile = "Tests/Tests.fsproj";
+
+  nugetDeps = ./deps.nix;
+
+  dotnet-sdk = dotnetCorePackages.sdk_8_0;
+  dotnet-runtime = dotnetCorePackages.runtime_8_0;
+
+  postInstall = ''
+    install -m 644 -D -t "$out/share/doc/${pname}" LICENSE
+  '';
+
+  passthru = {
+    updateScript = ./update.sh;
+    tests.version = testers.testVersion {
+      package = marksman;
+      command = "marksman --version";
+    };
+  };
+
+  meta = with lib; {
+    description = "Language Server for Markdown";
+    longDescription = ''
+      Marksman is a program that integrates with your editor
+      to assist you in writing and maintaining your Markdown documents.
+      Using LSP protocol it provides completion, goto definition,
+      find references, rename refactoring, diagnostics, and more.
+      In addition to regular Markdown, it also supports wiki-link-style
+      references that enable Zettelkasten-like note taking.
+    '';
+    homepage = "https://github.com/artempyanykh/marksman";
+    license = licenses.mit;
+    maintainers = with maintainers; [ stasjok plusgut ];
+    platforms = dotnet-sdk.meta.platforms;
+    mainProgram = "marksman";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/marksman/deps.nix b/nixpkgs/pkgs/development/tools/marksman/deps.nix
new file mode 100644
index 000000000000..1e8a43139e91
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/marksman/deps.nix
@@ -0,0 +1,195 @@
+# This file was automatically generated by passthru.fetch-deps.
+# Please dont edit it manually, your changes might get overwritten!
+
+{ fetchNuGet }: [
+  (fetchNuGet { pname = "coverlet.collector"; version = "6.0.0"; sha256 = "12j34vrkmph8lspbafnqmfnj2qvysz1jcrks2khw798s6dwv0j90"; })
+  (fetchNuGet { pname = "dotnet-fsharplint"; version = "0.21.6"; sha256 = "0ka6im90i8wyqwqjwx7gfx60py05711ccvgn5x83l3mf0l07h0l8"; })
+  (fetchNuGet { pname = "fantomas"; version = "6.2.3"; sha256 = "1x91w4sk402b6ah1y0r0c9rxwbbnjp4x4mr7x4n5zvjhiv97b282"; })
+  (fetchNuGet { pname = "FSharp.Core"; version = "8.0.100"; sha256 = "06z3vg8yj7i83x6gmnzl2lka1bp4hzc07h6mrydpilxswnmy2a0l"; })
+  (fetchNuGet { pname = "FSharp.SystemCommandLine"; version = "0.13.0-beta4"; sha256 = "10h58gqfdg2hdy9laf6ry8djfysrdmwlj9n0d7ydwyszb6zgnd20"; })
+  (fetchNuGet { pname = "FSharpPlus"; version = "1.5.0"; sha256 = "18xvz9a7bhmmr14911ykpg6sbgyq61s4w7g0hdlpr2vcg0bja1cd"; })
+  (fetchNuGet { pname = "Glob"; version = "1.1.9"; sha256 = "1q72haq20bf414xwdabsx30lp5c55fjh7hav6r9sp2cqhmva0y53"; })
+  (fetchNuGet { pname = "Markdig"; version = "0.33.0"; sha256 = "1dj06wgdqmjji4nfr1dysz7hwp5bjgsrk9qjkdq82d7gk6nmhs9r"; })
+  (fetchNuGet { pname = "MessagePack"; version = "2.5.108"; sha256 = "0cnaz28lhrdmavnxjkakl9q8p2yv8mricvp1b0wxdfnz8v41gwzs"; })
+  (fetchNuGet { pname = "MessagePack.Annotations"; version = "2.5.108"; sha256 = "0nb1fx8dwl7304kw0bc375bvlhb7pg351l4cl3vqqd7d8zqjwx5v"; })
+  (fetchNuGet { pname = "Microsoft.Bcl.AsyncInterfaces"; version = "7.0.0"; sha256 = "1waiggh3g1cclc81gmjrqbh128kwfjky3z79ma4bd2ms9pa3gvfm"; })
+  (fetchNuGet { pname = "Microsoft.CodeCoverage"; version = "17.8.0"; sha256 = "173wjadp3gan4x2jfjchngnc4ca4mb95h1sbb28jydfkfw0z1zvj"; })
+  (fetchNuGet { pname = "Microsoft.CSharp"; version = "4.0.1"; sha256 = "0zxc0apx1gcx361jlq8smc9pfdgmyjh6hpka8dypc9w23nlsh6yj"; })
+  (fetchNuGet { pname = "Microsoft.NET.StringTools"; version = "17.4.0"; sha256 = "1smx30nq22plrn2mw4wb5vfgxk6hyx12b60c4wabmpnr81lq3nzv"; })
+  (fetchNuGet { pname = "Microsoft.NET.Test.Sdk"; version = "17.8.0"; sha256 = "1syvl3g0hbrcgfi9rq6pld8s8hqqww4dflf1lxn59ccddyyx0gmv"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "1.0.1"; sha256 = "01al6cfxp68dscl15z7rxfw9zvhm64dncsw09a1vmdkacsa2v6lr"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "1.1.0"; sha256 = "08vh1r12g6ykjygq5d3vq09zylgb84l63k49jc4v8faw9g93iqqm"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "5.0.0"; sha256 = "0mwpwdflidzgzfx2dlpkvvnkgkr2ayaf0s80737h4wa35gaj11rc"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Targets"; version = "1.0.1"; sha256 = "0ppdkwy6s9p7x9jix3v4402wb171cdiibq7js7i13nxpdky7074p"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Targets"; version = "1.1.0"; sha256 = "193xwf33fbm0ni3idxzbr5fdq3i2dlfgihsac9jj7whj0gd902nh"; })
+  (fetchNuGet { pname = "Microsoft.TestPlatform.ObjectModel"; version = "17.8.0"; sha256 = "0b0i7lmkrcfvim8i3l93gwqvkhhhfzd53fqfnygdqvkg6np0cg7m"; })
+  (fetchNuGet { pname = "Microsoft.TestPlatform.TestHost"; version = "17.8.0"; sha256 = "0f5jah93kjkvxwmhwb78lw11m9pkkq9fvf135hpymmmpxqbdh97q"; })
+  (fetchNuGet { pname = "Microsoft.VisualStudio.Threading"; version = "17.6.40"; sha256 = "1iv67ndrvls7qa3wrh7mnswqbhx8ggr0w1hi7md1grfm4f0nqyz4"; })
+  (fetchNuGet { pname = "Microsoft.VisualStudio.Threading.Analyzers"; version = "17.6.40"; sha256 = "0ba9r9y3jsx3s3j190mv4gg47ibyl44s58whwvas9c64hhs4n22s"; })
+  (fetchNuGet { pname = "Microsoft.VisualStudio.Validation"; version = "17.6.11"; sha256 = "0qx4nzsx28galgzzjkgf541254d433dgxcaf7y2y1qyyxgsfjj1f"; })
+  (fetchNuGet { pname = "Microsoft.Win32.Primitives"; version = "4.3.0"; sha256 = "0j0c1wj4ndj21zsgivsc24whiya605603kxrbiw6wkfdync464wq"; })
+  (fetchNuGet { pname = "Microsoft.Win32.Registry"; version = "5.0.0"; sha256 = "102hvhq2gmlcbq8y2cb7hdr2dnmjzfp2k3asr1ycwrfacwyaak7n"; })
+  (fetchNuGet { pname = "Nerdbank.Streams"; version = "2.10.66"; sha256 = "04p4vd2v3mj1g315jj0fcb9ajwdr6clnbnl80mn6nyj3wmjb56nz"; })
+  (fetchNuGet { pname = "NETStandard.Library"; version = "1.6.1"; sha256 = "1z70wvsx2d847a2cjfii7b83pjfs34q05gb037fdjikv5kbagml8"; })
+  (fetchNuGet { pname = "Newtonsoft.Json"; version = "13.0.1"; sha256 = "0fijg0w6iwap8gvzyjnndds0q4b8anwxxvik7y8vgq97dram4srb"; })
+  (fetchNuGet { pname = "Newtonsoft.Json"; version = "9.0.1"; sha256 = "0mcy0i7pnfpqm4pcaiyzzji4g0c8i3a5gjz28rrr28110np8304r"; })
+  (fetchNuGet { pname = "NuGet.Frameworks"; version = "6.5.0"; sha256 = "0s37d1p4md0k6d4cy6sq36f2dgkd9qfbzapxhkvi8awwh0vrynhj"; })
+  (fetchNuGet { pname = "runtime.any.System.Collections"; version = "4.3.0"; sha256 = "0bv5qgm6vr47ynxqbnkc7i797fdi8gbjjxii173syrx14nmrkwg0"; })
+  (fetchNuGet { pname = "runtime.any.System.Diagnostics.Tools"; version = "4.3.0"; sha256 = "1wl76vk12zhdh66vmagni66h5xbhgqq7zkdpgw21jhxhvlbcl8pk"; })
+  (fetchNuGet { pname = "runtime.any.System.Diagnostics.Tracing"; version = "4.3.0"; sha256 = "00j6nv2xgmd3bi347k00m7wr542wjlig53rmj28pmw7ddcn97jbn"; })
+  (fetchNuGet { pname = "runtime.any.System.Globalization"; version = "4.3.0"; sha256 = "1daqf33hssad94lamzg01y49xwndy2q97i2lrb7mgn28656qia1x"; })
+  (fetchNuGet { pname = "runtime.any.System.Globalization.Calendars"; version = "4.3.0"; sha256 = "1ghhhk5psqxcg6w88sxkqrc35bxcz27zbqm2y5p5298pv3v7g201"; })
+  (fetchNuGet { pname = "runtime.any.System.IO"; version = "4.3.0"; sha256 = "0l8xz8zn46w4d10bcn3l4yyn4vhb3lrj2zw8llvz7jk14k4zps5x"; })
+  (fetchNuGet { pname = "runtime.any.System.Reflection"; version = "4.3.0"; sha256 = "02c9h3y35pylc0zfq3wcsvc5nqci95nrkq0mszifc0sjx7xrzkly"; })
+  (fetchNuGet { pname = "runtime.any.System.Reflection.Extensions"; version = "4.3.0"; sha256 = "0zyri97dfc5vyaz9ba65hjj1zbcrzaffhsdlpxc9bh09wy22fq33"; })
+  (fetchNuGet { pname = "runtime.any.System.Reflection.Primitives"; version = "4.3.0"; sha256 = "0x1mm8c6iy8rlxm8w9vqw7gb7s1ljadrn049fmf70cyh42vdfhrf"; })
+  (fetchNuGet { pname = "runtime.any.System.Resources.ResourceManager"; version = "4.3.0"; sha256 = "03kickal0iiby82wa5flar18kyv82s9s6d4xhk5h4bi5kfcyfjzl"; })
+  (fetchNuGet { pname = "runtime.any.System.Runtime"; version = "4.3.0"; sha256 = "1cqh1sv3h5j7ixyb7axxbdkqx6cxy00p4np4j91kpm492rf4s25b"; })
+  (fetchNuGet { pname = "runtime.any.System.Runtime.Handles"; version = "4.3.0"; sha256 = "0bh5bi25nk9w9xi8z23ws45q5yia6k7dg3i4axhfqlnj145l011x"; })
+  (fetchNuGet { pname = "runtime.any.System.Runtime.InteropServices"; version = "4.3.0"; sha256 = "0c3g3g3jmhlhw4klrc86ka9fjbl7i59ds1fadsb2l8nqf8z3kb19"; })
+  (fetchNuGet { pname = "runtime.any.System.Text.Encoding"; version = "4.3.0"; sha256 = "0aqqi1v4wx51h51mk956y783wzags13wa7mgqyclacmsmpv02ps3"; })
+  (fetchNuGet { pname = "runtime.any.System.Text.Encoding.Extensions"; version = "4.3.0"; sha256 = "0lqhgqi0i8194ryqq6v2gqx0fb86db2gqknbm0aq31wb378j7ip8"; })
+  (fetchNuGet { pname = "runtime.any.System.Threading.Tasks"; version = "4.3.0"; sha256 = "03mnvkhskbzxddz4hm113zsch1jyzh2cs450dk3rgfjp8crlw1va"; })
+  (fetchNuGet { pname = "runtime.any.System.Threading.Timer"; version = "4.3.0"; sha256 = "0aw4phrhwqz9m61r79vyfl5la64bjxj8l34qnrcwb28v49fg2086"; })
+  (fetchNuGet { pname = "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "16rnxzpk5dpbbl1x354yrlsbvwylrq456xzpsha1n9y3glnhyx9d"; })
+  (fetchNuGet { pname = "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0hkg03sgm2wyq8nqk6dbm9jh5vcq57ry42lkqdmfklrw89lsmr59"; })
+  (fetchNuGet { pname = "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0c2p354hjx58xhhz7wv6div8xpi90sc6ibdm40qin21bvi7ymcaa"; })
+  (fetchNuGet { pname = "runtime.native.System"; version = "4.3.0"; sha256 = "15hgf6zaq9b8br2wi1i3x0zvmk410nlmsmva9p0bbg73v6hml5k4"; })
+  (fetchNuGet { pname = "runtime.native.System.IO.Compression"; version = "4.3.0"; sha256 = "1vvivbqsk6y4hzcid27pqpm5bsi6sc50hvqwbcx8aap5ifrxfs8d"; })
+  (fetchNuGet { pname = "runtime.native.System.Net.Http"; version = "4.3.0"; sha256 = "1n6rgz5132lcibbch1qlf0g9jk60r0kqv087hxc0lisy50zpm7kk"; })
+  (fetchNuGet { pname = "runtime.native.System.Security.Cryptography.Apple"; version = "4.3.0"; sha256 = "1b61p6gw1m02cc1ry996fl49liiwky6181dzr873g9ds92zl326q"; })
+  (fetchNuGet { pname = "runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "18pzfdlwsg2nb1jjjjzyb5qlgy6xjxzmhnfaijq5s2jw3cm3ab97"; })
+  (fetchNuGet { pname = "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0qyynf9nz5i7pc26cwhgi8j62ps27sqmf78ijcfgzab50z9g8ay3"; })
+  (fetchNuGet { pname = "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "1klrs545awhayryma6l7g2pvnp9xy4z0r1i40r80zb45q3i9nbyf"; })
+  (fetchNuGet { pname = "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple"; version = "4.3.0"; sha256 = "10yc8jdrwgcl44b4g93f1ds76b176bajd3zqi2faf5rvh1vy9smi"; })
+  (fetchNuGet { pname = "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0zcxjv5pckplvkg0r6mw3asggm7aqzbdjimhvsasb0cgm59x09l3"; })
+  (fetchNuGet { pname = "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0vhynn79ih7hw7cwjazn87rm9z9fj0rvxgzlab36jybgcpcgphsn"; })
+  (fetchNuGet { pname = "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "160p68l2c7cqmyqjwxydcvgw7lvl1cr0znkw8fp24d1by9mqc8p3"; })
+  (fetchNuGet { pname = "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "15zrc8fgd8zx28hdghcj5f5i34wf3l6bq5177075m2bc2j34jrqy"; })
+  (fetchNuGet { pname = "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "1p4dgxax6p7rlgj4q73k73rslcnz4wdcv8q2flg1s8ygwcm58ld5"; })
+  (fetchNuGet { pname = "runtime.unix.Microsoft.Win32.Primitives"; version = "4.3.0"; sha256 = "0y61k9zbxhdi0glg154v30kkq7f8646nif8lnnxbvkjpakggd5id"; })
+  (fetchNuGet { pname = "runtime.unix.System.Console"; version = "4.3.0"; sha256 = "1pfpkvc6x2if8zbdzg9rnc5fx51yllprl8zkm5npni2k50lisy80"; })
+  (fetchNuGet { pname = "runtime.unix.System.Diagnostics.Debug"; version = "4.3.0"; sha256 = "1lps7fbnw34bnh3lm31gs5c0g0dh7548wfmb8zz62v0zqz71msj5"; })
+  (fetchNuGet { pname = "runtime.unix.System.IO.FileSystem"; version = "4.3.0"; sha256 = "14nbkhvs7sji5r1saj2x8daz82rnf9kx28d3v2qss34qbr32dzix"; })
+  (fetchNuGet { pname = "runtime.unix.System.Net.Primitives"; version = "4.3.0"; sha256 = "0bdnglg59pzx9394sy4ic66kmxhqp8q8bvmykdxcbs5mm0ipwwm4"; })
+  (fetchNuGet { pname = "runtime.unix.System.Net.Sockets"; version = "4.3.0"; sha256 = "03npdxzy8gfv035bv1b9rz7c7hv0rxl5904wjz51if491mw0xy12"; })
+  (fetchNuGet { pname = "runtime.unix.System.Private.Uri"; version = "4.3.0"; sha256 = "1jx02q6kiwlvfksq1q9qr17fj78y5v6mwsszav4qcz9z25d5g6vk"; })
+  (fetchNuGet { pname = "runtime.unix.System.Runtime.Extensions"; version = "4.3.0"; sha256 = "0pnxxmm8whx38dp6yvwgmh22smknxmqs5n513fc7m4wxvs1bvi4p"; })
+  (fetchNuGet { pname = "Serilog"; version = "2.11.0"; sha256 = "1nvd3hm615xlcdmw1i7llkd3xvwvpv66c4y4s28npv47v3yci3lh"; })
+  (fetchNuGet { pname = "Serilog.Sinks.Console"; version = "4.0.1"; sha256 = "080vh9kcyn9lx4j7p34146kp9byvhqlaz5jn9wzx70ql9cwd0hlz"; })
+  (fetchNuGet { pname = "Snapper"; version = "2.4.0"; sha256 = "1g31hzw13ijvwn5knbzkcgsk4jgm6ppsfmha0halmnsbch0vn608"; })
+  (fetchNuGet { pname = "StreamJsonRpc"; version = "2.16.36"; sha256 = "1bwbbzd8rg1mjsig046ihs53gn8ywf5j9mjfy32axfziisqr1c2w"; })
+  (fetchNuGet { pname = "System.AppContext"; version = "4.3.0"; sha256 = "1649qvy3dar900z3g817h17nl8jp4ka5vcfmsr05kh0fshn7j3ya"; })
+  (fetchNuGet { pname = "System.Buffers"; version = "4.3.0"; sha256 = "0fgns20ispwrfqll4q1zc1waqcmylb3zc50ys9x8zlwxh9pmd9jy"; })
+  (fetchNuGet { pname = "System.Collections"; version = "4.0.11"; sha256 = "1ga40f5lrwldiyw6vy67d0sg7jd7ww6kgwbksm19wrvq9hr0bsm6"; })
+  (fetchNuGet { pname = "System.Collections"; version = "4.3.0"; sha256 = "19r4y64dqyrq6k4706dnyhhw7fs24kpp3awak7whzss39dakpxk9"; })
+  (fetchNuGet { pname = "System.Collections.Concurrent"; version = "4.3.0"; sha256 = "0wi10md9aq33jrkh2c24wr2n9hrpyamsdhsxdcnf43b7y86kkii8"; })
+  (fetchNuGet { pname = "System.Collections.Immutable"; version = "7.0.0"; sha256 = "1n9122cy6v3qhsisc9lzwa1m1j62b8pi2678nsmnlyvfpk0zdagm"; })
+  (fetchNuGet { pname = "System.CommandLine"; version = "2.0.0-beta4.22272.1"; sha256 = "1iy5hwwgvx911g3yq65p4zsgpy08w4qz9j3h0igcf7yci44vw8yd"; })
+  (fetchNuGet { pname = "System.Console"; version = "4.3.0"; sha256 = "1flr7a9x920mr5cjsqmsy9wgnv3lvd0h1g521pdr1lkb2qycy7ay"; })
+  (fetchNuGet { pname = "System.Diagnostics.Debug"; version = "4.0.11"; sha256 = "0gmjghrqmlgzxivd2xl50ncbglb7ljzb66rlx8ws6dv8jm0d5siz"; })
+  (fetchNuGet { pname = "System.Diagnostics.Debug"; version = "4.3.0"; sha256 = "00yjlf19wjydyr6cfviaph3vsjzg3d5nvnya26i2fvfg53sknh3y"; })
+  (fetchNuGet { pname = "System.Diagnostics.DiagnosticSource"; version = "4.3.0"; sha256 = "0z6m3pbiy0qw6rn3n209rrzf9x1k4002zh90vwcrsym09ipm2liq"; })
+  (fetchNuGet { pname = "System.Diagnostics.DiagnosticSource"; version = "7.0.2"; sha256 = "1h97ikph775gya93qsjjaka87qcygbyh1064rh1hnfcnp5xv0ipi"; })
+  (fetchNuGet { pname = "System.Diagnostics.Tools"; version = "4.0.1"; sha256 = "19cknvg07yhakcvpxg3cxa0bwadplin6kyxd8mpjjpwnp56nl85x"; })
+  (fetchNuGet { pname = "System.Diagnostics.Tools"; version = "4.3.0"; sha256 = "0in3pic3s2ddyibi8cvgl102zmvp9r9mchh82ns9f0ms4basylw1"; })
+  (fetchNuGet { pname = "System.Diagnostics.Tracing"; version = "4.3.0"; sha256 = "1m3bx6c2s958qligl67q7grkwfz3w53hpy7nc97mh6f7j5k168c4"; })
+  (fetchNuGet { pname = "System.Dynamic.Runtime"; version = "4.0.11"; sha256 = "1pla2dx8gkidf7xkciig6nifdsb494axjvzvann8g2lp3dbqasm9"; })
+  (fetchNuGet { pname = "System.Globalization"; version = "4.0.11"; sha256 = "070c5jbas2v7smm660zaf1gh0489xanjqymkvafcs4f8cdrs1d5d"; })
+  (fetchNuGet { pname = "System.Globalization"; version = "4.3.0"; sha256 = "1cp68vv683n6ic2zqh2s1fn4c2sd87g5hpp6l4d4nj4536jz98ki"; })
+  (fetchNuGet { pname = "System.Globalization.Calendars"; version = "4.3.0"; sha256 = "1xwl230bkakzzkrggy1l1lxmm3xlhk4bq2pkv790j5lm8g887lxq"; })
+  (fetchNuGet { pname = "System.Globalization.Extensions"; version = "4.3.0"; sha256 = "02a5zfxavhv3jd437bsncbhd2fp1zv4gxzakp1an9l6kdq1mcqls"; })
+  (fetchNuGet { pname = "System.IO"; version = "4.1.0"; sha256 = "1g0yb8p11vfd0kbkyzlfsbsp5z44lwsvyc0h3dpw6vqnbi035ajp"; })
+  (fetchNuGet { pname = "System.IO"; version = "4.3.0"; sha256 = "05l9qdrzhm4s5dixmx68kxwif4l99ll5gqmh7rqgw554fx0agv5f"; })
+  (fetchNuGet { pname = "System.IO.Compression"; version = "4.3.0"; sha256 = "084zc82yi6yllgda0zkgl2ys48sypiswbiwrv7irb3r0ai1fp4vz"; })
+  (fetchNuGet { pname = "System.IO.Compression.ZipFile"; version = "4.3.0"; sha256 = "1yxy5pq4dnsm9hlkg9ysh5f6bf3fahqqb6p8668ndy5c0lk7w2ar"; })
+  (fetchNuGet { pname = "System.IO.FileSystem"; version = "4.0.1"; sha256 = "0kgfpw6w4djqra3w5crrg8xivbanh1w9dh3qapb28q060wb9flp1"; })
+  (fetchNuGet { pname = "System.IO.FileSystem"; version = "4.3.0"; sha256 = "0z2dfrbra9i6y16mm9v1v6k47f0fm617vlb7s5iybjjsz6g1ilmw"; })
+  (fetchNuGet { pname = "System.IO.FileSystem.Primitives"; version = "4.0.1"; sha256 = "1s0mniajj3lvbyf7vfb5shp4ink5yibsx945k6lvxa96r8la1612"; })
+  (fetchNuGet { pname = "System.IO.FileSystem.Primitives"; version = "4.3.0"; sha256 = "0j6ndgglcf4brg2lz4wzsh1av1gh8xrzdsn9f0yznskhqn1xzj9c"; })
+  (fetchNuGet { pname = "System.IO.Pipelines"; version = "7.0.0"; sha256 = "1ila2vgi1w435j7g2y7ykp2pdbh9c5a02vm85vql89az93b7qvav"; })
+  (fetchNuGet { pname = "System.Linq"; version = "4.1.0"; sha256 = "1ppg83svb39hj4hpp5k7kcryzrf3sfnm08vxd5sm2drrijsla2k5"; })
+  (fetchNuGet { pname = "System.Linq"; version = "4.3.0"; sha256 = "1w0gmba695rbr80l1k2h4mrwzbzsyfl2z4klmpbsvsg5pm4a56s7"; })
+  (fetchNuGet { pname = "System.Linq.Expressions"; version = "4.1.0"; sha256 = "1gpdxl6ip06cnab7n3zlcg6mqp7kknf73s8wjinzi4p0apw82fpg"; })
+  (fetchNuGet { pname = "System.Linq.Expressions"; version = "4.3.0"; sha256 = "0ky2nrcvh70rqq88m9a5yqabsl4fyd17bpr63iy2mbivjs2nyypv"; })
+  (fetchNuGet { pname = "System.Memory"; version = "4.5.5"; sha256 = "08jsfwimcarfzrhlyvjjid61j02irx6xsklf32rv57x2aaikvx0h"; })
+  (fetchNuGet { pname = "System.Net.Http"; version = "4.3.0"; sha256 = "1i4gc757xqrzflbk7kc5ksn20kwwfjhw9w7pgdkn19y3cgnl302j"; })
+  (fetchNuGet { pname = "System.Net.NameResolution"; version = "4.3.0"; sha256 = "15r75pwc0rm3vvwsn8rvm2krf929mjfwliv0mpicjnii24470rkq"; })
+  (fetchNuGet { pname = "System.Net.Primitives"; version = "4.3.0"; sha256 = "0c87k50rmdgmxx7df2khd9qj7q35j9rzdmm2572cc55dygmdk3ii"; })
+  (fetchNuGet { pname = "System.Net.Sockets"; version = "4.3.0"; sha256 = "1ssa65k6chcgi6mfmzrznvqaxk8jp0gvl77xhf1hbzakjnpxspla"; })
+  (fetchNuGet { pname = "System.ObjectModel"; version = "4.0.12"; sha256 = "1sybkfi60a4588xn34nd9a58png36i0xr4y4v4kqpg8wlvy5krrj"; })
+  (fetchNuGet { pname = "System.ObjectModel"; version = "4.3.0"; sha256 = "191p63zy5rpqx7dnrb3h7prvgixmk168fhvvkkvhlazncf8r3nc2"; })
+  (fetchNuGet { pname = "System.Private.Uri"; version = "4.3.0"; sha256 = "04r1lkdnsznin0fj4ya1zikxiqr0h6r6a1ww2dsm60gqhdrf0mvx"; })
+  (fetchNuGet { pname = "System.Reflection"; version = "4.1.0"; sha256 = "1js89429pfw79mxvbzp8p3q93il6rdff332hddhzi5wqglc4gml9"; })
+  (fetchNuGet { pname = "System.Reflection"; version = "4.3.0"; sha256 = "0xl55k0mw8cd8ra6dxzh974nxif58s3k1rjv1vbd7gjbjr39j11m"; })
+  (fetchNuGet { pname = "System.Reflection.Emit"; version = "4.0.1"; sha256 = "0ydqcsvh6smi41gyaakglnv252625hf29f7kywy2c70nhii2ylqp"; })
+  (fetchNuGet { pname = "System.Reflection.Emit"; version = "4.3.0"; sha256 = "11f8y3qfysfcrscjpjym9msk7lsfxkk4fmz9qq95kn3jd0769f74"; })
+  (fetchNuGet { pname = "System.Reflection.Emit.ILGeneration"; version = "4.0.1"; sha256 = "1pcd2ig6bg144y10w7yxgc9d22r7c7ww7qn1frdfwgxr24j9wvv0"; })
+  (fetchNuGet { pname = "System.Reflection.Emit.ILGeneration"; version = "4.3.0"; sha256 = "0w1n67glpv8241vnpz1kl14sy7zlnw414aqwj4hcx5nd86f6994q"; })
+  (fetchNuGet { pname = "System.Reflection.Emit.Lightweight"; version = "4.0.1"; sha256 = "1s4b043zdbx9k39lfhvsk68msv1nxbidhkq6nbm27q7sf8xcsnxr"; })
+  (fetchNuGet { pname = "System.Reflection.Emit.Lightweight"; version = "4.3.0"; sha256 = "0ql7lcakycrvzgi9kxz1b3lljd990az1x6c4jsiwcacrvimpib5c"; })
+  (fetchNuGet { pname = "System.Reflection.Extensions"; version = "4.0.1"; sha256 = "0m7wqwq0zqq9gbpiqvgk3sr92cbrw7cp3xn53xvw7zj6rz6fdirn"; })
+  (fetchNuGet { pname = "System.Reflection.Extensions"; version = "4.3.0"; sha256 = "02bly8bdc98gs22lqsfx9xicblszr2yan7v2mmw3g7hy6miq5hwq"; })
+  (fetchNuGet { pname = "System.Reflection.Metadata"; version = "1.6.0"; sha256 = "1wdbavrrkajy7qbdblpbpbalbdl48q3h34cchz24gvdgyrlf15r4"; })
+  (fetchNuGet { pname = "System.Reflection.Primitives"; version = "4.0.1"; sha256 = "1bangaabhsl4k9fg8khn83wm6yial8ik1sza7401621jc6jrym28"; })
+  (fetchNuGet { pname = "System.Reflection.Primitives"; version = "4.3.0"; sha256 = "04xqa33bld78yv5r93a8n76shvc8wwcdgr1qvvjh959g3rc31276"; })
+  (fetchNuGet { pname = "System.Reflection.TypeExtensions"; version = "4.1.0"; sha256 = "1bjli8a7sc7jlxqgcagl9nh8axzfl11f4ld3rjqsyxc516iijij7"; })
+  (fetchNuGet { pname = "System.Reflection.TypeExtensions"; version = "4.3.0"; sha256 = "0y2ssg08d817p0vdag98vn238gyrrynjdj4181hdg780sif3ykp1"; })
+  (fetchNuGet { pname = "System.Resources.ResourceManager"; version = "4.0.1"; sha256 = "0b4i7mncaf8cnai85jv3wnw6hps140cxz8vylv2bik6wyzgvz7bi"; })
+  (fetchNuGet { pname = "System.Resources.ResourceManager"; version = "4.3.0"; sha256 = "0sjqlzsryb0mg4y4xzf35xi523s4is4hz9q4qgdvlvgivl7qxn49"; })
+  (fetchNuGet { pname = "System.Runtime"; version = "4.1.0"; sha256 = "02hdkgk13rvsd6r9yafbwzss8kr55wnj8d5c7xjnp8gqrwc8sn0m"; })
+  (fetchNuGet { pname = "System.Runtime"; version = "4.3.0"; sha256 = "066ixvgbf2c929kgknshcxqj6539ax7b9m570cp8n179cpfkapz7"; })
+  (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "6.0.0"; sha256 = "0qm741kh4rh57wky16sq4m0v05fxmkjjr87krycf5vp9f0zbahbc"; })
+  (fetchNuGet { pname = "System.Runtime.Extensions"; version = "4.1.0"; sha256 = "0rw4rm4vsm3h3szxp9iijc3ksyviwsv6f63dng3vhqyg4vjdkc2z"; })
+  (fetchNuGet { pname = "System.Runtime.Extensions"; version = "4.3.0"; sha256 = "1ykp3dnhwvm48nap8q23893hagf665k0kn3cbgsqpwzbijdcgc60"; })
+  (fetchNuGet { pname = "System.Runtime.Handles"; version = "4.0.1"; sha256 = "1g0zrdi5508v49pfm3iii2hn6nm00bgvfpjq1zxknfjrxxa20r4g"; })
+  (fetchNuGet { pname = "System.Runtime.Handles"; version = "4.3.0"; sha256 = "0sw2gfj2xr7sw9qjn0j3l9yw07x73lcs97p8xfc9w1x9h5g5m7i8"; })
+  (fetchNuGet { pname = "System.Runtime.InteropServices"; version = "4.1.0"; sha256 = "01kxqppx3dr3b6b286xafqilv4s2n0gqvfgzfd4z943ga9i81is1"; })
+  (fetchNuGet { pname = "System.Runtime.InteropServices"; version = "4.3.0"; sha256 = "00hywrn4g7hva1b2qri2s6rabzwgxnbpw9zfxmz28z09cpwwgh7j"; })
+  (fetchNuGet { pname = "System.Runtime.InteropServices.RuntimeInformation"; version = "4.3.0"; sha256 = "0q18r1sh4vn7bvqgd6dmqlw5v28flbpj349mkdish2vjyvmnb2ii"; })
+  (fetchNuGet { pname = "System.Runtime.Numerics"; version = "4.3.0"; sha256 = "19rav39sr5dky7afygh309qamqqmi9kcwvz3i0c5700v0c5cg61z"; })
+  (fetchNuGet { pname = "System.Runtime.Serialization.Primitives"; version = "4.1.1"; sha256 = "042rfjixknlr6r10vx2pgf56yming8lkjikamg3g4v29ikk78h7k"; })
+  (fetchNuGet { pname = "System.Security.AccessControl"; version = "5.0.0"; sha256 = "17n3lrrl6vahkqmhlpn3w20afgz09n7i6rv0r3qypngwi7wqdr5r"; })
+  (fetchNuGet { pname = "System.Security.Claims"; version = "4.3.0"; sha256 = "0jvfn7j22l3mm28qjy3rcw287y9h65ha4m940waaxah07jnbzrhn"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Algorithms"; version = "4.3.0"; sha256 = "03sq183pfl5kp7gkvq77myv7kbpdnq3y0xj7vi4q1kaw54sny0ml"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Cng"; version = "4.3.0"; sha256 = "1k468aswafdgf56ab6yrn7649kfqx2wm9aslywjam1hdmk5yypmv"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Csp"; version = "4.3.0"; sha256 = "1x5wcrddf2s3hb8j78cry7yalca4lb5vfnkrysagbn6r9x6xvrx1"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Encoding"; version = "4.3.0"; sha256 = "1jr6w70igqn07k5zs1ph6xja97hxnb3mqbspdrff6cvssgrixs32"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0givpvvj8yc7gv4lhb6s1prq6p2c4147204a0wib89inqzd87gqc"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Primitives"; version = "4.3.0"; sha256 = "0pyzncsv48zwly3lw4f2dayqswcfvdwq2nz0dgwmi7fj3pn64wby"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.X509Certificates"; version = "4.3.0"; sha256 = "0valjcz5wksbvijylxijjxb1mp38mdhv03r533vnx1q3ikzdav9h"; })
+  (fetchNuGet { pname = "System.Security.Principal"; version = "4.3.0"; sha256 = "12cm2zws06z4lfc4dn31iqv7072zyi4m910d4r6wm8yx85arsfxf"; })
+  (fetchNuGet { pname = "System.Security.Principal.Windows"; version = "4.3.0"; sha256 = "00a0a7c40i3v4cb20s2cmh9csb5jv2l0frvnlzyfxh848xalpdwr"; })
+  (fetchNuGet { pname = "System.Security.Principal.Windows"; version = "5.0.0"; sha256 = "1mpk7xj76lxgz97a5yg93wi8lj0l8p157a5d50mmjy3gbz1904q8"; })
+  (fetchNuGet { pname = "System.Text.Encoding"; version = "4.0.11"; sha256 = "1dyqv0hijg265dwxg6l7aiv74102d6xjiwplh2ar1ly6xfaa4iiw"; })
+  (fetchNuGet { pname = "System.Text.Encoding"; version = "4.3.0"; sha256 = "1f04lkir4iladpp51sdgmis9dj4y8v08cka0mbmsy0frc9a4gjqr"; })
+  (fetchNuGet { pname = "System.Text.Encoding.Extensions"; version = "4.0.11"; sha256 = "08nsfrpiwsg9x5ml4xyl3zyvjfdi4mvbqf93kjdh11j4fwkznizs"; })
+  (fetchNuGet { pname = "System.Text.Encoding.Extensions"; version = "4.3.0"; sha256 = "11q1y8hh5hrp5a3kw25cb6l00v5l5dvirkz8jr3sq00h1xgcgrxy"; })
+  (fetchNuGet { pname = "System.Text.Encodings.Web"; version = "7.0.0"; sha256 = "1151hbyrcf8kyg1jz8k9awpbic98lwz9x129rg7zk1wrs6vjlpxl"; })
+  (fetchNuGet { pname = "System.Text.Json"; version = "7.0.3"; sha256 = "0zjrnc9lshagm6kdb9bdh45dmlnkpwcpyssa896sda93ngbmj8k9"; })
+  (fetchNuGet { pname = "System.Text.RegularExpressions"; version = "4.1.0"; sha256 = "1mw7vfkkyd04yn2fbhm38msk7dz2xwvib14ygjsb8dq2lcvr18y7"; })
+  (fetchNuGet { pname = "System.Text.RegularExpressions"; version = "4.3.0"; sha256 = "1bgq51k7fwld0njylfn7qc5fmwrk2137gdq7djqdsw347paa9c2l"; })
+  (fetchNuGet { pname = "System.Threading"; version = "4.0.11"; sha256 = "19x946h926bzvbsgj28csn46gak2crv2skpwsx80hbgazmkgb1ls"; })
+  (fetchNuGet { pname = "System.Threading"; version = "4.3.0"; sha256 = "0rw9wfamvhayp5zh3j7p1yfmx9b5khbf4q50d8k5rk993rskfd34"; })
+  (fetchNuGet { pname = "System.Threading.Tasks"; version = "4.0.11"; sha256 = "0nr1r41rak82qfa5m0lhk9mp0k93bvfd7bbd9sdzwx9mb36g28p5"; })
+  (fetchNuGet { pname = "System.Threading.Tasks"; version = "4.3.0"; sha256 = "134z3v9abw3a6jsw17xl3f6hqjpak5l682k2vz39spj4kmydg6k7"; })
+  (fetchNuGet { pname = "System.Threading.Tasks.Dataflow"; version = "7.0.0"; sha256 = "0ham9l8xrmlq2qwin53n82iz1wanci2h695i3cq83jcw4n28qdr9"; })
+  (fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.0.0"; sha256 = "1cb51z062mvc2i8blpzmpn9d9mm4y307xrwi65di8ri18cz5r1zr"; })
+  (fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.3.0"; sha256 = "1xxcx2xh8jin360yjwm4x4cf5y3a2bwpn2ygkfkwkicz7zk50s2z"; })
+  (fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.5.4"; sha256 = "0y6ncasgfcgnjrhynaf0lwpkpkmv4a07sswwkwbwb5h7riisj153"; })
+  (fetchNuGet { pname = "System.Threading.ThreadPool"; version = "4.3.0"; sha256 = "027s1f4sbx0y1xqw2irqn6x161lzj8qwvnh2gn78ciiczdv10vf1"; })
+  (fetchNuGet { pname = "System.Threading.Timer"; version = "4.3.0"; sha256 = "1nx773nsx6z5whv8kaa1wjh037id2f1cxhb69pvgv12hd2b6qs56"; })
+  (fetchNuGet { pname = "System.Xml.ReaderWriter"; version = "4.0.11"; sha256 = "0c6ky1jk5ada9m94wcadih98l6k1fvf6vi7vhn1msjixaha419l5"; })
+  (fetchNuGet { pname = "System.Xml.ReaderWriter"; version = "4.3.0"; sha256 = "0c47yllxifzmh8gq6rq6l36zzvw4kjvlszkqa9wq3fr59n0hl3s1"; })
+  (fetchNuGet { pname = "System.Xml.XDocument"; version = "4.0.11"; sha256 = "0n4lvpqzy9kc7qy1a4acwwd7b7pnvygv895az5640idl2y9zbz18"; })
+  (fetchNuGet { pname = "System.Xml.XDocument"; version = "4.3.0"; sha256 = "08h8fm4l77n0nd4i4fk2386y809bfbwqb7ih9d7564ifcxr5ssxd"; })
+  (fetchNuGet { pname = "Tomlyn"; version = "0.17.0"; sha256 = "0xndl4hz701jk49hd5jgz6l7isg5wsndx208vxv1a9hi1zpwb4d4"; })
+  (fetchNuGet { pname = "xunit"; version = "2.6.2"; sha256 = "0g5j0xwrv9cwrx91cjb9gas3wnkcwwk8krhdzsv50vlyp71pqqgz"; })
+  (fetchNuGet { pname = "xunit.abstractions"; version = "2.0.3"; sha256 = "00wl8qksgkxld76fgir3ycc5rjqv1sqds6x8yx40927q5py74gfh"; })
+  (fetchNuGet { pname = "xunit.analyzers"; version = "1.6.0"; sha256 = "1nwrz0mxk2hk2rwwabgr0a4wa3j22qwm94xvrzci39l58hmzxpbi"; })
+  (fetchNuGet { pname = "xunit.assert"; version = "2.6.2"; sha256 = "1nxg9m8qhh05i9linap7a8bdhxnr7x2pg7piw8hh76cshx0402ql"; })
+  (fetchNuGet { pname = "xunit.core"; version = "2.6.2"; sha256 = "0q0kzjdb0hxq4bajl11pvnwl1dp47b2adqx47j30bi2llj21ihj6"; })
+  (fetchNuGet { pname = "xunit.extensibility.core"; version = "2.6.2"; sha256 = "1a27ng02piwjr3ggff4mg0r92b6rabd1339clnxzqxwcyf620q2c"; })
+  (fetchNuGet { pname = "xunit.extensibility.execution"; version = "2.6.2"; sha256 = "1lhhlrq6lzd4w61x78dhxjz1453lnipjgph8sc52izgwq9d5xp1n"; })
+  (fetchNuGet { pname = "xunit.runner.visualstudio"; version = "2.5.4"; sha256 = "0mp3z8m5l4q09lr17142hff6p05zl189cwz3iavfqk8dpspyjgvd"; })
+]
diff --git a/nixpkgs/pkgs/development/tools/marksman/update.sh b/nixpkgs/pkgs/development/tools/marksman/update.sh
new file mode 100755
index 000000000000..b17097e683c4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/marksman/update.sh
@@ -0,0 +1,18 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -I nixpkgs=./. -i bash -p curl jq common-updater-scripts
+#shellcheck shell=bash
+
+set -eu -o pipefail
+
+version=$(curl -s ${GITHUB_TOKEN:+-u ":$GITHUB_TOKEN"} \
+    https://api.github.com/repos/artempyanykh/marksman/releases/latest | jq -e -r .tag_name)
+old_version=$(nix-instantiate --eval -A marksman.version | jq -e -r)
+
+if [[ $version == "$old_version" ]]; then
+    echo "New version same as old version, nothing to do." >&2
+    exit 0
+fi
+
+update-source-version marksman "$version"
+
+$(nix-build -A marksman.fetch-deps --no-out-link)
diff --git a/nixpkgs/pkgs/development/tools/mars-mips/default.nix b/nixpkgs/pkgs/development/tools/mars-mips/default.nix
new file mode 100644
index 000000000000..4fafaabaa3dc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/mars-mips/default.nix
@@ -0,0 +1,50 @@
+{ lib, stdenvNoCC, fetchurl, makeWrapper, copyDesktopItems, makeDesktopItem, unzip, imagemagick, jre }:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "mars-mips";
+  version = "4.5";
+
+  src = fetchurl {
+    url = "https://courses.missouristate.edu/KenVollmar/MARS/MARS_${lib.replaceStrings ["."] ["_"] version}_Aug2014/Mars${lib.replaceStrings ["."] ["_"] version}.jar";
+    sha256 = "15kh1fahkkbbf4wvb6ijzny4fi5dh4pycxyzp5325dm2ddkhnd5c";
+  };
+
+  dontUnpack = true;
+
+  nativeBuildInputs = [ makeWrapper copyDesktopItems unzip imagemagick ];
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = pname;
+      desktopName = "MARS";
+      exec = "mars-mips";
+      icon = "mars-mips";
+      comment = "An IDE for programming in MIPS assembly language";
+      categories = [ "Development" "IDE" ];
+    })
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    export JAR=$out/share/java/${pname}/${pname}.jar
+    install -D $src $JAR
+    makeWrapper ${jre}/bin/java $out/bin/${pname} \
+      --add-flags "-jar $JAR"
+
+    unzip ${src} images/MarsThumbnail.gif
+    mkdir -p $out/share/pixmaps
+    convert images/MarsThumbnail.gif $out/share/pixmaps/mars-mips.png
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "An IDE for programming in MIPS assembly language intended for educational-level use";
+    homepage = "https://courses.missouristate.edu/KenVollmar/MARS/";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.mit;
+    maintainers = with maintainers; [ emilytrau ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/mask/default.nix b/nixpkgs/pkgs/development/tools/mask/default.nix
new file mode 100644
index 000000000000..e936535779b5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/mask/default.nix
@@ -0,0 +1,26 @@
+{ lib, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "mask";
+  version = "0.11.4";
+
+  src = fetchFromGitHub {
+    owner = "jacobdeichert";
+    repo = pname;
+    rev = "mask/${version}";
+    hash = "sha256-pi8dD4Fko39yn1maXNOqm+aDWYJhxE/b4kH7H18InbY=";
+  };
+
+  cargoHash = "sha256-zbvYSTR0m7S4m0WFQrCqCrMXqMcDW2oIMznD5PDdeHE=";
+
+  # tests require mask to be installed
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A CLI task runner defined by a simple markdown file";
+    homepage = "https://github.com/jacobdeichert/mask";
+    changelog = "https://github.com/jacobdeichert/mask/blob/mask/${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/mbed-cli/default.nix b/nixpkgs/pkgs/development/tools/mbed-cli/default.nix
new file mode 100644
index 000000000000..f5d55ce10dfb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/mbed-cli/default.nix
@@ -0,0 +1,34 @@
+{ lib, python3Packages, fetchPypi, git, mercurial }:
+
+with python3Packages;
+
+buildPythonApplication rec {
+  pname = "mbed-cli";
+  version = "1.10.5";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-X+hNVM8fsy0VFTqFr1pPKWRimacBenTcY4y+PBJpvlI=";
+  };
+
+  nativeCheckInputs = [
+    git
+    mercurial
+    pytest
+  ];
+
+  checkPhase = ''
+    export GIT_COMMITTER_NAME=nixbld
+    export EMAIL=nixbld@localhost
+    export GIT_COMMITTER_DATE=$SOURCE_DATE_EPOCH
+    pytest test
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/ARMmbed/mbed-cli";
+    description = "Arm Mbed Command Line Interface";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/development/tools/mblock-mlink/default.nix b/nixpkgs/pkgs/development/tools/mblock-mlink/default.nix
new file mode 100644
index 000000000000..4d70efbbc50e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/mblock-mlink/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, lib, fetchurl, dpkg, makeWrapper, autoPatchelfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "mblock-mlink";
+  version = "1.2.0";
+
+  src = fetchurl {
+    url = "https://dl.makeblock.com/mblock5/linux/mLink-${version}-amd64.deb";
+    sha256 = "sha256-KLxj81ZjbEvhhaz0seNB4WXX5ybeZ7/WcT1dGfdWle0=";
+  };
+
+  unpackPhase = ''
+    ${dpkg}/bin/dpkg -x $src $out
+  '';
+
+  buildInputs = [
+    stdenv.cc.cc.lib
+  ];
+
+  nativeBuildInputs = [
+    autoPatchelfHook
+  ];
+
+  installPhase = ''
+    mv $out/usr/local/makeblock $out/usr/makeblock
+    rmdir $out/usr/local
+    mkdir -p $out/bin
+    echo $out/usr/makeblock/mLink/mnode $out/usr/makeblock/mLink/app.js > $out/bin/mlink
+    chmod +x $out/bin/mlink
+  '';
+
+  meta = with lib; {
+    description = "Driver for mBlock web version";
+    homepage = "https://mblock.makeblock.com/en-us/download/";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    platforms = [ "x86_64-linux" ];
+    maintainers = [ maintainers.mausch ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/mdk/default.nix b/nixpkgs/pkgs/development/tools/mdk/default.nix
new file mode 100644
index 000000000000..7345540b51b2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/mdk/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchurl, intltool, pkg-config, glib }:
+
+stdenv.mkDerivation rec {
+  pname = "gnu-mdk";
+  version = "1.3.0";
+  src = fetchurl {
+    url = "mirror://gnu/mdk/v${version}/mdk-${version}.tar.gz";
+    sha256 = "0bhk3c82kyp8167h71vdpbcr852h5blpnwggcswqqwvvykbms7lb";
+  };
+  nativeBuildInputs = [ pkg-config intltool ];
+  buildInputs = [ glib ];
+  postInstall = ''
+    mkdir -p $out/share/emacs/site-lisp/
+    cp -v ./misc/*.el $out/share/emacs/site-lisp
+  '';
+
+  meta = {
+    description = "GNU MIX Development Kit (MDK)";
+    homepage = "https://www.gnu.org/software/mdk/";
+    license = lib.licenses.gpl3;
+    platforms = lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/melange/default.nix b/nixpkgs/pkgs/development/tools/melange/default.nix
new file mode 100644
index 000000000000..0ee59814bf41
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/melange/default.nix
@@ -0,0 +1,72 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+}:
+
+buildGoModule rec {
+  pname = "melange";
+  version = "0.5.6";
+
+  src = fetchFromGitHub {
+    owner = "chainguard-dev";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-/oQDtUL3gjm4BsUbx7p3AmM7hcrd8Ui5Dih0DFAl5rs=";
+    # populate values that require us to use git. By doing this in postFetch we
+    # can delete .git afterwards and maintain better reproducibility of the src.
+    leaveDotGit = true;
+    postFetch = ''
+      cd "$out"
+      git rev-parse HEAD > $out/COMMIT
+      # in format of 0000-00-00T00:00:00Z
+      date -u -d "@$(git log -1 --pretty=%ct)" "+%Y-%m-%dT%H:%M:%SZ" > $out/SOURCE_DATE_EPOCH
+      find "$out" -name .git -print0 | xargs -0 rm -rf
+    '';
+  };
+
+  vendorHash = "sha256-qQm/a7pE7mwqvYFFUceqElV+Qg1G39/z048wxYrV7E4=";
+
+  subPackages = [ "." ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X sigs.k8s.io/release-utils/version.gitVersion=v${version}"
+    "-X sigs.k8s.io/release-utils/version.gitTreeState=clean"
+  ];
+
+  # ldflags based on metadata from git and source
+  preBuild = ''
+    ldflags+=" -X sigs.k8s.io/release-utils/version.gitCommit=$(cat COMMIT)"
+    ldflags+=" -X sigs.k8s.io/release-utils/version.buildDate=$(cat SOURCE_DATE_EPOCH)"
+  '';
+
+  postInstall = ''
+    installShellCompletion --cmd melange \
+      --bash <($out/bin/melange completion bash) \
+      --fish <($out/bin/melange completion fish) \
+      --zsh <($out/bin/melange completion zsh)
+  '';
+
+  doInstallCheck = true;
+
+  installCheckPhase = ''
+    runHook preInstallCheck
+
+    $out/bin/melange --help
+    $out/bin/melange version 2>&1 | grep "v${version}"
+
+    runHook postInstallCheck
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/chainguard-dev/melange";
+    changelog = "https://github.com/chainguard-dev/melange/blob/${src.rev}/NEWS.md";
+    description = "Build APKs from source code";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ developer-guy ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/memray/default.nix b/nixpkgs/pkgs/development/tools/memray/default.nix
new file mode 100644
index 000000000000..8e0b2689984e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/memray/default.nix
@@ -0,0 +1,71 @@
+{ lib
+, fetchFromGitHub
+, libunwind
+, lz4
+, pkg-config
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "memray";
+  version = "1.11.0";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "bloomberg";
+    repo = "memray";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-DaJ1Hhg7q4ckA5feUx0twOsmy28v5aBBCTUAkn43xAo=";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    libunwind
+    lz4
+  ] ++ (with python3.pkgs; [
+    cython
+  ]);
+
+  propagatedBuildInputs = with python3.pkgs; [
+    jinja2
+    rich
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    ipython
+    pytestCheckHook
+  ] ++ lib.optionals (pythonOlder "3.12") [
+    greenlet
+  ];
+
+  pythonImportsCheck = [
+    "memray"
+  ];
+
+  pytestFlagsArray = [
+    "tests"
+  ];
+
+  disabledTests = [
+    # Import issue
+    "test_header_allocator"
+    "test_hybrid_stack_of_allocations_inside_ceval"
+  ];
+
+  disabledTestPaths = [
+    # Very time-consuming and some tests fails (performance-related?)
+    "tests/integration/test_main.py"
+  ];
+
+  meta = with lib; {
+    description = "Memory profiler for Python";
+    homepage = "https://bloomberg.github.io/memray/";
+    changelog = "https://github.com/bloomberg/memray/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ fab ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/metal-cli/default.nix b/nixpkgs/pkgs/development/tools/metal-cli/default.nix
new file mode 100644
index 000000000000..e11a580ffb26
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/metal-cli/default.nix
@@ -0,0 +1,53 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+}:
+
+buildGoModule rec {
+  pname = "metal-cli";
+  version = "0.22.0";
+
+  src = fetchFromGitHub {
+    owner = "equinix";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-jnBD1MYQ3Tq/YzPEpCu5sifEUAI0cw59/NCbDLisEDo=";
+  };
+
+  vendorHash = "sha256-dIZyBhoY6GkkMY4NQrDjVxKaOOPIdxGGRBFlTkyeFdo=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/equinix/metal-cli/cmd.Version=${version}"
+  ];
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  postInstall = ''
+    installShellCompletion --cmd metal \
+      --bash <($out/bin/metal completion bash) \
+      --fish <($out/bin/metal completion fish) \
+      --zsh <($out/bin/metal completion zsh)
+  '';
+
+  doCheck = false;
+
+  doInstallCheck = true;
+
+  installCheckPhase = ''
+      $out/bin/metal --version | grep ${version}
+  '';
+
+  meta = with lib; {
+    description = "Official Equinix Metal CLI";
+    homepage = "https://github.com/equinix/metal-cli/";
+    changelog = "https://github.com/equinix/metal-cli/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ Br1ght0ne nshalman ];
+    mainProgram = "metal";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/micronaut/default.nix b/nixpkgs/pkgs/development/tools/micronaut/default.nix
new file mode 100644
index 000000000000..8c0ed2e4bfd5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/micronaut/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchzip, jdk, makeWrapper, installShellFiles }:
+
+stdenv.mkDerivation rec {
+  pname = "micronaut";
+  version = "4.2.4";
+
+  src = fetchzip {
+    url = "https://github.com/micronaut-projects/micronaut-starter/releases/download/v${version}/micronaut-cli-${version}.zip";
+    sha256 = "sha256-Jhy1q+6VdLPScq882QU8dIUNNKs1i+3Mug5ycUWFp9U=";
+  };
+
+  nativeBuildInputs = [ makeWrapper installShellFiles ];
+
+  installPhase = ''
+    runHook preInstall
+    rm bin/mn.bat
+    cp -r . $out
+    wrapProgram $out/bin/mn \
+      --prefix JAVA_HOME : ${jdk}
+    installShellCompletion --bash --name mn.bash bin/mn_completion
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Modern, JVM-based, full-stack framework for building microservice applications";
+    longDescription = ''
+      Micronaut is a modern, JVM-based, full stack microservices framework
+      designed for building modular, easily testable microservice applications.
+      Reflection-based IoC frameworks load and cache reflection data for
+      every single field, method, and constructor in your code, whereas with
+      Micronaut, your application startup time and memory consumption are
+      not bound to the size of your codebase.
+    '';
+    homepage = "https://micronaut.io/";
+    license = licenses.asl20;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ moaxcp ];
+    mainProgram = "mn";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/minizinc/default.nix b/nixpkgs/pkgs/development/tools/minizinc/default.nix
new file mode 100644
index 000000000000..5846642d84ef
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/minizinc/default.nix
@@ -0,0 +1,46 @@
+{ lib, stdenv, fetchFromGitHub, callPackage, jq, cmake, flex, bison, gecode, mpfr, cbc, zlib }:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "minizinc";
+  version = "2.8.2";
+
+  src = fetchFromGitHub {
+    owner = "MiniZinc";
+    repo = "libminizinc";
+    rev = finalAttrs.version;
+    sha256 = "sha256-p714jUegeaN7o9Ytjpx/9zkcodbyVcSKiJe3VQ0mIys=";
+  };
+
+  nativeBuildInputs = [ bison cmake flex jq ];
+
+  buildInputs = [ gecode mpfr cbc zlib ];
+
+  postInstall = ''
+    mkdir -p $out/share/minizinc/solvers/
+    jq \
+      '.version = "${gecode.version}"
+       | .mznlib = "${gecode}/share/gecode/mznlib"
+       | .executable = "${gecode}/bin/fzn-gecode"' \
+       ${./gecode.msc} \
+       >$out/share/minizinc/solvers/gecode.msc
+  '';
+
+  passthru.tests = {
+    simple = callPackage ./simple-test { };
+  };
+
+  meta = with lib; {
+    homepage = "https://www.minizinc.org/";
+    description = "A medium-level constraint modelling language";
+    longDescription = ''
+      MiniZinc is a medium-level constraint modelling
+      language. It is high-level enough to express most
+      constraint problems easily, but low-level enough
+      that it can be mapped onto existing solvers easily and consistently.
+      It is a subset of the higher-level language Zinc.
+    '';
+    license = licenses.mpl20;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.sheenobu ];
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/minizinc/gecode.msc b/nixpkgs/pkgs/development/tools/minizinc/gecode.msc
new file mode 100644
index 000000000000..fc0b4a204689
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/minizinc/gecode.msc
@@ -0,0 +1,16 @@
+{
+    "id": "org.gecode.gecode",
+    "name": "Gecode",
+    "description": "Gecode FlatZinc executable",
+    "version": "VERSION-WILL-BE-REPLACED-BY-JQ",
+    "mznlib": "MZNLIB-WILL-BE-REPLACED-BY-JQ",
+    "executable": "FZN_GECODE-WILL-BE-REPLACED-BY-JQ",
+    "tags": ["cp","int", "float", "set", "restart"],
+    "stdFlags": ["-a","-f","-n","-p","-r","-s","-t"],
+    "supportsMzn": false,
+    "supportsFzn": true,
+    "needsSolns2Out": true,
+    "needsMznExecutable": false,
+    "needsStdlibDir": false,
+    "isGUIApplication": false
+}
diff --git a/nixpkgs/pkgs/development/tools/minizinc/ide.nix b/nixpkgs/pkgs/development/tools/minizinc/ide.nix
new file mode 100644
index 000000000000..ce115971f944
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/minizinc/ide.nix
@@ -0,0 +1,48 @@
+{ lib, stdenv, fetchFromGitHub, qtbase, qmake, qtwebsockets, minizinc, makeWrapper, Cocoa }:
+
+let
+  executableLoc = if stdenv.isDarwin then "$out/Applications/MiniZincIDE.app/Contents/MacOS/MiniZincIDE" else "$out/bin/MiniZincIDE";
+in
+stdenv.mkDerivation rec {
+  pname = "minizinc-ide";
+  version = "2.8.2";
+
+  src = fetchFromGitHub {
+    owner = "MiniZinc";
+    repo = "MiniZincIDE";
+    rev = version;
+    hash = "sha256-3L/hulNI7e2wE9gMt2h3mS0ubHZ4kcVpwALCmWQtv7A=";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [ qmake makeWrapper ];
+  buildInputs = [ qtbase qtwebsockets ] ++ lib.optionals stdenv.isDarwin [ Cocoa ];
+
+  sourceRoot = "${src.name}/MiniZincIDE";
+
+  dontWrapQtApps = true;
+
+  postInstall = lib.optionalString stdenv.hostPlatform.isDarwin ''
+    mkdir -p $out/Applications
+    mv $out/bin/MiniZincIDE.app $out/Applications/
+  '' + ''
+    wrapProgram ${executableLoc} \
+      --prefix PATH ":" ${lib.makeBinPath [ minizinc ]} \
+      --set QT_QPA_PLATFORM_PLUGIN_PATH "${qtbase}/lib/qt-6/plugins/platforms"
+  '';
+
+  meta = with lib; {
+    homepage = "https://www.minizinc.org/";
+    description = "IDE for MiniZinc, a medium-level constraint modelling language";
+    longDescription = ''
+      MiniZinc is a medium-level constraint modelling
+      language. It is high-level enough to express most
+      constraint problems easily, but low-level enough
+      that it can be mapped onto existing solvers easily and consistently.
+      It is a subset of the higher-level language Zinc.
+    '';
+    license = licenses.mpl20;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.dtzWill ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/minizinc/simple-test/aust.mzn b/nixpkgs/pkgs/development/tools/minizinc/simple-test/aust.mzn
new file mode 100644
index 000000000000..73d6dbfb7daa
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/minizinc/simple-test/aust.mzn
@@ -0,0 +1,20 @@
+% Taken from https://www.minizinc.org/doc-2.7.3/en/modelling.html
+int: nc = 3;
+
+var 1..nc: wa;   var 1..nc: nt;  var 1..nc: sa;   var 1..nc: q;
+var 1..nc: nsw;  var 1..nc: v;   var 1..nc: t;
+
+constraint wa != nt;
+constraint wa != sa;
+constraint nt != sa;
+constraint nt != q;
+constraint sa != q;
+constraint sa != nsw;
+constraint sa != v;
+constraint q != nsw;
+constraint nsw != v;
+solve satisfy;
+
+output ["wa=\(wa)\t nt=\(nt)\t sa=\(sa)\n",
+        "q=\(q)\t nsw=\(nsw)\t v=\(v)\n",
+         "t=", show(t),  "\n"];
diff --git a/nixpkgs/pkgs/development/tools/minizinc/simple-test/default.nix b/nixpkgs/pkgs/development/tools/minizinc/simple-test/default.nix
new file mode 100644
index 000000000000..ee813e09cf00
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/minizinc/simple-test/default.nix
@@ -0,0 +1,21 @@
+# These tests show that the minizinc build is capable of running the
+# examples in the official tutorial:
+# https://www.minizinc.org/doc-2.7.3/en/modelling.html
+
+{ stdenv, minizinc }:
+
+stdenv.mkDerivation {
+  name = "minizinc-simple-test";
+
+  nativeBuildInputs = [ minizinc ];
+
+  dontInstall = true;
+
+  buildCommand = ''
+    minizinc --solver gecode ${./aust.mzn}
+    minizinc --solver cbc ${./loan.mzn} ${./loan1.dzn}
+    touch $out
+  '';
+
+  meta.timeout = 10;
+}
diff --git a/nixpkgs/pkgs/development/tools/minizinc/simple-test/loan.mzn b/nixpkgs/pkgs/development/tools/minizinc/simple-test/loan.mzn
new file mode 100644
index 000000000000..b3c1b735847e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/minizinc/simple-test/loan.mzn
@@ -0,0 +1,24 @@
+% Taken from https://www.minizinc.org/doc-2.7.3/en/modelling.html
+% variables
+var float: R;        % quarterly repayment
+var float: P;        % principal initially borrowed
+var 0.0 .. 10.0: I;  % interest rate (per quarter)
+
+% intermediate variables
+var float: B1; % balance after one quarter
+var float: B2; % balance after two quarters
+var float: B3; % balance after three quarters
+var float: B4; % balance owing at end
+
+constraint B1 = P * (1.0 + I) - R;
+constraint B2 = B1 * (1.0 + I) - R;
+constraint B3 = B2 * (1.0 + I) - R;
+constraint B4 = B3 * (1.0 + I) - R;
+
+solve satisfy;
+
+output [
+ "Borrowing ", show_float(0, 2, P), " at ", show(I*100.0),
+ "% interest, and repaying ", show_float(0, 2, R),
+  "\nper quarter for 1 year leaves ", show_float(0, 2, B4), " owing\n"
+];
diff --git a/nixpkgs/pkgs/development/tools/minizinc/simple-test/loan1.dzn b/nixpkgs/pkgs/development/tools/minizinc/simple-test/loan1.dzn
new file mode 100644
index 000000000000..d5fd9dad2e95
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/minizinc/simple-test/loan1.dzn
@@ -0,0 +1,3 @@
+I = 0.04;
+P = 1000.0;
+R = 260.0;
diff --git a/nixpkgs/pkgs/development/tools/misc/abi-compliance-checker/default.nix b/nixpkgs/pkgs/development/tools/misc/abi-compliance-checker/default.nix
new file mode 100644
index 000000000000..c4dda95a7f25
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/abi-compliance-checker/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchFromGitHub, ctags, perl, binutils, abi-dumper }:
+
+stdenv.mkDerivation rec {
+  pname = "abi-compliance-checker";
+  version = "2.3";
+
+  src = fetchFromGitHub {
+    owner = "lvc";
+    repo = "abi-compliance-checker";
+    rev = version;
+    sha256 = "1f1f9j2nf9j83sfl2ljadch99v6ha8rq8xm7ax5akc05hjpyckij";
+  };
+
+  buildInputs = [ binutils ctags perl ];
+  propagatedBuildInputs = [ abi-dumper ];
+
+  makeFlags = [ "prefix=$(out)" ];
+
+  meta = with lib; {
+    homepage = "https://lvc.github.io/abi-compliance-checker";
+    description = "A tool for checking backward API/ABI compatibility of a C/C++ library";
+    license = licenses.lgpl21;
+    maintainers = [ maintainers.bhipple ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/abi-dumper/default.nix b/nixpkgs/pkgs/development/tools/misc/abi-dumper/default.nix
new file mode 100644
index 000000000000..6dd2bf41ba6f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/abi-dumper/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, ctags, perl, elfutils, vtable-dumper }:
+
+stdenv.mkDerivation rec {
+  pname = "abi-dumper";
+  version = "1.2";
+
+  src = fetchFromGitHub {
+    owner = "lvc";
+    repo = "abi-dumper";
+    rev = version;
+    sha256 = "1i00rfnddrrb9lb1l6ib19g3a76pyasl9lb7rqz2p998gav1gjp2";
+  };
+
+  patchPhase = ''
+    substituteInPlace abi-dumper.pl \
+      --replace eu-readelf ${elfutils}/bin/eu-readelf \
+      --replace vtable-dumper ${vtable-dumper}/bin/vtable-dumper \
+      --replace '"ctags"' '"${ctags}/bin/ctags"'
+  '';
+
+  buildInputs = [ elfutils ctags perl vtable-dumper ];
+
+  preBuild = "mkdir -p $out";
+  makeFlags = [ "prefix=$(out)" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/lvc/abi-dumper";
+    description = "Dump ABI of an ELF object containing DWARF debug info";
+    license = licenses.lgpl21;
+    maintainers = [ maintainers.bhipple ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/acr/default.nix b/nixpkgs/pkgs/development/tools/misc/acr/default.nix
new file mode 100644
index 000000000000..2ddc23f51c3c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/acr/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "acr";
+  version = "2.1.2";
+
+  src = fetchFromGitHub {
+    owner = "radareorg";
+    repo = "acr";
+    rev = finalAttrs.version;
+    hash = "sha256-xKB9zBw9sX+z/yBzvfIzQPyOHzlCAGfGLyuLGRoyWbg=";
+  };
+
+  preConfigure = ''
+    chmod +x ./autogen.sh && ./autogen.sh
+  '';
+
+  meta = {
+    homepage = "https://github.com/radareorg/acr/";
+    description = "Pure shell autoconf replacement";
+    longDescription = ''
+      ACR tries to replace autoconf functionality generating a full-compatible
+      'configure' script (runtime flags). But using shell-script instead of
+      m4. This means that ACR is faster, smaller and easy to use.
+    '';
+    license = lib.licenses.gpl2Plus;
+    maintainers = with lib.maintainers; [ AndersonTorres ];
+    platforms = lib.platforms.all;
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/misc/act/default.nix b/nixpkgs/pkgs/development/tools/misc/act/default.nix
new file mode 100644
index 000000000000..c620ca1649f0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/act/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, fetchFromGitHub
+, buildGoModule
+}:
+
+buildGoModule rec {
+  pname = "act";
+  version = "0.2.59";
+
+  src = fetchFromGitHub {
+    owner = "nektos";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-Y8g+eVZ0c0YPVL8E/JAqD6EheQX6sBHpw1tT88BkbtI=";
+  };
+
+  vendorHash = "sha256-0Sjj9+YJcIkigvJOXxtDVcUylZmVY/Xv/IYpEBN46Is=";
+
+  doCheck = false;
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X main.version=${version}"
+  ];
+
+  meta = with lib; {
+    description = "Run your GitHub Actions locally";
+    homepage = "https://github.com/nektos/act";
+    changelog = "https://github.com/nektos/act/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ Br1ght0ne kashw2 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/arcanist/default.nix b/nixpkgs/pkgs/development/tools/misc/arcanist/default.nix
new file mode 100644
index 000000000000..06c0f700ffe8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/arcanist/default.nix
@@ -0,0 +1,88 @@
+{ bison
+, cacert
+, fetchFromGitHub
+, flex
+, php
+, lib, stdenv
+, installShellFiles
+, which
+, python3
+}:
+
+# Make a custom wrapper. If `wrapProgram` is used, arcanist thinks .arc-wrapped is being
+# invoked and complains about it being an unknown toolset. We could use `makeWrapper`, but
+# then we’d need to still craft a script that does the `php libexec/arcanist/bin/...` dance
+# anyway... So just do everything at once.
+let makeArcWrapper = toolset: ''
+  cat << WRAPPER > $out/bin/${toolset}
+  #!$shell -e
+  export PATH='${php}/bin:${which}/bin'\''${PATH:+':'}\$PATH
+  exec ${php}/bin/php $out/libexec/arcanist/bin/${toolset} "\$@"
+  WRAPPER
+  chmod +x $out/bin/${toolset}
+'';
+
+in
+stdenv.mkDerivation {
+  pname = "arcanist";
+  version = "20230530";
+
+  src = fetchFromGitHub {
+    owner = "phacility";
+    repo = "arcanist";
+    rev = "e50d1bc4eabac9c37e3220e9f3fb8e37ae20b957";
+    hash = "sha256-u+HRsaCuAAyLrEihrZtLrdZ6NTVjPshieJATK3t5Fo4=";
+  };
+
+  patches = [
+    ./dont-require-python3-in-path.patch
+    ./shellcomplete-strlen-null.patch
+  ];
+
+  buildInputs = [ php python3 ];
+
+  nativeBuildInputs = [ bison flex installShellFiles ];
+
+  postPatch = lib.optionalString stdenv.isAarch64 ''
+    substituteInPlace support/xhpast/Makefile \
+      --replace "-minline-all-stringops" ""
+  '';
+
+  buildPhase = ''
+    runHook preBuild
+    make cleanall -C support/xhpast $makeFlags "''${makeFlagsArray[@]}" -j $NIX_BUILD_CORES
+    make xhpast   -C support/xhpast $makeFlags "''${makeFlagsArray[@]}" -j $NIX_BUILD_CORES
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out/bin $out/libexec
+    make install  -C support/xhpast $makeFlags "''${makeFlagsArray[@]}" -j $NIX_BUILD_CORES
+    make cleanall -C support/xhpast $makeFlags "''${makeFlagsArray[@]}" -j $NIX_BUILD_CORES
+    cp -R . $out/libexec/arcanist
+    ln -sf ${cacert}/etc/ssl/certs/ca-bundle.crt $out/libexec/arcanist/resources/ssl/default.pem
+
+    ${makeArcWrapper "arc"}
+    ${makeArcWrapper "phage"}
+
+    $out/bin/arc shell-complete --generate --
+    installShellCompletion --cmd arc --bash $out/libexec/arcanist/support/shell/rules/bash-rules.sh
+    installShellCompletion --cmd phage --bash $out/libexec/arcanist/support/shell/rules/bash-rules.sh
+    runHook postInstall
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/arc help diff -- > /dev/null
+    $out/bin/phage help alias -- > /dev/null
+  '';
+
+  meta = {
+    description = "Command line interface to Phabricator";
+    homepage = "https://www.phacility.com/";
+    license = lib.licenses.asl20;
+    platforms = lib.platforms.unix;
+    maintainers = [ lib.maintainers.thoughtpolice ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/arcanist/dont-require-python3-in-path.patch b/nixpkgs/pkgs/development/tools/misc/arcanist/dont-require-python3-in-path.patch
new file mode 100644
index 000000000000..5c127491bb84
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/arcanist/dont-require-python3-in-path.patch
@@ -0,0 +1,26 @@
+Don't require python3 in PATH
+
+Once packaged, the arcanoid.py script has an absolute path shebang to
+python3, so there is no need to also require python3 in PATH.
+
+This prevents leaking in a python3 in PATH in the environment which arc
+runs linters etc.
+
+Author: bjorn.forsman@gmail.com
+diff -uNr arcanist.orig/src/workflow/ArcanistAnoidWorkflow.php arcanist.new/src/workflow/ArcanistAnoidWorkflow.php
+--- arcanist.orig/src/workflow/ArcanistAnoidWorkflow.php	2022-03-31 13:23:30.865095192 +0200
++++ arcanist.new/src/workflow/ArcanistAnoidWorkflow.php	2022-04-01 12:19:15.644159639 +0200
+@@ -24,13 +24,6 @@
+   }
+ 
+   public function runWorkflow() {
+-    if (!Filesystem::binaryExists('python3')) {
+-      throw new PhutilArgumentUsageException(
+-        pht(
+-          'The "arc anoid" workflow requires "python3" to be available '.
+-          'in your $PATH.'));
+-    }
+-
+     $support_dir = phutil_get_library_root('arcanist');
+     $support_dir = dirname($support_dir);
+     $support_dir = $support_dir.'/support/';
diff --git a/nixpkgs/pkgs/development/tools/misc/arcanist/shellcomplete-strlen-null.patch b/nixpkgs/pkgs/development/tools/misc/arcanist/shellcomplete-strlen-null.patch
new file mode 100644
index 000000000000..6911ce074e0c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/arcanist/shellcomplete-strlen-null.patch
@@ -0,0 +1,13 @@
+diff --git a/src/toolset/workflow/ArcanistShellCompleteWorkflow.php b/src/toolset/workflow/ArcanistShellCompleteWorkflow.php
+index 9c2fcf9a..307231c8 100644
+--- a/src/toolset/workflow/ArcanistShellCompleteWorkflow.php
++++ b/src/toolset/workflow/ArcanistShellCompleteWorkflow.php
+@@ -92,7 +92,7 @@ EOTEXT
+     $argv = $this->getArgument('argv');
+ 
+     $is_generate = $this->getArgument('generate');
+-    $is_shell = (bool)strlen($this->getArgument('shell'));
++    $is_shell = phutil_nonempty_string($this->getArgument('shell'));
+     $is_current = $this->getArgument('current');
+ 
+     if ($argv) {
diff --git a/nixpkgs/pkgs/development/tools/misc/argbash/default.nix b/nixpkgs/pkgs/development/tools/misc/argbash/default.nix
new file mode 100644
index 000000000000..bf33e788633e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/argbash/default.nix
@@ -0,0 +1,50 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoconf
+, makeWrapper
+, python3Packages
+, runtimeShell
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "argbash";
+  version = "2.10.0";
+
+  src = fetchFromGitHub {
+    owner = "matejak";
+    repo = "argbash";
+    rev = finalAttrs.version;
+    hash = "sha256-G739q6OhsXEldpIxiyOU51AmG4RChMqaN1t2wOy6sPU=";
+  };
+
+  postPatch = ''
+    patchShebangs .
+    substituteInPlace resources/Makefile \
+      --replace '/bin/bash' "${runtimeShell}"
+  '';
+
+  nativeBuildInputs = [
+    autoconf
+    makeWrapper
+    python3Packages.docutils
+  ];
+
+  makeFlags = [
+    "-C" "resources"
+    "PREFIX=$(out)"
+  ];
+
+  postInstall = ''
+    wrapProgram $out/bin/argbash \
+      --prefix PATH : '${autoconf}/bin'
+  '';
+
+  meta = {
+    homepage = "https://argbash.io/";
+    description = "Bash argument parsing code generator";
+    license = lib.licenses.bsd3;
+    maintainers = with lib.maintainers; [ AndersonTorres ];
+    platforms = lib.platforms.all;
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/misc/astyle/default.nix b/nixpkgs/pkgs/development/tools/misc/astyle/default.nix
new file mode 100644
index 000000000000..880530511e1b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/astyle/default.nix
@@ -0,0 +1,21 @@
+{ stdenv, lib, fetchurl, cmake }:
+
+stdenv.mkDerivation rec {
+  pname = "astyle";
+  version = "3.4.12";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/${pname}/${pname}-${version}.tar.bz2";
+    hash = "sha256-B3RZsp9zhvJWnBQsaKW2YHaAsMvaAhAgn/6m/w9atg4=";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  meta = with lib; {
+    description = "Source code indenter, formatter, and beautifier for C, C++, C# and Java";
+    homepage = "https://astyle.sourceforge.net/";
+    license = licenses.lgpl3;
+    maintainers = with maintainers; [ carlossless ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/autobuild/default.nix b/nixpkgs/pkgs/development/tools/misc/autobuild/default.nix
new file mode 100644
index 000000000000..b6970beb8734
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/autobuild/default.nix
@@ -0,0 +1,36 @@
+{ fetchurl, lib, stdenv, makeWrapper, perl, openssh, rsync }:
+
+stdenv.mkDerivation rec {
+  pname = "autobuild";
+  version = "5.3";
+
+  src = fetchurl {
+    url = "mirror://savannah/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "0gv7g61ja9q9zg1m30k4snqwwy1kq7b4df6sb7d2qra7kbdq8af1";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ perl openssh rsync ];
+
+  doCheck = true;
+
+  meta = {
+    description = "Continuous integration tool";
+
+    longDescription = ''
+      Autobuild is a package that process output from building
+      software, primarily focused on packages using Autoconf and
+      Automake, and then generate a HTML summary file, containing
+      links to each build log.
+
+      Autobuild can also help you automate building your project on
+      many systems concurrently.  Users with accounts on the
+      SourceForge compile farms will be able to invoke a parallel
+      build of their Autoconf/Automake based software, and produce a
+      summary of the build status, after reading the manual.
+    '';
+
+    homepage = "https://josefsson.org/autobuild/";
+    license = lib.licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/autoconf-archive/default.nix b/nixpkgs/pkgs/development/tools/misc/autoconf-archive/default.nix
new file mode 100644
index 000000000000..3fbfabcee265
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/autoconf-archive/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchurl, xz }:
+
+stdenv.mkDerivation rec {
+  pname = "autoconf-archive";
+  version = "2023.02.20";
+
+  src = fetchurl {
+    url = "mirror://gnu/autoconf-archive/autoconf-archive-${version}.tar.xz";
+    hash = "sha256-cdQEhHmuKPH1eUYZw9ct+cAd9JscYo74X943WW3DGjM=";
+  };
+
+  strictDeps = true;
+  enableParallelBuilding = true;
+
+  buildInputs = [ xz ];
+
+  meta = with lib; {
+    description = "Archive of autoconf m4 macros";
+    homepage = "https://www.gnu.org/software/autoconf-archive/";
+    license = licenses.gpl3;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/autoconf/2.13.nix b/nixpkgs/pkgs/development/tools/misc/autoconf/2.13.nix
new file mode 100644
index 000000000000..8fba52aa1fd9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/autoconf/2.13.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchurl, m4, perl }:
+
+stdenv.mkDerivation rec {
+  pname = "autoconf";
+  version = "2.13";
+
+  src = fetchurl {
+    url = "mirror://gnu/autoconf/autoconf-${version}.tar.gz";
+    sha256 = "07krzl4czczdsgzrrw9fiqx35xcf32naf751khg821g5pqv12qgh";
+  };
+
+  nativeBuildInputs = [ m4 perl ];
+  strictDeps = true;
+
+  doCheck = true;
+
+  # Don't fixup "#! /bin/sh" in Autoconf, otherwise it will use the
+  # "fixed" path in generated files!
+  dontPatchShebangs = true;
+
+  postInstall = ''ln -s autoconf "$out"/bin/autoconf-2.13'';
+
+  meta = {
+    homepage = "https://www.gnu.org/software/autoconf/";
+    description = "Part of the GNU Build System";
+    branch = "2.13";
+
+    longDescription = ''
+      GNU Autoconf is an extensible package of M4 macros that produce
+      shell scripts to automatically configure software source code
+      packages.  These scripts can adapt the packages to many kinds of
+      UNIX-like systems without manual user intervention.  Autoconf
+      creates a configuration script for a package from a template
+      file that lists the operating system features that the package
+      can use, in the form of M4 macro calls.
+    '';
+
+    license = lib.licenses.gpl2Plus;
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/autoconf/2.64.nix b/nixpkgs/pkgs/development/tools/misc/autoconf/2.64.nix
new file mode 100644
index 000000000000..daf026dc3a5b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/autoconf/2.64.nix
@@ -0,0 +1,54 @@
+{ lib, stdenv, fetchurl, m4, perl }:
+
+stdenv.mkDerivation rec {
+  pname = "autoconf";
+  version = "2.64";
+
+  src = fetchurl {
+    url = "mirror://gnu/autoconf/autoconf-${version}.tar.xz";
+    sha256 = "0j3jdjpf5ly39dlp0bg70h72nzqr059k0x8iqxvaxf106chpgn9j";
+  };
+
+  strictDeps = true;
+  nativeBuildInputs = [ m4 perl ];
+  buildInputs = [ m4 ];
+
+  # Work around a known issue in Cygwin.  See
+  # http://thread.gmane.org/gmane.comp.sysutils.autoconf.bugs/6822 for
+  # details.
+  # There are many test failures on `i386-pc-solaris2.11'.
+  #doCheck = ((!stdenv.isCygwin) && (!stdenv.isSunOS));
+  doCheck = false;
+
+  # Don't fixup "#! /bin/sh" in Autoconf, otherwise it will use the
+  # "fixed" path in generated files!
+  dontPatchShebangs = true;
+
+  enableParallelBuilding = true;
+
+  # Make the Autotest test suite run in parallel.
+  preCheck = ''
+    export TESTSUITEFLAGS="-j$NIX_BUILD_CORES"
+  '';
+
+  doInstallCheck = false; # fails
+
+  meta = {
+    homepage = "https://www.gnu.org/software/autoconf/";
+    description = "Part of the GNU Build System";
+
+    longDescription = ''
+      GNU Autoconf is an extensible package of M4 macros that produce
+      shell scripts to automatically configure software source code
+      packages.  These scripts can adapt the packages to many kinds of
+      UNIX-like systems without manual user intervention.  Autoconf
+      creates a configuration script for a package from a template
+      file that lists the operating system features that the package
+      can use, in the form of M4 macro calls.
+    '';
+
+    license = lib.licenses.gpl2Plus;
+
+    platforms = lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/autoconf/2.69.nix b/nixpkgs/pkgs/development/tools/misc/autoconf/2.69.nix
new file mode 100644
index 000000000000..870b0ae1d34a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/autoconf/2.69.nix
@@ -0,0 +1,53 @@
+{ lib, stdenv, fetchurl, m4, perl }:
+
+stdenv.mkDerivation rec {
+  pname = "autoconf";
+  version = "2.69";
+
+  src = fetchurl {
+    url = "mirror://gnu/autoconf/autoconf-${version}.tar.xz";
+    sha256 = "113nlmidxy9kjr45kg9x3ngar4951mvag1js2a3j8nxcz34wxsv4";
+  };
+
+  nativeBuildInputs = [ m4 perl ];
+  buildInputs = [ m4 ];
+
+  # Work around a known issue in Cygwin.  See
+  # http://thread.gmane.org/gmane.comp.sysutils.autoconf.bugs/6822 for
+  # details.
+  # There are many test failures on `i386-pc-solaris2.11'.
+  #doCheck = ((!stdenv.isCygwin) && (!stdenv.isSunOS));
+  doCheck = false;
+
+  # Don't fixup "#! /bin/sh" in Autoconf, otherwise it will use the
+  # "fixed" path in generated files!
+  dontPatchShebangs = true;
+
+  enableParallelBuilding = true;
+
+  # Make the Autotest test suite run in parallel.
+  preCheck = ''
+    export TESTSUITEFLAGS="-j$NIX_BUILD_CORES"
+  '';
+
+  doInstallCheck = false; # fails
+
+  meta = {
+    homepage = "https://www.gnu.org/software/autoconf/";
+    description = "Part of the GNU Build System";
+
+    longDescription = ''
+      GNU Autoconf is an extensible package of M4 macros that produce
+      shell scripts to automatically configure software source code
+      packages.  These scripts can adapt the packages to many kinds of
+      UNIX-like systems without manual user intervention.  Autoconf
+      creates a configuration script for a package from a template
+      file that lists the operating system features that the package
+      can use, in the form of M4 macro calls.
+    '';
+
+    license = lib.licenses.gpl2Plus;
+
+    platforms = lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/autoconf/2.71-fix-race.patch b/nixpkgs/pkgs/development/tools/misc/autoconf/2.71-fix-race.patch
new file mode 100644
index 000000000000..e3b28554352b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/autoconf/2.71-fix-race.patch
@@ -0,0 +1,36 @@
+https://savannah.gnu.org/support/index.php?110521
+https://git.savannah.gnu.org/cgit/autoconf.git/patch/?id=3a9802d60156809c139e9b4620bf04917e143ee2
+--- a/lib/Autom4te/FileUtils.pm
++++ b/lib/Autom4te/FileUtils.pm
+@@ -34,12 +34,12 @@ This perl module provides various general purpose file handling functions.
+ 
+ =cut
+ 
+-use 5.006;
++use 5.008;
+ use strict;
+ use warnings FATAL => 'all';
+ 
+ use Exporter;
+-use File::stat;
++use Time::HiRes qw(stat);
+ use IO::File;
+ 
+ use Autom4te::Channels;
+@@ -115,10 +115,11 @@ sub mtime ($)
+   return 0
+     if $file eq '-' || ! -f $file;
+ 
+-  my $stat = stat ($file)
++  my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
++    $atime,$mtime,$ctime,$blksize,$blocks) = stat ($file)
+     or fatal "cannot stat $file: $!";
+ 
+-  return $stat->mtime;
++  return $mtime;
+ }
+ 
+ 
+-- 
+cgit v1.2.1
+
diff --git a/nixpkgs/pkgs/development/tools/misc/autoconf/2.71.nix b/nixpkgs/pkgs/development/tools/misc/autoconf/2.71.nix
new file mode 100644
index 000000000000..1fcb819bd4b7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/autoconf/2.71.nix
@@ -0,0 +1,69 @@
+{ lib, stdenv, fetchurl, m4, perl, texinfo }:
+
+# Note: this package is used for bootstrapping fetchurl, and thus
+# cannot use fetchpatch! All mutable patches (generated by GitHub or
+# cgit) that are needed here should be included directly in Nixpkgs as
+# files.
+
+stdenv.mkDerivation rec {
+  pname = "autoconf";
+  version = "2.71";
+  outputs = [ "out" "doc" ];
+
+  src = fetchurl {
+    url = "mirror://gnu/autoconf/autoconf-${version}.tar.xz";
+    sha256 = "197sl23irn6s9pd54rxj5vcp5y8dv65jb9yfqgr2g56cxg7q6k7i";
+  };
+  patches = [
+    # fix stale autom4te cache race condition:
+    #  https://savannah.gnu.org/support/index.php?110521
+    ./2.71-fix-race.patch
+  ];
+
+  strictDeps = true;
+  nativeBuildInputs = [ m4 perl texinfo ];
+  buildInputs = [ m4 ];
+  postBuild = "
+    make html
+  ";
+
+  postInstall = "
+    make install-html
+  ";
+
+  # Work around a known issue in Cygwin.  See
+  # http://thread.gmane.org/gmane.comp.sysutils.autoconf.bugs/6822 for
+  # details.
+  # There are many test failures on `i386-pc-solaris2.11'.
+  doCheck = ((!stdenv.isCygwin) && (!stdenv.isSunOS));
+
+  # Don't fixup "#! /bin/sh" in Autoconf, otherwise it will use the
+  # "fixed" path in generated files!
+  dontPatchShebangs = true;
+
+  enableParallelBuilding = true;
+
+  # Make the Autotest test suite run in parallel.
+  preCheck =''
+    export TESTSUITEFLAGS="-j$NIX_BUILD_CORES"
+  '';
+
+  meta = {
+    homepage = "https://www.gnu.org/software/autoconf/";
+    description = "Part of the GNU Build System";
+
+    longDescription = ''
+      GNU Autoconf is an extensible package of M4 macros that produce
+      shell scripts to automatically configure software source code
+      packages.  These scripts can adapt the packages to many kinds of
+      UNIX-like systems without manual user intervention.  Autoconf
+      creates a configuration script for a package from a template
+      file that lists the operating system features that the package
+      can use, in the form of M4 macro calls.
+    '';
+
+    license = lib.licenses.gpl3Plus;
+
+    platforms = lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/autoconf/default.nix b/nixpkgs/pkgs/development/tools/misc/autoconf/default.nix
new file mode 100644
index 000000000000..8039e36a4f20
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/autoconf/default.nix
@@ -0,0 +1,64 @@
+{ lib, stdenv, fetchurl, m4, perl, texinfo }:
+
+# Note: this package is used for bootstrapping fetchurl, and thus
+# cannot use fetchpatch! All mutable patches (generated by GitHub or
+# cgit) that are needed here should be included directly in Nixpkgs as
+# files.
+
+stdenv.mkDerivation rec {
+  pname = "autoconf";
+  version = "2.72";
+  outputs = [ "out" "doc" ];
+
+  src = fetchurl {
+    url = "mirror://gnu/autoconf/autoconf-${version}.tar.xz";
+    hash = "sha256-uohcExlXjWyU1G6bDc60AUyq/iSQ5Deg28o/JwoiP1o=";
+  };
+
+  strictDeps = true;
+  nativeBuildInputs = [ m4 perl texinfo ];
+  buildInputs = [ m4 ];
+  postBuild = "
+    make html
+  ";
+
+  postInstall = "
+    make install-html
+  ";
+
+  # Work around a known issue in Cygwin.  See
+  # http://thread.gmane.org/gmane.comp.sysutils.autoconf.bugs/6822 for
+  # details.
+  # There are many test failures on `i386-pc-solaris2.11'.
+  doCheck = ((!stdenv.isCygwin) && (!stdenv.isSunOS));
+
+  # Don't fixup "#! /bin/sh" in Autoconf, otherwise it will use the
+  # "fixed" path in generated files!
+  dontPatchShebangs = true;
+
+  enableParallelBuilding = true;
+
+  # Make the Autotest test suite run in parallel.
+  preCheck =''
+    export TESTSUITEFLAGS="-j$NIX_BUILD_CORES"
+  '';
+
+  meta = {
+    homepage = "https://www.gnu.org/software/autoconf/";
+    description = "Part of the GNU Build System";
+
+    longDescription = ''
+      GNU Autoconf is an extensible package of M4 macros that produce
+      shell scripts to automatically configure software source code
+      packages.  These scripts can adapt the packages to many kinds of
+      UNIX-like systems without manual user intervention.  Autoconf
+      creates a configuration script for a package from a template
+      file that lists the operating system features that the package
+      can use, in the form of M4 macro calls.
+    '';
+
+    license = lib.licenses.gpl3Plus;
+
+    platforms = lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/autogen/default.nix b/nixpkgs/pkgs/development/tools/misc/autogen/default.nix
new file mode 100644
index 000000000000..a1e543f30fa0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/autogen/default.nix
@@ -0,0 +1,117 @@
+{ lib, stdenv, buildPackages, fetchurl, fetchpatch, autoreconfHook, which, pkg-config, perl, guile_2_2, libxml2 }:
+
+stdenv.mkDerivation rec {
+  pname = "autogen";
+  version = "5.18.16";
+
+  src = fetchurl {
+    url = "mirror://gnu/autogen/rel${version}/autogen-${version}.tar.xz";
+    sha256 = "16mlbdys8q4ckxlvxyhwkdnh1ay9f6g0cyp1kylkpalgnik398gq";
+  };
+
+  patches = let
+    dp = { ver ? "1%255.18.16-5", name, sha256 }: fetchurl {
+      url = "https://salsa.debian.org/debian/autogen/-/raw/debian/${ver}"
+          + "/debian/patches/${name}?inline=false";
+      inherit name sha256;
+    };
+  in [
+    (dp {
+      name = "20_no_Werror.diff";
+      sha256 = "08z4s2ifiqyaacjpd9pzr59w8m4j3548kkaq1bwvp2gjn29m680x";
+    })
+    (dp {
+      name = "30_ag_macros.m4_syntax_error.diff";
+      sha256 = "1z8vmbwbkz3505wd33i2xx91mlf8rwsa7klndq37nw821skxwyh3";
+    })
+    (dp {
+      name = "31_allow_overriding_AGexe_for_crossbuild.diff";
+      sha256 = "0h9wkc9bqb509knh8mymi43hg6n6sxg2lixvjlchcx7z0j7p8xkf";
+    })
+    (dp {
+      name = "40_suse_01-autogen-catch-race-error.patch";
+      sha256 = "1cfkym2zds1f85md1m74snxzqmzlj7wd5jivgmyl342856848xav";
+    })
+    (dp {
+      name = "40_suse_03-gcc9-fix-wrestrict.patch";
+      sha256 = "1ifdwi6gf96jc78jw7q4bfi5fgdldlf2nl55y20h6xb78kv0pznd";
+    })
+    (dp {
+      name = "40_suse_05-sprintf-overflow.patch";
+      sha256 = "136m62k68w1h5k7iapynvbyipidw35js6pq21lsc6rpxvgp0n469";
+    })
+    (dp {
+      name = "40_suse_06-autogen-avoid-GCC-code-analysis-bug.patch";
+      sha256 = "1d65zygzw2rpa00s0jy2y1bg29vkbhnjwlb5pv22rfv87zbk6z9q";
+    })
+    # Next upstream release will contain guile-3 support. We apply non-invasive
+    # patch meanwhile.
+    (fetchpatch {
+      name = "guile-3.patch";
+      url = "https://gitweb.gentoo.org/repo/gentoo.git/plain/sys-devel/autogen/files/autogen-5.18.16-guile-3.patch?id=43bcc61c56a5a7de0eaf806efec7d8c0e4c01ae7";
+      sha256 = "18d7y1f6164dm1wlh7rzbacfygiwrmbc35a7qqsbdawpkhydm5lr";
+    })
+  ];
+
+  outputs = [ "bin" "dev" "lib" "out" "man" "info" ];
+
+  nativeBuildInputs = [
+    which pkg-config perl autoreconfHook/*patches applied*/
+  ] ++ lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
+    # autogen needs a build autogen when cross-compiling
+    buildPackages.buildPackages.autogen buildPackages.texinfo
+  ];
+  buildInputs = [
+    guile_2_2 libxml2
+  ];
+
+  preConfigure = ''
+    export MAN_PAGE_DATE=$(date '+%Y-%m-%d' -d "@$SOURCE_DATE_EPOCH")
+  '';
+
+  configureFlags = [
+    "--with-libxml2=${libxml2.dev}"
+    "--with-libxml2-cflags=-I${libxml2.dev}/include/libxml2"
+    # Make sure to use a static value for the timeout. If we do not set a value
+    # here autogen will select one based on the execution time of the configure
+    # phase which is not really reproducible.
+    #
+    # If you are curious about the number 78, it has been cargo-culted from
+    # Debian: https://salsa.debian.org/debian/autogen/-/blob/master/debian/rules#L21
+    "--enable-timeout=78"
+  ] ++ lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
+    # the configure check for regcomp wants to run a host program
+    "libopts_cv_with_libregex=yes"
+    #"MAKEINFO=${buildPackages.texinfo}/bin/makeinfo"
+  ]
+  # See: https://sourceforge.net/p/autogen/bugs/187/
+  ++ lib.optionals stdenv.isDarwin [ "ac_cv_func_utimensat=no" ];
+
+  #doCheck = true; # not reliable
+
+  postInstall = ''
+    mkdir -p $dev/bin
+    mv $bin/bin/autoopts-config $dev/bin
+
+    for f in $lib/lib/autogen/tpl-config.tlib $out/share/autogen/tpl-config.tlib; do
+      sed -e "s|$dev/include|/no-such-autogen-include-path|" -i $f
+      sed -e "s|$bin/bin|/no-such-autogen-bin-path|" -i $f
+      sed -e "s|$lib/lib|/no-such-autogen-lib-path|" -i $f
+    done
+
+  '' + lib.optionalString (!stdenv.hostPlatform.isDarwin) ''
+    # remove build directory (/build/**, or /tmp/nix-build-**) from RPATHs
+    for f in "$bin"/bin/*; do
+      local nrp="$(patchelf --print-rpath "$f" | sed -E 's@(:|^)'$NIX_BUILD_TOP'[^:]*:@\1@g')"
+      patchelf --set-rpath "$nrp" "$f"
+    done
+  '';
+
+  meta = with lib; {
+    description = "Automated text and program generation tool";
+    license = with licenses; [ gpl3Plus lgpl3Plus ];
+    homepage = "https://www.gnu.org/software/autogen/";
+    platforms = platforms.all;
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/automake/automake-1.11.x.nix b/nixpkgs/pkgs/development/tools/misc/automake/automake-1.11.x.nix
new file mode 100644
index 000000000000..161dca6f1805
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/automake/automake-1.11.x.nix
@@ -0,0 +1,49 @@
+{ lib, stdenv, fetchurl, perl, autoconf }:
+
+stdenv.mkDerivation rec {
+  pname = "automake";
+  version = "1.11.6";
+
+  # TODO: Remove the `aclocal' wrapper when $ACLOCAL_PATH support is
+  # available upstream; see
+  # <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=9026>.
+  builder = ./builder.sh;
+
+  setupHook = ./setup-hook.sh;
+
+  src = fetchurl {
+    url = "mirror://gnu/automake/automake-${version}.tar.xz";
+    sha256 = "1ffbc6cc41f0ea6c864fbe9485b981679dc5e350f6c4bc6c3512f5a4226936b5";
+  };
+
+  patches = [ ./fix-test-autoconf-2.69.patch ./fix-perl-5.26.patch ];
+
+  strictDeps = true;
+  nativeBuildInputs = [ perl autoconf ];
+  buildInputs = [ autoconf ];
+
+  doCheck = false; # takes _a lot_ of time, fails 11 of 782 tests
+
+  # Don't fixup "#! /bin/sh" in Libtool, otherwise it will use the
+  # "fixed" path in generated files!
+  dontPatchShebangs = true;
+
+  # Run the test suite in parallel.
+  enableParallelBuilding = true;
+
+  meta = {
+    branch = "1.11";
+    homepage = "https://www.gnu.org/software/automake/";
+    description = "GNU standard-compliant makefile generator";
+
+    longDescription = ''
+      GNU Automake is a tool for automatically generating
+      `Makefile.in' files compliant with the GNU Coding
+      Standards.  Automake requires the use of Autoconf.
+    '';
+
+    license = lib.licenses.gpl2Plus;
+
+    platforms = lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/automake/automake-1.15.x.nix b/nixpkgs/pkgs/development/tools/misc/automake/automake-1.15.x.nix
new file mode 100644
index 000000000000..f0df759ee2cf
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/automake/automake-1.15.x.nix
@@ -0,0 +1,43 @@
+{ lib, stdenv, fetchurl, perl, autoconf }:
+
+stdenv.mkDerivation rec {
+  pname = "automake";
+  version = "1.15.1";
+
+  src = fetchurl {
+    url = "mirror://gnu/automake/automake-${version}.tar.xz";
+    sha256 = "1bzd9g32dfm4rsbw93ld9x7b5nc1y6i4m6zp032qf1i28a8s6sxg";
+  };
+
+  nativeBuildInputs = [ autoconf perl ];
+  buildInputs = [ autoconf ];
+
+  setupHook = ./setup-hook.sh;
+
+  patches = [ ./help2man-SOURCE_DATE_EPOCH-support.patch ];
+
+  doCheck = false; # takes _a lot_ of time, fails 3 out of 2698 tests, all seem to be related to paths
+  doInstallCheck = false; # runs the same thing, fails the same tests
+
+  # The test suite can run in parallel.
+  enableParallelBuilding = true;
+
+  # Don't fixup "#! /bin/sh" in Libtool, otherwise it will use the
+  # "fixed" path in generated files!
+  dontPatchShebangs = true;
+
+  meta = {
+    branch = "1.15";
+    homepage = "https://www.gnu.org/software/automake/";
+    description = "GNU standard-compliant makefile generator";
+    license = lib.licenses.gpl2Plus;
+
+    longDescription = ''
+      GNU Automake is a tool for automatically generating
+      `Makefile.in' files compliant with the GNU Coding
+      Standards.  Automake requires the use of Autoconf.
+    '';
+
+    platforms = lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/automake/automake-1.16.x.nix b/nixpkgs/pkgs/development/tools/misc/automake/automake-1.16.x.nix
new file mode 100644
index 000000000000..0d9572c6f314
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/automake/automake-1.16.x.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchurl, perl, autoconf }:
+
+stdenv.mkDerivation rec {
+  pname = "automake";
+  version = "1.16.5";
+
+  src = fetchurl {
+    url = "mirror://gnu/automake/automake-${version}.tar.xz";
+    sha256 = "0sdl32qxdy7m06iggmkkvf7j520rmmgbsjzbm7fgnxwxdp6mh7gh";
+  };
+
+  strictDeps = true;
+  nativeBuildInputs = [ autoconf perl ];
+  buildInputs = [ autoconf ];
+
+  setupHook = ./setup-hook.sh;
+
+  doCheck = false; # takes _a lot_ of time, fails 3 out of 2698 tests, all seem to be related to paths
+  doInstallCheck = false; # runs the same thing, fails the same tests
+
+  # The test suite can run in parallel.
+  enableParallelBuilding = true;
+
+  # Don't fixup "#! /bin/sh" in Libtool, otherwise it will use the
+  # "fixed" path in generated files!
+  dontPatchShebangs = true;
+
+  meta = with lib; {
+    branch = "1.16";
+    homepage = "https://www.gnu.org/software/automake/";
+    description = "GNU standard-compliant makefile generator";
+    license = licenses.gpl2Plus;
+    longDescription = ''
+      GNU Automake is a tool for automatically generating
+      `Makefile.in' files compliant with the GNU Coding
+      Standards.  Automake requires the use of Autoconf.
+    '';
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/automake/builder.sh b/nixpkgs/pkgs/development/tools/misc/automake/builder.sh
new file mode 100644
index 000000000000..b08e7251e9e2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/automake/builder.sh
@@ -0,0 +1,48 @@
+if [ -e "$NIX_ATTRS_SH_FILE" ]; then . "$NIX_ATTRS_SH_FILE"; elif [ -f .attrs.sh ]; then . .attrs.sh; fi
+source $stdenv/setup
+
+# Wrap the given `aclocal' program, appending extra `-I' flags
+# corresponding to the directories listed in $ACLOCAL_PATH.  (Note
+# that `wrapProgram' can't be used for that purpose since it can only
+# prepend flags, not append them.)
+wrapAclocal() {
+    local program="$1"
+    local wrapped="$(dirname $program)/.$(basename $program)-wrapped"
+
+    mv "$program" "$wrapped"
+    cat > "$program"<<EOF
+#! $SHELL -e
+
+unset extraFlagsArray
+declare -a extraFlagsArray
+
+oldIFS=\$IFS
+IFS=:
+for dir in \$ACLOCAL_PATH; do
+    if test -n "\$dir" -a -d "\$dir"; then
+        extraFlagsArray=("\${extraFlagsArray[@]}" "-I" "\$dir")
+    fi
+done
+IFS=\$oldIFS
+
+exec "$wrapped" "\$@" "\${extraFlagsArray[@]}"
+EOF
+    chmod +x "$program"
+}
+
+postInstall() {
+    # Create a wrapper around `aclocal' that converts every element in
+    # `ACLOCAL_PATH' into a `-I dir' option.  This way `aclocal'
+    # becomes modular; M4 macros do not need to be stored in a single
+    # global directory, while callers of `aclocal' do not need to pass
+    # `-I' options explicitly.
+
+    for prog in $out/bin/aclocal*; do
+        wrapAclocal "$prog"
+    done
+
+    ln -s aclocal-1.11 $out/share/aclocal
+    ln -s automake-1.11 $out/share/automake
+}
+
+genericBuild
diff --git a/nixpkgs/pkgs/development/tools/misc/automake/fix-perl-5.26.patch b/nixpkgs/pkgs/development/tools/misc/automake/fix-perl-5.26.patch
new file mode 100644
index 000000000000..fb2d08de6d81
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/automake/fix-perl-5.26.patch
@@ -0,0 +1,10 @@
+--- automake-1.11.2/automake.in
++++ automake-1.11.2/automake.in
+@@ -4156,7 +4156,7 @@ sub substitute_ac_subst_variables_worker($)
+ sub substitute_ac_subst_variables ($)
+ {
+   my ($text) = @_;
+-  $text =~ s/\${([^ \t=:+{}]+)}/&substitute_ac_subst_variables_worker ($1)/ge;
++  $text =~ s/\$\{([^ \t=:+{}]+)}/&substitute_ac_subst_variables_worker ($1)/ge;
+   return $text;
+ }
diff --git a/nixpkgs/pkgs/development/tools/misc/automake/fix-test-autoconf-2.69.patch b/nixpkgs/pkgs/development/tools/misc/automake/fix-test-autoconf-2.69.patch
new file mode 100644
index 000000000000..2ffa91f24eda
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/automake/fix-test-autoconf-2.69.patch
@@ -0,0 +1,13 @@
+With Autoconf 2.69 (instead of 2.68), config.{guess,sub} are needed.
+
+--- automake-1.11.2/tests/compile_f90_c_cxx.test	2011-12-20 21:56:29.000000000 +0100
++++ automake-1.11.2/tests/compile_f90_c_cxx.test	2012-07-07 13:35:58.000000000 +0200
+@@ -41,7 +41,7 @@ END
+ : > baz.cc
+ 
+ $ACLOCAL
+-$AUTOMAKE
++$AUTOMAKE --add-missing
+ 
+ # Look for the macros at the beginning of rules.  Be careful, as there
+ # are literal tabs at the beginning of the search strings.
diff --git a/nixpkgs/pkgs/development/tools/misc/automake/help2man-SOURCE_DATE_EPOCH-support.patch b/nixpkgs/pkgs/development/tools/misc/automake/help2man-SOURCE_DATE_EPOCH-support.patch
new file mode 100644
index 000000000000..048f75e63343
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/automake/help2man-SOURCE_DATE_EPOCH-support.patch
@@ -0,0 +1,41 @@
+From 2e3357d7f0d63f1caeb40d9644c2436a5cd0da5f Mon Sep 17 00:00:00 2001
+From: David Terry <me@xwvvvvwx.com>
+Date: Fri, 18 Oct 2019 10:23:11 +0200
+Subject: [PATCH] help2man: add support for SOURCE_DATE_EPOCH
+
+---
+ doc/help2man | 14 +++++++++++++-
+ 1 file changed, 13 insertions(+), 1 deletion(-)
+
+diff --git a/doc/help2man b/doc/help2man
+index af4306f..4a64167 100755
+--- a/doc/help2man
++++ b/doc/help2man
+@@ -213,11 +213,23 @@ sub get_option_value;
+ my $help_text   = get_option_value $ARGV[0], $help_option;
+ $version_text ||= get_option_value $ARGV[0], $version_option;
+ 
++# By default the generated manual pages will include the current date.  This may
++# however be overriden by setting the environment variable $SOURCE_DATE_EPOCH
++# to an integer value of the seconds since the UNIX epoch.  This is primarily
++# intended to support reproducible builds (wiki.debian.org/ReproducibleBuilds)
++# and will additionally ensure that the output date string is UTC.
++my $epoch_secs = time;
++if (exists $ENV{SOURCE_DATE_EPOCH} and $ENV{SOURCE_DATE_EPOCH} =~ /^(\d+)$/)
++{
++    $epoch_secs = $1;
++    $ENV{TZ} = 'UTC';
++}
++
+ # Translators: the following message is a strftime(3) format string, which in
+ # the English version expands to the month as a word and the full year.  It
+ # is used on the footer of the generated manual pages.  If in doubt, you may
+ # just use %x as the value (which should be the full locale-specific date).
+-my $date = enc strftime _("%B %Y"), localtime;
++my $date = enc strftime _("%B %Y"), localtime $epoch_secs;
+ (my $program = $ARGV[0]) =~ s!.*/!!;
+ my $package = $program;
+ my $version;
+-- 
+2.23.0
+
diff --git a/nixpkgs/pkgs/development/tools/misc/automake/setup-hook.sh b/nixpkgs/pkgs/development/tools/misc/automake/setup-hook.sh
new file mode 100644
index 000000000000..292632b7cbce
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/automake/setup-hook.sh
@@ -0,0 +1,5 @@
+addAclocals () {
+    addToSearchPathWithCustomDelimiter : ACLOCAL_PATH $1/share/aclocal
+}
+
+addEnvHooks "$hostOffset" addAclocals
diff --git a/nixpkgs/pkgs/development/tools/misc/automaticcomponenttoolkit/default.nix b/nixpkgs/pkgs/development/tools/misc/automaticcomponenttoolkit/default.nix
new file mode 100644
index 000000000000..cf84a98467d6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/automaticcomponenttoolkit/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, lib, fetchFromGitHub, go }:
+
+stdenv.mkDerivation rec {
+  pname = "AutomaticComponentToolkit";
+  version = "1.6.0";
+
+  src = fetchFromGitHub {
+    owner = "Autodesk";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1r0sbw82cf9dbcj3vgnbd4sc1lklzvijic2z5wgkvs21azcm0yzh";
+  };
+
+  nativeBuildInputs = [ go ];
+
+  buildPhase = ''
+    cd Source
+    export HOME=/tmp
+    go build -o act *.go
+  '';
+
+  installPhase = ''
+    install -Dm0755 act $out/bin/act
+  '';
+
+  meta = with lib; {
+    description = "Toolkit to automatically generate software components: abstract API, implementation stubs and language bindings";
+    homepage = "https://github.com/Autodesk/AutomaticComponentToolkit";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ gebner ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/aviator/bump-golang-x-sys.patch b/nixpkgs/pkgs/development/tools/misc/aviator/bump-golang-x-sys.patch
new file mode 100644
index 000000000000..cb9b076d3eaf
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/aviator/bump-golang-x-sys.patch
@@ -0,0 +1,24 @@
+diff --git a/go.mod b/go.mod
+index 9bc55db..4bddb07 100644
+--- a/go.mod
++++ b/go.mod
+@@ -19,5 +19,6 @@ require (
+ 	github.com/smallfish/simpleyaml v0.0.0-20170527020626-116d8e577389 // indirect
+ 	github.com/starkandwayne/goutils v0.0.0-20190115202530-896b8a6904be
+ 	github.com/urfave/cli v1.19.1
++	golang.org/x/sys v0.0.0-20220731174439-a90be440212d // indirect
+ 	gopkg.in/yaml.v2 v2.3.0
+ )
+diff --git a/go.sum b/go.sum
+index 7641199..d983a95 100644
+--- a/go.sum
++++ b/go.sum
+@@ -138,6 +138,8 @@ golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7w
+ golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+ golang.org/x/sys v0.0.0-20200523222454-059865788121 h1:rITEj+UZHYC927n8GT97eC3zrpzXdb/voyeOuVKS46o=
+ golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
++golang.org/x/sys v0.0.0-20220731174439-a90be440212d h1:Sv5ogFZatcgIMMtBSTTAgMYsicp25MXBubjXNDKwm80=
++golang.org/x/sys v0.0.0-20220731174439-a90be440212d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+ golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
+ golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+ golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
diff --git a/nixpkgs/pkgs/development/tools/misc/aviator/default.nix b/nixpkgs/pkgs/development/tools/misc/aviator/default.nix
new file mode 100644
index 000000000000..fe7e1bc9cf81
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/aviator/default.nix
@@ -0,0 +1,27 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "aviator";
+  version = "1.8.1";
+
+  src = fetchFromGitHub {
+    owner = "herrjulz";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-Oa4z8n+q7LKWMnwk+xj9UunzOa3ChaPBCTo828yYJGQ=";
+  };
+
+  patches = [
+    ./bump-golang-x-sys.patch
+  ];
+
+  deleteVendor = true;
+  vendorHash = "sha256-AJyxCE4DdAXRS+2sY4Zzu8NTEFKJoV1bopfOqOFKZfI=";
+
+  meta = with lib; {
+    description = "Merge YAML/JSON files in a in a convenient fashion";
+    homepage = "https://github.com/herrjulz/aviator";
+    license = licenses.mit;
+    maintainers = with maintainers; [ risson ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/awf/default.nix b/nixpkgs/pkgs/development/tools/misc/awf/default.nix
new file mode 100644
index 000000000000..b73f1dc04502
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/awf/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, gtk2, gtk3, pkg-config
+, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+  pname = "awf";
+  version = "1.4.0";
+
+  src = fetchFromGitHub {
+    owner = "valr";
+    repo = "awf";
+    rev = "v${version}";
+    sha256 = "0jl2kxwpvf2n8974zzyp69mqhsbjnjcqm39y0jvijvjb1iy8iman";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config wrapGAppsHook ];
+
+  buildInputs = [ gtk2 gtk3 ];
+
+  autoreconfPhase = ''
+    patchShebangs ./autogen.sh
+    ./autogen.sh
+  '';
+
+  meta = with lib; {
+    description = "A Widget Factory";
+    longDescription = ''
+      A widget factory is a theme preview application for gtk2 and
+      gtk3. It displays the various widget types provided by gtk2/gtk3
+      in a single window allowing to see the visual effect of the
+      applied theme.
+    '';
+    homepage = "https://github.com/valr/awf";
+    license = licenses.gpl3;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ michalrus ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/babeltrace/default.nix b/nixpkgs/pkgs/development/tools/misc/babeltrace/default.nix
new file mode 100644
index 000000000000..014d926eea3d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/babeltrace/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchurl, autoreconfHook, pkg-config, glib, libuuid, popt, elfutils }:
+
+stdenv.mkDerivation rec {
+  pname = "babeltrace";
+  version = "1.5.8";
+
+  src = fetchurl {
+    url = "https://www.efficios.com/files/babeltrace/${pname}-${version}.tar.bz2";
+    sha256 = "1hkg3phnamxfrhwzmiiirbhdgckzfkqwhajl0lmr1wfps7j47wcz";
+  };
+
+  # The pre-generated ./configure script uses an old autoconf version which
+  # breaks cross-compilation (replaces references to malloc with rpl_malloc).
+  # Re-generate with nixpkgs's autoconf. This requires glib to be present in
+  # nativeBuildInputs for its m4 macros to be present.
+  nativeBuildInputs = [ autoreconfHook glib pkg-config ];
+  buildInputs = [ glib libuuid popt elfutils ];
+
+  # --enable-debug-info (default) requires the configure script to run host
+  # executables to determine the elfutils library version, which cannot be done
+  # while cross compiling.
+  configureFlags = lib.optional (stdenv.hostPlatform != stdenv.buildPlatform) "--disable-debug-info";
+
+  meta = with lib; {
+    description = "Command-line tool and library to read and convert LTTng tracefiles";
+    homepage = "https://www.efficios.com/babeltrace";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.bjornfor ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/bashdb/default.nix b/nixpkgs/pkgs/development/tools/misc/bashdb/default.nix
new file mode 100644
index 000000000000..2babde7afa6b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/bashdb/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, stdenv
+, fetchurl
+, fetchpatch
+, makeWrapper
+, python3Packages
+}:
+
+stdenv.mkDerivation rec {
+  pname = "bashdb";
+  version = "5.0-1.1.2";
+
+  src = fetchurl {
+    url =  "mirror://sourceforge/bashdb/${pname}-${version}.tar.bz2";
+    sha256 = "sha256-MBdtKtKMWwCy4tIcXqGu+PuvQKj52fcjxnxgUx87czA=";
+  };
+
+  patches = [
+    # Enable building with bash 5.1/5.2
+    # Remove with any upstream 5.1-x.y.z release
+    (fetchpatch {
+      url = "https://raw.githubusercontent.com/freebsd/freebsd-ports/569fbb806d9ee813afa8b27d2098a44f93433922/devel/bashdb/files/patch-configure";
+      sha256 = "19zfzcnxavndyn6kfxp775kjcd0gigsm4y3bnh6fz5ilhnnbbbgr";
+    })
+  ];
+  patchFlags = [ "-p0" ];
+
+  nativeBuildInputs = [
+    makeWrapper
+  ];
+
+  postInstall = ''
+    wrapProgram $out/bin/bashdb --prefix PYTHONPATH ":" "$(toPythonPath ${python3Packages.pygments})"
+  '';
+
+  meta = {
+    description = "Bash script debugger";
+    homepage = "https://bashdb.sourceforge.net/";
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/binutils/0001-Revert-libtool.m4-fix-nm-BSD-flag-detection.patch b/nixpkgs/pkgs/development/tools/misc/binutils/0001-Revert-libtool.m4-fix-nm-BSD-flag-detection.patch
new file mode 100644
index 000000000000..f9c6e88d97b4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/binutils/0001-Revert-libtool.m4-fix-nm-BSD-flag-detection.patch
@@ -0,0 +1,137 @@
+From beca4a2c25ee86e4020f8b8bddc4d8e0ed3430b3 Mon Sep 17 00:00:00 2001
+From: Andrew Childs <andrew.childs@bibo.com.ph>
+Date: Tue, 22 Feb 2022 11:28:04 +0900
+Subject: [PATCH] Revert "libtool.m4: fix nm BSD flag detection"
+
+This reverts commit bef9ef8ca0f941d743c77cc55b5fe7985990b2a7.
+---
+ ChangeLog  |  9 ------
+ libtool.m4 | 88 ++++++++++++++++++++++++++----------------------------
+ 2 files changed, 43 insertions(+), 54 deletions(-)
+
+diff --git a/ChangeLog b/ChangeLog
+index 18e8b6835da..c12f07403c3 100644
+--- a/ChangeLog
++++ b/ChangeLog
+@@ -375,15 +375,6 @@
+ 
+ 	* src-release.sh (GDB_SUPPPORT_DIRS): Add libbacktrace.
+ 
+-2021-09-27  Nick Alcock  <nick.alcock@oracle.com>
+-
+-	PR libctf/27967
+-	* libtool.m4 (LT_PATH_NM): Try BSDization flags with a user-provided
+-	NM, if there is one.  Run nm on itself, not on /dev/null, to avoid
+-	errors from nms that refuse to work on non-regular files.  Remove
+-	other workarounds for this problem.  Strip out blank lines from the
+-	nm output.
+-
+ 2021-09-27  Nick Alcock  <nick.alcock@oracle.com>
+ 
+ 	PR libctf/27967
+diff --git a/libtool.m4 b/libtool.m4
+index a216bb14e99..7a711249304 100644
+--- a/libtool.m4
++++ b/libtool.m4
+@@ -3200,55 +3200,53 @@ _LT_DECL([], [file_magic_cmd], [1],
+ 
+ # LT_PATH_NM
+ # ----------
+-# find the pathname to a BSD- or MS-compatible name lister, and any flags
+-# needed to make it compatible
++# find the pathname to a BSD- or MS-compatible name lister
+ AC_DEFUN([LT_PATH_NM],
+ [AC_REQUIRE([AC_PROG_CC])dnl
+ AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM,
+ [if test -n "$NM"; then
+-   # Let the user override the nm to test.
+-   lt_nm_to_check="$NM"
+- else
+-   lt_nm_to_check="${ac_tool_prefix}nm"
+-   if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+-     lt_nm_to_check="$lt_nm_to_check nm"
+-   fi
+- fi
+- for lt_tmp_nm in $lt_nm_to_check; do
+-   lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+-   for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+-     IFS="$lt_save_ifs"
+-     test -z "$ac_dir" && ac_dir=.
+-     case "$lt_tmp_nm" in
+-     */*|*\\*) tmp_nm="$lt_tmp_nm";;
+-     *) tmp_nm="$ac_dir/$lt_tmp_nm";;
+-     esac
+-     if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+-       # Check to see if the nm accepts a BSD-compat flag.
+-       # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+-       #   nm: unknown option "B" ignored
+-       case `"$tmp_nm" -B "$tmp_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
+-       *$tmp_nm*) lt_cv_path_NM="$tmp_nm -B"
+-	 break
+-	 ;;
+-       *)
+-	 case `"$tmp_nm" -p "$tmp_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
+-	 *$tmp_nm*)
+-	   lt_cv_path_NM="$tmp_nm -p"
+-	   break
+-	   ;;
+-	 *)
+-	   lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+-	   continue # so that we can try to find one that supports BSD flags
+-	   ;;
+-	 esac
+-	 ;;
+-       esac
+-     fi
+-   done
+-   IFS="$lt_save_ifs"
+- done
+- : ${lt_cv_path_NM=no}])
++  # Let the user override the test.
++  lt_cv_path_NM="$NM"
++else
++  lt_nm_to_check="${ac_tool_prefix}nm"
++  if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
++    lt_nm_to_check="$lt_nm_to_check nm"
++  fi
++  for lt_tmp_nm in $lt_nm_to_check; do
++    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
++    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
++      IFS="$lt_save_ifs"
++      test -z "$ac_dir" && ac_dir=.
++      tmp_nm="$ac_dir/$lt_tmp_nm"
++      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
++	# Check to see if the nm accepts a BSD-compat flag.
++	# Adding the `sed 1q' prevents false positives on HP-UX, which says:
++	#   nm: unknown option "B" ignored
++	# Tru64's nm complains that /dev/null is an invalid object file
++	case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
++	*/dev/null* | *'Invalid file or object type'*)
++	  lt_cv_path_NM="$tmp_nm -B"
++	  break
++	  ;;
++	*)
++	  case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
++	  */dev/null*)
++	    lt_cv_path_NM="$tmp_nm -p"
++	    break
++	    ;;
++	  *)
++	    lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
++	    continue # so that we can try to find one that supports BSD flags
++	    ;;
++	  esac
++	  ;;
++	esac
++      fi
++    done
++    IFS="$lt_save_ifs"
++  done
++  : ${lt_cv_path_NM=no}
++fi])
+ if test "$lt_cv_path_NM" != "no"; then
+   NM="$lt_cv_path_NM"
+ else
+-- 
+2.34.1
+
diff --git a/nixpkgs/pkgs/development/tools/misc/binutils/0001-Revert-libtool.m4-fix-the-NM-nm-over-here-B-option-w.patch b/nixpkgs/pkgs/development/tools/misc/binutils/0001-Revert-libtool.m4-fix-the-NM-nm-over-here-B-option-w.patch
new file mode 100644
index 000000000000..b5083d81d71c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/binutils/0001-Revert-libtool.m4-fix-the-NM-nm-over-here-B-option-w.patch
@@ -0,0 +1,42 @@
+This reverts upstream commit caf606c90d55305967b9253447dda93d2f1835ab
+until https://sourceware.org/PR29547 is fixed.
+
+--- a/libtool.m4
++++ b/libtool.m4
+@@ -3214,31 +3214,25 @@ AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM,
+      lt_nm_to_check="$lt_nm_to_check nm"
+    fi
+  fi
+- for lt_tmp_nm in "$lt_nm_to_check"; do
++ for lt_tmp_nm in $lt_nm_to_check; do
+    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+      IFS="$lt_save_ifs"
+      test -z "$ac_dir" && ac_dir=.
+-     # Strip out any user-provided options from the nm to test twice,
+-     # the first time to test to see if nm (rather than its options) has
+-     # an explicit path, the second time to yield a file which can be
+-     # nm'ed itself.
+-     tmp_nm_path="`$ECHO "$lt_tmp_nm" | sed 's, -.*$,,'`"
+-     case "$tmp_nm_path" in
++     case "$lt_tmp_nm" in
+      */*|*\\*) tmp_nm="$lt_tmp_nm";;
+      *) tmp_nm="$ac_dir/$lt_tmp_nm";;
+      esac
+-     tmp_nm_to_nm="`$ECHO "$tmp_nm" | sed 's, -.*$,,'`"
+-     if test -f "$tmp_nm_to_nm" || test -f "$tmp_nm_to_nm$ac_exeext" ; then
++     if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+        # Check to see if the nm accepts a BSD-compat flag.
+        # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+        #   nm: unknown option "B" ignored
+-       case `"$tmp_nm" -B "$tmp_nm_to_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
++       case `"$tmp_nm" -B "$tmp_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
+        *$tmp_nm*) lt_cv_path_NM="$tmp_nm -B"
+ 	 break
+ 	 ;;
+        *)
+-	 case `"$tmp_nm" -p "$tmp_nm_to_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
++	 case `"$tmp_nm" -p "$tmp_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
+ 	 *$tmp_nm*)
+ 	   lt_cv_path_NM="$tmp_nm -p"
+ 	   break
diff --git a/nixpkgs/pkgs/development/tools/misc/binutils/0001-libtool.m4-update-macos-version-detection-block.patch b/nixpkgs/pkgs/development/tools/misc/binutils/0001-libtool.m4-update-macos-version-detection-block.patch
new file mode 100644
index 000000000000..e601be3a3308
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/binutils/0001-libtool.m4-update-macos-version-detection-block.patch
@@ -0,0 +1,47 @@
+From 33a8dc728eb5da3e1d3439c96810d1f6b2660b89 Mon Sep 17 00:00:00 2001
+From: Andrew Childs <andrew.childs@bibo.com.ph>
+Date: Tue, 22 Feb 2022 12:24:46 +0900
+Subject: [PATCH] libtool.m4: update macos version detection block
+
+Includes upstream change
+9e8c882517082fe5755f2524d23efb02f1522490
+---
+ libtool.m4 | 21 ++++++++-------------
+ 1 file changed, 8 insertions(+), 13 deletions(-)
+
+diff --git a/libtool.m4 b/libtool.m4
+index 7a711249304..f452efb4300 100644
+--- a/libtool.m4
++++ b/libtool.m4
+@@ -996,20 +996,15 @@ _LT_EOF
+     ])
+     case $host_os in
+     rhapsody* | darwin1.[[012]])
+-      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
++      _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;;
+     darwin1.*)
+-      _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+-    darwin*) # darwin 5.x on
+-      # if running on 10.5 or later, the deployment target defaults
+-      # to the OS version, if on x86, and 10.4, the deployment
+-      # target defaults to 10.4. Don't you love it?
+-      case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
+-	10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)
+-	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+-	10.[[012]][[,.]]*)
+-	  _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+-	10.*)
+-	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
++      _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
++    darwin*)
++      case $MACOSX_DEPLOYMENT_TARGET,$host in
++        10.[[012]],*|,*powerpc*-darwin[[5-8]]*)
++          _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
++        *)
++          _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
+       esac
+     ;;
+   esac
+-- 
+2.34.1
+
diff --git a/nixpkgs/pkgs/development/tools/misc/binutils/2.38/0001-Revert-libtool.m4-fix-nm-BSD-flag-detection.patch b/nixpkgs/pkgs/development/tools/misc/binutils/2.38/0001-Revert-libtool.m4-fix-nm-BSD-flag-detection.patch
new file mode 100644
index 000000000000..f9c6e88d97b4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/binutils/2.38/0001-Revert-libtool.m4-fix-nm-BSD-flag-detection.patch
@@ -0,0 +1,137 @@
+From beca4a2c25ee86e4020f8b8bddc4d8e0ed3430b3 Mon Sep 17 00:00:00 2001
+From: Andrew Childs <andrew.childs@bibo.com.ph>
+Date: Tue, 22 Feb 2022 11:28:04 +0900
+Subject: [PATCH] Revert "libtool.m4: fix nm BSD flag detection"
+
+This reverts commit bef9ef8ca0f941d743c77cc55b5fe7985990b2a7.
+---
+ ChangeLog  |  9 ------
+ libtool.m4 | 88 ++++++++++++++++++++++++++----------------------------
+ 2 files changed, 43 insertions(+), 54 deletions(-)
+
+diff --git a/ChangeLog b/ChangeLog
+index 18e8b6835da..c12f07403c3 100644
+--- a/ChangeLog
++++ b/ChangeLog
+@@ -375,15 +375,6 @@
+ 
+ 	* src-release.sh (GDB_SUPPPORT_DIRS): Add libbacktrace.
+ 
+-2021-09-27  Nick Alcock  <nick.alcock@oracle.com>
+-
+-	PR libctf/27967
+-	* libtool.m4 (LT_PATH_NM): Try BSDization flags with a user-provided
+-	NM, if there is one.  Run nm on itself, not on /dev/null, to avoid
+-	errors from nms that refuse to work on non-regular files.  Remove
+-	other workarounds for this problem.  Strip out blank lines from the
+-	nm output.
+-
+ 2021-09-27  Nick Alcock  <nick.alcock@oracle.com>
+ 
+ 	PR libctf/27967
+diff --git a/libtool.m4 b/libtool.m4
+index a216bb14e99..7a711249304 100644
+--- a/libtool.m4
++++ b/libtool.m4
+@@ -3200,55 +3200,53 @@ _LT_DECL([], [file_magic_cmd], [1],
+ 
+ # LT_PATH_NM
+ # ----------
+-# find the pathname to a BSD- or MS-compatible name lister, and any flags
+-# needed to make it compatible
++# find the pathname to a BSD- or MS-compatible name lister
+ AC_DEFUN([LT_PATH_NM],
+ [AC_REQUIRE([AC_PROG_CC])dnl
+ AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM,
+ [if test -n "$NM"; then
+-   # Let the user override the nm to test.
+-   lt_nm_to_check="$NM"
+- else
+-   lt_nm_to_check="${ac_tool_prefix}nm"
+-   if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+-     lt_nm_to_check="$lt_nm_to_check nm"
+-   fi
+- fi
+- for lt_tmp_nm in $lt_nm_to_check; do
+-   lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+-   for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+-     IFS="$lt_save_ifs"
+-     test -z "$ac_dir" && ac_dir=.
+-     case "$lt_tmp_nm" in
+-     */*|*\\*) tmp_nm="$lt_tmp_nm";;
+-     *) tmp_nm="$ac_dir/$lt_tmp_nm";;
+-     esac
+-     if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+-       # Check to see if the nm accepts a BSD-compat flag.
+-       # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+-       #   nm: unknown option "B" ignored
+-       case `"$tmp_nm" -B "$tmp_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
+-       *$tmp_nm*) lt_cv_path_NM="$tmp_nm -B"
+-	 break
+-	 ;;
+-       *)
+-	 case `"$tmp_nm" -p "$tmp_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
+-	 *$tmp_nm*)
+-	   lt_cv_path_NM="$tmp_nm -p"
+-	   break
+-	   ;;
+-	 *)
+-	   lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+-	   continue # so that we can try to find one that supports BSD flags
+-	   ;;
+-	 esac
+-	 ;;
+-       esac
+-     fi
+-   done
+-   IFS="$lt_save_ifs"
+- done
+- : ${lt_cv_path_NM=no}])
++  # Let the user override the test.
++  lt_cv_path_NM="$NM"
++else
++  lt_nm_to_check="${ac_tool_prefix}nm"
++  if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
++    lt_nm_to_check="$lt_nm_to_check nm"
++  fi
++  for lt_tmp_nm in $lt_nm_to_check; do
++    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
++    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
++      IFS="$lt_save_ifs"
++      test -z "$ac_dir" && ac_dir=.
++      tmp_nm="$ac_dir/$lt_tmp_nm"
++      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
++	# Check to see if the nm accepts a BSD-compat flag.
++	# Adding the `sed 1q' prevents false positives on HP-UX, which says:
++	#   nm: unknown option "B" ignored
++	# Tru64's nm complains that /dev/null is an invalid object file
++	case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
++	*/dev/null* | *'Invalid file or object type'*)
++	  lt_cv_path_NM="$tmp_nm -B"
++	  break
++	  ;;
++	*)
++	  case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
++	  */dev/null*)
++	    lt_cv_path_NM="$tmp_nm -p"
++	    break
++	    ;;
++	  *)
++	    lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
++	    continue # so that we can try to find one that supports BSD flags
++	    ;;
++	  esac
++	  ;;
++	esac
++      fi
++    done
++    IFS="$lt_save_ifs"
++  done
++  : ${lt_cv_path_NM=no}
++fi])
+ if test "$lt_cv_path_NM" != "no"; then
+   NM="$lt_cv_path_NM"
+ else
+-- 
+2.34.1
+
diff --git a/nixpkgs/pkgs/development/tools/misc/binutils/2.38/0001-libtool.m4-update-macos-version-detection-block.patch b/nixpkgs/pkgs/development/tools/misc/binutils/2.38/0001-libtool.m4-update-macos-version-detection-block.patch
new file mode 100644
index 000000000000..e601be3a3308
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/binutils/2.38/0001-libtool.m4-update-macos-version-detection-block.patch
@@ -0,0 +1,47 @@
+From 33a8dc728eb5da3e1d3439c96810d1f6b2660b89 Mon Sep 17 00:00:00 2001
+From: Andrew Childs <andrew.childs@bibo.com.ph>
+Date: Tue, 22 Feb 2022 12:24:46 +0900
+Subject: [PATCH] libtool.m4: update macos version detection block
+
+Includes upstream change
+9e8c882517082fe5755f2524d23efb02f1522490
+---
+ libtool.m4 | 21 ++++++++-------------
+ 1 file changed, 8 insertions(+), 13 deletions(-)
+
+diff --git a/libtool.m4 b/libtool.m4
+index 7a711249304..f452efb4300 100644
+--- a/libtool.m4
++++ b/libtool.m4
+@@ -996,20 +996,15 @@ _LT_EOF
+     ])
+     case $host_os in
+     rhapsody* | darwin1.[[012]])
+-      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
++      _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;;
+     darwin1.*)
+-      _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+-    darwin*) # darwin 5.x on
+-      # if running on 10.5 or later, the deployment target defaults
+-      # to the OS version, if on x86, and 10.4, the deployment
+-      # target defaults to 10.4. Don't you love it?
+-      case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
+-	10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)
+-	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+-	10.[[012]][[,.]]*)
+-	  _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+-	10.*)
+-	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
++      _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
++    darwin*)
++      case $MACOSX_DEPLOYMENT_TARGET,$host in
++        10.[[012]],*|,*powerpc*-darwin[[5-8]]*)
++          _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
++        *)
++          _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
+       esac
+     ;;
+   esac
+-- 
+2.34.1
+
diff --git a/nixpkgs/pkgs/development/tools/misc/binutils/2.38/always-search-rpath.patch b/nixpkgs/pkgs/development/tools/misc/binutils/2.38/always-search-rpath.patch
new file mode 100644
index 000000000000..2e9956e6b6e4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/binutils/2.38/always-search-rpath.patch
@@ -0,0 +1,14 @@
+diff --git a/ld/genscripts.sh b/ld/genscripts.sh
+index b6940d376d..0feb1adfd0 100755
+--- a/ld/genscripts.sh
++++ b/ld/genscripts.sh
+@@ -125,6 +125,9 @@ if test "x$NATIVE" = "xyes" ; then
+   USE_LIBPATH=yes
+ fi
+ 
++# TODO: why is this needed?
++USE_LIBPATH=yes
++
+ # Set the library search path, for libraries named by -lfoo.
+ # If LIB_PATH is defined (e.g., by Makefile) and non-empty, it is used.
+ # Otherwise, the default is set here.
diff --git a/nixpkgs/pkgs/development/tools/misc/binutils/2.38/build-components-separately.patch b/nixpkgs/pkgs/development/tools/misc/binutils/2.38/build-components-separately.patch
new file mode 100644
index 000000000000..0b4162d84880
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/binutils/2.38/build-components-separately.patch
@@ -0,0 +1,155 @@
+diff --git a/bfd/configure.ac b/bfd/configure.ac
+index fec067b2135..377e1f5443f 100644
+--- a/bfd/configure.ac
++++ b/bfd/configure.ac
+@@ -292,30 +292,16 @@ AC_CACHE_CHECK(linker --as-needed support, bfd_cv_ld_as_needed,
+ 
+ LT_LIB_M
+ 
+-# When building a shared libbfd, link against the pic version of libiberty
+-# so that apps that use libbfd won't need libiberty just to satisfy any
+-# libbfd references.
+-# We can't do that if a pic libiberty is unavailable since including non-pic
+-# code would insert text relocations into libbfd.
+ SHARED_LIBADD=
+-SHARED_LDFLAGS=
++SHARED_LDFLAGS=-liberty
+ if test "$enable_shared" = "yes"; then
+-changequote(,)dnl
+-  x=`sed -n -e 's/^[ 	]*PICFLAG[ 	]*=[ 	]*//p' < ../libiberty/Makefile | sed -n '$p'`
+-changequote([,])dnl
+-  if test -n "$x"; then
+-    SHARED_LIBADD="-L`pwd`/../libiberty/pic -liberty"
+-  fi
+-fi
+-
+ SHARED_LIBADD="$SHARED_LIBADD $LIBINTL"
+ 
+-if test "$enable_shared" = "yes"; then
+   case "${host}" in
+   # More hacks to build DLLs on Windows.
+   *-*-cygwin*)
+     SHARED_LDFLAGS="-no-undefined"
+-    SHARED_LIBADD="-L`pwd`/../libiberty -liberty $SHARED_LIBADD -lcygwin -lkernel32"
++    SHARED_LIBADD="-liberty $SHARED_LIBADD -lcygwin -lkernel32"
+   ;;
+   esac
+ 
+diff --git a/opcodes/Makefile.am b/opcodes/Makefile.am
+index 0e04b4c05c4..848a02662e7 100644
+--- a/opcodes/Makefile.am
++++ b/opcodes/Makefile.am
+@@ -51,7 +51,7 @@ libopcodes_la_LDFLAGS += -rpath $(rpath_bfdlibdir)
+ endif
+ 
+ # This is where bfd.h lives.
+-BFD_H = ../bfd/bfd.h
++BFD_H = $(BFDDIR)/bfd.h
+ 
+ BUILD_LIBS = @BUILD_LIBS@
+ BUILD_LIB_DEPS = @BUILD_LIB_DEPS@
+@@ -303,7 +303,7 @@ OFILES = @BFD_MACHINES@
+ # development.sh is used to determine -Werror default.
+ CONFIG_STATUS_DEPENDENCIES = $(BFDDIR)/development.sh
+ 
+-AM_CPPFLAGS = -I. -I$(srcdir) -I../bfd -I$(INCDIR) -I$(BFDDIR) @HDEFINES@ @INCINTL@
++AM_CPPFLAGS = -I. -I$(srcdir) -I$(INCDIR) -I$(BFDDIR) @HDEFINES@ @INCINTL@
+ 
+ disassemble.lo: disassemble.c
+ if am__fastdepCC
+@@ -327,9 +327,18 @@ libopcodes_la_SOURCES =  dis-buf.c disassemble.c dis-init.c
+-libopcodes_la_DEPENDENCIES = $(OFILES) @SHARED_DEPENDENCIES@
++libopcodes_la_DEPENDENCIES = $(OFILES) @SHARED_DEPENDENCIES@ libtool-soversion
+ libopcodes_la_LIBADD = $(OFILES) @SHARED_LIBADD@
+-libopcodes_la_LDFLAGS += -release `cat ../bfd/libtool-soversion` @SHARED_LDFLAGS@
++libopcodes_la_LDFLAGS += -release `cat libtool-soversion` @SHARED_LDFLAGS@
+ # Allow dependency tracking to work on all the source files.
+ EXTRA_libopcodes_la_SOURCES = $(LIBOPCODES_CFILES)
+ 
++libtool-soversion:
++	@echo "creating $@"
++	bfd_soversion="$(VERSION)" ;\
++	. $(BFDDIR)/development.sh ;\
++	if test "$$development" = true ; then \
++	  bfd_soversion="$(VERSION).$${bfd_version_date}" ;\
++	fi ;\
++	echo "$${bfd_soversion}" > $@
++
+ # libtool will build .libs/libopcodes.a.  We create libopcodes.a in
+ # the build directory so that we don't have to convert all the
+ # programs that use libopcodes.a simultaneously.  This is a hack which
+diff --git a/opcodes/configure.ac b/opcodes/configure.ac
+index e564f067334..5da62a3d58b 100644
+--- a/opcodes/configure.ac
++++ b/opcodes/configure.ac
+@@ -98,6 +98,8 @@ BFD_64_BIT
+ AC_SUBST(HDEFINES)
+ AC_PROG_INSTALL
+ 
++GCC_HEADER_STDINT(bfd_stdint.h)
++
+ AC_CHECK_DECLS([basename, stpcpy])
+ 
+ # Check if sigsetjmp is available.  Using AC_CHECK_FUNCS won't do
+@@ -148,44 +150,21 @@ AC_CACHE_CHECK(linker --as-needed support, bfd_cv_ld_as_needed,
+ 
+ LT_LIB_M
+ 
+-#Libs for generator progs
+-if test "x$cross_compiling" = "xno"; then
+-  BUILD_LIBS=../libiberty/libiberty.a
+-  BUILD_LIB_DEPS=$BUILD_LIBS
+-else
+-  # if cross-compiling, assume that the system provides -liberty
+-  # and that the version is compatible with new headers.
+-  BUILD_LIBS=-liberty
+-  BUILD_LIB_DEPS=
+-fi
+-BUILD_LIBS="$BUILD_LIBS $LIBINTL"
+-BUILD_LIB_DEPS="$BUILD_LIB_DEPS $LIBINTL_DEP"
++BUILD_LIBS="-liberty $LIBINTL"
++BUILD_LIB_DEPS="$LIBINTL_DEP"
+ 
+ AC_SUBST(BUILD_LIBS)
+ AC_SUBST(BUILD_LIB_DEPS)
+ 
+ # Horrible hacks to build DLLs on Windows and a shared library elsewhere.
+ SHARED_LDFLAGS=
+-SHARED_LIBADD=
++SHARED_LIBADD=-liberty
+ SHARED_DEPENDENCIES=
+-if test "$enable_shared" = "yes"; then
+-# When building a shared libopcodes, link against the pic version of libiberty
+-# so that apps that use libopcodes won't need libiberty just to satisfy any
+-# libopcodes references.
+-# We can't do that if a pic libiberty is unavailable since including non-pic
+-# code would insert text relocations into libopcodes.
+ # Note that linking against libbfd as we do here, which is itself linked
+ # against libiberty, may not satisfy all the libopcodes libiberty references
+ # since libbfd may not pull in the entirety of libiberty.
+ # Also, jam libintl into the right place in all of this: after libiberty,
+ # which uses it, but before -lcygwin, which it uses.
+-changequote(,)dnl
+-  x=`sed -n -e 's/^[ 	]*PICFLAG[ 	]*=[ 	]*//p' < ../libiberty/Makefile | sed -n '$p'`
+-changequote([,])dnl
+-  if test -n "$x"; then
+-    SHARED_LIBADD="-L`pwd`/../libiberty/pic -liberty"
+-  fi
+-fi
+ 
+ SHARED_LIBADD="$SHARED_LIBADD $LIBINTL"
+ 
+@@ -193,11 +172,10 @@ if test "$enable_shared" = "yes"; then
+   case "${host}" in
+     *-*-cygwin*)
+       SHARED_LDFLAGS="-no-undefined"
+-      SHARED_LIBADD="-L`pwd`/../bfd -lbfd -L`pwd`/../libiberty -liberty $SHARED_LIBADD"
++      SHARED_LIBADD="-lbfd -liberty $SHARED_LIBADD"
+       ;;
+     *)
+-      SHARED_LIBADD="../bfd/libbfd.la ${SHARED_LIBADD}"
+-      SHARED_DEPENDENCIES="../bfd/libbfd.la"
++      SHARED_LIBADD="-lbfd ${SHARED_LIBADD}"
+       ;;
+   esac
+ 
diff --git a/nixpkgs/pkgs/development/tools/misc/binutils/2.38/default.nix b/nixpkgs/pkgs/development/tools/misc/binutils/2.38/default.nix
new file mode 100644
index 000000000000..fd9a3277532e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/binutils/2.38/default.nix
@@ -0,0 +1,228 @@
+{ stdenv
+, autoreconfHook
+, autoconf269, automake, libtool
+, bison
+, buildPackages
+, fetchFromGitHub
+, fetchurl
+, flex
+, gettext
+, lib
+, noSysDirs
+, perl
+, substitute
+, texinfo
+, zlib
+
+, enableGold ? stdenv.targetPlatform.isElf
+, enableShared ? !stdenv.hostPlatform.isStatic
+  # WARN: Enabling all targets increases output size to a multiple.
+, withAllTargets ? false
+}:
+
+# WARN: configure silently disables ld.gold if it's unsupported, so we need to
+# make sure that intent matches result ourselves.
+assert enableGold -> stdenv.targetPlatform.isElf;
+
+
+let
+  inherit (stdenv) buildPlatform hostPlatform targetPlatform;
+
+  version = "2.38";
+
+  srcs = {
+    normal = fetchurl {
+      url = "mirror://gnu/binutils/binutils-${version}.tar.bz2";
+      sha256 = "sha256-Bw7HHPB3pqWOC5WfBaCaNQFTeMLYpR6Q866r/jBZDvg=";
+    };
+    vc4-none = fetchFromGitHub {
+      owner = "itszor";
+      repo = "binutils-vc4";
+      rev = "708acc851880dbeda1dd18aca4fd0a95b2573b36";
+      sha256 = "1kdrz6fki55lm15rwwamn74fnqpy0zlafsida2zymk76n3656c63";
+    };
+  };
+
+  #INFO: The targetPrefix prepended to binary names to allow multiple binuntils
+  # on the PATH to both be usable.
+  targetPrefix = lib.optionalString (targetPlatform != hostPlatform) "${targetPlatform.config}-";
+in
+
+stdenv.mkDerivation {
+  pname = targetPrefix + "binutils";
+  inherit version;
+
+  # HACK: Ensure that we preserve source from bootstrap binutils to not rebuild LLVM
+  src = stdenv.__bootPackages.binutils-unwrapped_2_38.src
+    or srcs.${targetPlatform.system}
+    or srcs.normal;
+
+  # WARN: this package is used for bootstrapping fetchurl, and thus cannot use
+  # fetchpatch! All mutable patches (generated by GitHub or cgit) that are
+  # needed here should be included directly in Nixpkgs as files.
+  patches = [
+    # Make binutils output deterministic by default.
+    ./deterministic.patch
+
+
+    # Breaks nm BSD flag detection
+    ./0001-Revert-libtool.m4-fix-nm-BSD-flag-detection.patch
+
+    # Required for newer macos versions
+    ./0001-libtool.m4-update-macos-version-detection-block.patch
+
+    # For some reason bfd ld doesn't search DT_RPATH when cross-compiling. It's
+    # not clear why this behavior was decided upon but it has the unfortunate
+    # consequence that the linker will fail to find transitive dependencies of
+    # shared objects when cross-compiling. Consequently, we are forced to
+    # override this behavior, forcing ld to search DT_RPATH even when
+    # cross-compiling.
+    ./always-search-rpath.patch
+
+    # Fixed in 2.39
+    # https://sourceware.org/bugzilla/show_bug.cgi?id=28885
+    # https://sourceware.org/git/?p=binutils-gdb.git;a=patch;h=99852365513266afdd793289813e8e565186c9e6
+    # https://github.com/NixOS/nixpkgs/issues/170946
+    ./deterministic-temp-prefixes.patch
+  ]
+  ++ lib.optional targetPlatform.isiOS ./support-ios.patch
+  ++ lib.optional stdenv.targetPlatform.isWindows ./windres-locate-gcc.patch
+  ++ lib.optional stdenv.targetPlatform.isMips64n64
+     # this patch is from debian:
+     # https://sources.debian.org/data/main/b/binutils/2.38-3/debian/patches/mips64-default-n64.diff
+     (if stdenv.targetPlatform.isMusl
+      then substitute { src = ./mips64-default-n64.patch; replacements = [ "--replace" "gnuabi64" "muslabi64" ]; }
+      else ./mips64-default-n64.patch)
+  # On PowerPC, when generating assembly code, GCC generates a `.machine`
+  # custom instruction which instructs the assembler to generate code for this
+  # machine. However, some GCC versions generate the wrong one, or make it
+  # too strict, which leads to some confusing "unrecognized opcode: wrtee"
+  # or "unrecognized opcode: eieio" errors.
+  #
+  # To remove when binutils 2.39 is released.
+  #
+  # Upstream commit:
+  # https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=cebc89b9328eab994f6b0314c263f94e7949a553
+  ++ lib.optional stdenv.targetPlatform.isPower ./ppc-make-machine-less-strict.patch
+  ;
+
+  outputs = [ "out" "info" "man" ];
+
+  strictDeps = true;
+  depsBuildBuild = [ buildPackages.stdenv.cc ];
+  nativeBuildInputs = [
+    bison
+    perl
+    texinfo
+  ]
+  ++ lib.optionals targetPlatform.isiOS [ autoreconfHook ]
+  ++ lib.optionals buildPlatform.isDarwin [ autoconf269 automake gettext libtool ]
+  ++ lib.optionals targetPlatform.isVc4 [ flex ]
+  ;
+
+  buildInputs = [ zlib gettext ];
+
+  inherit noSysDirs;
+
+  preConfigure = (lib.optionalString buildPlatform.isDarwin ''
+    for i in */configure.ac; do
+      pushd "$(dirname "$i")"
+      echo "Running autoreconf in $PWD"
+      # autoreconf doesn't work, don't know why
+      # autoreconf ''${autoreconfFlags:---install --force --verbose}
+      autoconf
+      popd
+    done
+  '') + ''
+    # Clear the default library search path.
+    if test "$noSysDirs" = "1"; then
+        echo 'NATIVE_LIB_DIRS=' >> ld/configure.tgt
+    fi
+
+    # Use symlinks instead of hard links to save space ("strip" in the
+    # fixup phase strips each hard link separately).
+    for i in binutils/Makefile.in gas/Makefile.in ld/Makefile.in gold/Makefile.in; do
+        sed -i "$i" -e 's|ln |ln -s |'
+    done
+  '';
+
+  # As binutils takes part in the stdenv building, we don't want references
+  # to the bootstrap-tools libgcc (as uses to happen on arm/mips)
+  env.NIX_CFLAGS_COMPILE =
+    if hostPlatform.isDarwin
+    then "-Wno-string-plus-int -Wno-deprecated-declarations"
+    else "-static-libgcc";
+
+  hardeningDisable = [ "format" "pie" ];
+
+  configurePlatforms = [ "build" "host" "target" ];
+
+  configureFlags = [
+    "--enable-64-bit-bfd"
+    "--with-system-zlib"
+
+    "--enable-deterministic-archives"
+    "--disable-werror"
+    "--enable-fix-loongson2f-nop"
+
+    # Turn on --enable-new-dtags by default to make the linker set
+    # RUNPATH instead of RPATH on binaries.  This is important because
+    # RUNPATH can be overridden using LD_LIBRARY_PATH at runtime.
+    "--enable-new-dtags"
+
+    # force target prefix. Some versions of binutils will make it empty if
+    # `--host` and `--target` are too close, even if Nixpkgs thinks the
+    # platforms are different (e.g. because not all the info makes the
+    # `config`). Other versions of binutils will always prefix if `--target` is
+    # passed, even if `--host` and `--target` are the same. The easiest thing
+    # for us to do is not leave it to chance, and force the program prefix to be
+    # what we want it to be.
+    "--program-prefix=${targetPrefix}"
+  ]
+  ++ lib.optionals withAllTargets [ "--enable-targets=all" ]
+  ++ lib.optionals enableGold [ "--enable-gold" "--enable-plugins" ]
+  ++ (if enableShared
+      then [ "--enable-shared" "--disable-static" ]
+      else [ "--disable-shared" "--enable-static" ])
+  ;
+
+  # Fails
+  doCheck = false;
+
+  # Remove on next bump. It's a vestige of past conditional. Stays here to avoid
+  # mass rebuild.
+  postFixup = "";
+
+  # Break dependency on pkgsBuildBuild.gcc when building a cross-binutils
+  stripDebugList = if stdenv.hostPlatform != stdenv.targetPlatform then "bin lib ${stdenv.hostPlatform.config}" else null;
+
+  # INFO: Otherwise it fails with:
+  # `./sanity.sh: line 36: $out/bin/size: not found`
+  doInstallCheck = (buildPlatform == hostPlatform) && (hostPlatform == targetPlatform);
+
+  enableParallelBuilding = true;
+
+  passthru = {
+    inherit targetPrefix;
+    hasGold = enableGold;
+    isGNU = true;
+  };
+
+  meta = with lib; {
+    description = "Tools for manipulating binaries (linker, assembler, etc.)";
+    longDescription = ''
+      The GNU Binutils are a collection of binary tools.  The main
+      ones are `ld' (the GNU linker) and `as' (the GNU assembler).
+      They also include the BFD (Binary File Descriptor) library,
+      `gprof', `nm', `strip', etc.
+    '';
+    homepage = "https://www.gnu.org/software/binutils/";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ ericson2314 lovesegfault ];
+    platforms = platforms.unix;
+
+    # INFO: Give binutils a lower priority than gcc-wrapper to prevent a
+    # collision due to the ld/as wrappers/symlinks in the latter.
+    priority = 10;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/binutils/2.38/deterministic-temp-prefixes.patch b/nixpkgs/pkgs/development/tools/misc/binutils/2.38/deterministic-temp-prefixes.patch
new file mode 100644
index 000000000000..3c27340b9c04
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/binutils/2.38/deterministic-temp-prefixes.patch
@@ -0,0 +1,36 @@
+From 99852365513266afdd793289813e8e565186c9e6 Mon Sep 17 00:00:00 2001
+From: Nick Clifton <nickc@redhat.com>
+Date: Wed, 23 Mar 2022 11:39:49 +0000
+Subject: [PATCH] dlltool: Use the output name as basis for deterministic temp
+ prefixes
+
+        PR 28885
+        * dlltool.c (main): use imp_name rather than dll_name when
+        generating a temporary file name.
+---
+ binutils/ChangeLog | 9 +++++++++
+ binutils/dlltool.c | 7 ++++---
+ 2 files changed, 13 insertions(+), 3 deletions(-)
+
+diff --git a/binutils/dlltool.c b/binutils/dlltool.c
+index d95bf3f5470..89871510b45 100644
+--- a/binutils/dlltool.c
++++ b/binutils/dlltool.c
+@@ -3992,10 +3992,11 @@ main (int ac, char **av)
+   if (tmp_prefix == NULL)
+     {
+       /* If possible use a deterministic prefix.  */
+-      if (dll_name)
++      if (imp_name || delayimp_name)
+         {
+-          tmp_prefix = xmalloc (strlen (dll_name) + 2);
+-          sprintf (tmp_prefix, "%s_", dll_name);
++          const char *input = imp_name ? imp_name : delayimp_name;
++          tmp_prefix = xmalloc (strlen (input) + 2);
++          sprintf (tmp_prefix, "%s_", input);
+           for (i = 0; tmp_prefix[i]; i++)
+             if (!ISALNUM (tmp_prefix[i]))
+               tmp_prefix[i] = '_';
+-- 
+2.31.1
+
diff --git a/nixpkgs/pkgs/development/tools/misc/binutils/2.38/deterministic.patch b/nixpkgs/pkgs/development/tools/misc/binutils/2.38/deterministic.patch
new file mode 100644
index 000000000000..736e0aca6ce1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/binutils/2.38/deterministic.patch
@@ -0,0 +1,12 @@
+diff -ur orig/binutils-2.23.1/ld/ldlang.c binutils-2.23.1/ld/ldlang.c
+--- orig/ld/ldlang.c
++++ new/ld/ldlang.c
+@@ -3095,6 +3095,8 @@
+                           ldfile_output_machine))
+     einfo (_("%P%F:%s: can not set architecture: %E\n"), name);
+ 
++  link_info.output_bfd->flags |= BFD_DETERMINISTIC_OUTPUT;
++
+   link_info.hash = bfd_link_hash_table_create (link_info.output_bfd);
+   if (link_info.hash == NULL)
+     einfo (_("%P%F: can not create hash table: %E\n"));
diff --git a/nixpkgs/pkgs/development/tools/misc/binutils/2.38/libbfd.nix b/nixpkgs/pkgs/development/tools/misc/binutils/2.38/libbfd.nix
new file mode 100644
index 000000000000..feac15b512f9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/binutils/2.38/libbfd.nix
@@ -0,0 +1,59 @@
+{ lib, stdenv
+, fetchpatch, gnu-config, autoreconfHook, bison, binutils-unwrapped_2_38
+, libiberty, libintl, zlib
+}:
+
+stdenv.mkDerivation {
+  pname = "libbfd";
+  inherit (binutils-unwrapped_2_38) version src;
+
+  outputs = [ "out" "dev" ];
+
+  patches = binutils-unwrapped_2_38.patches ++ [
+    ./build-components-separately.patch
+    (fetchpatch {
+      url = "https://raw.githubusercontent.com/mxe/mxe/e1d4c144ee1994f70f86cf7fd8168fe69bd629c6/src/bfd-1-disable-subdir-doc.patch";
+      sha256 = "0pzb3i74d1r7lhjan376h59a7kirw15j7swwm8pz3zy9lkdqkj6q";
+    })
+  ];
+
+  # We just want to build libbfd
+  postPatch = ''
+    cd bfd
+  '';
+
+  postAutoreconf = ''
+    echo "Updating config.guess and config.sub from ${gnu-config}"
+    cp -f ${gnu-config}/config.{guess,sub} ../
+  '';
+
+  # We update these ourselves
+  dontUpdateAutotoolsGnuConfigScripts = true;
+
+  strictDeps = true;
+  nativeBuildInputs = [ autoreconfHook bison ];
+  buildInputs = [ libiberty zlib ] ++ lib.optionals stdenv.isDarwin [ libintl ];
+
+  configurePlatforms = [ "build" "host" ];
+  configureFlags = [
+    "--enable-targets=all" "--enable-64-bit-bfd"
+    "--enable-install-libbfd"
+    "--with-system-zlib"
+  ] ++ lib.optional (!stdenv.hostPlatform.isStatic) "--enable-shared";
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "A library for manipulating containers of machine code";
+    longDescription = ''
+      BFD is a library which provides a single interface to read and write
+      object files, executables, archive files, and core files in any format.
+      It is associated with GNU Binutils, and elsewhere often distributed with
+      it.
+    '';
+    homepage = "https://www.gnu.org/software/binutils/";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ ericson2314 ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/binutils/2.38/libopcodes.nix b/nixpkgs/pkgs/development/tools/misc/binutils/2.38/libopcodes.nix
new file mode 100644
index 000000000000..16b3695626d7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/binutils/2.38/libopcodes.nix
@@ -0,0 +1,44 @@
+{ lib, stdenv, buildPackages
+, autoreconfHook, bison, binutils-unwrapped_2_38
+, libiberty, libbfd_2_38
+}:
+
+stdenv.mkDerivation {
+  pname = "libopcodes";
+  inherit (binutils-unwrapped_2_38) version src;
+
+  outputs = [ "out" "dev" ];
+
+  patches = binutils-unwrapped_2_38.patches ++ [
+    ./build-components-separately.patch
+  ];
+
+  # We just want to build libopcodes
+  postPatch = ''
+    cd opcodes
+    find . ../include/opcode -type f -exec sed {} -i -e 's/"bfd.h"/<bfd.h>/' \;
+  '';
+
+  depsBuildBuild = [ buildPackages.stdenv.cc ];
+  nativeBuildInputs = [ autoreconfHook bison ];
+  buildInputs = [ libiberty ];
+  # dis-asm.h includes bfd.h
+  propagatedBuildInputs = [ libbfd_2_38 ];
+
+  configurePlatforms = [ "build" "host" ];
+  configureFlags = [
+    "--enable-targets=all" "--enable-64-bit-bfd"
+    "--enable-install-libbfd"
+    "--enable-shared"
+  ];
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "A library from binutils for manipulating machine code";
+    homepage = "https://www.gnu.org/software/binutils/";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ ericson2314 ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/binutils/2.38/mips64-default-n64.patch b/nixpkgs/pkgs/development/tools/misc/binutils/2.38/mips64-default-n64.patch
new file mode 100644
index 000000000000..00581279f85e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/binutils/2.38/mips64-default-n64.patch
@@ -0,0 +1,82 @@
+--- a/bfd/config.bfd
++++ b/bfd/config.bfd
+@@ -927,11 +927,21 @@ case "${targ}" in
+     targ_defvec=mips_elf32_be_vec
+     targ_selvecs="mips_elf32_le_vec mips_elf64_be_vec mips_elf64_le_vec mips_ecoff_be_vec mips_ecoff_le_vec"
+     ;;
+-  mips64*el-*-linux*)
++  mips*64*el-*-linux*-gnuabi64)
++    targ_defvec=mips_elf64_trad_le_vec
++    targ_selvecs="mips_elf32_ntrad_be_vec mips_elf32_ntrad_le_vec mips_elf32_trad_be_vec mips_elf32_trad_le_vec mips_elf64_trad_be_vec"
++    want64=true
++    ;;
++  mips*64*-*-linux*-gnuabi64)
++    targ_defvec=mips_elf64_trad_be_vec
++    targ_selvecs="mips_elf32_ntrad_be_vec mips_elf32_ntrad_le_vec mips_elf32_trad_be_vec mips_elf32_trad_le_vec mips_elf64_trad_le_vec"
++    want64=true
++    ;;
++  mips*64*el-*-linux*)
+     targ_defvec=mips_elf32_ntrad_le_vec
+     targ_selvecs="mips_elf32_ntrad_be_vec mips_elf32_trad_le_vec mips_elf32_trad_be_vec mips_elf64_trad_le_vec mips_elf64_trad_be_vec"
+     ;;
+-  mips64*-*-linux*)
++  mips*64*-*-linux*)
+     targ_defvec=mips_elf32_ntrad_be_vec
+     targ_selvecs="mips_elf32_ntrad_le_vec mips_elf32_trad_be_vec mips_elf32_trad_le_vec mips_elf64_trad_be_vec mips_elf64_trad_le_vec"
+     ;;
+--- a/binutils/testsuite/binutils-all/mips/mips-note-2-n32.d
++++ b/binutils/testsuite/binutils-all/mips/mips-note-2-n32.d
+@@ -1,4 +1,5 @@
+ #PROG: objcopy
++#as: -n32
+ #readelf: --notes --wide
+ #objcopy: --merge-notes
+ #name: MIPS merge notes section (n32)
+--- a/gas/configure
++++ b/gas/configure
+@@ -12167,6 +12167,9 @@ _ACEOF
+ 	esac
+ 	# Decide which ABI to target by default.
+ 	case ${target} in
++	  mips*64*-linux-gnuabi64)
++	    mips_default_abi=N64_ABI
++	    ;;
+ 	  mips64*-linux* | mips-sgi-irix6* | mips64*-freebsd* \
+ 	  | mips64*-kfreebsd*-gnu | mips64*-ps2-elf*)
+ 	    mips_default_abi=N32_ABI
+--- a/gas/configure.ac
++++ b/gas/configure.ac
+@@ -384,6 +384,9 @@ changequote([,])dnl
+ 	esac
+ 	# Decide which ABI to target by default.
+ 	case ${target} in
++	  mips*64*-linux-gnuabi64)
++	    mips_default_abi=N64_ABI
++	    ;;
+ 	  mips64*-linux* | mips-sgi-irix6* | mips64*-freebsd* \
+ 	  | mips64*-kfreebsd*-gnu | mips64*-ps2-elf*)
+ 	    mips_default_abi=N32_ABI
+--- a/ld/configure.tgt
++++ b/ld/configure.tgt
+@@ -543,11 +543,19 @@ mips*-*-vxworks*)	targ_emul=elf32ebmipvx
+ 			;;
+ mips*-*-windiss)	targ_emul=elf32mipswindiss
+ 			;;
+-mips64*el-*-linux-*)	targ_emul=elf32ltsmipn32
++mips*64*el-*-linux-gnuabi64)	targ_emul=elf64ltsmip
++			targ_extra_emuls="elf32btsmipn32 elf32ltsmipn32 elf32ltsmip elf32btsmip elf64btsmip"
++			targ_extra_libpath=$targ_extra_emuls
++			;;
++mips*64*el-*-linux-*)	targ_emul=elf32ltsmipn32
+ 			targ_extra_emuls="elf32btsmipn32 elf32ltsmip elf32btsmip elf64ltsmip elf64btsmip"
+ 			targ_extra_libpath=$targ_extra_emuls
+ 			;;
+-mips64*-*-linux-*)	targ_emul=elf32btsmipn32
++mips*64*-*-linux-gnuabi64)	targ_emul=elf64btsmip
++			targ_extra_emuls="elf32btsmipn32 elf32ltsmipn32 elf32btsmip elf32ltsmip elf64ltsmip"
++			targ_extra_libpath=$targ_extra_emuls
++			;;
++mips*64*-*-linux-*)	targ_emul=elf32btsmipn32
+ 			targ_extra_emuls="elf32ltsmipn32 elf32btsmip elf32ltsmip elf64btsmip elf64ltsmip"
+ 			targ_extra_libpath=$targ_extra_emuls
+ 			;;
diff --git a/nixpkgs/pkgs/development/tools/misc/binutils/2.38/ppc-make-machine-less-strict.patch b/nixpkgs/pkgs/development/tools/misc/binutils/2.38/ppc-make-machine-less-strict.patch
new file mode 100644
index 000000000000..c2452414fc7d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/binutils/2.38/ppc-make-machine-less-strict.patch
@@ -0,0 +1,51 @@
+From cebc89b9328eab994f6b0314c263f94e7949a553 Mon Sep 17 00:00:00 2001
+From: Alan Modra <amodra@gmail.com>
+Date: Mon, 21 Feb 2022 10:58:57 +1030
+Subject: [PATCH] binutils 2.38 vs. ppc32 linux kernel
+
+Commit b25f942e18d6 made .machine more strict.  Weaken it again.
+
+	* config/tc-ppc.c (ppc_machine): Treat an early .machine specially,
+	keeping sticky options to work around gcc bugs.
+---
+ gas/config/tc-ppc.c | 25 ++++++++++++++++++++++++-
+ 1 file changed, 24 insertions(+), 1 deletion(-)
+
+diff --git a/gas/config/tc-ppc.c b/gas/config/tc-ppc.c
+index 054f9c72161..89bc7d3f9b9 100644
+--- a/gas/config/tc-ppc.c
++++ b/gas/config/tc-ppc.c
+@@ -5965,7 +5965,30 @@ ppc_machine (int ignore ATTRIBUTE_UNUSED)
+ 	     options do not count as a new machine, instead they add
+ 	     to currently selected opcodes.  */
+ 	  ppc_cpu_t machine_sticky = 0;
+-	  new_cpu = ppc_parse_cpu (ppc_cpu, &machine_sticky, cpu_string);
++	  /* Unfortunately, some versions of gcc emit a .machine
++	     directive very near the start of the compiler's assembly
++	     output file.  This is bad because it overrides user -Wa
++	     cpu selection.  Worse, there are versions of gcc that
++	     emit the *wrong* cpu, not even respecting the -mcpu given
++	     to gcc.  See gcc pr101393.  And to compound the problem,
++	     as of 20220222 gcc doesn't pass the correct cpu option to
++	     gas on the command line.  See gcc pr59828.  Hack around
++	     this by keeping sticky options for an early .machine.  */
++	  asection *sec;
++	  for (sec = stdoutput->sections; sec != NULL; sec = sec->next)
++	    {
++	      segment_info_type *info = seg_info (sec);
++	      /* Are the frags for this section perturbed from their
++		 initial state?  Even .align will count here.  */
++	      if (info != NULL
++		  && (info->frchainP->frch_root != info->frchainP->frch_last
++		      || info->frchainP->frch_root->fr_type != rs_fill
++		      || info->frchainP->frch_root->fr_fix != 0))
++		break;
++	    }
++	  new_cpu = ppc_parse_cpu (ppc_cpu,
++				   sec == NULL ? &sticky : &machine_sticky,
++				   cpu_string);
+ 	  if (new_cpu != 0)
+ 	    ppc_cpu = new_cpu;
+ 	  else
+-- 
+2.31.1
diff --git a/nixpkgs/pkgs/development/tools/misc/binutils/2.38/support-ios.patch b/nixpkgs/pkgs/development/tools/misc/binutils/2.38/support-ios.patch
new file mode 100644
index 000000000000..74e56d130ed5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/binutils/2.38/support-ios.patch
@@ -0,0 +1,168 @@
+diff --git a/bfd/config.bfd b/bfd/config.bfd
+index f04a993f06..1e24a9d030 100644
+--- a/bfd/config.bfd
++++ b/bfd/config.bfd
+@@ -238,7 +238,7 @@ case "${targ}" in
+ 
+ # START OF targmatch.h
+ #ifdef BFD64
+-  aarch64-*-darwin*)
++  aarch64-*-darwin* | aarch64-*-ios*)
+     targ_defvec=aarch64_mach_o_vec
+     targ_selvecs="arm_mach_o_vec mach_o_le_vec mach_o_be_vec mach_o_fat_vec"
+     targ_archs="$targ_archs bfd_i386_arch bfd_powerpc_arch bfd_rs6000_arch"
+@@ -358,7 +358,7 @@ case "${targ}" in
+     targ_selvecs=arc_elf32_be_vec
+     ;;
+ 
+-  arm-*-darwin*)
++  arm-*-darwin* | arm-*-ios*)
+     targ_defvec=arm_mach_o_vec
+     targ_selvecs="mach_o_le_vec mach_o_be_vec mach_o_fat_vec"
+     targ_archs="$targ_archs bfd_i386_arch bfd_powerpc_arch bfd_rs6000_arch"
+@@ -678,7 +678,7 @@ case "${targ}" in
+   i[3-7]86-*-aix*)
+     targ_defvec=i386_coff_vec
+     ;;
+-  i[3-7]86-*-darwin* | i[3-7]86-*-macos10* | i[3-7]86-*-rhapsody*)
++  i[3-7]86-*-darwin* | i[3-7]86-*-ios* | i[3-7]86-*-macos10* | i[3-7]86-*-rhapsody*)
+     targ_defvec=i386_mach_o_vec
+     targ_selvecs="mach_o_le_vec mach_o_be_vec mach_o_fat_vec pef_vec pef_xlib_vec sym_vec"
+     targ64_selvecs=x86_64_mach_o_vec
+@@ -762,7 +762,7 @@ case "${targ}" in
+     targ_defvec=x86_64_elf64_cloudabi_vec
+     want64=true
+     ;;
+-  x86_64-*-darwin*)
++  x86_64-*-darwin* | x86_64-*-ios*)
+     targ_defvec=x86_64_mach_o_vec
+     targ_selvecs="i386_mach_o_vec mach_o_le_vec mach_o_be_vec mach_o_fat_vec pef_vec pef_xlib_vec sym_vec"
+     targ_archs="$targ_archs bfd_powerpc_arch bfd_rs6000_arch"
+@@ -1402,7 +1402,7 @@ case "${targ}" in
+     targ_selvecs="powerpc_elf32_le_vec powerpc_boot_vec"
+     targ64_selvecs="powerpc_elf64_vec powerpc_elf64_le_vec"
+     ;;
+-  powerpc-*-darwin* | powerpc-*-macos10* | powerpc-*-rhapsody*)
++  powerpc-*-darwin* | powerpc-*-ios* | powerpc-*-macos10* | powerpc-*-rhapsody*)
+     targ_defvec=mach_o_be_vec
+     targ_selvecs="mach_o_be_vec mach_o_le_vec mach_o_fat_vec pef_vec pef_xlib_vec sym_vec"
+     targ_archs="$targ_archs bfd_i386_arch"
+diff --git a/configure.ac b/configure.ac
+index aae94501e4..2cceb4dad4 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -510,7 +510,7 @@ if test x$enable_libgomp = x ; then
+ 	;;
+     *-*-solaris2* | *-*-hpux11*)
+ 	;;
+-    *-*-darwin* | *-*-aix*)
++    *-*-darwin* | *-*-ios* | *-*-aix*)
+ 	;;
+     nvptx*-*-*)
+ 	;;
+@@ -700,13 +700,13 @@ esac
+ 
+ # Disable libffi for some systems.
+ case "${target}" in
+-  powerpc-*-darwin*)
++  powerpc-*-darwin* | powerpc-*-ios*)
+     ;;
+-  i[[3456789]]86-*-darwin*)
++  i[[3456789]]86-*-darwin* | i[[3456789]]86-*-ios*)
+     ;;
+-  x86_64-*-darwin[[912]]*)
++  x86_64-*-darwin[[912]]* | x86_64-*-ios[[912]]*)
+     ;;
+-  *-*-darwin*)
++  *-*-darwin* | *-*-ios*)
+     noconfigdirs="$noconfigdirs target-libffi"
+     ;;
+   *-*-netware*)
+@@ -788,7 +788,7 @@ esac
+ # Disable the go frontend on systems where it is known to not work. Please keep
+ # this in sync with contrib/config-list.mk.
+ case "${target}" in
+-*-*-darwin* | *-*-cygwin* | *-*-mingw*)
++*-*-darwin* | *-*-ios* | *-*-cygwin* | *-*-mingw*)
+     unsupported_languages="$unsupported_languages go"
+     ;;
+ esac
+@@ -797,7 +797,7 @@ esac
+ # For testing, you can easily override this with --enable-libgo.
+ if test x$enable_libgo = x; then
+     case "${target}" in
+-    *-*-darwin*)
++    *-*-darwin* | *-*-ios*)
+ 	# PR 46986
+ 	noconfigdirs="$noconfigdirs target-libgo"
+ 	;;
+@@ -916,27 +916,27 @@ esac
+ case "${target}" in
+   *-*-chorusos)
+     ;;
+-  aarch64-*-darwin*)
++  aarch64-*-darwin* | aarch64-*-ios*)
+     noconfigdirs="$noconfigdirs ld gas gdb gprof"
+     noconfigdirs="$noconfigdirs sim target-rda"
+     ;;
+-  arm-*-darwin*)
++  arm-*-darwin* | arm-*-ios*)
+     noconfigdirs="$noconfigdirs ld gas gdb gprof"
+     noconfigdirs="$noconfigdirs sim target-rda"
+     ;;
+-  powerpc-*-darwin*)
++  powerpc-*-darwin* | powerpc-*-ios*)
+     noconfigdirs="$noconfigdirs ld gas gdb gprof"
+     noconfigdirs="$noconfigdirs sim target-rda"
+     ;;
+-  i[[3456789]]86-*-darwin*)
++  i[[3456789]]86-*-darwin* | i[[3456789]]86-*-ios*)
+     noconfigdirs="$noconfigdirs ld gprof"
+     noconfigdirs="$noconfigdirs sim target-rda"
+     ;;
+-  x86_64-*-darwin[[912]]*)
++  x86_64-*-darwin[[912]]* | x86_64-*-ios[[912]]*)
+     noconfigdirs="$noconfigdirs ld gas gprof"
+     noconfigdirs="$noconfigdirs sim target-rda"
+     ;;
+-  *-*-darwin*)
++  *-*-darwin* | *-*-ios*)
+     noconfigdirs="$noconfigdirs ld gas gdb gprof"
+     noconfigdirs="$noconfigdirs sim target-rda"
+     ;;
+@@ -1226,7 +1226,7 @@ case "${host}" in
+   hppa*-*)	
+     host_makefile_frag="config/mh-pa"
+     ;;
+-  *-*-darwin*)
++  *-*-darwin* | *-*-ios*)
+     host_makefile_frag="config/mh-darwin"
+     ;;
+   powerpc-*-aix*)
+@@ -1697,7 +1697,7 @@ ACX_ELF_TARGET_IFELSE([# ELF platforms build the lto-plugin always.
+   build_lto_plugin=yes
+ ],[if test x"$default_enable_lto" = x"yes" ; then
+     case $target in
+-      *-apple-darwin[[912]]* | *-cygwin* | *-mingw* | *djgpp*) ;;
++      *-apple-darwin[[912]]* | *-apple-ios[[912]]* | *-cygwin* | *-mingw* | *djgpp*) ;;
+       # On other non-ELF platforms, LTO has yet to be validated.
+       *) enable_lto=no ;;
+     esac
+@@ -1708,7 +1708,7 @@ ACX_ELF_TARGET_IFELSE([# ELF platforms build the lto-plugin always.
+   # warn during gcc/ subconfigure; unless you're bootstrapping with
+   # -flto it won't be needed until after installation anyway.
+     case $target in
+-      *-cygwin* | *-mingw* | *-apple-darwin* | *djgpp*) ;;
++      *-cygwin* | *-mingw* | *-apple-darwin* | *-apple-ios* | *djgpp*) ;;
+       *) if test x"$enable_lto" = x"yes"; then
+ 	AC_MSG_ERROR([LTO support is not enabled for this target.])
+         fi
+@@ -2590,7 +2590,7 @@ rm -f conftest*
+ # Decide which environment variable is used to find dynamic libraries.
+ case "${host}" in
+   *-*-hpux*) RPATH_ENVVAR=SHLIB_PATH ;;
+-  *-*-darwin*) RPATH_ENVVAR=DYLD_LIBRARY_PATH ;;
++  *-*-darwin* | *-*-ios* ) RPATH_ENVVAR=DYLD_LIBRARY_PATH ;;
+   *-*-mingw* | *-*-cygwin ) RPATH_ENVVAR=PATH ;;
+   *) RPATH_ENVVAR=LD_LIBRARY_PATH ;;
+ esac
diff --git a/nixpkgs/pkgs/development/tools/misc/binutils/2.38/windres-locate-gcc.patch b/nixpkgs/pkgs/development/tools/misc/binutils/2.38/windres-locate-gcc.patch
new file mode 100644
index 000000000000..721667c62cec
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/binutils/2.38/windres-locate-gcc.patch
@@ -0,0 +1,19 @@
+diff --git a/binutils/resrc.c b/binutils/resrc.c
+index a875c3a4..0411d047 100644
+--- a/binutils/resrc.c
++++ b/binutils/resrc.c
+@@ -521,7 +521,13 @@ read_rc_file (const char *filename, const char *preprocessor,
+ 
+       cpp_pipe = 0;
+ 
+-      if (dash)
++      /* Nixpkgs specific : look first at the prefixed path
++        ( there should be no gcc in the binutils folder ) */
++      if (slash && dash) {
++        cpp_pipe = look_for_default(cmd, slash + 1, dash - slash, preprocargs, filename);
++      }
++
++      if (dash && ! cpp_pipe)
+ 	{
+ 	  /* First, try looking for a prefixed gcc in the windres
+ 	     directory, with the same prefix as windres */
diff --git a/nixpkgs/pkgs/development/tools/misc/binutils/CVE-2023-1972.patch b/nixpkgs/pkgs/development/tools/misc/binutils/CVE-2023-1972.patch
new file mode 100644
index 000000000000..838fbf722761
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/binutils/CVE-2023-1972.patch
@@ -0,0 +1,23 @@
+diff --git a/bfd/elf.c b/bfd/elf.c
+index 027d0143735..185028cbd97 100644
+--- a/bfd/elf.c
++++ b/bfd/elf.c
+@@ -9030,6 +9030,9 @@ _bfd_elf_slurp_version_tables (bfd *abfd, bool default_imported_symver)
+ 	  bfd_set_error (bfd_error_file_too_big);
+ 	  goto error_return_verdef;
+ 	}
++
++      if (amt == 0)
++	goto error_return_verdef;
+       elf_tdata (abfd)->verdef = (Elf_Internal_Verdef *) bfd_zalloc (abfd, amt);
+       if (elf_tdata (abfd)->verdef == NULL)
+ 	goto error_return_verdef;
+@@ -9133,6 +9136,8 @@ _bfd_elf_slurp_version_tables (bfd *abfd, bool default_imported_symver)
+ 	  bfd_set_error (bfd_error_file_too_big);
+ 	  goto error_return;
+ 	}
++      if (amt == 0)
++	goto error_return;
+       elf_tdata (abfd)->verdef = (Elf_Internal_Verdef *) bfd_zalloc (abfd, amt);
+       if (elf_tdata (abfd)->verdef == NULL)
+ 	goto error_return;
diff --git a/nixpkgs/pkgs/development/tools/misc/binutils/always-search-rpath.patch b/nixpkgs/pkgs/development/tools/misc/binutils/always-search-rpath.patch
new file mode 100644
index 000000000000..2e9956e6b6e4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/binutils/always-search-rpath.patch
@@ -0,0 +1,14 @@
+diff --git a/ld/genscripts.sh b/ld/genscripts.sh
+index b6940d376d..0feb1adfd0 100755
+--- a/ld/genscripts.sh
++++ b/ld/genscripts.sh
+@@ -125,6 +125,9 @@ if test "x$NATIVE" = "xyes" ; then
+   USE_LIBPATH=yes
+ fi
+ 
++# TODO: why is this needed?
++USE_LIBPATH=yes
++
+ # Set the library search path, for libraries named by -lfoo.
+ # If LIB_PATH is defined (e.g., by Makefile) and non-empty, it is used.
+ # Otherwise, the default is set here.
diff --git a/nixpkgs/pkgs/development/tools/misc/binutils/avr-size.patch b/nixpkgs/pkgs/development/tools/misc/binutils/avr-size.patch
new file mode 100644
index 000000000000..ae78228b0a34
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/binutils/avr-size.patch
@@ -0,0 +1,435 @@
+diff --git a/binutils/size.c b/binutils/size.c
+index 3697087714..f99d45a6bf 100644
+--- a/binutils/size.c
++++ b/binutils/size.c
+@@ -51,7 +51,8 @@ enum output_format
+   {
+    FORMAT_BERKLEY,
+    FORMAT_SYSV,
+-   FORMAT_GNU
++   FORMAT_GNU,
++   FORMAT_AVR
+   };
+ static enum output_format selected_output_format =
+ #if BSD_DEFAULT
+@@ -74,6 +75,246 @@ static bfd_size_type total_textsize;
+ /* Program exit status.  */
+ static int return_code = 0;
+ 
++
++/* AVR Size specific stuff */
++
++#define AVR64 64UL
++#define AVR128 128UL
++#define AVR256 256UL
++#define AVR512 512UL
++#define AVR1K 1024UL
++#define AVR2K 2048UL
++#define AVR4K 4096UL
++#define AVR8K 8192UL
++#define AVR16K 16384UL
++#define AVR20K 20480UL
++#define AVR24K 24576UL
++#define AVR32K 32768UL
++#define AVR36K 36864UL
++#define AVR40K 40960UL
++#define AVR64K 65536UL
++#define AVR68K 69632UL
++#define AVR128K 131072UL
++#define AVR136K 139264UL
++#define AVR200K 204800UL
++#define AVR256K 262144UL
++#define AVR264K 270336UL
++
++typedef struct
++{
++    char *name;
++	long flash;
++	long ram;
++	long eeprom;
++} avr_device_t;
++
++avr_device_t avr[] =
++{
++	{"atxmega256a3",  AVR264K, AVR16K, AVR4K},
++	{"atxmega256a3b", AVR264K, AVR16K, AVR4K},
++	{"atxmega256d3",  AVR264K, AVR16K, AVR4K},
++
++	{"atmega2560",    AVR256K, AVR8K,  AVR4K},
++	{"atmega2561",    AVR256K, AVR8K,  AVR4K},
++
++	{"atxmega192a3",  AVR200K, AVR16K, AVR2K},
++	{"atxmega192d3",  AVR200K, AVR16K, AVR2K},
++
++	{"atxmega128a1",  AVR136K, AVR8K,  AVR2K},
++	{"atxmega128a1u", AVR136K, AVR8K,  AVR2K},
++	{"atxmega128a3",  AVR136K, AVR8K,  AVR2K},
++	{"atxmega128d3",  AVR136K, AVR8K,  AVR2K},
++
++	{"at43usb320",    AVR128K, 608UL,  0UL},
++	{"at90can128",    AVR128K, AVR4K,  AVR4K},
++	{"at90usb1286",   AVR128K, AVR8K,  AVR4K},
++	{"at90usb1287",   AVR128K, AVR8K,  AVR4K},
++	{"atmega128",     AVR128K, AVR4K,  AVR4K},
++	{"atmega1280",    AVR128K, AVR8K,  AVR4K},
++	{"atmega1281",    AVR128K, AVR8K,  AVR4K},
++	{"atmega1284p",   AVR128K, AVR16K, AVR4K},
++	{"atmega128rfa1", AVR128K, AVR16K, AVR4K},
++	{"atmega103",     AVR128K, 4000UL, AVR4K},
++
++	{"atxmega64a1",   AVR68K,  AVR4K,  AVR2K},
++	{"atxmega64a1u",  AVR68K,  AVR4K,  AVR2K},
++	{"atxmega64a3",   AVR68K,  AVR4K,  AVR2K},
++	{"atxmega64d3",   AVR68K,  AVR4K,  AVR2K},
++
++	{"at90can64",     AVR64K,  AVR4K,  AVR2K},
++	{"at90scr100",    AVR64K,  AVR4K,  AVR2K},
++	{"at90usb646",    AVR64K,  AVR4K,  AVR2K},
++	{"at90usb647",    AVR64K,  AVR4K,  AVR2K},
++	{"atmega64",      AVR64K,  AVR4K,  AVR2K},
++	{"atmega640",     AVR64K,  AVR8K,  AVR4K},
++	{"atmega644",     AVR64K,  AVR4K,  AVR2K},
++	{"atmega644a",    AVR64K,  AVR4K,  AVR2K},
++	{"atmega644p",    AVR64K,  AVR4K,  AVR2K},
++	{"atmega644pa",   AVR64K,  AVR4K,  AVR2K},
++	{"atmega645",     AVR64K,  AVR4K,  AVR2K},
++	{"atmega645a",    AVR64K,  AVR4K,  AVR2K},
++	{"atmega645p",    AVR64K,  AVR4K,  AVR2K},
++	{"atmega6450",    AVR64K,  AVR4K,  AVR2K},
++	{"atmega6450a",   AVR64K,  AVR4K,  AVR2K},
++	{"atmega6450p",   AVR64K,  AVR4K,  AVR2K},
++	{"atmega649",     AVR64K,  AVR4K,  AVR2K},
++	{"atmega649a",    AVR64K,  AVR4K,  AVR2K},
++	{"atmega649p",    AVR64K,  AVR4K,  AVR2K},
++	{"atmega6490",    AVR64K,  AVR4K,  AVR2K},
++	{"atmega6490a",   AVR64K,  AVR4K,  AVR2K},
++	{"atmega6490p",   AVR64K,  AVR4K,  AVR2K},
++	{"atmega64c1",    AVR64K,  AVR4K,  AVR2K},
++	{"atmega64hve",   AVR64K,  AVR4K,  AVR1K},
++	{"atmega64m1",    AVR64K,  AVR4K,  AVR2K},
++	{"m3000",         AVR64K,  AVR4K,  0UL},
++
++	{"atmega406",     AVR40K,  AVR2K,  AVR512},
++
++	{"atxmega32a4",   AVR36K,  AVR4K,  AVR1K},
++	{"atxmega32d4",   AVR36K,  AVR4K,  AVR1K},
++
++	{"at90can32",     AVR32K,  AVR2K,  AVR1K},
++	{"at94k",         AVR32K,  AVR4K,  0UL},
++	{"atmega32",      AVR32K,  AVR2K,  AVR1K},
++	{"atmega323",     AVR32K,  AVR2K,  AVR1K},
++	{"atmega324a",    AVR32K,  AVR2K,  AVR1K},
++	{"atmega324p",    AVR32K,  AVR2K,  AVR1K},
++	{"atmega324pa",   AVR32K,  AVR2K,  AVR1K},
++	{"atmega325",     AVR32K,  AVR2K,  AVR1K},
++	{"atmega325a",    AVR32K,  AVR2K,  AVR1K},
++	{"atmega325p",    AVR32K,  AVR2K,  AVR1K},
++	{"atmega3250",    AVR32K,  AVR2K,  AVR1K},
++	{"atmega3250a",   AVR32K,  AVR2K,  AVR1K},
++	{"atmega3250p",   AVR32K,  AVR2K,  AVR1K},
++	{"atmega328",     AVR32K,  AVR2K,  AVR1K},
++	{"atmega328p",    AVR32K,  AVR2K,  AVR1K},
++	{"atmega329",     AVR32K,  AVR2K,  AVR1K},
++	{"atmega329a",    AVR32K,  AVR2K,  AVR1K},
++	{"atmega329p",    AVR32K,  AVR2K,  AVR1K},
++	{"atmega329pa",   AVR32K,  AVR2K,  AVR1K},
++	{"atmega3290",    AVR32K,  AVR2K,  AVR1K},
++	{"atmega3290a",   AVR32K,  AVR2K,  AVR1K},
++	{"atmega3290p",   AVR32K,  AVR2K,  AVR1K},
++	{"atmega32hvb",   AVR32K,  AVR2K,  AVR1K},
++	{"atmega32c1",    AVR32K,  AVR2K,  AVR1K},
++	{"atmega32hvb",   AVR32K,  AVR2K,  AVR1K},
++	{"atmega32m1",    AVR32K,  AVR2K,  AVR1K},
++	{"atmega32u2",    AVR32K,  AVR1K,  AVR1K},
++	{"atmega32u4",    AVR32K,  2560UL, AVR1K},
++	{"atmega32u6",    AVR32K,  2560UL, AVR1K},
++
++	{"at43usb355",    AVR24K,  1120UL,   0UL},
++
++	{"atxmega16a4",   AVR20K,  AVR2K,  AVR1K},
++	{"atxmega16d4",   AVR20K,  AVR2K,  AVR1K},
++
++	{"at76c711",      AVR16K,  AVR2K,  0UL},
++	{"at90pwm216",    AVR16K,  AVR1K,  AVR512},
++	{"at90pwm316",    AVR16K,  AVR1K,  AVR512},
++	{"at90usb162",    AVR16K,  AVR512, AVR512},
++	{"atmega16",      AVR16K,  AVR1K,  AVR512},
++	{"atmega16a",     AVR16K,  AVR1K,  AVR512},
++	{"atmega161",     AVR16K,  AVR1K,  AVR512},
++	{"atmega162",     AVR16K,  AVR1K,  AVR512},
++	{"atmega163",     AVR16K,  AVR1K,  AVR512},
++	{"atmega164",     AVR16K,  AVR1K,  AVR512},
++	{"atmega164a",    AVR16K,  AVR1K,  AVR512},
++	{"atmega164p",    AVR16K,  AVR1K,  AVR512},
++	{"atmega165a",    AVR16K,  AVR1K,  AVR512},
++	{"atmega165",     AVR16K,  AVR1K,  AVR512},
++	{"atmega165p",    AVR16K,  AVR1K,  AVR512},
++	{"atmega168",     AVR16K,  AVR1K,  AVR512},
++	{"atmega168a",    AVR16K,  AVR1K,  AVR512},
++	{"atmega168p",    AVR16K,  AVR1K,  AVR512},
++	{"atmega169",     AVR16K,  AVR1K,  AVR512},
++	{"atmega169a",    AVR16K,  AVR1K,  AVR512},
++	{"atmega169p",    AVR16K,  AVR1K,  AVR512},
++	{"atmega169pa",   AVR16K,  AVR1K,  AVR512},
++	{"atmega16hva",   AVR16K,  768UL,  AVR256},
++	{"atmega16hva2",  AVR16K,  AVR1K,  AVR256},
++	{"atmega16hvb",   AVR16K,  AVR1K,  AVR512},
++	{"atmega16m1",    AVR16K,  AVR1K,  AVR512},
++	{"atmega16u2",    AVR16K,  AVR512, AVR512},
++	{"atmega16u4",    AVR16K,  1280UL, AVR512},
++	{"attiny167",     AVR16K,  AVR512, AVR512},
++
++	{"at90c8534",     AVR8K,   352UL,  AVR512},
++	{"at90pwm1",      AVR8K,   AVR512, AVR512},
++	{"at90pwm2",      AVR8K,   AVR512, AVR512},
++	{"at90pwm2b",     AVR8K,   AVR512, AVR512},
++	{"at90pwm3",      AVR8K,   AVR512, AVR512},
++	{"at90pwm3b",     AVR8K,   AVR512, AVR512},
++	{"at90pwm81",     AVR8K,   AVR256, AVR512},
++	{"at90s8515",     AVR8K,   AVR512, AVR512},
++	{"at90s8535",     AVR8K,   AVR512, AVR512},
++	{"at90usb82",     AVR8K,   AVR512, AVR512},
++	{"ata6289",       AVR8K,   AVR512, 320UL},
++	{"atmega8",       AVR8K,   AVR1K,  AVR512},
++	{"atmega8515",    AVR8K,   AVR512, AVR512},
++	{"atmega8535",    AVR8K,   AVR512, AVR512},
++	{"atmega88",      AVR8K,   AVR1K,  AVR512},
++	{"atmega88a",     AVR8K,   AVR1K,  AVR512},
++	{"atmega88p",     AVR8K,   AVR1K,  AVR512},
++	{"atmega88pa",    AVR8K,   AVR1K,  AVR512},
++	{"atmega8hva",    AVR8K,   768UL,  AVR256},
++	{"atmega8u2",     AVR8K,   AVR512, AVR512},
++	{"attiny84",      AVR8K,   AVR512, AVR512},
++	{"attiny84a",     AVR8K,   AVR512, AVR512},
++	{"attiny85",      AVR8K,   AVR512, AVR512},
++	{"attiny861",     AVR8K,   AVR512, AVR512},
++	{"attiny861a",    AVR8K,   AVR512, AVR512},
++	{"attiny87",      AVR8K,   AVR512, AVR512},
++	{"attiny88",      AVR8K,   AVR512, AVR64},
++
++	{"at90s4414",     AVR4K,   352UL,  AVR256},
++	{"at90s4433",     AVR4K,   AVR128, AVR256},
++	{"at90s4434",     AVR4K,   352UL,  AVR256},
++	{"atmega48",      AVR4K,   AVR512, AVR256},
++	{"atmega48a",     AVR4K,   AVR512, AVR256},
++	{"atmega48p",     AVR4K,   AVR512, AVR256},
++	{"attiny4313",    AVR4K,   AVR256, AVR256},
++	{"attiny43u",     AVR4K,   AVR256, AVR64},
++	{"attiny44",      AVR4K,   AVR256, AVR256},
++	{"attiny44a",     AVR4K,   AVR256, AVR256},
++	{"attiny45",      AVR4K,   AVR256, AVR256},
++	{"attiny461",     AVR4K,   AVR256, AVR256},
++	{"attiny461a",    AVR4K,   AVR256, AVR256},
++	{"attiny48",      AVR4K,   AVR256, AVR64},
++
++	{"at86rf401",     AVR2K,   224UL,  AVR128},
++	{"at90s2313",     AVR2K,   AVR128, AVR128},
++	{"at90s2323",     AVR2K,   AVR128, AVR128},
++	{"at90s2333",     AVR2K,   224UL,  AVR128},
++	{"at90s2343",     AVR2K,   AVR128, AVR128},
++	{"attiny20",      AVR2K,   AVR128, 0UL},
++	{"attiny22",      AVR2K,   224UL,  AVR128},
++	{"attiny2313",    AVR2K,   AVR128, AVR128},
++	{"attiny2313a",   AVR2K,   AVR128, AVR128},
++	{"attiny24",      AVR2K,   AVR128, AVR128},
++	{"attiny24a",     AVR2K,   AVR128, AVR128},
++	{"attiny25",      AVR2K,   AVR128, AVR128},
++	{"attiny26",      AVR2K,   AVR128, AVR128},
++	{"attiny261",     AVR2K,   AVR128, AVR128},
++	{"attiny261a",    AVR2K,   AVR128, AVR128},
++	{"attiny28",      AVR2K,   0UL,    0UL},
++	{"attiny40",      AVR2K,   AVR256, 0UL},
++
++	{"at90s1200",     AVR1K,   0UL,    AVR64},
++	{"attiny9",       AVR1K,   32UL,   0UL},
++	{"attiny10",      AVR1K,   32UL,   0UL},
++	{"attiny11",      AVR1K,   0UL,    AVR64},
++	{"attiny12",      AVR1K,   0UL,    AVR64},
++	{"attiny13",      AVR1K,   AVR64,  AVR64},
++	{"attiny13a",     AVR1K,   AVR64,  AVR64},
++	{"attiny15",      AVR1K,   0UL,    AVR64},
++
++	{"attiny4",       AVR512,  32UL,   0UL},
++	{"attiny5",       AVR512,  32UL,   0UL},
++};
++
++static char *avrmcu = NULL;
++
++
+ static char *target = NULL;
+ 
+ /* Forward declarations.  */
+@@ -89,7 +330,8 @@ usage (FILE *stream, int status)
+   fprintf (stream, _(" Displays the sizes of sections inside binary files\n"));
+   fprintf (stream, _(" If no input file(s) are specified, a.out is assumed\n"));
+   fprintf (stream, _(" The options are:\n\
+-  -A|-B|-G  --format={sysv|berkeley|gnu}  Select output style (default is %s)\n\
++  -A|-B|-G|-C  --format={sysv|berkeley|gnu|avr}  Select output style (default is %s)\n\
++            --mcu=<avrmcu>            MCU name for AVR format only\n\
+   -o|-d|-x  --radix={8|10|16}         Display numbers in octal, decimal or hex\n\
+   -t        --totals                  Display the total sizes (Berkeley only)\n\
+             --common                  Display total size for *COM* syms\n\
+@@ -113,6 +355,7 @@ usage (FILE *stream, int status)
+ #define OPTION_FORMAT (200)
+ #define OPTION_RADIX (OPTION_FORMAT + 1)
+ #define OPTION_TARGET (OPTION_RADIX + 1)
++#define OPTION_MCU (OPTION_TARGET + 1)
+ 
+ static struct option long_options[] =
+ {
+@@ -120,6 +363,7 @@ static struct option long_options[] =
+   {"format", required_argument, 0, OPTION_FORMAT},
+   {"radix", required_argument, 0, OPTION_RADIX},
+   {"target", required_argument, 0, OPTION_TARGET},
++  {"mcu", required_argument, 0, 203},
+   {"totals", no_argument, &show_totals, 1},
+   {"version", no_argument, &show_version, 1},
+   {"help", no_argument, &show_help, 1},
+@@ -153,7 +397,7 @@ main (int argc, char **argv)
+     fatal (_("fatal error: libbfd ABI mismatch"));
+   set_default_bfd_target ();
+ 
+-  while ((c = getopt_long (argc, argv, "ABGHhVvdfotx", long_options,
++  while ((c = getopt_long (argc, argv, "ABCGHhVvdfotx", long_options,
+ 			   (int *) 0)) != EOF)
+     switch (c)
+       {
+@@ -172,12 +416,20 @@ main (int argc, char **argv)
+ 	  case 'g':
+ 	    selected_output_format = FORMAT_GNU;
+ 	    break;
++	  case 'A':
++	  case 'a':
++	    selected_output_format = FORMAT_AVR;
++	    break;
+ 	  default:
+ 	    non_fatal (_("invalid argument to --format: %s"), optarg);
+ 	    usage (stderr, 1);
+ 	  }
+ 	break;
+ 
++      case OPTION_MCU:
++	avrmcu = optarg;
++	break;
++
+       case OPTION_TARGET:
+ 	target = optarg;
+ 	break;
+@@ -214,6 +466,9 @@ main (int argc, char **argv)
+       case 'G':
+ 	selected_output_format = FORMAT_GNU;
+ 	break;
++      case 'C':
++	selected_output_format = FORMAT_AVR;
++    break;
+       case 'v':
+       case 'V':
+ 	show_version = 1;
+@@ -656,6 +911,98 @@ print_sysv_format (bfd *file)
+   printf ("\n\n");
+ }
+ 
++static avr_device_t *
++avr_find_device (void)
++{
++  unsigned int i;
++  if (avrmcu != NULL)
++  {
++    for (i = 0; i < sizeof(avr) / sizeof(avr[0]); i++)
++    {
++      if (strcmp(avr[i].name, avrmcu) == 0)
++      {
++        /* Match found */
++        return (&avr[i]);
++      }
++    }
++  }
++  return (NULL);
++}
++
++static void
++print_avr_format (bfd *file)
++{
++  char *avr_name = "Unknown";
++  int flashmax = 0;
++  int rammax = 0;
++  int eeprommax = 0;
++  asection *section;
++  bfd_size_type my_datasize = 0;
++  bfd_size_type my_textsize = 0;
++  bfd_size_type my_bsssize = 0;
++  bfd_size_type bootloadersize = 0;
++  bfd_size_type noinitsize = 0;
++  bfd_size_type eepromsize = 0;
++
++  avr_device_t *avrdevice = avr_find_device();
++  if (avrdevice != NULL)
++  {
++    avr_name = avrdevice->name;
++    flashmax = avrdevice->flash;
++    rammax = avrdevice->ram;
++    eeprommax = avrdevice->eeprom;
++  }
++
++  if ((section = bfd_get_section_by_name (file, ".data")) != NULL)
++    my_datasize = bfd_section_size (section);
++  if ((section = bfd_get_section_by_name (file, ".text")) != NULL)
++    my_textsize = bfd_section_size (section);
++  if ((section = bfd_get_section_by_name (file, ".bss")) != NULL)
++    my_bsssize = bfd_section_size (section);
++  if ((section = bfd_get_section_by_name (file, ".bootloader")) != NULL)
++    bootloadersize = bfd_section_size (section);
++  if ((section = bfd_get_section_by_name (file, ".noinit")) != NULL)
++    noinitsize = bfd_section_size (section);
++  if ((section = bfd_get_section_by_name (file, ".eeprom")) != NULL)
++    eepromsize = bfd_section_size (section);
++
++  bfd_size_type text = my_textsize + my_datasize + bootloadersize;
++  bfd_size_type data = my_datasize + my_bsssize + noinitsize;
++  bfd_size_type eeprom = eepromsize;
++
++  printf ("AVR Memory Usage\n"
++          "----------------\n"
++          "Device: %s\n\n", avr_name);
++
++  /* Text size */
++  printf ("Program:%8ld bytes", text);
++  if (flashmax > 0)
++  {
++    printf (" (%2.1f%% Full)", ((float)text / flashmax) * 100);
++  }
++  printf ("\n(.text + .data + .bootloader)\n\n");
++
++  /* Data size */
++  printf ("Data:   %8ld bytes", data);
++  if (rammax > 0)
++  {
++    printf (" (%2.1f%% Full)", ((float)data / rammax) * 100);
++  }
++  printf ("\n(.data + .bss + .noinit)\n\n");
++
++  /* EEPROM size */
++  if (eeprom > 0)
++  {
++    printf ("EEPROM: %8ld bytes", eeprom);
++    if (eeprommax > 0)
++    {
++      printf (" (%2.1f%% Full)", ((float)eeprom / eeprommax) * 100);
++    }
++    printf ("\n(.eeprom)\n\n");
++  }
++}
++
++
+ static void
+ print_sizes (bfd *file)
+ {
+@@ -663,6 +1010,8 @@ print_sizes (bfd *file)
+     calculate_common_size (file);
+   if (selected_output_format == FORMAT_SYSV)
+     print_sysv_format (file);
++  else if (selected_output_format == FORMAT_AVR)
++    print_avr_format (file);
+   else
+     print_berkeley_or_gnu_format (file);
+ }
diff --git a/nixpkgs/pkgs/development/tools/misc/binutils/default.nix b/nixpkgs/pkgs/development/tools/misc/binutils/default.nix
new file mode 100644
index 000000000000..2183d45b6f0d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/binutils/default.nix
@@ -0,0 +1,281 @@
+let
+  withGold = platform: platform.isElf && !platform.isRiscV && !platform.isLoongArch64;
+in
+
+{ stdenv
+, autoreconfHook
+, autoconf269, automake, libtool
+, bison
+, buildPackages
+, fetchFromGitHub
+, fetchurl
+, flex
+, gettext
+, lib
+, noSysDirs
+, perl
+, substitute
+, zlib
+
+, enableGold ? withGold stdenv.targetPlatform
+, enableGoldDefault ? false
+, enableShared ? !stdenv.hostPlatform.isStatic
+  # WARN: Enabling all targets increases output size to a multiple.
+, withAllTargets ? false
+}:
+
+# WARN: configure silently disables ld.gold if it's unsupported, so we need to
+# make sure that intent matches result ourselves.
+assert enableGold -> withGold stdenv.targetPlatform;
+assert enableGoldDefault -> enableGold;
+
+
+let
+  inherit (stdenv) buildPlatform hostPlatform targetPlatform;
+
+  version = "2.40";
+
+  srcs = {
+    normal = fetchurl {
+      url = "mirror://gnu/binutils/binutils-${version}.tar.bz2";
+      hash = "sha256-+CmOsVOks30RLpRapcsoUAQLzyaj6mW1pxXIOv4F5Io=";
+    };
+    vc4-none = fetchFromGitHub {
+      owner = "itszor";
+      repo = "binutils-vc4";
+      rev = "708acc851880dbeda1dd18aca4fd0a95b2573b36";
+      sha256 = "1kdrz6fki55lm15rwwamn74fnqpy0zlafsida2zymk76n3656c63";
+    };
+  };
+
+  #INFO: The targetPrefix prepended to binary names to allow multiple binuntils
+  # on the PATH to both be usable.
+  targetPrefix = lib.optionalString (targetPlatform != hostPlatform) "${targetPlatform.config}-";
+in
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = targetPrefix + "binutils";
+  inherit version;
+
+  # HACK: Ensure that we preserve source from bootstrap binutils to not rebuild LLVM
+  src = stdenv.__bootPackages.binutils-unwrapped.src
+    or srcs.${targetPlatform.system}
+    or srcs.normal;
+
+  # WARN: this package is used for bootstrapping fetchurl, and thus cannot use
+  # fetchpatch! All mutable patches (generated by GitHub or cgit) that are
+  # needed here should be included directly in Nixpkgs as files.
+  patches = [
+    # Make binutils output deterministic by default.
+    ./deterministic.patch
+
+
+    # Breaks nm BSD flag detection, heeds an upstream fix:
+    #   https://sourceware.org/PR29547
+    ./0001-Revert-libtool.m4-fix-the-NM-nm-over-here-B-option-w.patch
+    ./0001-Revert-libtool.m4-fix-nm-BSD-flag-detection.patch
+
+    # Required for newer macos versions
+    ./0001-libtool.m4-update-macos-version-detection-block.patch
+
+    # For some reason bfd ld doesn't search DT_RPATH when cross-compiling. It's
+    # not clear why this behavior was decided upon but it has the unfortunate
+    # consequence that the linker will fail to find transitive dependencies of
+    # shared objects when cross-compiling. Consequently, we are forced to
+    # override this behavior, forcing ld to search DT_RPATH even when
+    # cross-compiling.
+    ./always-search-rpath.patch
+
+    # Avoid `lib -> out -> lib` reference. Normally `bfd-plugins` does
+    # not need to know binutils' BINDIR at all. It's an absolute path
+    # where libraries are stored.
+    ./plugins-no-BINDIR.patch
+
+    # CVE-2023-1972 fix to bfd/elf.c from:
+    # https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=c22d38baefc5a7a1e1f5cdc9dbb556b1f0ec5c57
+    ./CVE-2023-1972.patch
+  ]
+  ++ lib.optional targetPlatform.isiOS ./support-ios.patch
+  # Adds AVR-specific options to "size" for compatibility with Atmel's downstream distribution
+  # Patch from arch-community
+  # https://github.com/archlinux/svntogit-community/blob/c8d53dd1734df7ab15931f7fad0c9acb8386904c/trunk/avr-size.patch
+  ++ lib.optional targetPlatform.isAvr ./avr-size.patch
+  ++ lib.optional stdenv.targetPlatform.isWindows ./windres-locate-gcc.patch
+  ++ lib.optional stdenv.targetPlatform.isMips64n64
+     # this patch is from debian:
+     # https://sources.debian.org/data/main/b/binutils/2.38-3/debian/patches/mips64-default-n64.diff
+     (if stdenv.targetPlatform.isMusl
+      then substitute { src = ./mips64-default-n64.patch; replacements = [ "--replace" "gnuabi64" "muslabi64" ]; }
+      else ./mips64-default-n64.patch)
+  # This patch fixes a bug in 2.40 on MinGW, which breaks DXVK when cross-building from Darwin.
+  # See https://sourceware.org/bugzilla/show_bug.cgi?id=30079
+  ++ lib.optional stdenv.targetPlatform.isMinGW ./mingw-abort-fix.patch
+  ;
+
+  outputs = [ "out" "info" "man" "dev" ]
+  # Ideally we would like to always install 'lib' into a separate
+  # target. Unfortunately cross-compiled binutils installs libraries
+  # across both `$lib/lib/` and `$out/$target/lib` with a reference
+  # from $out to $lib. Probably a binutils bug: all libraries should go
+  # to $lib as binutils does not build target libraries. Let's make our
+  # life slightly simpler by installing everything into $out for
+  # cross-binutils.
+  ++ lib.optionals (targetPlatform == hostPlatform) [ "lib" ];
+
+  strictDeps = true;
+  depsBuildBuild = [ buildPackages.stdenv.cc ];
+  # texinfo was removed here in https://github.com/NixOS/nixpkgs/pull/210132
+  # to reduce rebuilds during stdenv bootstrap.  Please don't add it back without
+  # checking the impact there first.
+  nativeBuildInputs = [
+    bison
+    perl
+  ]
+  ++ lib.optionals targetPlatform.isiOS [ autoreconfHook ]
+  ++ lib.optionals buildPlatform.isDarwin [ autoconf269 automake gettext libtool ]
+  ++ lib.optionals targetPlatform.isVc4 [ flex ]
+  ;
+
+  buildInputs = [ zlib gettext ];
+
+  inherit noSysDirs;
+
+  preConfigure = (lib.optionalString buildPlatform.isDarwin ''
+    for i in */configure.ac; do
+      pushd "$(dirname "$i")"
+      echo "Running autoreconf in $PWD"
+      # autoreconf doesn't work, don't know why
+      # autoreconf ''${autoreconfFlags:---install --force --verbose}
+      autoconf
+      popd
+    done
+  '') + ''
+    # Clear the default library search path.
+    if test "$noSysDirs" = "1"; then
+        echo 'NATIVE_LIB_DIRS=' >> ld/configure.tgt
+    fi
+
+    # Use symlinks instead of hard links to save space ("strip" in the
+    # fixup phase strips each hard link separately).
+    for i in binutils/Makefile.in gas/Makefile.in ld/Makefile.in gold/Makefile.in; do
+        sed -i "$i" -e 's|ln |ln -s |'
+    done
+
+    # autoreconfHook is not included for all targets.
+    # Call it here explicitly as well.
+    ${finalAttrs.postAutoreconf}
+  '';
+
+  postAutoreconf = ''
+    # As we regenerated configure build system tries hard to use
+    # texinfo to regenerate manuals. Let's avoid the dependency
+    # on texinfo in bootstrap path and keep manuals unmodified.
+    touch gas/doc/.dirstamp
+    touch gas/doc/asconfig.texi
+    touch gas/doc/as.1
+    touch gas/doc/as.info
+  '';
+
+  # As binutils takes part in the stdenv building, we don't want references
+  # to the bootstrap-tools libgcc (as uses to happen on arm/mips)
+  env.NIX_CFLAGS_COMPILE =
+    if hostPlatform.isDarwin
+    then "-Wno-string-plus-int -Wno-deprecated-declarations"
+    else "-static-libgcc";
+
+  hardeningDisable = [ "format" "pie" ];
+
+  configurePlatforms = [ "build" "host" "target" ];
+
+  configureFlags = [
+    "--enable-64-bit-bfd"
+    "--with-system-zlib"
+
+    "--enable-deterministic-archives"
+    "--disable-werror"
+    "--enable-fix-loongson2f-nop"
+
+    # Turn on --enable-new-dtags by default to make the linker set
+    # RUNPATH instead of RPATH on binaries.  This is important because
+    # RUNPATH can be overridden using LD_LIBRARY_PATH at runtime.
+    "--enable-new-dtags"
+
+    # force target prefix. Some versions of binutils will make it empty if
+    # `--host` and `--target` are too close, even if Nixpkgs thinks the
+    # platforms are different (e.g. because not all the info makes the
+    # `config`). Other versions of binutils will always prefix if `--target` is
+    # passed, even if `--host` and `--target` are the same. The easiest thing
+    # for us to do is not leave it to chance, and force the program prefix to be
+    # what we want it to be.
+    "--program-prefix=${targetPrefix}"
+
+    # Unconditionally disable:
+    # - musl target needs porting: https://sourceware.org/PR29477
+    "--disable-gprofng"
+
+    # By default binutils searches $libdir for libraries. This brings in
+    # libbfd and libopcodes into a default visibility. Drop default lib
+    # path to force users to declare their use of these libraries.
+    "--with-lib-path=:"
+  ]
+  ++ lib.optionals withAllTargets [ "--enable-targets=all" ]
+  ++ lib.optionals enableGold [
+    "--enable-gold${lib.optionalString enableGoldDefault "=default"}"
+    "--enable-plugins"
+  ] ++ (if enableShared
+      then [ "--enable-shared" "--disable-static" ]
+      else [ "--disable-shared" "--enable-static" ])
+  ;
+
+  # Fails
+  doCheck = false;
+
+  # Break dependency on pkgsBuildBuild.gcc when building a cross-binutils
+  stripDebugList = if stdenv.hostPlatform != stdenv.targetPlatform then "bin lib ${stdenv.hostPlatform.config}" else null;
+
+  # INFO: Otherwise it fails with:
+  # `./sanity.sh: line 36: $out/bin/size: not found`
+  doInstallCheck = (buildPlatform == hostPlatform) && (hostPlatform == targetPlatform);
+
+  enableParallelBuilding = true;
+
+  # For the same reason we don't split "lib" output we undo the $target/
+  # prefix for installed headers and libraries we link:
+  #   $out/$host/$target/lib/*     to $out/lib/
+  #   $out/$host/$target/include/* to $dev/include/*
+  # TODO(trofi): fix installation paths upstream so we could remove this
+  # code and have "lib" output unconditionally.
+  postInstall = lib.optionalString (hostPlatform.config != targetPlatform.config) ''
+    ln -s $out/${hostPlatform.config}/${targetPlatform.config}/lib/*     $out/lib/
+    ln -s $out/${hostPlatform.config}/${targetPlatform.config}/include/* $dev/include/
+  '';
+
+  passthru = {
+    inherit targetPrefix;
+    hasGold = enableGold;
+    isGNU = true;
+    # Having --enable-plugins is not enough, system has to support
+    # dlopen() or equivalent. See config/plugins.m4 and configure.ac
+    # (around PLUGINS) for cases that support or not support plugins.
+    # No platform specific filters yet here.
+    hasPluginAPI = enableGold;
+  };
+
+  meta = with lib; {
+    description = "Tools for manipulating binaries (linker, assembler, etc.)";
+    longDescription = ''
+      The GNU Binutils are a collection of binary tools.  The main
+      ones are `ld' (the GNU linker) and `as' (the GNU assembler).
+      They also include the BFD (Binary File Descriptor) library,
+      `gprof', `nm', `strip', etc.
+    '';
+    homepage = "https://www.gnu.org/software/binutils/";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ ericson2314 lovesegfault ];
+    platforms = platforms.unix;
+
+    # INFO: Give binutils a lower priority than gcc-wrapper to prevent a
+    # collision due to the ld/as wrappers/symlinks in the latter.
+    priority = 10;
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/misc/binutils/deterministic.patch b/nixpkgs/pkgs/development/tools/misc/binutils/deterministic.patch
new file mode 100644
index 000000000000..736e0aca6ce1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/binutils/deterministic.patch
@@ -0,0 +1,12 @@
+diff -ur orig/binutils-2.23.1/ld/ldlang.c binutils-2.23.1/ld/ldlang.c
+--- orig/ld/ldlang.c
++++ new/ld/ldlang.c
+@@ -3095,6 +3095,8 @@
+                           ldfile_output_machine))
+     einfo (_("%P%F:%s: can not set architecture: %E\n"), name);
+ 
++  link_info.output_bfd->flags |= BFD_DETERMINISTIC_OUTPUT;
++
+   link_info.hash = bfd_link_hash_table_create (link_info.output_bfd);
+   if (link_info.hash == NULL)
+     einfo (_("%P%F: can not create hash table: %E\n"));
diff --git a/nixpkgs/pkgs/development/tools/misc/binutils/libbfd.nix b/nixpkgs/pkgs/development/tools/misc/binutils/libbfd.nix
new file mode 100644
index 000000000000..dca62b82eead
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/binutils/libbfd.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv
+, binutils-unwrapped-all-targets
+}:
+
+stdenv.mkDerivation {
+  pname = "libbfd";
+  inherit (binutils-unwrapped-all-targets) version;
+
+  dontUnpack = true;
+  dontBuild = true;
+  dontInstall = true;
+  propagatedBuildInputs = [
+    binutils-unwrapped-all-targets.dev
+    binutils-unwrapped-all-targets.lib
+  ];
+
+  passthru = {
+    inherit (binutils-unwrapped-all-targets) dev hasPluginAPI;
+  };
+
+  meta = with lib; {
+    description = "A library for manipulating containers of machine code";
+    longDescription = ''
+      BFD is a library which provides a single interface to read and write
+      object files, executables, archive files, and core files in any format.
+      It is associated with GNU Binutils, and elsewhere often distributed with
+      it.
+    '';
+    homepage = "https://www.gnu.org/software/binutils/";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ ericson2314 ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/binutils/libopcodes.nix b/nixpkgs/pkgs/development/tools/misc/binutils/libopcodes.nix
new file mode 100644
index 000000000000..e067282a0e5e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/binutils/libopcodes.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv
+, binutils-unwrapped-all-targets
+}:
+
+stdenv.mkDerivation {
+  pname = "libopcodes";
+  inherit (binutils-unwrapped-all-targets) version;
+
+  dontUnpack = true;
+  dontBuild = true;
+  dontInstall = true;
+  propagatedBuildInputs = [
+    binutils-unwrapped-all-targets.dev
+    binutils-unwrapped-all-targets.lib
+  ];
+
+  passthru = {
+    inherit (binutils-unwrapped-all-targets) dev hasPluginAPI;
+  };
+
+  meta = with lib; {
+    description = "A library from binutils for manipulating machine code";
+    homepage = "https://www.gnu.org/software/binutils/";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ ericson2314 ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/binutils/mingw-abort-fix.patch b/nixpkgs/pkgs/development/tools/misc/binutils/mingw-abort-fix.patch
new file mode 100644
index 000000000000..b322d6ad7cd1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/binutils/mingw-abort-fix.patch
@@ -0,0 +1,30 @@
+From b7eab2a9d4f4e92692daf14b09fc95ca11b72e30 Mon Sep 17 00:00:00 2001
+From: Michael Matz <matz@suse.de>
+Date: Thu, 9 Feb 2023 15:29:00 +0100
+Subject: [PATCH 1/1] Fix PR30079: abort on mingw
+
+the early-out in wild_sort is not enough, it might still be
+that filenames are equal _and_ the wildcard list doesn't specify
+a sort order either.  Don't call compare_section then.
+
+Tested on all targets.
+---
+ ld/ldlang.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/ld/ldlang.c b/ld/ldlang.c
+index 84a2914fc26..b5e0d026ae4 100644
+--- a/ld/ldlang.c
++++ b/ld/ldlang.c
+@@ -649,7 +649,8 @@ wild_sort (lang_wild_statement_type *wild,
+ 	 looking at the sections for this file.  */
+ 
+       /* Find the correct node to append this section.  */
+-      if (compare_section (sec->spec.sorted, section, (*tree)->section) < 0)
++      if (sec && sec->spec.sorted != none && sec->spec.sorted != by_none
++	  && compare_section (sec->spec.sorted, section, (*tree)->section) < 0)
+ 	tree = &((*tree)->left);
+       else
+ 	tree = &((*tree)->right);
+-- 
+2.31.1
diff --git a/nixpkgs/pkgs/development/tools/misc/binutils/mips64-default-n64.patch b/nixpkgs/pkgs/development/tools/misc/binutils/mips64-default-n64.patch
new file mode 100644
index 000000000000..00581279f85e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/binutils/mips64-default-n64.patch
@@ -0,0 +1,82 @@
+--- a/bfd/config.bfd
++++ b/bfd/config.bfd
+@@ -927,11 +927,21 @@ case "${targ}" in
+     targ_defvec=mips_elf32_be_vec
+     targ_selvecs="mips_elf32_le_vec mips_elf64_be_vec mips_elf64_le_vec mips_ecoff_be_vec mips_ecoff_le_vec"
+     ;;
+-  mips64*el-*-linux*)
++  mips*64*el-*-linux*-gnuabi64)
++    targ_defvec=mips_elf64_trad_le_vec
++    targ_selvecs="mips_elf32_ntrad_be_vec mips_elf32_ntrad_le_vec mips_elf32_trad_be_vec mips_elf32_trad_le_vec mips_elf64_trad_be_vec"
++    want64=true
++    ;;
++  mips*64*-*-linux*-gnuabi64)
++    targ_defvec=mips_elf64_trad_be_vec
++    targ_selvecs="mips_elf32_ntrad_be_vec mips_elf32_ntrad_le_vec mips_elf32_trad_be_vec mips_elf32_trad_le_vec mips_elf64_trad_le_vec"
++    want64=true
++    ;;
++  mips*64*el-*-linux*)
+     targ_defvec=mips_elf32_ntrad_le_vec
+     targ_selvecs="mips_elf32_ntrad_be_vec mips_elf32_trad_le_vec mips_elf32_trad_be_vec mips_elf64_trad_le_vec mips_elf64_trad_be_vec"
+     ;;
+-  mips64*-*-linux*)
++  mips*64*-*-linux*)
+     targ_defvec=mips_elf32_ntrad_be_vec
+     targ_selvecs="mips_elf32_ntrad_le_vec mips_elf32_trad_be_vec mips_elf32_trad_le_vec mips_elf64_trad_be_vec mips_elf64_trad_le_vec"
+     ;;
+--- a/binutils/testsuite/binutils-all/mips/mips-note-2-n32.d
++++ b/binutils/testsuite/binutils-all/mips/mips-note-2-n32.d
+@@ -1,4 +1,5 @@
+ #PROG: objcopy
++#as: -n32
+ #readelf: --notes --wide
+ #objcopy: --merge-notes
+ #name: MIPS merge notes section (n32)
+--- a/gas/configure
++++ b/gas/configure
+@@ -12167,6 +12167,9 @@ _ACEOF
+ 	esac
+ 	# Decide which ABI to target by default.
+ 	case ${target} in
++	  mips*64*-linux-gnuabi64)
++	    mips_default_abi=N64_ABI
++	    ;;
+ 	  mips64*-linux* | mips-sgi-irix6* | mips64*-freebsd* \
+ 	  | mips64*-kfreebsd*-gnu | mips64*-ps2-elf*)
+ 	    mips_default_abi=N32_ABI
+--- a/gas/configure.ac
++++ b/gas/configure.ac
+@@ -384,6 +384,9 @@ changequote([,])dnl
+ 	esac
+ 	# Decide which ABI to target by default.
+ 	case ${target} in
++	  mips*64*-linux-gnuabi64)
++	    mips_default_abi=N64_ABI
++	    ;;
+ 	  mips64*-linux* | mips-sgi-irix6* | mips64*-freebsd* \
+ 	  | mips64*-kfreebsd*-gnu | mips64*-ps2-elf*)
+ 	    mips_default_abi=N32_ABI
+--- a/ld/configure.tgt
++++ b/ld/configure.tgt
+@@ -543,11 +543,19 @@ mips*-*-vxworks*)	targ_emul=elf32ebmipvx
+ 			;;
+ mips*-*-windiss)	targ_emul=elf32mipswindiss
+ 			;;
+-mips64*el-*-linux-*)	targ_emul=elf32ltsmipn32
++mips*64*el-*-linux-gnuabi64)	targ_emul=elf64ltsmip
++			targ_extra_emuls="elf32btsmipn32 elf32ltsmipn32 elf32ltsmip elf32btsmip elf64btsmip"
++			targ_extra_libpath=$targ_extra_emuls
++			;;
++mips*64*el-*-linux-*)	targ_emul=elf32ltsmipn32
+ 			targ_extra_emuls="elf32btsmipn32 elf32ltsmip elf32btsmip elf64ltsmip elf64btsmip"
+ 			targ_extra_libpath=$targ_extra_emuls
+ 			;;
+-mips64*-*-linux-*)	targ_emul=elf32btsmipn32
++mips*64*-*-linux-gnuabi64)	targ_emul=elf64btsmip
++			targ_extra_emuls="elf32btsmipn32 elf32ltsmipn32 elf32btsmip elf32ltsmip elf64ltsmip"
++			targ_extra_libpath=$targ_extra_emuls
++			;;
++mips*64*-*-linux-*)	targ_emul=elf32btsmipn32
+ 			targ_extra_emuls="elf32ltsmipn32 elf32btsmip elf32ltsmip elf64btsmip elf64ltsmip"
+ 			targ_extra_libpath=$targ_extra_emuls
+ 			;;
diff --git a/nixpkgs/pkgs/development/tools/misc/binutils/plugins-no-BINDIR.patch b/nixpkgs/pkgs/development/tools/misc/binutils/plugins-no-BINDIR.patch
new file mode 100644
index 000000000000..562aad33eccd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/binutils/plugins-no-BINDIR.patch
@@ -0,0 +1,25 @@
+Avoid `lib -> out -> lib` reference. Normally `bfd-plugins` does not
+need to know binutils' BINDIR at all. It's an absolute path where
+libraries are stored.
+--- a/bfd/plugin.c
++++ b/bfd/plugin.c
+@@ -493,7 +493,7 @@ build_plugin_list (bfd *abfd)
+      when configuring binutils using --libdir.  Search in the proper
+      path first, then the old one for backwards compatibility.  */
+   static const char *path[]
+-    = { LIBDIR "/bfd-plugins", BINDIR "/../lib/bfd-plugins" };
++    = { LIBDIR "/bfd-plugins", };
+   struct stat last_st;
+   unsigned int i;
+ 
+@@ -508,9 +508,7 @@ build_plugin_list (bfd *abfd)
+   last_st.st_ino = 0;
+   for (i = 0; i < sizeof (path) / sizeof (path[0]); i++)
+     {
+-      char *plugin_dir = make_relative_prefix (plugin_program_name,
+-					       BINDIR,
+-					       path[i]);
++      char *plugin_dir = xstrdup (path[i]);
+       if (plugin_dir)
+ 	{
+ 	  struct stat st;
diff --git a/nixpkgs/pkgs/development/tools/misc/binutils/ppc-make-machine-less-strict.patch b/nixpkgs/pkgs/development/tools/misc/binutils/ppc-make-machine-less-strict.patch
new file mode 100644
index 000000000000..c2452414fc7d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/binutils/ppc-make-machine-less-strict.patch
@@ -0,0 +1,51 @@
+From cebc89b9328eab994f6b0314c263f94e7949a553 Mon Sep 17 00:00:00 2001
+From: Alan Modra <amodra@gmail.com>
+Date: Mon, 21 Feb 2022 10:58:57 +1030
+Subject: [PATCH] binutils 2.38 vs. ppc32 linux kernel
+
+Commit b25f942e18d6 made .machine more strict.  Weaken it again.
+
+	* config/tc-ppc.c (ppc_machine): Treat an early .machine specially,
+	keeping sticky options to work around gcc bugs.
+---
+ gas/config/tc-ppc.c | 25 ++++++++++++++++++++++++-
+ 1 file changed, 24 insertions(+), 1 deletion(-)
+
+diff --git a/gas/config/tc-ppc.c b/gas/config/tc-ppc.c
+index 054f9c72161..89bc7d3f9b9 100644
+--- a/gas/config/tc-ppc.c
++++ b/gas/config/tc-ppc.c
+@@ -5965,7 +5965,30 @@ ppc_machine (int ignore ATTRIBUTE_UNUSED)
+ 	     options do not count as a new machine, instead they add
+ 	     to currently selected opcodes.  */
+ 	  ppc_cpu_t machine_sticky = 0;
+-	  new_cpu = ppc_parse_cpu (ppc_cpu, &machine_sticky, cpu_string);
++	  /* Unfortunately, some versions of gcc emit a .machine
++	     directive very near the start of the compiler's assembly
++	     output file.  This is bad because it overrides user -Wa
++	     cpu selection.  Worse, there are versions of gcc that
++	     emit the *wrong* cpu, not even respecting the -mcpu given
++	     to gcc.  See gcc pr101393.  And to compound the problem,
++	     as of 20220222 gcc doesn't pass the correct cpu option to
++	     gas on the command line.  See gcc pr59828.  Hack around
++	     this by keeping sticky options for an early .machine.  */
++	  asection *sec;
++	  for (sec = stdoutput->sections; sec != NULL; sec = sec->next)
++	    {
++	      segment_info_type *info = seg_info (sec);
++	      /* Are the frags for this section perturbed from their
++		 initial state?  Even .align will count here.  */
++	      if (info != NULL
++		  && (info->frchainP->frch_root != info->frchainP->frch_last
++		      || info->frchainP->frch_root->fr_type != rs_fill
++		      || info->frchainP->frch_root->fr_fix != 0))
++		break;
++	    }
++	  new_cpu = ppc_parse_cpu (ppc_cpu,
++				   sec == NULL ? &sticky : &machine_sticky,
++				   cpu_string);
+ 	  if (new_cpu != 0)
+ 	    ppc_cpu = new_cpu;
+ 	  else
+-- 
+2.31.1
diff --git a/nixpkgs/pkgs/development/tools/misc/binutils/support-ios.patch b/nixpkgs/pkgs/development/tools/misc/binutils/support-ios.patch
new file mode 100644
index 000000000000..74e56d130ed5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/binutils/support-ios.patch
@@ -0,0 +1,168 @@
+diff --git a/bfd/config.bfd b/bfd/config.bfd
+index f04a993f06..1e24a9d030 100644
+--- a/bfd/config.bfd
++++ b/bfd/config.bfd
+@@ -238,7 +238,7 @@ case "${targ}" in
+ 
+ # START OF targmatch.h
+ #ifdef BFD64
+-  aarch64-*-darwin*)
++  aarch64-*-darwin* | aarch64-*-ios*)
+     targ_defvec=aarch64_mach_o_vec
+     targ_selvecs="arm_mach_o_vec mach_o_le_vec mach_o_be_vec mach_o_fat_vec"
+     targ_archs="$targ_archs bfd_i386_arch bfd_powerpc_arch bfd_rs6000_arch"
+@@ -358,7 +358,7 @@ case "${targ}" in
+     targ_selvecs=arc_elf32_be_vec
+     ;;
+ 
+-  arm-*-darwin*)
++  arm-*-darwin* | arm-*-ios*)
+     targ_defvec=arm_mach_o_vec
+     targ_selvecs="mach_o_le_vec mach_o_be_vec mach_o_fat_vec"
+     targ_archs="$targ_archs bfd_i386_arch bfd_powerpc_arch bfd_rs6000_arch"
+@@ -678,7 +678,7 @@ case "${targ}" in
+   i[3-7]86-*-aix*)
+     targ_defvec=i386_coff_vec
+     ;;
+-  i[3-7]86-*-darwin* | i[3-7]86-*-macos10* | i[3-7]86-*-rhapsody*)
++  i[3-7]86-*-darwin* | i[3-7]86-*-ios* | i[3-7]86-*-macos10* | i[3-7]86-*-rhapsody*)
+     targ_defvec=i386_mach_o_vec
+     targ_selvecs="mach_o_le_vec mach_o_be_vec mach_o_fat_vec pef_vec pef_xlib_vec sym_vec"
+     targ64_selvecs=x86_64_mach_o_vec
+@@ -762,7 +762,7 @@ case "${targ}" in
+     targ_defvec=x86_64_elf64_cloudabi_vec
+     want64=true
+     ;;
+-  x86_64-*-darwin*)
++  x86_64-*-darwin* | x86_64-*-ios*)
+     targ_defvec=x86_64_mach_o_vec
+     targ_selvecs="i386_mach_o_vec mach_o_le_vec mach_o_be_vec mach_o_fat_vec pef_vec pef_xlib_vec sym_vec"
+     targ_archs="$targ_archs bfd_powerpc_arch bfd_rs6000_arch"
+@@ -1402,7 +1402,7 @@ case "${targ}" in
+     targ_selvecs="powerpc_elf32_le_vec powerpc_boot_vec"
+     targ64_selvecs="powerpc_elf64_vec powerpc_elf64_le_vec"
+     ;;
+-  powerpc-*-darwin* | powerpc-*-macos10* | powerpc-*-rhapsody*)
++  powerpc-*-darwin* | powerpc-*-ios* | powerpc-*-macos10* | powerpc-*-rhapsody*)
+     targ_defvec=mach_o_be_vec
+     targ_selvecs="mach_o_be_vec mach_o_le_vec mach_o_fat_vec pef_vec pef_xlib_vec sym_vec"
+     targ_archs="$targ_archs bfd_i386_arch"
+diff --git a/configure.ac b/configure.ac
+index aae94501e4..2cceb4dad4 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -510,7 +510,7 @@ if test x$enable_libgomp = x ; then
+ 	;;
+     *-*-solaris2* | *-*-hpux11*)
+ 	;;
+-    *-*-darwin* | *-*-aix*)
++    *-*-darwin* | *-*-ios* | *-*-aix*)
+ 	;;
+     nvptx*-*-*)
+ 	;;
+@@ -700,13 +700,13 @@ esac
+ 
+ # Disable libffi for some systems.
+ case "${target}" in
+-  powerpc-*-darwin*)
++  powerpc-*-darwin* | powerpc-*-ios*)
+     ;;
+-  i[[3456789]]86-*-darwin*)
++  i[[3456789]]86-*-darwin* | i[[3456789]]86-*-ios*)
+     ;;
+-  x86_64-*-darwin[[912]]*)
++  x86_64-*-darwin[[912]]* | x86_64-*-ios[[912]]*)
+     ;;
+-  *-*-darwin*)
++  *-*-darwin* | *-*-ios*)
+     noconfigdirs="$noconfigdirs target-libffi"
+     ;;
+   *-*-netware*)
+@@ -788,7 +788,7 @@ esac
+ # Disable the go frontend on systems where it is known to not work. Please keep
+ # this in sync with contrib/config-list.mk.
+ case "${target}" in
+-*-*-darwin* | *-*-cygwin* | *-*-mingw*)
++*-*-darwin* | *-*-ios* | *-*-cygwin* | *-*-mingw*)
+     unsupported_languages="$unsupported_languages go"
+     ;;
+ esac
+@@ -797,7 +797,7 @@ esac
+ # For testing, you can easily override this with --enable-libgo.
+ if test x$enable_libgo = x; then
+     case "${target}" in
+-    *-*-darwin*)
++    *-*-darwin* | *-*-ios*)
+ 	# PR 46986
+ 	noconfigdirs="$noconfigdirs target-libgo"
+ 	;;
+@@ -916,27 +916,27 @@ esac
+ case "${target}" in
+   *-*-chorusos)
+     ;;
+-  aarch64-*-darwin*)
++  aarch64-*-darwin* | aarch64-*-ios*)
+     noconfigdirs="$noconfigdirs ld gas gdb gprof"
+     noconfigdirs="$noconfigdirs sim target-rda"
+     ;;
+-  arm-*-darwin*)
++  arm-*-darwin* | arm-*-ios*)
+     noconfigdirs="$noconfigdirs ld gas gdb gprof"
+     noconfigdirs="$noconfigdirs sim target-rda"
+     ;;
+-  powerpc-*-darwin*)
++  powerpc-*-darwin* | powerpc-*-ios*)
+     noconfigdirs="$noconfigdirs ld gas gdb gprof"
+     noconfigdirs="$noconfigdirs sim target-rda"
+     ;;
+-  i[[3456789]]86-*-darwin*)
++  i[[3456789]]86-*-darwin* | i[[3456789]]86-*-ios*)
+     noconfigdirs="$noconfigdirs ld gprof"
+     noconfigdirs="$noconfigdirs sim target-rda"
+     ;;
+-  x86_64-*-darwin[[912]]*)
++  x86_64-*-darwin[[912]]* | x86_64-*-ios[[912]]*)
+     noconfigdirs="$noconfigdirs ld gas gprof"
+     noconfigdirs="$noconfigdirs sim target-rda"
+     ;;
+-  *-*-darwin*)
++  *-*-darwin* | *-*-ios*)
+     noconfigdirs="$noconfigdirs ld gas gdb gprof"
+     noconfigdirs="$noconfigdirs sim target-rda"
+     ;;
+@@ -1226,7 +1226,7 @@ case "${host}" in
+   hppa*-*)	
+     host_makefile_frag="config/mh-pa"
+     ;;
+-  *-*-darwin*)
++  *-*-darwin* | *-*-ios*)
+     host_makefile_frag="config/mh-darwin"
+     ;;
+   powerpc-*-aix*)
+@@ -1697,7 +1697,7 @@ ACX_ELF_TARGET_IFELSE([# ELF platforms build the lto-plugin always.
+   build_lto_plugin=yes
+ ],[if test x"$default_enable_lto" = x"yes" ; then
+     case $target in
+-      *-apple-darwin[[912]]* | *-cygwin* | *-mingw* | *djgpp*) ;;
++      *-apple-darwin[[912]]* | *-apple-ios[[912]]* | *-cygwin* | *-mingw* | *djgpp*) ;;
+       # On other non-ELF platforms, LTO has yet to be validated.
+       *) enable_lto=no ;;
+     esac
+@@ -1708,7 +1708,7 @@ ACX_ELF_TARGET_IFELSE([# ELF platforms build the lto-plugin always.
+   # warn during gcc/ subconfigure; unless you're bootstrapping with
+   # -flto it won't be needed until after installation anyway.
+     case $target in
+-      *-cygwin* | *-mingw* | *-apple-darwin* | *djgpp*) ;;
++      *-cygwin* | *-mingw* | *-apple-darwin* | *-apple-ios* | *djgpp*) ;;
+       *) if test x"$enable_lto" = x"yes"; then
+ 	AC_MSG_ERROR([LTO support is not enabled for this target.])
+         fi
+@@ -2590,7 +2590,7 @@ rm -f conftest*
+ # Decide which environment variable is used to find dynamic libraries.
+ case "${host}" in
+   *-*-hpux*) RPATH_ENVVAR=SHLIB_PATH ;;
+-  *-*-darwin*) RPATH_ENVVAR=DYLD_LIBRARY_PATH ;;
++  *-*-darwin* | *-*-ios* ) RPATH_ENVVAR=DYLD_LIBRARY_PATH ;;
+   *-*-mingw* | *-*-cygwin ) RPATH_ENVVAR=PATH ;;
+   *) RPATH_ENVVAR=LD_LIBRARY_PATH ;;
+ esac
diff --git a/nixpkgs/pkgs/development/tools/misc/binutils/windres-locate-gcc.patch b/nixpkgs/pkgs/development/tools/misc/binutils/windres-locate-gcc.patch
new file mode 100644
index 000000000000..721667c62cec
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/binutils/windres-locate-gcc.patch
@@ -0,0 +1,19 @@
+diff --git a/binutils/resrc.c b/binutils/resrc.c
+index a875c3a4..0411d047 100644
+--- a/binutils/resrc.c
++++ b/binutils/resrc.c
+@@ -521,7 +521,13 @@ read_rc_file (const char *filename, const char *preprocessor,
+ 
+       cpp_pipe = 0;
+ 
+-      if (dash)
++      /* Nixpkgs specific : look first at the prefixed path
++        ( there should be no gcc in the binutils folder ) */
++      if (slash && dash) {
++        cpp_pipe = look_for_default(cmd, slash + 1, dash - slash, preprocargs, filename);
++      }
++
++      if (dash && ! cpp_pipe)
+ 	{
+ 	  /* First, try looking for a prefixed gcc in the windres
+ 	     directory, with the same prefix as windres */
diff --git a/nixpkgs/pkgs/development/tools/misc/blackfire/default.nix b/nixpkgs/pkgs/development/tools/misc/blackfire/default.nix
new file mode 100644
index 000000000000..a55f0d0edea9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/blackfire/default.nix
@@ -0,0 +1,105 @@
+{ stdenv
+, lib
+, fetchurl
+, dpkg
+, writeShellScript
+, curl
+, jq
+, common-updater-scripts
+}:
+
+stdenv.mkDerivation rec {
+  pname = "blackfire";
+  version = "2.25.0";
+
+  src = passthru.sources.${stdenv.hostPlatform.system} or (throw "Unsupported platform for blackfire: ${stdenv.hostPlatform.system}");
+
+  nativeBuildInputs = lib.optionals stdenv.isLinux [
+    dpkg
+  ];
+
+  dontUnpack = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    if ${ lib.boolToString stdenv.isLinux }
+    then
+      dpkg-deb -x $src $out
+      mv $out/usr/* $out
+      rmdir $out/usr
+
+      # Fix ExecStart path and replace deprecated directory creation method,
+      # use dynamic user.
+      substituteInPlace "$out/lib/systemd/system/blackfire-agent.service" \
+        --replace '/usr/' "$out/" \
+        --replace 'ExecStartPre=/bin/mkdir -p /var/run/blackfire' 'RuntimeDirectory=blackfire' \
+        --replace 'ExecStartPre=/bin/chown blackfire: /var/run/blackfire' "" \
+        --replace 'User=blackfire' 'DynamicUser=yes' \
+        --replace 'PermissionsStartOnly=true' ""
+
+      # Modernize socket path.
+      substituteInPlace "$out/etc/blackfire/agent" \
+        --replace '/var/run' '/run'
+    else
+      mkdir $out
+
+      tar -zxvf $src
+
+      mv etc $out
+      mv usr/* $out
+    fi
+
+    runHook postInstall
+  '';
+
+  passthru = {
+    sources = {
+      "x86_64-linux" = fetchurl {
+        url = "https://packages.blackfire.io/debian/pool/any/main/b/blackfire/blackfire_${version}_amd64.deb";
+        sha256 = "F3OkFTHPO6zBOYu2umAQIPW7CQ+K+J2/mmL98H2xaCg=";
+      };
+      "i686-linux" = fetchurl {
+        url = "https://packages.blackfire.io/debian/pool/any/main/b/blackfire/blackfire_${version}_i386.deb";
+        sha256 = "/rDH9dzSlqDSqkIHzDy/8rJQ+Ow9SAPn+/oRGP37lL8=";
+      };
+      "aarch64-linux" = fetchurl {
+        url = "https://packages.blackfire.io/debian/pool/any/main/b/blackfire/blackfire_${version}_arm64.deb";
+        sha256 = "2fjRPrl9SYCS32lO4bFLam4IrigMjucVc/OVg4yrWsM=";
+      };
+      "aarch64-darwin" = fetchurl {
+        url = "https://packages.blackfire.io/blackfire/${version}/blackfire-darwin_arm64.pkg.tar.gz";
+        sha256 = "GYjKOUDLCHPkI5k4nt2NB/R8IJhLP+4VNifEhRSsnu8=";
+      };
+      "x86_64-darwin" = fetchurl {
+        url = "https://packages.blackfire.io/blackfire/${version}/blackfire-darwin_amd64.pkg.tar.gz";
+        sha256 = "/Uvwq3wxbIT0kqKJJfh9W55EguUoBdTQ426FI0XOD0o=";
+      };
+    };
+
+    updateScript = writeShellScript "update-blackfire" ''
+      set -o errexit
+      export PATH="${lib.makeBinPath [ curl jq common-updater-scripts ]}"
+      NEW_VERSION=$(curl -s https://blackfire.io/api/v1/releases | jq .cli --raw-output)
+
+      if [[ "${version}" = "$NEW_VERSION" ]]; then
+          echo "The new version same as the old version."
+          exit 0
+      fi
+
+      for platform in ${lib.escapeShellArgs meta.platforms}; do
+        update-source-version "blackfire" "0" "${lib.fakeSha256}" --source-key="sources.$platform"
+        update-source-version "blackfire" "$NEW_VERSION" --source-key="sources.$platform"
+      done
+    '';
+  };
+
+  meta = with lib; {
+    description = "Blackfire Profiler agent and client";
+    homepage = "https://blackfire.io/";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    maintainers = with maintainers; [ shyim ];
+    platforms = [ "x86_64-linux" "aarch64-linux" "i686-linux" "x86_64-darwin" "aarch64-darwin" ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/blackfire/php-probe.nix b/nixpkgs/pkgs/development/tools/misc/blackfire/php-probe.nix
new file mode 100644
index 000000000000..f960749bd708
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/blackfire/php-probe.nix
@@ -0,0 +1,161 @@
+{ stdenv
+, lib
+, fetchurl
+, autoPatchelfHook
+, php
+, writeShellScript
+, curl
+, jq
+, common-updater-scripts
+}:
+
+assert lib.assertMsg (!php.ztsSupport) "blackfire only supports non zts versions of PHP";
+
+let
+  phpMajor = lib.versions.majorMinor php.version;
+
+  version = "1.92.9";
+
+  hashes = {
+    "x86_64-linux" = {
+      system = "amd64";
+      hash = {
+        "8.1" = "sha256-pvJHzqhpKdLyWexqCdynOXIoIkb6WPFogQzzdGSl0Go=";
+        "8.2" = "sha256-M2ihNS2IK0tO+lXXSrJZLguRzyrV8q/45gmK0pfxjuo=";
+        "8.3" = "sha256-v4vt0GkM8pbZ+zJrNqu+h1TM680RpnCQwNDyFFD/vuE=";
+      };
+    };
+    "i686-linux" = {
+      system = "i386";
+      hash = {
+        "8.1" = "sha256-+IrL8OGjny+FPLNNj0N0oJGSuUA9nZFBkalW6qbBtbI=";
+        "8.2" = "sha256-z5oFFh+0spuku+nZf9ICL17upLHoA2k6StAmVpKIxyw=";
+        "8.3" = "sha256-1maDNZb92ptbbiIUZxwEBNk6oQPf6f2LVHvsXrpmdQ8=";
+      };
+    };
+    "aarch64-linux" = {
+      system = "arm64";
+      hash = {
+        "8.1" = "sha256-apIHM85SDtdrNy2zkgue4nLS+IYg0aqO67tjt3iPMvQ=";
+        "8.2" = "sha256-vafJYIXksjQXNOufSNsRCBOkhh9Da1sp0X1JJtH0wNM=";
+        "8.3" = "sha256-JTfFszym+zq4U2V1HOkGB41OR/mt7GotHo1HThjLEV0=";
+      };
+    };
+    "aarch64-darwin" = {
+      system = "arm64";
+      hash = {
+        "8.1" = "sha256-zj4oSpW2ubEdk5n8FjQF4oOWcjMd5V1G5ul8kHj/fyU=";
+        "8.2" = "sha256-aedyASZs4Sy0CEX9Y5qjJnzzcvUdO9eYg9nZXrOcVnI=";
+        "8.3" = "sha256-Sla+W+dz2foTnF3ys4MIcnP0FnSjiyWHfsMW0+Vhkpw=";
+      };
+    };
+    "x86_64-darwin" = {
+      system = "amd64";
+      hash = {
+        "8.1" = "sha256-YorZctBEUgPHnoXtcf8xkn6DfhM1BZnBNpfi5o7y0AM=";
+        "8.2" = "sha256-5zmwJu1Ux5vebFeu1WMHRCKalB/qgm3/G74OPrd7nhc=";
+        "8.3" = "sha256-vm2VK3jPR25ICxiKMqzh9DyzG9EVJ/rX3i7LQMox3gs=";
+      };
+    };
+  };
+
+  makeSource = { system, phpMajor }:
+    let
+      isLinux = builtins.match ".+-linux" system != null;
+    in
+    assert !isLinux -> (phpMajor != null);
+    fetchurl {
+      url = "https://packages.blackfire.io/binaries/blackfire-php/${version}/blackfire-php-${if isLinux then "linux" else "darwin"}_${hashes.${system}.system}-php-${builtins.replaceStrings [ "." ] [ "" ] phpMajor}.so";
+      hash = hashes.${system}.hash.${phpMajor};
+    };
+in
+stdenv.mkDerivation (finalAttrs: {
+  pname = "php-blackfire";
+  extensionName = "blackfire";
+  inherit version;
+
+  src = makeSource {
+    system = stdenv.hostPlatform.system;
+    inherit phpMajor;
+  };
+
+  nativeBuildInputs = lib.optionals stdenv.isLinux [
+    autoPatchelfHook
+  ];
+
+  sourceRoot = ".";
+
+  dontUnpack = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    install -D ${finalAttrs.src} $out/lib/php/extensions/blackfire.so
+
+    runHook postInstall
+  '';
+
+  passthru = {
+    updateScript = writeShellScript "update-${finalAttrs.pname}" ''
+      set -o errexit
+      export PATH="${lib.makeBinPath [ curl jq common-updater-scripts ]}"
+      NEW_VERSION=$(curl --silent https://blackfire.io/api/v1/releases | jq .probe.php --raw-output)
+
+      if [[ "${version}" = "$NEW_VERSION" ]]; then
+          echo "The new version same as the old version."
+          exit 0
+      fi
+
+      for source in ${lib.concatStringsSep " " (builtins.attrNames finalAttrs.passthru.updateables)}; do
+        update-source-version "$UPDATE_NIX_ATTR_PATH.updateables.$source" "0" "sha256-${lib.fakeSha256}"
+        update-source-version "$UPDATE_NIX_ATTR_PATH.updateables.$source" "$NEW_VERSION"
+      done
+    '';
+
+    # All sources for updating by the update script.
+    updateables =
+      let
+        createName = path:
+          builtins.replaceStrings [ "." ] [ "_" ] (lib.concatStringsSep "_" path);
+
+        createSourceParams = path:
+          let
+            # The path will be either [«system» sha256], or [«system» sha256 «phpMajor» «zts»],
+            # Let’s skip the sha256.
+            rest = builtins.tail (builtins.tail path);
+          in
+          {
+            system =
+              builtins.head path;
+            phpMajor =
+              if builtins.length rest == 0
+              then null
+              else builtins.head rest;
+          };
+
+        createUpdateable = path: _value:
+          lib.nameValuePair
+            (createName path)
+            (finalAttrs.finalPackage.overrideAttrs (attrs: {
+              src = makeSource (createSourceParams path);
+            }));
+
+        # Filter out all attributes other than hashes.
+        hashesOnly = lib.filterAttrsRecursive (name: _value: name != "system") hashes;
+      in
+      builtins.listToAttrs
+        # Collect all leaf attributes (containing hashes).
+        (lib.collect
+          (attrs: attrs ? name)
+          (lib.mapAttrsRecursive createUpdateable hashesOnly));
+  };
+
+  meta = {
+    description = "Blackfire Profiler PHP module";
+    homepage = "https://blackfire.io/";
+    license = lib.licenses.unfree;
+    maintainers = with lib.maintainers; [ shyim ];
+    platforms = [ "x86_64-linux" "aarch64-linux" "i686-linux" "x86_64-darwin" "aarch64-darwin" ];
+    sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/misc/bonnmotion/default.nix b/nixpkgs/pkgs/development/tools/misc/bonnmotion/default.nix
new file mode 100644
index 000000000000..cdd583bf4484
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/bonnmotion/default.nix
@@ -0,0 +1,54 @@
+{ stdenv, lib, fetchzip, substituteAll, bash, jre }:
+
+stdenv.mkDerivation rec {
+  pname = "bonnmotion";
+  version = "3.0.1";
+
+  src = fetchzip {
+    url = "https://sys.cs.uos.de/bonnmotion/src/bonnmotion-${version}.zip";
+    sha256 = "16bjgr0hy6an892m5r3x9yq6rqrl11n91f9rambq5ik1cxjqarxw";
+  };
+
+  patches = [
+    # The software has a non-standard install bash script which kind of works.
+    # However, to make it fully functional, the automatically detection of the
+    # program paths must be substituted with full paths.
+    (substituteAll {
+      src = ./install.patch;
+      inherit bash jre;
+    })
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    ./install
+
+    mkdir -p $out/bin $out/share/bonnmotion
+    cp -r ./classes ./lib $out/share/bonnmotion/
+    cp ./bin/bm $out/bin/
+
+    substituteInPlace $out/bin/bm \
+      --replace /build/source $out/share/bonnmotion
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "A mobility scenario generation and analysis tool";
+    longDescription = ''
+      BonnMotion is a Java software which creates and analyzes mobility
+      scenarios and is most commonly used as a tool for the investigation of
+      mobile ad hoc network characteristics. The scenarios can also be exported
+      for several network simulators, such as ns-2, ns-3, GloMoSim/QualNet,
+      COOJA, MiXiM, and ONE.
+    '';
+    homepage = "https://sys.cs.uos.de/bonnmotion/";
+    sourceProvenance = with sourceTypes; [
+      fromSource
+      binaryBytecode  # source bundles dependency jars
+    ];
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ oxzi ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/bonnmotion/install.patch b/nixpkgs/pkgs/development/tools/misc/bonnmotion/install.patch
new file mode 100644
index 000000000000..86be99b3dd5e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/bonnmotion/install.patch
@@ -0,0 +1,75 @@
+diff --git a/install b/install
+index 95afa2c..70c5fca 100755
+--- a/install
++++ b/install
+@@ -1,4 +1,4 @@
+-#!/bin/bash
++#!@bash@/bin/bash
+ 
+ echo "BonnMotion - a mobility scenario generation and analysis tool"
+ echo "Copyright (C) 2002-2012 University of Bonn"
+@@ -19,28 +19,11 @@ echo "along with this program; if not, write to the Free Software"
+ echo "Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA"
+ echo
+ 
+-OS=`uname -s | tr A-Z a-z | sed -e s/_.\*//`
+-
+ PACKAGE=edu.bonn.cs.iv.bonnmotion
+-JAVAPATH=`which java 2> /dev/null`
+-if [ ! "$JAVAPATH" = "" ]
+-then
+-	JAVAPATH=`dirname ${JAVAPATH}`
+-fi
+-echo -n Please enter your Java binary path \[$JAVAPATH\]:\ 
+-read KBDENTRY
+-if [ ! "$KBDENTRY" = "" ]
+-then
+-	JAVAPATH=$KBDENTRY
+-fi
++JAVAPATH="@jre@/bin"
+ if [ -x "${JAVAPATH}/java" ]
+ then
+-	cd `dirname $0`
+-	BONNMOTION=`pwd`
+-
+-	cd "${JAVAPATH}"
+-	JAVAPATH=`pwd`
+-	cd "${BONNMOTION}"
++  BONNMOTION="$(realpath .)"
+ 
+ 	CLASSPATH="${BONNMOTION}/classes"
+ 	DOCPATH="${BONNMOTION}/javadoc"
+@@ -52,14 +35,7 @@ then
+ 	then
+ 		mkdir "${DOCPATH}"
+ 	fi
+-	if [ $OS = "cygwin" ]
+-	then
+-		cd "${CLASSPATH}"
+-		CLASSPATH=`cmd.exe /c cd`
+-		cd "${DOCPATH}"
+-		DOCPATH=`cmd.exe /c cd`
+-	fi
+-	
++
+ 	for l in $BONNMOTION/lib/*.jar
+ 	do
+ 		LIBRARYPATH=$LIBRARYPATH:$l
+@@ -69,7 +45,7 @@ then
+ 	APPS=`ls`
+ 	cd "${BONNMOTION}/bin"
+ 
+-	echo \#\!/bin/bash > .head
++	echo \#\!@bash@/bin/bash > .head
+ 	echo >> .head
+ 	echo BONNMOTION=\"$BONNMOTION\" >> .head
+ 	echo PACKAGE=\"$PACKAGE\" >> .head
+@@ -103,8 +79,6 @@ then
+ 	fi
+ 	echo "done."
+ 	echo
+-	echo "$ ./bin/bm -h"
+-	./bm
+ else
+ 	echo No executable \"$JAVAPATH/java\", aborting.
+ fi
diff --git a/nixpkgs/pkgs/development/tools/misc/bsdbuild/default.nix b/nixpkgs/pkgs/development/tools/misc/bsdbuild/default.nix
new file mode 100644
index 000000000000..e3bfc958437a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/bsdbuild/default.nix
@@ -0,0 +1,68 @@
+{ lib, stdenv, fetchurl, perl, libtool, pkg-config, gettext, mandoc, ed }:
+
+stdenv.mkDerivation rec {
+  pname = "bsdbuild";
+  version = "3.1";
+
+  src = fetchurl {
+    url = "http://stable.hypertriton.com/bsdbuild/${pname}-${version}.tar.gz";
+    sha256 = "1zrdjh7a6z4khhfw9zrp490afq306cpl5v8wqz2z55ys7k1n5ifl";
+  };
+
+  buildInputs = [ perl mandoc ed ];
+  nativeBuildInputs = [ pkg-config libtool gettext ];
+
+  prePatch = ''
+    #ignore unfamiliar flags
+    substituteInPlace configure \
+      --replace '--sbindir=*' '--sbindir=* | --includedir=* | --oldincludedir=*'
+    #same for packages using bsdbuild
+    substituteInPlace mkconfigure.pl \
+      --replace '--sbindir=*' '--sbindir=* | --includedir=* | --oldincludedir=*'
+    #insert header for missing NULL macro
+    for f in db4.pm sdl_ttf.pm mysql.pm uim.pm strlcpy.pm getpwuid.pm \
+      getaddrinfo.pm strtoll.pm free_null.pm getpwnam_r.pm \
+      gettimeofday.pm gethostbyname.pm xinerama.pm strsep.pm \
+      fontconfig.pm gettext.pm pthreads.pm strlcat.pm kqueue.pm wgl.pm \
+      alsa.pm crypt.pm cracklib.pm freesg-rg.pm edacious.pm mmap.pm \
+      agar.pm x11.pm x11.pm execvp.pm agar-core.pm dyld.pm getopt.pm \
+      strtold.pm sdl_image.pm shl_load.pm glx.pm percgi.pm timerfd.pm \
+      glob.pm dlopen.pm freesg.pm csidl.pm perl.pm select.pm \
+      portaudio.pm etubestore.pm;
+    do
+ed -s -v BSDBuild/$f << EOF
+/#include
+i
+#include <stddef.h>
+.
+w
+EOF
+    done
+  '';
+
+  configureFlags = [
+    "--with-libtool=${libtool}/bin/libtool"
+    "--enable-nls=yes"
+    "--with-gettext=${gettext}"
+    "--with-manpages=yes"
+  ];
+
+  meta = {
+    homepage = "http://bsdbuild.hypertriton.com";
+    description = "A cross-platform build system";
+
+    longDescription = ''
+      BSDBuild is a cross-platform build system. Derived from the
+      traditional 4.4BSD make libraries, BSDBuild allows BSD-style
+      Makefiles (without BSD make extensions), and works natively
+      under most operating systems and make flavors. Since BSDBuild
+      is implemented as a library (as opposed to a macro package),
+      Makefiles are edited directly, as opposed to being compiled
+      (however, if the build directory is separate from the source
+      directory, BSDBuild will produce the required Makefiles in place).
+    '';
+
+    license = lib.licenses.bsd3;
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/c2ffi/default.nix b/nixpkgs/pkgs/development/tools/misc/c2ffi/default.nix
new file mode 100644
index 000000000000..6db9557c6e1b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/c2ffi/default.nix
@@ -0,0 +1,56 @@
+{ lib
+, fetchFromGitHub
+, cmake
+, llvmPackages_11
+, unstableGitUpdater
+}:
+
+let
+  c2ffiBranch = "llvm-11.0.0";
+  llvmPackages = llvmPackages_11;
+in
+
+llvmPackages.stdenv.mkDerivation {
+  pname = "c2ffi-${c2ffiBranch}";
+  version = "unstable-2021-06-15";
+
+  src = fetchFromGitHub {
+    owner = "rpav";
+    repo = "c2ffi";
+    rev = "f50243926a0afb589de1078a073ac08910599582";
+    sha256 = "UstGicFzFY0/Jge5HGYTPwYSnh9OUBY5346ObZYfR54=";
+  };
+
+  passthru.updateScript = unstableGitUpdater {
+    url = "https://github.com/rpav/c2ffi.git";
+    branch = c2ffiBranch;
+  };
+
+  nativeBuildInputs = [
+    cmake
+  ];
+
+  buildInputs = [
+    llvmPackages.llvm
+    llvmPackages.clang
+    llvmPackages.libclang
+  ];
+
+  # This isn't much, but...
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/c2ffi --help 2>&1 >/dev/null
+  '';
+
+  # LLVM may be compiled with -fno-rtti, so let's just turn it off.
+  # A mismatch between lib{clang,LLVM}* and us can lead to the link time error:
+  # undefined reference to `typeinfo for clang::ASTConsumer'
+  CXXFLAGS="-fno-rtti";
+
+  meta = with lib; {
+    homepage = "https://github.com/rpav/c2ffi";
+    description = "An LLVM based tool for extracting definitions from C, C++, and Objective C header files for use with foreign function call interfaces";
+    license = licenses.lgpl21Only;
+    maintainers = with maintainers; [ attila-lendvai ];
+ };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/catppuccin-catwalk/default.nix b/nixpkgs/pkgs/development/tools/misc/catppuccin-catwalk/default.nix
new file mode 100644
index 000000000000..848ead3d7ed4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/catppuccin-catwalk/default.nix
@@ -0,0 +1,48 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, rustPlatform
+, installShellFiles
+, pkg-config
+, libwebp
+}:
+
+rustPlatform.buildRustPackage {
+  pname = "catppuccin-catwalk";
+  version = "0.1.0";
+
+  src = fetchFromGitHub {
+    owner = "catppuccin";
+    repo = "toolbox";
+    rev = "b38153e94622bab574224bb24a6ae953b3a849da";
+    hash = "sha256-zZRl6Xem41pBQmEoK24YR4TKiQ84nU5phBih2TF8G8g=";
+  };
+
+  buildAndTestSubdir = "catwalk";
+  cargoHash = "sha256-KoxivYLzJEjWbxIkizrMpmVwUF7bfVxl13H774lzQRg=";
+
+  nativeBuildInputs = [ installShellFiles pkg-config ];
+  buildInputs = [ libwebp ];
+
+  postInstall = ''
+    installShellCompletion --cmd catwalk \
+      --bash <("$out/bin/catwalk" completion bash) \
+      --zsh <("$out/bin/catwalk" completion zsh) \
+      --fish <("$out/bin/catwalk" completion fish)
+  '';
+
+  doInstallCheck = !stdenv.hostPlatform.isStatic && stdenv.hostPlatform.isElf;
+  installCheckPhase = ''
+    runHook preInstallCheck
+    readelf -a $out/bin/catwalk | grep -F 'Shared library: [libwebp.so'
+    runHook postInstallCheck
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/catppuccin/toolbox/tree/main/catwalk";
+    description = "A CLI for Catppuccin that takes in four showcase images and displays them all at once";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ryanccn ];
+    mainProgram = "catwalk";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/cbrowser/backslashes-quotes.diff b/nixpkgs/pkgs/development/tools/misc/cbrowser/backslashes-quotes.diff
new file mode 100644
index 000000000000..cc42f0745da5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/cbrowser/backslashes-quotes.diff
@@ -0,0 +1,49 @@
+Based on this:
+http://sourceforge.net/tracker/?func=detail&aid=1493886&group_id=5152&atid=305152
+fix the infinite loops in quote highlight - ID: 1493886
+
+--- cbrowser-0.8-2/ftcllib.tcl	2000-07-04 01:17:43.000000000 +0200
++++ cbrowser-0.8/ftcllib.tcl	2006-05-24 00:39:18.833762522 +0200
+@@ -1290,13 +1290,39 @@
+   foreach {start end} [concat 1.0 [$widget tag ranges comment] end] {
+ 
+     while {[set temp [$widget search -regexp -- $pattern $start $end]] != ""} {
++      set startquote [$widget index "$temp + 1chars"]
+ 
+-      set endquote [$widget search -regexp -- {[^\\]\"} "$temp + 1chars" $end]
++      set temp [$widget index "$startquote + 1chars"]
++      while {1==1} {
++        set endquote [$widget search -regexp -- {\"} $temp $end]
++
++	# The program will not break if a /*C comment*/ is between C quotes.
++	if { $endquote == "" } {
++	  set endquote $startquote
++	  break
++	}
++
++        # look for double backslashes
++	if {[set temp2 [$widget search -regexp -- {\\\\} $temp $endquote]] != ""} {
++	  set temp "$temp2 + 2chars"
++	  continue
++	}
++        
++        # look for \"
++	if {[set temp2 [$widget search -regexp -- {\\\"} $temp $endquote]] != ""} {
++	  set temp "$temp2 + 2chars"
++	  continue
++	}
++
++	break
++      }
+ 
+       if {[strlen $endquote] > 0} {
+-        set start [$widget index "$endquote + 2chars"]
++        set start [$widget index "$endquote + 1chars"]
+ 
+-        $widget tag add quote "$temp + 1chars" $start
++        $widget tag add quote $startquote $start
++      } else {
++        set start [$widget index "$start + 1chars"]
+       }
+     }
+   }
diff --git a/nixpkgs/pkgs/development/tools/misc/cbrowser/default.nix b/nixpkgs/pkgs/development/tools/misc/cbrowser/default.nix
new file mode 100644
index 000000000000..a8f6e32f1e08
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/cbrowser/default.nix
@@ -0,0 +1,36 @@
+{ fetchurl, lib, stdenv, tk, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "cbrowser";
+  version = "0.8";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "1050mirjab23qsnq3lp3a9vwcbavmh9kznzjm7dr5vkx8b7ffcji";
+  };
+
+  patches = [ ./backslashes-quotes.diff ];
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ tk ];
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/${pname}-${version}
+    cp -R * $out/share/${pname}-${version}/
+
+    makeWrapper $out/share/${pname}-${version}/cbrowser $out/bin/cbrowser \
+      --prefix PATH : ${tk}/bin
+  '';
+
+  meta = {
+    description = "Tcl/Tk GUI front-end to cscope";
+
+    license = lib.licenses.gpl2Plus;
+
+    homepage = "https://sourceforge.net/projects/cbrowser/";
+
+    maintainers = with lib.maintainers; [viric];
+
+    platforms = with lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/cflow/default.nix b/nixpkgs/pkgs/development/tools/misc/cflow/default.nix
new file mode 100644
index 000000000000..ab9966c6fca6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/cflow/default.nix
@@ -0,0 +1,51 @@
+{ lib, stdenv, fetchurl, gettext, emacs }:
+
+stdenv.mkDerivation rec {
+  pname = "cflow";
+  version = "1.7";
+
+  src = fetchurl {
+    url = "mirror://gnu/${pname}/${pname}-${version}.tar.bz2";
+    sha256 = "sha256-0BFGyvkAHiZhM0F8KoJYpktfwW/LCCoU9lKCBNDJcIY=";
+  };
+
+  patchPhase = ''
+    substituteInPlace "src/cflow.h"					\
+      --replace "/usr/bin/cpp"						\
+                "$(cat ${stdenv.cc}/nix-support/orig-cc)/bin/cpp"
+  '';
+
+  buildInputs = [ gettext ] ++
+    # We don't have Emacs/GTK/etc. on {Dar,Cyg}win.
+    lib.optional
+      (! (lib.lists.any (x: stdenv.hostPlatform.system == x)
+              [ "i686-cygwin" ]))
+      emacs;
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "Tool to analyze the control flow of C programs";
+
+    longDescription = ''
+      GNU cflow analyzes a collection of C source files and prints a
+      graph, charting control flow within the program.
+
+      GNU cflow is able to produce both direct and inverted flowgraphs
+      for C sources.  Optionally a cross-reference listing can be
+      generated.  Two output formats are implemented: POSIX and GNU
+      (extended).
+
+      The package also provides Emacs major mode for examining the
+      produced flowcharts in Emacs.
+    '';
+
+    license = licenses.gpl3Plus;
+
+    homepage = "https://www.gnu.org/software/cflow/";
+
+    maintainers = [ maintainers.vrthra ];
+
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/cgdb/default.nix b/nixpkgs/pkgs/development/tools/misc/cgdb/default.nix
new file mode 100644
index 000000000000..62d26c09e514
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/cgdb/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchurl, ncurses, readline, flex, texinfo }:
+
+stdenv.mkDerivation rec {
+  pname = "cgdb";
+  version = "0.8.0";
+
+  src = fetchurl {
+    url = "https://cgdb.me/files/${pname}-${version}.tar.gz";
+    sha256 = "sha256-DTi1JNN3JXsQa61thW2K4zBBQOHuJAhTQ+bd8bZYEfE=";
+  };
+
+  buildInputs = [ ncurses readline flex texinfo ];
+
+  meta = with lib; {
+    description = "A curses interface to gdb";
+
+    homepage = "https://cgdb.github.io/";
+
+    license = licenses.gpl2Plus;
+
+    platforms = with platforms; linux ++ cygwin;
+    maintainers = with maintainers; [ vrthra ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/checkbashisms/default.nix b/nixpkgs/pkgs/development/tools/misc/checkbashisms/default.nix
new file mode 100644
index 000000000000..b648a082fa3f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/checkbashisms/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, fetchurl, perl, installShellFiles }:
+stdenv.mkDerivation rec {
+  version = "2.22.1";
+  pname = "checkbashisms";
+
+  src = fetchurl {
+    url = "mirror://debian/pool/main/d/devscripts/devscripts_${version}.tar.xz";
+    hash = "sha256-Nd1eYCnSe+NblujG44uKpvunkaITcdrC3g+M3uX+M9U=";
+  };
+
+  nativeBuildInputs = [ installShellFiles ];
+  buildInputs = [ perl ];
+
+  buildPhase = ''
+    runHook preBuild
+
+    substituteInPlace ./scripts/checkbashisms.pl \
+      --replace '###VERSION###' "$version"
+
+    runHook postBuild
+  '';
+  installPhase = ''
+    runHook preInstall
+
+    installManPage scripts/$pname.1
+    installShellCompletion --bash --name $pname scripts/$pname.bash_completion
+    install -D -m755 scripts/$pname.pl $out/bin/$pname
+
+    runHook postInstall
+  '';
+
+  meta = {
+    homepage = "https://sourceforge.net/projects/checkbaskisms/";
+    description = "Check shell scripts for non-portable syntax";
+    license = lib.licenses.gpl2Plus;
+    maintainers = with lib.maintainers; [ kaction ];
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/chrpath/default.nix b/nixpkgs/pkgs/development/tools/misc/chrpath/default.nix
new file mode 100644
index 000000000000..97da80cc7339
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/chrpath/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "chrpath";
+  version = "0.16";
+
+  src = fetchurl {
+    url = "https://alioth-archive.debian.org/releases/${pname}/${pname}/${version}/${pname}-${version}.tar.gz";
+    sha256 = "0yvfq891mcdkf8g18gjjkn2m5rvs8z4z4cl1vwdhx6f2p9a4q3dv";
+  };
+
+  meta = with lib; {
+    description = "Command line tool to adjust the RPATH or RUNPATH of ELF binaries";
+    longDescription = ''
+      chrpath changes, lists or removes the rpath or runpath setting in a
+      binary. The rpath, or runpath if it is present, is where the runtime
+      linker should look for the libraries needed for a program.
+    '';
+    homepage = "https://tracker.debian.org/pkg/chrpath";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/chruby-fish/default.nix b/nixpkgs/pkgs/development/tools/misc/chruby-fish/default.nix
new file mode 100644
index 000000000000..6268c740e212
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/chruby-fish/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, lib, fetchFromGitHub, chruby }:
+
+stdenv.mkDerivation rec {
+  pname = "chruby-fish";
+  version = "0.8.2";
+
+  src = fetchFromGitHub {
+    owner = "JeanMertz";
+    repo = "chruby-fish";
+    rev = "v${version}";
+    sha256 = "15q0ywsn9pcypbpvlq0wb41x4igxm9bsvhg9a05dqw1n437qjhyb";
+  };
+
+  postInstall = ''
+    sed -i -e '1iset CHRUBY_ROOT ${chruby}' $out/share/chruby/auto.fish
+    sed -i -e '1iset CHRUBY_ROOT ${chruby}' $out/share/chruby/chruby.fish
+  '';
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  meta = {
+    description = "Thin wrapper around chruby to make it work with the Fish shell";
+    homepage = "https://github.com/JeanMertz/chruby-fish";
+    license = lib.licenses.mit;
+    platforms = lib.platforms.all;
+    maintainers = [ lib.maintainers.cohei ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/chruby/default.nix b/nixpkgs/pkgs/development/tools/misc/chruby/default.nix
new file mode 100644
index 000000000000..31e7134e7e87
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/chruby/default.nix
@@ -0,0 +1,44 @@
+{ stdenv, lib, fetchFromGitHub, runCommand, rubies ? null }:
+
+let
+  rubiesEnv = runCommand "chruby-env" { preferLocalBuild = true; } ''
+    mkdir $out
+    ${lib.concatStrings
+        (lib.mapAttrsToList (name: path: "ln -s ${path} $out/${name}\n") rubies)}
+  '';
+
+in stdenv.mkDerivation rec {
+  pname = "chruby";
+
+  version = "0.3.9";
+
+  src = fetchFromGitHub {
+    owner = "postmodern";
+    repo = "chruby";
+    rev = "v${version}";
+    sha256 = "1894g6fymr8kra9vwhbmnrcr58l022mcd7g9ans4zd3izla2j3gx";
+  };
+
+  patches = lib.optionalString (rubies != null) [
+    ./env.patch
+  ];
+
+  postPatch = lib.optionalString (rubies != null) ''
+    substituteInPlace share/chruby/chruby.sh --replace "@rubiesEnv@" ${rubiesEnv}
+  '';
+
+  installPhase = ''
+    mkdir $out
+    cp -r bin $out
+    cp -r share $out
+  '';
+
+  meta = with lib; {
+    description = "Changes the current Ruby";
+    homepage = "https://github.com/postmodern/chruby";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ];
+    mainProgram = "chruby-exec";
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/chruby/env.patch b/nixpkgs/pkgs/development/tools/misc/chruby/env.patch
new file mode 100644
index 000000000000..6a4ef8b73497
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/chruby/env.patch
@@ -0,0 +1,12 @@
+diff --git a/share/chruby/chruby.sh b/share/chruby/chruby.sh
+--- a/share/chruby/chruby.sh
++++ b/share/chruby/chruby.sh
+@@ -1,7 +1,7 @@
+ CHRUBY_VERSION="0.3.8"
+ RUBIES=()
+ 
+-for dir in "$PREFIX/opt/rubies" "$HOME/.rubies"; do
++for dir in @rubiesEnv@; do
+ 	[[ -d "$dir" && -n "$(ls -A "$dir")" ]] && RUBIES+=("$dir"/*)
+ done
+ unset dir
diff --git a/nixpkgs/pkgs/development/tools/misc/circleci-cli/default.nix b/nixpkgs/pkgs/development/tools/misc/circleci-cli/default.nix
new file mode 100644
index 000000000000..6e26a71ff38d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/circleci-cli/default.nix
@@ -0,0 +1,41 @@
+{ lib, fetchFromGitHub, buildGoModule, installShellFiles }:
+
+buildGoModule rec {
+  pname = "circleci-cli";
+  version = "0.1.29936";
+
+  src = fetchFromGitHub {
+    owner = "CircleCI-Public";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-PJy2kg727ZEsEbQzR5EE8SeYfM1ZqaIbS2FZxewn5J0=";
+  };
+
+  vendorHash = "sha256-mDpuoKOW2/PexZ/yJeQ2yzCjoKfD23J36pZ5BPDo/mg=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  doCheck = false;
+
+  ldflags = [ "-s" "-w" "-X github.com/CircleCI-Public/circleci-cli/version.Version=${version}" "-X github.com/CircleCI-Public/circleci-cli/version.Commit=${src.rev}" "-X github.com/CircleCI-Public/circleci-cli/version.packageManager=nix" ];
+
+  postInstall = ''
+    mv $out/bin/circleci-cli $out/bin/circleci
+
+    installShellCompletion --cmd circleci \
+      --bash <(HOME=$TMPDIR $out/bin/circleci completion bash --skip-update-check) \
+      --zsh <(HOME=$TMPDIR $out/bin/circleci completion zsh --skip-update-check)
+  '';
+
+  meta = with lib; {
+    # Box blurb edited from the AUR package circleci-cli
+    description = ''
+      Command to enable you to reproduce the CircleCI environment locally and
+      run jobs as if they were running on the hosted CirleCI application.
+    '';
+    maintainers = with maintainers; [ synthetica ];
+    mainProgram = "circleci";
+    license = licenses.mit;
+    homepage = "https://circleci.com/";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/cl-launch/default.nix b/nixpkgs/pkgs/development/tools/misc/cl-launch/default.nix
new file mode 100644
index 000000000000..35cfd01ff925
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/cl-launch/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchurl }:
+stdenv.mkDerivation rec {
+  pname = "cl-launch";
+  version = "4.1.4.1";
+
+  src = fetchurl {
+    url = "http://common-lisp.net/project/xcvb/cl-launch/cl-launch-${version}.tar.gz";
+    sha256 = "sha256-v5aURs2Verhn2HmGiijvY9br20OTPFrOGBWsb6cHhSQ=";
+  };
+
+  preConfigure = ''
+    export makeFlags="$makeFlags PREFIX='$out'"
+    mkdir -p "$out/bin"
+  '';
+
+  preBuild = ''
+    sed -e 's/\t\t@/\t\t/g' -i Makefile
+  '';
+
+  meta = with lib; {
+    description = "Common Lisp launcher script";
+    license = licenses.llgpl21;
+    maintainers = with maintainers; [ raskin ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/cli11/default.nix b/nixpkgs/pkgs/development/tools/misc/cli11/default.nix
new file mode 100644
index 000000000000..8c4c58c052b0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/cli11/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, boost
+, catch2
+, cmake
+, gtest
+, python3
+}:
+
+stdenv.mkDerivation rec {
+  pname = "cli11";
+  version = "2.3.2";
+
+  src = fetchFromGitHub {
+    owner = "CLIUtils";
+    repo = "CLI11";
+    rev = "v${version}";
+    sha256 = "sha256-x3/kBlf5LdzkTO4NYOKanZBfcU4oK+fJw9L7cf88LsY=";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  nativeCheckInputs = [ boost python3 catch2 ];
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "Command line parser for C++11";
+    homepage = "https://github.com/CLIUtils/CLI11";
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ ];
+    license = licenses.bsd3;
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/clojure-lsp/default.nix b/nixpkgs/pkgs/development/tools/misc/clojure-lsp/default.nix
new file mode 100644
index 000000000000..e1956f7ea8bf
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/clojure-lsp/default.nix
@@ -0,0 +1,81 @@
+{ lib
+, stdenv
+, buildGraalvmNativeImage
+, babashka
+, fetchurl
+, fetchFromGitHub
+, clojure
+, writeScript
+, testers
+, clojure-lsp
+}:
+
+buildGraalvmNativeImage rec {
+  pname = "clojure-lsp";
+  version = "2023.08.06-00.28.06";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-wc7M2cPRtdaRzZn3GNu/aCbQ2VqxiDxvu/b7qnBVUBo=";
+  };
+
+  jar = fetchurl {
+    url = "https://github.com/clojure-lsp/clojure-lsp/releases/download/${version}/clojure-lsp-standalone.jar";
+    sha256 = "c301821ac6914999a44f5c1cd371d46b248fe9a2e31d43a666d0bc2656cfdd78";
+  };
+
+  extraNativeImageBuildArgs = [
+    "--no-fallback"
+    "--native-image-info"
+  ];
+
+  doCheck = true;
+  checkPhase = ''
+    runHook preCheck
+
+    export HOME="$(mktemp -d)"
+    ./${pname} --version | fgrep -q '${version}'
+  ''
+  # TODO: fix classpath issue per https://github.com/NixOS/nixpkgs/pull/153770
+  #${babashka}/bin/bb integration-test ./${pname}
+  + ''
+    runHook postCheck
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    inherit version;
+    package = clojure-lsp;
+    command = "clojure-lsp --version";
+  };
+
+  passthru.updateScript = writeScript "update-clojure-lsp" ''
+    #!/usr/bin/env nix-shell
+    #!nix-shell -i bash -p curl common-updater-scripts gnused jq nix
+
+    set -eu -o pipefail
+
+    latest_version=$(curl -s https://api.github.com/repos/clojure-lsp/clojure-lsp/releases/latest | jq --raw-output .tag_name)
+
+    old_jar_hash=$(nix-instantiate --eval --strict -A "clojure-lsp.jar.drvAttrs.outputHash" | tr -d '"' | sed -re 's|[+]|\\&|g')
+
+    curl -o clojure-lsp-standalone.jar -sL https://github.com/clojure-lsp/clojure-lsp/releases/download/$latest_version/clojure-lsp-standalone.jar
+    new_jar_hash=$(nix-hash --flat --type sha256 clojure-lsp-standalone.jar | sed -re 's|[+]|\\&|g')
+
+    rm -f clojure-lsp-standalone.jar
+
+    nixFile=$(nix-instantiate --eval --strict -A "clojure-lsp.meta.position" | sed -re 's/^"(.*):[0-9]+"$/\1/')
+
+    sed -i "$nixFile" -re "s|\"$old_jar_hash\"|\"$new_jar_hash\"|"
+    update-source-version clojure-lsp "$latest_version"
+  '';
+
+  meta = with lib; {
+    description = "Language Server Protocol (LSP) for Clojure";
+    homepage = "https://github.com/clojure-lsp/clojure-lsp";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.mit;
+    maintainers = with maintainers; [ ericdallo babariviere ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/cmake-language-server/default.nix b/nixpkgs/pkgs/development/tools/misc/cmake-language-server/default.nix
new file mode 100644
index 000000000000..f3ecd30cd4a2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/cmake-language-server/default.nix
@@ -0,0 +1,72 @@
+{ lib
+, buildPythonApplication
+, pythonOlder
+, fetchFromGitHub
+, pdm-backend
+, cmake-format
+, pygls
+, cmake
+, pytest-datadir
+, pytestCheckHook
+}:
+
+buildPythonApplication rec {
+  pname = "cmake-language-server";
+  version = "0.1.9";
+  format = "pyproject";
+
+  disabled = pythonOlder "3.8";
+
+  src = fetchFromGitHub {
+    owner = "regen100";
+    repo = "cmake-language-server";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-8ypl0YA6ep8/jBL3tsutSgCW13NZTZzaNafaOamcT08=";
+  };
+
+  patches = [
+    # Test timeouts occasionally cause the build to fail
+    ./disable-test-timeouts.patch
+  ];
+
+  nativeBuildInputs = [
+    pdm-backend
+  ];
+
+  propagatedBuildInputs = [
+    cmake-format
+    pygls
+  ];
+
+  nativeCheckInputs = [
+    cmake
+    cmake-format
+    pytest-datadir
+    pytestCheckHook
+  ];
+
+  # version.py generated by pdm, no idea why it's not present in test phase
+  # https://github.com/regen100/cmake-language-server/blob/68bbc8187b6110a75f498647af7c44df790ffa87/pyproject.toml#L35-L36
+  preCheck = ''
+    echo "__version__ = \"$PDM_BUILD_SCM_VERSION\"" >  cmake_language_server/version.py
+  '';
+
+  postCheck = ''
+    rm cmake_language_server/version.py
+  '';
+
+  dontUseCmakeConfigure = true;
+
+  pythonImportsCheck = [
+    "cmake_language_server"
+  ];
+
+  meta = with lib; {
+    description = "CMake LSP Implementation";
+    homepage = "https://github.com/regen100/cmake-language-server";
+    changelog = "https://github.com/regen100/cmake-language-server/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ kira-bruneau ];
+    mainProgram = "cmake-language-server";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/cmake-language-server/disable-test-timeouts.patch b/nixpkgs/pkgs/development/tools/misc/cmake-language-server/disable-test-timeouts.patch
new file mode 100644
index 000000000000..237558bb6603
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/cmake-language-server/disable-test-timeouts.patch
@@ -0,0 +1,13 @@
+diff --git a/tests/test_server.py b/tests/test_server.py
+index f349329..d130a2e 100644
+--- a/tests/test_server.py
++++ b/tests/test_server.py
+@@ -27,7 +27,7 @@ from pygls.server import LanguageServer
+ 
+ from cmake_language_server.server import CMakeLanguageServer
+ 
+-CALL_TIMEOUT = 2
++CALL_TIMEOUT = None
+ 
+ 
+ def _init(client: LanguageServer, root: Path) -> None:
diff --git a/nixpkgs/pkgs/development/tools/misc/coccinelle/default.nix b/nixpkgs/pkgs/development/tools/misc/coccinelle/default.nix
new file mode 100644
index 000000000000..6eca9b7f8fa9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/coccinelle/default.nix
@@ -0,0 +1,108 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, fetchpatch
+, ocamlPackages
+, pkg-config
+, autoreconfHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "coccinelle";
+  version = "1.1.1";
+
+  src = fetchFromGitHub {
+    repo = pname;
+    rev = version;
+    owner = "coccinelle";
+    hash = "sha256-rS9Ktp/YcXF0xUtT4XZtH5F9huvde0vRztY7vGtyuqY=";
+  };
+
+  patches = [
+    # Fix data path lookup.
+    # https://github.com/coccinelle/coccinelle/pull/270
+    (fetchpatch {
+      url = "https://github.com/coccinelle/coccinelle/commit/540888ff426e0b1f7907b63ce26e712d1fc172cc.patch";
+      sha256 = "sha256-W8RNIWDAC3lQ5bG+gD50r7x919JIcZRpt3QSOSMWpW4=";
+    })
+
+    # Fix attaching code before declarations.
+    # https://github.com/coccinelle/coccinelle/issues/282
+    (fetchpatch {
+      url = "https://github.com/coccinelle/coccinelle/commit/cd33db143416d820f547bf5869482cfcfc0ea9d0.patch";
+      sha256 = "q7wbxbB9Ob0fSJwCjRtDPO3Xg4RO9yrQZG9G0/LGunI=";
+    })
+
+    # Fix attaching declaration metavariables.
+    # https://github.com/coccinelle/coccinelle/issues/281
+    (fetchpatch {
+      url = "https://github.com/coccinelle/coccinelle/commit/df71c5c0fe2a73c7358f73f45a550b57a7e30d85.patch";
+      sha256 = "qrYfligJnXP7J5G/hfzyaKg9aFn74VExtc/Rs/DI2gc=";
+    })
+
+    # Support GLib’s autocleanup macros.
+    # https://github.com/coccinelle/coccinelle/issues/275
+    (fetchpatch {
+      url = "https://github.com/coccinelle/coccinelle/commit/6d5602aca8775c3c5c503939c3dcf0637649d09b.patch";
+      sha256 = "NACf8joOOvN32H/sIfI+oqiT3289zXXQVVfXbRfbIe8=";
+    })
+
+    # Exit with non-zero status on failure.
+    (fetchpatch {
+      url = "https://github.com/coccinelle/coccinelle/commit/6c0a855af14d41864e1e522b93dc39646a3b83c7.patch";
+      sha256 = "6yfK8arB0GDW7o4cXsv0Y9TMvqgGf3/P1ebXrFFUC80=";
+    })
+    (fetchpatch {
+      url = "https://github.com/coccinelle/coccinelle/commit/5448bb2bd03491ffec356bf7bd6ddcdbf4d36bc9.patch";
+      sha256 = "fyyxw2BNZUpyLBieIhOKeWbLFGP1tjULH70w/hU+jKw=";
+    })
+    (fetchpatch {
+      url = "https://github.com/coccinelle/coccinelle/commit/b8b1937657765e991195a10fcd7b8f7a300fc60b.patch";
+      sha256 = "ergWJF6BKrhmJhx1aiVYDHztgjaQvaJ5iZRAmC9i22s=";
+    })
+  ];
+
+  nativeBuildInputs = with ocamlPackages; [
+    autoreconfHook
+    pkg-config
+    ocaml
+    findlib
+    menhir
+  ];
+
+  buildInputs = with ocamlPackages; [
+    ocaml_pcre
+    parmap
+    pyml
+    stdcompat
+  ];
+
+  strictDeps = true;
+
+  postPatch = ''
+    # Ensure dependencies from Nixpkgs are picked up.
+    rm -rf bundles/
+  '';
+
+  meta = {
+    description = "Program to apply semantic patches to C code";
+    longDescription = ''
+      Coccinelle is a program matching and transformation engine which
+      provides the language SmPL (Semantic Patch Language) for
+      specifying desired matches and transformations in C code.
+      Coccinelle was initially targeted towards performing collateral
+      evolutions in Linux.  Such evolutions comprise the changes that
+      are needed in client code in response to evolutions in library
+      APIs, and may include modifications such as renaming a function,
+      adding a function argument whose value is somehow
+      context-dependent, and reorganizing a data structure.  Beyond
+      collateral evolutions, Coccinelle is successfully used (by us
+      and others) for finding and fixing bugs in systems code.
+    '';
+
+    homepage = "https://coccinelle.gitlabpages.inria.fr/website/";
+    license = lib.licenses.gpl2Only;
+    platforms = lib.platforms.unix;
+    maintainers = [ lib.maintainers.thoughtpolice ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/complexity/default.nix b/nixpkgs/pkgs/development/tools/misc/complexity/default.nix
new file mode 100644
index 000000000000..6e70fbcfcde5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/complexity/default.nix
@@ -0,0 +1,32 @@
+{ fetchurl, lib, stdenv, autogen }:
+
+stdenv.mkDerivation rec {
+  pname = "complexity";
+  version = "1.10";
+
+  src = fetchurl {
+    url = "mirror://gnu/complexity/${pname}-${version}.tar.gz";
+    sha256 = "1vfns9xm7w0wrz12a3w15slrqnrfh6qxk15nv7qkj3irll3ff522";
+  };
+
+  buildInputs = [ autogen ];
+
+  doCheck = true;
+
+  meta = {
+    description = "C code complexity measurement tool";
+
+    longDescription =
+      '' GNU Complexity is a tool designed for analyzing the complexity of C
+         program functions.  It is very similar to the McCabe scoring, but
+         addresses several issues not considered in that scoring scheme.
+      '';
+
+    license = lib.licenses.gpl3Plus;
+
+    homepage = "https://www.gnu.org/software/complexity/";
+
+    platforms = lib.platforms.gnu ++ lib.platforms.linux;
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/complgen/default.nix b/nixpkgs/pkgs/development/tools/misc/complgen/default.nix
new file mode 100644
index 000000000000..2f8d5e345678
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/complgen/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "complgen";
+  version = "0.1.8";
+
+  src = fetchFromGitHub {
+    owner = "adaszko";
+    repo = "complgen";
+    rev = "v${version}";
+    hash = "sha256-pcMyI9jK5yyqZ7OlzDuG+9bK9QdZvXAxm4QS9awyqXk=";
+  };
+
+  cargoHash = "sha256-gZoK0EuULoZ5D6YPrjmn0Cv1Wu9t9xzJhP6/3OrBHeY=";
+
+  meta = with lib; {
+    description = "Generate {bash,fish,zsh} completions from a single EBNF-like grammar";
+    homepage = "https://github.com/adaszko/complgen";
+    changelog = "https://github.com/adaszko/complgen/blob/${src.rev}/CHANGELOG.md";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/coreboot-toolchain/default.nix b/nixpkgs/pkgs/development/tools/misc/coreboot-toolchain/default.nix
new file mode 100644
index 000000000000..53dd4b59fa59
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/coreboot-toolchain/default.nix
@@ -0,0 +1,81 @@
+{ stdenv, lib, callPackage }:
+let
+  common = arch: callPackage (
+    { bison
+    , callPackage
+    , curl
+    , fetchgit
+    , flex
+    , getopt
+    , git
+    , gnat
+    , gcc
+    , lib
+    , perl
+    , stdenvNoCC
+    , zlib
+    , withAda ? true
+    }:
+
+    stdenvNoCC.mkDerivation (finalAttrs: {
+      pname = "coreboot-toolchain-${arch}";
+      version = "4.22";
+
+      src = fetchgit {
+        url = "https://review.coreboot.org/coreboot";
+        rev = finalAttrs.version;
+        hash = "sha256-OCEBt3YYyfXpnskFojBn/JoWTkNJ4XAI58BG4pyscGc=";
+        fetchSubmodules = false;
+        leaveDotGit = true;
+        postFetch = ''
+          PATH=${lib.makeBinPath [ getopt ]}:$PATH ${stdenv.shell} $out/util/crossgcc/buildgcc -W > $out/.crossgcc_version
+          rm -rf $out/.git
+        '';
+        allowedRequisites = [ ];
+      };
+
+      nativeBuildInputs = [ bison curl git perl ];
+      buildInputs = [ flex zlib (if withAda then gnat else gcc) ];
+
+      enableParallelBuilding = true;
+      dontConfigure = true;
+      dontInstall = true;
+
+      postPatch = ''
+        patchShebangs util/crossgcc/buildgcc
+
+        mkdir -p util/crossgcc/tarballs
+
+        ${lib.concatMapStringsSep "\n" (
+          file: "ln -s ${file.archive} util/crossgcc/tarballs/${file.name}"
+          ) (callPackage ./stable.nix { })
+        }
+
+        patchShebangs util/genbuild_h/genbuild_h.sh
+      '';
+
+      buildPhase = ''
+        export CROSSGCC_VERSION=$(cat .crossgcc_version)
+        make crossgcc-${arch} CPUS=$NIX_BUILD_CORES DEST=$out
+      '';
+
+      meta = with lib; {
+        homepage = "https://www.coreboot.org";
+        description = "coreboot toolchain for ${arch} targets";
+        license = with licenses; [ bsd2 bsd3 gpl2 lgpl2Plus gpl3Plus ];
+        maintainers = with maintainers; [ felixsinger ];
+        platforms = platforms.linux;
+      };
+    })
+  );
+in
+
+lib.listToAttrs (map (arch: lib.nameValuePair arch (common arch { })) [
+  "i386"
+  "x64"
+  "arm"
+  "aarch64"
+  "riscv"
+  "ppc64"
+  "nds32le"
+])
diff --git a/nixpkgs/pkgs/development/tools/misc/coreboot-toolchain/stable.nix b/nixpkgs/pkgs/development/tools/misc/coreboot-toolchain/stable.nix
new file mode 100644
index 000000000000..62fe33de76c2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/coreboot-toolchain/stable.nix
@@ -0,0 +1,51 @@
+{ fetchurl }: [
+  {
+    name = "gmp-6.3.0.tar.xz";
+    archive = fetchurl {
+      sha256 = "1648ad1mr7c1r8lkkqshrv1jfjgfdb30plsadxhni7mq041bihm3";
+      url = "mirror://gnu/gmp/gmp-6.3.0.tar.xz";
+    };
+  }
+  {
+    name = "mpfr-4.2.1.tar.xz";
+    archive = fetchurl {
+      sha256 = "1cnb3y7y351qg6r7ynwsgaykm7l2a8zg2nlljs4rf9k778shfy17";
+      url = "mirror://gnu/mpfr/mpfr-4.2.1.tar.xz";
+    };
+  }
+  {
+    name = "mpc-1.3.1.tar.gz";
+    archive = fetchurl {
+      sha256 = "1f2rqz0hdrrhx4y1i5f8pv6yv08a876k1dqcm9s2p26gyn928r5b";
+      url = "mirror://gnu/mpc/mpc-1.3.1.tar.gz";
+    };
+  }
+  {
+    name = "gcc-11.4.0.tar.xz";
+    archive = fetchurl {
+      sha256 = "1ncd7akww0hl5kkmw1dj3qgqp3phdrr5dfnm7jia9s07n0ib4b9z";
+      url = "mirror://gnu/gcc/gcc-11.4.0/gcc-11.4.0.tar.xz";
+    };
+  }
+  {
+    name = "binutils-2.41.tar.xz";
+    archive = fetchurl {
+      sha256 = "0l3l003dynq11ppr2h8p0cfc7zyky8ilfwg60sbfan9lwa4mg6mf";
+      url = "mirror://gnu/binutils/binutils-2.41.tar.xz";
+    };
+  }
+  {
+    name = "R06_28_23.tar.gz";
+    archive = fetchurl {
+      sha256 = "0cadxihshyrjplrx01vna13r1m2f6lj1klw7mh8pg2m0gjdpjj12";
+      url = "https://github.com/acpica/acpica/archive/refs/tags/R06_28_23.tar.gz";
+    };
+  }
+  {
+    name = "nasm-2.16.01.tar.bz2";
+    archive = fetchurl {
+      sha256 = "0bmv8xbzck7jim7fzm6jnwiahqkprbpz6wzhg53irm28w0pavdim";
+      url = "https://www.nasm.us/pub/nasm/releasebuilds/2.16.01/nasm-2.16.01.tar.bz2";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/development/tools/misc/coreboot-toolchain/update.sh b/nixpkgs/pkgs/development/tools/misc/coreboot-toolchain/update.sh
new file mode 100755
index 000000000000..fc758e4ab021
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/coreboot-toolchain/update.sh
@@ -0,0 +1,38 @@
+#!/usr/bin/env nix-shell
+#!nix-shell --pure -i bash -p nix cacert git getopt
+
+# shellcheck shell=bash
+
+if [ ! -d .git ]; then
+    echo "This script needs to be run from the root directory of nixpkgs. Exiting."
+    exit 1
+fi
+
+pkg_dir="$(dirname "$0")"
+
+src="$(nix-build . --no-out-link -A coreboot-toolchain.i386.src)"
+urls=$("${src}/util/crossgcc/buildgcc" -u)
+
+tmp=$(mktemp)
+echo '{ fetchurl }: [' >"$tmp"
+
+for url in $urls; do
+    name="$(basename "$url")"
+    hash="$(nix-prefetch-url "$url")"
+
+    cat <<EOF >>"$tmp"
+  {
+    name = "$name";
+    archive = fetchurl {
+      sha256 = "$hash";
+      url = "$url";
+    };
+  }
+EOF
+done
+
+echo ']' >>"$tmp"
+
+sed -ie 's/https\:\/\/ftpmirror\.gnu\.org/mirror\:\/\/gnu/g' "$tmp"
+
+mv "$tmp" "${pkg_dir}/sources.nix"
diff --git a/nixpkgs/pkgs/development/tools/misc/cppi/default.nix b/nixpkgs/pkgs/development/tools/misc/cppi/default.nix
new file mode 100644
index 000000000000..b0dcfc6aa5ca
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/cppi/default.nix
@@ -0,0 +1,32 @@
+{ fetchurl, lib, stdenv }:
+
+stdenv.mkDerivation rec {
+  pname = "cppi";
+  version = "1.18";
+
+  src = fetchurl {
+    url = "mirror://gnu/${pname}/${pname}-${version}.tar.xz";
+    sha256 = "1jk42cjaggk71rimjnx3qpmb6hivps0917vl3z7wbxk3i2whb98j";
+  };
+
+  doCheck = true;
+
+  meta = {
+    homepage = "https://savannah.gnu.org/projects/cppi/";
+
+    description = "A C preprocessor directive indenter";
+
+    longDescription =
+      '' GNU cppi indents C preprocessor directives to reflect their nesting
+         and ensure that there is exactly one space character between each #if,
+         #elif, #define directive and the following token.  The number of
+         spaces between the `#' and the following directive must correspond
+         to the level of nesting of that directive.
+      '';
+
+    license = lib.licenses.gpl3Plus;
+
+    maintainers = [ ];
+    platforms = lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/cproto/cproto.patch b/nixpkgs/pkgs/development/tools/misc/cproto/cproto.patch
new file mode 100644
index 000000000000..3743fef977b0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/cproto/cproto.patch
@@ -0,0 +1,11 @@
+diff -Naur cproto-4.6-old/cproto.h cproto-4.6/cproto.h
+--- cproto-4.6-old/cproto.h	1998-01-18 19:49:16.000000000 -0500
++++ cproto-4.6/cproto.h	2004-03-14 00:02:32.148070032 -0500
+@@ -117,6 +117,7 @@
+     Declarator *declarator;
+     DeclaratorList decl_list;
+ } YYSTYPE;
++#define YYSTYPE_IS_DECLARED 1
+ 
+ /* Prototype styles */
+ #if OPT_LINTLIBRARY
diff --git a/nixpkgs/pkgs/development/tools/misc/cproto/default.nix b/nixpkgs/pkgs/development/tools/misc/cproto/default.nix
new file mode 100644
index 000000000000..9131a1795a25
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/cproto/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchurl, flex, bison }:
+
+stdenv.mkDerivation rec {
+  pname = "cproto";
+  version = "4.7v";
+
+  src = fetchurl {
+    urls = [
+      "mirror://debian/pool/main/c/cproto/cproto_${version}.orig.tar.gz"
+      # No version listings and apparently no versioned tarball over http(s).
+      "ftp://ftp.invisible-island.net/cproto/cproto-${version}.tgz"
+    ];
+    sha256 = "sha256-897D9hAncBlpdkWcS0SsJzVfYSDaduUjHsEyPjedFRE=";
+  };
+
+  # patch made by Joe Khoobyar copied from gentoo bugs
+  patches = [ ./cproto.patch ];
+
+  nativeBuildInputs = [ flex bison ];
+
+  doCheck = true;
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    [ "$("$out/bin/cproto" -V 2>&1)" = '${version}' ]
+  '';
+
+  meta = with lib; {
+    description = "Tool to generate C function prototypes from C source code";
+    homepage = "https://invisible-island.net/cproto/";
+    license = licenses.publicDomain;
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/creduce/default.nix b/nixpkgs/pkgs/development/tools/misc/creduce/default.nix
new file mode 100644
index 000000000000..918bd2efab73
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/creduce/default.nix
@@ -0,0 +1,75 @@
+{ lib, stdenv, fetchurl, fetchpatch, cmake, makeWrapper
+, llvm, libclang
+, flex
+, zlib
+, perlPackages
+, util-linux
+}:
+
+stdenv.mkDerivation rec {
+  pname = "creduce";
+  version = "2.10.0";
+
+  src = fetchurl {
+    url = "https://embed.cs.utah.edu/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "2xwPEjln8k1iCwQM69UwAb89zwPkAPeFVqL/LhH+oGM=";
+  };
+
+  patches = [
+    # Port to LLVM 15
+    (fetchpatch {
+      url = "https://github.com/csmith-project/creduce/commit/e507cca4ccb32585c5692d49b8d907c1051c826c.patch";
+      hash = "sha256-jO5E85AvHcjlErbUhzuQDXwQkhQsXklcTMQfWBd09OU=";
+    })
+    (fetchpatch {
+      url = "https://github.com/csmith-project/creduce/commit/8d56bee3e1d2577fc8afd2ecc03b1323d6873404.patch";
+      hash = "sha256-dRaBaJAYkvMyxKvfriOcg4D+4i6+6orZ85zws1AFx/s=";
+    })
+    # Port to LLVM 16
+    (fetchpatch {
+      url = "https://github.com/csmith-project/creduce/commit/8ab9a69caf13ce24172737e8bfd09de51a1ecb6a.patch";
+      hash = "sha256-gPNXxYHnsyUvXmC0CGtsulH2Fu/EMnDE4GdOYc0UbiQ=";
+    })
+  ];
+
+  postPatch = ''
+    substituteInPlace CMakeLists.txt \
+      --replace "-std=c++11" "-std=c++17"
+  ''
+  # On Linux, c-reduce's preferred way to reason about
+  # the cpu architecture/topology is to use 'lscpu',
+  # so let's make sure it knows where to find it:
+  + lib.optionalString stdenv.isLinux ''
+    substituteInPlace creduce/creduce_utils.pm --replace \
+      lscpu ${util-linux}/bin/lscpu
+  '';
+
+  nativeBuildInputs = [ cmake makeWrapper llvm.dev ];
+  buildInputs = [
+    # Ensure stdenv's CC is on PATH before clang-unwrapped
+    stdenv.cc
+    # Actual deps:
+    llvm libclang
+    flex zlib
+  ] ++ (with perlPackages; [ perl ExporterLite FileWhich GetoptTabular RegexpCommon TermReadKey ]);
+
+  postInstall = ''
+    wrapProgram $out/bin/creduce --prefix PERL5LIB : "$PERL5LIB"
+  '';
+
+  meta = with lib; {
+    description = "A C program reducer";
+    homepage = "https://embed.cs.utah.edu/creduce";
+    # Officially, the license is: https://github.com/csmith-project/creduce/blob/master/COPYING
+    license = licenses.ncsa;
+    longDescription = ''
+      C-Reduce is a tool that takes a large C or C++ program that has a
+      property of interest (such as triggering a compiler bug) and
+      automatically produces a much smaller C/C++ program that has the same
+      property.  It is intended for use by people who discover and report
+      bugs in compilers and other tools that process C/C++ code.
+    '';
+    maintainers = [ maintainers.dtzWill ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/cscope/default.nix b/nixpkgs/pkgs/development/tools/misc/cscope/default.nix
new file mode 100644
index 000000000000..432f689d64dd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/cscope/default.nix
@@ -0,0 +1,54 @@
+{ fetchurl, lib, stdenv, ncurses
+, emacsSupport ? true, emacs
+}:
+
+stdenv.mkDerivation rec {
+  pname = "cscope";
+  version = "15.9";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "0ngiv4aj3rr35k3q3wjx0y19gh7i1ydqa0cqip6sjwd8fph5ll65";
+  };
+
+  configureFlags = [ "--with-ncurses=${ncurses.dev}" ];
+
+  buildInputs = [ ncurses ];
+  nativeBuildInputs = lib.optional emacsSupport emacs;
+
+  postInstall = lib.optionalString emacsSupport ''
+    cd "contrib/xcscope"
+
+    sed -i "cscope-indexer" \
+        -"es|^PATH=.*$|PATH=\"$out/bin:\$PATH\"|g"
+    sed -i "xcscope.el" \
+        -"es|\"cscope-indexer\"|\"$out/libexec/cscope/cscope-indexer\"|g";
+
+    mkdir -p "$out/libexec/cscope"
+    cp "cscope-indexer" "$out/libexec/cscope"
+
+    mkdir -p "$out/share/emacs/site-lisp"
+    emacs --batch --eval '(byte-compile-file "xcscope.el")'
+    cp xcscope.el{,c} "$out/share/emacs/site-lisp"
+  '';
+
+  meta = {
+    description = "A developer's tool for browsing source code";
+
+    longDescription = ''
+      Cscope is a developer's tool for browsing source code.  It has
+      an impeccable Unix pedigree, having been originally developed at
+      Bell Labs back in the days of the PDP-11.  Cscope was part of
+      the official AT&T Unix distribution for many years, and has been
+      used to manage projects involving 20 million lines of code!
+    '';
+
+    license = "BSD-style";
+
+    homepage = "https://cscope.sourceforge.net/";
+
+    maintainers = with lib.maintainers; [viric];
+
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/csmith/default.nix b/nixpkgs/pkgs/development/tools/misc/csmith/default.nix
new file mode 100644
index 000000000000..0643e81edf99
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/csmith/default.nix
@@ -0,0 +1,49 @@
+{ lib, stdenv, fetchurl, m4, makeWrapper, libbsd, perlPackages }:
+
+stdenv.mkDerivation rec {
+  pname = "csmith";
+  version = "2.3.0";
+
+  src = fetchurl {
+    url = "https://embed.cs.utah.edu/csmith/${pname}-${version}.tar.gz";
+    sha256 = "1mb5zgixsyf86slggs756k8a5ddmj980md3ic9sa1y75xl5cqizj";
+  };
+
+  nativeBuildInputs = [ m4 makeWrapper ];
+  buildInputs = [ libbsd ] ++ (with perlPackages; [ perl SysCPU ]);
+
+  postInstall = ''
+    substituteInPlace $out/bin/compiler_test.pl \
+      --replace '$CSMITH_HOME/runtime' $out/include/${pname}-${version} \
+      --replace ' ''${CSMITH_HOME}/runtime' " $out/include/${pname}-${version}" \
+      --replace '$CSMITH_HOME/src/csmith' $out/bin/csmith
+
+    substituteInPlace $out/bin/launchn.pl \
+      --replace '../compiler_test.pl' $out/bin/compiler_test.pl \
+      --replace '../$CONFIG_FILE' '$CONFIG_FILE'
+
+    wrapProgram $out/bin/launchn.pl \
+      --prefix PERL5LIB : "$PERL5LIB"
+
+    mkdir -p $out/share/csmith
+    mv $out/bin/compiler_test.in $out/share/csmith/
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "A random generator of C programs";
+    homepage = "https://embed.cs.utah.edu/csmith";
+    # Officially, the license is this: https://github.com/csmith-project/csmith/blob/master/COPYING
+    license = licenses.bsd2;
+    longDescription = ''
+      Csmith is a tool that can generate random C programs that statically and
+      dynamically conform to the C99 standard. It is useful for stress-testing
+      compilers, static analyzers, and other tools that process C code.
+      Csmith has found bugs in every tool that it has tested, and has been used
+      to find and report more than 400 previously unknown compiler bugs.
+    '';
+    maintainers = [ maintainers.dtzWill ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/ctags/default.nix b/nixpkgs/pkgs/development/tools/misc/ctags/default.nix
new file mode 100644
index 000000000000..b33d6cafbe4a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/ctags/default.nix
@@ -0,0 +1,43 @@
+{ lib, stdenv, fetchsvn, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "ctags";
+  version = "816";
+
+  src = fetchsvn {
+    url = "https://svn.code.sf.net/p/ctags/code/trunk";
+    rev = version;
+    sha256 = "0jmbkrmscbl64j71qffcc39x005jrmphx8kirs1g2ws44wil39hf";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  # don't use $T(E)MP which is set to the build directory
+  configureFlags= [ "--enable-tmpdir=/tmp" ];
+
+  patches = [
+    # Library defines an `__unused__` which is a reserved name, and may
+    # conflict with the standard library definition. One such conflict is with
+    # macOS headers.
+    ./unused-collision.patch
+  ];
+
+  meta = with lib; {
+    description = "A tool for fast source code browsing (exuberant ctags)";
+    longDescription = ''
+      Ctags generates an index (or tag) file of language objects found
+      in source files that allows these items to be quickly and easily
+      located by a text editor or other utility.  A tag signifies a
+      language object for which an index entry is available (or,
+      alternatively, the index entry created for that object).  Many
+      programming languages are supported.
+    '';
+    homepage = "https://ctags.sourceforge.net/";
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+
+    # So that Exuberant ctags is preferred over emacs's ctags
+    priority = 1;
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/ctags/unused-collision.patch b/nixpkgs/pkgs/development/tools/misc/ctags/unused-collision.patch
new file mode 100644
index 000000000000..595f67a01b5a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/ctags/unused-collision.patch
@@ -0,0 +1,246 @@
+--- a/c.c	(revision 816)
++++ b/c.c	(working copy)
+@@ -619,7 +619,7 @@
+ 	return name;
+ }
+ 
+-static void __unused__ pt (tokenInfo *const token)
++static void UNUSED pt (tokenInfo *const token)
+ {
+ 	if (isType (token, TOKEN_NAME))
+ 		printf ("type: %-12s: %-13s   line: %lu\n",
+@@ -634,7 +634,7 @@
+ 			tokenString (token->type), token->lineNumber);
+ }
+ 
+-static void __unused__ ps (statementInfo *const st)
++static void UNUSED ps (statementInfo *const st)
+ {
+ 	unsigned int i;
+ 	printf ("scope: %s   decl: %s   gotName: %s   gotParenName: %s\n",
+--- a/eiffel.c	(revision 816)
++++ b/eiffel.c	(working copy)
+@@ -807,7 +807,7 @@
+ 
+ static boolean parseType (tokenInfo *const token);
+ 
+-static void parseGeneric (tokenInfo *const token, boolean declaration __unused__)
++static void parseGeneric (tokenInfo *const token, boolean declaration UNUSED)
+ {
+ 	unsigned int depth = 0;
+ #ifdef TYPE_REFERENCE_TOOL
+--- a/general.h	(revision 816)
++++ b/general.h	(working copy)
+@@ -57,10 +57,10 @@
+  *  to prevent warnings about unused variables.
+  */
+ #if (__GNUC__ > 2  ||  (__GNUC__ == 2  &&  __GNUC_MINOR__ >= 7)) && !defined (__GNUG__)
+-# define __unused__  __attribute__((unused))
++# define UNUSED  __attribute__((unused))
+ # define __printf__(s,f)  __attribute__((format (printf, s, f)))
+ #else
+-# define __unused__
++# define UNUSED
+ # define __printf__(s,f)
+ #endif
+ 
+--- a/lregex.c	(revision 816)
++++ b/lregex.c	(working copy)
+@@ -538,11 +538,11 @@
+ #endif  /* HAVE_REGEX */
+ 
+ extern void addTagRegex (
+-		const langType language __unused__,
+-		const char* const regex __unused__,
+-		const char* const name __unused__,
+-		const char* const kinds __unused__,
+-		const char* const flags __unused__)
++		const langType language UNUSED,
++		const char* const regex UNUSED,
++		const char* const name UNUSED,
++		const char* const kinds UNUSED,
++		const char* const flags UNUSED)
+ {
+ #ifdef HAVE_REGEX
+ 	Assert (regex != NULL);
+@@ -564,10 +564,10 @@
+ }
+ 
+ extern void addCallbackRegex (
+-		const langType language __unused__,
+-		const char* const regex __unused__,
+-		const char* const flags __unused__,
+-		const regexCallback callback __unused__)
++		const langType language UNUSED,
++		const char* const regex UNUSED,
++		const char* const flags UNUSED,
++		const regexCallback callback UNUSED)
+ {
+ #ifdef HAVE_REGEX
+ 	Assert (regex != NULL);
+@@ -581,7 +581,7 @@
+ }
+ 
+ extern void addLanguageRegex (
+-		const langType language __unused__, const char* const regex __unused__)
++		const langType language UNUSED, const char* const regex UNUSED)
+ {
+ #ifdef HAVE_REGEX
+ 	if (! regexBroken)
+@@ -602,7 +602,7 @@
+ */
+ 
+ extern boolean processRegexOption (const char *const option,
+-								   const char *const parameter __unused__)
++								   const char *const parameter UNUSED)
+ {
+ 	boolean handled = FALSE;
+ 	const char* const dash = strchr (option, '-');
+@@ -624,7 +624,7 @@
+ 	return handled;
+ }
+ 
+-extern void disableRegexKinds (const langType language __unused__)
++extern void disableRegexKinds (const langType language UNUSED)
+ {
+ #ifdef HAVE_REGEX
+ 	if (language <= SetUpper  &&  Sets [language].count > 0)
+@@ -639,8 +639,8 @@
+ }
+ 
+ extern boolean enableRegexKind (
+-		const langType language __unused__,
+-		const int kind __unused__, const boolean mode __unused__)
++		const langType language UNUSED,
++		const int kind UNUSED, const boolean mode UNUSED)
+ {
+ 	boolean result = FALSE;
+ #ifdef HAVE_REGEX
+@@ -660,7 +660,7 @@
+ 	return result;
+ }
+ 
+-extern void printRegexKinds (const langType language __unused__, boolean indent __unused__)
++extern void printRegexKinds (const langType language UNUSED, boolean indent UNUSED)
+ {
+ #ifdef HAVE_REGEX
+ 	if (language <= SetUpper  &&  Sets [language].count > 0)
+--- a/lua.c	(revision 816)
++++ b/lua.c	(working copy)
+@@ -37,7 +37,7 @@
+ */
+ 
+ /* for debugging purposes */
+-static void __unused__ print_string (char *p, char *q)
++static void UNUSED print_string (char *p, char *q)
+ {
+ 	for ( ; p != q; p++)
+ 		fprintf (errout, "%c", *p);
+--- a/main.c	(revision 816)
++++ b/main.c	(working copy)
+@@ -522,7 +522,7 @@
+  *		Start up code
+  */
+ 
+-extern int main (int __unused__ argc, char **argv)
++extern int main (int UNUSED argc, char **argv)
+ {
+ 	cookedArgs *args;
+ #ifdef VMS
+--- a/options.c	(revision 816)
++++ b/options.c	(working copy)
+@@ -730,7 +730,7 @@
+ }
+ 
+ static void processExcludeOption (
+-		const char *const option __unused__, const char *const parameter)
++		const char *const option UNUSED, const char *const parameter)
+ {
+ 	const char *const fileName = parameter + 1;
+ 	if (parameter [0] == '\0')
+@@ -867,7 +867,7 @@
+ }
+ 
+ static void processFilterTerminatorOption (
+-		const char *const option __unused__, const char *const parameter)
++		const char *const option UNUSED, const char *const parameter)
+ {
+ 	freeString (&Option.filterTerminator);
+ 	Option.filterTerminator = stringCopy (parameter);
+@@ -930,8 +930,8 @@
+ }
+ 
+ static void processHelpOption (
+-		const char *const option __unused__,
+-		const char *const parameter __unused__)
++		const char *const option UNUSED,
++		const char *const parameter UNUSED)
+ {
+ 	printProgramIdentification ();
+ 	putchar ('\n');
+@@ -1139,8 +1139,8 @@
+ }
+ 
+ static void processLicenseOption (
+-		const char *const option __unused__,
+-		const char *const parameter __unused__)
++		const char *const option UNUSED,
++		const char *const parameter UNUSED)
+ {
+ 	printProgramIdentification ();
+ 	puts ("");
+@@ -1166,8 +1166,8 @@
+ }
+ 
+ static void processListMapsOption (
+-		const char *const __unused__ option,
+-		const char *const __unused__ parameter)
++		const char *const UNUSED option,
++		const char *const UNUSED parameter)
+ {
+ 	if (parameter [0] == '\0' || strcasecmp (parameter, "all") == 0)
+ 	    printLanguageMaps (LANG_AUTO);
+@@ -1183,8 +1183,8 @@
+ }
+ 
+ static void processListLanguagesOption (
+-		const char *const option __unused__,
+-		const char *const parameter __unused__)
++		const char *const option UNUSED,
++		const char *const parameter UNUSED)
+ {
+ 	printLanguageList ();
+ 	exit (0);
+@@ -1358,8 +1358,8 @@
+ }
+ 
+ static void processVersionOption (
+-		const char *const option __unused__,
+-		const char *const parameter __unused__)
++		const char *const option UNUSED,
++		const char *const parameter UNUSED)
+ {
+ 	printProgramIdentification ();
+ 	exit (0);
+--- a/parse.c	(revision 816)
++++ b/parse.c	(working copy)
+@@ -376,7 +376,7 @@
+ */
+ 
+ extern void processLanguageDefineOption (
+-		const char *const option, const char *const parameter __unused__)
++		const char *const option, const char *const parameter UNUSED)
+ {
+ #ifdef HAVE_REGEX
+ 	if (parameter [0] == '\0')
+--- a/routines.c	(revision 816)
++++ b/routines.c	(working copy)
+@@ -526,7 +526,7 @@
+ 
+ #if ! defined (HAVE_STAT_ST_INO)
+ 
+-static void canonicalizePath (char *const path __unused__)
++static void canonicalizePath (char *const path UNUSED)
+ {
+ #if defined (MSDOS_STYLE_PATH)
+ 	char *p;
diff --git a/nixpkgs/pkgs/development/tools/misc/ctags/wrapped.nix b/nixpkgs/pkgs/development/tools/misc/ctags/wrapped.nix
new file mode 100644
index 000000000000..2bc3aa5ecf4f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/ctags/wrapped.nix
@@ -0,0 +1,78 @@
+{ pkgs, ctags }:
+
+with pkgs.lib;
+
+# define some ctags wrappers adding support for some not that common languages
+# customization:
+# a) add stuff here
+# b) override asLang, phpLang, ... using packageOverrides
+# c) use ctagsWrapped.override {args = [ your liste ];}
+
+# install using -iA ctagsWrapped.ctagsWrapped
+
+{
+
+  # the derivation. use language extensions specified by args
+  ctagsWrapped = makeOverridable ( {args, name} :  pkgs.writeScriptBin name ''
+  #!${pkgs.runtimeShell}
+  exec ${pkgs.ctags}/bin/ctags ${concatStringsSep " " (map escapeShellArg args)} "$@"
+  '') {
+    args = let x = pkgs.ctagsWrapped; in concatLists [
+      x.defaultArgs x.phpLang x.jsLang x.nixLang x.asLang x.rubyLang
+    ];
+    name = "${ctags.name}-wrapped";
+  };
+
+  ### language arguments
+
+  # don't scan version control directories
+  defaultArgs = [
+    "--exclude=.svn"
+    "--exclude=.hg"
+    "--exclude=.git"
+    "--exclude=_darcs"
+    "--sort=yes"
+  ];
+
+  # actionscript
+  asLang = [
+    "--langdef=ActionScript"
+    "--langmap=ActionScript:.as"
+    "--regex-ActionScript=/function[ \\t]+([A-Za-z0-9_]+)[ \\t]*\\(/\\1/f,function,functions/"
+    "--regex-ActionScript=/function[ \\t]+(set|get)[ \\t]+([A-Za-z0-9_]+)[ \\t]*\\(/\\2/p,property,properties/"
+    "--regex-ActionScript=/interface[ \\t]+[a-z0-9_.]*([A-Z][A-Za-z0-9_]+)/\\1/i,interface,interfaces/"
+    "--regex-ActionScript=/package[ \\t]+([^ \\t]*)/\\1/p/"
+    "--regex-ActionScript=/class[ \\t]+[a-z0-9_.]*([A-Z][A-Za-z0-9_]+)/\\1/c,class,classes/"
+  ];
+
+  # PHP
+  phpLang = [
+    "--langmap=PHP:.php"
+    "--regex-PHP=/abstract class ([^ ]*)/\\1/c/"
+    "--regex-PHP=/interface ([^ ]*)/\\1/i/"
+    "--regex-PHP=/function[ \\t]+([^ (]*)/\\1/f/"
+  ];
+
+  # Javascript: also find unnamed functions and functions being passed within a dict.
+  # the dict properties is used to implement duck typing in frameworks
+  # var foo = function () { ... }
+  # {
+  # a : function () {}
+  # only recognize names up 100 characters. Else you'll be in trouble scanning compressed .js files.
+  jsLang = [
+    "--regex-JavaScript=/([^ \\t]{1,100})[ \\t]*:[ \\t]*function[ \\t]*\\(/\\1/f/"
+  ];
+
+  # find foo in "foo =", don't think we can do a lot better
+  nixLang = [
+    "--langdef=NIX"
+    "--langmap=NIX:.nix"
+    "--regex-NIX=/([^ \\t*]*)[ \\t]*=/\\1/f/"
+  ];
+
+  rubyLang = [
+    "--langmap=RUBY:.rb"
+    "--regex-RUBY=/class ([^ ]*)/\\1/c/"
+    "--regex-RUBY=/^[ ]*module[ ]*([^ ]*)/\\1/m/"
+  ];
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/cvise/default.nix b/nixpkgs/pkgs/development/tools/misc/cvise/default.nix
new file mode 100644
index 000000000000..f65b0386cfd8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/cvise/default.nix
@@ -0,0 +1,90 @@
+{ lib
+, buildPythonApplication
+, fetchFromGitHub
+, fetchpatch
+, bash
+, cmake
+, colordiff
+, flex
+, libclang
+, llvm
+, unifdef
+, chardet
+, pebble
+, psutil
+, pytestCheckHook
+}:
+
+buildPythonApplication rec {
+  pname = "cvise";
+  version = "2.9.0";
+  format = "other";
+
+  src = fetchFromGitHub {
+    owner = "marxin";
+    repo = "cvise";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-4LEKVh3jNU3xOq75+IQezjhbL/6uAGQ3r0Au2cxx1WA=";
+  };
+
+  patches = [
+    # Refer to unifdef by absolute path.
+    ./unifdef.patch
+
+    # Refer to shell via /usr/bin/env:
+    #   https://github.com/marxin/cvise/pull/121
+    (fetchpatch {
+      name = "env-shell.patch";
+      url = "https://github.com/marxin/cvise/commit/6a416eb590be978a2ad25c610974fdde84e88651.patch";
+      hash = "sha256-Kn6+TXP+wJpMs6jrgsa9OwjXf6vmIgGzny8jg3dfKWA=";
+    })
+  ];
+
+  postPatch = ''
+    # Avoid blanket -Werror to evade build failures on less
+    # tested compilers.
+    substituteInPlace CMakeLists.txt \
+      --replace " -Werror " " "
+
+    substituteInPlace cvise/utils/testing.py \
+      --replace "'colordiff --version'" "'${colordiff}/bin/colordiff --version'" \
+      --replace "'colordiff'" "'${colordiff}/bin/colordiff'"
+  '';
+
+  nativeBuildInputs = [
+    cmake
+    flex
+    llvm.dev
+  ];
+
+  buildInputs = [
+    libclang
+    llvm
+    llvm.dev
+    unifdef
+  ];
+
+  propagatedBuildInputs = [
+    chardet
+    pebble
+    psutil
+  ];
+
+  nativeCheckInputs = [
+    pytestCheckHook
+    unifdef
+  ];
+
+  disabledTests = [
+    # Needs gcc, fails when run noninteractively (without tty).
+    "test_simple_reduction"
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/marxin/cvise";
+    description = "Super-parallel Python port of C-Reduce";
+    license = licenses.ncsa;
+    maintainers = with maintainers; [ orivej ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/cvise/unifdef.patch b/nixpkgs/pkgs/development/tools/misc/cvise/unifdef.patch
new file mode 100644
index 000000000000..d15ca6dce0bd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/cvise/unifdef.patch
@@ -0,0 +1,8 @@
+--- a/cvise.py
++++ b/cvise.py
+@@ -93,4 +93,5 @@ def find_external_programs():
+     # Special case for clang-format
+     programs['clang-format'] = '@CLANG_FORMAT_PATH@'
++    programs['unifdef'] = '@UNIFDEF@'
+ 
+     return programs
diff --git a/nixpkgs/pkgs/development/tools/misc/cwebbin/default.nix b/nixpkgs/pkgs/development/tools/misc/cwebbin/default.nix
new file mode 100644
index 000000000000..055a24f3fe0a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/cwebbin/default.nix
@@ -0,0 +1,59 @@
+{ lib, stdenv, fetchFromGitHub, fetchurl, tie }:
+
+stdenv.mkDerivation rec {
+  pname = "cwebbin";
+  version = "22p";
+
+  src = fetchFromGitHub {
+    owner = "ascherer";
+    repo = "cwebbin";
+    rev = "2016-05-20-22p";
+    sha256 = "0zf93016hm9i74i2v384rwzcw16y3hg5vc2mibzkx1rzvqa50yfr";
+  };
+
+  cweb = fetchurl {
+    url = "https://www.ctan.org/tex-archive/web/c_cpp/cweb/cweb-3.64ah.tgz";
+    sha256 = "1hdzxfzaibnjxjzgp6d2zay8nsarnfy9hfq55hz1bxzzl23n35aj";
+  };
+
+  # Remove references to __DATE__ and __TIME__
+  postPatch = ''
+    substituteInPlace wmerg-patch.ch --replace ' ("__DATE__", "__TIME__")' ""
+    substituteInPlace ctang-patch.ch --replace ' ("__DATE__", "__TIME__")' ""
+    substituteInPlace ctangle.cxx --replace ' ("__DATE__", "__TIME__")' ""
+    substituteInPlace cweav-patch.ch --replace ' ("__DATE__", "__TIME__")' ""
+  '';
+
+  nativeBuildInputs = [ tie ];
+
+  makeFlags = [
+    "MACROSDIR=$(out)/share/texmf/tex/generic/cweb"
+    "CWEBINPUTS=$(out)/lib/cweb"
+    "DESTDIR=$(out)/bin/"
+    "MANDIR=$(out)/share/man/man1"
+    "EMACSDIR=$(out)/share/emacs/site-lisp"
+    "CP=cp"
+    "RM=rm"
+    "PDFTEX=echo"
+    "CC=${stdenv.cc.targetPrefix}c++"
+  ];
+
+  buildPhase = ''
+    zcat ${cweb} | tar -xvpf -
+    make -f Makefile.unix boot $makeFlags
+    make -f Makefile.unix cautiously $makeFlags
+  '';
+
+  installPhase = ''
+    mkdir -p $out/share/man/man1 $out/share/texmf/tex/generic $out/share/emacs $out/lib
+    make -f Makefile.unix install $makeFlags
+  '';
+
+  meta = with lib; {
+    inherit (src.meta) homepage;
+    description = "Literate Programming in C/C++";
+    platforms = with platforms; unix;
+    maintainers = with maintainers; [ vrthra ];
+    license = licenses.abstyles;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/d-feet/default.nix b/nixpkgs/pkgs/development/tools/misc/d-feet/default.nix
new file mode 100644
index 000000000000..c59ed440b7c0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/d-feet/default.nix
@@ -0,0 +1,90 @@
+{ lib
+, pkg-config
+, fetchurl
+, fetchpatch
+, meson
+, ninja
+, glib
+, gtk3
+, python3
+, wrapGAppsHook
+, gnome
+, libwnck
+, gobject-introspection
+, gettext
+, itstool
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "d-feet";
+  version = "0.3.16";
+
+  format = "other";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/d-feet/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "hzPOS5qaVOwYWx2Fv02p2dEQUogqiAdg/2D5d5stHMs=";
+  };
+
+  patches = [
+    # Fix build with meson 0.61
+    # data/meson.build:15:0: ERROR: Function does not take positional arguments.
+    # data/meson.build:27:0: ERROR: Function does not take positional arguments.
+    # Patch taken from https://gitlab.gnome.org/GNOME/d-feet/-/merge_requests/32
+    (fetchpatch {
+      url = "https://gitlab.gnome.org/GNOME/d-feet/-/commit/05465d486afdba116dbc22fc22c1e6573aea4f22.patch";
+      sha256 = "sFI3nd0YE/deGws/YcTpzC/em9QNgicyb4j7cTfOdhY=";
+    })
+  ];
+
+  nativeBuildInputs = [
+    gettext
+    gobject-introspection
+    itstool
+    meson
+    ninja
+    pkg-config
+    python3
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    glib
+    gnome.adwaita-icon-theme
+    gtk3
+    libwnck
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    pygobject3
+  ];
+
+  mesonFlags = [
+    "-Dtests=false" # needs dbus
+  ];
+
+  postPatch = ''
+    chmod +x meson_post_install.py
+    patchShebangs meson_post_install.py
+  '';
+
+  passthru = {
+    updateScript = gnome.updateScript {
+      packageName = pname;
+      attrPath = "dfeet";
+      versionPolicy = "none";
+    };
+  };
+
+  meta = with lib; {
+    description = "D-Feet is an easy to use D-Bus debugger";
+    longDescription = ''
+      D-Feet can be used to inspect D-Bus interfaces of running programs
+      and invoke methods on those interfaces.
+    '';
+    homepage = "https://wiki.gnome.org/Apps/DFeet";
+    platforms = platforms.linux;
+    license = licenses.gpl2;
+    maintainers = teams.gnome.members;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/d-spy/default.nix b/nixpkgs/pkgs/development/tools/misc/d-spy/default.nix
new file mode 100644
index 000000000000..2d2ca20c0bc4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/d-spy/default.nix
@@ -0,0 +1,60 @@
+{ stdenv
+, lib
+, desktop-file-utils
+, fetchurl
+, glib
+, gettext
+, gtk4
+, libadwaita
+, meson
+, ninja
+, pkg-config
+, wrapGAppsHook4
+, gnome
+}:
+
+stdenv.mkDerivation rec {
+  pname = "d-spy";
+  version = "1.8.0";
+
+  outputs = [ "out" "lib" "dev" ];
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/d-spy/${lib.versions.majorMinor version}/d-spy-${version}.tar.xz";
+    sha256 = "+J15XQaG2C2h3OsjYUj3zlTVynjwuY4PEzayY6WvzqE=";
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    desktop-file-utils
+    wrapGAppsHook4
+    gettext
+    glib
+  ];
+
+  buildInputs = [
+    glib
+    gtk4
+    libadwaita
+  ];
+
+  passthru = {
+    updateScript = gnome.updateScript {
+      packageName = "d-spy";
+      versionPolicy = "odd-unstable";
+    };
+  };
+
+  meta = with lib; {
+    description = "D-Bus exploration tool";
+    homepage = "https://gitlab.gnome.org/GNOME/d-spy";
+    license = with licenses; [
+      lgpl3Plus # library
+      gpl3Plus # app
+    ];
+    maintainers = teams.gnome.members;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/dart-sass/default.nix b/nixpkgs/pkgs/development/tools/misc/dart-sass/default.nix
new file mode 100644
index 000000000000..f4ca641267ff
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/dart-sass/default.nix
@@ -0,0 +1,87 @@
+{ lib
+, fetchFromGitHub
+, buildDartApplication
+, buf
+, protoc-gen-dart
+, testers
+, dart-sass
+, runCommand
+, writeText
+}:
+
+let
+  embedded-protocol-version = "2.4.0";
+
+  embedded-protocol = fetchFromGitHub {
+    owner = "sass";
+    repo = "sass";
+    rev = "refs/tags/embedded-protocol-${embedded-protocol-version}";
+    hash = "sha256-19YQTda5su2PI2vLzVRCn7fQoH5vEg3539gXEeLLvV8=";
+  };
+in
+buildDartApplication rec {
+  pname = "dart-sass";
+  version = "1.70.0";
+
+  src = fetchFromGitHub {
+    owner = "sass";
+    repo = pname;
+    rev = version;
+    hash = "sha256-JLVcoDAngP1y8EC4K6fIJdPu2Xm8LLAxUm8BTK5tSVk=";
+  };
+
+  pubspecLock = lib.importJSON ./pubspec.lock.json;
+
+  nativeBuildInputs = [
+    buf
+    protoc-gen-dart
+  ];
+
+  preConfigure = ''
+    mkdir -p build
+    ln -s ${embedded-protocol} build/language
+    HOME="$TMPDIR" buf generate
+  '';
+
+  dartCompileFlags = [ "--define=version=${version}" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/sass/dart-sass";
+    description = "The reference implementation of Sass, written in Dart";
+    mainProgram = "sass";
+    license = licenses.mit;
+    maintainers = with maintainers; [ lelgenio ];
+  };
+
+  passthru = {
+    inherit embedded-protocol-version embedded-protocol;
+    updateScript = ./update.sh;
+    tests = {
+      version = testers.testVersion {
+        package = dart-sass;
+        command = "dart-sass --version";
+      };
+
+      simple = testers.testEqualContents {
+        assertion = "dart-sass compiles a basic scss file";
+        expected = writeText "expected" ''
+          body h1{color:#123}
+        '';
+        actual = runCommand "actual"
+          {
+            nativeBuildInputs = [ dart-sass ];
+            base = writeText "base" ''
+              body {
+                $color: #123;
+                h1 {
+                  color: $color;
+                }
+              }
+            '';
+          } ''
+          dart-sass --style=compressed $base > $out
+        '';
+      };
+    };
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/dart-sass/pubspec.lock.json b/nixpkgs/pkgs/development/tools/misc/dart-sass/pubspec.lock.json
new file mode 100644
index 000000000000..820f44ac9f31
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/dart-sass/pubspec.lock.json
@@ -0,0 +1,797 @@
+{
+  "packages": {
+    "_fe_analyzer_shared": {
+      "dependency": "transitive",
+      "description": {
+        "name": "_fe_analyzer_shared",
+        "sha256": "36a321c3d2cbe01cbcb3540a87b8843846e0206df3e691fa7b23e19e78de6d49",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "65.0.0"
+    },
+    "analyzer": {
+      "dependency": "direct dev",
+      "description": {
+        "name": "analyzer",
+        "sha256": "dfe03b90ec022450e22513b5e5ca1f01c0c01de9c3fba2f7fd233cb57a6b9a07",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "6.3.0"
+    },
+    "archive": {
+      "dependency": "direct dev",
+      "description": {
+        "name": "archive",
+        "sha256": "22600aa1e926be775fa5fe7e6894e7fb3df9efda8891c73f70fb3262399a432d",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "3.4.10"
+    },
+    "args": {
+      "dependency": "direct main",
+      "description": {
+        "name": "args",
+        "sha256": "eef6c46b622e0494a36c5a12d10d77fb4e855501a91c1b9ef9339326e58f0596",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.4.2"
+    },
+    "async": {
+      "dependency": "direct main",
+      "description": {
+        "name": "async",
+        "sha256": "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.11.0"
+    },
+    "boolean_selector": {
+      "dependency": "transitive",
+      "description": {
+        "name": "boolean_selector",
+        "sha256": "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.1.1"
+    },
+    "charcode": {
+      "dependency": "direct main",
+      "description": {
+        "name": "charcode",
+        "sha256": "fb98c0f6d12c920a02ee2d998da788bca066ca5f148492b7085ee23372b12306",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.3.1"
+    },
+    "checked_yaml": {
+      "dependency": "transitive",
+      "description": {
+        "name": "checked_yaml",
+        "sha256": "feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.0.3"
+    },
+    "cli_pkg": {
+      "dependency": "direct main",
+      "description": {
+        "name": "cli_pkg",
+        "sha256": "7b088621eb3d486c17a4122389d8b3f36658450d5a405fa229166b1a71a7ce4a",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.7.2"
+    },
+    "cli_repl": {
+      "dependency": "direct main",
+      "description": {
+        "name": "cli_repl",
+        "sha256": "a2ee06d98f211cb960c777519cb3d14e882acd90fe5e078668e3ab4baab0ddd4",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "0.2.3"
+    },
+    "cli_util": {
+      "dependency": "direct dev",
+      "description": {
+        "name": "cli_util",
+        "sha256": "c05b7406fdabc7a49a3929d4af76bcaccbbffcbcdcf185b082e1ae07da323d19",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "0.4.1"
+    },
+    "collection": {
+      "dependency": "direct main",
+      "description": {
+        "name": "collection",
+        "sha256": "ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.18.0"
+    },
+    "convert": {
+      "dependency": "transitive",
+      "description": {
+        "name": "convert",
+        "sha256": "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "3.1.1"
+    },
+    "coverage": {
+      "dependency": "transitive",
+      "description": {
+        "name": "coverage",
+        "sha256": "8acabb8306b57a409bf4c83522065672ee13179297a6bb0cb9ead73948df7c76",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.7.2"
+    },
+    "crypto": {
+      "dependency": "direct dev",
+      "description": {
+        "name": "crypto",
+        "sha256": "ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "3.0.3"
+    },
+    "csslib": {
+      "dependency": "transitive",
+      "description": {
+        "name": "csslib",
+        "sha256": "706b5707578e0c1b4b7550f64078f0a0f19dec3f50a178ffae7006b0a9ca58fb",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.0.0"
+    },
+    "dart_style": {
+      "dependency": "direct dev",
+      "description": {
+        "name": "dart_style",
+        "sha256": "40ae61a5d43feea6d24bd22c0537a6629db858963b99b4bc1c3db80676f32368",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.3.4"
+    },
+    "dartdoc": {
+      "dependency": "direct dev",
+      "description": {
+        "name": "dartdoc",
+        "sha256": "cbc4520cf486395741209693c3e7ef70653b1879b5a73e010815bf50431d330c",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "8.0.3"
+    },
+    "ffi": {
+      "dependency": "transitive",
+      "description": {
+        "name": "ffi",
+        "sha256": "7bf0adc28a23d395f19f3f1eb21dd7cfd1dd9f8e1c50051c069122e6853bc878",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.1.0"
+    },
+    "file": {
+      "dependency": "transitive",
+      "description": {
+        "name": "file",
+        "sha256": "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "7.0.0"
+    },
+    "fixnum": {
+      "dependency": "transitive",
+      "description": {
+        "name": "fixnum",
+        "sha256": "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.1.0"
+    },
+    "frontend_server_client": {
+      "dependency": "transitive",
+      "description": {
+        "name": "frontend_server_client",
+        "sha256": "408e3ca148b31c20282ad6f37ebfa6f4bdc8fede5b74bc2f08d9d92b55db3612",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "3.2.0"
+    },
+    "glob": {
+      "dependency": "transitive",
+      "description": {
+        "name": "glob",
+        "sha256": "0e7014b3b7d4dac1ca4d6114f82bf1782ee86745b9b42a92c9289c23d8a0ab63",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.1.2"
+    },
+    "grinder": {
+      "dependency": "direct dev",
+      "description": {
+        "name": "grinder",
+        "sha256": "e1996e485d2b56bb164a8585679758d488fbf567273f51c432c8733fee1f6188",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "0.9.5"
+    },
+    "html": {
+      "dependency": "transitive",
+      "description": {
+        "name": "html",
+        "sha256": "3a7812d5bcd2894edf53dfaf8cd640876cf6cef50a8f238745c8b8120ea74d3a",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "0.15.4"
+    },
+    "http": {
+      "dependency": "direct main",
+      "description": {
+        "name": "http",
+        "sha256": "759d1a329847dd0f39226c688d3e06a6b8679668e350e2891a6474f8b4bb8525",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.1.0"
+    },
+    "http_multi_server": {
+      "dependency": "transitive",
+      "description": {
+        "name": "http_multi_server",
+        "sha256": "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "3.2.1"
+    },
+    "http_parser": {
+      "dependency": "transitive",
+      "description": {
+        "name": "http_parser",
+        "sha256": "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "4.0.2"
+    },
+    "io": {
+      "dependency": "transitive",
+      "description": {
+        "name": "io",
+        "sha256": "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.0.4"
+    },
+    "js": {
+      "dependency": "direct main",
+      "description": {
+        "name": "js",
+        "sha256": "f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "0.6.7"
+    },
+    "json_annotation": {
+      "dependency": "transitive",
+      "description": {
+        "name": "json_annotation",
+        "sha256": "b10a7b2ff83d83c777edba3c6a0f97045ddadd56c944e1a23a3fdf43a1bf4467",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "4.8.1"
+    },
+    "lints": {
+      "dependency": "direct dev",
+      "description": {
+        "name": "lints",
+        "sha256": "cbf8d4b858bb0134ef3ef87841abdf8d63bfc255c266b7bf6b39daa1085c4290",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "3.0.0"
+    },
+    "logging": {
+      "dependency": "transitive",
+      "description": {
+        "name": "logging",
+        "sha256": "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.2.0"
+    },
+    "markdown": {
+      "dependency": "transitive",
+      "description": {
+        "name": "markdown",
+        "sha256": "1b134d9f8ff2da15cb298efe6cd8b7d2a78958c1b00384ebcbdf13fe340a6c90",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "7.2.1"
+    },
+    "matcher": {
+      "dependency": "transitive",
+      "description": {
+        "name": "matcher",
+        "sha256": "d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "0.12.16+1"
+    },
+    "meta": {
+      "dependency": "direct main",
+      "description": {
+        "name": "meta",
+        "sha256": "d584fa6707a52763a52446f02cc621b077888fb63b93bbcb1143a7be5a0c0c04",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.11.0"
+    },
+    "mime": {
+      "dependency": "transitive",
+      "description": {
+        "name": "mime",
+        "sha256": "e4ff8e8564c03f255408decd16e7899da1733852a9110a58fe6d1b817684a63e",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.0.4"
+    },
+    "native_synchronization": {
+      "dependency": "direct main",
+      "description": {
+        "name": "native_synchronization",
+        "sha256": "ff200fe0a64d733ff7d4dde2005271c297db81007604c8cd21037959858133ab",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "0.2.0"
+    },
+    "node_interop": {
+      "dependency": "direct main",
+      "description": {
+        "name": "node_interop",
+        "sha256": "3af2420c728173806f4378cf89c53ba9f27f7f67792b898561bff9d390deb98e",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.1.0"
+    },
+    "node_preamble": {
+      "dependency": "direct dev",
+      "description": {
+        "name": "node_preamble",
+        "sha256": "6e7eac89047ab8a8d26cf16127b5ed26de65209847630400f9aefd7cd5c730db",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.0.2"
+    },
+    "oauth2": {
+      "dependency": "transitive",
+      "description": {
+        "name": "oauth2",
+        "sha256": "c4013ef62be37744efdc0861878fd9e9285f34db1f9e331cc34100d7674feb42",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.0.2"
+    },
+    "package_config": {
+      "dependency": "direct main",
+      "description": {
+        "name": "package_config",
+        "sha256": "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.1.0"
+    },
+    "path": {
+      "dependency": "direct main",
+      "description": {
+        "name": "path",
+        "sha256": "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.9.0"
+    },
+    "petitparser": {
+      "dependency": "transitive",
+      "description": {
+        "name": "petitparser",
+        "sha256": "eeb2d1428ee7f4170e2bd498827296a18d4e7fc462b71727d111c0ac7707cfa6",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "6.0.1"
+    },
+    "pointycastle": {
+      "dependency": "transitive",
+      "description": {
+        "name": "pointycastle",
+        "sha256": "43ac87de6e10afabc85c445745a7b799e04de84cebaa4fd7bf55a5e1e9604d29",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "3.7.4"
+    },
+    "pool": {
+      "dependency": "direct main",
+      "description": {
+        "name": "pool",
+        "sha256": "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.5.1"
+    },
+    "protobuf": {
+      "dependency": "direct main",
+      "description": {
+        "name": "protobuf",
+        "sha256": "68645b24e0716782e58948f8467fd42a880f255096a821f9e7d0ec625b00c84d",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "3.1.0"
+    },
+    "protoc_plugin": {
+      "dependency": "direct dev",
+      "description": {
+        "name": "protoc_plugin",
+        "sha256": "fb0554851c9eca30bd18405fbbfe81e39166d4a2f0e5b770606fd69da3da0b2f",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "21.1.2"
+    },
+    "pub_api_client": {
+      "dependency": "direct dev",
+      "description": {
+        "name": "pub_api_client",
+        "sha256": "d456816ef5142906a22dc56e37be6bef6cb0276f0a26c11d1f7d277868202e71",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.6.0"
+    },
+    "pub_semver": {
+      "dependency": "direct main",
+      "description": {
+        "name": "pub_semver",
+        "sha256": "40d3ab1bbd474c4c2328c91e3a7df8c6dd629b79ece4c4bd04bee496a224fb0c",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.1.4"
+    },
+    "pubspec": {
+      "dependency": "transitive",
+      "description": {
+        "name": "pubspec",
+        "sha256": "f534a50a2b4d48dc3bc0ec147c8bd7c304280fff23b153f3f11803c4d49d927e",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.3.0"
+    },
+    "pubspec_parse": {
+      "dependency": "direct dev",
+      "description": {
+        "name": "pubspec_parse",
+        "sha256": "c63b2876e58e194e4b0828fcb080ad0e06d051cb607a6be51a9e084f47cb9367",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.2.3"
+    },
+    "quiver": {
+      "dependency": "transitive",
+      "description": {
+        "name": "quiver",
+        "sha256": "b1c1ac5ce6688d77f65f3375a9abb9319b3cb32486bdc7a1e0fdf004d7ba4e47",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "3.2.1"
+    },
+    "retry": {
+      "dependency": "transitive",
+      "description": {
+        "name": "retry",
+        "sha256": "822e118d5b3aafed083109c72d5f484c6dc66707885e07c0fbcb8b986bba7efc",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "3.1.2"
+    },
+    "shelf": {
+      "dependency": "transitive",
+      "description": {
+        "name": "shelf",
+        "sha256": "ad29c505aee705f41a4d8963641f91ac4cee3c8fad5947e033390a7bd8180fa4",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.4.1"
+    },
+    "shelf_packages_handler": {
+      "dependency": "transitive",
+      "description": {
+        "name": "shelf_packages_handler",
+        "sha256": "89f967eca29607c933ba9571d838be31d67f53f6e4ee15147d5dc2934fee1b1e",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "3.0.2"
+    },
+    "shelf_static": {
+      "dependency": "transitive",
+      "description": {
+        "name": "shelf_static",
+        "sha256": "a41d3f53c4adf0f57480578c1d61d90342cd617de7fc8077b1304643c2d85c1e",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.1.2"
+    },
+    "shelf_web_socket": {
+      "dependency": "transitive",
+      "description": {
+        "name": "shelf_web_socket",
+        "sha256": "9ca081be41c60190ebcb4766b2486a7d50261db7bd0f5d9615f2d653637a84c1",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.0.4"
+    },
+    "source_map_stack_trace": {
+      "dependency": "transitive",
+      "description": {
+        "name": "source_map_stack_trace",
+        "sha256": "84cf769ad83aa6bb61e0aa5a18e53aea683395f196a6f39c4c881fb90ed4f7ae",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.1.1"
+    },
+    "source_maps": {
+      "dependency": "direct main",
+      "description": {
+        "name": "source_maps",
+        "sha256": "708b3f6b97248e5781f493b765c3337db11c5d2c81c3094f10904bfa8004c703",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "0.10.12"
+    },
+    "source_span": {
+      "dependency": "direct main",
+      "description": {
+        "name": "source_span",
+        "sha256": "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.10.0"
+    },
+    "stack_trace": {
+      "dependency": "direct main",
+      "description": {
+        "name": "stack_trace",
+        "sha256": "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.11.1"
+    },
+    "stream_channel": {
+      "dependency": "direct main",
+      "description": {
+        "name": "stream_channel",
+        "sha256": "ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.1.2"
+    },
+    "stream_transform": {
+      "dependency": "direct main",
+      "description": {
+        "name": "stream_transform",
+        "sha256": "14a00e794c7c11aa145a170587321aedce29769c08d7f58b1d141da75e3b1c6f",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.1.0"
+    },
+    "string_scanner": {
+      "dependency": "direct main",
+      "description": {
+        "name": "string_scanner",
+        "sha256": "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.2.0"
+    },
+    "term_glyph": {
+      "dependency": "direct main",
+      "description": {
+        "name": "term_glyph",
+        "sha256": "a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.2.1"
+    },
+    "test": {
+      "dependency": "direct dev",
+      "description": {
+        "name": "test",
+        "sha256": "694c108e13c6b35b15fcb0f8f03eddf8373f93b044c9497b5e81ce09f7381bda",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.25.1"
+    },
+    "test_api": {
+      "dependency": "transitive",
+      "description": {
+        "name": "test_api",
+        "sha256": "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "0.7.0"
+    },
+    "test_core": {
+      "dependency": "transitive",
+      "description": {
+        "name": "test_core",
+        "sha256": "2bc4b4ecddd75309300d8096f781c0e3280ca1ef85beda558d33fcbedc2eead4",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "0.6.0"
+    },
+    "test_descriptor": {
+      "dependency": "direct dev",
+      "description": {
+        "name": "test_descriptor",
+        "sha256": "abe245e8b0d61245684127fe32343542c25dc2a1ce8f405531637241d98d07e4",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.0.1"
+    },
+    "test_process": {
+      "dependency": "direct dev",
+      "description": {
+        "name": "test_process",
+        "sha256": "217f19b538926e4922bdb2a01410100ec4e3beb4cc48eae5ae6b20037b07bbd6",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.1.0"
+    },
+    "typed_data": {
+      "dependency": "direct main",
+      "description": {
+        "name": "typed_data",
+        "sha256": "facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.3.2"
+    },
+    "uri": {
+      "dependency": "transitive",
+      "description": {
+        "name": "uri",
+        "sha256": "889eea21e953187c6099802b7b4cf5219ba8f3518f604a1033064d45b1b8268a",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.0.0"
+    },
+    "vm_service": {
+      "dependency": "transitive",
+      "description": {
+        "name": "vm_service",
+        "sha256": "a2662fb1f114f4296cf3f5a50786a2d888268d7776cf681aa17d660ffa23b246",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "14.0.0"
+    },
+    "watcher": {
+      "dependency": "direct main",
+      "description": {
+        "name": "watcher",
+        "sha256": "3d2ad6751b3c16cf07c7fca317a1413b3f26530319181b37e3b9039b84fc01d8",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.1.0"
+    },
+    "web_socket_channel": {
+      "dependency": "transitive",
+      "description": {
+        "name": "web_socket_channel",
+        "sha256": "d88238e5eac9a42bb43ca4e721edba3c08c6354d4a53063afaa568516217621b",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.4.0"
+    },
+    "webkit_inspection_protocol": {
+      "dependency": "transitive",
+      "description": {
+        "name": "webkit_inspection_protocol",
+        "sha256": "87d3f2333bb240704cd3f1c6b5b7acd8a10e7f0bc28c28dcf14e782014f4a572",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.2.1"
+    },
+    "xml": {
+      "dependency": "transitive",
+      "description": {
+        "name": "xml",
+        "sha256": "af5e77e9b83f2f4adc5d3f0a4ece1c7f45a2467b695c2540381bac793e34e556",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "6.4.2"
+    },
+    "yaml": {
+      "dependency": "direct dev",
+      "description": {
+        "name": "yaml",
+        "sha256": "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "3.1.2"
+    }
+  },
+  "sdks": {
+    "dart": ">=3.1.0 <4.0.0"
+  }
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/dart-sass/update.sh b/nixpkgs/pkgs/development/tools/misc/dart-sass/update.sh
new file mode 100755
index 000000000000..595349e1387c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/dart-sass/update.sh
@@ -0,0 +1,45 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p yq ripgrep common-updater-scripts dart
+
+set -xeu -o pipefail
+
+PACKAGE_DIR="$(realpath "$(dirname "$0")")"
+cd "$PACKAGE_DIR/.."
+while ! test -f default.nix; do cd .. ; done
+NIXPKGS_DIR="$PWD"
+
+dart_sass_version="$(
+  list-git-tags --url=https://github.com/sass/dart-sass \
+  | rg '^\d' \
+  | sort --version-sort \
+  | tail -n1
+)"
+
+embedded_protocol_version="$(
+  list-git-tags --url=https://github.com/sass/sass \
+  | rg '^embedded-protocol-(.*)' -r '$1' \
+  | sort --version-sort \
+  | tail -n1
+)"
+
+cd "$NIXPKGS_DIR"
+update-source-version dart-sass "$dart_sass_version"
+update-source-version dart-sass "$embedded_protocol_version" \
+  --version-key=embedded-protocol-version \
+  --source-key=embedded-protocol
+
+TMPDIR="$(mktemp -d)"
+cd "$TMPDIR"
+
+src="$(nix-build --no-link "$NIXPKGS_DIR" -A dart-sass.src)"
+cp $src/pubspec.* .
+
+# Maybe one day upstream will ship a pubspec.lock,
+# until then we must generate a fresh one
+if ! test -f pubspec.lock; then
+  dart pub update
+fi
+
+yq . pubspec.lock > "$PACKAGE_DIR/pubspec.lock.json"
+
+rm -rf "$TMPDIR"
diff --git a/nixpkgs/pkgs/development/tools/misc/dbench/default.nix b/nixpkgs/pkgs/development/tools/misc/dbench/default.nix
new file mode 100644
index 000000000000..bb95f21f68d6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/dbench/default.nix
@@ -0,0 +1,46 @@
+{ lib, stdenv, fetchgit, autoconf, popt, zlib, rpcsvc-proto, libtirpc }:
+
+stdenv.mkDerivation rec {
+  pname = "dbench";
+  version = "2013-01-01";
+
+  src = fetchgit {
+    url = "git://git.samba.org/sahlberg/${pname}.git";
+    rev = "65b19870ed8d25bff14cafa1c30beb33f1fb6597";
+    sha256 = "16lcbwmmx8z5i73k3dnf54yffrpx7ql3y9k3cpkss9dcyxb1p83i";
+  };
+
+  nativeBuildInputs = [ autoconf rpcsvc-proto ];
+  buildInputs = [ popt zlib libtirpc ];
+  env.NIX_CFLAGS_COMPILE = toString [ "-I${libtirpc.dev}/include/tirpc" ];
+  NIX_LDFLAGS = [ "-ltirpc" ];
+
+  patches = [
+    # patch has been also sent upstream and might be included in future versions
+    ./fix-missing-stdint.patch
+  ];
+
+  preConfigure = ''
+    ./autogen.sh
+    configureFlagsArray+=("--datadir=$out/share/dbench")
+  '';
+
+  postInstall = ''
+    cp -R loadfiles/* $out/share/dbench/doc/dbench/loadfiles
+
+    # dbench looks here for the file
+    ln -s doc/dbench/loadfiles/client.txt $out/share/dbench/client.txt
+
+    # backwards compatible to older nixpkgs packaging introduced by
+    # 3f27be8e5d5861cd4b9487d6c5212d88bf24316d
+    ln -s dbench/doc/dbench/loadfiles $out/share/loadfiles
+  '';
+
+  meta = with lib; {
+    description = "Filesystem benchmark tool based on load patterns";
+    homepage = "https://dbench.samba.org/";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/dbench/fix-missing-stdint.patch b/nixpkgs/pkgs/development/tools/misc/dbench/fix-missing-stdint.patch
new file mode 100644
index 000000000000..96cb28e9e55a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/dbench/fix-missing-stdint.patch
@@ -0,0 +1,10 @@
+--- dbench-65b1987.org/libnfs.c	2017-11-08 12:25:39.652147989 +0000
++++ dbench-65b1987/libnfs.c	2017-11-08 12:26:20.269897054 +0000
+@@ -23,6 +23,7 @@
+ #include <sys/types.h>
+ #include <sys/stat.h>
+ #include <fcntl.h>
++#include <stdint.h>
+ 
+ #define discard_const(ptr) ((void *)((intptr_t)(ptr)))
+ 
diff --git a/nixpkgs/pkgs/development/tools/misc/ddd/default.nix b/nixpkgs/pkgs/development/tools/misc/ddd/default.nix
new file mode 100644
index 000000000000..e3d55472faac
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/ddd/default.nix
@@ -0,0 +1,31 @@
+{lib, stdenv, fetchurl, motif, ncurses, libX11, libXt}:
+
+stdenv.mkDerivation rec {
+  pname = "ddd";
+  version = "3.3.12";
+  src = fetchurl {
+    url = "mirror://gnu/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "0p5nx387857w3v2jbgvps2p6mlm0chajcdw5sfrddcglsxkwvmis";
+  };
+  buildInputs = [motif ncurses libX11 libXt];
+  configureFlags = [ "--with-x" ];
+
+  patches = [
+    # http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=504868
+    ./gcc44.patch
+  ];
+
+  env.NIX_CFLAGS_COMPILE = "-fpermissive";
+
+  postInstall = ''
+    install -D icons/ddd.xpm $out/share/pixmaps/ddd.xpm
+  '';
+
+  meta = {
+    homepage = "https://www.gnu.org/software/ddd";
+    description = "Graphical front-end for command-line debuggers";
+    license = lib.licenses.gpl3Plus;
+    platforms = lib.platforms.linux;
+    maintainers = with lib.maintainers; [ emilytrau ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/ddd/gcc44.patch b/nixpkgs/pkgs/development/tools/misc/ddd/gcc44.patch
new file mode 100644
index 000000000000..c4e4004b12e0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/ddd/gcc44.patch
@@ -0,0 +1,11 @@
+http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=504868
+--- a/ddd/strclass.C~ 2008-11-07 17:57:13.000000000 +0000
++++ b/ddd/strclass.C  2008-11-07 17:57:27.000000000 +0000
+@@ -39,6 +39,7 @@
+ #include <ctype.h>
+ #include <limits.h>
+ #include <new>
++#include <cstdio>
+ #include <stdlib.h>
+ 
+ void string::error(const char* msg) const
diff --git a/nixpkgs/pkgs/development/tools/misc/debugedit/default.nix b/nixpkgs/pkgs/development/tools/misc/debugedit/default.nix
new file mode 100644
index 000000000000..8da0effe7be5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/debugedit/default.nix
@@ -0,0 +1,30 @@
+#TODO@deliciouslytyped The tool seems to unnecessarily force mutable access for the debugedit `-l` feature
+{fetchgit, lib, stdenv, autoreconfHook, pkg-config, elfutils, help2man, util-linux}:
+stdenv.mkDerivation rec {
+  pname = "debugedit";
+  version = "5.0";
+
+  nativeBuildInputs = [ autoreconfHook pkg-config help2man ];
+  buildInputs = [ elfutils ];
+  nativeCheckInputs = [ util-linux ]; # Tests use `rev`
+
+  src = fetchgit {
+    url = "git://sourceware.org/git/debugedit.git";
+    rev = "debugedit-${version}";
+    sha256 = "VTZ7ybQT3DfKIfK0lH+JiehCJyJ+qpQ0bAn1/f+Pscs=";
+  };
+
+  preBuild = ''
+    patchShebangs scripts/find-debuginfo.in
+  '';
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "Provides programs and scripts for creating debuginfo and source file distributions, collect build-ids and rewrite source paths in DWARF data for debugging, tracing and profiling";
+    homepage = "https://sourceware.org/debugedit/";
+    license = licenses.gpl3Plus;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ deliciouslytyped ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/deheader/default.nix b/nixpkgs/pkgs/development/tools/misc/deheader/default.nix
new file mode 100644
index 000000000000..7847c29f67c5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/deheader/default.nix
@@ -0,0 +1,68 @@
+{ lib
+, stdenv
+, python3
+, xmlto
+, docbook-xsl-nons
+, fetchFromGitLab
+, installShellFiles
+}:
+
+stdenv.mkDerivation rec {
+  pname = "deheader";
+  version = "1.10";
+  outputs = [ "out" "man" ];
+
+  src = fetchFromGitLab {
+    owner = "esr";
+    repo = "deheader";
+    rev = version;
+    sha256 = "sha256-dYTHvFWlt3aM/fdZFge7GBdd9bfCrEcp7ULJuBl71Xs=";
+  };
+
+  buildInputs = [ python3 ];
+
+  nativeBuildInputs = [ xmlto docbook-xsl-nons installShellFiles ];
+
+  # With upstream Makefile, xmlto is called without "--skip-validation". It
+  # makes it require a lot of dependencies, yet ultimately it fails
+  # nevertheless in attempt to fetch something from SourceForge.
+  #
+  # Need to set "foundMakefile" so "make check" tests are run.
+  buildPhase = ''
+    runHook preBuild
+
+    xmlto man --skip-validation deheader.xml
+    patchShebangs ./deheader
+    foundMakefile=1
+
+    runHook postBuild
+  '';
+
+  doCheck = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 ./deheader -t $out/bin
+    installManPage ./deheader.1
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Tool to find and optionally remove unneeded includes in C or C++ source files";
+    longDescription = ''
+      This tool takes a list of C or C++ sourcefiles and generates a report
+      on which #includes can be omitted from them -- the test, for each foo.c
+      or foo.cc or foo.cpp, is simply whether 'rm foo.o; make foo.o' returns a
+      zero status. Optionally, with the -r option, the unneeded headers are removed.
+      The tool also reports on headers required for strict portability.
+    '';
+    homepage = "http://catb.org/~esr/deheader";
+    changelog = "https://gitlab.com/esr/deheader/-/blob/master/NEWS.adoc";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ kaction ];
+
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/dejagnu/default.nix b/nixpkgs/pkgs/development/tools/misc/dejagnu/default.nix
new file mode 100644
index 000000000000..5c7720a2024b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/dejagnu/default.nix
@@ -0,0 +1,66 @@
+{ fetchurl, lib, stdenv, expect, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "dejagnu";
+  version = "1.6.3";
+
+  src = fetchurl {
+    url = "mirror://gnu/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "1qx2cv6qkxbiqg87jh217jb62hk3s7dmcs4cz1llm2wmsynfznl7";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ expect ];
+
+  # dejagnu-1.6.3 can't successfully run tests in source tree:
+  #   https://wiki.linuxfromscratch.org/lfs/ticket/4871
+  preConfigure = ''
+    mkdir build
+    cd build
+  '';
+  configureScript = "../configure";
+
+  doCheck = !(with stdenv; isDarwin && isAarch64);
+
+  # Note: The test-suite *requires* /dev/pts among the `build-chroot-dirs' of
+  # the build daemon when building in a chroot.  See
+  # <https://www.mail-archive.com/nix-dev@cs.uu.nl/msg01056.html> for
+  # details.
+
+  # The test-suite needs to have a non-empty stdin:
+  #   https://lists.gnu.org/archive/html/bug-dejagnu/2003-06/msg00002.html
+  checkPhase = ''
+    # Provide `runtest' with a log name, otherwise it tries to run
+    # `whoami', which fails when in a chroot.
+    LOGNAME="nix-build-daemon" make check < /dev/zero
+  '';
+
+  postInstall = ''
+    # 'runtest' and 'dejagnu' look up 'expect' in their 'bin' path
+    # first. We avoid use of 'wrapProgram' here because  wrapping
+    # of shell scripts does not preserve argv[0] for schell scripts:
+    #   https://sourceware.org/PR30052#c5
+    ln -s ${expect}/bin/expect $out/bin/expect
+  '';
+
+  meta = with lib; {
+    description = "Framework for testing other programs";
+
+    longDescription = ''
+      DejaGnu is a framework for testing other programs.  Its purpose
+      is to provide a single front end for all tests.  Think of it as a
+      custom library of Tcl procedures crafted to support writing a
+      test harness.  A test harness is the testing infrastructure that
+      is created to support a specific program or tool.  Each program
+      can have multiple testsuites, all supported by a single test
+      harness.  DejaGnu is written in Expect, which in turn uses Tcl --
+      Tool command language.
+    '';
+
+    homepage = "https://www.gnu.org/software/dejagnu/";
+    license = licenses.gpl2Plus;
+
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ vrthra ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/devspace/default.nix b/nixpkgs/pkgs/development/tools/misc/devspace/default.nix
new file mode 100644
index 000000000000..198e15370bf8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/devspace/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, testers
+, devspace
+}:
+
+buildGoModule rec {
+  pname = "devspace";
+  version = "6.3.10";
+
+  src = fetchFromGitHub {
+    owner = "devspace-sh";
+    repo = "devspace";
+    rev = "v${version}";
+    hash = "sha256-ExVetF5YP9gf5ifBsdPow7KA867+4iOxe/0OwZwctoc=";
+  };
+
+  vendorHash = null;
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X main.version=${version}"
+  ];
+
+  # Check are disable since they requiered a working K8S cluster
+  # TODO: add a nixosTest to be able to perform the package check
+  doCheck = false;
+
+  passthru.tests.version = testers.testVersion {
+    package = devspace;
+  };
+
+  meta = with lib; {
+    description = "An open-source developer tool for Kubernetes that lets you develop and deploy cloud-native software faster";
+    homepage = "https://devspace.sh/";
+    changelog = "https://github.com/devspace-sh/devspace/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ darkonion0 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/dfu-programmer/default.nix b/nixpkgs/pkgs/development/tools/misc/dfu-programmer/default.nix
new file mode 100644
index 000000000000..062f68c83438
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/dfu-programmer/default.nix
@@ -0,0 +1,21 @@
+{ lib, stdenv, fetchurl, libusb-compat-0_1 }:
+stdenv.mkDerivation rec {
+  pname = "dfu-programmer";
+  version = "0.7.2";
+
+  buildInputs = [ libusb-compat-0_1 ];
+
+  src = fetchurl {
+    url = "mirror://sourceforge/dfu-programmer/${pname}-${version}.tar.gz";
+    sha256 = "15gr99y1z9vbvhrkd25zqhnzhg6zjmaam3vfjzf2mazd39mx7d0x";
+  };
+
+  configureFlags = [ "--disable-libusb_1_0" ];
+
+  meta = with lib; {
+    license = licenses.gpl2;
+    description = "A Device Firmware Update based USB programmer for Atmel chips with a USB bootloader";
+    homepage = "http://dfu-programmer.sourceforge.net/";
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/dfu-util/default.nix b/nixpkgs/pkgs/development/tools/misc/dfu-util/default.nix
new file mode 100644
index 000000000000..26610c2c78d7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/dfu-util/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchurl, pkg-config, libusb1 }:
+
+stdenv.mkDerivation rec {
+  pname = "dfu-util";
+  version = "0.11";
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ libusb1 ];
+
+  src = fetchurl {
+    url = "https://dfu-util.sourceforge.net/releases/${pname}-${version}.tar.gz";
+    sha256 = "sha256-tLU7ohqC7349TEffKVKt9fpJT0mbawtXxYxdBK6P8Z4=";
+  };
+
+  meta = with lib; {
+    description = "Device firmware update (DFU) USB programmer";
+    longDescription = ''
+      dfu-util is a program that implements the host (PC) side of the USB
+      DFU 1.0 and 1.1 (Universal Serial Bus Device Firmware Upgrade) protocol.
+
+      DFU is intended to download and upload firmware to devices connected over
+      USB. It ranges from small devices like micro-controller boards up to mobile
+      phones. With dfu-util you are able to download firmware to your device or
+      upload firmware from it.
+    '';
+    homepage = "https://dfu-util.sourceforge.net";
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.fpletz ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/direvent/default.nix b/nixpkgs/pkgs/development/tools/misc/direvent/default.nix
new file mode 100644
index 000000000000..79a238ad0c0c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/direvent/default.nix
@@ -0,0 +1,21 @@
+{ lib, stdenv
+, fetchurl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "direvent";
+  version = "5.3";
+
+  src = fetchurl {
+    url = "mirror://gnu/direvent/direvent-${version}.tar.gz";
+    sha256 = "sha256-lAWop32kn+krvkrxi/kl/5H20zdMELfXAKAxusuUxJc=";
+  };
+
+  meta = with lib; {
+    description = "Directory event monitoring daemon";
+    homepage = "https://www.gnu.org.ua/software/direvent/";
+    license = licenses.gpl3Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ puffnfresh ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/distcc/default.nix b/nixpkgs/pkgs/development/tools/misc/distcc/default.nix
new file mode 100644
index 000000000000..312f69328580
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/distcc/default.nix
@@ -0,0 +1,84 @@
+{ lib, stdenv, fetchFromGitHub, popt, avahi, pkg-config, python3, gtk3, runCommand
+, gcc, autoconf, automake, which, procps, libiberty_static
+, runtimeShell
+, sysconfDir ? ""   # set this parameter to override the default value $out/etc
+, static ? false
+}:
+
+let
+  pname = "distcc";
+  version = "2021-03-11";
+  distcc = stdenv.mkDerivation {
+    inherit pname version;
+    src = fetchFromGitHub {
+      owner = "distcc";
+      repo = "distcc";
+      rev = "de21b1a43737fbcf47967a706dab4c60521dbbb1";
+      sha256 = "0zjba1090awxkmgifr9jnjkxf41zhzc4f6mrnbayn3v6s77ca9x4";
+    };
+
+    nativeBuildInputs = [ pkg-config autoconf automake ];
+    buildInputs = [popt avahi python3 gtk3 which procps libiberty_static];
+    preConfigure =
+    ''
+      export CPATH=$(ls -d ${gcc.cc}/lib/gcc/*/${gcc.cc.version}/plugin/include)
+
+      configureFlagsArray=( CFLAGS="-O2 -fno-strict-aliasing"
+                            CXXFLAGS="-O2 -fno-strict-aliasing"
+          --mandir=$out/share/man
+                            ${lib.optionalString (sysconfDir != "") "--sysconfdir=${sysconfDir}"}
+                            ${lib.optionalString static "LDFLAGS=-static"}
+                            ${lib.withFeature (static == true || popt == null) "included-popt"}
+                            ${lib.withFeature (avahi != null) "avahi"}
+                            ${lib.withFeature (gtk3 != null) "gtk"}
+                            --without-gnome
+                            --enable-rfc2553
+                            --disable-Werror   # a must on gcc 4.6
+                           )
+      installFlags="sysconfdir=$out/etc";
+
+      ./autogen.sh
+    '';
+
+    # The test suite fails because it uses hard-coded paths, i.e. /usr/bin/gcc.
+    doCheck = false;
+
+    passthru = {
+      # A derivation that provides gcc and g++ commands, but that
+      # will end up calling distcc for the given cacheDir
+      #
+      # extraConfig is meant to be sh lines exporting environment
+      # variables like DISTCC_HOSTS, DISTCC_DIR, ...
+      links = extraConfig: (runCommand "distcc-links" { passthru.gcc = gcc.cc; }
+        ''
+          mkdir -p $out/bin
+          if [ -x "${gcc.cc}/bin/gcc" ]; then
+            cat > $out/bin/gcc << EOF
+            #!${runtimeShell}
+            ${extraConfig}
+            exec ${distcc}/bin/distcc gcc "\$@"
+          EOF
+            chmod +x $out/bin/gcc
+          fi
+          if [ -x "${gcc.cc}/bin/g++" ]; then
+            cat > $out/bin/g++ << EOF
+            #!${runtimeShell}
+            ${extraConfig}
+            exec ${distcc}/bin/distcc g++ "\$@"
+          EOF
+            chmod +x $out/bin/g++
+          fi
+        '');
+    };
+
+    meta = {
+      description = "A fast, free distributed C/C++ compiler";
+      homepage = "http://distcc.org";
+      license = "GPL";
+
+      platforms = lib.platforms.linux;
+      maintainers = with lib.maintainers; [ anderspapitto ];
+    };
+  };
+in
+  distcc
diff --git a/nixpkgs/pkgs/development/tools/misc/distcc/masq.nix b/nixpkgs/pkgs/development/tools/misc/distcc/masq.nix
new file mode 100644
index 000000000000..27840481a109
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/distcc/masq.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv, gccRaw, binutils }:
+
+stdenv.mkDerivation {
+  name = "distcc-masq-${gccRaw.name}";
+
+  dontUnpack = true;
+
+  installPhase = ''
+    mkdir -p $out/bin
+
+    bin=${gccRaw}/bin
+
+    shopt -s nullglob
+    if [ -f $bin/gcc ]; then
+      ln -s $bin/gcc $out/bin
+    else
+      for a in $bin/*-gcc; do
+        ln -s $bin/*-gcc $out/bin/gcc
+        ln -s $bin/*-gcc $out/bin/cc
+      done
+    fi
+
+    if [ -f $bin/g++ ]; then
+      ln -s $bin/g++ $out/bin
+    else
+      for a in $bin/*-g++; do
+        ln -sf $bin/*-g++ $out/bin/g++
+        ln -sf $bin/*-g++ $out/bin/c++
+      done
+    fi
+
+    bbin=${binutils}/bin
+    if [ -f $bbin/as ]; then
+      ln -s $bbin/as $out/bin
+    else
+      for a in $bbin/*-as; do
+        ln -sf $bbin/*-as $out/bin/as
+      done
+    fi
+  '';
+
+  meta = {
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/doclifter/default.nix b/nixpkgs/pkgs/development/tools/misc/doclifter/default.nix
new file mode 100644
index 000000000000..d346f94b4784
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/doclifter/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchurl, python3, makeWrapper, libxml2 }:
+
+stdenv.mkDerivation rec {
+  pname = "doclifter";
+  version = "2.20";
+  src = fetchurl {
+    url = "http://www.catb.org/~esr/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "sha256-BEuMbICJ8TD3+VjUr8rmhss7XlPNjxSy1P0SkmKLPsc=";
+  };
+  buildInputs = [ python3 ];
+  nativeBuildInputs = [ python3 makeWrapper ];
+
+  strictDeps = true;
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  preInstall = ''
+    mkdir -p $out/bin
+    mkdir -p $out/share/man/man1
+    substituteInPlace manlifter \
+      --replace '/usr/bin/env python2' '/usr/bin/env python3'
+    2to3 -w manlifter
+    cp manlifter $out/bin
+    wrapProgram "$out/bin/manlifter" \
+        --prefix PATH : "${libxml2}/bin:$out/bin"
+    cp manlifter.1 $out/share/man/man1
+  '';
+
+  meta = {
+    description = "Lift documents in nroff markups to XML-DocBook";
+    homepage = "http://www.catb.org/esr/doclifter";
+    license = "BSD";
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/docopts/default.nix b/nixpkgs/pkgs/development/tools/misc/docopts/default.nix
new file mode 100644
index 000000000000..1b7834318772
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/docopts/default.nix
@@ -0,0 +1,31 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "docopts";
+  version = "0.6.4-with-no-mangle-double-dash";
+
+  src = fetchFromGitHub {
+    owner = "docopt";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0zxax0kl8wqpkzmw9ij4qgfhjbk4r7996pjyp9xf5icyk8knp00q";
+  };
+
+  goPackagePath = "github.com/docopt/${pname}";
+
+  goDeps = ./deps.nix;
+
+  subPackages = [ "./" ];
+
+  postInstall = ''
+    install -D -m 755 ./go/src/$goPackagePath/docopts.sh $out/bin/docopts.sh
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/docopt/${pname}";
+    description = "docopt CLI tool for shell scripting";
+    license = licenses.mit;
+    maintainers = [ maintainers.confus ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/docopts/deps.nix b/nixpkgs/pkgs/development/tools/misc/docopts/deps.nix
new file mode 100644
index 000000000000..8cc1686de7d6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/docopts/deps.nix
@@ -0,0 +1,11 @@
+[
+  {
+    goPackagePath = "github.com/docopt/docopt-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/docopt/docopt.go";
+      rev = "ee0de3bc6815ee19d4a46c7eb90f829db0e014b1"; # "0.6.2";
+      sha256 = "sha256-0mCKIC5x7aauBL8ahXB9ExMfoTJl55HaafWWWPNRmUI=";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/development/tools/misc/doq/default.nix b/nixpkgs/pkgs/development/tools/misc/doq/default.nix
new file mode 100644
index 000000000000..8322c7e2b49c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/doq/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, python3
+, fetchFromGitHub
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "doq";
+  version = "0.10.0";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "heavenshell";
+    repo = "py-doq";
+    rev = "refs/tags/${version}";
+    hash = "sha256-iVu+5o8pZ5OhIzNItWbzUzqC3VQ6HCD7nP5gW/PVAMM=";
+  };
+
+  nativeBuildInputs = with python3.pkgs; [
+    setuptools
+    setuptools-generate
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    jinja2
+    parso
+    toml
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    parameterized
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [ "doq" ];
+
+  meta = with lib; {
+    description = "Docstring generator for Python";
+    homepage = "https://github.com/heavenshell/py-doq";
+    changelog = "https://github.com/heavenshell/py-doq/releases/tag/${src.rev}";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ natsukium ];
+    mainProgram = "doq";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/drush/default.nix b/nixpkgs/pkgs/development/tools/misc/drush/default.nix
new file mode 100644
index 000000000000..bd1c71109963
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/drush/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchurl, fetchFromGitHub, php, which, makeWrapper, bash, coreutils, ncurses }:
+
+stdenv.mkDerivation rec {
+  pname = "drush";
+  version = "8.4.12";
+
+  src = fetchurl {
+    url = "https://github.com/drush-ops/drush/releases/download/${version}/drush.phar";
+    sha256 = "sha256-YtD9lD621LJJAM/ieL4KWvY4o4Uqo3+FWgjGYGdQQaw=";
+  };
+
+  dontUnpack = true;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    install -D $src $out/libexec/drush/drush.phar
+    makeWrapper ${php}/bin/php $out/bin/drush \
+      --add-flags "$out/libexec/drush/drush.phar" \
+      --prefix PATH : "${lib.makeBinPath [ which php bash coreutils ncurses ]}"
+  '';
+
+  meta = with lib; {
+    description = "Command-line shell and Unix scripting interface for Drupal";
+    homepage = "https://github.com/drush-ops/drush";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ lovek323 ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/dura/Cargo.lock.patch b/nixpkgs/pkgs/development/tools/misc/dura/Cargo.lock.patch
new file mode 100644
index 000000000000..48db9caaa291
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/dura/Cargo.lock.patch
@@ -0,0 +1,13 @@
+diff --git i/Cargo.lock w/Cargo.lock
+index e037758..e039531 100644
+--- i/Cargo.lock
++++ w/Cargo.lock
+@@ -106,7 +106,7 @@ dependencies = [
+ 
+ [[package]]
+ name = "dura"
+-version = "0.2.0-snapshot"
++version = "0.2.0"
+ dependencies = [
+  "chrono",
+  "clap",
diff --git a/nixpkgs/pkgs/development/tools/misc/dura/default.nix b/nixpkgs/pkgs/development/tools/misc/dura/default.nix
new file mode 100644
index 000000000000..eba3f16c3659
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/dura/default.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, openssl, pkg-config, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "dura";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "tkellogg";
+    repo = "dura";
+    rev = "v${version}";
+    sha256 = "sha256-xAcFk7z26l4BYYBEw+MvbG6g33MpPUvnpGvgmcqhpGM=";
+  };
+
+  cargoSha256 = "sha256-XOtPtOEKZMJzNeBZBT3Mc/KOjMOcz71byIv/ftcRP48=";
+
+  cargoPatches = [
+    ./Cargo.lock.patch
+  ];
+
+  doCheck = false;
+
+  buildInputs = [
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [
+    Security
+  ];
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  meta = with lib; {
+    description = "A background process that saves uncommitted changes on git";
+    longDescription = ''
+      Dura is a background process that watches your Git repositories and
+      commits your uncommitted changes without impacting HEAD, the current
+      branch, or the Git index (staged files). If you ever get into an
+      "oh snap!" situation where you think you just lost days of work,
+      checkout a "dura" branch and recover.
+    '';
+    homepage = "https://github.com/tkellogg/dura";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ drupol ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/dwz/default.nix b/nixpkgs/pkgs/development/tools/misc/dwz/default.nix
new file mode 100644
index 000000000000..0a13d4a68dd0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/dwz/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchurl, elfutils }:
+
+stdenv.mkDerivation rec {
+  pname = "dwz";
+  version = "0.14";
+
+  src = fetchurl {
+    url = "https://www.sourceware.org/ftp/${pname}/releases/${pname}-${version}.tar.gz";
+    sha256 = "07qdvzfk4mvbqj5z3aff7vc195dxqn1mi27w2dzs1w2zhymnw01k";
+  };
+
+  nativeBuildInputs = [ elfutils ];
+
+  makeFlags = [ "prefix=${placeholder "out"}" ];
+
+  meta = with lib; {
+    homepage = "https://sourceware.org/dwz/";
+    description = "DWARF optimization and duplicate removal tool";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ jbcrail ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/edb/default.nix b/nixpkgs/pkgs/development/tools/misc/edb/default.nix
new file mode 100644
index 000000000000..fdde4064698c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/edb/default.nix
@@ -0,0 +1,42 @@
+{ lib, mkDerivation, fetchFromGitHub, cmake, pkg-config, boost, capstone
+, double-conversion, graphviz, qtxmlpatterns }:
+
+mkDerivation rec {
+  pname = "edb";
+  version = "1.4.0";
+
+  src = fetchFromGitHub {
+    owner = "eteran";
+    repo = "edb-debugger";
+    rev = version;
+    fetchSubmodules = true;
+    hash = "sha256-1Q0eZS05L4sxzcPvEFdEaobO7JYHRu98Yf+n3ZnBi+E=";
+  };
+
+  nativeBuildInputs = [ cmake pkg-config ];
+
+  buildInputs = [ boost.dev capstone double-conversion graphviz qtxmlpatterns ];
+
+  postPatch = ''
+    # Remove CMAKE_INSTALL_PREFIX from DEFAULT_PLUGIN_PATH otherwise the nix store path will appear twice.
+    substituteInPlace ./src/CMakeLists.txt --replace \
+        '-DDEFAULT_PLUGIN_PATH=\"''${CMAKE_INSTALL_PREFIX}/''${CMAKE_INSTALL_LIBDIR}/edb\"' \
+        '-DDEFAULT_PLUGIN_PATH=\"''${CMAKE_INSTALL_LIBDIR}/edb\"'
+
+    # The build script checks for the presence of .git to determine whether
+    # submodules were fetched and will throw an error if it's not there.
+    # Avoid using leaveDotGit in the fetchFromGitHub options as it is non-deterministic.
+    mkdir -p src/qhexview/.git lib/gdtoa-desktop/.git
+
+    # Change default optional terminal program path to one that is more likely to work on NixOS.
+    substituteInPlace ./src/Configuration.cpp --replace "/usr/bin/xterm" "xterm";
+  '';
+
+  meta = with lib; {
+    description = "Cross platform AArch32/x86/x86-64 debugger";
+    homepage = "https://github.com/eteran/edb-debugger";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ lihop maxxk ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/editorconfig-checker/default.nix b/nixpkgs/pkgs/development/tools/misc/editorconfig-checker/default.nix
new file mode 100644
index 000000000000..699f6c91978c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/editorconfig-checker/default.nix
@@ -0,0 +1,37 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles, testers, editorconfig-checker }:
+
+buildGoModule rec {
+  pname = "editorconfig-checker";
+  version = "2.8.0";
+
+  src = fetchFromGitHub {
+    owner = "editorconfig-checker";
+    repo = "editorconfig-checker";
+    rev = version;
+    hash = "sha256-CVstdtFPt/OlvJE27O+CqqDpUqp9bQl18IGyf8nputM=";
+  };
+
+  vendorHash = "sha256-t2h9jtGfips+cpN1ckVhVgpg4egIYVXd89ahyDzV060=";
+
+  doCheck = false;
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  ldflags = [ "-X main.version=${version}" ];
+
+  postInstall = ''
+    installManPage docs/editorconfig-checker.1
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = editorconfig-checker;
+  };
+
+  meta = with lib; {
+    changelog = "https://github.com/editorconfig-checker/editorconfig-checker/releases/tag/${src.rev}";
+    description = "A tool to verify that your files are in harmony with your .editorconfig";
+    homepage = "https://editorconfig-checker.github.io/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ uri-canva zowoq ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/editorconfig-core-c/default.nix b/nixpkgs/pkgs/development/tools/misc/editorconfig-core-c/default.nix
new file mode 100644
index 000000000000..f46e840276ff
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/editorconfig-core-c/default.nix
@@ -0,0 +1,56 @@
+{ lib, stdenv, fetchpatch, fetchFromGitHub, cmake, pcre2, doxygen }:
+
+stdenv.mkDerivation rec {
+  pname = "editorconfig-core-c";
+  version = "0.12.5";
+
+  outputs = [ "out" "dev" ];
+
+  src = fetchFromGitHub {
+    owner = "editorconfig";
+    repo = "editorconfig-core-c";
+    rev = "v${version}";
+    sha256 = "sha256-4p8bomeXtA+zJ3IvWW0UZixdMnjYWYu7yeA6JUwwRb8=";
+    fetchSubmodules = true;
+  };
+
+  patches = [
+    # Fox broken paths in pkg-config.
+    # https://github.com/editorconfig/editorconfig-core-c/pull/81
+    (fetchpatch {
+      url = "https://github.com/editorconfig/editorconfig-core-c/commit/e0ead79d3bb4179fe9bccd3e5598ed47cc0863a3.patch";
+      sha256 = "t/DiPVyyYoMwFpNG6sD+rLWHheFCbMaILXyey6inGdc=";
+    })
+  ];
+
+  nativeBuildInputs = [
+    cmake
+    doxygen
+  ];
+
+  buildInputs = [
+    pcre2
+  ];
+
+  # Multiple doxygen can not generate man pages in the same base directory in
+  # parallel: https://github.com/doxygen/doxygen/issues/6293
+  enableParallelBuilding = false;
+
+  meta = with lib; {
+    homepage = "https://editorconfig.org/";
+    description = "EditorConfig core library written in C";
+    longDescription = ''
+      EditorConfig makes it easy to maintain the correct coding style when
+      switching between different text editors and between different
+      projects. The EditorConfig project maintains a file format and plugins
+      for various text editors which allow this file format to be read and used
+      by those editors. For information on the file format and supported text
+      editors, see the EditorConfig website.
+    '';
+    downloadPage = "https://github.com/editorconfig/editorconfig-core-c";
+    license = with licenses; [ bsd2 bsd3 ];
+    maintainers = with maintainers; [ dochang ];
+    platforms = platforms.unix;
+    mainProgram = "editorconfig";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/eggdbus/default.nix b/nixpkgs/pkgs/development/tools/misc/eggdbus/default.nix
new file mode 100644
index 000000000000..c5ede8488511
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/eggdbus/default.nix
@@ -0,0 +1,21 @@
+{ lib, stdenv, fetchurl, pkg-config, glib, dbus, dbus-glib }:
+
+stdenv.mkDerivation rec {
+  pname = "eggdbus";
+  version = "0.6";
+
+  src = fetchurl {
+    url = "https://hal.freedesktop.org/releases/${pname}-${version}.tar.gz";
+    sha256 = "118hj63ac65zlg71kydv4607qcg1qpdlql4kvhnwnnhar421jnq4";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ glib dbus dbus-glib ];
+
+  meta = with lib; {
+    homepage = "https://hal.freedesktop.org/releases/";
+    description = "D-Bus bindings for GObject";
+    platforms = platforms.linux;
+    license = licenses.lgpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/elfinfo/default.nix b/nixpkgs/pkgs/development/tools/misc/elfinfo/default.nix
new file mode 100644
index 000000000000..5ea97b77eeb8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/elfinfo/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "elfinfo";
+  version = "1.2.2";
+
+  src = fetchFromGitHub {
+    owner = "xyproto";
+    repo = "elfinfo";
+    rev = version;
+    sha256 = "sha256-HnjHOjanStqmDXnc6Z9w0beCMJFf/ndWbYxoDEaOws4=";
+  };
+
+  vendorHash = null;
+
+  meta = with lib; {
+    description = "Small utility for showing information about ELF files";
+    homepage = "https://elfinfo.roboticoverlords.org/";
+    changelog = "https://github.com/xyproto/elfinfo/releases/tag/${version}";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ dtzWill ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/elfkickers/default.nix b/nixpkgs/pkgs/development/tools/misc/elfkickers/default.nix
new file mode 100644
index 000000000000..7220ca31443a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/elfkickers/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "elfkickers";
+  version = "3.2";
+
+  src = fetchurl {
+    url = "https://www.muppetlabs.com/~breadbox/pub/software/ELFkickers-${version}.tar.gz";
+    sha256 = "sha256-m4HmxT4MlPwZjZiC63NxVvNtVlFS3DIRiJfHewaiaHw=";
+  };
+
+  makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" "prefix:=${placeholder "out"}" ];
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    homepage = "https://www.muppetlabs.com/~breadbox/software/elfkickers.html";
+    description = "A collection of programs that access and manipulate ELF files";
+    platforms = platforms.linux;
+    license = licenses.gpl2Plus;
+    maintainers = [ maintainers.dtzWill ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/elfutils/debug-info-from-env.patch b/nixpkgs/pkgs/development/tools/misc/elfutils/debug-info-from-env.patch
new file mode 100644
index 000000000000..409f1311c315
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/elfutils/debug-info-from-env.patch
@@ -0,0 +1,27 @@
+Look up .build-id files relative to the directories in the
+colon-separated environment variable NIX_DEBUG_INFO_DIRS, unless
+overriden by --debuginfo-path.
+
+diff -ru elfutils-0.169-orig/libdwfl/argp-std.c elfutils-0.169/libdwfl/argp-std.c
+--- elfutils-0.169-orig/libdwfl/argp-std.c	2017-05-02 23:05:52.000000000 +0200
++++ elfutils-0.169/libdwfl/argp-std.c	2017-07-28 16:08:06.739558106 +0200
+@@ -376,5 +376,7 @@
+ const struct argp *
+ dwfl_standard_argp (void)
+ {
++  debuginfo_path = getenv("NIX_DEBUG_INFO_DIRS");
++
+   return &libdwfl_argp;
+ }
+diff -ru elfutils-0.169-orig/src/stack.c elfutils-0.169/src/stack.c
+--- elfutils-0.169-orig/src/stack.c	2017-02-24 11:55:28.000000000 +0100
++++ elfutils-0.169/src/stack.c	2017-07-28 15:50:06.743196696 +0200
+@@ -631,6 +631,8 @@
+   /* Set locale.  */
+   (void) setlocale (LC_ALL, "");
+ 
++  debuginfo_path = getenv("NIX_DEBUG_INFO_DIRS");
++
+   const struct argp_option options[] =
+     {
+       { NULL, 0, NULL, 0, N_("Input selection options:"), 0 },
diff --git a/nixpkgs/pkgs/development/tools/misc/elfutils/default.nix b/nixpkgs/pkgs/development/tools/misc/elfutils/default.nix
new file mode 100644
index 000000000000..d61cf961615f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/elfutils/default.nix
@@ -0,0 +1,102 @@
+{ lib, stdenv, fetchurl, fetchpatch, pkg-config, musl-fts
+, musl-obstack, m4, zlib, zstd, bzip2, bison, flex, gettext, xz, setupDebugInfoDirs
+, argp-standalone
+, enableDebuginfod ? true, sqlite, curl, libmicrohttpd, libarchive
+, gitUpdater
+}:
+
+# TODO: Look at the hardcoded paths to kernel, modules etc.
+stdenv.mkDerivation rec {
+  pname = "elfutils";
+  version = "0.190";
+
+  src = fetchurl {
+    url = "https://sourceware.org/elfutils/ftp/${version}/${pname}-${version}.tar.bz2";
+    hash = "sha256-jgCjqbXwS8HcJzroYoHS0m7UEgILOR/8wjGY8QIx1pI=";
+  };
+
+  patches = [
+    ./debug-info-from-env.patch
+    (fetchpatch {
+      name = "fix-aarch64_fregs.patch";
+      url = "https://git.alpinelinux.org/aports/plain/main/elfutils/fix-aarch64_fregs.patch?id=2e3d4976eeffb4704cf83e2cc3306293b7c7b2e9";
+      sha256 = "zvncoRkQx3AwPx52ehjA2vcFroF+yDC2MQR5uS6DATs=";
+    })
+    (fetchpatch {
+      name = "musl-asm-ptrace-h.patch";
+      url = "https://git.alpinelinux.org/aports/plain/main/elfutils/musl-asm-ptrace-h.patch?id=2e3d4976eeffb4704cf83e2cc3306293b7c7b2e9";
+      sha256 = "8D1wPcdgAkE/TNBOgsHaeTZYhd9l+9TrZg8d5C7kG6k=";
+    })
+    (fetchpatch {
+      name = "musl-macros.patch";
+      url = "https://git.alpinelinux.org/aports/plain/main/elfutils/musl-macros.patch?id=2e3d4976eeffb4704cf83e2cc3306293b7c7b2e9";
+      sha256 = "tp6O1TRsTAMsFe8vw3LMENT/vAu6OmyA8+pzgThHeA8=";
+    })
+    (fetchpatch {
+      name = "musl-strndupa.patch";
+      url = "https://git.alpinelinux.org/aports/plain/main/elfutils/musl-strndupa.patch?id=2e3d4976eeffb4704cf83e2cc3306293b7c7b2e9";
+      sha256 = "sha256-7daehJj1t0wPtQzTv+/Rpuqqs5Ng/EYnZzrcf2o/Lb0=";
+    })
+  ] ++ lib.optionals stdenv.hostPlatform.isMusl [ ./musl-error_h.patch ];
+
+  postPatch = ''
+    patchShebangs tests/*.sh
+  '' + lib.optionalString stdenv.hostPlatform.isRiscV ''
+    # disable failing test:
+    #
+    # > dwfl_thread_getframes: No DWARF information found
+    sed -i s/run-backtrace-dwarf.sh//g tests/Makefile.in
+  '';
+
+  outputs = [ "bin" "dev" "out" "man" ];
+
+  # We need bzip2 in NativeInputs because otherwise we can't unpack the src,
+  # as the host-bzip2 will be in the path.
+  nativeBuildInputs = [ m4 bison flex gettext bzip2 ]
+    ++ lib.optional enableDebuginfod pkg-config;
+  buildInputs = [ zlib zstd bzip2 xz ]
+    ++ lib.optionals stdenv.hostPlatform.isMusl [
+    argp-standalone
+    musl-fts
+    musl-obstack
+  ] ++ lib.optionals enableDebuginfod [
+    sqlite
+    curl
+    libmicrohttpd
+    libarchive
+  ];
+
+  propagatedNativeBuildInputs = [ setupDebugInfoDirs ];
+
+  configureFlags = [
+    "--program-prefix=eu-" # prevent collisions with binutils
+    "--enable-deterministic-archives"
+    (lib.enableFeature enableDebuginfod "libdebuginfod")
+    (lib.enableFeature enableDebuginfod "debuginfod")
+  ];
+
+  enableParallelBuilding = true;
+
+  # Backtrace unwinding tests rely on glibc-internal symbol names.
+  # Musl provides slightly different forms and fails.
+  # Let's disable tests there until musl support is fully upstreamed.
+  doCheck = !stdenv.hostPlatform.isMusl;
+  doInstallCheck = !stdenv.hostPlatform.isMusl;
+
+  passthru.updateScript = gitUpdater {
+    url = "https://sourceware.org/git/elfutils.git";
+    rev-prefix = "elfutils-";
+  };
+
+  meta = with lib; {
+    homepage = "https://sourceware.org/elfutils/";
+    description = "A set of utilities to handle ELF objects";
+    platforms = platforms.linux;
+    # https://lists.fedorahosted.org/pipermail/elfutils-devel/2014-November/004223.html
+    broken = stdenv.hostPlatform.isStatic;
+    # licenses are GPL2 or LGPL3+ for libraries, GPL3+ for bins,
+    # but since this package isn't split that way, all three are listed.
+    license = with licenses; [ gpl2Only lgpl3Plus gpl3Plus ];
+    maintainers = with maintainers; [ eelco r-burns ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/elfutils/musl-error_h.patch b/nixpkgs/pkgs/development/tools/misc/elfutils/musl-error_h.patch
new file mode 100644
index 000000000000..711928078d35
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/elfutils/musl-error_h.patch
@@ -0,0 +1,66 @@
+diff -crb --new-file a/lib/error.h b/lib/error.h
+*** a/lib/error.h	1969-12-31 19:00:00.000000000 -0500
+--- b/lib/error.h	2021-01-21 04:38:25.000000000 -0500
+***************
+*** 0 ****
+--- 1,27 ----
++ #ifndef _ERROR_H_
++ #define _ERROR_H_
++ 
++ #include <stdarg.h>
++ #include <stdio.h>
++ #include <stdlib.h>
++ #include <string.h>
++ #include <errno.h>
++ 
++ static unsigned int error_message_count = 0;
++ 
++ static inline void error(int status, int errnum, const char* format, ...)
++ {
++ 	va_list ap;
++ 	fprintf(stderr, "%s: ", program_invocation_name);
++ 	va_start(ap, format);
++ 	vfprintf(stderr, format, ap);
++ 	va_end(ap);
++ 	if (errnum)
++ 		fprintf(stderr, ": %s", strerror(errnum));
++ 	fprintf(stderr, "\n");
++ 	error_message_count++;
++ 	if (status)
++ 		exit(status);
++ }
++ 
++ #endif	/* _ERROR_H_ */
+diff -crb --new-file a/src/error.h b/src/error.h
+*** a/src/error.h	1969-12-31 19:00:00.000000000 -0500
+--- b/src/error.h	2021-01-21 04:38:29.000000000 -0500
+***************
+*** 0 ****
+--- 1,27 ----
++ #ifndef _ERROR_H_
++ #define _ERROR_H_
++ 
++ #include <stdarg.h>
++ #include <stdio.h>
++ #include <stdlib.h>
++ #include <string.h>
++ #include <errno.h>
++ 
++ static unsigned int error_message_count = 0;
++ 
++ static inline void error(int status, int errnum, const char* format, ...)
++ {
++ 	va_list ap;
++ 	fprintf(stderr, "%s: ", program_invocation_name);
++ 	va_start(ap, format);
++ 	vfprintf(stderr, format, ap);
++ 	va_end(ap);
++ 	if (errnum)
++ 		fprintf(stderr, ": %s", strerror(errnum));
++ 	fprintf(stderr, "\n");
++ 	error_message_count++;
++ 	if (status)
++ 		exit(status);
++ }
++ 
++ #endif	/* _ERROR_H_ */
diff --git a/nixpkgs/pkgs/development/tools/misc/epm/default.nix b/nixpkgs/pkgs/development/tools/misc/epm/default.nix
new file mode 100644
index 000000000000..b83bb8d33283
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/epm/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch
+, rpm
+}:
+
+stdenv.mkDerivation rec {
+  pname = "epm";
+  version = "5.0.0";
+
+  src = fetchFromGitHub {
+    owner = "jimjag";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-o4B5lWBeve+U70FDgF1DrtNrXxaEY4etkPpwbqF7fmc=";
+  };
+
+  patches = [
+    # Makefile fix: INSTALL command
+    (fetchpatch {
+      url = "https://github.com/jimjag/epm/commit/dc5fcd6fa6e3a74baa28be060769a2b47f9368e7.patch";
+      sha256 = "1gfyz493w0larin841xx3xalb7m3sp1r2vv1xki6rz35ybrnb96c";
+    })
+    # Makefile fix: man pages filenames and docdir target
+    (fetchpatch {
+      url = "https://github.com/jimjag/epm/commit/96bb48d4d7b463a09d5a25debfb51c88dcd7398c.patch";
+      sha256 = "11aws0qac6vyy3w5z39vkjy4symmfzxfq9qgbgkk74fvx9vax42a";
+    })
+  ];
+
+  buildInputs = [ rpm ];
+
+  meta = with lib; {
+    description = "The ESP Package Manager generates distribution archives for a variety of platforms";
+    homepage = "https://jimjag.github.io/epm/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ pSub ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/ezno/default.nix b/nixpkgs/pkgs/development/tools/misc/ezno/default.nix
new file mode 100644
index 000000000000..a31ab1560746
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/ezno/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "ezno";
+  version = "0.0.8";
+
+  src = fetchFromGitHub {
+    owner = "kaleidawave";
+    repo = "ezno";
+    rev = "release/ezno-${version}";
+    hash = "sha256-0yLEpNkl7KjBEGxNONtfMjVlWMSKGZ6TbYJMsCeQ3ms=";
+  };
+
+  cargoHash = "sha256-noMfKx6BsmWhAVI4r8LlC961Uwogv1JGMYSrNGlLGPQ=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.CoreServices
+  ];
+
+  cargoBuildFlags = [ "--bin" "ezno" ];
+
+  meta = with lib; {
+    description = "A JavaScript compiler and TypeScript checker with a focus on static analysis and runtime performance";
+    homepage = "https://github.com/kaleidawave/ezno";
+    changelog = "https://github.com/kaleidawave/ezno/releases/tag/${src.rev}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/findnewest/default.nix b/nixpkgs/pkgs/development/tools/misc/findnewest/default.nix
new file mode 100644
index 000000000000..6773e9bc0bd4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/findnewest/default.nix
@@ -0,0 +1,22 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "findnewest";
+  version = "0.3";
+
+  src = fetchFromGitHub {
+    owner = "0-wiz-0";
+    repo = pname;
+    rev = "${pname}-${version}";
+    sha256 = "1x1cbn2b27h5r0ah5xc06fkalfdci2ngrgd4wibxjw0h88h0nvgq";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  meta = with lib; {
+    homepage = "https://github.com/0-wiz-0/findnewest";
+    description = "Recursively find newest file in a hierarchy and print its timestamp";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ bhipple ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/fsatrace/default.nix b/nixpkgs/pkgs/development/tools/misc/fsatrace/default.nix
new file mode 100644
index 000000000000..408a88687e64
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/fsatrace/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "fsatrace";
+  version = "0.0.5";
+
+  src = fetchFromGitHub {
+    owner = "jacereda";
+    repo = "fsatrace";
+    rev = "5af79511828ca6cea4e5dd9f28e1676fb0b705e9";
+    "hash" = "sha256-pn07qlrRaM153znEviziuKWrkX9cLsNFCujovmE4UUA=";
+  };
+
+  installDir = "libexec/${pname}-${version}";
+
+  makeFlags = [ "INSTALLDIR=$(out)/$(installDir)" ];
+
+  preInstall = ''
+    mkdir -p $out/$installDir
+  '';
+
+  postInstall = ''
+    mkdir -p $out/bin
+    ln -s $out/$installDir/fsatrace $out/bin/fsatrace
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/jacereda/fsatrace";
+    description = "filesystem access tracer";
+    license = licenses.isc;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/fswatch/default.nix b/nixpkgs/pkgs/development/tools/misc/fswatch/default.nix
new file mode 100644
index 000000000000..7b8f9638b7b9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/fswatch/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv
+, fetchFromGitHub
+, autoreconfHook
+                     # for xargs
+, gettext
+, libtool
+, makeWrapper
+, texinfo
+, CoreServices
+}:
+
+stdenv.mkDerivation rec {
+  pname = "fswatch";
+  version = "1.17.1";
+
+  src = fetchFromGitHub {
+    owner = "emcrisostomo";
+    repo = "fswatch";
+    rev = version;
+    sha256 = "sha256-gVYDvda+6ZJkShJXUxUEVxq4enkRrhdvlTTxYWq4Aho=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook makeWrapper ] ++ lib.optionals stdenv.isDarwin [ CoreServices ];
+  buildInputs = [ gettext libtool texinfo ];
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "A cross-platform file change monitor with multiple backends";
+    homepage = "https://github.com/emcrisostomo/fswatch";
+    license = licenses.gpl3Plus;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ pSub ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/funzzy/default.nix b/nixpkgs/pkgs/development/tools/misc/funzzy/default.nix
new file mode 100644
index 000000000000..cc70cbeaf955
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/funzzy/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "funzzy";
+  version = "1.1.1";
+
+  src = fetchFromGitHub {
+    owner = "cristianoliveira";
+    repo = "funzzy";
+    rev = "v${version}";
+    hash = "sha256-sgfMxSbOBn2Ps6hqrFDm3x9QOnMvtMgO7gAt6kk0cIs=";
+  };
+
+  cargoHash = "sha256-If8iBvwiaH1jK8z06ORY/lx+7HAT4InxbjoLe289kws=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.CoreServices
+  ];
+
+  meta = with lib; {
+    description = "A lightweight watcher";
+    homepage = "https://github.com/cristianoliveira/funzzy";
+    changelog = "https://github.com/cristianoliveira/funzzy/releases/tag/${src.rev}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/fzf-make/default.nix b/nixpkgs/pkgs/development/tools/misc/fzf-make/default.nix
new file mode 100644
index 000000000000..4ce9267ab07f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/fzf-make/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, makeBinaryWrapper
+, runtimeShell
+, bat
+, gnugrep
+, gnumake
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "fzf-make";
+  version = "0.23.0";
+
+  src = fetchFromGitHub {
+    owner = "kyu08";
+    repo = "fzf-make";
+    rev = "v${version}";
+    hash = "sha256-CXifWgf7+FgelVImsoASCrH4PtBL+ciw5Qr+JbsxnPU=";
+  };
+
+  cargoHash = "sha256-yuhfxyrffa1pqNtIM2X3E1b1ebuBYHAu+dQrQZubCbQ=";
+
+  nativeBuildInputs = [ makeBinaryWrapper ];
+
+  postInstall = ''
+    wrapProgram $out/bin/fzf-make \
+      --set SHELL ${runtimeShell} \
+      --suffix PATH : ${lib.makeBinPath [ bat gnugrep gnumake ]}
+  '';
+
+  meta = with lib; {
+    description = "Fuzzy finder for Makefile";
+    homepage = "https://github.com/kyu08/fzf-make";
+    changelog = "https://github.com/kyu08/fzf-make/releases/tag/${src.rev}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda sigmanificient ];
+    mainProgram = "fzf-make";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/gdb/darwin-target-match.patch b/nixpkgs/pkgs/development/tools/misc/gdb/darwin-target-match.patch
new file mode 100644
index 000000000000..978a67950569
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/gdb/darwin-target-match.patch
@@ -0,0 +1,11 @@
+--- a/configure	2017-06-05 00:51:26.000000000 +0900
++++ b/configure	2018-03-06 23:12:58.000000000 +0900
+@@ -3644,7 +3644,7 @@
+     noconfigdirs="$noconfigdirs ld gprof"
+     noconfigdirs="$noconfigdirs sim target-rda"
+     ;;
+-  x86_64-*-darwin[912]*)
++  x86_64-*-darwin*)
+     noconfigdirs="$noconfigdirs ld gas gprof"
+     noconfigdirs="$noconfigdirs sim target-rda"
+     ;;
diff --git a/nixpkgs/pkgs/development/tools/misc/gdb/debug-info-from-env.patch b/nixpkgs/pkgs/development/tools/misc/gdb/debug-info-from-env.patch
new file mode 100644
index 000000000000..7a3d78da077e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/gdb/debug-info-from-env.patch
@@ -0,0 +1,17 @@
+--- a/gdb/main.c
++++ b/gdb/main.c
+@@ -708,8 +708,12 @@ captured_main_1 (struct captured_main_args *context)
+   if (gdb_sysroot.empty ())
+     gdb_sysroot = TARGET_SYSROOT_PREFIX;
+ 
+-  debug_file_directory
+-    = relocate_gdb_directory (DEBUGDIR, DEBUGDIR_RELOCATABLE);
++  const char * nix_debug = getenv ("NIX_DEBUG_INFO_DIRS");
++  if (nix_debug != NULL)
++      debug_file_directory = nix_debug;
++  else
++    debug_file_directory
++      = relocate_gdb_directory (DEBUGDIR, DEBUGDIR_RELOCATABLE);
+ 
+   gdb_datadir = relocate_gdb_directory (GDB_DATADIR,
+ 					GDB_DATADIR_RELOCATABLE);
diff --git a/nixpkgs/pkgs/development/tools/misc/gdb/default.nix b/nixpkgs/pkgs/development/tools/misc/gdb/default.nix
new file mode 100644
index 000000000000..849f44ea9bc0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/gdb/default.nix
@@ -0,0 +1,159 @@
+{ lib, stdenv, targetPackages
+
+# Build time
+, fetchurl, fetchpatch, pkg-config, perl, texinfo, setupDebugInfoDirs, buildPackages
+
+# Run time
+, ncurses, readline, gmp, mpfr, expat, libipt, zlib, zstd, xz, dejagnu, sourceHighlight, libiconv
+
+, pythonSupport ? stdenv.hostPlatform == stdenv.buildPlatform && !stdenv.hostPlatform.isCygwin, python3 ? null
+, enableDebuginfod ? lib.meta.availableOn stdenv.hostPlatform elfutils, elfutils
+, guile ? null
+, hostCpuOnly ? false
+, enableSim ? false
+, safePaths ? [
+   # $debugdir:$datadir/auto-load are whitelisted by default by GDB
+   "$debugdir" "$datadir/auto-load"
+   # targetPackages so we get the right libc when cross-compiling and using buildPackages.gdb
+   targetPackages.stdenv.cc.cc.lib
+  ]
+, writeScript
+}:
+
+let
+  basename = "gdb";
+  targetPrefix = lib.optionalString (stdenv.targetPlatform != stdenv.hostPlatform)
+                 "${stdenv.targetPlatform.config}-";
+in
+
+assert pythonSupport -> python3 != null;
+
+stdenv.mkDerivation rec {
+  pname = targetPrefix + basename + lib.optionalString hostCpuOnly "-host-cpu-only";
+  version = "14.1";
+
+  src = fetchurl {
+    url = "mirror://gnu/gdb/${basename}-${version}.tar.xz";
+    hash = "sha256-1m31EnYUNFH8v/RkzIcj1o8enfRaai1WNaVOcWQ+24A=";
+  };
+
+  postPatch = lib.optionalString stdenv.isDarwin ''
+    substituteInPlace gdb/darwin-nat.c \
+      --replace '#include "bfd/mach-o.h"' '#include "mach-o.h"'
+  '' + lib.optionalString stdenv.hostPlatform.isMusl ''
+    substituteInPlace sim/erc32/erc32.c  --replace sys/fcntl.h fcntl.h
+    substituteInPlace sim/erc32/interf.c  --replace sys/fcntl.h fcntl.h
+    substituteInPlace sim/erc32/sis.c  --replace sys/fcntl.h fcntl.h
+    substituteInPlace sim/ppc/emul_unix.c --replace sys/termios.h termios.h
+  '';
+
+  patches = [
+    ./debug-info-from-env.patch
+  ] ++ lib.optionals stdenv.isDarwin [
+    ./darwin-target-match.patch
+  ];
+
+  nativeBuildInputs = [ pkg-config texinfo perl setupDebugInfoDirs ];
+
+  buildInputs = [ ncurses readline gmp mpfr expat libipt zlib zstd xz guile sourceHighlight ]
+    ++ lib.optional pythonSupport python3
+    ++ lib.optional doCheck dejagnu
+    ++ lib.optional enableDebuginfod (elfutils.override { enableDebuginfod = true; })
+    ++ lib.optional stdenv.isDarwin libiconv;
+
+  propagatedNativeBuildInputs = [ setupDebugInfoDirs ];
+
+  depsBuildBuild = [ buildPackages.stdenv.cc ];
+
+  enableParallelBuilding = true;
+
+  # darwin build fails with format hardening since v7.12
+  hardeningDisable = lib.optionals stdenv.isDarwin [ "format" ];
+
+  env.NIX_CFLAGS_COMPILE = "-Wno-format-nonliteral";
+
+  configurePlatforms = [ "build" "host" "target" ];
+
+  preConfigure = ''
+    # remove precompiled docs, required for man gdbinit to mention /etc/gdb/gdbinit
+    rm gdb/doc/*.info*
+    rm gdb/doc/*.5
+    rm gdb/doc/*.1
+    # fix doc build https://sourceware.org/bugzilla/show_bug.cgi?id=27808
+    rm gdb/doc/GDBvn.texi
+
+    # GDB have to be built out of tree.
+    mkdir _build
+    cd _build
+  '';
+  configureScript = "../configure";
+
+  configureFlags = with lib; [
+    # Set the program prefix to the current targetPrefix.
+    # This ensures that the prefix always conforms to
+    # nixpkgs' expectations instead of relying on the build
+    # system which only receives `config` which is merely a
+    # subset of the platform description.
+    "--program-prefix=${targetPrefix}"
+
+    "--disable-werror"
+  ] ++ lib.optional (!hostCpuOnly) "--enable-targets=all" ++ [
+    "--enable-64-bit-bfd"
+    "--disable-install-libbfd"
+    "--disable-shared" "--enable-static"
+    "--with-system-zlib"
+    "--with-system-readline"
+
+    "--with-system-gdbinit=/etc/gdb/gdbinit"
+    "--with-system-gdbinit-dir=/etc/gdb/gdbinit.d"
+
+    "--with-gmp=${gmp.dev}"
+    "--with-mpfr=${mpfr.dev}"
+    "--with-expat" "--with-libexpat-prefix=${expat.dev}"
+    "--with-auto-load-safe-path=${builtins.concatStringsSep ":" safePaths}"
+  ] ++ lib.optional (!pythonSupport) "--without-python"
+    ++ lib.optional stdenv.hostPlatform.isMusl "--disable-nls"
+    ++ lib.optional stdenv.hostPlatform.isStatic "--disable-inprocess-agent"
+    ++ lib.optional enableDebuginfod "--with-debuginfod=yes"
+    ++ lib.optional (!enableSim) "--disable-sim";
+
+  postInstall =
+    '' # Remove Info files already provided by Binutils and other packages.
+       rm -v $out/share/info/bfd.info
+    '';
+
+  # TODO: Investigate & fix the test failures.
+  doCheck = false;
+
+  passthru = {
+    updateScript = writeScript "update-gdb" ''
+      #!/usr/bin/env nix-shell
+      #!nix-shell -i bash -p curl pcre common-updater-scripts
+
+      set -eu -o pipefail
+
+      # Expect the text in format of '<h3>GDB version 12.1</h3>'
+      new_version="$(curl -s https://www.sourceware.org/gdb/ |
+          pcregrep -o1 '<h3>GDB version ([0-9.]+)</h3>')"
+      update-source-version ${pname} "$new_version"
+    '';
+  };
+
+  meta = with lib; {
+    description = "The GNU Project debugger";
+
+    longDescription = ''
+      GDB, the GNU Project debugger, allows you to see what is going
+      on `inside' another program while it executes -- or what another
+      program was doing at the moment it crashed.
+    '';
+
+    homepage = "https://www.gnu.org/software/gdb/";
+
+    license = lib.licenses.gpl3Plus;
+
+    # GDB upstream does not support ARM darwin
+    platforms = with platforms; linux ++ cygwin ++ ["x86_64-darwin"];
+    maintainers = with maintainers; [ pierron globin lsix ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/gdbgui/default.nix b/nixpkgs/pkgs/development/tools/misc/gdbgui/default.nix
new file mode 100644
index 000000000000..d42639892062
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/gdbgui/default.nix
@@ -0,0 +1,52 @@
+{ lib
+, buildPythonApplication
+, fetchPypi
+, gdb
+, eventlet
+, flask-compress
+, flask-socketio
+, pygdbmi
+, pygments
+, }:
+
+buildPythonApplication rec {
+  pname = "gdbgui";
+
+  version = "0.15.2.0";
+
+  buildInputs = [ gdb ];
+  propagatedBuildInputs = [
+    eventlet
+    flask-compress
+    flask-socketio
+    pygdbmi
+    pygments
+  ];
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-vmMlRmjFqhs3Vf+IU9IDtJzt4dZ0yIOmXIVOx5chZPA=";
+  };
+
+  postPatch = ''
+    echo ${version} > gdbgui/VERSION.txt
+    # relax version requirements
+    sed -i 's/==.*$//' requirements.txt
+  '';
+
+  postInstall = ''
+    wrapProgram $out/bin/gdbgui \
+      --prefix PATH : ${lib.makeBinPath [ gdb ]}
+  '';
+
+  # tests do not work without stdout/stdin
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A browser-based frontend for GDB";
+    homepage = "https://www.gdbgui.com/";
+    license = licenses.gpl3;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ yrashk dump_stack ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/gede/default.nix b/nixpkgs/pkgs/development/tools/misc/gede/default.nix
new file mode 100644
index 000000000000..12fe5b19a986
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/gede/default.nix
@@ -0,0 +1,35 @@
+{ mkDerivation, lib, fetchurl, makeWrapper, python3, qmake, ctags, gdb }:
+
+mkDerivation rec {
+  pname = "gede";
+  version = "2.18.3";
+
+  src = fetchurl {
+    url = "http://gede.dexar.se/uploads/source/${pname}-${version}.tar.xz";
+    sha256 = "sha256-RUl60iPa4XSlUilpYKaYQbRmLqthKHAvYonnhufjPsE=";
+  };
+
+  nativeBuildInputs = [ qmake makeWrapper python3 ];
+
+  buildInputs = [ ctags ];
+
+  strictDeps = true;
+
+  dontUseQmakeConfigure = true;
+
+  dontBuild = true;
+
+  installPhase = ''
+    python build.py install --verbose --prefix="$out"
+    wrapProgram $out/bin/gede \
+      --prefix PATH : ${lib.makeBinPath [ ctags gdb ]}
+  '';
+
+  meta = with lib; {
+    description = "Graphical frontend (GUI) to GDB";
+    homepage = "http://gede.dexar.se";
+    license = licenses.bsd2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ juliendehos ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/gef/default.nix b/nixpkgs/pkgs/development/tools/misc/gef/default.nix
new file mode 100644
index 000000000000..ddd1bf746e6c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/gef/default.nix
@@ -0,0 +1,83 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, makeWrapper
+, gdb
+, python3
+, bintools-unwrapped
+, file
+, ps
+, git
+, coreutils
+}:
+
+let
+  pythonPath = with python3.pkgs; makePythonPath [
+    keystone-engine
+    unicorn
+    capstone
+    ropper
+  ];
+
+in stdenv.mkDerivation rec {
+  pname = "gef";
+  version = "2024.01";
+
+  src = fetchFromGitHub {
+    owner = "hugsy";
+    repo = "gef";
+    rev = version;
+    sha256 = "sha256-uSUr2NFvj7QIlvG3RWYm7A9Xx7a4JYkbAQld7c7+C7g=";
+  };
+
+  dontBuild = true;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    mkdir -p $out/share/gef
+    cp gef.py $out/share/gef
+    makeWrapper ${gdb}/bin/gdb $out/bin/gef \
+      --add-flags "-q -x $out/share/gef/gef.py" \
+      --set NIX_PYTHONPATH ${pythonPath} \
+      --prefix PATH : ${lib.makeBinPath [
+        python3
+        bintools-unwrapped # for readelf
+        file
+        ps
+      ]}
+  '';
+
+  nativeCheckInputs = [
+    gdb
+    file
+    ps
+    git
+    python3
+    python3.pkgs.pytest
+    python3.pkgs.pytest-xdist
+    python3.pkgs.keystone-engine
+    python3.pkgs.unicorn
+    python3.pkgs.capstone
+    python3.pkgs.ropper
+  ];
+  checkPhase = ''
+    # Skip some tests that require network access.
+    sed -i '/def test_cmd_shellcode_get(self):/i \ \ \ \ @unittest.skip(reason="not available in sandbox")' tests/runtests.py
+    sed -i '/def test_cmd_shellcode_search(self):/i \ \ \ \ @unittest.skip(reason="not available in sandbox")' tests/runtests.py
+
+    # Patch the path to /bin/ls.
+    sed -i 's+/bin/ls+${coreutils}/bin/ls+g' tests/runtests.py
+
+    # Run the tests.
+    make test
+  '';
+
+  meta = with lib; {
+    description = "A modern experience for GDB with advanced debugging features for exploit developers & reverse engineers";
+    homepage = "https://github.com/hugsy/gef";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ freax13 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/gengetopt/default.nix b/nixpkgs/pkgs/development/tools/misc/gengetopt/default.nix
new file mode 100644
index 000000000000..6420d56bba2f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/gengetopt/default.nix
@@ -0,0 +1,50 @@
+{ fetchurl, lib, stdenv, texinfo, help2man }:
+
+stdenv.mkDerivation rec {
+  pname = "gengetopt";
+  version = "2.23";
+
+  src = fetchurl {
+    url = "mirror://gnu/${pname}/${pname}-${version}.tar.xz";
+    sha256 = "1b44fn0apsgawyqa4alx2qj5hls334mhbszxsy6rfr0q074swhdr";
+  };
+
+  doCheck = true;
+  # attempts to open non-existent file
+  preCheck = ''
+    rm tests/test_conf_parser_save.sh
+  '';
+
+  # test suite is not thread safe
+  enableParallelBuilding = false;
+
+  nativeBuildInputs = [ texinfo help2man ];
+
+  #Fix, see #28255
+  postPatch = ''
+    substituteInPlace configure --replace \
+      'set -o posix' \
+      'set +o posix'
+  '';
+
+  env = lib.optionalAttrs stdenv.cc.isClang {
+    CXXFLAGS = "-std=c++14";
+  };
+
+  meta = {
+    description = "Command-line option parser generator";
+
+    longDescription =
+      '' GNU Gengetopt program generates a C function that uses getopt_long
+         function to parse the command line options, to validate them and
+         fills a struct
+      '';
+
+    homepage = "https://www.gnu.org/software/gengetopt/";
+
+    license = lib.licenses.gpl3Plus;
+
+    maintainers = [ ];
+    platforms = lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/gf/build-use-optional-freetype-with-pkg-config.patch b/nixpkgs/pkgs/development/tools/misc/gf/build-use-optional-freetype-with-pkg-config.patch
new file mode 100644
index 000000000000..7e748dca244e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/gf/build-use-optional-freetype-with-pkg-config.patch
@@ -0,0 +1,13 @@
+diff --git a/build.sh b/build.sh
+index e471563..32bdfab 100755
+--- a/build.sh
++++ b/build.sh
+@@ -5,7 +5,7 @@ gdb --version > /dev/null 2>&1 || printf "\033[0;31mWarning\033[0m: GDB not dete
+ echo q | gdb | grep "(gdb)" > /dev/null 2>&1 || printf "\033[0;31mWarning\033[0m: Your copy of GDB appears to be non-standard or has been heavily reconfigured with .gdbinit.\nIf you are using GDB plugins like 'GDB Dashboard' you must remove them,\nas otherwise gf will be unable to communicate with GDB.\n"
+ 
+ # Check if FreeType is available.
+-if [ -d /usr/include/freetype2 ]; then extra_flags="$extra_flags -lfreetype -D UI_FREETYPE -I /usr/include/freetype2"; 
++if pkg-config --cflags freetype2 > /dev/null; then extra_flags="$extra_flags -D UI_FREETYPE $(pkg-config --cflags --libs freetype2)";
+ else printf "\033[0;31mWarning\033[0m: FreeType could not be found. The fallback font will be used.\n"; fi
+ 
+ # Check if SSE2 is available.
diff --git a/nixpkgs/pkgs/development/tools/misc/gf/default.nix b/nixpkgs/pkgs/development/tools/misc/gf/default.nix
new file mode 100644
index 000000000000..47b20cfe92e5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/gf/default.nix
@@ -0,0 +1,65 @@
+{ lib
+, stdenv
+, makeWrapper
+, fetchFromGitHub
+, libX11
+, pkg-config
+, gdb
+, freetype
+, freetypeSupport ? true
+, extensions ? [ ]
+}:
+
+stdenv.mkDerivation {
+  pname = "gf";
+  version = "unstable-2023-08-09";
+
+  src = fetchFromGitHub {
+    repo = "gf";
+    owner = "nakst";
+    rev = "4190211d63c1e5378a9e841d22fa2b96a1099e68";
+    hash = "sha256-28Xgw/KxwZ94r/TXsdISeUtXHSips4irB0D+tEefMYE=";
+  };
+
+  nativeBuildInputs = [ makeWrapper pkg-config ];
+  buildInputs = [ libX11 gdb ]
+    ++ lib.optional freetypeSupport freetype;
+
+  patches = [
+    ./build-use-optional-freetype-with-pkg-config.patch
+  ];
+
+  postPatch = lib.forEach extensions (ext: ''
+      cp ${ext} ./${ext.name or (builtins.baseNameOf ext)}
+  '');
+
+   preConfigure = ''
+     patchShebangs build.sh
+   '';
+
+  buildPhase = ''
+    runHook preBuild
+    extra_flags=-DUI_FREETYPE_SUBPIXEL ./build.sh
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p "$out/bin"
+    cp gf2 "$out/bin/"
+    runHook postInstall
+  '';
+
+  postFixup = ''
+    wrapProgram $out/bin/gf2 --prefix PATH : ${lib.makeBinPath[ gdb ]}
+  '';
+
+  meta = with lib; {
+    description = "A GDB Frontend";
+    homepage = "https://github.com/nakst/gf";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    mainProgram = "gf2";
+    maintainers = with maintainers; [ _0xd61 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/global/default.nix b/nixpkgs/pkgs/development/tools/misc/global/default.nix
new file mode 100644
index 000000000000..e0e1ea0e606c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/global/default.nix
@@ -0,0 +1,62 @@
+{ fetchurl, lib, stdenv, libtool, makeWrapper
+, coreutils, ctags, ncurses, python3Packages, sqlite, universal-ctags
+}:
+
+let
+  pygments = python3Packages.pygments;
+in stdenv.mkDerivation rec {
+  pname = "global";
+  version = "6.6.11";
+
+  src = fetchurl {
+    url = "mirror://gnu/global/${pname}-${version}.tar.gz";
+    hash = "sha256-BTMxn3jThguBZo366qUHkBVB5d2oz8MNUt/GzpSJ9eM=";
+  };
+
+  nativeBuildInputs = [ libtool makeWrapper ];
+
+  buildInputs = [ ncurses sqlite ];
+
+  propagatedBuildInputs = [ pygments ];
+
+  configureFlags = [
+    "--with-ltdl-include=${libtool}/include"
+    "--with-ltdl-lib=${libtool.lib}/lib"
+    "--with-ncurses=${ncurses}"
+    "--with-sqlite3"
+    "--with-exuberant-ctags=${ctags}/bin/ctags"
+    "--with-universal-ctags=${universal-ctags}/bin/ctags"
+    "--with-posix-sort=${coreutils}/bin/sort"
+  ];
+
+  doCheck = true;
+
+  postInstall = ''
+    mkdir -p "$out/share/emacs/site-lisp"
+    cp -v *.el "$out/share/emacs/site-lisp"
+
+    wrapProgram $out/bin/gtags \
+      --prefix PYTHONPATH : "$(toPythonPath ${pygments})"
+    wrapProgram $out/bin/global \
+      --prefix PYTHONPATH : "$(toPythonPath ${pygments})"
+  '';
+
+  meta = with lib; {
+    description = "Source code tag system";
+    longDescription = ''
+      GNU GLOBAL is a source code tagging system that works the same way
+      across diverse environments (Emacs, vi, less, Bash, web browser, etc).
+      You can locate specified objects in source files and move there easily.
+      It is useful for hacking a large project containing many
+      subdirectories, many #ifdef and many main() functions.  It is similar
+      to ctags or etags but is different from them at the point of
+      independence of any editor.  It runs on a UNIX (POSIX) compatible
+      operating system like GNU and BSD.
+    '';
+    homepage = "https://www.gnu.org/software/global/";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ pSub peterhoeg ];
+    platforms = platforms.unix;
+    changelog = "https://cvs.savannah.gnu.org/viewvc/global/global/NEWS?view=markup&pathrev=VERSION-${lib.replaceStrings [ "." ] [ "_" ] version}";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/gnum4/default.nix b/nixpkgs/pkgs/development/tools/misc/gnum4/default.nix
new file mode 100644
index 000000000000..66de4ebf8b02
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/gnum4/default.nix
@@ -0,0 +1,57 @@
+{ lib, stdenv, fetchurl }:
+
+# Note: this package is used for bootstrapping fetchurl, and thus
+# cannot use fetchpatch! All mutable patches (generated by GitHub or
+# cgit) that are needed here should be included directly in Nixpkgs as
+# files.
+
+stdenv.mkDerivation rec {
+  pname = "gnum4";
+  version = "1.4.19";
+
+  src = fetchurl {
+    url = "mirror://gnu/m4/m4-${version}.tar.bz2";
+    sha256 = "sha256-swapHA/ZO8QoDPwumMt6s5gf91oYe+oyk4EfRSyJqMg=";
+  };
+
+  # https://gitweb.gentoo.org/repo/gentoo.git/tree/sys-devel/m4/m4-1.4.19-r1.ebuild
+  patches = lib.optional stdenv.hostPlatform.isLoongArch64 ./loong-fix-build.patch;
+  postPatch = if stdenv.hostPlatform.isLoongArch64 then ''
+    touch ./aclocal.m4 ./lib/config.hin ./configure ./doc/stamp-vti || die
+    find . -name Makefile.in -exec touch {} + || die
+  '' else null;
+
+  strictDeps = true;
+  enableParallelBuilding = true;
+
+  doCheck = false;
+
+  configureFlags = [ "--with-syscmd-shell=${stdenv.shell}" ]
+    ++ lib.optional stdenv.hostPlatform.isMinGW "CFLAGS=-fno-stack-protector";
+
+  meta = {
+    description = "GNU M4, a macro processor";
+    longDescription = ''
+      GNU M4 is an implementation of the traditional Unix macro
+      processor.  It is mostly SVR4 compatible although it has some
+      extensions (for example, handling more than 9 positional
+      parameters to macros).  GNU M4 also has built-in functions for
+      including files, running shell commands, doing arithmetic, etc.
+
+      GNU M4 is a macro processor in the sense that it copies its
+      input to the output expanding macros as it goes.  Macros are
+      either builtin or user-defined and can take any number of
+      arguments.  Besides just doing macro expansion, m4 has builtin
+      functions for including named files, running UNIX commands,
+      doing integer arithmetic, manipulating text in various ways,
+      recursion etc...  m4 can be used either as a front-end to a
+      compiler or as a macro processor in its own right.
+    '';
+    homepage = "https://www.gnu.org/software/m4/";
+
+    license = lib.licenses.gpl3Plus;
+    mainProgram = "m4";
+    platforms = lib.platforms.unix ++ lib.platforms.windows;
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/gnum4/loong-fix-build.patch b/nixpkgs/pkgs/development/tools/misc/gnum4/loong-fix-build.patch
new file mode 100644
index 000000000000..d5243357928b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/gnum4/loong-fix-build.patch
@@ -0,0 +1,30 @@
+[xen0n: this is https://github.com/sunhaiyong1978/CLFS-for-LoongArch/blob/1.0/patches/stack-direction-add-loongarch.patch with line number tweak, and change to generated file added as well.]
+From: Sun Haiyong <youbest@sina.com>
+Date: Tue, 31 Aug 2021 11:11:52 +0800
+Subject: [PATCH] stack-direction: Add support for loongarch CPU
+
+* m4/stack-direction.m4 (SV_STACK_DIRECTION): When the CPU is loongarch,
+set "sv_cv_stack_direction" to "-1" .
+--- a/m4/stack-direction.m4
++++ b/m4/stack-direction.m4
+@@ -31,6 +31,7 @@ AC_DEFUN([SV_STACK_DIRECTION],
+       i?86 | x86_64 | \
+       i860 | \
+       ia64 | \
++      loongarch* | \
+       m32r | \
+       m68* | \
+       m88k | \
+--- a/configure
++++ b/configure
+@@ -46399,6 +46399,7 @@ else $as_nop
+       i?86 | x86_64 | \
+       i860 | \
+       ia64 | \
++      loongarch* | \
+       m32r | \
+       m68* | \
+       m88k | \
+-- 
+2.17.2
+
diff --git a/nixpkgs/pkgs/development/tools/misc/go-license-detector/default.nix b/nixpkgs/pkgs/development/tools/misc/go-license-detector/default.nix
new file mode 100644
index 000000000000..cbef7ae0d9da
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/go-license-detector/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoModule, fetchFromGitHub, git }:
+
+buildGoModule rec {
+  pname = "go-license-detector";
+  version = "4.3.1";
+
+  src = fetchFromGitHub {
+    owner = "go-enry";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-S9LKXjn5dL5FETOOAk+bs7bIVdu2x7MIhfjpZuXzuLo=";
+  };
+
+  vendorHash = "sha256-MtQsUsFd9zQGbP7NGZ4zcSoa6O2WSWvGig0GUwCc6uM=";
+
+  nativeCheckInputs = [ git ];
+
+  meta = with lib; {
+    description = "Reliable project licenses detector";
+    homepage = "https://github.com/go-enry/go-license-detector";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ dtzWill ];
+    mainProgram = "license-detector";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/go-licenses/default.nix b/nixpkgs/pkgs/development/tools/misc/go-licenses/default.nix
new file mode 100644
index 000000000000..d6bea02c05bd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/go-licenses/default.nix
@@ -0,0 +1,60 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, go
+, installShellFiles
+, makeWrapper
+}:
+
+buildGoModule rec {
+  pname = "go-licenses";
+  version = "1.6.0";
+
+  src = fetchFromGitHub {
+    owner = "google";
+    repo = "go-licenses";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-GAlwTVoVA+n9+EfhybmpKm16FoY9kFzrxy1ZQxS6A8E=";
+  };
+
+  vendorHash = "sha256-ToRn2wj7Yi+UDJwvAhV0ACEhqlcQjt4bRpz7abNRt9A=";
+
+  patches = [
+    # Without this, we get error messages like:
+    # vendor/golang.org/x/sys/unix/syscall.go:83:16: unsafe.Slice requires go1.17 or later (-lang was set to go1.16; check go.mod)
+    # The patch was generated by changing "go 1.16" to "go 1.17" and executing `go mod tidy`.
+    ./fix-go-version-error.patch
+  ];
+
+  nativeBuildInputs = [
+    installShellFiles
+    makeWrapper
+  ];
+
+  subPackages = [ "." ];
+
+  allowGoReference = true;
+
+  postInstall = ''
+    installShellCompletion --cmd go-licenses \
+      --bash <("$out/bin/go-licenses" completion bash) \
+      --fish <("$out/bin/go-licenses" completion fish) \
+      --zsh  <("$out/bin/go-licenses" completion zsh)
+
+    # workaround empty output when GOROOT differs from built environment
+    # see https://github.com/google/go-licenses/issues/149
+    wrapProgram "$out/bin/go-licenses" \
+      --set GOROOT '${go}/share/go'
+  '';
+
+  # Tests require internet connection
+  doCheck = false;
+
+  meta = with lib; {
+    changelog = "https://github.com/google/go-licenses/releases/tag/v${version}";
+    description = "Reports on the licenses used by a Go package and its dependencies";
+    homepage = "https://github.com/google/go-licenses";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ Luflosi ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/go-licenses/fix-go-version-error.patch b/nixpkgs/pkgs/development/tools/misc/go-licenses/fix-go-version-error.patch
new file mode 100644
index 000000000000..1e102636dd45
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/go-licenses/fix-go-version-error.patch
@@ -0,0 +1,65 @@
+diff --git a/go.mod b/go.mod
+index 7e3d596..d90b393 100644
+--- a/go.mod
++++ b/go.mod
+@@ -1,27 +1,50 @@
+ module github.com/google/go-licenses
+ 
+-go 1.16
++go 1.17
+ 
+ require (
+-	cloud.google.com/go/iam v0.4.0 // indirect
+-	github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
+ 	github.com/google/go-cmp v0.5.8
+ 	github.com/google/go-replayers/httpreplay v1.1.1
+ 	github.com/google/licenseclassifier v0.0.0-20210722185704-3043a050f148
+-	github.com/kr/text v0.2.0 // indirect
+-	github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e // indirect
+ 	github.com/otiai10/copy v1.6.0
+-	github.com/pkg/errors v0.9.1 // indirect
+-	github.com/sergi/go-diff v1.2.0 // indirect
+ 	github.com/spf13/cobra v1.6.0
+-	github.com/stretchr/testify v1.8.0 // indirect
+ 	go.opencensus.io v0.23.0
+-	golang.org/x/crypto v0.1.0 // indirect
+ 	golang.org/x/mod v0.7.0
+ 	golang.org/x/net v0.5.0
+ 	golang.org/x/text v0.6.0
+ 	golang.org/x/tools v0.5.0
+-	gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f // indirect
+ 	gopkg.in/src-d/go-git.v4 v4.13.1
+ 	k8s.io/klog/v2 v2.80.1
+ )
++
++require (
++	cloud.google.com/go v0.102.1 // indirect
++	cloud.google.com/go/iam v0.4.0 // indirect
++	cloud.google.com/go/storage v1.22.1 // indirect
++	github.com/emirpasic/gods v1.12.0 // indirect
++	github.com/go-logr/logr v1.2.0 // indirect
++	github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
++	github.com/google/martian/v3 v3.3.2 // indirect
++	github.com/inconshreveable/mousetrap v1.0.1 // indirect
++	github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect
++	github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd // indirect
++	github.com/kr/text v0.2.0 // indirect
++	github.com/mitchellh/go-homedir v1.1.0 // indirect
++	github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e // indirect
++	github.com/pkg/errors v0.9.1 // indirect
++	github.com/sergi/go-diff v1.2.0 // indirect
++	github.com/spf13/pflag v1.0.5 // indirect
++	github.com/src-d/gcfg v1.4.0 // indirect
++	github.com/stretchr/testify v1.8.0 // indirect
++	github.com/xanzy/ssh-agent v0.2.1 // indirect
++	golang.org/x/crypto v0.1.0 // indirect
++	golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2 // indirect
++	golang.org/x/sys v0.4.0 // indirect
++	google.golang.org/api v0.93.0 // indirect
++	google.golang.org/genproto v0.0.0-20220815135757-37a418bb8959 // indirect
++	google.golang.org/grpc v1.48.0 // indirect
++	google.golang.org/protobuf v1.28.1 // indirect
++	gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f // indirect
++	gopkg.in/src-d/go-billy.v4 v4.3.2 // indirect
++	gopkg.in/warnings.v0 v0.1.2 // indirect
++)
diff --git a/nixpkgs/pkgs/development/tools/misc/go-md2man/default.nix b/nixpkgs/pkgs/development/tools/misc/go-md2man/default.nix
new file mode 100644
index 000000000000..e569009f273d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/go-md2man/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "go-md2man";
+  version = "2.0.3";
+
+  vendorHash = null;
+
+  src = fetchFromGitHub {
+    rev = "v${version}";
+    owner = "cpuguy83";
+    repo = "go-md2man";
+    sha256 = "sha256-bgAuN+pF9JekCQ/Eg4ph3WDv3RP8MB/10GDp1JMp9Kg=";
+  };
+
+  meta = with lib; {
+    description = "Go tool to convert markdown to man pages";
+    license = licenses.mit;
+    homepage = "https://github.com/cpuguy83/go-md2man";
+    maintainers = with maintainers; [offline];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/gob2/default.nix b/nixpkgs/pkgs/development/tools/misc/gob2/default.nix
new file mode 100644
index 000000000000..06487845fb3d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/gob2/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchurl, pkg-config, glib, bison, flex, gnome }:
+
+stdenv.mkDerivation rec {
+  pname = "gob2";
+  version = "2.0.20";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "5fe5d7990fd65b0d4b617ba894408ebaa6df453f2781c15a1cfdf2956c0c5428";
+  };
+
+  # configure script looks for d-bus but it is only needed for tests
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ glib bison flex ];
+
+  passthru = {
+    updateScript = gnome.updateScript {
+      packageName = pname;
+      versionPolicy = "none";
+    };
+  };
+
+  meta = {
+    description = "Preprocessor for making GObjects with inline C code";
+    homepage = "https://www.jirka.org/gob.html";
+    license = lib.licenses.gpl2Plus;
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/gopatch/default.nix b/nixpkgs/pkgs/development/tools/misc/gopatch/default.nix
new file mode 100644
index 000000000000..162f60cb30c1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/gopatch/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, testers
+, gopatch
+}:
+
+buildGoModule rec {
+  pname = "gopatch";
+  version = "0.3.0";
+
+  src = fetchFromGitHub {
+    owner = "uber-go";
+    repo = "gopatch";
+    rev = "v${version}";
+    hash = "sha256-iiVp/Aa4usShTQD/15zYk7/WQoQL/ZxVDPWYoi3JLW4=";
+  };
+
+  vendorHash = "sha256-Pm5RNOx54IW7L9atfVTiMkvvzFt7yjqnYu99YiWFhPA=";
+
+  subPackages = [
+    "."
+  ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=main._version=${version}"
+  ];
+
+  passthru.tests = {
+    version = testers.testVersion {
+      package = gopatch;
+    };
+  };
+
+  meta = with lib; {
+    description = "Refactoring and code transformation tool for Go";
+    homepage = "https://github.com/uber-go/gopatch";
+    changelog = "https://github.com/uber-go/gopatch/blob/${src.rev}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/gperf/3.0.x.nix b/nixpkgs/pkgs/development/tools/misc/gperf/3.0.x.nix
new file mode 100644
index 000000000000..8a2fdf6ec4b3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/gperf/3.0.x.nix
@@ -0,0 +1,47 @@
+{ lib, stdenv, fetchurl, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "gperf";
+  version = "3.0.4";
+
+  src = fetchurl {
+    url = "mirror://gnu/gperf/gperf-${version}.tar.gz";
+    sha256 = "0gnnm8iqcl52m8iha3sxrzrl9mcyhg7lfrhhqgdn4zj00ji14wbn";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+  patches = [
+    ./gperf-ar-fix.patch
+    # Clang 16 defaults to C++17, which does not allow `register` as a storage class specifier.
+    ./gperf-c++17-register-fix.patch
+  ];
+
+  # Replace the conditional inclusion of `string.h` on VMS with unconditional inclusion on all
+  # platforms. Otherwise, clang 16 fails to build gperf due to use of undeclared library functions.
+  postPatch = ''
+    sed '/#ifdef VMS/{N;N;N;N;N;s/.*/#include <string.h>/}' -i lib/getopt.c
+  '';
+
+  meta = {
+    description = "Perfect hash function generator";
+
+    longDescription = ''
+      GNU gperf is a perfect hash function generator.  For a given
+      list of strings, it produces a hash function and hash table, in
+      form of C or C++ code, for looking up a value depending on the
+      input string.  The hash function is perfect, which means that
+      the hash table has no collisions, and the hash table lookup
+      needs a single string comparison only.
+
+      GNU gperf is highly customizable.  There are options for
+      generating C or C++ code, for emitting switch statements or
+      nested ifs instead of a hash table, and for tuning the algorithm
+      employed by gperf.
+    '';
+
+    license = lib.licenses.gpl3Plus;
+
+    homepage = "https://www.gnu.org/software/gperf/";
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/gperf/default.nix b/nixpkgs/pkgs/development/tools/misc/gperf/default.nix
new file mode 100644
index 000000000000..bdc3b7a4a852
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/gperf/default.nix
@@ -0,0 +1,42 @@
+{lib, stdenv, fetchurl}:
+
+stdenv.mkDerivation rec {
+  pname = "gperf";
+  version = "3.1";
+
+  src = fetchurl {
+    url = "mirror://gnu/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "1qispg6i508rq8pkajh26cznwimbnj06wq9sd85vg95v8nwld1aq";
+  };
+
+  patches = [
+    # Clang 16 defaults to C++17, which does not allow `register` as a storage class specifier.
+    ./gperf-c++17-register-fix.patch
+  ];
+
+  enableParallelBuilding = true;
+
+  meta = {
+    description = "Perfect hash function generator";
+
+    longDescription = ''
+      GNU gperf is a perfect hash function generator.  For a given
+      list of strings, it produces a hash function and hash table, in
+      form of C or C++ code, for looking up a value depending on the
+      input string.  The hash function is perfect, which means that
+      the hash table has no collisions, and the hash table lookup
+      needs a single string comparison only.
+
+      GNU gperf is highly customizable.  There are options for
+      generating C or C++ code, for emitting switch statements or
+      nested ifs instead of a hash table, and for tuning the algorithm
+      employed by gperf.
+    '';
+
+    license = lib.licenses.gpl3Plus;
+
+    homepage = "https://www.gnu.org/software/gperf/";
+    platforms = lib.platforms.unix;
+    mainProgram = "gperf";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/gperf/gperf-ar-fix.patch b/nixpkgs/pkgs/development/tools/misc/gperf/gperf-ar-fix.patch
new file mode 100644
index 000000000000..942d726d76ea
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/gperf/gperf-ar-fix.patch
@@ -0,0 +1,46 @@
+--- gperf-3.0.4/lib/configure.ac	2009-01-15 02:24:31.000000000 +0200
++++ gperf-3.0.4.patched/lib/configure.ac	2018-11-29 06:37:20.968627533 +0300
+@@ -21,10 +21,12 @@
+ 
+ AC_PREREQ([2.60])
+ AC_INIT([hash.cc])
++m4_include([../aclocal.m4])
+ AC_PROG_MAKE_SET
+ dnl
+ dnl           checks for programs
+ dnl
++AC_SUBST([AR])
+ AC_PROG_CC
+                       dnl sets variable CC
+ AC_PROG_CPP
+--- gperf-3.0.4/lib/Makefile.in	2008-08-23 21:52:48.000000000 +0300
++++ gperf-3.0.4.patched/lib/Makefile.in	2018-11-29 06:36:43.161998888 +0300
+@@ -41,7 +41,7 @@
+ # Both C and C++ compiler
+ OBJEXT = @OBJEXT@
+ # Other
+-AR = ar
++AR = @AR@
+ AR_FLAGS = rc
+ RANLIB = @RANLIB@
+ MV = mv
+--- gperf-3.0.4/doc/configure.ac	2009-01-15 02:24:31.000000000 +0200
++++ gperf-3.0.4.patched/doc/configure.ac	2018-11-29 06:36:00.961288421 +0300
+@@ -21,6 +21,7 @@
+ 
+ AC_PREREQ([2.60])
+ AC_INIT([gperf.1])
++m4_include([../aclocal.m4])
+ PACKAGE=gperf
+ AC_SUBST([PACKAGE])
+ AC_PROG_MAKE_SET
+--- gperf-3.0.4/src/configure.ac	2009-01-15 02:24:30.000000000 +0200
++++ gperf-3.0.4.patched/src/configure.ac	2018-11-29 06:34:21.718576658 +0300
+@@ -21,6 +21,7 @@
+ 
+ AC_PREREQ([2.60])
+ AC_INIT([main.cc])
++m4_include([../aclocal.m4])
+ AC_CONFIG_HEADER([config.h])
+ AC_PROG_MAKE_SET
+ dnl
diff --git a/nixpkgs/pkgs/development/tools/misc/gperf/gperf-c++17-register-fix.patch b/nixpkgs/pkgs/development/tools/misc/gperf/gperf-c++17-register-fix.patch
new file mode 100644
index 000000000000..bb8c414a1a26
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/gperf/gperf-c++17-register-fix.patch
@@ -0,0 +1,13 @@
+diff --git a/lib/getline.cc b/lib/getline.cc
+index c57c633..0984a7c 100644
+--- a/lib/getline.cc
++++ b/lib/getline.cc
+@@ -55,7 +55,7 @@ getstr (char **lineptr, size_t *n, FILE *stream, char terminator, size_t offset)
+ 
+   for (;;)
+     {
+-      register int c = getc (stream);
++      int c = getc (stream);
+ 
+       /* We always want at least one char left in the buffer, since we
+          always (unless we get an error while reading the first char)
diff --git a/nixpkgs/pkgs/development/tools/misc/gpuvis/default.nix b/nixpkgs/pkgs/development/tools/misc/gpuvis/default.nix
new file mode 100644
index 000000000000..c0a10a09b02b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/gpuvis/default.nix
@@ -0,0 +1,46 @@
+{ fetchFromGitHub
+, freetype
+, gtk3
+, lib
+, meson
+, ninja
+, pkg-config
+, SDL2
+, stdenv
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gpuvis";
+  version = "0.1";
+
+  src = fetchFromGitHub {
+    owner = "mikesart";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-a9eAYDsiwyzZc4FAPo0wANysisIT4qCHLh2PrYswJtw=";
+  };
+
+  # patch dlopen path for gtk3
+  postPatch = ''
+    substituteInPlace src/hook_gtk3.h \
+      --replace "libgtk-3.so" "${lib.getLib gtk3}/lib/libgtk-3.so"
+  '';
+
+  nativeBuildInputs = [ pkg-config meson ninja wrapGAppsHook ];
+
+  buildInputs = [ SDL2 gtk3 freetype ];
+
+  CXXFLAGS = [
+    # GCC 13: error: 'uint32_t' has not been declared
+    "-include cstdint"
+  ];
+
+  meta = with lib; {
+    description = "GPU Trace Visualizer";
+    homepage = "https://github.com/mikesart/gpuvis";
+    license = licenses.mit;
+    maintainers = with maintainers; [ emantor ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/grcov/default.nix b/nixpkgs/pkgs/development/tools/misc/grcov/default.nix
new file mode 100644
index 000000000000..c40fea7f397e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/grcov/default.nix
@@ -0,0 +1,38 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "grcov";
+  version = "0.8.19";
+
+  src = fetchFromGitHub {
+    owner = "mozilla";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-1t+hzB9sSApLScCkjBnLk9i2dsoEwZmWCFukEOvHhZI=";
+  };
+
+  cargoHash = "sha256-4KzFbfUqnGmle2fwSaHMPIJHQFDq8H2Qzm4FdYdqpuM=";
+
+  # tests do not find grcov path correctly
+  checkFlags = let
+    skipList = [
+      "test_coveralls_service_job_id_is_not_sufficient"
+      "test_coveralls_service_name_is_not_sufficient"
+      "test_coveralls_works_with_just_service_name_and_job_id_args"
+      "test_coveralls_works_with_just_token_arg"
+      "test_integration"
+      "test_integration_guess_single_file"
+      "test_integration_zip_dir"
+      "test_integration_zip_zip"
+    ];
+    skipFlag = test: "--skip " + test;
+  in builtins.concatStringsSep " " (builtins.map skipFlag skipList);
+
+  meta = with lib; {
+    description =
+      "Rust tool to collect and aggregate code coverage data for multiple source files";
+    homepage = "https://github.com/mozilla/grcov";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ DieracDelta ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/grpc-client-cli/default.nix b/nixpkgs/pkgs/development/tools/misc/grpc-client-cli/default.nix
new file mode 100644
index 000000000000..a44a550c2fb8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/grpc-client-cli/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "grpc-client-cli";
+  version = "1.20.0";
+
+  src = fetchFromGitHub {
+    owner = "vadimi";
+    repo = "grpc-client-cli";
+    rev = "v${version}";
+    sha256 = "sha256-MqzuVPY/IuJWfdzHvC/keTe5yi0aMhvq8SoKDlRAI0w=";
+  };
+
+  vendorHash = "sha256-eRT1xMy9lsvF5sUF9jyDUWfNyLThIDTksaXff7xqyic=";
+
+  meta = with lib; {
+    description = "generic gRPC command line client";
+    maintainers = with maintainers; [ Philipp-M ];
+    homepage = "https://github.com/vadimi/grpc-client-cli";
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/grpc-tools/default.nix b/nixpkgs/pkgs/development/tools/misc/grpc-tools/default.nix
new file mode 100644
index 000000000000..5c21f8a0f415
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/grpc-tools/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, stdenv
+, cmake
+, fetchFromGitHub
+, gitUpdater
+}:
+
+stdenv.mkDerivation rec {
+  pname = "grpc-tools";
+  version = "1.12.4";
+
+  src = fetchFromGitHub {
+    owner = "grpc";
+    repo = "grpc-node";
+    rev = "grpc-tools@${version}";
+    hash = "sha256-708lBIGW5+vvSTrZHl/kc+ck7JKNXElrghIGDrMSyx8=";
+    fetchSubmodules = true;
+  };
+
+  sourceRoot = "${src.name}/packages/grpc-tools";
+
+  nativeBuildInputs = [ cmake ];
+
+  installPhase = ''
+    install -Dm755 -t $out/bin grpc_node_plugin
+    install -Dm755 -t $out/bin deps/protobuf/protoc
+  '';
+
+  passthru.updateScript = gitUpdater {
+    url = "https://github.com/grpc/grpc-node.git";
+    rev-prefix = "grpc-tools@";
+  };
+
+  meta = with lib; {
+    description = "Distribution of protoc and the gRPC Node protoc plugin for ease of installation with npm";
+    longDescription = ''
+      This package distributes the Protocol Buffers compiler protoc along with
+      the plugin for generating client and service objects for use with the Node
+      gRPC libraries.
+    '';
+    homepage = "https://github.com/grpc/grpc-node/tree/master/packages/grpc-tools";
+    license = licenses.asl20;
+    platforms = platforms.all;
+    maintainers = [ maintainers.nzhang-zh ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/gtkdialog/default.nix b/nixpkgs/pkgs/development/tools/misc/gtkdialog/default.nix
new file mode 100644
index 000000000000..995a6bb9cdb9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/gtkdialog/default.nix
@@ -0,0 +1,30 @@
+{lib, stdenv, fetchurl, fetchpatch, gtk2, pkg-config }:
+
+stdenv.mkDerivation rec {
+  pname = "gtkdialog";
+  version = "0.8.3";
+
+  src = fetchurl {
+    url = "https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "ff89d2d7f1e6488e5df5f895716ac1d4198c2467a2a5dc1f51ab408a2faec38e";
+  };
+  patches = [
+    # Pull Gentoo patch for -fno-common toolchain fix.
+    (fetchpatch {
+      name = "fno-common.patch";
+      url = "https://gitweb.gentoo.org/repo/gentoo.git/plain/x11-misc/gtkdialog/files/gtkdialog-0.8.3-fno-common.patch?id=98692e4c4ad494b88c4902ca1ab3e6541190bbe8";
+      sha256 = "1mh01krzpfy7lbbqx3xm71xsiqqgg67w4snv794wspfqkk2hicvz";
+    })
+  ];
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ gtk2 ];
+
+  meta = {
+    homepage = "https://code.google.com/archive/p/gtkdialog/";
+    # community links: http://murga-linux.com/puppy/viewtopic.php?t=111923 -> https://github.com/01micko/gtkdialog
+    description = "Small utility for fast and easy GUI building from many scripted and compiled languages";
+    license = lib.licenses.gpl2Plus;
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/gtkperf/bench.patch b/nixpkgs/pkgs/development/tools/misc/gtkperf/bench.patch
new file mode 100644
index 000000000000..3d00a03e9a58
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/gtkperf/bench.patch
@@ -0,0 +1,60 @@
+--- gtkperf/src/callbacks.c	2005-10-30 11:33:42.000000000 +0000
++++ gtkperf-patched/src/callbacks.c	2008-05-23 23:41:17.000000000 +0100
+@@ -219,6 +219,13 @@
+ }
+
+
++void
++on_cmdline_test(char *optarg)
++{
++	appdata->test_type = atoi(optarg);
++}
++
++
+ /* Initialize appdata */
+ void
+ setup_appdata(AppData * appdata_in)
+@@ -398,7 +405,7 @@
+ 	appdata->pixbuf_drawing = gdk_pixbuf_new_from_file (filename, NULL);
+
+ 	gtk_combo_box_set_active (GTK_COMBO_BOX (appdata->combobox_testtype),
+-				  0);
++				  appdata->test_type);
+
+ 	/* create end mark to info textview */
+ 	GtkTextIter iter;
+--- gtkperf/src/callbacks.h	2005-10-30 10:21:23.000000000 +0000
++++ gtkperf-patched/src/callbacks.h	2008-05-23 23:22:30.000000000 +0100
+@@ -13,6 +13,7 @@
+ void on_cmdline_run_all ();
+ void on_cmdline_help () ;
+ void on_cmdline_count (char *optarg) ;
++void on_cmdline_test (char *optarg) ;
+ void on_window_main_show (AppData * data);
+
+ gboolean
+--- gtkperf/src/main.c	2005-10-30 11:26:42.000000000 +0000
++++ gtkperf-patched/src/main.c	2008-05-23 23:44:02.000000000 +0100
+@@ -65,9 +65,10 @@
+ 			{"help", 0, 0, 0},
+ 			{"automatic", 0, 0, 0},
+ 			{"count", 1, 0, 0},
++			{"test", 1, 0, 0},
+ 			{0, 0, 0, 0}
+ 		};
+-		c = getopt_long (argc, argv, "hac:",
++		c = getopt_long (argc, argv, "hac:t:",
+ 			long_options, &option_index);
+ 		if (c == -1)
+ 			break;
+@@ -104,6 +105,10 @@
+ 				on_cmdline_count(optarg);
+ 				break;
+
++			case 't':
++				on_cmdline_test(optarg);
++				break;
++
+ 			default:
+ 			case 'h':
+ 				on_cmdline_help ();
diff --git a/nixpkgs/pkgs/development/tools/misc/gtkperf/default.nix b/nixpkgs/pkgs/development/tools/misc/gtkperf/default.nix
new file mode 100644
index 000000000000..c977ca3070e4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/gtkperf/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchurl, gtk2, pkg-config, libintl }:
+
+stdenv.mkDerivation rec {
+  pname = "gtkperf";
+  version = "0.40.0";
+  src = fetchurl {
+    url = "mirror://sourceforge/${pname}/${pname}_${lib.versions.majorMinor version}.tar.gz";
+    sha256 = "0yxj3ap3yfi76vqg6xjvgc16nfi9arm9kp87s35ywf10fd73814p";
+  };
+
+  hardeningDisable = [ "format" ];
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ gtk2 libintl ];
+
+  # https://openbenchmarking.org/innhold/7e9780c11550d09aa67bdba71248facbe2d781db
+  patches = [ ./bench.patch ];
+
+  meta = with lib; {
+    description = "Application designed to test GTK performance";
+    homepage = "https://gtkperf.sourceforge.net/";
+    license = with licenses; [ gpl2 ];
+    maintainers = with maintainers; [ dtzWill ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/help2man/1.40.4-cygwin-nls.patch b/nixpkgs/pkgs/development/tools/misc/help2man/1.40.4-cygwin-nls.patch
new file mode 100644
index 000000000000..82f8cf1cb37b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/help2man/1.40.4-cygwin-nls.patch
@@ -0,0 +1,165 @@
+LD_PRELOAD by itself only works with Cygwin builtin functions, but
+textdomain() and friends come from libintl.  In order to override
+those functions, we have to "replace" cygintl-?.dll since functions are
+bound to a DLL name at link time.  Our replacement will be used since
+it is loaded first by LD_PRELOAD.
+
+But as we are making this *the* libintl, we need to provide 
+pass-throughs for the other functions which we're not overriding,
+otherwise Locale::gettext won't load (not to mention the program
+that we're trying to help2man).
+
+--- help2man-1.46.5/Makefile.in	2014-10-09 13:03:01.000000000 +0200
++++ help2man-1.46.5/Makefile.in	2015-05-12 14:46:52.995521900 +0200
+@@ -76,7 +76,8 @@
+        fi
+
+ install_preload: install_dirs preload
+-	$(INSTALL_PROGRAM) $(preload).so $(DESTDIR)$(pkglibdir)
++	$(INSTALL_PROGRAM) lib/cygintl-9.dll $(DESTDIR)$(pkglibdir)
++	ln -sf cygintl-9.dll $(DESTDIR)$(pkglibdir)/$(preload).so
+
+ install_l10n: install_dirs msg_l10n man_l10n info_l10n
+        set -e; \
+@@ -144,7 +146,9 @@
+
+ preload: $(preload).so
+ $(preload).so: $(srcdir)/$(preload).c
+-	$(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -o $@ -fPIC -shared $? $(LIBS)
++	mkdir -p lib
++	$(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -o lib/cygintl-9.dll -shared $? $(LIBS)
++	ln -sf lib/cygintl-9.dll $@
+
+ man: $(target).1
+ $(target).1: $(srcdir)/$(target).PL $(srcdir)/$(target).h2m.PL
+--- help2man-1.46.5/bindtextdomain.c	2009-11-13 00:01:34.000000000 -0600
++++ help2man-1.46.5/bindtextdomain.c	2011-12-29 00:24:33.608078600 -0600
+@@ -27,12 +27,34 @@ static char *(*r_textdomain)(char const
+ static char *(*r_bindtextdomain)(char const *, char const *) = 0;
+ static char *(*r_bind_textdomain_codeset)(char const *, char const *) = 0;
+ 
++#ifdef __CYGWIN__
++static void *RTLD_NEXT = 0;
++static char *(*r_gettext)(const char *) = 0;
++static char *(*r_dgettext)(const char *, const char *) = 0;
++static char *(*r_dcgettext)(const char *, const char *, int) = 0;
++static char *(*r_ngettext)(const char *, const char *, unsigned long int) = 0;
++static char *(*r_dngettext)(const char *, const char *, const char *,
++                            unsigned long int) = 0;
++static char *(*r_dcngettext)(const char *, const char *, const char *,
++                             unsigned long int, int) = 0;
++static char *(*r_setlocale)(int, const char *) = 0;
++
++#define SYM(sym) libintl_ ## sym
++#else
++#define SYM(sym) sym
++#endif
++
+ void setup()
+ {
+     static int done = 0;
+     if (done++)
+         return;
+ 
++#ifdef __CYGWIN__
++    if (!(RTLD_NEXT = dlopen("/usr/bin/cygintl-9.dll", RTLD_LAZY)))
++        die("libintl8 not found");
++#endif
++
+     if (!(e_textdomain = getenv("TEXTDOMAIN")))
+ 	die("TEXTDOMAIN not set");
+ 
+@@ -48,9 +70,19 @@ void setup()
+     if (!(r_bind_textdomain_codeset = dlsym(RTLD_NEXT,
+     					    "bind_textdomain_codeset")))
+ 	die("can't find symbol \"bind_textdomain_codeset\"");
++
++#ifdef __CYGWIN__
++    r_gettext = dlsym(RTLD_NEXT, "libintl_gettext");
++    r_dgettext = dlsym(RTLD_NEXT, "libintl_dgettext");
++    r_dcgettext = dlsym(RTLD_NEXT, "libintl_dcgettext");
++    r_ngettext = dlsym(RTLD_NEXT, "libintl_ngettext");
++    r_dngettext = dlsym(RTLD_NEXT, "libintl_dngettext");
++    r_dcngettext = dlsym(RTLD_NEXT, "libintl_dcngettext");
++    r_setlocale = dlsym(RTLD_NEXT, "libintl_setlocale");
++#endif
+ }
+ 
+-char *textdomain(char const *domainname)
++char *SYM(textdomain)(char const *domainname)
+ {
+     char *r;
+     setup();
+@@ -61,7 +93,7 @@ char *textdomain(char const *domainname)
+     return r;
+ }
+ 
+-char *bindtextdomain(char const *domainname, char const *dirname)
++char *SYM(bindtextdomain)(char const *domainname, char const *dirname)
+ {
+     char const *dir = dirname;
+     setup();
+@@ -71,7 +103,7 @@ char *bindtextdomain(char const *domainn
+     return r_bindtextdomain(domainname, dir);
+ }
+ 
+-char *bind_textdomain_codeset(char const *domainname, char const *codeset)
++char *SYM(bind_textdomain_codeset)(char const *domainname, char const *codeset)
+ {
+     char *r;
+     setup();
+@@ -81,3 +113,54 @@ char *bind_textdomain_codeset(char const
+ 
+     return r;
+ }
++
++#ifdef __CYGWIN__
++
++char *libintl_gettext(const char *msgid)
++{
++    setup();
++    return r_gettext(msgid);
++}
++
++char *libintl_dgettext (const char *domainname, const char *msgid)
++{
++    setup();
++    return r_dgettext(domainname, msgid);
++}
++
++char *libintl_dcgettext (const char *domainname, const char *msgid,
++                         int category)
++{
++    setup();
++    return r_dcgettext (domainname, msgid, category);
++}
++
++char *libintl_ngettext (const char *msgid1, const char *msgid2,
++                        unsigned long int n)
++{
++    setup();
++    return r_ngettext (msgid1, msgid2, n);
++}
++
++char *libintl_dngettext (const char *domainname, const char *msgid1,
++                         const char *msgid2, unsigned long int n)
++{
++    setup();
++    return r_dngettext (domainname, msgid1, msgid2, n);
++}
++
++char *libintl_dcngettext (const char *domainname,
++                          const char *msgid1, const char *msgid2,
++                          unsigned long int n, int category)
++{
++    setup();
++    return r_dcngettext (domainname, msgid1, msgid2, n, category);
++}
++
++char *libintl_setlocale (int i, const char *s)
++{
++    setup();
++    return r_setlocale (i, s);
++}
++
++#endif
diff --git a/nixpkgs/pkgs/development/tools/misc/help2man/default.nix b/nixpkgs/pkgs/development/tools/misc/help2man/default.nix
new file mode 100644
index 000000000000..5c54941b9077
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/help2man/default.nix
@@ -0,0 +1,55 @@
+{ lib, stdenv, fetchurl, perlPackages, gettext, libintl }:
+
+# Note: this package is used for bootstrapping fetchurl, and thus
+# cannot use fetchpatch! All mutable patches (generated by GitHub or
+# cgit) that are needed here should be included directly in Nixpkgs as
+# files.
+
+stdenv.mkDerivation rec {
+  pname = "help2man";
+  version = "1.49.3";
+
+  src = fetchurl {
+    url = "mirror://gnu/help2man/help2man-${version}.tar.xz";
+    sha256 = "sha256-TX5P3vLspq/geiaCFRzqeHgeCk6PliIULZ9wwIOi/U8=";
+  };
+
+  strictDeps = true;
+
+  enableParallelBuilding = true;
+
+  nativeBuildInputs = [ gettext perlPackages.perl perlPackages.LocaleGettext ];
+  buildInputs = [ perlPackages.LocaleGettext libintl ];
+
+  configureFlags = [
+    "--enable-nls"
+  ];
+
+  doCheck = false; # target `check' is missing
+
+  patches = lib.optional stdenv.hostPlatform.isCygwin ./1.40.4-cygwin-nls.patch;
+
+  # We don't use makeWrapper here because it uses substitutions our
+  # bootstrap shell can't handle.
+  postInstall = ''
+    mv $out/bin/help2man $out/bin/.help2man-wrapped
+    cat > $out/bin/help2man <<EOF
+    #! $SHELL -e
+    export PERL5LIB=\''${PERL5LIB:+:}${perlPackages.LocaleGettext}/${perlPackages.perl.libPrefix}
+    ${lib.optionalString stdenv.hostPlatform.isCygwin ''export PATH=\''${PATH:+:}${gettext}/bin''}
+    exec -a \$0 $out/bin/.help2man-wrapped "\$@"
+    EOF
+    chmod +x $out/bin/help2man
+  '';
+
+  meta = with lib; {
+    description = "Generate man pages from `--help' output";
+    longDescription = ''
+      help2man produces simple manual pages from the ‘--help’ and ‘--version’ output of other commands.
+    '';
+    homepage = "https://www.gnu.org/software/help2man/";
+    license = licenses.gpl3Plus;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ pSub ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/highlight-assertions/default.nix b/nixpkgs/pkgs/development/tools/misc/highlight-assertions/default.nix
new file mode 100644
index 000000000000..9e4ed0e61dd8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/highlight-assertions/default.nix
@@ -0,0 +1,25 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "highlight-assertions";
+  version = "0.1.7";
+
+  src = fetchFromGitHub {
+    owner = "thehamsta";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-7r8tBJ6JFGUGUsTivzlO23hHiXISajjn2WF12mmbmMg=";
+  };
+
+  cargoSha256 = "sha256-E2TNwCry7JOWy50+iLM9d+Tx4lIO6hkBtaHVLV8bDuo=";
+
+  # requires nightly features
+  RUSTC_BOOTSTRAP = 1;
+
+  meta = with lib; {
+    description = "A tool for unit testing tree sitter highlights for nvim-treesitter";
+    homepage = "https://github.com/thehamsta/highlight-assertions";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/hound/default.nix b/nixpkgs/pkgs/development/tools/misc/hound/default.nix
new file mode 100644
index 000000000000..b906456116c5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/hound/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, makeWrapper
+, mercurial
+, git
+, openssh
+, nixosTests
+}:
+
+buildGoModule rec {
+  pname = "hound";
+  version = "0.7.1";
+
+  src = fetchFromGitHub {
+    owner = "hound-search";
+    repo = "hound";
+    rev = "v${version}";
+    sha256 = "sha256-Qdk57zLjTXLdDEmB6K+sZAym5s0BekJJa/CpYeOBOcY=";
+  };
+
+  vendorHash = "sha256-0psvz4bnhGuwwSAXvQp0ju0GebxoUyY2Rjp/D43KF78=";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  # requires network access
+  doCheck = false;
+
+  postInstall = ''
+    wrapProgram $out/bin/houndd --prefix PATH : ${lib.makeBinPath [ mercurial git openssh ]}
+  '';
+
+  passthru.tests = { inherit (nixosTests) hound; };
+
+  meta = with lib; {
+    description = "Lightning fast code searching made easy";
+    homepage = "https://github.com/hound-search/hound";
+    license = licenses.mit;
+    maintainers = with maintainers; [ grahamc SuperSandro2000 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/httpref/default.nix b/nixpkgs/pkgs/development/tools/misc/httpref/default.nix
new file mode 100644
index 000000000000..4417a81b66ec
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/httpref/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "httpref";
+  version = "1.6.1";
+
+  src = fetchFromGitHub {
+    owner = "dnnrly";
+    repo = "httpref";
+    rev = "v${version}";
+    hash = "sha256-T5fR9cyqsM6Kw6kFqZedoSxyvFkkxNpuErscwiUTMa0=";
+  };
+
+  vendorHash = "sha256-9Ei4Lfll79f/+iuO5KesUMaTgkS9nq+1tma/dhOZ7Qw=";
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "Command line, offline, access to HTTP status code, common header, and port references";
+    homepage = "https://github.com/dnnrly/httpref";
+    changelog = "https://github.com/dnnrly/httpref/releases/tag/${src.rev}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/husky/default.nix b/nixpkgs/pkgs/development/tools/misc/husky/default.nix
new file mode 100644
index 000000000000..dd2fef2a6026
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/husky/default.nix
@@ -0,0 +1,23 @@
+{ lib, buildNpmPackage, fetchFromGitHub }:
+
+buildNpmPackage rec {
+  pname = "husky";
+  version = "8.0.3";
+
+  src = fetchFromGitHub {
+    owner = "typicode";
+    repo = "husky";
+    rev = "v${version}";
+    hash = "sha256-KoF2+vikgFyCGjfKeaqkC720UVMuvCIn9ApDPKbudsA=";
+  };
+
+  npmDepsHash = "sha256-u1dndTKvInobva+71yI2vPiwrW9vqzAJ2sDAqT9YJsg=";
+
+  meta = with lib; {
+    description = "Git hooks made easy 🐶 woof!";
+    homepage = "https://github.com/typicode/husky";
+    changelog = "https://github.com/typicode/husky/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dit7ya ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/hydra-cli/Cargo.lock b/nixpkgs/pkgs/development/tools/misc/hydra-cli/Cargo.lock
new file mode 100644
index 000000000000..62112e07a7d9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/hydra-cli/Cargo.lock
@@ -0,0 +1,1995 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "aho-corasick"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67fc08ce920c31afb70f013dcce1bfc3a3195de6a228474e45e1f145b36f8d04"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "android_system_properties"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "ansi_term"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
+dependencies = [
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "arrayref"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545"
+
+[[package]]
+name = "arrayvec"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b"
+
+[[package]]
+name = "assert-json-diff"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4259cbe96513d2f1073027a259fc2ca917feb3026a5a8d984e3628e490255cc0"
+dependencies = [
+ "extend",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi 0.1.19",
+ "libc",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "base-x"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4cbbc9d0964165b47557570cce6c952866c2678457aca742aafc9fb771d30270"
+
+[[package]]
+name = "base64"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "blake2b_simd"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "afa748e348ad3be8263be728124b24a24f268266f6f5d58af9d75f6a40b5c587"
+dependencies = [
+ "arrayref",
+ "arrayvec",
+ "constant_time_eq",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.12.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c6ed94e98ecff0c12dd1b04c15ec0d7d9458ca8fe806cea6f12954efe74c63b"
+
+[[package]]
+name = "byteorder"
+version = "1.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
+
+[[package]]
+name = "bytes"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e4cec68f03f32e44924783795810fa50a7035d8c8ebe78580ad7e6c703fba38"
+
+[[package]]
+name = "bytes"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be"
+
+[[package]]
+name = "cc"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
+
+[[package]]
+name = "cfg-if"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
+
+[[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.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4e3c5919066adf22df73762e50cffcde3a758f2a848b113b586d1f86728b673b"
+dependencies = [
+ "iana-time-zone",
+ "js-sys",
+ "num-integer",
+ "num-traits",
+ "time 0.1.45",
+ "wasm-bindgen",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "clap"
+version = "2.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c"
+dependencies = [
+ "ansi_term",
+ "atty",
+ "bitflags",
+ "strsim",
+ "textwrap",
+ "unicode-width",
+ "vec_map",
+]
+
+[[package]]
+name = "colored"
+version = "1.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4ffc801dacf156c5854b9df4f425a626539c3a6ef7893cc0c5084a23f0b6c59"
+dependencies = [
+ "atty",
+ "lazy_static",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "const_fn"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fbdcdcb6d86f71c5e97409ad45898af11cbc995b4ee8112d59095a28d376c935"
+
+[[package]]
+name = "constant_time_eq"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc"
+
+[[package]]
+name = "cookie"
+version = "0.14.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "03a5d7b21829bc7b4bf4754a978a241ae54ea55a40f92bb20216e54096f4b951"
+dependencies = [
+ "percent-encoding",
+ "time 0.2.27",
+ "version_check",
+]
+
+[[package]]
+name = "cookie_store"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3818dfca4b0cb5211a659bbcbb94225b7127407b2b135e650d717bfb78ab10d3"
+dependencies = [
+ "cookie",
+ "idna 0.2.3",
+ "log",
+ "publicsuffix",
+ "serde",
+ "serde_json",
+ "time 0.2.27",
+ "url",
+]
+
+[[package]]
+name = "core-foundation"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "csv"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b015497079b9a9d69c02ad25de6c0a6edef051ea6360a327d0bd05802ef64ad"
+dependencies = [
+ "csv-core",
+ "itoa 1.0.6",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "csv-core"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b2466559f260f48ad25fe6317b3c8dac77b5bdb5763ac7d9d6103530663bc90"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "difference"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "524cbf6897b527295dff137cec09ecf3a05f4fddffd7dfcd1585403449e74198"
+
+[[package]]
+name = "dirs"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fd78930633bd1c6e35c4b42b1df7b0cbc6bc191146e512bb3bedf243fcc3901"
+dependencies = [
+ "libc",
+ "redox_users",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "discard"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "212d0f5754cb6769937f4501cc0e67f4f4483c8d2c3e1e922ee9edbe4ab4c7c0"
+
+[[package]]
+name = "dtoa"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56899898ce76aaf4a0f24d914c97ea6ed976d42fec6ad33fcbb0a1103e07b2b0"
+
+[[package]]
+name = "encode_unicode"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
+
+[[package]]
+name = "encoding_rs"
+version = "0.8.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "errno"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "errno-dragonfly"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "extend"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f47da3a72ec598d9c8937a7ebca8962a5c7a1f28444e38c2b33c771ba3f55f05"
+dependencies = [
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "fastrand"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "foreign-types"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+dependencies = [
+ "foreign-types-shared",
+]
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "fuchsia-zircon"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82"
+dependencies = [
+ "bitflags",
+ "fuchsia-zircon-sys",
+]
+
+[[package]]
+name = "fuchsia-zircon-sys"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7"
+
+[[package]]
+name = "futures-channel"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2"
+dependencies = [
+ "futures-core",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c"
+
+[[package]]
+name = "futures-io"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964"
+
+[[package]]
+name = "futures-sink"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e"
+
+[[package]]
+name = "futures-task"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65"
+
+[[package]]
+name = "futures-util"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533"
+dependencies = [
+ "futures-core",
+ "futures-io",
+ "futures-task",
+ "memchr",
+ "pin-project-lite 0.2.9",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.1.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "wasi 0.9.0+wasi-snapshot-preview1",
+]
+
+[[package]]
+name = "h2"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e4728fd124914ad25e99e3d15a9361a879f6620f63cb56bbb08f95abb97a535"
+dependencies = [
+ "bytes 0.5.6",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "http",
+ "indexmap",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tracing",
+ "tracing-futures",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286"
+
+[[package]]
+name = "http"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482"
+dependencies = [
+ "bytes 1.4.0",
+ "fnv",
+ "itoa 1.0.6",
+]
+
+[[package]]
+name = "http-body"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "13d5ff830006f7646652e057693569bfe0d51760c0085a071769d142a205111b"
+dependencies = [
+ "bytes 0.5.6",
+ "http",
+]
+
+[[package]]
+name = "httparse"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
+
+[[package]]
+name = "httpdate"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "494b4d60369511e7dea41cf646832512a94e542f68bb9c49e54518e0f468eb47"
+
+[[package]]
+name = "hydra-cli"
+version = "0.2.0"
+dependencies = [
+ "chrono",
+ "clap",
+ "log",
+ "mockito",
+ "prettytable-rs",
+ "reqwest",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "hyper"
+version = "0.13.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a6f157065790a3ed2f88679250419b5cdd96e714a0d65f7797fd337186e96bb"
+dependencies = [
+ "bytes 0.5.6",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "httparse",
+ "httpdate",
+ "itoa 0.4.8",
+ "pin-project",
+ "socket2",
+ "tokio",
+ "tower-service",
+ "tracing",
+ "want",
+]
+
+[[package]]
+name = "hyper-tls"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d979acc56dcb5b8dddba3917601745e877576475aa046df3226eabdecef78eed"
+dependencies = [
+ "bytes 0.5.6",
+ "hyper",
+ "native-tls",
+ "tokio",
+ "tokio-tls",
+]
+
+[[package]]
+name = "iana-time-zone"
+version = "0.1.56"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0722cd7114b7de04316e7ea5456a0bbb20e4adb46fd27a3697adb812cff0f37c"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys",
+ "iana-time-zone-haiku",
+ "js-sys",
+ "wasm-bindgen",
+ "windows",
+]
+
+[[package]]
+name = "iana-time-zone-haiku"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
+dependencies = [
+ "cc",
+]
+
+[[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 = "idna"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
+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 1.0.0",
+]
+
+[[package]]
+name = "io-lifetimes"
+version = "1.0.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220"
+dependencies = [
+ "hermit-abi 0.3.1",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "iovec"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "ipnet"
+version = "2.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12b6ee2129af8d4fb011108c73d99a1b83a85977f23b82460c0ae2e25bb4b57f"
+
+[[package]]
+name = "itoa"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4"
+
+[[package]]
+name = "itoa"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6"
+
+[[package]]
+name = "js-sys"
+version = "0.3.62"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68c16e1bfd491478ab155fd8b4896b86f9ede344949b641e61501e07c2b8b4d5"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "kernel32-sys"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
+dependencies = [
+ "winapi 0.2.8",
+ "winapi-build",
+]
+
+[[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.144"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b00cc1c228a6782d0f076e7b232802e0c5689d41bb5df366f2a6b6621cfdfe1"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ece97ea872ece730aed82664c424eb4c8291e1ff2480247ccf7409044bc6479f"
+
+[[package]]
+name = "log"
+version = "0.4.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "matches"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5"
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "mime"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
+
+[[package]]
+name = "mime_guess"
+version = "2.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef"
+dependencies = [
+ "mime",
+ "unicase",
+]
+
+[[package]]
+name = "mio"
+version = "0.6.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4afd66f5b91bf2a3bc13fad0e21caedac168ca4c707504e75585648ae80e4cc4"
+dependencies = [
+ "cfg-if 0.1.10",
+ "fuchsia-zircon",
+ "fuchsia-zircon-sys",
+ "iovec",
+ "kernel32-sys",
+ "libc",
+ "log",
+ "miow",
+ "net2",
+ "slab",
+ "winapi 0.2.8",
+]
+
+[[package]]
+name = "miow"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ebd808424166322d4a38da87083bfddd3ac4c131334ed55856112eb06d46944d"
+dependencies = [
+ "kernel32-sys",
+ "net2",
+ "winapi 0.2.8",
+ "ws2_32-sys",
+]
+
+[[package]]
+name = "mockito"
+version = "0.27.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a634720d366bcbce30fb05871a35da229cef101ad0b2ea4e46cf5abf031a273"
+dependencies = [
+ "assert-json-diff",
+ "colored",
+ "difference",
+ "httparse",
+ "lazy_static",
+ "log",
+ "rand",
+ "regex",
+ "serde_json",
+ "serde_urlencoded 0.6.1",
+]
+
+[[package]]
+name = "native-tls"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e"
+dependencies = [
+ "lazy_static",
+ "libc",
+ "log",
+ "openssl",
+ "openssl-probe",
+ "openssl-sys",
+ "schannel",
+ "security-framework",
+ "security-framework-sys",
+ "tempfile",
+]
+
+[[package]]
+name = "net2"
+version = "0.2.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "74d0df99cfcd2530b2e694f6e17e7f37b8e26bb23983ac530c0c97408837c631"
+dependencies = [
+ "cfg-if 0.1.10",
+ "libc",
+ "winapi 0.3.9",
+]
+
+[[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-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.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b"
+dependencies = [
+ "hermit-abi 0.2.6",
+ "libc",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.17.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3"
+
+[[package]]
+name = "openssl"
+version = "0.10.52"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "01b8574602df80f7b85fdfc5392fa884a4e3b3f4f35402c070ab34c3d3f78d56"
+dependencies = [
+ "bitflags",
+ "cfg-if 1.0.0",
+ "foreign-types",
+ "libc",
+ "once_cell",
+ "openssl-macros",
+ "openssl-sys",
+]
+
+[[package]]
+name = "openssl-macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "openssl-probe"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
+
+[[package]]
+name = "openssl-sys"
+version = "0.9.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e17f59264b2809d77ae94f0e1ebabc434773f370d6ca667bd223ea10e06cc7e"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e"
+
+[[package]]
+name = "pin-project"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc"
+dependencies = [
+ "pin-project-internal",
+]
+
+[[package]]
+name = "pin-project-internal"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "257b64915a082f7811703966789728173279bdebb956b143dbcd23f6f970a777"
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+
+[[package]]
+name = "prettytable-rs"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fd04b170004fa2daccf418a7f8253aaf033c27760b5f225889024cf66d7ac2e"
+dependencies = [
+ "atty",
+ "csv",
+ "encode_unicode",
+ "lazy_static",
+ "term",
+ "unicode-width",
+]
+
+[[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 1.0.109",
+ "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-macro-hack"
+version = "0.5.20+deprecated"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.56"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "publicsuffix"
+version = "1.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95b4ce31ff0a27d93c8de1849cf58162283752f065a90d508f1105fa6c9a213f"
+dependencies = [
+ "idna 0.2.3",
+ "url",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f4f29d145265ec1c483c7c654450edde0bfe043d3938d6972630663356d9500"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rand"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
+dependencies = [
+ "getrandom",
+ "libc",
+ "rand_chacha",
+ "rand_core",
+ "rand_hc",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402"
+dependencies = [
+ "ppv-lite86",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "rand_hc"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
+dependencies = [
+ "rand_core",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.1.57"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce"
+
+[[package]]
+name = "redox_syscall"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "redox_users"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de0737333e7a9502c789a36d7c7fa6092a49895d4faa31ca5df163857ded2e9d"
+dependencies = [
+ "getrandom",
+ "redox_syscall 0.1.57",
+ "rust-argon2",
+]
+
+[[package]]
+name = "regex"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af83e617f331cc6ae2da5443c602dfa5af81e517212d9d611a5b3ba1777b5370"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a5996294f19bd3aae0453a862ad728f60e6600695733dd5df01da90c54363a3c"
+
+[[package]]
+name = "reqwest"
+version = "0.10.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0718f81a8e14c4dbb3b34cf23dc6aaf9ab8a0dfec160c534b3dbca1aaa21f47c"
+dependencies = [
+ "base64",
+ "bytes 0.5.6",
+ "cookie",
+ "cookie_store",
+ "encoding_rs",
+ "futures-core",
+ "futures-util",
+ "http",
+ "http-body",
+ "hyper",
+ "hyper-tls",
+ "ipnet",
+ "js-sys",
+ "lazy_static",
+ "log",
+ "mime",
+ "mime_guess",
+ "native-tls",
+ "percent-encoding",
+ "pin-project-lite 0.2.9",
+ "serde",
+ "serde_json",
+ "serde_urlencoded 0.7.1",
+ "time 0.2.27",
+ "tokio",
+ "tokio-tls",
+ "url",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+ "winreg",
+]
+
+[[package]]
+name = "rust-argon2"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b18820d944b33caa75a71378964ac46f58517c92b6ae5f762636247c09e78fb"
+dependencies = [
+ "base64",
+ "blake2b_simd",
+ "constant_time_eq",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "rustc_version"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
+dependencies = [
+ "semver",
+]
+
+[[package]]
+name = "rustix"
+version = "0.37.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acf8729d8542766f1b2cf77eb034d52f40d375bb8b615d0b147089946e16613d"
+dependencies = [
+ "bitflags",
+ "errno",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041"
+
+[[package]]
+name = "schannel"
+version = "0.1.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3"
+dependencies = [
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "security-framework"
+version = "2.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a332be01508d814fed64bf28f798a146d73792121129962fdf335bb3c49a4254"
+dependencies = [
+ "bitflags",
+ "core-foundation",
+ "core-foundation-sys",
+ "libc",
+ "security-framework-sys",
+]
+
+[[package]]
+name = "security-framework-sys"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31c9bb296072e961fcbd8853511dd39c2d8be2deb1e17c6860b1d30732b323b4"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "semver"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
+dependencies = [
+ "semver-parser",
+]
+
+[[package]]
+name = "semver-parser"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
+
+[[package]]
+name = "serde"
+version = "1.0.163"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2113ab51b87a539ae008b5c6c02dc020ffa39afd2d83cffcb3f4eb2722cebec2"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.163"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c805777e3930c8883389c602315a24224bcc738b63905ef87cd1420353ea93e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.96"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1"
+dependencies = [
+ "itoa 1.0.6",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_urlencoded"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ec5d77e2d4c73717816afac02670d5c4f534ea95ed430442cad02e7a6e32c97"
+dependencies = [
+ "dtoa",
+ "itoa 0.4.8",
+ "serde",
+ "url",
+]
+
+[[package]]
+name = "serde_urlencoded"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
+dependencies = [
+ "form_urlencoded",
+ "itoa 1.0.6",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "sha1"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1da05c97445caa12d05e848c4a4fcbbea29e748ac28f7e80e9b010392063770"
+dependencies = [
+ "sha1_smol",
+]
+
+[[package]]
+name = "sha1_smol"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012"
+
+[[package]]
+name = "slab"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "socket2"
+version = "0.3.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "122e570113d28d773067fab24266b66753f6ea915758651696b6e35e49f88d6e"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "standback"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e113fb6f3de07a243d434a56ec6f186dfd51cb08448239fe7bcae73f87ff28ff"
+dependencies = [
+ "version_check",
+]
+
+[[package]]
+name = "stdweb"
+version = "0.4.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d022496b16281348b52d0e30ae99e01a73d737b2f45d38fed4edf79f9325a1d5"
+dependencies = [
+ "discard",
+ "rustc_version",
+ "stdweb-derive",
+ "stdweb-internal-macros",
+ "stdweb-internal-runtime",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "stdweb-derive"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c87a60a40fccc84bef0652345bbbbbe20a605bf5d0ce81719fc476f5c03b50ef"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "serde",
+ "serde_derive",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "stdweb-internal-macros"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "58fa5ff6ad0d98d1ffa8cb115892b6e69d67799f6763e162a1c9db421dc22e11"
+dependencies = [
+ "base-x",
+ "proc-macro2",
+ "quote",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "sha1",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "stdweb-internal-runtime"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "213701ba3370744dcd1a12960caa4843b3d68b4d1c0a5d575e0d65b2ee9d16c0"
+
+[[package]]
+name = "strsim"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a34fcf3e8b60f57e6a14301a2e916d323af98b0ea63c599441eec8558660c822"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "tempfile"
+version = "3.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998"
+dependencies = [
+ "cfg-if 1.0.0",
+ "fastrand",
+ "redox_syscall 0.3.5",
+ "rustix",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "term"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "edd106a334b7657c10b7c540a0106114feadeb4dc314513e97df481d5d966f42"
+dependencies = [
+ "byteorder",
+ "dirs",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "time"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a"
+dependencies = [
+ "libc",
+ "wasi 0.10.0+wasi-snapshot-preview1",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "time"
+version = "0.2.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4752a97f8eebd6854ff91f1c1824cd6160626ac4bd44287f7f4ea2035a02a242"
+dependencies = [
+ "const_fn",
+ "libc",
+ "standback",
+ "stdweb",
+ "time-macros",
+ "version_check",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "time-macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "957e9c6e26f12cb6d0dd7fc776bb67a706312e7299aed74c8dd5b17ebb27e2f1"
+dependencies = [
+ "proc-macro-hack",
+ "time-macros-impl",
+]
+
+[[package]]
+name = "time-macros-impl"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd3c141a1b43194f3f56a1411225df8646c55781d5f26db825b3d98507eb482f"
+dependencies = [
+ "proc-macro-hack",
+ "proc-macro2",
+ "quote",
+ "standback",
+ "syn 1.0.109",
+]
+
+[[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.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+[[package]]
+name = "tokio"
+version = "0.2.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6703a273949a90131b290be1fe7b039d0fc884aa1935860dfcbe056f28cd8092"
+dependencies = [
+ "bytes 0.5.6",
+ "fnv",
+ "futures-core",
+ "iovec",
+ "lazy_static",
+ "memchr",
+ "mio",
+ "num_cpus",
+ "pin-project-lite 0.1.12",
+ "slab",
+]
+
+[[package]]
+name = "tokio-tls"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a70f4fcd7b3b24fb194f837560168208f669ca8cb70d0c4b862944452396343"
+dependencies = [
+ "native-tls",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be8242891f2b6cbef26a2d7e8605133c2c554cd35b3e4948ea892d6d68436499"
+dependencies = [
+ "bytes 0.5.6",
+ "futures-core",
+ "futures-sink",
+ "log",
+ "pin-project-lite 0.1.12",
+ "tokio",
+]
+
+[[package]]
+name = "tower-service"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
+
+[[package]]
+name = "tracing"
+version = "0.1.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
+dependencies = [
+ "cfg-if 1.0.0",
+ "log",
+ "pin-project-lite 0.2.9",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "tracing-futures"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2"
+dependencies = [
+ "pin-project",
+ "tracing",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
+
+[[package]]
+name = "unicase"
+version = "2.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6"
+dependencies = [
+ "version_check",
+]
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-width"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+
+[[package]]
+name = "url"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643"
+dependencies = [
+ "form_urlencoded",
+ "idna 0.3.0",
+ "percent-encoding",
+]
+
+[[package]]
+name = "vcpkg"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+
+[[package]]
+name = "vec_map"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "want"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0"
+dependencies = [
+ "log",
+ "try-lock",
+]
+
+[[package]]
+name = "wasi"
+version = "0.9.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
+
+[[package]]
+name = "wasi"
+version = "0.10.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.85"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b6cb788c4e39112fbe1822277ef6fb3c55cd86b95cb3d3c4c1c9597e4ac74b4"
+dependencies = [
+ "cfg-if 1.0.0",
+ "serde",
+ "serde_json",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.85"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35e522ed4105a9d626d885b35d62501b30d9666283a5c8be12c14a8bdafe7822"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.15",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.35"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "083abe15c5d88556b77bdf7aef403625be9e327ad37c62c4e4129af740168163"
+dependencies = [
+ "cfg-if 1.0.0",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.85"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "358a79a0cb89d21db8120cbfb91392335913e4890665b1a7981d9e956903b434"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.85"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4783ce29f09b9d93134d41297aded3a712b7b979e9c6f28c32cb88c973a94869"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.15",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.85"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a901d592cafaa4d711bc324edfaff879ac700b19c3dfd60058d2b445be2691eb"
+
+[[package]]
+name = "web-sys"
+version = "0.3.62"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16b5f940c7edfdc6d12126d98c9ef4d1b3d470011c47c76a6581df47ad9ba721"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "winapi"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
+
+[[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-build"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
+
+[[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-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f"
+dependencies = [
+ "windows-targets 0.48.0",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
+dependencies = [
+ "windows-targets 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets 0.48.0",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5"
+dependencies = [
+ "windows_aarch64_gnullvm 0.48.0",
+ "windows_aarch64_msvc 0.48.0",
+ "windows_i686_gnu 0.48.0",
+ "windows_i686_msvc 0.48.0",
+ "windows_x86_64_gnu 0.48.0",
+ "windows_x86_64_gnullvm 0.48.0",
+ "windows_x86_64_msvc 0.48.0",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
+
+[[package]]
+name = "winreg"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0120db82e8a1e0b9fb3345a539c478767c0048d842860994d96113d5b667bd69"
+dependencies = [
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "ws2_32-sys"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e"
+dependencies = [
+ "winapi 0.2.8",
+ "winapi-build",
+]
diff --git a/nixpkgs/pkgs/development/tools/misc/hydra-cli/default.nix b/nixpkgs/pkgs/development/tools/misc/hydra-cli/default.nix
new file mode 100644
index 000000000000..05829eb0c999
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/hydra-cli/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, openssl
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "hydra-cli";
+  version = "0.3.0";
+
+  src = fetchFromGitHub {
+    owner = "nlewo";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1fd3swdjx249971ak1bgndm5kh6rlzbfywmydn122lhfi6ry6a03";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  # build fails due to outdated socket2 dependency
+  postPatch = ''
+    ln -sf ${./Cargo.lock} Cargo.lock
+  '';
+
+  __darwinAllowLocalNetworking = true;
+
+  meta = with lib; {
+    description = "A client for the Hydra CI";
+    homepage = "https://github.com/nlewo/hydra-cli";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ gilligan lewo ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/hydra/unstable.nix b/nixpkgs/pkgs/development/tools/misc/hydra/unstable.nix
new file mode 100644
index 000000000000..3d5d81452af3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/hydra/unstable.nix
@@ -0,0 +1,253 @@
+{ stdenv
+, lib
+, nix
+, perlPackages
+, buildEnv
+, makeWrapper
+, unzip
+, pkg-config
+, libpqxx
+, top-git
+, mercurial
+, darcs
+, subversion
+, breezy
+, openssl
+, bzip2
+, libxslt
+, perl
+, postgresql
+, prometheus-cpp
+, nukeReferences
+, git
+, nlohmann_json
+, docbook_xsl
+, openssh
+, openldap
+, gnused
+, coreutils
+, findutils
+, gzip
+, xz
+, gnutar
+, rpm
+, dpkg
+, cdrkit
+, pixz
+, boost
+, autoreconfHook
+, mdbook
+, foreman
+, python3
+, libressl
+, cacert
+, glibcLocales
+, fetchFromGitHub
+, nixosTests
+}:
+
+let
+  perlDeps = buildEnv {
+    name = "hydra-perl-deps";
+    paths = with perlPackages; lib.closePropagation
+      [
+        AuthenSASL
+        CatalystActionREST
+        CatalystAuthenticationStoreDBIxClass
+        CatalystAuthenticationStoreLDAP
+        CatalystDevel
+        CatalystPluginAccessLog
+        CatalystPluginAuthorizationRoles
+        CatalystPluginCaptcha
+        CatalystPluginPrometheusTiny
+        CatalystPluginSessionStateCookie
+        CatalystPluginSessionStoreFastMmap
+        CatalystPluginStackTrace
+        CatalystRuntime
+        CatalystTraitForRequestProxyBase
+        CatalystViewDownload
+        CatalystViewJSON
+        CatalystViewTT
+        CatalystXScriptServerStarman
+        CatalystXRoleApplicator
+        CryptPassphrase
+        CryptPassphraseArgon2
+        CryptRandPasswd
+        DBDPg
+        DBDSQLite
+        DataDump
+        DateTime
+        DigestSHA1
+        EmailMIME
+        EmailSender
+        FileLibMagic
+        FileSlurper
+        FileWhich
+        IOCompress
+        IPCRun
+        IPCRun3
+        JSON
+        JSONMaybeXS
+        JSONXS
+        ListSomeUtils
+        LWP
+        LWPProtocolHttps
+        ModulePluggable
+        NetAmazonS3
+        NetPrometheus
+        NetStatsd
+        PadWalker
+        ParallelForkManager
+        PerlCriticCommunity
+        PrometheusTinyShared
+        ReadonlyX
+        SQLSplitStatement
+        SetScalar
+        Starman
+        StringCompareConstantTime
+        SysHostnameLong
+        TermSizeAny
+        TermReadKey
+        Test2Harness
+        TestPostgreSQL
+        TestSimple13
+        TextDiff
+        TextTable
+        UUID4Tiny
+        XMLSimple
+        YAML
+        nix.perl-bindings
+        git
+      ];
+  };
+in
+stdenv.mkDerivation rec {
+  pname = "hydra";
+  version = "2023-12-24";
+
+  src = fetchFromGitHub {
+    owner = "NixOS";
+    repo = "hydra";
+    rev = "02e453fc8c39751843220eaecdeaf7d539b7e765";
+    hash = "sha256-hIXRgu2MGqFYCALDKAiP+8lE859zftRe4OVIgGOTkvc=";
+  };
+
+  buildInputs = [
+    unzip
+    libpqxx
+    top-git
+    mercurial
+    darcs
+    subversion
+    breezy
+    openssl
+    bzip2
+    libxslt
+    nix
+    perlDeps
+    perl
+    pixz
+    boost
+    postgresql
+    nlohmann_json
+    prometheus-cpp
+  ];
+
+  hydraPath = lib.makeBinPath (
+    [
+      subversion
+      openssh
+      nix
+      coreutils
+      findutils
+      pixz
+      gzip
+      bzip2
+      xz
+      gnutar
+      unzip
+      git
+      top-git
+      mercurial
+      darcs
+      gnused
+      breezy
+    ] ++ lib.optionals stdenv.isLinux [ rpm dpkg cdrkit ]
+  );
+
+  nativeBuildInputs = [
+    autoreconfHook
+    makeWrapper
+    pkg-config
+    mdbook
+    nukeReferences
+  ];
+
+  nativeCheckInputs = [
+    cacert
+    foreman
+    glibcLocales
+    python3
+    libressl.nc
+    openldap
+  ];
+
+  configureFlags = [ "--with-docbook-xsl=${docbook_xsl}/xml/xsl/docbook" ];
+
+  env.NIX_CFLAGS_COMPILE = "-pthread";
+
+  OPENLDAP_ROOT = openldap;
+
+  shellHook = ''
+    PATH=$(pwd)/src/script:$(pwd)/src/hydra-eval-jobs:$(pwd)/src/hydra-queue-runner:$(pwd)/src/hydra-evaluator:$PATH
+    PERL5LIB=$(pwd)/src/lib:$PERL5LIB;
+  '';
+
+  enableParallelBuilding = true;
+
+  postPatch = ''
+    # Change 5s timeout for init to 30s
+    substituteInPlace t/lib/HydraTestContext.pm \
+      --replace 'expectOkay(5, ("hydra-init"));' 'expectOkay(30, ("hydra-init"));'
+  '';
+
+  preCheck = ''
+    patchShebangs .
+    export LOGNAME=''${LOGNAME:-foo}
+    # set $HOME for bzr so it can create its trace file
+    export HOME=$(mktemp -d)
+    # remove flaky test
+    rm t/Hydra/Controller/User/ldap-legacy.t
+  '';
+
+  postInstall = ''
+    mkdir -p $out/nix-support
+    for i in $out/bin/*; do
+        read -n 4 chars < $i
+        if [[ $chars =~ ELF ]]; then continue; fi
+        wrapProgram $i \
+            --prefix PERL5LIB ':' $out/libexec/hydra/lib:$PERL5LIB \
+            --prefix PATH ':' $out/bin:$hydraPath \
+            --set-default HYDRA_RELEASE ${version} \
+            --set HYDRA_HOME $out/libexec/hydra \
+            --set NIX_RELEASE ${nix.name or "unknown"}
+    done
+  '';
+
+  dontStrip = true;
+
+  doCheck = true;
+
+  passthru = {
+    inherit nix perlDeps;
+    tests.basic = nixosTests.hydra.hydra_unstable;
+  };
+
+  meta = with lib; {
+    description = "Nix-based continuous build system";
+    homepage = "https://nixos.org/hydra";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ lheckemann mindavi ] ++ teams.helsinki-systems.members;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/icon-naming-utils/default.nix b/nixpkgs/pkgs/development/tools/misc/icon-naming-utils/default.nix
new file mode 100644
index 000000000000..930327a880db
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/icon-naming-utils/default.nix
@@ -0,0 +1,19 @@
+{lib, stdenv, fetchurl, perl, librsvg}:
+
+stdenv.mkDerivation rec {
+  pname = "icon-naming-utils";
+  version = "0.8.90";
+
+  src = fetchurl {
+    url = "http://tango.freedesktop.org/releases/${pname}-${version}.tar.gz";
+    sha256 = "071fj2jm5kydlz02ic5sylhmw6h2p3cgrm3gwdfabinqkqcv4jh4";
+  };
+
+  buildInputs = [ librsvg (perl.withPackages (p: [ p.XMLSimple ])) ];
+
+  meta = with lib; {
+    homepage = "http://tango.freedesktop.org/Standard_Icon_Naming_Specification";
+    platforms = with platforms; linux ++ darwin;
+    license = licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/igprof/default.nix b/nixpkgs/pkgs/development/tools/misc/igprof/default.nix
new file mode 100644
index 000000000000..a4e170f31b2a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/igprof/default.nix
@@ -0,0 +1,44 @@
+{lib, stdenv, fetchFromGitHub, libunwind, cmake, pcre, gdb}:
+
+stdenv.mkDerivation rec {
+  version = "5.9.18";
+  pname = "igprof";
+
+  src = fetchFromGitHub {
+    owner = "igprof";
+    repo = "igprof";
+    rev = "v${version}";
+    sha256 = "sha256-UTrAaH8C79km78Z/7NxvQ6dnl4u4Ki80nORf4bsoSNw=";
+  };
+
+  postPatch = ''
+    substituteInPlace src/igprof --replace libigprof.so $out/lib/libigprof.so
+    '';
+
+  buildInputs = [libunwind gdb pcre];
+  nativeBuildInputs = [cmake];
+  CXXFLAGS = ["-fPIC" "-O2" "-w" "-fpermissive"];
+
+  meta = {
+    broken = (stdenv.isLinux && stdenv.isAarch64);
+    description = "The Ignominous Profiler";
+
+    longDescription = ''
+      IgProf is a fast and light weight profiler. It correctly handles
+      dynamically loaded shared libraries, threads and sub-processes started by
+      the application.  We have used it routinely with large C++ applications
+      consisting of many hundreds of shared libraries and thousands of symbols
+      from millions of source lines of code. It requires no special privileges
+      to run. The performance reports provide full navigable call stacks and
+      can be customised by applying filters. Results from any number of
+      profiling runs can be included. This means you can both dig into the
+      details and see the big picture from combined workloads.
+    '';
+
+    license = lib.licenses.gpl2;
+
+    homepage = "https://igprof.org/";
+    platforms = lib.platforms.linux;
+    maintainers = with lib.maintainers; [ ktf ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/indent/default.nix b/nixpkgs/pkgs/development/tools/misc/indent/default.nix
new file mode 100644
index 000000000000..8e6ba9b70c04
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/indent/default.nix
@@ -0,0 +1,63 @@
+{ lib
+, stdenv
+, fetchurl
+, fetchpatch
+, libintl
+, texinfo
+, buildPackages
+, pkgsStatic
+}:
+
+stdenv.mkDerivation rec {
+  pname = "indent";
+  version = "2.2.13";
+
+  src = fetchurl {
+    url = "mirror://gnu/${pname}/${pname}-${version}.tar.gz";
+    hash = "sha256-nmRjT8TOZ5eyBLy4iXzhT90KtIyldpb3h2fFnK5XgJU=";
+  };
+
+  patches = [
+    (fetchpatch {
+      name = "CVE-2023-40305.part-1.patch";
+      url = "https://git.savannah.gnu.org/cgit/indent.git/patch/?id=df4ab2d19e247d059e0025789ba513418073ab6f";
+      hash = "sha256-OLXBlYTdEuFK8SIsyC5Xr/hHWlvXiRqY2h79w+H5pGk=";
+    })
+    (fetchpatch {
+      name = "CVE-2023-40305.part-2.patch";
+      url = "https://git.savannah.gnu.org/cgit/indent.git/patch/?id=2685cc0bef0200733b634932ea7399b6cf91b6d7";
+      hash = "sha256-t+QF7N1aqQ28J2O8esZ2bc5K042cUuZR4MeMeuWIgPw=";
+    })
+  ];
+
+  # avoid https://savannah.gnu.org/bugs/?64751
+  postPatch = ''
+    sed -E -i '/output\/else-comment-2-br(-ce)?.c/d' regression/TEST
+    sed -E -i 's/else-comment-2-br(-ce)?.c//g' regression/TEST
+  '';
+
+  makeFlags = [ "AR=${stdenv.cc.targetPrefix}ar" ];
+
+  strictDeps = true;
+  nativeBuildInputs = [ texinfo ];
+  buildInputs = [ libintl ];
+  depsBuildBuild = [ buildPackages.stdenv.cc ]; # needed when cross-compiling
+
+  env.NIX_CFLAGS_COMPILE = toString (
+    lib.optional stdenv.cc.isClang "-Wno-implicit-function-declaration"
+    ++ lib.optional (stdenv.cc.isClang && lib.versionAtLeast (lib.getVersion stdenv.cc) "13")  "-Wno-unused-but-set-variable"
+  );
+
+  hardeningDisable = [ "format" ];
+
+  doCheck = true;
+
+  passthru.tests.static = pkgsStatic.indent;
+  meta = {
+    homepage = "https://www.gnu.org/software/indent/";
+    description = "A source code reformatter";
+    license = lib.licenses.gpl3Plus;
+    maintainers = [ lib.maintainers.mmahut ];
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/inotify-tools/default.nix b/nixpkgs/pkgs/development/tools/misc/inotify-tools/default.nix
new file mode 100644
index 000000000000..e8536ea784f3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/inotify-tools/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, autoreconfHook, fetchFromGitHub, nix-update-script, fanotifySupport ? true }:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "inotify-tools";
+  version = "4.23.9.0";
+
+  src = fetchFromGitHub {
+    repo = "inotify-tools";
+    owner = "inotify-tools";
+    rev = finalAttrs.version;
+    hash = "sha256-6kM2JzxRcwUjUmbUWGnQ+gAvZcn7C32/enRwiYiuQGU=";
+  };
+
+  configureFlags = [
+    (lib.enableFeature fanotifySupport "fanotify")
+  ];
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  passthru = {
+    updateScript = nix-update-script { };
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/inotify-tools/inotify-tools/wiki";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ marcweber pSub shamilton ];
+    platforms = platforms.linux;
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/misc/intel-gpu-tools/default.nix b/nixpkgs/pkgs/development/tools/misc/intel-gpu-tools/default.nix
new file mode 100644
index 000000000000..dcafe4ceeff4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/intel-gpu-tools/default.nix
@@ -0,0 +1,118 @@
+{ lib
+, stdenv
+, fetchFromGitLab
+, fetchpatch
+
+# build time
+, bison
+, docbook_xsl
+, docutils
+, flex
+, gtk-doc
+, meson
+, ninja
+, pkg-config
+, utilmacros
+
+# runtime
+, alsa-lib
+, cairo
+, curl
+, elfutils
+, glib
+, gsl
+, json_c
+, kmod
+, libdrm
+, liboping
+, libpciaccess
+, libunwind
+, libX11
+, libXext
+, libXrandr
+, libXv
+, openssl
+, peg
+, procps
+, python3
+, udev
+, valgrind
+, xmlrpc_c
+, xorgproto
+}:
+
+stdenv.mkDerivation rec {
+  pname = "intel-gpu-tools";
+  version = "1.27.1";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.freedesktop.org";
+    owner = "drm";
+    repo = "igt-gpu-tools";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-7Z9Y7uUjtjdQbB+xV/fvO18xB18VV7fBZqw1fI7U0jQ=";
+  };
+
+  patches = [
+    # fixes pkgsMusl.intel-gpu-tools
+    # https://gitlab.freedesktop.org/drm/igt-gpu-tools/-/issues/138
+    (fetchpatch {
+      url = "https://raw.githubusercontent.com/void-linux/void-packages/111918317d06598fe1459dbe139923404f3f4b9d/srcpkgs/igt-gpu-tools/patches/musl.patch";
+      hash = "sha256-cvtwZg7js7O/Ww7puBTfVzLRji2bHTyV91+PvpH8qrg=";
+    })
+  ];
+
+  nativeBuildInputs = [
+    bison
+    docbook_xsl
+    docutils
+    flex
+    gtk-doc
+    meson
+    ninja
+    pkg-config
+    utilmacros
+  ];
+
+  buildInputs = [
+    alsa-lib
+    cairo
+    curl
+    elfutils
+    glib
+    gsl
+    json_c
+    kmod
+    libdrm
+    liboping
+    libpciaccess
+    libunwind
+    libX11
+    libXext
+    libXrandr
+    libXv
+    openssl
+    peg
+    procps
+    python3
+    udev
+    valgrind
+    xmlrpc_c
+    xorgproto
+  ];
+
+  preConfigure = ''
+    patchShebangs tests man
+  '';
+
+  hardeningDisable = [ "bindnow" ];
+
+  meta = with lib; {
+    changelog = "https://gitlab.freedesktop.org/drm/igt-gpu-tools/-/blob/v${version}/NEWS";
+    homepage = "https://drm.pages.freedesktop.org/igt-gpu-tools/";
+    description = "Tools for development and testing of the Intel DRM driver";
+    license = licenses.mit;
+    platforms = [ "x86_64-linux" "i686-linux" ];
+    maintainers = with maintainers; [ pSub ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/intltool/default.nix b/nixpkgs/pkgs/development/tools/misc/intltool/default.nix
new file mode 100644
index 000000000000..967fc442a73d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/intltool/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchurl, fetchpatch, gettext, perlPackages, buildPackages }:
+
+stdenv.mkDerivation rec {
+  pname = "intltool";
+  version = "0.51.0";
+
+  src = fetchurl {
+    url = "https://launchpad.net/intltool/trunk/${version}/+download/${pname}-${version}.tar.gz";
+    sha256 = "1karx4sb7bnm2j67q0q74hspkfn6lqprpy5r99vkn5bb36a4viv7";
+  };
+
+  # fix "unescaped left brace" errors when using intltool in some cases
+  patches = [(fetchpatch {
+    name = "perl5.26-regex-fixes.patch";
+    urls = [
+      "https://sources.debian.org/data/main/i/intltool/0.51.0-5/debian/patches/perl5.26-regex-fixes.patch"
+      "https://src.fedoraproject.org/rpms/intltool/raw/d8d2ef29fb122a42a6b6678eb1ec97ae56902af2/f/intltool-perl5.26-regex-fixes.patch"
+    ];
+    sha256 = "12q2140867r5d0dysly72khi7b0mm2gd7nlm1k81iyg7fxgnyz45";
+  })];
+
+  nativeBuildInputs = with perlPackages; [ perl XMLParser ];
+  propagatedBuildInputs = [ gettext ] ++ (with perlPackages; [ perl XMLParser ]);
+
+  postInstall = lib.optionalString (stdenv.hostPlatform != stdenv.buildPlatform) ''
+    for f in $out/bin/*; do
+      substituteInPlace $f --replace "${buildPackages.perl}" "${perlPackages.perl}"
+    done
+  '';
+  meta = with lib; {
+    description = "Translation helper tool";
+    homepage = "https://launchpad.net/intltool/";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ raskin ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/iozone/default.nix b/nixpkgs/pkgs/development/tools/misc/iozone/default.nix
new file mode 100644
index 000000000000..a724d67a1a04
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/iozone/default.nix
@@ -0,0 +1,62 @@
+{ stdenv, lib, fetchurl, gnuplot }:
+
+let
+  target = if stdenv.hostPlatform.system == "i686-linux" then
+    "linux"
+  else if stdenv.hostPlatform.system == "x86_64-linux" then
+    "linux-AMD64"
+  else if stdenv.hostPlatform.system == "x86_64-darwin" then
+    "macosx"
+  else if stdenv.hostPlatform.system == "aarch64-linux" then
+    "linux-arm"
+  else throw "Platform ${stdenv.hostPlatform.system} not yet supported.";
+in
+
+stdenv.mkDerivation rec {
+  pname = "iozone";
+  version = "3.506";
+
+  src = fetchurl {
+    url = "http://www.iozone.org/src/current/iozone${lib.replaceStrings ["."] ["_"] version}.tar";
+    hash = "sha256-EUzlwHGHO5ose6bnPQXV735mVkOSrL/NwLMmHbEPy+c=";
+  };
+
+  license = fetchurl {
+    url = "http://www.iozone.org/docs/Iozone_License.txt";
+    hash = "sha256-O/8yztxKBI/UKs6vwv9mq16Rn3cf/UHpSxdVnAPVCYw=";
+  };
+
+  preBuild = "pushd src/current";
+  postBuild = "popd";
+
+  buildFlags = target;
+
+  enableParallelBuilding = true;
+
+  installPhase = ''
+    mkdir -p $out/{bin,share/doc,libexec,share/man/man1}
+    install docs/iozone.1 $out/share/man/man1/
+    install docs/Iozone_ps.gz $out/share/doc/
+    install -s src/current/{iozone,fileop,pit_server} $out/bin/
+    install src/current/{gnu3d.dem,Generate_Graphs,gengnuplot.sh} $out/libexec/
+    ln -s $out/libexec/Generate_Graphs $out/bin/iozone_generate_graphs
+    # License copy is mandated by the license, but it's not in the tarball.
+    install ${license} $out/share/doc/Iozone_License.txt
+  '';
+
+  preFixup = ''
+    sed -i "1i#! $shell" $out/libexec/Generate_Graphs
+    substituteInPlace $out/libexec/Generate_Graphs \
+      --replace ./gengnuplot.sh $out/libexec/gengnuplot.sh \
+      --replace 'gnuplot ' "${gnuplot}/bin/gnuplot " \
+      --replace gnu3d.dem $out/libexec/gnu3d.dem
+  '';
+
+  meta = {
+    description = "IOzone Filesystem Benchmark";
+    homepage    = "http://www.iozone.org/";
+    license     = lib.licenses.unfreeRedistributable;
+    platforms   = ["i686-linux" "x86_64-linux" "x86_64-darwin" "aarch64-linux" ];
+    maintainers = with lib.maintainers; [ Baughn makefu ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/itm-tools/Cargo.lock b/nixpkgs/pkgs/development/tools/misc/itm-tools/Cargo.lock
new file mode 100644
index 000000000000..d9d39e519d22
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/itm-tools/Cargo.lock
@@ -0,0 +1,315 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "addr2line"
+version = "0.12.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "602d785912f476e480434627e8732e6766b760c045bbf897d9dfaa9f4fbd399c"
+dependencies = [
+ "gimli",
+]
+
+[[package]]
+name = "adler32"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "567b077b825e468cc974f0020d4082ee6e03132512f207ef1a02fd5d00d1f32d"
+
+[[package]]
+name = "ansi_term"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b"
+dependencies = [
+ "winapi",
+]
+
+[[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 = "backtrace"
+version = "0.3.49"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05100821de9e028f12ae3d189176b41ee198341eb8f369956407fea2f5cc666c"
+dependencies = [
+ "addr2line",
+ "cfg-if",
+ "libc",
+ "miniz_oxide",
+ "object",
+ "rustc-demangle",
+]
+
+[[package]]
+name = "bitflags"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
+
+[[package]]
+name = "byteorder"
+version = "1.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de"
+
+[[package]]
+name = "cfg-if"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
+
+[[package]]
+name = "clap"
+version = "2.33.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bdfa80d47f954d53a35a64987ca1422f495b8d6483c0fe9f7117b36c2a792129"
+dependencies = [
+ "ansi_term",
+ "atty",
+ "bitflags",
+ "strsim",
+ "textwrap",
+ "unicode-width",
+ "vec_map",
+]
+
+[[package]]
+name = "either"
+version = "1.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb1f6b1ce1c140482ea30ddd3335fc0024ac7ee112895426e0a629a6c20adfe3"
+
+[[package]]
+name = "exitfailure"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2ff5bd832af37f366c6c194d813a11cd90ac484f124f079294f28e357ae40515"
+dependencies = [
+ "failure",
+]
+
+[[package]]
+name = "failure"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d32e9bd16cc02eae7db7ef620b392808b89f6a5e16bb3497d159c6b92a0f4f86"
+dependencies = [
+ "backtrace",
+ "failure_derive",
+]
+
+[[package]]
+name = "failure_derive"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa4da3c766cd7a0db8242e326e9e4e081edd567072893ed320008189715366a4"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+ "synstructure",
+]
+
+[[package]]
+name = "gimli"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bcc8e0c9bce37868955864dbecd2b1ab2bdf967e6f28066d65aaac620444b65c"
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3deed196b6e7f9e44a2ae8d94225d80302d81208b1bb673fd21fe634645c85a9"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "itm"
+version = "0.4.0"
+source = "git+https://github.com/rust-embedded/itm#5dd476d03de0738062a876fd3845900ab04833a4"
+dependencies = [
+ "byteorder",
+ "either",
+ "thiserror",
+]
+
+[[package]]
+name = "itm-tools"
+version = "0.1.0"
+dependencies = [
+ "clap",
+ "exitfailure",
+ "failure",
+ "itm",
+ "rustc-demangle",
+ "xmas-elf",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.71"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9457b06509d27052635f90d6466700c65095fdf75409b3fbdd903e988b886f49"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "791daaae1ed6889560f8c4359194f56648355540573244a5448a83ba1ecc7435"
+dependencies = [
+ "adler32",
+]
+
+[[package]]
+name = "object"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ab52be62400ca80aa00285d25253d7f7c437b7375c4de678f5405d3afe82ca5"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "beae6331a816b1f65d04c45b078fd8e6c93e8071771f41b8163255bbd8d7c8fa"
+dependencies = [
+ "unicode-xid",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa563d17ecb180e500da1cfd2b028310ac758de548efdd203e18f283af693f37"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783"
+
+[[package]]
+name = "strsim"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
+
+[[package]]
+name = "syn"
+version = "1.0.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e8d5d96e8cbb005d6959f119f773bfaebb5684296108fb32600c00cde305b2cd"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-xid",
+]
+
+[[package]]
+name = "synstructure"
+version = "0.12.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b834f2d66f734cb897113e34aaff2f1ab4719ca946f9a7358dba8f8064148701"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+ "unicode-xid",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7dfdd070ccd8ccb78f4ad66bf1982dc37f620ef696c6b5028fe2ed83dd3d0d08"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd80fc12f73063ac132ac92aceea36734f04a1d93c1240c6944e23a3b8841793"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "unicode-width"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3"
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564"
+
+[[package]]
+name = "vec_map"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
+
+[[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-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "xmas-elf"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "22678df5df766e8d1e5d609da69f0c3132d794edf6ab5e75e7abcd2270d4cf58"
+dependencies = [
+ "zero",
+]
+
+[[package]]
+name = "zero"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f1bc8a6b2005884962297587045002d8cfb8dcec9db332f4ca216ddc5de82c5"
diff --git a/nixpkgs/pkgs/development/tools/misc/itm-tools/default.nix b/nixpkgs/pkgs/development/tools/misc/itm-tools/default.nix
new file mode 100644
index 000000000000..7f027a217327
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/itm-tools/default.nix
@@ -0,0 +1,35 @@
+{ lib, fetchFromGitHub, rustPlatform, pkg-config }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "itm-tools";
+  version = "unstable-2019-11-15";
+
+  src = fetchFromGitHub {
+    owner = "japaric";
+    repo = pname;
+    rev = "e94155e44019d893ac8e6dab51cc282d344ab700";
+    sha256 = "19xkjym0i7y52cfhvis49c59nzvgw4906cd8bkz8ka38mbgfqgiy";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "itm-0.4.0" = "sha256-T61f1WvxEMhI5bzp8FuMYWiG1YOPJvWuBJfK/gjuNKI=";
+    };
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+
+  postPatch = ''
+    ln -s ${./Cargo.lock} Cargo.lock
+  '';
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Tools for analyzing ITM traces";
+    homepage = "https://github.com/japaric/itm-tools";
+    license = with licenses; [ asl20 mit ];
+    maintainers = with maintainers; [ hh sb0 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/itstool/default.nix b/nixpkgs/pkgs/development/tools/misc/itstool/default.nix
new file mode 100644
index 000000000000..0f2633d71e6f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/itstool/default.nix
@@ -0,0 +1,43 @@
+{ stdenv
+, lib
+, fetchurl
+, python3
+}:
+
+stdenv.mkDerivation rec {
+  pname = "itstool";
+  version = "2.0.7";
+
+  src = fetchurl {
+    url = "http://files.itstool.org/${pname}/${pname}-${version}.tar.bz2";
+    hash = "sha256-a5p80poSu5VZj1dQ6HY87niDahogf4W3TYsydbJ+h8o=";
+  };
+
+  strictDeps = true;
+
+  nativeBuildInputs = [
+    python3
+    python3.pkgs.wrapPython
+  ];
+
+  buildInputs = [
+    python3
+    python3.pkgs.libxml2
+  ];
+
+  pythonPath = [
+    python3.pkgs.libxml2
+  ];
+
+  postFixup = ''
+    wrapPythonPrograms
+  '';
+
+  meta = {
+    homepage = "https://itstool.org/";
+    description = "XML to PO and back again";
+    license = lib.licenses.gpl3Plus;
+    platforms = lib.platforms.all;
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/jcli/default.nix b/nixpkgs/pkgs/development/tools/misc/jcli/default.nix
new file mode 100644
index 000000000000..0333b74e3e0c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/jcli/default.nix
@@ -0,0 +1,28 @@
+{ lib, buildGoModule, fetchFromGitHub, fetchpatch }:
+
+buildGoModule rec {
+  pname = "jcli";
+  version = "0.0.42";
+
+  src = fetchFromGitHub {
+    owner = "jenkins-zh";
+    repo = "jenkins-cli";
+    rev = "v${version}";
+    hash = "sha256-t9NE911TjAvoCsmf9F989DNQ+s9GhgUF7cwuyHefWts=";
+  };
+
+  vendorHash = "sha256-bmPnxFvdKU5zuMsCDboSOxP5f7NnMRwS/gN0sW7eTRA=";
+
+  doCheck = false;
+
+  postInstall = ''
+    mv $out/bin/{jenkins-cli,jcli}
+  '';
+
+  meta = with lib; {
+    description = "Jenkins CLI allows you to manage your Jenkins in an easy way";
+    homepage = "https://jcli.jenkins-zh.cn/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ sikmir ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/jiq/default.nix b/nixpkgs/pkgs/development/tools/misc/jiq/default.nix
new file mode 100644
index 000000000000..2a0f0ed822c0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/jiq/default.nix
@@ -0,0 +1,31 @@
+{ lib, buildGoModule, fetchFromGitHub, jq, makeWrapper }:
+
+buildGoModule rec {
+  pname = "jiq";
+  version = "0.7.2";
+
+  src = fetchFromGitHub {
+    owner = "fiatjaf";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-txhttYngN+dofA3Yp3gZUZPRRZWGug9ysXq1Q0RP7ig=";
+  };
+
+  vendorHash = "sha256-ZUmOhPGy+24AuxdeRVF0Vnu8zDGFrHoUlYiDdfIV5lc=";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  nativeCheckInputs = [ jq ];
+
+  postInstall = ''
+    wrapProgram $out/bin/jiq \
+      --prefix PATH : ${lib.makeBinPath [ jq ]}
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/fiatjaf/jiq";
+    license = licenses.mit;
+    description = "jid on jq - interactive JSON query tool using jq expressions";
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/jscoverage/default.nix b/nixpkgs/pkgs/development/tools/misc/jscoverage/default.nix
new file mode 100644
index 000000000000..83dbfb93c86d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/jscoverage/default.nix
@@ -0,0 +1,55 @@
+{ autoconf, fetchurl, makedepend, perl, python3, lib, stdenv, zip }:
+
+stdenv.mkDerivation rec {
+  pname = "jscoverage";
+  version = "0.5.1";
+
+  src = fetchurl {
+    url = "https://siliconforks.com/${pname}/download/${pname}-${version}.tar.bz2";
+    sha256 = "c45f051cec18c10352f15f9844f47e37e8d121d5fd16680e2dd0f3b4420eb7f4";
+  };
+
+  patches = [
+    ./jsfalse_to_null.patch
+  ];
+
+  nativeBuildInputs = [ perl python3 zip ];
+
+  strictDeps = true;
+
+  # It works without MOZ_FIX_LINK_PATHS, circumventing an impurity
+  # issue.  Maybe we could kick js/ (spidermonkey) completely and
+  # instead use our spidermonkey via nix.
+  preConfigure = ''
+  sed -i 's/^MOZ_FIX_LINK_PATHS=.*$/MOZ_FIX_LINK_PATHS=""/' ./js/configure
+  '';
+
+  meta = {
+    description = "Code coverage for JavaScript";
+
+    longDescription = ''
+    JSCoverage is a tool that measures code coverage for JavaScript
+    programs.
+
+    Code coverage statistics show which lines of a program have been
+    executed (and which have been missed). This information is useful
+    for constructing comprehensive test suites (hence, it is often
+    called test coverage).
+
+    JSCoverage works by instrumenting the JavaScript code used in web
+    pages. Code coverage statistics are collected while the
+    instrumented JavaScript code is executed in a web browser.
+
+    JSCoverage supports the complete language syntax described in the
+    ECMAScript Language Specification (ECMA-262, 3rd
+    edition). JSCoverage works with any modern standards-compliant web
+    browser - including Internet Explorer (IE 6, 7, and 8), Firefox,
+    Opera, Safari, and Google Chrome - on Microsoft Windows and
+    GNU/Linux.
+    '';
+
+    homepage = "http://siliconforks.com/jscoverage/";
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/jscoverage/jsfalse_to_null.patch b/nixpkgs/pkgs/development/tools/misc/jscoverage/jsfalse_to_null.patch
new file mode 100644
index 000000000000..b49594964e1f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/jscoverage/jsfalse_to_null.patch
@@ -0,0 +1,26 @@
+diff --git i/js/jsstr.cpp w/js/jsstr.cpp
+index e662bf1..b18597e 100644
+--- i/js/jsstr.cpp
++++ w/js/jsstr.cpp
+@@ -3040,7 +3040,7 @@ js_InitStringClass(JSContext *cx, JSObject *obj)
+                                  JSVAL_VOID, NULL, NULL,
+                                  JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_SHARED, 0, 0,
+                                  NULL)) {
+-        return JS_FALSE;
++        return NULL;
+     }
+ 
+     return proto;
+diff --git i/js/jsxml.cpp w/js/jsxml.cpp
+index 5621ede..e00c97d 100644
+--- i/js/jsxml.cpp
++++ w/js/jsxml.cpp
+@@ -303,7 +303,7 @@ NewXMLNamespace(JSContext *cx, JSString *prefix, JSString *uri, JSBool declared)
+ 
+     obj = js_NewObject(cx, &js_NamespaceClass.base, NULL, NULL);
+     if (!obj)
+-        return JS_FALSE;
++        return NULL;
+     JS_ASSERT(JSVAL_IS_VOID(obj->fslots[JSSLOT_PREFIX]));
+     JS_ASSERT(JSVAL_IS_VOID(obj->fslots[JSSLOT_URI]));
+     JS_ASSERT(JSVAL_IS_VOID(obj->fslots[JSSLOT_DECLARED]));
diff --git a/nixpkgs/pkgs/development/tools/misc/jsonfmt/default.nix b/nixpkgs/pkgs/development/tools/misc/jsonfmt/default.nix
new file mode 100644
index 000000000000..e11828df7f59
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/jsonfmt/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, testers
+, jsonfmt
+}:
+
+buildGoModule rec {
+  pname = "jsonfmt";
+  version = "0.5.0";
+
+  src = fetchFromGitHub {
+    owner = "caarlos0";
+    repo = "jsonfmt";
+    rev = "v${version}";
+    hash = "sha256-rVv7Dv4vQmss4eiiy+KaO9tZ5U58WlRlsOz4QO0gdfM=";
+  };
+
+  vendorHash = "sha256-xtwN+TemiiyXOxZ2DNys4G6w4KA3BjLSWAmzox+boMY=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=main.version=${version}"
+  ];
+
+  passthru.tests = {
+    version = testers.testVersion {
+      package = jsonfmt;
+    };
+  };
+
+  meta = with lib; {
+    description = "Formatter for JSON files";
+    homepage = "https://github.com/caarlos0/jsonfmt";
+    changelog = "https://github.com/caarlos0/jsonfmt/releases/tag/${src.rev}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/k2tf/default.nix b/nixpkgs/pkgs/development/tools/misc/k2tf/default.nix
new file mode 100644
index 000000000000..35eb679281aa
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/k2tf/default.nix
@@ -0,0 +1,33 @@
+{ lib, buildGoModule, fetchFromGitHub, fetchpatch }:
+
+buildGoModule rec {
+  pname = "k2tf";
+  version = "0.7.0";
+
+  src = fetchFromGitHub {
+    owner = "sl1pm4t";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-zkkRzCTZCvbwBj4oIhTo5d3PvqLMJPzT3zV9jU3PEJs=";
+  };
+
+  patches = [
+    # update dependencies
+    # https://github.com/sl1pm4t/k2tf/pull/111
+    (fetchpatch {
+      url = "https://github.com/sl1pm4t/k2tf/commit/7e7b778eeb80400cb0dadb1cdea4e617b5738147.patch";
+      hash = "sha256-ZGQUuH7u3aNLml6rvOzOxVwSTlbhZLknXbHKeY4lp00=";
+    })
+  ];
+
+  vendorHash = "sha256-yGuoE1bgwVHk3ym382OC93me9HPlVoNgGo/3JROVC2E=";
+
+  ldflags = [ "-s" "-w" "-X main.version=${version}" "-X main.commit=v${version}" ];
+
+  meta = with lib; {
+    description = "Kubernetes YAML to Terraform HCL converter";
+    homepage = "https://github.com/sl1pm4t/k2tf";
+    license = licenses.mpl20;
+    maintainers = [ maintainers.flokli ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/kdbg/default.nix b/nixpkgs/pkgs/development/tools/misc/kdbg/default.nix
new file mode 100644
index 000000000000..283089abb99a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/kdbg/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchurl, cmake, extra-cmake-modules, qt5,
+  ki18n, kconfig, kiconthemes, kxmlgui, kwindowsystem,
+  qtbase, makeWrapper,
+}:
+
+stdenv.mkDerivation rec {
+  pname = "kdbg";
+  version = "3.1.0";
+  src = fetchurl {
+    url = "mirror://sourceforge/kdbg/${version}/${pname}-${version}.tar.gz";
+    sha256 = "sha256-aLX/0GXof77NqQj7I7FUCZjyDtF1P8MJ4/NHJNm4Yr0=";
+  };
+
+  nativeBuildInputs = [ cmake extra-cmake-modules makeWrapper ];
+  buildInputs = [ qt5.qtbase ki18n kconfig kiconthemes kxmlgui kwindowsystem ];
+
+  postInstall = ''
+    wrapProgram $out/bin/kdbg --prefix QT_PLUGIN_PATH : ${qtbase}/${qtbase.qtPluginPrefix}
+  '';
+
+  dontWrapQtApps = true;
+
+  meta = with lib; {
+    homepage = "https://www.kdbg.org/";
+    description = ''
+      A graphical user interface to gdb, the GNU debugger. It provides an
+      intuitive interface for setting breakpoints, inspecting variables, and
+      stepping through code.
+    '';
+    license = licenses.gpl2;
+    maintainers = [ maintainers.catern ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/kool/default.nix b/nixpkgs/pkgs/development/tools/misc/kool/default.nix
new file mode 100644
index 000000000000..f1d4b2b74654
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/kool/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, testers
+, kool
+}:
+
+buildGoModule rec {
+  pname = "kool";
+  version = "3.0.0";
+
+  src = fetchFromGitHub {
+    owner = "kool-dev";
+    repo = "kool";
+    rev = version;
+    hash = "sha256-+vdizU2/q2nrEanpRPy1scgfTYh/I7feW4jz8efelWY=";
+  };
+
+  vendorHash = "sha256-PmS96KVhe9TDmtYBx2hROLCbGMQ0OY3MN405dUmxPzk=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=kool-dev/kool/commands.version=${version}"
+  ];
+
+  passthru.tests = {
+    version = testers.testVersion {
+      package = kool;
+    };
+  };
+
+  meta = with lib; {
+    description = "From local development to the cloud: development workflow made easy";
+    homepage = "https://kool.dev";
+    changelog = "https://github.com/kool-dev/kool/releases/tag/${src.rev}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/libtool/default.nix b/nixpkgs/pkgs/development/tools/misc/libtool/default.nix
new file mode 100644
index 000000000000..6970d2a94ec9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/libtool/default.nix
@@ -0,0 +1,40 @@
+{lib, stdenv, fetchurl, m4, perl}:
+
+stdenv.mkDerivation rec {
+  pname = "libtool";
+  version = "1.5.26";
+
+  src = fetchurl {
+    url = "mirror://gnu/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "029ggq5kri1gjn6nfqmgw4w920gyfzscjjxbsxxidal5zqsawd8w";
+  };
+
+  nativeBuildInputs = [m4];
+  buildInputs = [perl];
+
+  # Don't fixup "#! /bin/sh" in Libtool, otherwise it will use the
+  # "fixed" path in generated files!
+  dontPatchShebangs = true;
+  dontFixLibtool = true;
+
+  meta = {
+    description = "Generic library support script";
+
+    longDescription = ''
+      GNU libtool is a generic library support script.  Libtool hides
+      the complexity of using shared libraries behind a consistent,
+      portable interface.
+
+      To use libtool, add the new generic library building commands to
+      your Makefile, Makefile.in, or Makefile.am.  See the
+      documentation for details.
+    '';
+
+    homepage = "https://www.gnu.org/software/libtool/";
+
+    license = lib.licenses.gpl2Plus;
+    platforms = lib.platforms.unix;
+
+    mainProgram = "libtool";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/libtool/libtool2.nix b/nixpkgs/pkgs/development/tools/misc/libtool/libtool2.nix
new file mode 100644
index 000000000000..50c064cadfd0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/libtool/libtool2.nix
@@ -0,0 +1,73 @@
+{ lib, stdenv, fetchurl, fetchpatch, m4
+, runtimeShell
+, file
+}:
+
+# Note: this package is used for bootstrapping fetchurl, and thus
+# cannot use fetchpatch! All mutable patches (generated by GitHub or
+# cgit) that are needed here should be included directly in Nixpkgs as
+# files.
+
+stdenv.mkDerivation rec {
+  pname = "libtool";
+  version = "2.4.7";
+
+  src = fetchurl {
+    url = "mirror://gnu/libtool/${pname}-${version}.tar.gz";
+    sha256 = "sha256-BOlsJATqcMWQxUbrpCAqThJyLGQAFsErmy8c49SB6ag=";
+  };
+
+  outputs = [ "out" "lib" ];
+
+  # FILECMD was added in libtool 2.4.7; previous versions hardwired `/usr/bin/file`
+  #   https://lists.gnu.org/archive/html/autotools-announce/2022-03/msg00000.html
+  FILECMD = "${file}/bin/file";
+
+  postPatch =
+  # libtool commit da2e352735722917bf0786284411262195a6a3f6 changed
+  # the shebang from `/bin/sh` (which is a special sandbox exception)
+  # to `/usr/bin/env sh`, meaning that we now need to patch shebangs
+  # in libtoolize.in:
+  ''
+    substituteInPlace libtoolize.in       --replace '#! /usr/bin/env sh' '#!${runtimeShell}'
+    # avoid help2man run after 'libtoolize.in' update
+    touch doc/libtoolize.1
+  '';
+
+  strictDeps = true;
+  # As libtool is an early bootstrap dependency try hard not to
+  # add autoconf and automake or help2man dependencies here. That way we can
+  # avoid pulling in perl and get away with just an `m4` depend.
+  nativeBuildInputs = [ m4 file ];
+  propagatedBuildInputs = [ m4 file ];
+
+  # Don't fixup "#! /bin/sh" in Libtool, otherwise it will use the
+  # "fixed" path in generated files!
+  dontPatchShebangs = true;
+  dontFixLibtool = true;
+
+  # XXX: The GNU ld wrapper does all sorts of nasty things wrt. RPATH, which
+  # leads to the failure of a number of tests.
+  doCheck = false;
+  doInstallCheck = false;
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "GNU Libtool, a generic library support script";
+    longDescription = ''
+      GNU libtool is a generic library support script.  Libtool hides
+      the complexity of using shared libraries behind a consistent,
+      portable interface.
+
+      To use libtool, add the new generic library building commands to
+      your Makefile, Makefile.in, or Makefile.am.  See the
+      documentation for details.
+    '';
+    homepage = "https://www.gnu.org/software/libtool/";
+    license = licenses.gpl2Plus;
+    maintainers = [ ];
+    platforms = platforms.unix;
+    mainProgram = "libtool";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/libtree/default.nix b/nixpkgs/pkgs/development/tools/misc/libtree/default.nix
new file mode 100644
index 000000000000..24083a60d28e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/libtree/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, testers
+, libtree
+, runCommand
+, coreutils
+, dieHook
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "libtree";
+  version = "3.1.1";
+
+  src = fetchFromGitHub {
+    owner = "haampie";
+    repo = "libtree";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-q3JtQ9AxoP0ma9K96cC3gf6QmQ1FbS7T7I59qhkwbMk=";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  # Fails at https://github.com/haampie/libtree/blob/v3.1.1/tests/07_origin_is_relative_to_symlink_location_not_realpath/Makefile#L28
+  doCheck = false;
+
+  passthru.tests = {
+    version = testers.testVersion {
+      package = libtree;
+      command = "libtree --version";
+      version = finalAttrs.version;
+    };
+    checkCoreUtils = runCommand "${finalAttrs.pname}-ls-test" {
+      nativeBuildInputs = [ finalAttrs.finalPackage dieHook ];
+    } ''
+      libtree ${coreutils}/bin/ls > $out || die "libtree failed to show dependencies."
+      [ -s $out ]
+    '';
+  };
+
+  meta = with lib; {
+    description = "Tree ldd with an option to bundle dependencies into a single folder";
+    homepage = "https://github.com/haampie/libtree";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ prusnak rardiol ];
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/misc/libwhich/default.nix b/nixpkgs/pkgs/development/tools/misc/libwhich/default.nix
new file mode 100644
index 000000000000..aee79b826444
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/libwhich/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "libwhich";
+  version = "1.2.0";
+
+  src = fetchFromGitHub {
+    owner = "vtjnash";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-JNIWdI12sL3TZqVA3GeH0KbgqFDbMsEdecea3392Goc=";
+  };
+
+  installPhase = ''
+    install -Dm755 -t $out/bin libwhich
+  '';
+
+  meta = with lib; {
+    description = "Like `which`, for dynamic libraries";
+    homepage = "https://github.com/vtjnash/libwhich";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dtzWill ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/licenseclassifier/default.nix b/nixpkgs/pkgs/development/tools/misc/licenseclassifier/default.nix
new file mode 100644
index 000000000000..05a858130b39
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/licenseclassifier/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "licenseclassifier";
+  version = "2.0.0";
+
+  src = fetchFromGitHub {
+    owner = "google";
+    repo = "licenseclassifier";
+    rev = "v${version}";
+    hash = "sha256-j+8hX8W0VD0h09Qmu7POnHT8f8+SeG5Si1fI0CDIwuo=";
+  };
+
+  # The new and improved "License Classifier v2" is hidden in a subdirectory.
+  sourceRoot = "${src.name}/v2";
+
+  vendorHash = "sha256-u0VR8DCmbZS0MF26Y4HfqtLaGyX2n2INdAidVNbnXPE=";
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "A License Classifier";
+    longDescription = ''
+      The license classifier can analyze text to determine what type of license
+      it contains. It searches for license texts in a file and compares them to
+      an archive of known licenses. These files could be, e.g., LICENSE files
+      with a single or multiple licenses in it, or source code files with the
+      license text in a comment.
+    '';
+    homepage = "https://github.com/google/licenseclassifier";
+    license = licenses.asl20;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ tnias ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/linuxkit/darwin-os-version.patch b/nixpkgs/pkgs/development/tools/misc/linuxkit/darwin-os-version.patch
new file mode 100644
index 000000000000..aaa603e4ead1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/linuxkit/darwin-os-version.patch
@@ -0,0 +1,53 @@
+diff --git a/src/cmd/linuxkit/vendor/github.com/Code-Hex/vz/v3/osversion.go b/src/cmd/linuxkit/vendor/github.com/Code-Hex/vz/v3/osversion.go
+index d72a7856d..b186d3aff 100644
+--- a/src/cmd/linuxkit/vendor/github.com/Code-Hex/vz/v3/osversion.go
++++ b/src/cmd/linuxkit/vendor/github.com/Code-Hex/vz/v3/osversion.go
+@@ -9,6 +9,7 @@ import "C"
+ import (
+ 	"errors"
+ 	"fmt"
++	"os/exec"
+ 	"strconv"
+ 	"strings"
+ 	"sync"
+@@ -48,6 +49,40 @@ func fetchMajorMinorVersion() (float64, error) {
+ 	if err != nil {
+ 		return 0, err
+ 	}
++
++	// For backward compatibility reasons, if code compiled against an SDK
++	// earlier than macOS 11 is run on macOS 11 or later, and then tries to read
++	// value of kern.osproductversion, the OS will return the value "10.16"
++	// instead of the real OS version string.  By contrast, the command `sw_vers
++	// -productVersion` will return the real OS version string unless the
++	// environment variable SYSTEM_VERSION_COMPAT is set to 1 or 2, in which
++	// case it will respectively return "10.16" and "15.7" (the latter is for
++	// some iOS compatibility reason).
++	//
++	// The only (currently) sure way to get the real OS version string
++	// regardless of SYSTEM_VERSION_COMPAT or the SDK compiled against is
++	// apparently to parse
++	// /System/Library/CoreServices/.SystemVersionPlatform.plist if it exists,
++	// and /System/Library/CoreServices/SystemVersion.plist otherwise.  Doing
++	// so, however, requires parsing XML plist files.
++	//
++	// Given what this library does, it doesn't seem likely that there would be
++	// a good reason to run its code with SYSTEM_VERSION_COMPAT set, so using
++	// `sw_vers` should be adequate until a proper parsing of plist files is
++	// added.
++	//
++	// See https://github.com/ziglang/zig/issues/7569,
++	// https://github.com/ziglang/zig/pull/7714 and
++	// https://eclecticlight.co/2020/08/13/macos-version-numbering-isnt-so-simple/
++	// for more information.
++	if osver == "10.16" {
++		out, err := exec.Command("sw_vers", "-productVersion").Output()
++		if err != nil {
++			return 0, err
++		}
++		osver = strings.TrimRight(string(out), "\r\n")
++	}
++
+ 	prefix := "v"
+ 	majorMinor := strings.TrimPrefix(semver.MajorMinor(prefix+osver), prefix)
+ 	version, err := strconv.ParseFloat(majorMinor, 64)
diff --git a/nixpkgs/pkgs/development/tools/misc/linuxkit/default.nix b/nixpkgs/pkgs/development/tools/misc/linuxkit/default.nix
new file mode 100644
index 000000000000..73ea58a17e4d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/linuxkit/default.nix
@@ -0,0 +1,60 @@
+{ lib, stdenv, buildGoModule, fetchFromGitHub, git, Cocoa, Virtualization, sigtool, testers, linuxkit }:
+
+buildGoModule rec {
+  pname = "linuxkit";
+  version = "1.0.1";
+
+  src = fetchFromGitHub {
+    owner = "linuxkit";
+    repo = "linuxkit";
+    rev = "v${version}";
+    sha256 = "sha256-8x9oJaYb/mN2TUaVrGOYi5/6TETD78jif0SwCSc0kyo=";
+  };
+
+  vendorHash = null;
+
+  modRoot = "./src/cmd/linuxkit";
+
+  patches = [
+    ./darwin-os-version.patch
+    ./support-apple-11-sdk.patch
+  ];
+
+  # - On macOS, an executable must be signed with the right entitlement(s) to be
+  #   able to use the Virtualization framework at runtime.
+  # - sigtool is allows us to validly sign such executables with a dummy
+  #   authority.
+  nativeBuildInputs = lib.optionals stdenv.isDarwin [ sigtool ];
+  buildInputs = lib.optionals stdenv.isDarwin [ Cocoa Virtualization ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/linuxkit/linuxkit/src/cmd/linuxkit/version.Version=${version}"
+  ];
+
+  nativeCheckInputs = [ git ];
+
+  # - Because this package definition doesn't build using the source's Makefile,
+  #   we must manually call the sign target.
+  # - The binary stripping that nixpkgs does by default in the
+  #   fixup phase removes such signing and entitlements, so we have to sign
+  #   after stripping.
+  # - Finally, at the start of the fixup phase, the working directory is
+  #   $sourceRoot/src/cmd/linuxkit, so it's simpler to use the sign target from
+  #   the Makefile in that directory rather than $sourceRoot/Makefile.
+  postFixup = lib.optionalString stdenv.isDarwin ''
+    make sign LOCAL_TARGET=$out/bin/linuxkit
+  '';
+  passthru.tests.version = testers.testVersion {
+    package = linuxkit;
+    command = "linuxkit version";
+  };
+
+  meta = with lib; {
+    description = "A toolkit for building secure, portable and lean operating systems for containers";
+    license = licenses.asl20;
+    homepage = "https://github.com/linuxkit/linuxkit";
+    maintainers = with maintainers; [ nicknovitski ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/linuxkit/support-apple-11-sdk.patch b/nixpkgs/pkgs/development/tools/misc/linuxkit/support-apple-11-sdk.patch
new file mode 100644
index 000000000000..70393977715b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/linuxkit/support-apple-11-sdk.patch
@@ -0,0 +1,811 @@
+diff --git a/src/cmd/linuxkit/vendor/github.com/Code-Hex/vz/v3/virtualization_12.m b/src/cmd/linuxkit/vendor/github.com/Code-Hex/vz/v3/virtualization_12.m
+index 567172ba2..e2c1ac047 100644
+--- a/src/cmd/linuxkit/vendor/github.com/Code-Hex/vz/v3/virtualization_12.m
++++ b/src/cmd/linuxkit/vendor/github.com/Code-Hex/vz/v3/virtualization_12.m
+@@ -8,6 +8,7 @@
+ 
+ bool vmCanStop(void *machine, void *queue)
+ {
++#ifdef INCLUDE_TARGET_OSX_12
+     if (@available(macOS 12, *)) {
+         __block BOOL result;
+         dispatch_sync((dispatch_queue_t)queue, ^{
+@@ -15,12 +16,13 @@ bool vmCanStop(void *machine, void *queue)
+         });
+         return (bool)result;
+     }
+-
++#endif
+     RAISE_UNSUPPORTED_MACOS_EXCEPTION();
+ }
+ 
+ void stopWithCompletionHandler(void *machine, void *queue, void *completionHandler)
+ {
++#ifdef INCLUDE_TARGET_OSX_12
+     if (@available(macOS 12, *)) {
+         vm_completion_handler_t handler = makeVMCompletionHandler(completionHandler);
+         dispatch_sync((dispatch_queue_t)queue, ^{
+@@ -29,7 +31,7 @@ void stopWithCompletionHandler(void *machine, void *queue, void *completionHandl
+         Block_release(handler);
+         return;
+     }
+-
++#endif
+     RAISE_UNSUPPORTED_MACOS_EXCEPTION();
+ }
+ 
+@@ -38,10 +40,11 @@ void stopWithCompletionHandler(void *machine, void *queue, void *completionHandl
+ */
+ void *newVZGenericPlatformConfiguration()
+ {
++#ifdef INCLUDE_TARGET_OSX_12
+     if (@available(macOS 12, *)) {
+         return [[VZGenericPlatformConfiguration alloc] init];
+     }
+-
++#endif
+     RAISE_UNSUPPORTED_MACOS_EXCEPTION();
+ }
+ 
+@@ -51,11 +54,12 @@ void *newVZGenericPlatformConfiguration()
+  */
+ void setDirectorySharingDevicesVZVirtualMachineConfiguration(void *config, void *directorySharingDevices)
+ {
++#ifdef INCLUDE_TARGET_OSX_12
+     if (@available(macOS 12, *)) {
+         [(VZVirtualMachineConfiguration *)config setDirectorySharingDevices:[(NSMutableArray *)directorySharingDevices copy]];
+         return;
+     }
+-
++#endif
+     RAISE_UNSUPPORTED_MACOS_EXCEPTION();
+ }
+ 
+@@ -66,11 +70,12 @@ void setDirectorySharingDevicesVZVirtualMachineConfiguration(void *config, void
+  */
+ void setPlatformVZVirtualMachineConfiguration(void *config, void *platform)
+ {
++#ifdef INCLUDE_TARGET_OSX_12
+     if (@available(macOS 12, *)) {
+         [(VZVirtualMachineConfiguration *)config setPlatform:(VZPlatformConfiguration *)platform];
+         return;
+     }
+-
++#endif
+     RAISE_UNSUPPORTED_MACOS_EXCEPTION();
+ }
+ 
+@@ -80,11 +85,12 @@ void setPlatformVZVirtualMachineConfiguration(void *config, void *platform)
+  */
+ void setGraphicsDevicesVZVirtualMachineConfiguration(void *config, void *graphicsDevices)
+ {
++#ifdef INCLUDE_TARGET_OSX_12
+     if (@available(macOS 12, *)) {
+         [(VZVirtualMachineConfiguration *)config setGraphicsDevices:[(NSMutableArray *)graphicsDevices copy]];
+         return;
+     }
+-
++#endif
+     RAISE_UNSUPPORTED_MACOS_EXCEPTION();
+ }
+ 
+@@ -94,11 +100,12 @@ void setGraphicsDevicesVZVirtualMachineConfiguration(void *config, void *graphic
+  */
+ void setPointingDevicesVZVirtualMachineConfiguration(void *config, void *pointingDevices)
+ {
++#ifdef INCLUDE_TARGET_OSX_12
+     if (@available(macOS 12, *)) {
+         [(VZVirtualMachineConfiguration *)config setPointingDevices:[(NSMutableArray *)pointingDevices copy]];
+         return;
+     }
+-
++#endif
+     RAISE_UNSUPPORTED_MACOS_EXCEPTION();
+ }
+ 
+@@ -108,11 +115,12 @@ void setPointingDevicesVZVirtualMachineConfiguration(void *config, void *pointin
+  */
+ void setKeyboardsVZVirtualMachineConfiguration(void *config, void *keyboards)
+ {
++#ifdef INCLUDE_TARGET_OSX_12
+     if (@available(macOS 12, *)) {
+         [(VZVirtualMachineConfiguration *)config setKeyboards:[(NSMutableArray *)keyboards copy]];
+         return;
+     }
+-
++#endif
+     RAISE_UNSUPPORTED_MACOS_EXCEPTION();
+ }
+ 
+@@ -122,11 +130,12 @@ void setKeyboardsVZVirtualMachineConfiguration(void *config, void *keyboards)
+  */
+ void setAudioDevicesVZVirtualMachineConfiguration(void *config, void *audioDevices)
+ {
++#ifdef INCLUDE_TARGET_OSX_12
+     if (@available(macOS 12, *)) {
+         [(VZVirtualMachineConfiguration *)config setAudioDevices:[(NSMutableArray *)audioDevices copy]];
+         return;
+     }
+-
++#endif
+     RAISE_UNSUPPORTED_MACOS_EXCEPTION();
+ }
+ 
+@@ -136,10 +145,11 @@ void setAudioDevicesVZVirtualMachineConfiguration(void *config, void *audioDevic
+  */
+ void *newVZVirtioSoundDeviceConfiguration()
+ {
++#ifdef INCLUDE_TARGET_OSX_12
+     if (@available(macOS 12, *)) {
+         return [[VZVirtioSoundDeviceConfiguration alloc] init];
+     }
+-
++#endif
+     RAISE_UNSUPPORTED_MACOS_EXCEPTION();
+ }
+ 
+@@ -148,11 +158,12 @@ void *newVZVirtioSoundDeviceConfiguration()
+ */
+ void setStreamsVZVirtioSoundDeviceConfiguration(void *audioDeviceConfiguration, void *streams)
+ {
++#ifdef INCLUDE_TARGET_OSX_12
+     if (@available(macOS 12, *)) {
+         [(VZVirtioSoundDeviceConfiguration *)audioDeviceConfiguration setStreams:[(NSMutableArray *)streams copy]];
+         return;
+     }
+-
++#endif
+     RAISE_UNSUPPORTED_MACOS_EXCEPTION();
+ }
+ 
+@@ -162,10 +173,11 @@ void setStreamsVZVirtioSoundDeviceConfiguration(void *audioDeviceConfiguration,
+  */
+ void *newVZVirtioSoundDeviceInputStreamConfiguration()
+ {
++#ifdef INCLUDE_TARGET_OSX_12
+     if (@available(macOS 12, *)) {
+         return [[VZVirtioSoundDeviceInputStreamConfiguration alloc] init];
+     }
+-
++#endif
+     RAISE_UNSUPPORTED_MACOS_EXCEPTION();
+ }
+ 
+@@ -174,12 +186,13 @@ void *newVZVirtioSoundDeviceInputStreamConfiguration()
+  */
+ void *newVZVirtioSoundDeviceHostInputStreamConfiguration()
+ {
++#ifdef INCLUDE_TARGET_OSX_12
+     if (@available(macOS 12, *)) {
+         VZVirtioSoundDeviceInputStreamConfiguration *inputStream = (VZVirtioSoundDeviceInputStreamConfiguration *)newVZVirtioSoundDeviceInputStreamConfiguration();
+         [inputStream setSource:[[VZHostAudioInputStreamSource alloc] init]];
+         return inputStream;
+     }
+-
++#endif
+     RAISE_UNSUPPORTED_MACOS_EXCEPTION();
+ }
+ 
+@@ -189,10 +202,11 @@ void *newVZVirtioSoundDeviceHostInputStreamConfiguration()
+  */
+ void *newVZVirtioSoundDeviceOutputStreamConfiguration()
+ {
++#ifdef INCLUDE_TARGET_OSX_12
+     if (@available(macOS 12, *)) {
+         return [[VZVirtioSoundDeviceOutputStreamConfiguration alloc] init];
+     }
+-
++#endif
+     RAISE_UNSUPPORTED_MACOS_EXCEPTION();
+ }
+ 
+@@ -201,12 +215,13 @@ void *newVZVirtioSoundDeviceOutputStreamConfiguration()
+  */
+ void *newVZVirtioSoundDeviceHostOutputStreamConfiguration()
+ {
++#ifdef INCLUDE_TARGET_OSX_12
+     if (@available(macOS 12, *)) {
+         VZVirtioSoundDeviceOutputStreamConfiguration *outputStream = (VZVirtioSoundDeviceOutputStreamConfiguration *)newVZVirtioSoundDeviceOutputStreamConfiguration();
+         [outputStream setSink:[[VZHostAudioOutputStreamSink alloc] init]];
+         return outputStream;
+     }
+-
++#endif
+     RAISE_UNSUPPORTED_MACOS_EXCEPTION();
+ }
+ 
+@@ -220,12 +235,13 @@ void *newVZVirtioSoundDeviceHostOutputStreamConfiguration()
+  */
+ void *newVZSharedDirectory(const char *dirPath, bool readOnly)
+ {
++#ifdef INCLUDE_TARGET_OSX_12
+     if (@available(macOS 12, *)) {
+         NSString *dirPathNSString = [NSString stringWithUTF8String:dirPath];
+         NSURL *dirURL = [NSURL fileURLWithPath:dirPathNSString];
+         return [[VZSharedDirectory alloc] initWithURL:dirURL readOnly:(BOOL)readOnly];
+     }
+-
++#endif
+     RAISE_UNSUPPORTED_MACOS_EXCEPTION();
+ }
+ 
+@@ -237,10 +253,11 @@ void *newVZSharedDirectory(const char *dirPath, bool readOnly)
+  */
+ void *newVZSingleDirectoryShare(void *sharedDirectory)
+ {
++#ifdef INCLUDE_TARGET_OSX_12
+     if (@available(macOS 12, *)) {
+         return [[VZSingleDirectoryShare alloc] initWithDirectory:(VZSharedDirectory *)sharedDirectory];
+     }
+-
++#endif
+     RAISE_UNSUPPORTED_MACOS_EXCEPTION();
+ }
+ 
+@@ -252,10 +269,11 @@ void *newVZSingleDirectoryShare(void *sharedDirectory)
+  */
+ void *newVZMultipleDirectoryShare(void *sharedDirectories)
+ {
++#ifdef INCLUDE_TARGET_OSX_12
+     if (@available(macOS 12, *)) {
+         return [[VZMultipleDirectoryShare alloc] initWithDirectories:(NSDictionary<NSString *, VZSharedDirectory *> *)sharedDirectories];
+     }
+-
++#endif
+     RAISE_UNSUPPORTED_MACOS_EXCEPTION();
+ }
+ 
+@@ -267,6 +285,7 @@ void *newVZMultipleDirectoryShare(void *sharedDirectories)
+  */
+ void *newVZVirtioFileSystemDeviceConfiguration(const char *tag, void **error)
+ {
++#ifdef INCLUDE_TARGET_OSX_12
+     if (@available(macOS 12, *)) {
+         NSString *tagNSString = [NSString stringWithUTF8String:tag];
+         BOOL valid = [VZVirtioFileSystemDeviceConfiguration validateTag:tagNSString error:(NSError *_Nullable *_Nullable)error];
+@@ -275,7 +294,7 @@ void *newVZVirtioFileSystemDeviceConfiguration(const char *tag, void **error)
+         }
+         return [[VZVirtioFileSystemDeviceConfiguration alloc] initWithTag:tagNSString];
+     }
+-
++#endif
+     RAISE_UNSUPPORTED_MACOS_EXCEPTION();
+ }
+ 
+@@ -284,11 +303,12 @@ void *newVZVirtioFileSystemDeviceConfiguration(const char *tag, void **error)
+  */
+ void setVZVirtioFileSystemDeviceConfigurationShare(void *config, void *share)
+ {
++#ifdef INCLUDE_TARGET_OSX_12
+     if (@available(macOS 12, *)) {
+         [(VZVirtioFileSystemDeviceConfiguration *)config setShare:(VZDirectoryShare *)share];
+         return;
+     }
+-
++#endif
+     RAISE_UNSUPPORTED_MACOS_EXCEPTION();
+ }
+ 
+@@ -298,10 +318,11 @@ void setVZVirtioFileSystemDeviceConfigurationShare(void *config, void *share)
+  */
+ void *newVZUSBScreenCoordinatePointingDeviceConfiguration()
+ {
++#ifdef INCLUDE_TARGET_OSX_12
+     if (@available(macOS 12, *)) {
+         return [[VZUSBScreenCoordinatePointingDeviceConfiguration alloc] init];
+     }
+-
++#endif
+     RAISE_UNSUPPORTED_MACOS_EXCEPTION();
+ }
+ 
+@@ -311,10 +332,11 @@ void *newVZUSBScreenCoordinatePointingDeviceConfiguration()
+  */
+ void *newVZUSBKeyboardConfiguration()
+ {
++#ifdef INCLUDE_TARGET_OSX_12
+     if (@available(macOS 12, *)) {
+         return [[VZUSBKeyboardConfiguration alloc] init];
+     }
+-
++#endif
+     RAISE_UNSUPPORTED_MACOS_EXCEPTION();
+ }
+ 
+@@ -328,6 +350,7 @@ void sharedApplication()
+ 
+ void startVirtualMachineWindow(void *machine, double width, double height)
+ {
++#ifdef INCLUDE_TARGET_OSX_12
+     if (@available(macOS 12, *)) {
+         @autoreleasepool {
+             AppDelegate *appDelegate = [[[AppDelegate alloc]
+@@ -340,5 +363,6 @@ void startVirtualMachineWindow(void *machine, double width, double height)
+             return;
+         }
+     }
++#endif
+     RAISE_UNSUPPORTED_MACOS_EXCEPTION();
+ }
+diff --git a/src/cmd/linuxkit/vendor/github.com/Code-Hex/vz/v3/virtualization_12_arm64.m b/src/cmd/linuxkit/vendor/github.com/Code-Hex/vz/v3/virtualization_12_arm64.m
+index 4fbaf6cb7..452adb747 100644
+--- a/src/cmd/linuxkit/vendor/github.com/Code-Hex/vz/v3/virtualization_12_arm64.m
++++ b/src/cmd/linuxkit/vendor/github.com/Code-Hex/vz/v3/virtualization_12_arm64.m
+@@ -30,6 +30,7 @@
+  */
+ void *newVZMacAuxiliaryStorageWithCreating(const char *storagePath, void *hardwareModel, void **error)
+ {
++#ifdef INCLUDE_TARGET_OSX_12
+     if (@available(macOS 12, *)) {
+         NSString *storagePathNSString = [NSString stringWithUTF8String:storagePath];
+         NSURL *storageURL = [NSURL fileURLWithPath:storagePathNSString];
+@@ -38,7 +39,7 @@ void *newVZMacAuxiliaryStorageWithCreating(const char *storagePath, void *hardwa
+                                                                options:VZMacAuxiliaryStorageInitializationOptionAllowOverwrite
+                                                                  error:(NSError *_Nullable *_Nullable)error];
+     }
+-
++#endif
+     RAISE_UNSUPPORTED_MACOS_EXCEPTION();
+ }
+ 
+@@ -49,6 +50,7 @@ void *newVZMacAuxiliaryStorageWithCreating(const char *storagePath, void *hardwa
+  */
+ void *newVZMacAuxiliaryStorage(const char *storagePath)
+ {
++#ifdef INCLUDE_TARGET_OSX_12
+     if (@available(macOS 12, *)) {
+         NSString *storagePathNSString = [NSString stringWithUTF8String:storagePath];
+         NSURL *storageURL = [NSURL fileURLWithPath:storagePathNSString];
+@@ -56,7 +58,7 @@ void *newVZMacAuxiliaryStorage(const char *storagePath)
+         // https://developer.apple.com/documentation/virtualization/vzmacauxiliarystorage?language=objc
+         return [[VZMacAuxiliaryStorage alloc] initWithContentsOfURL:storageURL];
+     }
+-
++#endif
+     RAISE_UNSUPPORTED_MACOS_EXCEPTION();
+ }
+ 
+@@ -80,10 +82,11 @@ void *newVZMacAuxiliaryStorage(const char *storagePath)
+ */
+ void *newVZMacPlatformConfiguration()
+ {
++#ifdef INCLUDE_TARGET_OSX_12
+     if (@available(macOS 12, *)) {
+         return [[VZMacPlatformConfiguration alloc] init];
+     }
+-
++#endif
+     RAISE_UNSUPPORTED_MACOS_EXCEPTION();
+ }
+ 
+@@ -92,17 +95,19 @@ void *newVZMacPlatformConfiguration()
+  */
+ void setHardwareModelVZMacPlatformConfiguration(void *config, void *hardwareModel)
+ {
++#ifdef INCLUDE_TARGET_OSX_12
+     if (@available(macOS 12, *)) {
+         [(VZMacPlatformConfiguration *)config setHardwareModel:(VZMacHardwareModel *)hardwareModel];
+         return;
+     }
+-
++#endif
+     RAISE_UNSUPPORTED_MACOS_EXCEPTION();
+ }
+ 
+ // Store the hardware model to disk so that we can retrieve them for subsequent boots.
+ void storeHardwareModelDataVZMacPlatformConfiguration(void *config, const char *filePath)
+ {
++#ifdef INCLUDE_TARGET_OSX_12
+     if (@available(macOS 12, *)) {
+         VZMacPlatformConfiguration *macPlatformConfiguration = (VZMacPlatformConfiguration *)config;
+         NSString *filePathNSString = [NSString stringWithUTF8String:filePath];
+@@ -110,7 +115,7 @@ void storeHardwareModelDataVZMacPlatformConfiguration(void *config, const char *
+         [macPlatformConfiguration.hardwareModel.dataRepresentation writeToURL:fileURL atomically:YES];
+         return;
+     }
+-
++#endif
+     RAISE_UNSUPPORTED_MACOS_EXCEPTION();
+ }
+ 
+@@ -121,17 +126,19 @@ void storeHardwareModelDataVZMacPlatformConfiguration(void *config, const char *
+  */
+ void setMachineIdentifierVZMacPlatformConfiguration(void *config, void *machineIdentifier)
+ {
++#ifdef INCLUDE_TARGET_OSX_12
+     if (@available(macOS 12, *)) {
+         [(VZMacPlatformConfiguration *)config setMachineIdentifier:(VZMacMachineIdentifier *)machineIdentifier];
+         return;
+     }
+-
++#endif
+     RAISE_UNSUPPORTED_MACOS_EXCEPTION();
+ }
+ 
+ // Store the machine identifier to disk so that we can retrieve them for subsequent boots.
+ void storeMachineIdentifierDataVZMacPlatformConfiguration(void *config, const char *filePath)
+ {
++#ifdef INCLUDE_TARGET_OSX_12
+     if (@available(macOS 12, *)) {
+         VZMacPlatformConfiguration *macPlatformConfiguration = (VZMacPlatformConfiguration *)config;
+         NSString *filePathNSString = [NSString stringWithUTF8String:filePath];
+@@ -139,7 +146,7 @@ void storeMachineIdentifierDataVZMacPlatformConfiguration(void *config, const ch
+         [macPlatformConfiguration.machineIdentifier.dataRepresentation writeToURL:fileURL atomically:YES];
+         return;
+     }
+-
++#endif
+     RAISE_UNSUPPORTED_MACOS_EXCEPTION();
+ }
+ 
+@@ -151,11 +158,12 @@ void storeMachineIdentifierDataVZMacPlatformConfiguration(void *config, const ch
+  */
+ void setAuxiliaryStorageVZMacPlatformConfiguration(void *config, void *auxiliaryStorage)
+ {
++#ifdef INCLUDE_TARGET_OSX_12
+     if (@available(macOS 12, *)) {
+         [(VZMacPlatformConfiguration *)config setAuxiliaryStorage:(VZMacAuxiliaryStorage *)auxiliaryStorage];
+         return;
+     }
+-
++#endif
+     RAISE_UNSUPPORTED_MACOS_EXCEPTION();
+ }
+ 
+@@ -169,10 +177,11 @@ void setAuxiliaryStorageVZMacPlatformConfiguration(void *config, void *auxiliary
+ */
+ void *newVZMacOSBootLoader()
+ {
++#ifdef INCLUDE_TARGET_OSX_12
+     if (@available(macOS 12, *)) {
+         return [[VZMacOSBootLoader alloc] init];
+     }
+-
++#endif
+     RAISE_UNSUPPORTED_MACOS_EXCEPTION();
+ }
+ 
+@@ -182,10 +191,11 @@ void *newVZMacOSBootLoader()
+ */
+ void *newVZMacGraphicsDeviceConfiguration()
+ {
++#ifdef INCLUDE_TARGET_OSX_12
+     if (@available(macOS 12, *)) {
+         return [[VZMacGraphicsDeviceConfiguration alloc] init];
+     }
+-
++#endif
+     RAISE_UNSUPPORTED_MACOS_EXCEPTION();
+ }
+ 
+@@ -194,11 +204,12 @@ void *newVZMacGraphicsDeviceConfiguration()
+ */
+ void setDisplaysVZMacGraphicsDeviceConfiguration(void *graphicsConfiguration, void *displays)
+ {
++#ifdef INCLUDE_TARGET_OSX_12
+     if (@available(macOS 12, *)) {
+         [(VZMacGraphicsDeviceConfiguration *)graphicsConfiguration setDisplays:[(NSMutableArray *)displays copy]];
+         return;
+     }
+-
++#endif
+     RAISE_UNSUPPORTED_MACOS_EXCEPTION();
+ }
+ 
+@@ -210,13 +221,14 @@ void setDisplaysVZMacGraphicsDeviceConfiguration(void *graphicsConfiguration, vo
+ */
+ void *newVZMacGraphicsDisplayConfiguration(NSInteger widthInPixels, NSInteger heightInPixels, NSInteger pixelsPerInch)
+ {
++#ifdef INCLUDE_TARGET_OSX_12
+     if (@available(macOS 12, *)) {
+         return [[VZMacGraphicsDisplayConfiguration alloc]
+             initWithWidthInPixels:widthInPixels
+                    heightInPixels:heightInPixels
+                     pixelsPerInch:pixelsPerInch];
+     }
+-
++#endif
+     RAISE_UNSUPPORTED_MACOS_EXCEPTION();
+ }
+ 
+@@ -226,6 +238,7 @@ void *newVZMacGraphicsDisplayConfiguration(NSInteger widthInPixels, NSInteger he
+  */
+ void *newVZMacHardwareModelWithPath(const char *hardwareModelPath)
+ {
++#ifdef INCLUDE_TARGET_OSX_12
+     if (@available(macOS 12, *)) {
+         VZMacHardwareModel *hardwareModel;
+         NSString *hardwareModelPathNSString = [NSString stringWithUTF8String:hardwareModelPath];
+@@ -236,12 +249,13 @@ void *newVZMacHardwareModelWithPath(const char *hardwareModelPath)
+         }
+         return hardwareModel;
+     }
+-
++#endif
+     RAISE_UNSUPPORTED_MACOS_EXCEPTION();
+ }
+ 
+ void *newVZMacHardwareModelWithBytes(void *hardwareModelBytes, int len)
+ {
++#ifdef INCLUDE_TARGET_OSX_12
+     if (@available(macOS 12, *)) {
+         VZMacHardwareModel *hardwareModel;
+         @autoreleasepool {
+@@ -250,7 +264,7 @@ void *newVZMacHardwareModelWithBytes(void *hardwareModelBytes, int len)
+         }
+         return hardwareModel;
+     }
+-
++#endif
+     RAISE_UNSUPPORTED_MACOS_EXCEPTION();
+ }
+ 
+@@ -259,10 +273,11 @@ void *newVZMacHardwareModelWithBytes(void *hardwareModelBytes, int len)
+  */
+ void *newVZMacMachineIdentifier()
+ {
++#ifdef INCLUDE_TARGET_OSX_12
+     if (@available(macOS 12, *)) {
+         return [[VZMacMachineIdentifier alloc] init];
+     }
+-
++#endif
+     RAISE_UNSUPPORTED_MACOS_EXCEPTION();
+ }
+ 
+@@ -274,6 +289,7 @@ void *newVZMacMachineIdentifier()
+  */
+ void *newVZMacMachineIdentifierWithPath(const char *machineIdentifierPath)
+ {
++#ifdef INCLUDE_TARGET_OSX_12
+     if (@available(macOS 12, *)) {
+         VZMacMachineIdentifier *machineIdentifier;
+         NSString *machineIdentifierPathNSString = [NSString stringWithUTF8String:machineIdentifierPath];
+@@ -284,12 +300,13 @@ void *newVZMacMachineIdentifierWithPath(const char *machineIdentifierPath)
+         }
+         return machineIdentifier;
+     }
+-
++#endif
+     RAISE_UNSUPPORTED_MACOS_EXCEPTION();
+ }
+ 
+ void *newVZMacMachineIdentifierWithBytes(void *machineIdentifierBytes, int len)
+ {
++#ifdef INCLUDE_TARGET_OSX_12
+     if (@available(macOS 12, *)) {
+         VZMacMachineIdentifier *machineIdentifier;
+         @autoreleasepool {
+@@ -298,12 +315,13 @@ void *newVZMacMachineIdentifierWithBytes(void *machineIdentifierBytes, int len)
+         }
+         return machineIdentifier;
+     }
+-
++#endif
+     RAISE_UNSUPPORTED_MACOS_EXCEPTION();
+ }
+ 
+ nbyteslice getVZMacMachineIdentifierDataRepresentation(void *machineIdentifierPtr)
+ {
++#ifdef INCLUDE_TARGET_OSX_12
+     if (@available(macOS 12, *)) {
+         VZMacMachineIdentifier *machineIdentifier = (VZMacMachineIdentifier *)machineIdentifierPtr;
+         NSData *data = [machineIdentifier dataRepresentation];
+@@ -313,12 +331,13 @@ nbyteslice getVZMacMachineIdentifierDataRepresentation(void *machineIdentifierPt
+         };
+         return ret;
+     }
+-
++#endif
+     RAISE_UNSUPPORTED_MACOS_EXCEPTION();
+ }
+ 
+ VZMacOSRestoreImageStruct convertVZMacOSRestoreImage2Struct(void *restoreImagePtr)
+ {
++#ifdef INCLUDE_TARGET_OSX_12
+     if (@available(macOS 12, *)) {
+         VZMacOSRestoreImage *restoreImage = (VZMacOSRestoreImage *)restoreImagePtr;
+         VZMacOSRestoreImageStruct ret;
+@@ -329,12 +348,13 @@ VZMacOSRestoreImageStruct convertVZMacOSRestoreImage2Struct(void *restoreImagePt
+         ret.mostFeaturefulSupportedConfiguration = (void *)CFBridgingRetain([restoreImage mostFeaturefulSupportedConfiguration]);
+         return ret;
+     }
+-
++#endif
+     RAISE_UNSUPPORTED_MACOS_EXCEPTION();
+ }
+ 
+ void fetchLatestSupportedMacOSRestoreImageWithCompletionHandler(void *cgoHandler)
+ {
++#ifdef INCLUDE_TARGET_OSX_12
+     if (@available(macOS 12, *)) {
+         [VZMacOSRestoreImage fetchLatestSupportedWithCompletionHandler:^(VZMacOSRestoreImage *restoreImage, NSError *error) {
+             VZMacOSRestoreImageStruct restoreImageStruct = convertVZMacOSRestoreImage2Struct(restoreImage);
+@@ -342,12 +362,13 @@ void fetchLatestSupportedMacOSRestoreImageWithCompletionHandler(void *cgoHandler
+         }];
+         return;
+     }
+-
++#endif
+     RAISE_UNSUPPORTED_MACOS_EXCEPTION();
+ }
+ 
+ void loadMacOSRestoreImageFile(const char *ipswPath, void *cgoHandler)
+ {
++#ifdef INCLUDE_TARGET_OSX_12
+     if (@available(macOS 12, *)) {
+         NSString *ipswPathNSString = [NSString stringWithUTF8String:ipswPath];
+         NSURL *ipswURL = [NSURL fileURLWithPath:ipswPathNSString];
+@@ -358,12 +379,13 @@ void loadMacOSRestoreImageFile(const char *ipswPath, void *cgoHandler)
+                        }];
+         return;
+     }
+-
++#endif
+     RAISE_UNSUPPORTED_MACOS_EXCEPTION();
+ }
+ 
+ VZMacOSConfigurationRequirementsStruct convertVZMacOSConfigurationRequirements2Struct(void *requirementsPtr)
+ {
++#ifdef INCLUDE_TARGET_OSX_12
+     if (@available(macOS 12, *)) {
+         VZMacOSConfigurationRequirements *requirements = (VZMacOSConfigurationRequirements *)requirementsPtr;
+         VZMacOSConfigurationRequirementsStruct ret;
+@@ -373,12 +395,13 @@ VZMacOSConfigurationRequirementsStruct convertVZMacOSConfigurationRequirements2S
+         ret.hardwareModel = (void *)CFBridgingRetain([requirements hardwareModel]);
+         return ret;
+     }
+-
++#endif
+     RAISE_UNSUPPORTED_MACOS_EXCEPTION();
+ }
+ 
+ VZMacHardwareModelStruct convertVZMacHardwareModel2Struct(void *hardwareModelPtr)
+ {
++#ifdef INCLUDE_TARGET_OSX_12
+     if (@available(macOS 12, *)) {
+         VZMacHardwareModel *hardwareModel = (VZMacHardwareModel *)hardwareModelPtr;
+         VZMacHardwareModelStruct ret;
+@@ -391,7 +414,7 @@ VZMacHardwareModelStruct convertVZMacHardwareModel2Struct(void *hardwareModelPtr
+         ret.dataRepresentation = retByteSlice;
+         return ret;
+     }
+-
++#endif
+     RAISE_UNSUPPORTED_MACOS_EXCEPTION();
+ }
+ 
+@@ -405,6 +428,7 @@ VZMacHardwareModelStruct convertVZMacHardwareModel2Struct(void *hardwareModelPtr
+  */
+ void *newVZMacOSInstaller(void *virtualMachine, void *vmQueue, const char *restoreImageFilePath)
+ {
++#ifdef INCLUDE_TARGET_OSX_12
+     if (@available(macOS 12, *)) {
+         __block VZMacOSInstaller *ret;
+         NSString *restoreImageFilePathNSString = [NSString stringWithUTF8String:restoreImageFilePath];
+@@ -414,7 +438,7 @@ void *newVZMacOSInstaller(void *virtualMachine, void *vmQueue, const char *resto
+         });
+         return ret;
+     }
+-
++#endif
+     RAISE_UNSUPPORTED_MACOS_EXCEPTION();
+ }
+ 
+@@ -425,6 +449,7 @@ void *newProgressObserverVZMacOSInstaller()
+ 
+ void installByVZMacOSInstaller(void *installerPtr, void *vmQueue, void *progressObserverPtr, void *completionHandler, void *fractionCompletedHandler)
+ {
++#ifdef INCLUDE_TARGET_OSX_12
+     if (@available(macOS 12, *)) {
+         VZMacOSInstaller *installer = (VZMacOSInstaller *)installerPtr;
+         dispatch_sync((dispatch_queue_t)vmQueue, ^{
+@@ -439,12 +464,13 @@ void installByVZMacOSInstaller(void *installerPtr, void *vmQueue, void *progress
+         });
+         return;
+     }
+-
++#endif
+     RAISE_UNSUPPORTED_MACOS_EXCEPTION();
+ }
+ 
+ void cancelInstallVZMacOSInstaller(void *installerPtr)
+ {
++#ifdef INCLUDE_TARGET_OSX_12
+     if (@available(macOS 12, *)) {
+         VZMacOSInstaller *installer = (VZMacOSInstaller *)installerPtr;
+         if (installer.progress.cancellable) {
+@@ -452,7 +478,7 @@ void cancelInstallVZMacOSInstaller(void *installerPtr)
+         }
+         return;
+     }
+-
++#endif
+     RAISE_UNSUPPORTED_MACOS_EXCEPTION();
+ }
+ 
+diff --git a/src/cmd/linuxkit/vendor/github.com/Code-Hex/vz/v3/virtualization_debug.m b/src/cmd/linuxkit/vendor/github.com/Code-Hex/vz/v3/virtualization_debug.m
+index 67fe356ae..af81a46b0 100644
+--- a/src/cmd/linuxkit/vendor/github.com/Code-Hex/vz/v3/virtualization_debug.m
++++ b/src/cmd/linuxkit/vendor/github.com/Code-Hex/vz/v3/virtualization_debug.m
+@@ -12,10 +12,11 @@
+ */
+ void *newVZGDBDebugStubConfiguration(uint32_t port)
+ {
++#ifdef INCLUDE_TARGET_OSX_12
+     if (@available(macOS 12, *)) {
+         return [[_VZGDBDebugStubConfiguration alloc] initWithPort:(NSInteger)port];
+     }
+-
++#endif
+     RAISE_UNSUPPORTED_MACOS_EXCEPTION();
+ }
+ 
+@@ -24,10 +25,11 @@ void *newVZGDBDebugStubConfiguration(uint32_t port)
+ */
+ void setDebugStubVZVirtualMachineConfiguration(void *config, void *debugStub)
+ {
++#ifdef INCLUDE_TARGET_OSX_12
+     if (@available(macOS 12, *)) {
+         [(VZVirtualMachineConfiguration *)config _setDebugStub:(_VZDebugStubConfiguration *)debugStub];
+         return;
+     }
+-
++#endif
+     RAISE_UNSUPPORTED_MACOS_EXCEPTION();
+ }
+\ No newline at end of file
+diff --git a/src/cmd/linuxkit/vendor/github.com/Code-Hex/vz/v3/virtualization_helper.h b/src/cmd/linuxkit/vendor/github.com/Code-Hex/vz/v3/virtualization_helper.h
+index 995b40882..9da0700b9 100644
+--- a/src/cmd/linuxkit/vendor/github.com/Code-Hex/vz/v3/virtualization_helper.h
++++ b/src/cmd/linuxkit/vendor/github.com/Code-Hex/vz/v3/virtualization_helper.h
+@@ -18,6 +18,13 @@ NSDictionary *dumpProcessinfo();
+         __builtin_unreachable();                              \
+     } while (0)
+ 
++// for macOS 12 API
++#if __MAC_OS_X_VERSION_MAX_ALLOWED >= 120000
++#define INCLUDE_TARGET_OSX_12 1
++#else
++#pragma message("macOS 12 API has been disabled")
++#endif
++
+ // for macOS 12.3 API
+ #if __MAC_OS_X_VERSION_MAX_ALLOWED >= 120300
+ #define INCLUDE_TARGET_OSX_12_3 1
+diff --git a/src/cmd/linuxkit/vendor/github.com/Code-Hex/vz/v3/virtualization_view.h b/src/cmd/linuxkit/vendor/github.com/Code-Hex/vz/v3/virtualization_view.h
+index ab00b9225..15d306f66 100644
+--- a/src/cmd/linuxkit/vendor/github.com/Code-Hex/vz/v3/virtualization_view.h
++++ b/src/cmd/linuxkit/vendor/github.com/Code-Hex/vz/v3/virtualization_view.h
+@@ -23,9 +23,11 @@
+ - (instancetype)init;
+ @end
+ 
++#ifdef INCLUDE_TARGET_OSX_12
+ API_AVAILABLE(macos(12.0))
+ @interface AppDelegate : NSObject <NSApplicationDelegate, NSWindowDelegate, VZVirtualMachineDelegate>
+ - (instancetype)initWithVirtualMachine:(VZVirtualMachine *)virtualMachine
+                            windowWidth:(CGFloat)windowWidth
+                           windowHeight:(CGFloat)windowHeight;
+-@end
+\ No newline at end of file
++@end
++#endif
+\ No newline at end of file
+diff --git a/src/cmd/linuxkit/vendor/github.com/Code-Hex/vz/v3/virtualization_view.m b/src/cmd/linuxkit/vendor/github.com/Code-Hex/vz/v3/virtualization_view.m
+index 9031c44f1..33b20d91b 100644
+--- a/src/cmd/linuxkit/vendor/github.com/Code-Hex/vz/v3/virtualization_view.m
++++ b/src/cmd/linuxkit/vendor/github.com/Code-Hex/vz/v3/virtualization_view.m
+@@ -165,6 +165,7 @@
+ 
+ @end
+ 
++#ifdef INCLUDE_TARGET_OSX_12
+ @implementation AppDelegate {
+     VZVirtualMachine *_virtualMachine;
+     VZVirtualMachineView *_virtualMachineView;
+@@ -372,3 +373,4 @@
+     [aboutPanel makeKeyAndOrderFront:nil];
+ }
+ @end
++#endif
diff --git a/nixpkgs/pkgs/development/tools/misc/loccount/default.nix b/nixpkgs/pkgs/development/tools/misc/loccount/default.nix
new file mode 100644
index 000000000000..d51cec639c1d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/loccount/default.nix
@@ -0,0 +1,45 @@
+{ lib, buildGoModule, fetchFromGitLab, python3 }:
+buildGoModule rec {
+  pname = "loccount";
+  version = "2.15";
+
+  src = fetchFromGitLab {
+    owner = "esr";
+    repo = "loccount";
+    rev = version;
+    hash = "sha256-IRDwxz/InF4okyfAzbK0PzZz+HMUwv5LgRthUUy3rus=";
+  };
+
+  vendorHash = null;
+
+  excludedPackages = "tests";
+
+  nativeBuildInputs = [ python3 ];
+
+  ldflags = [ "-s" "-w" ];
+
+  preBuild = ''
+    patchShebangs --build tablegen.py
+
+    go generate
+  '';
+
+  meta = with lib; {
+    description = "Re-implementation of sloccount in Go";
+    longDescription = ''
+      loccount is a re-implementation of David A. Wheeler's sloccount tool
+      in Go.  It is faster and handles more different languages. Because
+      it's one source file in Go, it is easier to maintain and extend than the
+      multi-file, multi-language implementation of the original.
+
+      The algorithms are largely unchanged and can be expected to produce
+      identical numbers for languages supported by both tools.  Python is
+      an exception; loccount corrects buggy counting of single-quote multiline
+      literals in sloccount 2.26.
+    '';
+    homepage = "https://gitlab.com/esr/loccount";
+    downloadPage = "https://gitlab.com/esr/loccount/tree/master";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ calvertvl ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/lsof/default.nix b/nixpkgs/pkgs/development/tools/misc/lsof/default.nix
new file mode 100644
index 000000000000..eece4f972231
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/lsof/default.nix
@@ -0,0 +1,68 @@
+{ lib, stdenv, fetchFromGitHub, buildPackages, perl, which, ncurses, nukeReferences }:
+
+let
+  dialect = with lib; last (splitString "-" stdenv.hostPlatform.system);
+in
+
+stdenv.mkDerivation rec {
+  pname = "lsof";
+  version = "4.99.3";
+
+  src = fetchFromGitHub {
+    owner = "lsof-org";
+    repo = "lsof";
+    rev = version;
+    hash = "sha256-XW3l+E9D8hgI9jGJGKkIAKa8O9m0JHgZhEASqg4gYuw=";
+  };
+
+  postPatch = ''
+    patchShebangs --build lib/dialects/*/Mksrc
+    # Do not re-build version.h in every 'make' to allow nuke-refs below.
+    # We remove phony 'FRC' target that forces rebuilds:
+    #   'version.h: FRC ...' is translated to 'version.h: ...'.
+    sed -i lib/dialects/*/Makefile -e 's/version.h:\s*FRC/version.h:/'
+  '' + lib.optionalString stdenv.isDarwin ''
+    sed -i 's|lcurses|lncurses|g' Configure
+  '';
+
+  depsBuildBuild = [ buildPackages.stdenv.cc ];
+  nativeBuildInputs = [ nukeReferences perl which ];
+  buildInputs = [ ncurses ];
+
+  # Stop build scripts from searching global include paths
+  LSOF_INCLUDE = "${lib.getDev stdenv.cc.libc}/include";
+  configurePhase = "LINUX_CONF_CC=$CC_FOR_BUILD LSOF_CC=$CC LSOF_AR=\"$AR cr\" LSOF_RANLIB=$RANLIB ./Configure -n ${dialect}";
+
+  preBuild = ''
+    for filepath in $(find dialects/${dialect} -type f); do
+      sed -i "s,/usr/include,$LSOF_INCLUDE,g" $filepath
+    done
+
+    # Wipe out development-only flags from CFLAGS embedding
+    make version.h
+    nuke-refs version.h
+  '';
+
+  installPhase = ''
+    # Fix references from man page https://github.com/lsof-org/lsof/issues/66
+    substituteInPlace Lsof.8 \
+      --replace ".so ./00DIALECTS" "" \
+      --replace ".so ./version" ".ds VN ${version}"
+    mkdir -p $out/bin $out/man/man8
+    cp Lsof.8 $out/man/man8/lsof.8
+    cp lsof $out/bin
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/lsof-org/lsof";
+    description = "A tool to list open files";
+    longDescription = ''
+      List open files. Can show what process has opened some file,
+      socket (IPv6/IPv4/UNIX local), or partition (by opening a file
+      from it).
+    '';
+    license = licenses.purdueBsd;
+    maintainers = with maintainers; [ dezgeg ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/ltrace/default.nix b/nixpkgs/pkgs/development/tools/misc/ltrace/default.nix
new file mode 100644
index 000000000000..9114e7cf4cef
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/ltrace/default.nix
@@ -0,0 +1,63 @@
+{ lib, stdenv, fetchurl, fetchgit, autoreconfHook, dejagnu, elfutils }:
+
+stdenv.mkDerivation rec {
+  pname = "ltrace";
+  version = "0.7.91";
+
+  src = fetchurl {
+    url = "https://src.fedoraproject.org/repo/pkgs/ltrace/ltrace-0.7.91.tar.bz2/9db3bdee7cf3e11c87d8cc7673d4d25b/ltrace-0.7.91.tar.bz2";
+    sha256 = "sha256-HqellbKh2ZDHxslXl7SSIXtpjV1sodtgVwh8hgTC3Dc=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];  # Some patches impact ./configure.
+  buildInputs = [ elfutils ];
+  nativeCheckInputs = [ dejagnu ];
+
+  # Import Fedora's (very) large patch series: bug fixes, architecture support,
+  # etc. RH/Fedora are currently working with upstream to merge all these
+  # patches for the next major branch.
+  prePatch = let
+      fedora = fetchgit {
+        url = "https://src.fedoraproject.org/rpms/ltrace.git";
+        rev = "00f430ccbebdbd13bdd4d7ee6303b091cf005542";
+        sha256 = "sha256-FBGEgmaslu7xrJtZ2WsYwu9Cw1ZQrWRV1+Eu9qLXO4s=";
+      };
+    in ''
+      # Order matters, read the patch list from the RPM spec. Our own patches
+      # are applied on top of the Fedora baseline.
+      fedorapatches=""
+      for p in $(grep '^Patch[0-9]\+:' ${fedora}/ltrace.spec | awk '{ print $2 }'); do
+        fedorapatches="$fedorapatches ${fedora}/$p"
+      done
+      patches="$fedorapatches $patches"
+    '';
+
+  # Cherry-pick extra patches for recent glibc support in the test suite.
+  patches = [
+    # https://gitlab.com/cespedes/ltrace/-/merge_requests/14
+    ./testsuite-newfstatat.patch
+    # https://gitlab.com/cespedes/ltrace/-/merge_requests/15
+    ./sysdeps-x86.patch
+  ];
+
+  doCheck = true;
+  checkPhase = ''
+    # Hardening options interfere with some of the low-level expectations in
+    # the test suite (e.g. printf ends up redirected to __printf_chk).
+    NIX_HARDENING_ENABLE="" \
+    # Disable test that requires ptrace-ing a non-child process, this might be
+    # forbidden by YAMA ptrace policy on the build host.
+    RUNTESTFLAGS="--host=${stdenv.hostPlatform.config} \
+                  --target=${stdenv.targetPlatform.config} \
+                  --ignore attach-process.exp" \
+      make check
+  '';
+
+  meta = with lib; {
+    description = "Library call tracer";
+    homepage = "https://www.ltrace.org/";
+    platforms = platforms.linux;
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ delroth ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/ltrace/sysdeps-x86.patch b/nixpkgs/pkgs/development/tools/misc/ltrace/sysdeps-x86.patch
new file mode 100644
index 000000000000..63ae8ad94813
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/ltrace/sysdeps-x86.patch
@@ -0,0 +1,328 @@
+diff --git a/sysdeps/linux-gnu/x86/syscallent.h b/sysdeps/linux-gnu/x86/syscallent.h
+index 345fe20..66ac522 100644
+--- a/sysdeps/linux-gnu/x86/syscallent.h
++++ b/sysdeps/linux-gnu/x86/syscallent.h
+@@ -238,7 +238,7 @@
+ 	"setfsgid32",			/* 216 */
+ 	"pivot_root",			/* 217 */
+ 	"mincore",			/* 218 */
+-	"madvise1",			/* 219 */
++	"madvise",			/* 219 */
+ 	"getdents64",			/* 220 */
+ 	"fcntl64",			/* 221 */
+ 	"222",				/* 222 */
+@@ -279,14 +279,14 @@
+ 	"remap_file_pages",		/* 257 */
+ 	"set_tid_address",		/* 258 */
+ 	"timer_create",			/* 259 */
+-	"260",				/* 260 */
+-	"261",				/* 261 */
+-	"262",				/* 262 */
+-	"263",				/* 263 */
+-	"264",				/* 264 */
+-	"265",				/* 265 */
+-	"266",				/* 266 */
+-	"267",				/* 267 */
++	"timer_settime",		/* 260 */
++	"timer_gettime",		/* 261 */
++	"timer_getoverrun",		/* 262 */
++	"timer_delete",			/* 263 */
++	"clock_settime",		/* 264 */
++	"clock_gettime",		/* 265 */
++	"clock_getres",			/* 266 */
++	"clock_nanosleep",		/* 267 */
+ 	"statfs64",			/* 268 */
+ 	"fstatfs64",			/* 269 */
+ 	"tgkill",			/* 270 */
+@@ -297,11 +297,11 @@
+ 	"get_mempolicy",		/* 275 */
+ 	"set_mempolicy",		/* 276 */
+ 	"mq_open",			/* 277 */
+-	"278",				/* 278 */
+-	"279",				/* 279 */
+-	"280",				/* 280 */
+-	"281",				/* 281 */
+-	"282",				/* 282 */
++	"mq_unlink",			/* 278 */
++	"mq_timedsend",			/* 279 */
++	"mq_timedreceive",		/* 280 */
++	"mq_notify",			/* 281 */
++	"mq_getsetattr",		/* 282 */
+ 	"kexec_load",			/* 283 */
+ 	"waitid",			/* 284 */
+ 	"285",				/* 285 */
+@@ -368,3 +368,105 @@
+ 	"setns",			/* 346 */
+ 	"process_vm_readv",		/* 347 */
+ 	"process_vm_writev",		/* 348 */
++	"kcmp",				/* 349 */
++	"finit_module",			/* 350 */
++	"sched_setattr",		/* 351 */
++	"sched_getattr",		/* 352 */
++	"renameat2",			/* 353 */
++	"seccomp",			/* 354 */
++	"getrandom",			/* 355 */
++	"memfd_create",			/* 356 */
++	"bpf",				/* 357 */
++	"execveat",			/* 358 */
++	"socket",			/* 359 */
++	"socketpair",			/* 360 */
++	"bind",				/* 361 */
++	"connect",			/* 362 */
++	"listen",			/* 363 */
++	"accept4",			/* 364 */
++	"getsockopt",			/* 365 */
++	"setsockopt",			/* 366 */
++	"getsockname",			/* 367 */
++	"getpeername",			/* 368 */
++	"sendto",			/* 369 */
++	"sendmsg",			/* 370 */
++	"recvfrom",			/* 371 */
++	"recvmsg",			/* 372 */
++	"shutdown",			/* 373 */
++	"userfaultfd",			/* 374 */
++	"membarrier",			/* 375 */
++	"mlock2",			/* 376 */
++	"copy_file_range",		/* 377 */
++	"preadv2",			/* 378 */
++	"pwritev2",			/* 379 */
++	"pkey_mprotect",		/* 380 */
++	"pkey_alloc",			/* 381 */
++	"pkey_free",			/* 382 */
++	"statx",			/* 383 */
++	"arch_prctl",			/* 384 */
++	"io_pgetevents",		/* 385 */
++	"rseq",				/* 386 */
++	"387",				/* 387 */
++	"388",				/* 388 */
++	"389",				/* 389 */
++	"390",				/* 390 */
++	"391",				/* 391 */
++	"392",				/* 392 */
++	"semget",			/* 393 */
++	"semctl",			/* 394 */
++	"shmget",			/* 395 */
++	"shmctl",			/* 396 */
++	"shmat",			/* 397 */
++	"shmdt",			/* 398 */
++	"msgget",			/* 399 */
++	"msgsnd",			/* 400 */
++	"msgrcv",			/* 401 */
++	"msgctl",			/* 402 */
++	"clock_gettime64",		/* 403 */
++	"clock_settime64",		/* 404 */
++	"clock_adjtime64",		/* 405 */
++	"clock_getres_time64",		/* 406 */
++	"clock_nanosleep_time64",	/* 407 */
++	"timer_gettime64",		/* 408 */
++	"timer_settime64",		/* 409 */
++	"timerfd_gettime64",		/* 410 */
++	"timerfd_settime64",		/* 411 */
++	"utimensat_time64",		/* 412 */
++	"pselect6_time64",		/* 413 */
++	"ppoll_time64",			/* 414 */
++	"415",				/* 415 */
++	"io_pgetevents_time64",		/* 416 */
++	"recvmmsg_time64",		/* 417 */
++	"mq_timedsend_time64",		/* 418 */
++	"mq_timedreceive_time64",	/* 419 */
++	"semtimedop_time64",		/* 420 */
++	"rt_sigtimedwait_time64",	/* 421 */
++	"futex_time64",			/* 422 */
++	"sched_rr_get_interval_time64", /* 423 */
++	"pidfd_send_signal",		/* 424 */
++	"io_uring_setup",		/* 425 */
++	"io_uring_enter",		/* 426 */
++	"io_uring_register",		/* 427 */
++	"open_tree",			/* 428 */
++	"move_mount",			/* 429 */
++	"fsopen",			/* 430 */
++	"fsconfig",			/* 431 */
++	"fsmount",			/* 432 */
++	"fspick",			/* 433 */
++	"pidfd_open",			/* 434 */
++	"clone3",			/* 435 */
++	"close_range",			/* 436 */
++	"openat2",			/* 437 */
++	"pidfd_getfd",			/* 438 */
++	"faccessat2",			/* 439 */
++	"process_madvise",		/* 440 */
++	"epoll_pwait2",			/* 441 */
++	"mount_setattr",		/* 442 */
++	"quotactl_fd",			/* 443 */
++	"landlock_create_ruleset",	/* 444 */
++	"landlock_add_rule",		/* 445 */
++	"landlock_restrict_self",	/* 446 */
++	"memfd_secret",			/* 447 */
++	"process_mrelease",		/* 448 */
++	"futex_waitv",			/* 449 */
++	"set_mempolicy_home_node",	/* 450 */
+diff --git a/sysdeps/linux-gnu/x86/syscallent1.h b/sysdeps/linux-gnu/x86/syscallent1.h
+index 91ae8d6..f8b15f7 100644
+--- a/sysdeps/linux-gnu/x86/syscallent1.h
++++ b/sysdeps/linux-gnu/x86/syscallent1.h
+@@ -36,8 +36,8 @@
+ 	"rt_sigprocmask",		/* 14 */
+ 	"rt_sigreturn",			/* 15 */
+ 	"ioctl",			/* 16 */
+-	"pread",			/* 17 */
+-	"pwrite",			/* 18 */
++	"pread64",			/* 17 */
++	"pwrite64",			/* 18 */
+ 	"readv",			/* 19 */
+ 	"writev",			/* 20 */
+ 	"access",			/* 21 */
+@@ -233,8 +233,8 @@
+ 	"get_thread_area",		/* 211 */
+ 	"lookup_dcookie",		/* 212 */
+ 	"epoll_create",			/* 213 */
+-	"epoll_ctl",			/* 214 */
+-	"epoll_wait",			/* 215 */
++	"epoll_ctl_old",		/* 214 */
++	"epoll_wait_old",		/* 215 */
+ 	"remap_file_pages",		/* 216 */
+ 	"getdents64",			/* 217 */
+ 	"set_tid_address",		/* 218 */
+@@ -331,3 +331,142 @@
+ 	"getcpu",			/* 309 */
+ 	"process_vm_readv",		/* 310 */
+ 	"process_vm_writev",		/* 311 */
++	"kcmp",				/* 312 */
++	"finit_module",			/* 313 */
++	"sched_setattr",		/* 314 */
++	"sched_getattr",		/* 315 */
++	"renameat2",			/* 316 */
++	"seccomp",			/* 317 */
++	"getrandom",			/* 318 */
++	"memfd_create",			/* 319 */
++	"kexec_file_load",		/* 320 */
++	"bpf",				/* 321 */
++	"execveat",			/* 322 */
++	"userfaultfd",			/* 323 */
++	"membarrier",			/* 324 */
++	"mlock2",			/* 325 */
++	"copy_file_range",		/* 326 */
++	"preadv2",			/* 327 */
++	"pwritev2",			/* 328 */
++	"pkey_mprotect",		/* 329 */
++	"pkey_alloc",			/* 330 */
++	"pkey_free",			/* 331 */
++	"statx",			/* 332 */
++	"io_pgetevents",		/* 333 */
++	"rseq",				/* 334 */
++	"335",				/* 335 */
++	"336",				/* 336 */
++	"337",				/* 337 */
++	"338",				/* 338 */
++	"339",				/* 339 */
++	"340",				/* 340 */
++	"341",				/* 341 */
++	"342",				/* 342 */
++	"343",				/* 343 */
++	"344",				/* 344 */
++	"345",				/* 345 */
++	"346",				/* 346 */
++	"347",				/* 347 */
++	"348",				/* 348 */
++	"349",				/* 349 */
++	"350",				/* 350 */
++	"351",				/* 351 */
++	"352",				/* 352 */
++	"353",				/* 353 */
++	"354",				/* 354 */
++	"355",				/* 355 */
++	"356",				/* 356 */
++	"357",				/* 357 */
++	"358",				/* 358 */
++	"359",				/* 359 */
++	"360",				/* 360 */
++	"361",				/* 361 */
++	"362",				/* 362 */
++	"363",				/* 363 */
++	"364",				/* 364 */
++	"365",				/* 365 */
++	"366",				/* 366 */
++	"367",				/* 367 */
++	"368",				/* 368 */
++	"369",				/* 369 */
++	"370",				/* 370 */
++	"371",				/* 371 */
++	"372",				/* 372 */
++	"373",				/* 373 */
++	"374",				/* 374 */
++	"375",				/* 375 */
++	"376",				/* 376 */
++	"377",				/* 377 */
++	"378",				/* 378 */
++	"379",				/* 379 */
++	"380",				/* 380 */
++	"381",				/* 381 */
++	"382",				/* 382 */
++	"383",				/* 383 */
++	"384",				/* 384 */
++	"385",				/* 385 */
++	"386",				/* 386 */
++	"387",				/* 387 */
++	"388",				/* 388 */
++	"389",				/* 389 */
++	"390",				/* 390 */
++	"391",				/* 391 */
++	"392",				/* 392 */
++	"393",				/* 393 */
++	"394",				/* 394 */
++	"395",				/* 395 */
++	"396",				/* 396 */
++	"397",				/* 397 */
++	"398",				/* 398 */
++	"399",				/* 399 */
++	"400",				/* 400 */
++	"401",				/* 401 */
++	"402",				/* 402 */
++	"403",				/* 403 */
++	"404",				/* 404 */
++	"405",				/* 405 */
++	"406",				/* 406 */
++	"407",				/* 407 */
++	"408",				/* 408 */
++	"409",				/* 409 */
++	"410",				/* 410 */
++	"411",				/* 411 */
++	"412",				/* 412 */
++	"413",				/* 413 */
++	"414",				/* 414 */
++	"415",				/* 415 */
++	"416",				/* 416 */
++	"417",				/* 417 */
++	"418",				/* 418 */
++	"419",				/* 419 */
++	"420",				/* 420 */
++	"421",				/* 421 */
++	"422",				/* 422 */
++	"423",				/* 423 */
++	"pidfd_send_signal",		/* 424 */
++	"io_uring_setup",		/* 425 */
++	"io_uring_enter",		/* 426 */
++	"io_uring_register",		/* 427 */
++	"open_tree",			/* 428 */
++	"move_mount",			/* 429 */
++	"fsopen",			/* 430 */
++	"fsconfig",			/* 431 */
++	"fsmount",			/* 432 */
++	"fspick",			/* 433 */
++	"pidfd_open",			/* 434 */
++	"clone3",			/* 435 */
++	"close_range",			/* 436 */
++	"openat2",			/* 437 */
++	"pidfd_getfd",			/* 438 */
++	"faccessat2",			/* 439 */
++	"process_madvise",		/* 440 */
++	"epoll_pwait2",			/* 441 */
++	"mount_setattr",		/* 442 */
++	"quotactl_fd",			/* 443 */
++	"landlock_create_ruleset",	/* 444 */
++	"landlock_add_rule",		/* 445 */
++	"landlock_restrict_self",	/* 446 */
++	"memfd_secret",			/* 447 */
++	"process_mrelease",		/* 448 */
++	"futex_waitv",			/* 449 */
++	"set_mempolicy_home_node",	/* 450 */
diff --git a/nixpkgs/pkgs/development/tools/misc/ltrace/testsuite-newfstatat.patch b/nixpkgs/pkgs/development/tools/misc/ltrace/testsuite-newfstatat.patch
new file mode 100644
index 000000000000..17165be495bf
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/ltrace/testsuite-newfstatat.patch
@@ -0,0 +1,13 @@
+diff --git a/testsuite/ltrace.main/system_calls.exp b/testsuite/ltrace.main/system_calls.exp
+index 1b64cb0..af19916 100644
+--- a/testsuite/ltrace.main/system_calls.exp
++++ b/testsuite/ltrace.main/system_calls.exp
+@@ -133,7 +133,7 @@ Match [Diff [Calls [ltraceRun -L -S -- $bin]] \
+     { {^write$} == 1 }
+     { {^unlink(at)?$} >= 2 }
+     { {^open(at)?$} == 1 }
+-    { {^(new|f)?stat(64)?$} >= 1 }
++    { {^(new)?f?statx?(at)?(64)?$} >= 1 }
+     { {^close$} == 1 }
+     { {^getcwd$} == 1 }
+     { {^chdir$} == 1 }
diff --git a/nixpkgs/pkgs/development/tools/misc/lttng-tools/default.nix b/nixpkgs/pkgs/development/tools/misc/lttng-tools/default.nix
new file mode 100644
index 000000000000..b3660f7cad9b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/lttng-tools/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchurl, pkg-config, popt, libuuid, liburcu, lttng-ust, kmod, libxml2 }:
+
+stdenv.mkDerivation rec {
+  pname = "lttng-tools";
+  version = "2.13.11";
+
+  src = fetchurl {
+    url = "https://lttng.org/files/lttng-tools/${pname}-${version}.tar.bz2";
+    sha256 = "sha256-rFuu75+mkJNrHKAezRdC2nYsLAhRH/G06SOTjZTQ+Xk=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ popt libuuid liburcu lttng-ust libxml2 kmod ];
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "Tracing tools (kernel + user space) for Linux";
+    homepage = "https://lttng.org/";
+    license = with licenses; [ lgpl21Only gpl2Only ];
+    platforms = platforms.linux;
+    maintainers = [ maintainers.bjornfor ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/lttng-ust/2.12.nix b/nixpkgs/pkgs/development/tools/misc/lttng-ust/2.12.nix
new file mode 100644
index 000000000000..b3ef1fe65e7f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/lttng-ust/2.12.nix
@@ -0,0 +1,4 @@
+import ./generic.nix {
+  version = "2.12.2";
+  sha256 = "sha256-vNDwZLbKiMcthOdg6sNHKuXIKEEcY0Q1kivun841n8c=";
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/lttng-ust/default.nix b/nixpkgs/pkgs/development/tools/misc/lttng-ust/default.nix
new file mode 100644
index 000000000000..b1fb9c83e8d0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/lttng-ust/default.nix
@@ -0,0 +1,4 @@
+import ./generic.nix {
+  version = "2.13.7";
+  sha256 = "sha256-X7TxfDB8jBt5xoVh6JvpVi0H50Jb9A5yjE1mdVNCpes=";
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/lttng-ust/generic.nix b/nixpkgs/pkgs/development/tools/misc/lttng-ust/generic.nix
new file mode 100644
index 000000000000..56ad3b19e520
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/lttng-ust/generic.nix
@@ -0,0 +1,48 @@
+{ version, sha256 }:
+
+{ lib, stdenv, fetchurl, pkg-config, liburcu, numactl, python3 }:
+
+# NOTE:
+#   ./configure ...
+#   [...]
+#   LTTng-UST will be built with the following options:
+#
+#   Java support (JNI): Disabled
+#   sdt.h integration:  Disabled
+#   [...]
+#
+# Debian builds with std.h (systemtap).
+
+stdenv.mkDerivation rec {
+  pname = "lttng-ust";
+  inherit version;
+
+  src = fetchurl {
+    url = "https://lttng.org/files/lttng-ust/${pname}-${version}.tar.bz2";
+    inherit sha256;
+  };
+
+  outputs = [ "bin" "out" "dev" "devdoc" ];
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ numactl python3 ];
+
+  preConfigure = ''
+    patchShebangs .
+  '';
+
+  configureFlags = [ "--disable-examples" ];
+
+  propagatedBuildInputs = [ liburcu ];
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "LTTng Userspace Tracer libraries";
+    homepage = "https://lttng.org/";
+    license = with licenses; [ lgpl21Only gpl2Only mit ];
+    platforms = platforms.linux;
+    maintainers = [ maintainers.bjornfor ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/lttv/default.nix b/nixpkgs/pkgs/development/tools/misc/lttv/default.nix
new file mode 100644
index 000000000000..1e89be8a0c22
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/lttv/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchurl, pkg-config, glib, gtk2, popt, babeltrace }:
+
+stdenv.mkDerivation rec {
+  pname = "lttv";
+  version = "1.5";
+
+  src = fetchurl {
+    url = "https://lttng.org/files/packages/${pname}-${version}.tar.bz2";
+    sha256 = "1faldxnh9dld5k0vxckwpqw241ya1r2zv286l6rpgqr500zqw7r1";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ glib gtk2 popt babeltrace ];
+
+  meta = with lib; {
+    description = "Graphical trace viewer for LTTng trace files";
+    homepage = "https://lttng.org/";
+    # liblttvtraceread (ltt/ directory) is distributed under the GNU LGPL v2.1.
+    # The rest of the LTTV package is distributed under the GNU GPL v2.
+    license = with licenses; [ gpl2 lgpl21 ];
+    platforms = platforms.linux;
+    maintainers = [ maintainers.bjornfor ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/luarocks/darwin-3.7.0.patch b/nixpkgs/pkgs/development/tools/misc/luarocks/darwin-3.7.0.patch
new file mode 100644
index 000000000000..3252e6ae7b4f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/luarocks/darwin-3.7.0.patch
@@ -0,0 +1,24 @@
+diff --git a/src/luarocks/core/cfg.lua b/src/luarocks/core/cfg.lua
+index 535bd69..b017161 100644
+--- a/src/luarocks/core/cfg.lua
++++ b/src/luarocks/core/cfg.lua
+@@ -436,7 +436,7 @@ local function make_defaults(lua_version, target_cpu, platforms, home)
+       defaults.external_lib_extension = "dylib"
+       defaults.arch = "macosx-"..target_cpu
+       defaults.variables.LIBFLAG = "-bundle -undefined dynamic_lookup -all_load"
+-      local version = util.popen_read("sw_vers -productVersion")
++      local version = os.getenv("MACOSX_DEPLOYMENT_TARGET") or "@darwinMinVersion@"
+       if not (version:match("^%d+%.%d+%.%d+$") or version:match("^%d+%.%d+$")) then
+          version = "10.3"
+       end
+@@ -448,8 +448,8 @@ local function make_defaults(lua_version, target_cpu, platforms, home)
+       else
+          defaults.gcc_rpath = false
+       end
+-      defaults.variables.CC = "env MACOSX_DEPLOYMENT_TARGET="..tostring(version).." gcc"
+-      defaults.variables.LD = "env MACOSX_DEPLOYMENT_TARGET="..tostring(version).." gcc"
++      defaults.variables.CC = "env MACOSX_DEPLOYMENT_TARGET="..tostring(version).." clang"
++      defaults.variables.LD = "env MACOSX_DEPLOYMENT_TARGET="..tostring(version).." clang"
+       defaults.web_browser = "open"
+    end
+ 
diff --git a/nixpkgs/pkgs/development/tools/misc/luarocks/default.nix b/nixpkgs/pkgs/development/tools/misc/luarocks/default.nix
new file mode 100644
index 000000000000..c8d36a1e3313
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/luarocks/default.nix
@@ -0,0 +1,117 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch
+, curl
+, makeWrapper
+, which
+, unzip
+, lua
+, file
+, nix-prefetch-git
+  # for 'luarocks pack'
+, zip
+, nix-update-script
+  # some packages need to be compiled with cmake
+, cmake
+, installShellFiles
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "luarocks";
+  version = "3.9.1";
+
+  src = fetchFromGitHub {
+    owner = "luarocks";
+    repo = "luarocks";
+    rev = "v${finalAttrs.version}";
+    sha256 = "sha256-G6HDap3pspeQtGDBq+ukN7kftDaT/CozMVdYM60F6HI=";
+  };
+
+  patches = [
+    ./darwin-3.7.0.patch
+    # follow standard environmental variables
+    # https://github.com/luarocks/luarocks/pull/1433
+    (fetchpatch {
+      url = "https://github.com/luarocks/luarocks/commit/d719541577a89909185aa8de7a33cf73b7a63ac3.diff";
+      sha256 = "sha256-rMnhZFqLEul0wnsxvw9nl6JXVanC5QgOZ+I/HJ0vRCM=";
+    })
+  ];
+
+  postPatch = lib.optionalString stdenv.targetPlatform.isDarwin ''
+    substituteInPlace src/luarocks/core/cfg.lua --subst-var-by 'darwinMinVersion' '${stdenv.targetPlatform.darwinMinVersion}'
+  '';
+
+  # Manually written ./configure does not support --build= or --host=:
+  #   Error: Unknown flag: --build=x86_64-unknown-linux-gnu
+  configurePlatforms = [ ];
+
+  preConfigure = ''
+    lua -e "" || {
+        luajit -e "" && {
+            export LUA_SUFFIX=jit
+            configureFlags="$configureFlags --lua-suffix=$LUA_SUFFIX"
+        }
+    }
+    lua_inc="$(echo "${lua}/include"/*/)"
+    if test -n "$lua_inc"; then
+        configureFlags="$configureFlags --with-lua-include=$lua_inc"
+    fi
+  '';
+
+  nativeBuildInputs = [ makeWrapper installShellFiles lua unzip ];
+
+  buildInputs = [ curl which ];
+
+  postInstall = ''
+    sed -e "1s@.*@#! ${lua}/bin/lua$LUA_SUFFIX@" -i "$out"/bin/*
+    substituteInPlace $out/etc/luarocks/* \
+     --replace '${lua.luaOnBuild}' '${lua}'
+
+    for i in "$out"/bin/*; do
+        test -L "$i" || {
+            wrapProgram "$i" \
+              --suffix LUA_PATH ";" "$(echo "$out"/share/lua/*/)?.lua" \
+              --suffix LUA_PATH ";" "$(echo "$out"/share/lua/*/)?/init.lua" \
+              --suffix LUA_CPATH ";" "$(echo "$out"/lib/lua/*/)?.so" \
+              --suffix LUA_CPATH ";" "$(echo "$out"/share/lua/*/)?/init.lua" \
+              --suffix PATH : ${lib.makeBinPath ([ unzip ] ++
+                lib.optionals (finalAttrs.pname == "luarocks-nix") [ file nix-prefetch-git ])}
+        }
+    done
+  '' + lib.optionalString (stdenv.buildPlatform.canExecute stdenv.hostPlatform) ''
+    installShellCompletion --cmd luarocks \
+      --bash <($out/bin/luarocks completion bash) \
+      --fish <($out/bin/luarocks completion fish) \
+      --zsh <($out/bin/luarocks completion zsh)
+  '';
+
+  propagatedBuildInputs = [ zip unzip cmake ];
+
+  # unpack hook for src.rock and rockspec files
+  setupHook = ./setup-hook.sh;
+
+  # cmake is just to compile packages with "cmake" buildType, not luarocks itself
+  dontUseCmakeConfigure = true;
+
+  shellHook = ''
+    export PATH="src/bin:''${PATH:-}"
+    export LUA_PATH="src/?.lua;''${LUA_PATH:-}"
+  '';
+
+  disallowedReferences = lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
+    lua.luaOnBuild
+  ];
+
+  passthru = {
+    updateScript = nix-update-script { };
+  };
+
+  meta = with lib; {
+    description = "A package manager for Lua";
+    license = licenses.mit;
+    maintainers = with maintainers; [ raskin teto ];
+    platforms = platforms.linux ++ platforms.darwin;
+    downloadPage = "http://luarocks.org/releases/";
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/misc/luarocks/luarocks-nix.nix b/nixpkgs/pkgs/development/tools/misc/luarocks/luarocks-nix.nix
new file mode 100644
index 000000000000..20acab5a8584
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/luarocks/luarocks-nix.nix
@@ -0,0 +1,23 @@
+{ luarocks, fetchFromGitHub, unstableGitUpdater }:
+
+luarocks.overrideAttrs (old: {
+  pname = "luarocks-nix";
+  version = "unstable-2023-10-19";
+
+  src = fetchFromGitHub {
+    owner = "nix-community";
+    repo = "luarocks-nix";
+    rev = "4240b25b95d7165cde66fc2acaf5a0f9ad40fd0c";
+    sha256 = "sha256-dqFFYehBgK0RqH0/1GtZXq7XLGCcc3Kfadq8ICYNCWk=";
+  };
+
+  patches = [ ];
+
+  passthru = {
+    updateScript = unstableGitUpdater { };
+  };
+
+  meta = old.meta // {
+    mainProgram = "luarocks";
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/misc/luarocks/setup-hook.sh b/nixpkgs/pkgs/development/tools/misc/luarocks/setup-hook.sh
new file mode 100644
index 000000000000..587d5413c3ed
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/luarocks/setup-hook.sh
@@ -0,0 +1,16 @@
+unpackCmdHooks+=(_trySourceRock)
+unpackCmdHooks+=(_tryRockSpec)
+
+_tryRockSpec() {
+    if ! [[ "$curSrc" =~ \.rockspec$ ]]; then return 1; fi
+}
+
+_trySourceRock() {
+    if ! [[ "$curSrc" =~ \.src.rock$ ]]; then return 1; fi
+
+    # luarocks expects a clean <name>.rock.spec name to be the package name
+    # so we have to strip the hash
+    renamed="$(stripHash $curSrc)"
+    cp "$curSrc" "$renamed"
+    luarocks unpack --force "$renamed"
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/macdylibbundler/default.nix b/nixpkgs/pkgs/development/tools/misc/macdylibbundler/default.nix
new file mode 100644
index 000000000000..504b79c50048
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/macdylibbundler/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, makeWrapper, fetchFromGitHub, cctools }:
+
+stdenv.mkDerivation rec {
+  pname = "macdylibbundler";
+  version = "1.0.4";
+
+  src = fetchFromGitHub {
+    owner = "auriamg";
+    repo = "macdylibbundler";
+    rev = version;
+    sha256 = "0j4ij48jf5izgymzxxaakf6vc50w9q0761yir6nfj1n6qlnrlidf";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  postInstall = ''
+    wrapProgram $out/bin/dylibbundler \
+      --prefix PATH ":" "${cctools}/bin"
+  '';
+
+  meta = with lib; {
+    description = "Utility to ease bundling libraries into executables for OSX";
+    longDescription = ''
+      dylibbundler is a small command-line programs that aims to make bundling
+      .dylibs as easy as possible. It automatically determines which dylibs are
+      needed by your program, copies these libraries inside the app bundle, and
+      fixes both them and the executable to be ready for distribution... all
+      this with a single command on the teminal! It will also work if your
+      program uses plug-ins that have dependencies too.
+    '';
+    homepage = "https://github.com/auriamg/macdylibbundler";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = [ maintainers.nomeata ];
+
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/mdctags/default.nix b/nixpkgs/pkgs/development/tools/misc/mdctags/default.nix
new file mode 100644
index 000000000000..acd6d39e97f6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/mdctags/default.nix
@@ -0,0 +1,23 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage {
+  pname = "mdctags";
+  version = "unstable-2020-06-11"; # v0.1.0 does not build with our rust version
+
+  src = fetchFromGitHub {
+    owner = "wsdjeg";
+    repo = "mdctags.rs";
+    rev = "0ed9736ea0c77e6ff5b560dda46f5ed0a983ed82";
+    sha256 = "14gryhgh9czlkfk75ml0620c6v8r74i6h3ykkkmc7gx2z8h1jxrb";
+  };
+
+  cargoSha256 = "1kdbrcpvxiq91m5vq33vzjhsp4j3flzrpbj5hmxf0k3al1a7qk1g";
+
+  meta = {
+    description = "tags for markdown file";
+    homepage = "https://github.com/wsdjeg/mdctags.rs";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ pacien ];
+    mainProgram = "mdctags";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/mdl/Gemfile b/nixpkgs/pkgs/development/tools/misc/mdl/Gemfile
new file mode 100644
index 000000000000..15b33c53a653
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/mdl/Gemfile
@@ -0,0 +1,3 @@
+source "https://rubygems.org"
+
+gem "mdl"
diff --git a/nixpkgs/pkgs/development/tools/misc/mdl/Gemfile.lock b/nixpkgs/pkgs/development/tools/misc/mdl/Gemfile.lock
new file mode 100644
index 000000000000..0e01c85002b4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/mdl/Gemfile.lock
@@ -0,0 +1,32 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    chef-utils (18.1.0)
+      concurrent-ruby
+    concurrent-ruby (1.2.0)
+    kramdown (2.4.0)
+      rexml
+    kramdown-parser-gfm (1.1.0)
+      kramdown (~> 2.0)
+    mdl (0.13.0)
+      kramdown (~> 2.3)
+      kramdown-parser-gfm (~> 1.1)
+      mixlib-cli (~> 2.1, >= 2.1.1)
+      mixlib-config (>= 2.2.1, < 4)
+      mixlib-shellout
+    mixlib-cli (2.1.8)
+    mixlib-config (3.0.27)
+      tomlrb
+    mixlib-shellout (3.2.7)
+      chef-utils
+    rexml (3.2.5)
+    tomlrb (2.0.3)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  mdl
+
+BUNDLED WITH
+   2.4.6
diff --git a/nixpkgs/pkgs/development/tools/misc/mdl/default.nix b/nixpkgs/pkgs/development/tools/misc/mdl/default.nix
new file mode 100644
index 000000000000..e7f280cf4cf5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/mdl/default.nix
@@ -0,0 +1,17 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "mdl";
+  gemdir = ./.;
+  exes = [ "mdl" ];
+
+  passthru.updateScript = bundlerUpdateScript "mdl";
+
+  meta = with lib; {
+    description = "A tool to check markdown files and flag style issues";
+    homepage = "https://github.com/markdownlint/markdownlint";
+    license = licenses.mit;
+    maintainers = with maintainers; [ gerschtli manveru nicknovitski totoroot ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/mdl/gemset.nix b/nixpkgs/pkgs/development/tools/misc/mdl/gemset.nix
new file mode 100644
index 000000000000..7c9f7b003789
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/mdl/gemset.nix
@@ -0,0 +1,108 @@
+{
+  chef-utils = {
+    dependencies = ["concurrent-ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ckbnra3cs71syrvfhgcrg1icqxh6pj21by2f9sy6r6kbr19g4w3";
+      type = "gem";
+    };
+    version = "18.1.0";
+  };
+  concurrent-ruby = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1qnsflsbjj38im8xq35g0vihlz96h09wjn2dad5g543l3vvrkrx5";
+      type = "gem";
+    };
+    version = "1.2.0";
+  };
+  kramdown = {
+    dependencies = ["rexml"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ic14hdcqxn821dvzki99zhmcy130yhv5fqfffkcf87asv5mnbmn";
+      type = "gem";
+    };
+    version = "2.4.0";
+  };
+  kramdown-parser-gfm = {
+    dependencies = ["kramdown"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0a8pb3v951f4x7h968rqfsa19c8arz21zw1vaj42jza22rap8fgv";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  mdl = {
+    dependencies = ["kramdown" "kramdown-parser-gfm" "mixlib-cli" "mixlib-config" "mixlib-shellout"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1a463jx8v4a3lgmmfalq73c337d66hc21q4vnfar1qf4lhk5wyi0";
+      type = "gem";
+    };
+    version = "0.13.0";
+  };
+  mixlib-cli = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ydxlfgd7nnj3rp1y70k4yk96xz5cywldjii2zbnw3sq9pippwp6";
+      type = "gem";
+    };
+    version = "2.1.8";
+  };
+  mixlib-config = {
+    dependencies = ["tomlrb"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0j0122lv2qgccl61njqi0pj6sp6nb85y07gcmw16bwg4k0c8nx6p";
+      type = "gem";
+    };
+    version = "3.0.27";
+  };
+  mixlib-shellout = {
+    dependencies = ["chef-utils"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0zkwg76y96nkh1mv0k92ybq46cr06v1wmic16129ls3yqzwx3xj6";
+      type = "gem";
+    };
+    version = "3.2.7";
+  };
+  rexml = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08ximcyfjy94pm1rhcx04ny1vx2sk0x4y185gzn86yfsbzwkng53";
+      type = "gem";
+    };
+    version = "3.2.5";
+  };
+  tomlrb = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1xyl2nlfm39lklyaf0p7zj9psr60jvrlyfh26hrpk7wi4k7nlwy2";
+      type = "gem";
+    };
+    version = "2.0.3";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/micronucleus/default.nix b/nixpkgs/pkgs/development/tools/misc/micronucleus/default.nix
new file mode 100644
index 000000000000..560cfa0c0dce
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/micronucleus/default.nix
@@ -0,0 +1,35 @@
+{ stdenv
+, libusb-compat-0_1
+, fetchFromGitHub
+, lib
+}:
+stdenv.mkDerivation rec {
+  pname = "micronucleus";
+  version = "2.04";
+
+  sourceRoot = "${src.name}/commandline";
+
+  src = fetchFromGitHub {
+    owner = "micronucleus";
+    repo = "micronucleus";
+    rev = version;
+    sha256 = "14msy9amlbflw5mqrbs57b7bby3nsgx43srr7215zyhfdgsla0in";
+  };
+
+  buildInputs = [ libusb-compat-0_1 ];
+  makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mkdir -p $out/lib/udev
+    cp micronucleus $out/bin
+    cp 49-micronucleus.rules $out/lib/udev
+  '';
+
+  meta = with lib; {
+    description = "Upload tool for micronucleus";
+    homepage = "https://github.com/micronucleus/micronucleus";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.cab404 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/mkcert/default.nix b/nixpkgs/pkgs/development/tools/misc/mkcert/default.nix
new file mode 100644
index 000000000000..0022dd003cd9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/mkcert/default.nix
@@ -0,0 +1,28 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "mkcert";
+  version = "1.4.4";
+
+  src = fetchFromGitHub {
+    owner = "FiloSottile";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-FMAXjRL+kJ/hwGmaWBy8ecON+JCMgRytfpryeLWsSVc=";
+  };
+
+  vendorHash = "sha256-DdA7s+N5S1ivwUgZ+M2W/HCp/7neeoqRQL0umn3m6Do=";
+
+  doCheck = false;
+
+  ldflags = [
+    "-s" "-w" "-X main.Version=v${version}"
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/FiloSottile/mkcert";
+    description = "A simple tool for making locally-trusted development certificates";
+    license = licenses.bsd3;
+    maintainers = [ maintainers.marsam ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/msitools/default.nix b/nixpkgs/pkgs/development/tools/misc/msitools/default.nix
new file mode 100644
index 000000000000..66571e887e41
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/msitools/default.nix
@@ -0,0 +1,72 @@
+{ lib
+, stdenv
+, fetchurl
+, meson
+, ninja
+, vala
+, gobject-introspection
+, perl
+, bison
+, gettext
+, glib
+, pkg-config
+, libgsf
+, gcab
+, bzip2
+, gnome
+}:
+
+stdenv.mkDerivation rec {
+  pname = "msitools";
+  version = "0.103";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/msitools/${lib.versions.majorMinor version}/msitools-${version}.tar.xz";
+    hash = "sha256-0XYi7rvzf6TAm1m+C8jbCLJr4wCmcxx02h684mK86Dk=";
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    vala
+    gobject-introspection
+    perl
+    bison
+    gettext
+    pkg-config
+  ];
+
+  buildInputs = [
+    glib
+    libgsf
+    gcab
+    bzip2
+  ];
+
+  # WiX tests fail on darwin
+  doCheck = !stdenv.isDarwin;
+
+  postPatch = ''
+    patchShebangs subprojects/bats-core/{bin,libexec}
+  '';
+
+  passthru = {
+    updateScript = gnome.updateScript {
+      packageName = pname;
+      versionPolicy = "none";
+    };
+  };
+
+  meta = with lib; {
+    description = "Set of programs to inspect and build Windows Installer (.MSI) files";
+    homepage = "https://wiki.gnome.org/msitools";
+    license = with licenses; [
+      # Library
+      lgpl21Plus
+      # Tools
+      gpl2Plus
+    ];
+    maintainers = with maintainers; [ PlushBeaver ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/n98-magerun/default.nix b/nixpkgs/pkgs/development/tools/misc/n98-magerun/default.nix
new file mode 100644
index 000000000000..dadca94c37b0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/n98-magerun/default.nix
@@ -0,0 +1,46 @@
+{
+  stdenv
+, fetchurl
+, makeBinaryWrapper
+, php
+, lib
+, unzip
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "n98-magerun";
+  version = "2.3.0";
+
+  src = fetchurl {
+    url = "https://github.com/netz98/n98-magerun/releases/download/${finalAttrs.version}/n98-magerun.phar";
+    hash = "sha256-s+Cdr8zU3VBaBzxOh4nXjqPe+JPPxHWiFOEVS/86qOQ=";
+  };
+
+  dontUnpack = true;
+
+  nativeBuildInputs = [
+    makeBinaryWrapper
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin $out/libexec/n98-magerun
+
+    install -D $src $out/libexec/n98-magerun/n98-magerun.phar
+    makeWrapper ${php}/bin/php $out/bin/n98-magerun \
+      --add-flags "$out/libexec/n98-magerun/n98-magerun.phar" \
+      --prefix PATH : ${lib.makeBinPath [ unzip ]}
+
+    runHook postInstall
+  '';
+
+  meta = {
+    broken = true; # Not compatible with PHP 8.1, see https://github.com/netz98/n98-magerun/issues/1275
+    changelog = "https://magerun.net/category/magerun/";
+    description = "The swiss army knife for Magento1/OpenMage developers";
+    homepage = "https://magerun.net/";
+    license = lib.licenses.mit;
+    maintainers = lib.teams.php.members;
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/misc/n98-magerun2/default.nix b/nixpkgs/pkgs/development/tools/misc/n98-magerun2/default.nix
new file mode 100644
index 000000000000..c04b3840a437
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/n98-magerun2/default.nix
@@ -0,0 +1,45 @@
+{
+  stdenv
+, fetchurl
+, makeBinaryWrapper
+, php
+, lib
+, unzip
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "n98-magerun2";
+  version = "7.3.1";
+
+  src = fetchurl {
+    url = "https://github.com/netz98/n98-magerun2/releases/download/${finalAttrs.version}/n98-magerun2.phar";
+    hash = "sha256-5G3sfyw8C3BwRqnK2o3upJTI/pENyaFCiMC4XGOkJT4=";
+  };
+
+  dontUnpack = true;
+
+  nativeBuildInputs = [
+    makeBinaryWrapper
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin $out/libexec/n98-magerun2
+
+    install -D $src $out/libexec/n98-magerun2/n98-magerun2.phar
+    makeWrapper ${php}/bin/php $out/bin/n98-magerun2 \
+      --add-flags "$out/libexec/n98-magerun2/n98-magerun2.phar" \
+      --prefix PATH : ${lib.makeBinPath [ unzip ]}
+
+    runHook postInstall
+  '';
+
+  meta = {
+    changelog = "https://magerun.net/category/magerun/";
+    description = "The swiss army knife for Magento2 developers";
+    homepage = "https://magerun.net/";
+    license = lib.licenses.mit;
+    maintainers = lib.teams.php.members;
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/misc/namaka/default.nix b/nixpkgs/pkgs/development/tools/misc/namaka/default.nix
new file mode 100644
index 000000000000..185f24b47211
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/namaka/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, installShellFiles
+, pkg-config
+, oniguruma
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "namaka";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "nix-community";
+    repo = "namaka";
+    rev = "v${version}";
+    hash = "sha256-CLGEW11Fo1v4vj0XSqiyW1EbhRZFO7dkgM43eKwItrk=";
+  };
+
+  cargoHash = "sha256-exftXTO/NbTfd7gNPpZ886jXH1XveqX+Cl/gXpZlS4c=";
+
+  nativeBuildInputs = [
+    installShellFiles
+    pkg-config
+  ];
+
+  buildInputs = [
+    oniguruma
+  ];
+
+  env = {
+    GEN_ARTIFACTS = "artifacts";
+    RUSTONIG_SYSTEM_LIBONIG = true;
+  };
+
+  postInstall = ''
+    installManPage artifacts/*.1
+    installShellCompletion artifacts/namaka.{bash,fish} --zsh artifacts/_namaka
+  '';
+
+  meta = with lib; {
+    description = "Snapshot testing tool for Nix based on haumea";
+    homepage = "https://github.com/nix-community/namaka";
+    changelog = "https://github.com/nix-community/namaka/blob/${src.rev}/CHANGELOG.md";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/netcoredbg/default.nix b/nixpkgs/pkgs/development/tools/misc/netcoredbg/default.nix
new file mode 100644
index 000000000000..180692e9932f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/netcoredbg/default.nix
@@ -0,0 +1,91 @@
+{ lib, clangStdenv, stdenv, cmake, autoPatchelfHook, fetchFromGitHub, dotnetCorePackages, buildDotnetModule, netcoredbg, testers }:
+let
+  pname = "netcoredbg";
+  build = "1018";
+  release = "3.0.0";
+  version = "${release}-${build}";
+  hash = "sha256-9Rd0of1psQTVLaTOCPWsYgvIXN7apZKDQNxuZGj4vXw=";
+
+  coreclr-version = "v7.0.14";
+  coreclr-src = fetchFromGitHub {
+    owner = "dotnet";
+    repo = "runtime";
+    rev = coreclr-version;
+    sha256 = "sha256-n7ySUTB4XOXxeeVomySdZIYepdp0PNNGW9pU/2wwVGM=";
+  };
+
+  dotnet-sdk = dotnetCorePackages.sdk_7_0;
+
+  src = fetchFromGitHub {
+    owner = "Samsung";
+    repo = pname;
+    rev = version;
+    inherit hash;
+  };
+
+  unmanaged = clangStdenv.mkDerivation {
+    inherit src pname version;
+
+    nativeBuildInputs = [ cmake dotnet-sdk ];
+
+    hardeningDisable = [ "strictoverflow" ];
+
+    preConfigure = ''
+      export DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=1
+    '';
+
+    cmakeFlags = [
+      "-DCORECLR_DIR=${coreclr-src}/src/coreclr"
+      "-DDOTNET_DIR=${dotnet-sdk}"
+      "-DBUILD_MANAGED=0"
+    ];
+  };
+
+  managed = buildDotnetModule {
+    inherit pname version src dotnet-sdk;
+
+    projectFile = "src/managed/ManagedPart.csproj";
+    nugetDeps = ./deps.nix;
+
+    # include platform-specific dbgshim binary in nugetDeps
+    dotnetFlags = [ "-p:UseDbgShimDependency=true" ];
+    executables = [ ];
+
+    # this passes RID down to dotnet build command
+    # and forces dotnet to include binary dependencies in the output (libdbgshim)
+    selfContainedBuild = true;
+  };
+in
+stdenv.mkDerivation {
+  inherit pname version;
+  # managed brings external binaries (libdbgshim.*)
+  # include source here so that autoPatchelfHook can do it's job
+  src = managed;
+
+  nativeBuildInputs = lib.optionals stdenv.isLinux [ autoPatchelfHook ];
+  buildInputs = lib.optionals stdenv.isLinux [ stdenv.cc.cc.lib ];
+  installPhase = ''
+    mkdir -p $out/share/netcoredbg $out/bin
+    cp ${unmanaged}/* $out/share/netcoredbg
+    cp ./lib/netcoredbg/* $out/share/netcoredbg
+    # darwin won't work unless we link all files
+    ln -s $out/share/netcoredbg/* "$out/bin/"
+  '';
+
+  passthru = {
+    inherit (managed) fetch-deps;
+    tests.version = testers.testVersion {
+      package = netcoredbg;
+      command = "netcoredbg --version";
+      version = "NET Core debugger ${release}";
+    };
+  };
+
+  meta = with lib; {
+    description = "Managed code debugger with MI interface for CoreCLR";
+    homepage = "https://github.com/Samsung/netcoredbg";
+    license = licenses.mit;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ leo60228 konradmalik ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/netcoredbg/deps.nix b/nixpkgs/pkgs/development/tools/misc/netcoredbg/deps.nix
new file mode 100644
index 000000000000..0b3f3e4e628e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/netcoredbg/deps.nix
@@ -0,0 +1,122 @@
+# This file was automatically generated by passthru.fetch-deps.
+# Please dont edit it manually, your changes might get overwritten!
+
+{ fetchNuGet }: [
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.Analyzers"; version = "1.1.0"; sha256 = "08r667hj2259wbim1p3al5qxkshydykmb7nd9ygbjlg4mmydkapc"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.Common"; version = "2.3.0"; sha256 = "1p29v4499qpyh7k7fv1li2y3c688zg95ic8gq9if1nqmjciz5w7p"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.CSharp"; version = "2.3.0"; sha256 = "1g893rqc8hmd59hdigq0fwm3w261i7cm1h2wciqp7406f0gz67x5"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.CSharp.Scripting"; version = "2.3.0"; sha256 = "121dhnfjd5jzm410dk79s8xk5jvd09xa0w5q3lbpqc7bs4wxmq4p"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.Scripting.Common"; version = "2.3.0"; sha256 = "11f11kvgrdgs86ykz4104jx1iw78v6af48hpdrhmr7y7h5334ziq"; })
+  (fetchNuGet { pname = "Microsoft.CSharp"; version = "4.4.0"; sha256 = "1niyzqqfyhvh4zpxn8bcyyldynqlw0rfr1apwry4b3yrdnjh1hhh"; })
+  (fetchNuGet { pname = "Microsoft.Diagnostics.DbgShim"; version = "8.0.452401"; sha256 = "1s9mpv6z36dkdskdls6igpgrcn2kxxdmwwpn4cag9pp5nb7fs99d"; })
+  (fetchNuGet { pname = "Microsoft.Diagnostics.DbgShim.linux-arm"; version = "8.0.452401"; sha256 = "10xg2acijf8b0n306lqqc5g2bj4a91qn5hjz3nbmc5k968l96lmi"; })
+  (fetchNuGet { pname = "Microsoft.Diagnostics.DbgShim.linux-arm64"; version = "8.0.452401"; sha256 = "18l54q5znkn5qq9afbhrxkjh2q3vlkv6h4jk7zbwaixr627q1lxr"; })
+  (fetchNuGet { pname = "Microsoft.Diagnostics.DbgShim.linux-musl-arm"; version = "8.0.452401"; sha256 = "0i8zn5k0a3chv689fdqz9sqf35k2k6vlnnvbcd42g5vd69cc05h0"; })
+  (fetchNuGet { pname = "Microsoft.Diagnostics.DbgShim.linux-musl-arm64"; version = "8.0.452401"; sha256 = "10vw93fn1qw9ygk7k4wnhs2db3jvaa5q9qn30dwvsx0mgf764567"; })
+  (fetchNuGet { pname = "Microsoft.Diagnostics.DbgShim.linux-musl-x64"; version = "8.0.452401"; sha256 = "0m3rjdsri1n5z3ck99482715bsp9kbv7dm174ac0k4za6c6hzrqf"; })
+  (fetchNuGet { pname = "Microsoft.Diagnostics.DbgShim.linux-x64"; version = "8.0.452401"; sha256 = "13fqgkzqnciin2lizik68iki2yx53y8qry784y7yb20cnvmv50p7"; })
+  (fetchNuGet { pname = "Microsoft.Diagnostics.DbgShim.osx-arm64"; version = "8.0.452401"; sha256 = "1vb254iy69jlnbdhh4ncnya2dcva51a7y2jmg174s8k7f3lann59"; })
+  (fetchNuGet { pname = "Microsoft.Diagnostics.DbgShim.osx-x64"; version = "8.0.452401"; sha256 = "0kbypky3y773js6ndljgnfm7yd67x8i82a6gy9ybnbr5dsx7y32v"; })
+  (fetchNuGet { pname = "Microsoft.Diagnostics.DbgShim.win-arm"; version = "8.0.452401"; sha256 = "1a7vsgf8bi1zc0i438d5791dbv4wdx64677px7gpfashs1zbn1fi"; })
+  (fetchNuGet { pname = "Microsoft.Diagnostics.DbgShim.win-arm64"; version = "8.0.452401"; sha256 = "048hp1ic9qsbl1pmj798ind3pab5azlybgj5hwhlqqhghbl7dbg5"; })
+  (fetchNuGet { pname = "Microsoft.Diagnostics.DbgShim.win-x64"; version = "8.0.452401"; sha256 = "0y8rjyg283zkd1g750jbmpiv1qsg56vcd22z9k8fj5fll1sydb6b"; })
+  (fetchNuGet { pname = "Microsoft.Diagnostics.DbgShim.win-x86"; version = "8.0.452401"; sha256 = "1zcpiy1nh7wm6w9dn1v3bkjscsziy2q4wyw771af8z6jibw85s8g"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "1.1.0"; sha256 = "08vh1r12g6ykjygq5d3vq09zylgb84l63k49jc4v8faw9g93iqqm"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Targets"; version = "1.1.0"; sha256 = "193xwf33fbm0ni3idxzbr5fdq3i2dlfgihsac9jj7whj0gd902nh"; })
+  (fetchNuGet { pname = "NETStandard.Library"; version = "2.0.3"; sha256 = "1fn9fxppfcg4jgypp2pmrpr6awl3qz1xmnri0cygpkwvyx27df1y"; })
+  (fetchNuGet { pname = "runtime.any.System.Collections"; version = "4.3.0"; sha256 = "0bv5qgm6vr47ynxqbnkc7i797fdi8gbjjxii173syrx14nmrkwg0"; })
+  (fetchNuGet { pname = "runtime.any.System.Diagnostics.Tools"; version = "4.3.0"; sha256 = "1wl76vk12zhdh66vmagni66h5xbhgqq7zkdpgw21jhxhvlbcl8pk"; })
+  (fetchNuGet { pname = "runtime.any.System.Diagnostics.Tracing"; version = "4.3.0"; sha256 = "00j6nv2xgmd3bi347k00m7wr542wjlig53rmj28pmw7ddcn97jbn"; })
+  (fetchNuGet { pname = "runtime.any.System.Globalization"; version = "4.3.0"; sha256 = "1daqf33hssad94lamzg01y49xwndy2q97i2lrb7mgn28656qia1x"; })
+  (fetchNuGet { pname = "runtime.any.System.Globalization.Calendars"; version = "4.3.0"; sha256 = "1ghhhk5psqxcg6w88sxkqrc35bxcz27zbqm2y5p5298pv3v7g201"; })
+  (fetchNuGet { pname = "runtime.any.System.IO"; version = "4.3.0"; sha256 = "0l8xz8zn46w4d10bcn3l4yyn4vhb3lrj2zw8llvz7jk14k4zps5x"; })
+  (fetchNuGet { pname = "runtime.any.System.Reflection"; version = "4.3.0"; sha256 = "02c9h3y35pylc0zfq3wcsvc5nqci95nrkq0mszifc0sjx7xrzkly"; })
+  (fetchNuGet { pname = "runtime.any.System.Reflection.Extensions"; version = "4.3.0"; sha256 = "0zyri97dfc5vyaz9ba65hjj1zbcrzaffhsdlpxc9bh09wy22fq33"; })
+  (fetchNuGet { pname = "runtime.any.System.Reflection.Primitives"; version = "4.3.0"; sha256 = "0x1mm8c6iy8rlxm8w9vqw7gb7s1ljadrn049fmf70cyh42vdfhrf"; })
+  (fetchNuGet { pname = "runtime.any.System.Resources.ResourceManager"; version = "4.3.0"; sha256 = "03kickal0iiby82wa5flar18kyv82s9s6d4xhk5h4bi5kfcyfjzl"; })
+  (fetchNuGet { pname = "runtime.any.System.Runtime"; version = "4.3.0"; sha256 = "1cqh1sv3h5j7ixyb7axxbdkqx6cxy00p4np4j91kpm492rf4s25b"; })
+  (fetchNuGet { pname = "runtime.any.System.Runtime.Handles"; version = "4.3.0"; sha256 = "0bh5bi25nk9w9xi8z23ws45q5yia6k7dg3i4axhfqlnj145l011x"; })
+  (fetchNuGet { pname = "runtime.any.System.Runtime.InteropServices"; version = "4.3.0"; sha256 = "0c3g3g3jmhlhw4klrc86ka9fjbl7i59ds1fadsb2l8nqf8z3kb19"; })
+  (fetchNuGet { pname = "runtime.any.System.Text.Encoding"; version = "4.3.0"; sha256 = "0aqqi1v4wx51h51mk956y783wzags13wa7mgqyclacmsmpv02ps3"; })
+  (fetchNuGet { pname = "runtime.any.System.Text.Encoding.Extensions"; version = "4.3.0"; sha256 = "0lqhgqi0i8194ryqq6v2gqx0fb86db2gqknbm0aq31wb378j7ip8"; })
+  (fetchNuGet { pname = "runtime.any.System.Threading.Tasks"; version = "4.3.0"; sha256 = "03mnvkhskbzxddz4hm113zsch1jyzh2cs450dk3rgfjp8crlw1va"; })
+  (fetchNuGet { pname = "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "16rnxzpk5dpbbl1x354yrlsbvwylrq456xzpsha1n9y3glnhyx9d"; })
+  (fetchNuGet { pname = "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0hkg03sgm2wyq8nqk6dbm9jh5vcq57ry42lkqdmfklrw89lsmr59"; })
+  (fetchNuGet { pname = "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0c2p354hjx58xhhz7wv6div8xpi90sc6ibdm40qin21bvi7ymcaa"; })
+  (fetchNuGet { pname = "runtime.native.System"; version = "4.3.0"; sha256 = "15hgf6zaq9b8br2wi1i3x0zvmk410nlmsmva9p0bbg73v6hml5k4"; })
+  (fetchNuGet { pname = "runtime.native.System.IO.Compression"; version = "4.3.0"; sha256 = "1vvivbqsk6y4hzcid27pqpm5bsi6sc50hvqwbcx8aap5ifrxfs8d"; })
+  (fetchNuGet { pname = "runtime.native.System.Net.Http"; version = "4.3.0"; sha256 = "1n6rgz5132lcibbch1qlf0g9jk60r0kqv087hxc0lisy50zpm7kk"; })
+  (fetchNuGet { pname = "runtime.native.System.Security.Cryptography.Apple"; version = "4.3.0"; sha256 = "1b61p6gw1m02cc1ry996fl49liiwky6181dzr873g9ds92zl326q"; })
+  (fetchNuGet { pname = "runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "18pzfdlwsg2nb1jjjjzyb5qlgy6xjxzmhnfaijq5s2jw3cm3ab97"; })
+  (fetchNuGet { pname = "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0qyynf9nz5i7pc26cwhgi8j62ps27sqmf78ijcfgzab50z9g8ay3"; })
+  (fetchNuGet { pname = "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "1klrs545awhayryma6l7g2pvnp9xy4z0r1i40r80zb45q3i9nbyf"; })
+  (fetchNuGet { pname = "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple"; version = "4.3.0"; sha256 = "10yc8jdrwgcl44b4g93f1ds76b176bajd3zqi2faf5rvh1vy9smi"; })
+  (fetchNuGet { pname = "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0zcxjv5pckplvkg0r6mw3asggm7aqzbdjimhvsasb0cgm59x09l3"; })
+  (fetchNuGet { pname = "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0vhynn79ih7hw7cwjazn87rm9z9fj0rvxgzlab36jybgcpcgphsn"; })
+  (fetchNuGet { pname = "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "160p68l2c7cqmyqjwxydcvgw7lvl1cr0znkw8fp24d1by9mqc8p3"; })
+  (fetchNuGet { pname = "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "15zrc8fgd8zx28hdghcj5f5i34wf3l6bq5177075m2bc2j34jrqy"; })
+  (fetchNuGet { pname = "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "1p4dgxax6p7rlgj4q73k73rslcnz4wdcv8q2flg1s8ygwcm58ld5"; })
+  (fetchNuGet { pname = "runtime.unix.System.Console"; version = "4.3.0"; sha256 = "1pfpkvc6x2if8zbdzg9rnc5fx51yllprl8zkm5npni2k50lisy80"; })
+  (fetchNuGet { pname = "runtime.unix.System.Diagnostics.Debug"; version = "4.3.0"; sha256 = "1lps7fbnw34bnh3lm31gs5c0g0dh7548wfmb8zz62v0zqz71msj5"; })
+  (fetchNuGet { pname = "runtime.unix.System.IO.FileSystem"; version = "4.3.0"; sha256 = "14nbkhvs7sji5r1saj2x8daz82rnf9kx28d3v2qss34qbr32dzix"; })
+  (fetchNuGet { pname = "runtime.unix.System.Private.Uri"; version = "4.3.0"; sha256 = "1jx02q6kiwlvfksq1q9qr17fj78y5v6mwsszav4qcz9z25d5g6vk"; })
+  (fetchNuGet { pname = "runtime.unix.System.Runtime.Extensions"; version = "4.3.0"; sha256 = "0pnxxmm8whx38dp6yvwgmh22smknxmqs5n513fc7m4wxvs1bvi4p"; })
+  (fetchNuGet { pname = "System.AppContext"; version = "4.3.0"; sha256 = "1649qvy3dar900z3g817h17nl8jp4ka5vcfmsr05kh0fshn7j3ya"; })
+  (fetchNuGet { pname = "System.Buffers"; version = "4.3.0"; sha256 = "0fgns20ispwrfqll4q1zc1waqcmylb3zc50ys9x8zlwxh9pmd9jy"; })
+  (fetchNuGet { pname = "System.Collections"; version = "4.3.0"; sha256 = "19r4y64dqyrq6k4706dnyhhw7fs24kpp3awak7whzss39dakpxk9"; })
+  (fetchNuGet { pname = "System.Collections.Concurrent"; version = "4.3.0"; sha256 = "0wi10md9aq33jrkh2c24wr2n9hrpyamsdhsxdcnf43b7y86kkii8"; })
+  (fetchNuGet { pname = "System.Collections.Immutable"; version = "1.3.1"; sha256 = "17615br2x5riyx8ivf1dcqwj6q3ipq1bi5hqhw54yfyxmx38ddva"; })
+  (fetchNuGet { pname = "System.Console"; version = "4.3.0"; sha256 = "1flr7a9x920mr5cjsqmsy9wgnv3lvd0h1g521pdr1lkb2qycy7ay"; })
+  (fetchNuGet { pname = "System.Diagnostics.Debug"; version = "4.3.0"; sha256 = "00yjlf19wjydyr6cfviaph3vsjzg3d5nvnya26i2fvfg53sknh3y"; })
+  (fetchNuGet { pname = "System.Diagnostics.FileVersionInfo"; version = "4.3.0"; sha256 = "094hx249lb3vb336q7dg3v257hbxvz2jnalj695l7cg5kxzqwai7"; })
+  (fetchNuGet { pname = "System.Diagnostics.StackTrace"; version = "4.3.0"; sha256 = "0ash4h9k0m7xsm0yl79r0ixrdz369h7y922wipp5gladmlbvpyjd"; })
+  (fetchNuGet { pname = "System.Diagnostics.Tools"; version = "4.3.0"; sha256 = "0in3pic3s2ddyibi8cvgl102zmvp9r9mchh82ns9f0ms4basylw1"; })
+  (fetchNuGet { pname = "System.Diagnostics.Tracing"; version = "4.3.0"; sha256 = "1m3bx6c2s958qligl67q7grkwfz3w53hpy7nc97mh6f7j5k168c4"; })
+  (fetchNuGet { pname = "System.Dynamic.Runtime"; version = "4.3.0"; sha256 = "1d951hrvrpndk7insiag80qxjbf2y0y39y8h5hnq9612ws661glk"; })
+  (fetchNuGet { pname = "System.Globalization"; version = "4.3.0"; sha256 = "1cp68vv683n6ic2zqh2s1fn4c2sd87g5hpp6l4d4nj4536jz98ki"; })
+  (fetchNuGet { pname = "System.Globalization.Calendars"; version = "4.3.0"; sha256 = "1xwl230bkakzzkrggy1l1lxmm3xlhk4bq2pkv790j5lm8g887lxq"; })
+  (fetchNuGet { pname = "System.IO"; version = "4.3.0"; sha256 = "05l9qdrzhm4s5dixmx68kxwif4l99ll5gqmh7rqgw554fx0agv5f"; })
+  (fetchNuGet { pname = "System.IO.Compression"; version = "4.3.0"; sha256 = "084zc82yi6yllgda0zkgl2ys48sypiswbiwrv7irb3r0ai1fp4vz"; })
+  (fetchNuGet { pname = "System.IO.FileSystem"; version = "4.3.0"; sha256 = "0z2dfrbra9i6y16mm9v1v6k47f0fm617vlb7s5iybjjsz6g1ilmw"; })
+  (fetchNuGet { pname = "System.IO.FileSystem.Primitives"; version = "4.3.0"; sha256 = "0j6ndgglcf4brg2lz4wzsh1av1gh8xrzdsn9f0yznskhqn1xzj9c"; })
+  (fetchNuGet { pname = "System.Linq"; version = "4.3.0"; sha256 = "1w0gmba695rbr80l1k2h4mrwzbzsyfl2z4klmpbsvsg5pm4a56s7"; })
+  (fetchNuGet { pname = "System.Linq.Expressions"; version = "4.3.0"; sha256 = "0ky2nrcvh70rqq88m9a5yqabsl4fyd17bpr63iy2mbivjs2nyypv"; })
+  (fetchNuGet { pname = "System.ObjectModel"; version = "4.3.0"; sha256 = "191p63zy5rpqx7dnrb3h7prvgixmk168fhvvkkvhlazncf8r3nc2"; })
+  (fetchNuGet { pname = "System.Private.Uri"; version = "4.3.0"; sha256 = "04r1lkdnsznin0fj4ya1zikxiqr0h6r6a1ww2dsm60gqhdrf0mvx"; })
+  (fetchNuGet { pname = "System.Reflection"; version = "4.3.0"; sha256 = "0xl55k0mw8cd8ra6dxzh974nxif58s3k1rjv1vbd7gjbjr39j11m"; })
+  (fetchNuGet { pname = "System.Reflection.Emit"; version = "4.3.0"; sha256 = "11f8y3qfysfcrscjpjym9msk7lsfxkk4fmz9qq95kn3jd0769f74"; })
+  (fetchNuGet { pname = "System.Reflection.Emit.ILGeneration"; version = "4.3.0"; sha256 = "0w1n67glpv8241vnpz1kl14sy7zlnw414aqwj4hcx5nd86f6994q"; })
+  (fetchNuGet { pname = "System.Reflection.Emit.Lightweight"; version = "4.3.0"; sha256 = "0ql7lcakycrvzgi9kxz1b3lljd990az1x6c4jsiwcacrvimpib5c"; })
+  (fetchNuGet { pname = "System.Reflection.Extensions"; version = "4.3.0"; sha256 = "02bly8bdc98gs22lqsfx9xicblszr2yan7v2mmw3g7hy6miq5hwq"; })
+  (fetchNuGet { pname = "System.Reflection.Metadata"; version = "1.4.2"; sha256 = "08b7b43vczlliv8k7q43jinjfrxwpljsglw7sxmc6sd7d54pd1vi"; })
+  (fetchNuGet { pname = "System.Reflection.Primitives"; version = "4.3.0"; sha256 = "04xqa33bld78yv5r93a8n76shvc8wwcdgr1qvvjh959g3rc31276"; })
+  (fetchNuGet { pname = "System.Reflection.TypeExtensions"; version = "4.3.0"; sha256 = "0y2ssg08d817p0vdag98vn238gyrrynjdj4181hdg780sif3ykp1"; })
+  (fetchNuGet { pname = "System.Resources.ResourceManager"; version = "4.3.0"; sha256 = "0sjqlzsryb0mg4y4xzf35xi523s4is4hz9q4qgdvlvgivl7qxn49"; })
+  (fetchNuGet { pname = "System.Runtime"; version = "4.3.0"; sha256 = "066ixvgbf2c929kgknshcxqj6539ax7b9m570cp8n179cpfkapz7"; })
+  (fetchNuGet { pname = "System.Runtime.Extensions"; version = "4.3.0"; sha256 = "1ykp3dnhwvm48nap8q23893hagf665k0kn3cbgsqpwzbijdcgc60"; })
+  (fetchNuGet { pname = "System.Runtime.Handles"; version = "4.3.0"; sha256 = "0sw2gfj2xr7sw9qjn0j3l9yw07x73lcs97p8xfc9w1x9h5g5m7i8"; })
+  (fetchNuGet { pname = "System.Runtime.InteropServices"; version = "4.3.0"; sha256 = "00hywrn4g7hva1b2qri2s6rabzwgxnbpw9zfxmz28z09cpwwgh7j"; })
+  (fetchNuGet { pname = "System.Runtime.Numerics"; version = "4.3.0"; sha256 = "19rav39sr5dky7afygh309qamqqmi9kcwvz3i0c5700v0c5cg61z"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Algorithms"; version = "4.3.0"; sha256 = "03sq183pfl5kp7gkvq77myv7kbpdnq3y0xj7vi4q1kaw54sny0ml"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Cng"; version = "4.3.0"; sha256 = "1k468aswafdgf56ab6yrn7649kfqx2wm9aslywjam1hdmk5yypmv"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Csp"; version = "4.3.0"; sha256 = "1x5wcrddf2s3hb8j78cry7yalca4lb5vfnkrysagbn6r9x6xvrx1"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Encoding"; version = "4.3.0"; sha256 = "1jr6w70igqn07k5zs1ph6xja97hxnb3mqbspdrff6cvssgrixs32"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0givpvvj8yc7gv4lhb6s1prq6p2c4147204a0wib89inqzd87gqc"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Primitives"; version = "4.3.0"; sha256 = "0pyzncsv48zwly3lw4f2dayqswcfvdwq2nz0dgwmi7fj3pn64wby"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.X509Certificates"; version = "4.3.0"; sha256 = "0valjcz5wksbvijylxijjxb1mp38mdhv03r533vnx1q3ikzdav9h"; })
+  (fetchNuGet { pname = "System.Text.Encoding"; version = "4.3.0"; sha256 = "1f04lkir4iladpp51sdgmis9dj4y8v08cka0mbmsy0frc9a4gjqr"; })
+  (fetchNuGet { pname = "System.Text.Encoding.CodePages"; version = "4.3.0"; sha256 = "0lgxg1gn7pg7j0f942pfdc9q7wamzxsgq3ng248ikdasxz0iadkv"; })
+  (fetchNuGet { pname = "System.Text.Encoding.Extensions"; version = "4.3.0"; sha256 = "11q1y8hh5hrp5a3kw25cb6l00v5l5dvirkz8jr3sq00h1xgcgrxy"; })
+  (fetchNuGet { pname = "System.Text.RegularExpressions"; version = "4.3.0"; sha256 = "1bgq51k7fwld0njylfn7qc5fmwrk2137gdq7djqdsw347paa9c2l"; })
+  (fetchNuGet { pname = "System.Threading"; version = "4.3.0"; sha256 = "0rw9wfamvhayp5zh3j7p1yfmx9b5khbf4q50d8k5rk993rskfd34"; })
+  (fetchNuGet { pname = "System.Threading.Tasks"; version = "4.3.0"; sha256 = "134z3v9abw3a6jsw17xl3f6hqjpak5l682k2vz39spj4kmydg6k7"; })
+  (fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.3.0"; sha256 = "1xxcx2xh8jin360yjwm4x4cf5y3a2bwpn2ygkfkwkicz7zk50s2z"; })
+  (fetchNuGet { pname = "System.Threading.Tasks.Parallel"; version = "4.3.0"; sha256 = "1rr3qa4hxwyj531s4nb3bwrxnxxwz617i0n9gh6x7nr7dd3ayzgh"; })
+  (fetchNuGet { pname = "System.Threading.Thread"; version = "4.3.0"; sha256 = "0y2xiwdfcph7znm2ysxanrhbqqss6a3shi1z3c779pj2s523mjx4"; })
+  (fetchNuGet { pname = "System.ValueTuple"; version = "4.3.0"; sha256 = "1227k7fxbxapq7dms4lvwwjdf3pr1jcsmhy2nzzhj6g6hs530hxn"; })
+  (fetchNuGet { pname = "System.Xml.ReaderWriter"; version = "4.3.0"; sha256 = "0c47yllxifzmh8gq6rq6l36zzvw4kjvlszkqa9wq3fr59n0hl3s1"; })
+  (fetchNuGet { pname = "System.Xml.XDocument"; version = "4.3.0"; sha256 = "08h8fm4l77n0nd4i4fk2386y809bfbwqb7ih9d7564ifcxr5ssxd"; })
+  (fetchNuGet { pname = "System.Xml.XmlDocument"; version = "4.3.0"; sha256 = "0bmz1l06dihx52jxjr22dyv5mxv6pj4852lx68grjm7bivhrbfwi"; })
+  (fetchNuGet { pname = "System.Xml.XPath"; version = "4.3.0"; sha256 = "1cv2m0p70774a0sd1zxc8fm8jk3i5zk2bla3riqvi8gsm0r4kpci"; })
+  (fetchNuGet { pname = "System.Xml.XPath.XDocument"; version = "4.3.0"; sha256 = "1wxckyb7n1pi433xzz0qcwcbl1swpra64065mbwwi8dhdc4kiabn"; })
+]
diff --git a/nixpkgs/pkgs/development/tools/misc/ninka/default.nix b/nixpkgs/pkgs/development/tools/misc/ninka/default.nix
new file mode 100644
index 000000000000..2b45af77e7a9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/ninka/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchFromGitHub, perl, perlPackages }:
+
+perlPackages.buildPerlPackage {
+  pname = "ninka";
+  version = "2.0-pre";
+
+  src = fetchFromGitHub {
+    owner = "dmgerman";
+    repo = "ninka";
+    rev = "b89b59ecd057dfc939d0c75acaddebb58fcd8cba";
+    sha256 = "1grlis1kycbcjvjgqvn7aw81q1qx49ahvxg2k7cgyr79mvgpgi9m";
+  };
+
+  buildInputs = with perlPackages; [ perl TestOutput DBDSQLite DBI TestPod TestPodCoverage SpreadsheetParseExcel ];
+
+  doCheck = false;    # hangs
+
+  preConfigure = ''
+    sed -i.bak -e 's;#!/usr/bin/perl;#!${perl}/bin/perl;g' \
+        ./bin/ninka-excel ./bin/ninka ./bin/ninka-sqlite \
+        ./scripts/unify.pl ./scripts/parseLicense.pl \
+        ./scripts/license_matcher_modified.pl \
+        ./scripts/sort_package_license_list.pl
+    perl Makefile.PL
+  '';
+
+  meta = with lib; {
+    description = "A sentence based license detector";
+    homepage = "http://ninka.turingmachine.org/";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.vrthra ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/nix-bisect/default.nix b/nixpkgs/pkgs/development/tools/misc/nix-bisect/default.nix
new file mode 100644
index 000000000000..a4c3179e8e58
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/nix-bisect/default.nix
@@ -0,0 +1,49 @@
+{ lib
+, fetchpatch
+, fetchFromGitHub
+, python3
+}:
+
+let
+  pname = "nix-bisect";
+  version = "0.4.1";
+in
+python3.pkgs.buildPythonApplication {
+  inherit pname version;
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "timokau";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-01vj35mMakqKi5zbMIPQ+R8xdkOWbzpnigd3/SU+svw=";
+  };
+
+  patches = [
+    (fetchpatch {
+      # Fixes compatibility with recent nix versions
+      url = "https://github.com/timokau/nix-bisect/commit/01eefe174b740cb90e48b06d67d5582d51786b96.patch";
+      hash = "sha256-Gls/NtHH7LujdEgLbcIRZ12KsJDrasXIMcHeeBVns4A=";
+    })
+    (fetchpatch {
+      # Fixes TypeError crashes associated with drvs_failed inconsistency
+      url = "https://github.com/timokau/nix-bisect/commit/9f3a17783046baae64c16f9e2be917c2603977fc.patch";
+      hash = "sha256-U9NUtgwslcgIf/wvH/WE7t0HGs2OP3wvYDKrb5j+lp0=";
+    })
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    appdirs
+    numpy
+    pexpect
+  ];
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Bisect nix builds";
+    homepage = "https://github.com/timokau/nix-bisect";
+    license = licenses.mit;
+    maintainers = with maintainers; [ hexa ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/nix-build-uncached/default.nix b/nixpkgs/pkgs/development/tools/misc/nix-build-uncached/default.nix
new file mode 100644
index 000000000000..960b744dc738
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/nix-build-uncached/default.nix
@@ -0,0 +1,26 @@
+{ lib, buildGoModule, fetchFromGitHub, makeWrapper }:
+
+buildGoModule rec {
+  pname = "nix-build-uncached";
+  version = "1.1.2";
+
+  src = fetchFromGitHub {
+    owner = "Mic92";
+    repo = "nix-build-uncached";
+    rev = "v${version}";
+    sha256 = "sha256-n9Koi01Te77bpYbRX46UThyD2FhCu9OGHd/6xDQLqjQ=";
+  };
+
+  vendorHash = null;
+
+  doCheck = false;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  meta = with lib; {
+    description = "A CI friendly wrapper around nix-build";
+    license = licenses.mit;
+    homepage = "https://github.com/Mic92/nix-build-uncached";
+    maintainers = [ maintainers.mic92 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/nixbang/default.nix b/nixpkgs/pkgs/development/tools/misc/nixbang/default.nix
new file mode 100644
index 000000000000..bcddf4479eb0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/nixbang/default.nix
@@ -0,0 +1,21 @@
+{ lib, pythonPackages, fetchFromGitHub }:
+
+pythonPackages.buildPythonApplication rec {
+  pname = "nixbang";
+  version = "0.1.2";
+  namePrefix = "";
+
+  src = fetchFromGitHub {
+    owner = "madjar";
+    repo = "nixbang";
+    rev = version;
+    sha256 = "1kzk53ry60i814wa6n9y2ni0bcxhbi9p8gdv10b974gf23mhi8vc";
+  };
+
+  meta = {
+    homepage = "https://github.com/madjar/nixbang";
+    description = "A special shebang to run scripts in a nix-shell";
+    maintainers = [ lib.maintainers.madjar ];
+    platforms = lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/nrfutil/default.nix b/nixpkgs/pkgs/development/tools/misc/nrfutil/default.nix
new file mode 100644
index 000000000000..e0b65b4ccc75
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/nrfutil/default.nix
@@ -0,0 +1,55 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, python3
+}:
+
+with python3.pkgs;
+
+buildPythonApplication rec {
+  pname = "nrfutil";
+  version = "6.1.7";
+
+  src = fetchFromGitHub {
+    owner = "NordicSemiconductor";
+    repo = "pc-nrfutil";
+    rev = "refs/tags/v${version}";
+    sha256 = "sha256-WiXqeQObhXszDcLxJN8ABd2ZkxsOUvtZQSVP8cYlT2M=";
+  };
+
+  propagatedBuildInputs = [
+    click
+    crcmod
+    ecdsa
+    libusb1
+    intelhex
+    pc-ble-driver-py
+    piccata
+    protobuf
+    pyserial
+    pyspinel
+    pyyaml
+    tqdm
+  ];
+
+  nativeCheckInputs = [
+    behave
+    nose
+  ];
+
+  # Workaround: pythonRelaxDepsHook doesn't work for this.
+  postPatch = ''
+    mkdir test-reports
+    substituteInPlace requirements.txt \
+      --replace "libusb1==1.9.3" "libusb1" \
+      --replace "protobuf >=3.17.3, < 4.0.0" "protobuf"
+  '';
+
+  meta = with lib; {
+    description = "Device Firmware Update tool for nRF chips";
+    homepage = "https://github.com/NordicSemiconductor/pc-nrfutil";
+    license = licenses.unfreeRedistributable;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ gebner ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/nxpmicro-mfgtools/default.nix b/nixpkgs/pkgs/development/tools/misc/nxpmicro-mfgtools/default.nix
new file mode 100644
index 000000000000..78a04adde797
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/nxpmicro-mfgtools/default.nix
@@ -0,0 +1,59 @@
+{ lib, stdenv
+, fetchFromGitHub
+, cmake
+, pkg-config
+, bzip2
+, installShellFiles
+, libusb1
+, libzip
+, openssl
+, zstd
+}:
+
+stdenv.mkDerivation rec {
+  pname = "nxpmicro-mfgtools";
+  version = "1.5.139";
+
+  src = fetchFromGitHub {
+    owner = "nxp-imx";
+    repo = "mfgtools";
+    rev = "uuu_${version}";
+    sha256 = "sha256-t5usUGbcdLQlqPpZkNDeGncka9VfkpO7U933Kw/Sm7U=";
+  };
+
+  nativeBuildInputs = [ cmake pkg-config installShellFiles ];
+
+  buildInputs = [ bzip2 libusb1 libzip openssl zstd ];
+
+  preConfigure = "echo ${version} > .tarball-version";
+
+  postInstall = ''
+    # rules printed by the following invocation are static,
+    # they come from hardcoded configs in libuuu/config.cpp:48
+    $out/bin/uuu -udev > udev-rules 2>stderr.txt
+    rules_file="$(cat stderr.txt|grep '1: put above udev run into'|sed 's|^.*/||')"
+    install -D udev-rules "$out/lib/udev/rules.d/$rules_file"
+    installShellCompletion --cmd uuu \
+      --bash ../snap/local/bash-completion/universal-update-utility
+  '';
+
+  meta = with lib; {
+    description = "Freescale/NXP I.MX chip image deploy tools";
+    longDescription = ''
+      UUU (Universal Update Utility) is a command line tool, evolved out of
+      MFGTools (aka MFGTools v3).
+
+      One of the main purposes is to upload images to I.MX SoC's using at least
+      their boot ROM.
+
+      With time, the need for an update utility portable to Linux and Windows
+      increased. UUU has the same usage on both Windows and Linux. It means the same
+      script works on both OS.
+    '';
+    homepage = "https://github.com/NXPmicro/mfgtools";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ bmilanov jraygauthier ];
+    mainProgram = "uuu";
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/objconv/default.nix b/nixpkgs/pkgs/development/tools/misc/objconv/default.nix
new file mode 100644
index 000000000000..ec0f5a367d1c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/objconv/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, fetchurl, unzip }:
+
+stdenv.mkDerivation rec {
+  pname = "objconv";
+  version = "2.54";
+
+  src = fetchurl {
+    # Versioned archive of objconv sources maintained by orivej.
+    url = "https://archive.org/download/objconv/${pname}-${version}.zip";
+    sha256 = "sha256-SDwnpPHc2NyctxKROrhjCDXs36WGj8js5blaQkUibWE=";
+  };
+
+  nativeBuildInputs = [ unzip ];
+
+  outputs = [ "out" "doc" ];
+
+  unpackPhase = ''
+    mkdir -p "$name"
+    cd "$name"
+    unpackFile "$src"
+    unpackFile source.zip
+  '';
+
+  buildPhase = "c++ -o objconv -O2 *.cpp";
+
+  installPhase = ''
+    mkdir -p $out/bin $out/doc/objconv
+    mv objconv $out/bin
+    mv objconv-instructions.pdf $out/doc/objconv
+  '';
+
+  meta = with lib; {
+    description = "Object and executable file converter, modifier and disassembler";
+    homepage = "https://www.agner.org/optimize/";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ orivej vrthra ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/om4/default.nix b/nixpkgs/pkgs/development/tools/misc/om4/default.nix
new file mode 100644
index 000000000000..4425ae52fb5f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/om4/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchFromGitHub, bison, flex, lib }:
+
+stdenv.mkDerivation rec {
+  pname = "om4";
+  version = "6.7";
+
+  src = fetchFromGitHub {
+    owner = "ibara";
+    repo = "m4";
+    rev = "${pname}-${version}";
+    sha256 = "04h76hxwb5rs3ylkw1dv8k0kmkzl84ccqlwdwxb6i0x57rrqbgzx";
+  };
+
+  strictDeps = true;
+  nativeBuildInputs = [ bison flex ];
+
+  configureFlags = [ "--enable-m4" ];
+
+  meta = with lib; {
+    description = "Portable OpenBSD m4 macro processor";
+    homepage = "https://github.com/ibara/m4";
+    license = with licenses; [ bsd2 bsd3 isc publicDomain ];
+    mainProgram = "m4";
+    platforms = platforms.unix;
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/one_gadget/Gemfile b/nixpkgs/pkgs/development/tools/misc/one_gadget/Gemfile
new file mode 100644
index 000000000000..bf4378d58ce2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/one_gadget/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'one_gadget'
diff --git a/nixpkgs/pkgs/development/tools/misc/one_gadget/Gemfile.lock b/nixpkgs/pkgs/development/tools/misc/one_gadget/Gemfile.lock
new file mode 100644
index 000000000000..202e17ebdb77
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/one_gadget/Gemfile.lock
@@ -0,0 +1,17 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    bindata (2.4.15)
+    elftools (1.1.3)
+      bindata (~> 2)
+    one_gadget (1.8.1)
+      elftools (>= 1.0.2, < 1.2.0)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  one_gadget
+
+BUNDLED WITH
+   2.4.19
diff --git a/nixpkgs/pkgs/development/tools/misc/one_gadget/default.nix b/nixpkgs/pkgs/development/tools/misc/one_gadget/default.nix
new file mode 100644
index 000000000000..6ad2c909c39a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/one_gadget/default.nix
@@ -0,0 +1,23 @@
+{ lib, binutils, bundlerApp, bundlerUpdateScript, makeWrapper }:
+
+bundlerApp {
+  pname = "one_gadget";
+  gemdir = ./.;
+  exes = [ "one_gadget" ];
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postBuild = ''
+    wrapProgram $out/bin/one_gadget --prefix PATH : ${binutils}/bin
+  '';
+
+  passthru.updateScript = bundlerUpdateScript "one_gadget";
+
+  meta = with lib; {
+    description = "The best tool for finding one gadget RCE in libc.so.6";
+    homepage    = "https://github.com/david942j/one_gadget";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ artemist nicknovitski ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/one_gadget/gemset.nix b/nixpkgs/pkgs/development/tools/misc/one_gadget/gemset.nix
new file mode 100644
index 000000000000..98227bdbe7e5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/one_gadget/gemset.nix
@@ -0,0 +1,34 @@
+{
+  bindata = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "04y4zgh4bbcb8wmkxwfqg4saky1d1f3xw8z6yk543q13h8ky8rz5";
+      type = "gem";
+    };
+    version = "2.4.15";
+  };
+  elftools = {
+    dependencies = ["bindata"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0p96wj4sz3sfv9yxyl8z530554bkbf82vj24w6x7yf91qa1p8z6i";
+      type = "gem";
+    };
+    version = "1.1.3";
+  };
+  one_gadget = {
+    dependencies = ["elftools"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0dwsmjhr9i8gwwbbpiyddbhcx74cvqqk90a5l8zbsjhjfs679irc";
+      type = "gem";
+    };
+    version = "1.8.1";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/opengrok/default.nix b/nixpkgs/pkgs/development/tools/misc/opengrok/default.nix
new file mode 100644
index 000000000000..a2ade07c21c4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/opengrok/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchurl, jre, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "opengrok";
+  version = "1.13.2";
+
+  # binary distribution
+  src = fetchurl {
+    url = "https://github.com/oracle/opengrok/releases/download/${version}/${pname}-${version}.tar.gz";
+    hash = "sha256-Er6f1KgMZ4e/o3TJkw6z96rxBGQ/KEc9gGI2W6m+b8U=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out
+    cp -a * $out/
+    makeWrapper ${jre}/bin/java $out/bin/opengrok \
+      --add-flags "-jar $out/lib/opengrok.jar"
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Source code search and cross reference engine";
+    homepage = "https://opengrok.github.io/OpenGrok/";
+    changelog = "https://github.com/oracle/opengrok/releases/tag/${version}";
+    license = licenses.cddl;
+    maintainers = [ ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/orogene/default.nix b/nixpkgs/pkgs/development/tools/misc/orogene/default.nix
new file mode 100644
index 000000000000..3fe98a6f4353
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/orogene/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, openssl
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "orogene";
+  version = "0.3.34";
+
+  src = fetchFromGitHub {
+    owner = "orogene";
+    repo = "orogene";
+    rev = "v${version}";
+    hash = "sha256-GMWrlvZZ2xlcvcRG3u8jS8KiewHpyX0brNe4pmCpHbM=";
+    fetchSubmodules = true;
+  };
+
+  cargoHash = "sha256-I9uh8jV1hH5R/UHM3mz2/ZA7QY4O9gW5qXlVSfao0ZM=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.SystemConfiguration
+  ];
+
+  preCheck = ''
+    export CI=true
+    export HOME=$(mktemp -d)
+  '';
+
+  meta = with lib; {
+    description = "A package manager for tools that use node_modules";
+    homepage = "https://github.com/orogene/orogene";
+    changelog = "https://github.com/orogene/orogene/blob/${src.rev}/CHANGELOG.md";
+    license = with licenses; [ asl20 isc ];
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "oro";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/pahole/default.nix b/nixpkgs/pkgs/development/tools/misc/pahole/default.nix
new file mode 100644
index 000000000000..8b8d4e8c6e2f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/pahole/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, stdenv
+, fetchzip
+, pkg-config
+, libbpf
+, cmake
+, elfutils
+, zlib
+, argp-standalone
+, musl-obstack
+, nixosTests
+}:
+
+stdenv.mkDerivation rec {
+  pname = "pahole";
+  version = "1.25";
+  src = fetchzip {
+    url = "https://git.kernel.org/pub/scm/devel/pahole/pahole.git/snapshot/pahole-${version}.tar.gz";
+    hash = "sha256-s0YVT2UnMSO8jS/4XCt06wNPV4czHH6bmZRy/snO3jg=";
+  };
+
+  nativeBuildInputs = [ cmake pkg-config ];
+  buildInputs = [ elfutils zlib libbpf ]
+    ++ lib.optionals stdenv.hostPlatform.isMusl [
+    argp-standalone
+    musl-obstack
+  ];
+
+  patches = [ ./threading-reproducibility.patch ];
+
+  # Put libraries in "lib" subdirectory, not top level of $out
+  cmakeFlags = [ "-D__LIB=lib" "-DLIBBPF_EMBEDDED=OFF" ];
+
+  passthru.tests = {
+    inherit (nixosTests) bpf;
+  };
+
+  meta = with lib; {
+    homepage = "https://git.kernel.org/pub/scm/devel/pahole/pahole.git/";
+    description = "Shows, manipulates, and pretty-prints debugging information in DWARF, CTF, and BTF formats";
+    license = licenses.gpl2Only;
+
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ bosu martinetd ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/pahole/threading-reproducibility.patch b/nixpkgs/pkgs/development/tools/misc/pahole/threading-reproducibility.patch
new file mode 100644
index 000000000000..15893ce2d035
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/pahole/threading-reproducibility.patch
@@ -0,0 +1,18 @@
+diff --git a/pahole.c b/pahole.c
+index 6fc4ed6..a4e306f 100644
+--- a/pahole.c
++++ b/pahole.c
+@@ -1687,8 +1687,11 @@ static error_t pahole__options_parser(int key, char *arg,
+ 		  class_name = arg;			break;
+ 	case 'j':
+ #if _ELFUTILS_PREREQ(0, 178)
+-		  conf_load.nr_jobs = arg ? atoi(arg) :
+-					    sysconf(_SC_NPROCESSORS_ONLN) * 1.1;
++		  // Force single thread if reproducibility is desirable.
++		  if (!getenv("SOURCE_DATE_EPOCH")) {
++			  conf_load.nr_jobs = arg ? atoi(arg) :
++						    sysconf(_SC_NPROCESSORS_ONLN) * 1.1;
++		  }
+ #else
+ 		  fputs("pahole: Multithreading requires elfutils >= 0.178. Continuing with a single thread...\n", stderr);
+ #endif
diff --git a/nixpkgs/pkgs/development/tools/misc/patchelf/default.nix b/nixpkgs/pkgs/development/tools/misc/patchelf/default.nix
new file mode 100644
index 000000000000..fc71c4aa4ea4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/patchelf/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchurl }:
+
+# Note: this package is used for bootstrapping fetchurl, and thus
+# cannot use fetchpatch! All mutable patches (generated by GitHub or
+# cgit) that are needed here should be included directly in Nixpkgs as
+# files.
+
+stdenv.mkDerivation rec {
+  pname = "patchelf";
+  version = "0.15.0";
+
+  src = fetchurl {
+    url = "https://github.com/NixOS/${pname}/releases/download/${version}/${pname}-${version}.tar.bz2";
+    sha256 = "sha256-9ANtPuTY4ijewb7/8PbkbYpA6eVw4AaOOdd+YuLIvcI=";
+  };
+
+  strictDeps = true;
+
+  setupHook = [ ./setup-hook.sh ];
+
+  enableParallelBuilding = true;
+
+  # fails 8 out of 24 tests, problems when loading libc.so.6
+  doCheck = stdenv.name == "stdenv-linux"
+    # test scripts require unprefixed bintools binaries
+    # https://github.com/NixOS/patchelf/issues/417
+    && stdenv.cc.targetPrefix == "";
+
+  meta = with lib; {
+    homepage = "https://github.com/NixOS/patchelf";
+    license = licenses.gpl3Plus;
+    description = "A small utility to modify the dynamic linker and RPATH of ELF executables";
+    maintainers = [ maintainers.eelco ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/patchelf/setup-hook.sh b/nixpkgs/pkgs/development/tools/misc/patchelf/setup-hook.sh
new file mode 100644
index 000000000000..8f010a3f4d0b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/patchelf/setup-hook.sh
@@ -0,0 +1,20 @@
+# This setup hook calls patchelf to automatically remove unneeded
+# directories from the RPATH of every library or executable in every
+# output.
+
+fixupOutputHooks+=('if [ -z "${dontPatchELF-}" ]; then patchELF "$prefix"; fi')
+
+patchELF() {
+    local dir="$1"
+    [ -e "$dir" ] || return 0
+
+    echo "shrinking RPATHs of ELF executables and libraries in $dir"
+
+    local i
+    while IFS= read -r -d $'\0' i; do
+        if [[ "$i" =~ .build-id ]]; then continue; fi
+        if ! isELF "$i"; then continue; fi
+        echo "shrinking $i"
+        patchelf --shrink-rpath "$i" || true
+    done < <(find "$dir" -type f -print0)
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/patchelf/unstable.nix b/nixpkgs/pkgs/development/tools/misc/patchelf/unstable.nix
new file mode 100644
index 000000000000..a4061855d997
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/patchelf/unstable.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchurl, autoreconfHook, fetchFromGitHub, unstableGitUpdater }:
+
+stdenv.mkDerivation rec {
+  pname = "patchelf";
+  version = "unstable-2024-01-15";
+
+  src = fetchFromGitHub {
+    owner = "NixOS";
+    repo = "patchelf";
+    rev = "7c2f768bf9601268a4e71c2ebe91e2011918a70f";
+    sha256 = "sha256-PPXqKY2hJng4DBVE0I4xshv/vGLUskL7jl53roB8UdU=";
+  };
+
+  # Drop test that fails on musl (?)
+  postPatch = lib.optionalString stdenv.hostPlatform.isMusl ''
+    substituteInPlace tests/Makefile.am \
+      --replace "set-rpath-library.sh" ""
+  '';
+
+  setupHook = [ ./setup-hook.sh ];
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ ];
+
+  doCheck = !stdenv.isDarwin;
+
+  passthru = {
+    updateScript = unstableGitUpdater {
+      url = "https://github.com/NixOS/patchelf.git";
+    };
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/NixOS/patchelf";
+    license = licenses.gpl3;
+    description = "A small utility to modify the dynamic linker and RPATH of ELF executables";
+    maintainers = [ maintainers.eelco ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/patsh/default.nix b/nixpkgs/pkgs/development/tools/misc/patsh/default.nix
new file mode 100644
index 000000000000..9fabbf789db9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/patsh/default.nix
@@ -0,0 +1,51 @@
+{ lib
+, runCommand
+, rustPlatform
+, fetchFromGitHub
+, stdenv
+, coreutils
+}:
+
+let
+  # copied from flake.nix
+  # tests require extra setup with nix
+  custom = runCommand "custom" { } ''
+    mkdir -p $out/bin
+    touch $out/bin/{'foo$','foo"`'}
+    chmod +x $out/bin/{'foo$','foo"`'}
+  '';
+in
+
+rustPlatform.buildRustPackage rec {
+  pname = "patsh";
+  version = "0.2.1";
+
+  src = fetchFromGitHub {
+    owner = "nix-community";
+    repo = "patsh";
+    rev = "v${version}";
+    sha256 = "sha256-d2Br4RAlKO7Bpse8sFbIDCIYd2fYvby0ar9oIbQS2jc=";
+  };
+
+  cargoHash = "sha256-hAWMm3YjwTB8ajn3QeXEOJYmPzbbitdwyO4k/IyhlOI=";
+
+  nativeCheckInputs = [ custom ];
+
+  # see comment on `custom`
+  postPatch = ''
+    for file in tests/fixtures/*-expected.sh; do
+      substituteInPlace $file \
+        --subst-var-by cc ${stdenv.cc} \
+        --subst-var-by coreutils ${coreutils} \
+        --subst-var-by custom ${custom}
+    done
+  '';
+
+  meta = with lib; {
+    description = "A command-line tool for patching shell scripts inspired by resholve";
+    homepage = "https://github.com/nix-community/patsh";
+    changelog = "https://github.com/nix-community/patsh/blob/v${version}/CHANGELOG.md";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/perfect-hash/default.nix b/nixpkgs/pkgs/development/tools/misc/perfect-hash/default.nix
new file mode 100644
index 000000000000..71747f0d1172
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/perfect-hash/default.nix
@@ -0,0 +1,35 @@
+{ lib, python3, fetchFromGitHub }:
+python3.pkgs.buildPythonApplication rec {
+  pname = "perfect-hash";
+  version = "0.4.1";
+
+  # Archive on pypi does not contain examples, which are very helpful to
+  # understand how to use this program, so we use git source.
+  src = fetchFromGitHub {
+    owner = "ilanschnell";
+    repo = "perfect-hash";
+    rev = version;
+    sha256 = "0gkc3n613hl0q4jknrh2nm1n96j97p36q9jjgarb9d8yii9q7792";
+  };
+
+  postInstall = ''
+    mkdir -p $out/share/doc/perfect-hash
+    cp README.md $out/share/doc/perfect-hash
+    cp -r examples $out/share/doc/perfect-hash
+  '';
+
+  meta = with lib; {
+    description = "Minimal perfect hash function generator";
+    longDescription = ''
+      Generate a minimal perfect hash function for a given set of keys.
+      A given code template is filled with parameters, such that the
+      output is code which implements the hash function. Templates can
+      easily be constructed for any programming language.
+    '';
+    license = licenses.bsd3;
+    maintainers = [ maintainers.kaction ];
+
+    homepage = "https://github.com/ilanschnell/perfect-hash";
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/pest-ide-tools/default.nix b/nixpkgs/pkgs/development/tools/misc/pest-ide-tools/default.nix
new file mode 100644
index 000000000000..162817c68357
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/pest-ide-tools/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, nix-update-script
+, pkg-config
+, openssl
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "pest-ide-tools";
+  version = "0.3.6";
+  cargoSha256 = "sha256-uFcEE5Hlb0fhOH0birqeH+hOuAyZVjQOYFhoMdR8czM=";
+
+  src = fetchFromGitHub {
+    owner = "pest-parser";
+    repo = "pest-ide-tools";
+    rev = "v${version}";
+    sha256 = "sha256-SymtMdj7QVOEiSeTjmVidejFeGK8swnM6nfT7u18URs=";
+  };
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  passthru = {
+    updateScript = nix-update-script { };
+  };
+
+  meta = with lib; {
+    description = "IDE support for Pest, via the LSP.";
+    homepage = "https://pest.rs";
+    license = with licenses; [ mit asl20 ];
+    maintainers = with maintainers; [ nickhu ];
+    mainProgram = "pest-language-server";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/pkg-config/2.36.3-not-win32.patch b/nixpkgs/pkgs/development/tools/misc/pkg-config/2.36.3-not-win32.patch
new file mode 100644
index 000000000000..c1dd808e6008
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/pkg-config/2.36.3-not-win32.patch
@@ -0,0 +1,324 @@
+--- a/glib/configure.ac	2013-08-04 20:21:20.808722600 -0500
++++ b/glib/configure.ac	2013-08-04 18:30:21.852852200 -0500
+@@ -1880,7 +1880,7 @@ dnl ************************************
+ 
+ AC_MSG_CHECKING(for platform-dependent source)
+ case "$host" in
+-  *-*-cygwin*|*-*-mingw*)
++  *-*-mingw*)
+     PLATFORMDEP=gwin32.lo
+     ;;
+   *)
+@@ -2594,9 +2594,6 @@ dnl *** Win32 API libs ***
+ dnl **********************
+ 
+ case $host in
+-  *-*-cygwin*)
+-	G_LIBS_EXTRA="-luser32 -lkernel32"
+-    ;;
+   *-*-mingw*)
+ 	G_LIBS_EXTRA="-lws2_32 -lole32 -lwinmm -lshlwapi"
+     ;;
+--- a/glib/glib/gatomic.c	2013-08-04 20:21:20.907728300 -0500
++++ b/glib/glib/gatomic.c	2013-08-04 18:11:14.000000000 -0500
+@@ -464,7 +464,7 @@ gsize
+   return g_atomic_pointer_xor ((volatile gpointer *) atomic, val);
+ }
+ 
+-#elif defined (G_PLATFORM_WIN32)
++#elif defined (G_OS_WIN32)
+ 
+ #include <windows.h>
+ #if !defined(_M_AMD64) && !defined (_M_IA64) && !defined(_M_X64) && !(defined _MSC_VER && _MSC_VER <= 1200)
+--- a/glib/glib/gcharset.c	2013-08-04 20:21:20.925729300 -0500
++++ b/glib/glib/gcharset.c	2013-08-04 18:11:14.000000000 -0500
+@@ -496,7 +496,7 @@ guess_category_value (const gchar *categ
+   if ((retval != NULL) && (retval[0] != '\0'))
+     return retval;
+ 
+-#ifdef G_PLATFORM_WIN32
++#ifdef G_OS_WIN32
+   /* g_win32_getlocale() first checks for LC_ALL, LC_MESSAGES and
+    * LANG, which we already did above. Oh well. The main point of
+    * calling g_win32_getlocale() is to get the thread's locale as used
+--- a/glib/glib/gconvert.c	2013-08-04 20:21:20.933729800 -0500
++++ b/glib/glib/gconvert.c	2013-08-04 18:11:14.000000000 -0500
+@@ -33,9 +33,6 @@
+ 
+ #ifdef G_OS_WIN32
+ #include "win_iconv.c"
+-#endif
+-
+-#ifdef G_PLATFORM_WIN32
+ #define STRICT
+ #include <windows.h>
+ #undef STRICT
+@@ -1258,7 +1255,7 @@ g_locale_from_utf8 (const gchar *utf8str
+ 		      charset, "UTF-8", bytes_read, bytes_written, error);
+ }
+ 
+-#ifndef G_PLATFORM_WIN32
++#ifndef G_OS_WIN32
+ 
+ typedef struct _GFilenameCharsetCache GFilenameCharsetCache;
+ 
+@@ -1374,7 +1371,7 @@ g_get_filename_charsets (const gchar ***
+   return cache->is_utf8;
+ }
+ 
+-#else /* G_PLATFORM_WIN32 */
++#else /* G_OS_WIN32 */
+ 
+ gboolean
+ g_get_filename_charsets (const gchar ***filename_charsets) 
+@@ -1403,7 +1400,7 @@ g_get_filename_charsets (const gchar ***
+ #endif
+ }
+ 
+-#endif /* G_PLATFORM_WIN32 */
++#endif /* G_OS_WIN32 */
+ 
+ static gboolean
+ get_filename_charset (const gchar **filename_charset)
+--- a/glib/glib/gfileutils.c	2013-08-04 20:21:20.942730300 -0500
++++ b/glib/glib/gfileutils.c	2013-08-04 18:11:14.000000000 -0500
+@@ -2153,7 +2153,7 @@ g_path_skip_root (const gchar *file_name
+ {
+   g_return_val_if_fail (file_name != NULL, NULL);
+ 
+-#ifdef G_PLATFORM_WIN32
++#ifdef G_OS_WIN32
+   /* Skip \\server\share or //server/share */
+   if (G_IS_DIR_SEPARATOR (file_name[0]) &&
+       G_IS_DIR_SEPARATOR (file_name[1]) &&
+@@ -2163,7 +2163,6 @@ g_path_skip_root (const gchar *file_name
+       gchar *p;
+       p = strchr (file_name + 2, G_DIR_SEPARATOR);
+ 
+-#ifdef G_OS_WIN32
+       {
+         gchar *q;
+ 
+@@ -2171,7 +2170,6 @@ g_path_skip_root (const gchar *file_name
+         if (p == NULL || (q != NULL && q < p))
+         p = q;
+       }
+-#endif
+ 
+       if (p && p > file_name + 2 && p[1])
+         {
+--- a/glib/glib/glib.h	2013-08-04 20:21:20.949730700 -0500
++++ b/glib/glib/glib.h	2013-08-04 18:11:14.000000000 -0500
+@@ -96,7 +96,7 @@
+ #include <glib/gvariant.h>
+ #include <glib/gversion.h>
+ #include <glib/gversionmacros.h>
+-#ifdef G_PLATFORM_WIN32
++#ifdef G_OS_WIN32
+ #include <glib/gwin32.h>
+ #endif
+ 
+--- a/glib/glib/gutf8.c	2013-08-04 20:21:20.984732700 -0500
++++ b/glib/glib/gutf8.c	2013-08-04 18:11:14.000000000 -0500
+@@ -27,7 +27,7 @@
+ #endif
+ #include <string.h>
+ 
+-#ifdef G_PLATFORM_WIN32
++#ifdef G_OS_WIN32
+ #include <stdio.h>
+ #define STRICT
+ #include <windows.h>
+--- a/glib/glib/gutils.c	2013-08-04 20:21:21.015734500 -0500
++++ b/glib/glib/gutils.c	2013-08-04 18:11:14.000000000 -0500
+@@ -72,7 +72,7 @@
+ #include "garray.h"
+ #include "glibintl.h"
+ 
+-#ifdef G_PLATFORM_WIN32
++#ifdef G_OS_WIN32
+ #include "gconvert.h"
+ #include "gwin32.h"
+ #endif
+@@ -86,16 +86,13 @@
+  * These are portable utility functions.
+  */
+ 
+-#ifdef G_PLATFORM_WIN32
++#ifdef G_OS_WIN32
+ #  include <windows.h>
+ #  ifndef GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS
+ #    define GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT 2
+ #    define GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS 4
+ #  endif
+ #  include <lmcons.h>		/* For UNLEN */
+-#endif /* G_PLATFORM_WIN32 */
+-
+-#ifdef G_OS_WIN32
+ #  include <direct.h>
+ #  include <shlobj.h>
+    /* older SDK (e.g. msvc 5.0) does not have these*/
+@@ -131,7 +128,7 @@
+ #include <langinfo.h>
+ #endif
+ 
+-#ifdef G_PLATFORM_WIN32
++#ifdef G_OS_WIN32
+ 
+ gchar *
+ _glib_get_dll_directory (void)
+--- a/glib/glib/gutils.h	2013-08-04 20:21:21.067737500 -0500
++++ b/glib/glib/gutils.h	2013-08-04 18:11:14.000000000 -0500
+@@ -350,7 +350,7 @@ g_bit_storage (gulong number)
+  * On non-Windows platforms, expands to nothing.
+  */
+ 
+-#ifndef G_PLATFORM_WIN32
++#ifndef G_OS_WIN32
+ # define G_WIN32_DLLMAIN_FOR_DLL_NAME(static, dll_name)
+ #else
+ # define G_WIN32_DLLMAIN_FOR_DLL_NAME(static, dll_name)			\
+@@ -378,7 +378,7 @@ DllMain (HINSTANCE hinstDLL,						\
+ 
+ #endif	/* !G_DISABLE_DEPRECATED */
+ 
+-#endif /* G_PLATFORM_WIN32 */
++#endif /* G_OS_WIN32 */
+ 
+ G_END_DECLS
+ 
+--- a/glib/glib/gwin32.h	2013-08-04 20:21:21.081738300 -0500
++++ b/glib/glib/gwin32.h	2013-08-04 18:11:14.000000000 -0500
+@@ -33,7 +33,7 @@
+ 
+ #include <glib/gtypes.h>
+ 
+-#ifdef G_PLATFORM_WIN32
++#ifdef G_OS_WIN32
+ 
+ G_BEGIN_DECLS
+ 
+@@ -41,8 +41,6 @@ G_BEGIN_DECLS
+ #define MAXPATHLEN 1024
+ #endif
+ 
+-#ifdef G_OS_WIN32
+-
+ /*
+  * To get prototypes for the following POSIXish functions, you have to
+  * include the indicated non-POSIX headers. The functions are defined
+@@ -68,7 +66,6 @@ G_BEGIN_DECLS
+ GLIB_AVAILABLE_IN_ALL
+ gint		g_win32_ftruncate	(gint		 f,
+ 					 guint		 size);
+-#endif /* G_OS_WIN32 */
+ 
+ /* The MS setlocale uses locale names of the form "English_United
+  * States.1252" etc. We want the Unixish standard form "en", "zh_TW"
+@@ -112,7 +109,7 @@ gchar*          g_win32_locale_filename_
+ 
+ G_END_DECLS
+ 
+-#endif	 /* G_PLATFORM_WIN32 */
++#endif	 /* G_OS_WIN32 */
+ 
+ #ifdef G_OS_WIN32
+ #ifdef _WIN64
+--- a/glib/glib/libcharset/localcharset.c	2013-08-04 20:21:21.095739100 -0500
++++ b/glib/glib/libcharset/localcharset.c	2013-08-04 18:11:14.000000000 -0500
+@@ -46,10 +46,6 @@
+ #   include <locale.h>
+ #  endif
+ # endif
+-# ifdef __CYGWIN__
+-#  define WIN32_LEAN_AND_MEAN
+-#  include <windows.h>
+-# endif
+ #elif defined WIN32_NATIVE
+ # define WIN32_LEAN_AND_MEAN
+ # include <windows.h>
+@@ -111,7 +107,7 @@ _g_locale_get_charset_aliases (void)
+   cp = charset_aliases;
+   if (cp == NULL)
+     {
+-#if !(defined VMS || defined WIN32_NATIVE || defined __CYGWIN__)
++#if !(defined VMS || defined WIN32_NATIVE)
+       FILE *fp;
+       const char *dir;
+       const char *base = "charset.alias";
+@@ -237,7 +233,7 @@ _g_locale_get_charset_aliases (void)
+ 	   "DECKOREAN" "\0" "EUC-KR" "\0";
+ # endif
+ 
+-# if defined WIN32_NATIVE || defined __CYGWIN__
++# if defined WIN32_NATIVE
+       /* To avoid the troubles of installing a separate file in the same
+ 	 directory as the DLL and of retrieving the DLL's directory at
+ 	 runtime, simply inline the aliases here.  */
+@@ -292,53 +288,6 @@ _g_locale_charset_raw (void)
+   /* Most systems support nl_langinfo (CODESET) nowadays.  */
+   codeset = nl_langinfo (CODESET);
+ 
+-#  ifdef __CYGWIN__
+-  /* Cygwin 2006 does not have locales.  nl_langinfo (CODESET) always
+-     returns "US-ASCII".  As long as this is not fixed, return the suffix
+-     of the locale name from the environment variables (if present) or
+-     the codepage as a number.  */
+-  if (codeset != NULL && strcmp (codeset, "US-ASCII") == 0)
+-    {
+-      const char *locale;
+-      static char buf[2 + 10 + 1];
+-
+-      locale = getenv ("LC_ALL");
+-      if (locale == NULL || locale[0] == '\0')
+-	{
+-	  locale = getenv ("LC_CTYPE");
+-	  if (locale == NULL || locale[0] == '\0')
+-	    locale = getenv ("LANG");
+-	}
+-      if (locale != NULL && locale[0] != '\0')
+-	{
+-	  /* If the locale name contains an encoding after the dot, return
+-	     it.  */
+-	  const char *dot = strchr (locale, '.');
+-
+-	  if (dot != NULL)
+-	    {
+-	      const char *modifier;
+-
+-	      dot++;
+-	      /* Look for the possible @... trailer and remove it, if any.  */
+-	      modifier = strchr (dot, '@');
+-	      if (modifier == NULL)
+-		return dot;
+-	      if (modifier - dot < sizeof (buf))
+-		{
+-		  memcpy (buf, dot, modifier - dot);
+-		  buf [modifier - dot] = '\0';
+-		  return buf;
+-		}
+-	    }
+-	}
+-
+-      /* Woe32 has a function returning the locale's codepage as a number.  */
+-      sprintf (buf, "CP%u", GetACP ());
+-      codeset = buf;
+-    }
+-#  endif
+-
+ # else
+ 
+   /* On old systems which lack it, use setlocale or getenv.  */
+diff --git a/glib/gtypes.h b/glib/gtypes.h
+index c18e0bf..816685a 100644
+--- a/glib/glib/gtypes.h
++++ b/glib/glib/gtypes.h
+@@ -462,7 +462,7 @@ G_END_DECLS
+  * properly get exported in Windows DLLs.
+  */
+ #ifndef GLIB_VAR
+-#  ifdef G_PLATFORM_WIN32
++#  ifdef G_OS_WIN32
+ #    ifdef GLIB_STATIC_COMPILATION
+ #      define GLIB_VAR extern
+ #    else /* !GLIB_STATIC_COMPILATION */
diff --git a/nixpkgs/pkgs/development/tools/misc/pkg-config/default.nix b/nixpkgs/pkgs/development/tools/misc/pkg-config/default.nix
new file mode 100644
index 000000000000..663f3184b221
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/pkg-config/default.nix
@@ -0,0 +1,57 @@
+{ lib, stdenv, fetchurl, libiconv, vanilla ? false }:
+
+stdenv.mkDerivation rec {
+  pname = "pkg-config";
+  version = "0.29.2";
+
+  src = fetchurl {
+    url = "https://pkg-config.freedesktop.org/releases/${pname}-${version}.tar.gz";
+    sha256 = "14fmwzki1rlz8bs2p810lk6jqdxsk966d8drgsjmi54cd00rrikg";
+  };
+
+  outputs = [ "out" "man" "doc" ];
+  strictDeps = true;
+
+  # Process Requires.private properly, see
+  # http://bugs.freedesktop.org/show_bug.cgi?id=4738, migrated to
+  # https://gitlab.freedesktop.org/pkg-config/pkg-config/issues/28
+  patches = lib.optional (!vanilla) ./requires-private.patch
+    ++ lib.optional stdenv.isCygwin ./2.36.3-not-win32.patch;
+
+  # These three tests fail due to a (desired) behavior change from our ./requires-private.patch
+  postPatch = if vanilla then null else ''
+    rm -f check/check-requires-private check/check-gtk check/missing
+  '';
+
+  buildInputs = [ libiconv ];
+
+  configureFlags = [ "--with-internal-glib" ]
+    ++ lib.optionals (stdenv.isSunOS) [ "--with-libiconv=gnu" "--with-system-library-path" "--with-system-include-path" "CFLAGS=-DENABLE_NLS" ]
+       # Can't run these tests while cross-compiling
+    ++ lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform)
+       [ "glib_cv_stack_grows=no"
+         "glib_cv_uscore=no"
+         "ac_cv_func_posix_getpwuid_r=yes"
+         "ac_cv_func_posix_getgrgid_r=yes"
+       ];
+
+  env.NIX_CFLAGS_COMPILE = toString (
+    # Silence "incompatible integer to pointer conversion passing 'gsize'" when building with Clang.
+    lib.optionals stdenv.cc.isClang ["-Wno-int-conversion"]
+    # Silence fprintf format errors when building for Windows.
+    ++ lib.optionals stdenv.hostPlatform.isWindows ["-Wno-error=format"]
+  );
+
+  enableParallelBuilding = true;
+  doCheck = true;
+
+  postInstall = ''rm -f "$out"/bin/*-pkg-config''; # clean the duplicate file
+
+  meta = with lib; {
+    description = "A tool that allows packages to find out information about other packages";
+    homepage = "http://pkg-config.freedesktop.org/wiki/";
+    platforms = platforms.all;
+    license = licenses.gpl2Plus;
+    mainProgram = "pkg-config";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/pkg-config/requires-private.patch b/nixpkgs/pkgs/development/tools/misc/pkg-config/requires-private.patch
new file mode 100644
index 000000000000..d40aa9801379
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/pkg-config/requires-private.patch
@@ -0,0 +1,17 @@
+diff --git a/main.c b/main.c
+index b61ca34..5a420c2 100644
+--- a/main.c
++++ b/main.c
+@@ -602,10 +602,10 @@ main (int argc, char **argv)
+   else
+     disable_private_libs();
+ 
+-  /* honor Requires.private if any Cflags are requested or any static
++  /* honor Requires.private if any any static
+    * libs are requested */
+ 
+-  if (pkg_flags & CFLAGS_ANY || want_requires_private || want_exists ||
++  if (want_requires_private ||
+       (want_static_lib_list && (pkg_flags & LIBS_ANY)))
+     enable_requires_private();
+ 
diff --git a/nixpkgs/pkgs/development/tools/misc/planus/default.nix b/nixpkgs/pkgs/development/tools/misc/planus/default.nix
new file mode 100644
index 000000000000..9074debb2633
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/planus/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, rustPlatform
+, fetchCrate
+, installShellFiles
+, stdenv
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "planus";
+  version = "0.4.0";
+
+  src = fetchCrate {
+    pname = "planus-cli";
+    inherit version;
+    hash = "sha256-KpX4KSA2MjfRS8M0WVYpY4hoSvOOB7MUz7YKZwEGqj8=";
+  };
+
+  cargoHash = "sha256-yT/ZK5GG0rXpiaCQlQclK2iY8BXhhmiW/UDX9aL8wBQ=";
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  postInstall = lib.optionalString (stdenv.buildPlatform.canExecute stdenv.hostPlatform) ''
+    installShellCompletion --cmd planus \
+      --bash <($out/bin/planus generate-completions bash) \
+      --fish <($out/bin/planus generate-completions fish) \
+      --zsh <($out/bin/planus generate-completions zsh)
+  '';
+
+  meta = with lib; {
+    description = "An alternative compiler for flatbuffers";
+    homepage = "https://github.com/planus-org/planus";
+    changelog = "https://github.com/planus-org/planus/blob/v${version}/CHANGELOG.md";
+    license = with licenses; [ asl20 mit ];
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/pmccabe/default.nix b/nixpkgs/pkgs/development/tools/misc/pmccabe/default.nix
new file mode 100644
index 000000000000..1fd58fd14a2f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/pmccabe/default.nix
@@ -0,0 +1,48 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "pmccabe";
+  version = "2.6";
+
+  src = fetchurl {
+    url = "http://http.debian.net/debian/pool/main/p/pmccabe/pmccabe_${version}.tar.gz";
+    sha256 = "0a3h1b9fb87c82d5fbql5lc4gp338pa5s9i66dhw7zk8jdygx474";
+  };
+
+  patches = [
+    ./getopt_on_darwin.patch
+  ];
+
+  configurePhase = ''
+    sed -i -r Makefile \
+      -e 's,/usr/,/,g' \
+      -e "s,^DESTDIR =.*$,DESTDIR = $out," \
+      -e "s,^INSTALL = install.*$,INSTALL = install," \
+      -e "s,^all:.*$,all: \$(PROGS),"
+    '';
+
+  checkPhase = "make test";
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "McCabe-style function complexity and line counting for C and C++";
+    homepage = "https://people.debian.org/~bame/pmccabe/";
+    license = licenses.gpl2Plus;
+
+    longDescription = ''
+      pmccabe calculates McCabe-style cyclomatic complexity for C and
+      C++ source code.  Per-function complexity may be used for
+      spotting likely trouble spots and for estimating testing
+      effort.
+
+      pmccabe also includes a non-commented line counter, decomment which
+      only removes comments from source code; codechanges, a program to
+      calculate the amount of change which has occurred between two source
+      trees or files; and vifn, to invoke vi given a function name rather
+      than a file name.
+    '';
+    maintainers = with maintainers; [ peterhoeg ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/pmccabe/getopt_on_darwin.patch b/nixpkgs/pkgs/development/tools/misc/pmccabe/getopt_on_darwin.patch
new file mode 100644
index 000000000000..534d6c1d6ef7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/pmccabe/getopt_on_darwin.patch
@@ -0,0 +1,15 @@
+diff --git a/decomment.c b/decomment.c
+index 400707a..aea29fd 100644
+--- a/decomment.c
++++ b/decomment.c
+@@ -11,6 +11,10 @@
+ #include "getopt.h"
+ #endif
+ 
++#ifdef __APPLE__
++#include "getopt.h"
++#endif
++
+ #ifdef NEED_OPTIND
+ extern int optind;
+ #endif
diff --git a/nixpkgs/pkgs/development/tools/misc/polylith/default.nix b/nixpkgs/pkgs/development/tools/misc/polylith/default.nix
new file mode 100644
index 000000000000..351e07b885d8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/polylith/default.nix
@@ -0,0 +1,52 @@
+{ lib, stdenv, fetchurl, jdk, runtimeShell }:
+
+stdenv.mkDerivation rec {
+  pname = "polylith";
+  version = "0.2.18";
+
+  src = fetchurl {
+    url = "https://github.com/polyfy/polylith/releases/download/v${version}/poly-${version}.jar";
+    sha256 = "sha256-loSv316OV8EjTw65yhSpaYWObs/45k9Xsa+m3cYgNr4=";
+  };
+
+  dontUnpack = true;
+
+  passAsFile = [ "polyWrapper" ];
+  polyWrapper = ''
+    #!${runtimeShell}
+    ARGS=""
+    while [ "$1" != "" ] ; do
+      ARGS="$ARGS $1"
+      shift
+    done
+    exec "${jdk}/bin/java" "-jar" "${src}" $ARGS
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    cp "$polyWrapperPath" $out/bin/poly
+    chmod a+x $out/bin/poly
+
+    runHook postInstall
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+
+    $out/bin/poly help | fgrep -q '${version}'
+
+    runHook postInstallCheck
+  '';
+
+  meta = with lib; {
+    description = "A tool used to develop Polylith based architectures in Clojure";
+    homepage = "https://github.com/polyfy/polylith";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.epl10;
+    maintainers = with maintainers; [ ericdallo jlesquembre ];
+    platforms = jdk.meta.platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/prelink/default.nix b/nixpkgs/pkgs/development/tools/misc/prelink/default.nix
new file mode 100644
index 000000000000..d5c742841190
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/prelink/default.nix
@@ -0,0 +1,46 @@
+{ stdenv
+, lib
+, fetchgit
+, autoreconfHook
+, libelf
+, libiberty
+}:
+
+stdenv.mkDerivation rec {
+  pname = "prelink";
+  version = "unstable-2019-06-24";
+
+  src = fetchgit {
+    url = "https://git.yoctoproject.org/git/prelink-cross";
+    branchName = "cross_prelink";
+    rev = "f9975537dbfd9ade0fc813bd5cf5fcbe41753a37";
+    sha256 = "sha256-O9/oZooLRyUBBZX3SFcB6LFMmi2vQqkUlqtZnrq5oZc=";
+  };
+
+  strictDeps = true;
+
+  configurePlatforms = [ "build" "host" ];
+
+  nativeBuildInputs = [
+    autoreconfHook
+  ];
+
+  buildInputs = [
+    stdenv.cc.libc
+    libelf
+    libiberty
+  ];
+
+  # most tests fail
+  doCheck = false;
+
+  enableParallelBuilding = true;
+
+  meta = with lib;{
+    description = "ELF prelinking utility to speed up dynamic linking";
+    homepage = "https://wiki.yoctoproject.org/wiki/Cross-Prelink";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ artturin ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/premake/3.nix b/nixpkgs/pkgs/development/tools/misc/premake/3.nix
new file mode 100644
index 000000000000..c05581f5591a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/premake/3.nix
@@ -0,0 +1,27 @@
+{lib, stdenv, fetchurl, unzip}:
+
+stdenv.mkDerivation rec {
+  pname = "premake";
+  version  = "3.7";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/sourceforge/premake/premake-src-${version}.zip";
+    sha256 = "b59841a519e75d5b6566848a2c5be2f91455bf0cc6ae4d688fcbd4c40db934d5";
+  };
+
+  nativeBuildInputs = [ unzip ];
+
+  installPhase = ''
+    install -Dm755 bin/premake $out/bin/premake
+  '';
+
+  premake_cmd = "premake";
+  setupHook = ./setup-hook.sh;
+
+  meta = {
+    homepage = "https://premake.github.io/";
+    description = "A simple build configuration and project generation tool using lua";
+    license = lib.licenses.bsd3;
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/premake/5.nix b/nixpkgs/pkgs/development/tools/misc/premake/5.nix
new file mode 100644
index 000000000000..a42d4c1a7b6e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/premake/5.nix
@@ -0,0 +1,51 @@
+{ lib, stdenv, fetchFromGitHub, libuuid, cacert, Foundation, readline }:
+
+stdenv.mkDerivation rec {
+  pname = "premake5";
+  version = "5.0.0-beta2";
+
+  src = fetchFromGitHub {
+    owner = "premake";
+    repo = "premake-core";
+    rev = "v${version}";
+    sha256 = "sha256-2R5gq4jaQsp8Ny1oGuIYkef0kn2UG9jMf20vq0714oY=";
+  };
+
+  buildInputs = [ libuuid ] ++ lib.optionals stdenv.isDarwin [ Foundation readline ];
+
+  patches = [ ./no-curl-ca.patch ];
+  postPatch = ''
+    substituteInPlace contrib/curl/premake5.lua \
+      --replace "ca = nil" "ca = '${cacert}/etc/ssl/certs/ca-bundle.crt'"
+  '' + lib.optionalString stdenv.isDarwin ''
+    substituteInPlace premake5.lua \
+      --replace -mmacosx-version-min=10.4 -mmacosx-version-min=10.5
+  '' + lib.optionalString stdenv.hostPlatform.isStatic ''
+    substituteInPlace \
+      binmodules/example/premake5.lua \
+      binmodules/luasocket/premake5.lua \
+      --replace SharedLib StaticLib
+  '';
+
+  buildPhase =
+    if stdenv.isDarwin then ''
+       make -f Bootstrap.mak osx
+    '' else ''
+       make -f Bootstrap.mak linux
+    '';
+
+  installPhase = ''
+    install -Dm755 bin/release/premake5 $out/bin/premake5
+  '';
+
+  premake_cmd = "premake5";
+  setupHook = ./setup-hook.sh;
+
+  meta = {
+    homepage = "https://premake.github.io";
+    description = "A simple build configuration and project generation tool using lua";
+    license = lib.licenses.bsd3;
+    platforms = lib.platforms.darwin ++ lib.platforms.linux;
+    broken = stdenv.isDarwin && stdenv.isAarch64;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/premake/default.nix b/nixpkgs/pkgs/development/tools/misc/premake/default.nix
new file mode 100644
index 000000000000..e3c4aef87bd3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/premake/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchurl, unzip }:
+
+stdenv.mkDerivation rec {
+  pname = "premake";
+  version  = "4.3";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/premake/premake-${version}-src.zip";
+    sha256 = "1017rd0wsjfyq2jvpjjhpszaa7kmig6q1nimw76qx3cjz2868lrn";
+  };
+
+  nativeBuildInputs = [ unzip ];
+
+  buildPhase = ''
+    make -C build/gmake.unix/
+  '';
+
+  installPhase = ''
+    install -Dm755 bin/release/premake4 $out/bin/premake4
+  '';
+
+  premake_cmd = "premake4";
+  setupHook = ./setup-hook.sh;
+
+  meta = with lib; {
+    description = "A simple build configuration and project generation tool using lua";
+    homepage = "https://premake.github.io/";
+    license = lib.licenses.bsd3;
+    maintainers = [ maintainers.bjornfor ];
+    mainProgram = "premake4";
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/premake/no-curl-ca.patch b/nixpkgs/pkgs/development/tools/misc/premake/no-curl-ca.patch
new file mode 100644
index 000000000000..a1c9c1cfa18e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/premake/no-curl-ca.patch
@@ -0,0 +1,36 @@
+From a26e36d55cd2447488e01b2ff4ac65e2596862cd Mon Sep 17 00:00:00 2001
+From: Ellie Hermaszewska <git@monoid.al>
+Date: Mon, 3 Oct 2022 16:50:33 +0800
+Subject: [PATCH] Do not set CURL_CA_BUNDLE
+
+---
+ contrib/curl/premake5.lua | 13 -------------
+ 1 file changed, 13 deletions(-)
+
+diff --git a/contrib/curl/premake5.lua b/contrib/curl/premake5.lua
+index 474f5cfa..553bbd02 100644
+--- a/contrib/curl/premake5.lua
++++ b/contrib/curl/premake5.lua
+@@ -32,19 +32,6 @@ project "curl-lib"
+ 
+ 		-- find the location of the ca bundle
+ 		local ca = nil
+-		for _, f in ipairs {
+-			"/etc/ssl/certs/ca-certificates.crt",
+-			"/etc/pki/tls/certs/ca-bundle.crt",
+-			"/usr/share/ssl/certs/ca-bundle.crt",
+-			"/usr/local/share/certs/ca-root.crt",
+-			"/usr/local/share/certs/ca-root-nss.crt",
+-			"/etc/certs/ca-certificates.crt",
+-			"/etc/ssl/cert.pem" } do
+-			if os.isfile(f) then
+-				ca = f
+-				break
+-			end
+-		end
+ 		if ca then
+ 			defines { 'CURL_CA_BUNDLE="' .. ca .. '"' }
+ 		end
+-- 
+2.37.2
+
diff --git a/nixpkgs/pkgs/development/tools/misc/premake/setup-hook.sh b/nixpkgs/pkgs/development/tools/misc/premake/setup-hook.sh
new file mode 100644
index 000000000000..6e65e9e8c73f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/premake/setup-hook.sh
@@ -0,0 +1,19 @@
+premakeConfigurePhase() {
+    runHook preConfigure
+
+    local flagsArray=(
+        ${premakefile:+--file=$premakefile}
+        $premakeFlags ${premakeFlagsArray[@]}
+        ${premakeBackend:-gmake}
+    )
+
+    echoCmd 'configure flags' "${flagsArray[@]}"
+
+    @premake_cmd@ "${flagsArray[@]}"
+
+    runHook postConfigure
+}
+
+if [ -z "${configurePhase-}" ]; then
+    configurePhase=premakeConfigurePhase
+fi
diff --git a/nixpkgs/pkgs/development/tools/misc/protox/default.nix b/nixpkgs/pkgs/development/tools/misc/protox/default.nix
new file mode 100644
index 000000000000..82849b6d9478
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/protox/default.nix
@@ -0,0 +1,29 @@
+{ lib
+, rustPlatform
+, fetchCrate
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "protox";
+  version = "0.5.0";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-U9+7k7dQ6YFfsKMfFMg34g42qLvn+mcSRlAAys3eXNo=";
+  };
+
+  cargoHash = "sha256-sNOw19gxj+cEctxhXNWI8u15VJYlN8nSNl6Ha9sB/eE=";
+
+  buildFeatures = [ "bin" ];
+
+  # tests are not included in the crate source
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A rust implementation of the protobuf compiler";
+    homepage = "https://github.com/andrewhickman/protox";
+    changelog = "https://github.com/andrewhickman/protox/blob/${version}/CHANGELOG.md";
+    license = with licenses; [ asl20 mit ];
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/ptags/default.nix b/nixpkgs/pkgs/development/tools/misc/ptags/default.nix
new file mode 100644
index 000000000000..8af08bd8311f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/ptags/default.nix
@@ -0,0 +1,41 @@
+{ fetchFromGitHub
+, cargo
+, ctags
+, lib
+, makeWrapper
+, rustPlatform
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "ptags";
+  version = "0.3.5";
+
+  src = fetchFromGitHub {
+    owner = "dalance";
+    repo = "ptags";
+    rev = "v${version}";
+    sha256 = "sha256-bxp38zWufqS6PZqhw8X5HR5zMRcwH58MuZaJmDRuiys=";
+  };
+
+  cargoHash = "sha256-Se4q4G3hzXIHHSY2YxeRHxU6+wnqR9bfrIQSOagFYZE=";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postInstall = ''
+    # `ctags` must be accessible in `PATH` for `ptags` to work.
+    wrapProgram "$out/bin/ptags" \
+      --prefix PATH : "${lib.makeBinPath [ ctags ]}"
+  '';
+
+  # Sanity check.
+  checkPhase = ''
+    $releaseDir/ptags --help > /dev/null
+  '';
+
+  meta = with lib; {
+    description = "A parallel universal-ctags wrapper for git repository";
+    homepage = "https://github.com/dalance/ptags";
+    maintainers = with maintainers; [ pamplemousse ];
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/pwndbg/default.nix b/nixpkgs/pkgs/development/tools/misc/pwndbg/default.nix
new file mode 100644
index 000000000000..d80fa230c8a4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/pwndbg/default.nix
@@ -0,0 +1,62 @@
+{ lib
+, stdenv
+, python3
+, fetchFromGitHub
+, makeWrapper
+, gdb
+}:
+
+let
+  pythonPath = with python3.pkgs; makePythonPath [
+    capstone
+    future
+    psutil
+    pwntools
+    pycparser
+    pyelftools
+    pygments
+    unicorn
+    rpyc
+  ];
+  binPath = lib.makeBinPath ([
+    python3.pkgs.pwntools   # ref: https://github.com/pwndbg/pwndbg/blob/2022.12.19/pwndbg/wrappers/checksec.py#L8
+  ] ++ lib.optionals stdenv.isLinux [
+    python3.pkgs.ropper     # ref: https://github.com/pwndbg/pwndbg/blob/2022.12.19/pwndbg/commands/ropper.py#L30
+    python3.pkgs.ropgadget  # ref: https://github.com/pwndbg/pwndbg/blob/2022.12.19/pwndbg/commands/rop.py#L32
+  ]);
+
+in stdenv.mkDerivation rec {
+  pname = "pwndbg";
+  version = "2022.12.19";
+  format = "other";
+
+  src = fetchFromGitHub {
+    owner = "pwndbg";
+    repo = "pwndbg";
+    rev = version;
+    sha256 = "sha256-pyY2bMasd6GaJZZjLF48SvkKUBw3XfVa0g3Q0LiEi4k=";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    mkdir -p $out/share/pwndbg
+    cp -r *.py pwndbg gdb-pt-dump $out/share/pwndbg
+    chmod +x $out/share/pwndbg/gdbinit.py
+    makeWrapper ${gdb}/bin/gdb $out/bin/pwndbg \
+      --add-flags "-q -x $out/share/pwndbg/gdbinit.py" \
+      --prefix PATH : ${binPath} \
+      --set NIX_PYTHONPATH ${pythonPath}
+  '';
+
+  meta = with lib; {
+    description = "Exploit Development and Reverse Engineering with GDB Made Easy";
+    homepage = "https://github.com/pwndbg/pwndbg";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ mic92 patryk4815 ];
+    # not supported on aarch64-darwin see: https://inbox.sourceware.org/gdb/3185c3b8-8a91-4beb-a5d5-9db6afb93713@Spark/
+    broken = stdenv.isDarwin && stdenv.isAarch64;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/pwninit/default.nix b/nixpkgs/pkgs/development/tools/misc/pwninit/default.nix
new file mode 100644
index 000000000000..92cfa6f4fcb0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/pwninit/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, openssl
+, elfutils
+, makeBinaryWrapper
+, pkg-config
+, xz
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "pwninit";
+  version = "3.3.1";
+
+  src = fetchFromGitHub {
+    owner = "io12";
+    repo = "pwninit";
+    rev = version;
+    sha256 = "sha256-tbZS7PdRFvO2ifoHA/w3cSPfqqHrLeLHAg6V8oG9gVE=";
+  };
+
+  buildInputs = [ openssl xz ] ++ lib.optionals stdenv.isDarwin [ Security ];
+  nativeBuildInputs = [ pkg-config makeBinaryWrapper ];
+  postInstall = ''
+    wrapProgram $out/bin/pwninit \
+      --prefix PATH : "${lib.getBin elfutils}/bin"
+  '';
+  doCheck = false; # there are no tests to run
+
+  cargoHash = "sha256-J2uQoqStBl+qItaXWi17H/IailZ7P4YzhLNs17BY92Q=";
+
+  meta = {
+    description = "Automate starting binary exploit challenges";
+    homepage = "https://github.com/io12/pwninit";
+    license = lib.licenses.mit;
+    maintainers = [ lib.maintainers.scoder12 ];
+    platforms = lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/python-launcher/default.nix b/nixpkgs/pkgs/development/tools/misc/python-launcher/default.nix
new file mode 100644
index 000000000000..c1d07cf0c761
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/python-launcher/default.nix
@@ -0,0 +1,28 @@
+{ lib, rustPlatform, fetchFromGitHub, python3 }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "python-launcher";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "brettcannon";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1r2pmli4jsdjag9zsgd9q1qlj3hxxjj2bni6yybjh1a10fcqxzzv";
+  };
+
+  cargoSha256 = "sha256-2lgWybEPi6HEUMYuGDRWMjWoc94CrFHPP5IeKUjj0q4=";
+
+  nativeCheckInputs = [ python3 ];
+
+  useNextest = true;
+
+  meta = with lib; {
+    description = "An implementation of the `py` command for Unix-based platforms";
+    homepage = "https://github.com/brettcannon/python-launcher";
+    changelog = "https://github.com/brettcannon/python-launcher/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "py";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/qtspim/default.nix b/nixpkgs/pkgs/development/tools/misc/qtspim/default.nix
new file mode 100644
index 000000000000..1ef63f1a431d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/qtspim/default.nix
@@ -0,0 +1,55 @@
+{ lib, stdenv, fetchsvn, wrapQtAppsHook, qtbase, qttools, qmake, bison, flex, ... }:
+stdenv.mkDerivation rec {
+  pname = "qtspim";
+  version = "9.1.23";
+
+  src = fetchsvn {
+    url = "https://svn.code.sf.net/p/spimsimulator/code/";
+    rev = "r749";
+    sha256 = "0iazl7mlcilrdbw8gb98v868a8ldw2lmkn1xs8hnfvr93l6aj0rp";
+  };
+
+  postPatch = ''
+    cd QtSpim
+
+    substituteInPlace QtSpim.pro --replace /usr/lib/qtspim/lib $out/lib
+    substituteInPlace menu.cpp \
+      --replace /usr/lib/qtspim/bin/assistant ${qttools.dev}/bin/assistant \
+      --replace /usr/lib/qtspim/help/qtspim.qhc $out/share/help/qtspim.qhc
+    substituteInPlace ../Setup/qtspim_debian_deployment/qtspim.desktop \
+      --replace /usr/bin/qtspim qtspim \
+      --replace /usr/lib/qtspim/qtspim.png qtspim
+  '';
+
+  nativeBuildInputs = [ wrapQtAppsHook qttools qmake bison flex ];
+  buildInputs = [ qtbase ];
+  QT_PLUGIN_PATH = "${qtbase}/${qtbase.qtPluginPrefix}";
+
+  qmakeFlags = [
+    "QtSpim.pro"
+    "-spec"
+    "linux-g++"
+    "CONFIG+=release"
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -D QtSpim $out/bin/qtspim
+    install -D ../Setup/qtspim_debian_deployment/copyright $out/share/licenses/qtspim/copyright
+    install -D ../Setup/qtspim_debian_deployment/qtspim.desktop $out/share/applications/qtspim.desktop
+    install -D ../Setup/NewIcon48x48.png $out/share/icons/hicolor/48x48/apps/qtspim.png
+    install -D ../Setup/NewIcon256x256.png $out/share/icons/hicolor/256x256/apps/qtspim.png
+    cp -r help $out/share/help
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "New user interface for spim, a MIPS simulator";
+    homepage = "https://spimsimulator.sourceforge.net/";
+    license = licenses.bsdOriginal;
+    maintainers = with maintainers; [ emilytrau ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/regex-cli/default.nix b/nixpkgs/pkgs/development/tools/misc/regex-cli/default.nix
new file mode 100644
index 000000000000..4ce731042589
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/regex-cli/default.nix
@@ -0,0 +1,23 @@
+{ lib
+, rustPlatform
+, fetchCrate
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "regex-cli";
+  version = "0.2.0";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-Uo1y3L4l/Ik//NoBLsCqvQmC7ZGaSt0XzT1wDGCoU4U=";
+  };
+
+  cargoHash = "sha256-O0KAY9XeP+LFcvAwO5SbF5yMHU1KZ77UdkAGAcx1hHc=";
+
+  meta = with lib; {
+    description = "A command line tool for debugging, ad hoc benchmarking and generating regular expressions";
+    homepage = "https://github.com/rust-lang/regex/tree/master/regex-cli";
+    license = with licenses; [ asl20 mit ];
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/remarkable/remarkable-toolchain/default.nix b/nixpkgs/pkgs/development/tools/misc/remarkable/remarkable-toolchain/default.nix
new file mode 100644
index 000000000000..2dba7768cf8c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/remarkable/remarkable-toolchain/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchurl, libarchive, python3, file, which }:
+
+stdenv.mkDerivation rec {
+  pname = "remarkable-toolchain";
+  version = "3.1.2";
+
+  src = fetchurl {
+    url = "https://storage.googleapis.com/remarkable-codex-toolchain/codex-x86_64-cortexa9hf-neon-rm10x-toolchain-${version}.sh";
+    sha256 = "sha256-ocODUUx2pgmqxMk8J+D+OvqlSHBSay6YzcqnxC9n59w=";
+    executable = true;
+  };
+
+  nativeBuildInputs = [
+    libarchive
+    python3
+    file
+    which
+  ];
+
+  dontUnpack = true;
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p $out
+    ENVCLEANED=1 $src -y -d $out
+  '';
+
+  meta = with lib; {
+    description = "A toolchain for cross-compiling to reMarkable tablets";
+    homepage = "https://remarkable.engineering/";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ nickhu siraben ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/remarkable/remarkable2-toolchain/default.nix b/nixpkgs/pkgs/development/tools/misc/remarkable/remarkable2-toolchain/default.nix
new file mode 100644
index 000000000000..2bb5e11e2432
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/remarkable/remarkable2-toolchain/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchurl, libarchive, python3, file, which }:
+
+stdenv.mkDerivation rec {
+  pname = "remarkable2-toolchain";
+  version = "3.1.2";
+
+  src = fetchurl {
+    url = "https://storage.googleapis.com/remarkable-codex-toolchain/codex-x86_64-cortexa7hf-neon-rm11x-toolchain-${version}.sh";
+    sha256 = "sha256-JKMDRbkvoxwHiTm/o4JdLn3Mm2Ld1LyxTnCCwvnxk4c=";
+    executable = true;
+  };
+
+  nativeBuildInputs = [
+    libarchive
+    python3
+    file
+    which
+  ];
+
+  dontUnpack = true;
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p $out
+    ENVCLEANED=1 $src -y -d $out
+  '';
+
+  meta = with lib; {
+    description = "A toolchain for cross-compiling to reMarkable 2 tablets";
+    homepage = "https://remarkable.engineering/";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ tadfisher ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/replacement/default.nix b/nixpkgs/pkgs/development/tools/misc/replacement/default.nix
new file mode 100644
index 000000000000..75c5363ff672
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/replacement/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, fetchFromGitHub
+, python3Packages
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "replacement";
+  version = "0.4.4";
+
+  disabled = python3Packages.isPy27;
+
+  src = fetchFromGitHub {
+    owner = "siriobalmelli";
+    repo = "replacement";
+    rev = "v${version}";
+    sha256 = "0j4lvn3rx1kqvxcsd8nhc2lgk48jyyl7qffhlkvakhy60f9lymj3";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    ruamel-yaml
+  ];
+
+  nativeCheckInputs = with python3Packages; [
+    pytestCheckHook
+    sh
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/siriobalmelli/replacement";
+    description = "A tool to execute yaml templates and output text";
+    longDescription = ''
+        Replacement is a python utility
+        that parses a yaml template and outputs text.
+
+        A 'template' is a YAML file containing a 'replacement' object.
+
+        A 'replacement' object contains a list of blocks,
+        each of which is executed in sequence.
+
+        This tool is useful in generating configuration files,
+        static websites and the like.
+    '';
+    license = licenses.asl20;
+    maintainers = with maintainers; [ siriobalmelli ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/reviewdog/default.nix b/nixpkgs/pkgs/development/tools/misc/reviewdog/default.nix
new file mode 100644
index 000000000000..f3e6a8e8d67e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/reviewdog/default.nix
@@ -0,0 +1,29 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "reviewdog";
+  version = "0.17.0";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-zr98hzWU27d+HCKvzTch7FkpUOWkHvpuMIq2cfWNRHQ=";
+  };
+
+  vendorHash = "sha256-S5SEM6EFXI2Vig8ze5kGOCIL5bLF6CMy/TKV+/3zAjI=";
+
+  doCheck = false;
+
+  subPackages = [ "cmd/reviewdog" ];
+
+  ldflags = [ "-s" "-w" "-X github.com/reviewdog/reviewdog/commands.Version=${version}" ];
+
+  meta = with lib; {
+    description = "Automated code review tool integrated with any code analysis tools regardless of programming language";
+    homepage = "https://github.com/reviewdog/reviewdog";
+    changelog = "https://github.com/reviewdog/reviewdog/blob/v${version}/CHANGELOG.md";
+    maintainers = [ maintainers.marsam ];
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/rhai-doc/default.nix b/nixpkgs/pkgs/development/tools/misc/rhai-doc/default.nix
new file mode 100644
index 000000000000..dd07b8df9926
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/rhai-doc/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rhai-doc";
+  version = "0.2.3";
+
+  src = fetchFromGitHub {
+    owner = "rhaiscript";
+    repo = "rhai-doc";
+    rev = "v${version}";
+    hash = "sha256-GZq5C8Q95OHKftEkps4Y6X6sAc4pzSfSq3ELUW/kPWI=";
+  };
+
+  cargoHash = "sha256-dJMqaDQVSrvZPwjPFixgqRRzxPJW/f1nO+81kHwGmYU=";
+
+  meta = with lib; {
+    description = "Tool to auto-generate documentation for Rhai source code";
+    homepage = "https://github.com/rhaiscript/rhai-doc";
+    changelog = "https://github.com/rhaiscript/rhai-doc/releases/tag/${src.rev}";
+    license = with licenses; [ asl20 mit ];
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "rhai-doc";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/riff/default.nix b/nixpkgs/pkgs/development/tools/misc/riff/default.nix
new file mode 100644
index 000000000000..94096a2bc5e2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/riff/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, makeWrapper
+, pkg-config
+, openssl
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "riff";
+  version = "1.0.3";
+
+  src = fetchFromGitHub {
+    owner = "DeterminateSystems";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-ThHkEvu+lWojHmEgcrwdZDPROfxznB7vv78msyZf90A=";
+  };
+
+  cargoHash = "sha256-knA08KqjtI2FZUbllfVETxDqi/r4Gf3VuLE17JujTzc=";
+
+  nativeBuildInputs = [
+    makeWrapper
+    pkg-config
+  ];
+
+  buildInputs = [
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  postInstall = ''
+    wrapProgram $out/bin/riff --set-default RIFF_DISABLE_TELEMETRY true
+  '';
+
+  meta = with lib; {
+    description = "A tool that automatically provides external dependencies for software projects";
+    homepage = "https://riff.sh";
+    changelog = "https://github.com/DeterminateSystems/riff/releases/tag/v${version}";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/rman/default.nix b/nixpkgs/pkgs/development/tools/misc/rman/default.nix
new file mode 100644
index 000000000000..c3c044fef000
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/rman/default.nix
@@ -0,0 +1,37 @@
+{lib, stdenv, fetchurl}:
+
+stdenv.mkDerivation rec {
+  pname = "rman";
+  version = "3.2";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/polyglotman/${version}/${pname}-${version}.tar.gz";
+    sha256 = "0prdld6nbkdlkcgc2r1zp13h2fh8r0mlwxx423dnc695ddlk18b8";
+  };
+
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace ginstall install \
+      --replace gcc '${stdenv.cc.targetPrefix}cc'
+  '';
+
+  makeFlags = [ "BINDIR=$(out)/bin" "MANDIR=$(out)/share/man" ];
+
+  preInstall = ''
+    mkdir -p $out/bin
+    mkdir -p $out/share/man
+  '';
+
+  hardeningDisable = [ "format" ];
+
+  env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.cc.isClang "-Wno-error=incompatible-function-pointer-types";
+
+  doCheck = false; # "check" target is probably meant to do "installcheck" or something
+
+  meta = {
+    description = "Parse formatted man pages and man page source from most flavors of UNIX and converts them to HTML, ASCII, TkMan, DocBook, and other formats";
+    license = "artistic";
+    platforms = lib.platforms.all;
+    mainProgram = "rman";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/rolespec/default.nix b/nixpkgs/pkgs/development/tools/misc/rolespec/default.nix
new file mode 100644
index 000000000000..7b084fae891e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/rolespec/default.nix
@@ -0,0 +1,46 @@
+{ lib, stdenv, fetchFromGitHub, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "rolespec";
+  version = "20161104";
+
+  src = fetchFromGitHub {
+    owner = "nickjj";
+    repo = "rolespec";
+    rev = "d9ee530cd709168882059776c482fc37f46cb743";
+    sha256 = "1jkidw6aqr0zfqwmcvlpi9qa140z2pxcfsd43xm5ikx6jcwjdrzl";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  # The default build phase (`make`) runs the test code. It's difficult to do
+  # the test in the build environment because it depends on the system package
+  # managers (apt/yum/pacman). We simply skip this phase since RoleSpec is
+  # shell based.
+  dontBuild = true;
+
+  # Wrap the program because `ROLESPEC_LIB` defaults to
+  # `/usr/local/lib/rolespec`.
+  installPhase = ''
+    make install PREFIX=$out
+    wrapProgram $out/bin/rolespec --set ROLESPEC_LIB $out/lib/rolespec
+  '';
+
+  # Since RoleSpec installs the shell script files in `lib` directory, the
+  # fixup phase shows some warnings. Disable these actions.
+  dontPatchELF = true;
+  dontStrip = true;
+
+  meta = with lib; {
+    homepage = "https://github.com/nickjj/rolespec";
+    description = "A test library for testing Ansible roles";
+    longDescription = ''
+      A shell based test library for Ansible that works both locally and over
+      Travis-CI.
+    '';
+    downloadPage = "https://github.com/nickjj/rolespec";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.dochang ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/rsass/default.nix b/nixpkgs/pkgs/development/tools/misc/rsass/default.nix
new file mode 100644
index 000000000000..1804c1301230
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/rsass/default.nix
@@ -0,0 +1,22 @@
+{ lib, rustPlatform, fetchCrate }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rsass";
+  version = "0.28.8";
+
+  src = fetchCrate {
+    pname = "rsass-cli";
+    inherit version;
+    hash = "sha256-eloTe7UHcPPmHEsGnfj3nIbZbBxSMFZdaSm5LpOh1S4=";
+  };
+
+  cargoHash = "sha256-57vqVKqwQOEB33cSzGiZwadTDi7EyBBRAS4X9Euwp5Q=";
+
+  meta = with lib; {
+    description = "Sass reimplemented in rust with nom";
+    homepage = "https://github.com/kaj/rsass";
+    changelog = "https://github.com/kaj/rsass/blob/v${version}/CHANGELOG.md";
+    license = with licenses; [ mit /* or */ asl20 ];
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/rsonpath/default.nix b/nixpkgs/pkgs/development/tools/misc/rsonpath/default.nix
new file mode 100644
index 000000000000..26b25b1b5d94
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/rsonpath/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rsonpath";
+  version = "0.8.6";
+
+  src = fetchFromGitHub {
+    owner = "v0ldek";
+    repo = "rsonpath";
+    rev = "v${version}";
+    hash = "sha256-p1cbxEvnV5vR1fznNbglHfKa53DboIFJqEWAXBLoQ+s=";
+  };
+
+  cargoHash = "sha256-rVJbrHsbSF8ZF44gmCUFxlGGhloC/kLBT5vSJjglxHE=";
+
+  cargoBuildFlags = [ "-p=rsonpath" ];
+  cargoTestFlags = cargoBuildFlags;
+
+  meta = with lib; {
+    description = "Experimental JSONPath engine for querying massive streamed datasets";
+    homepage = "https://github.com/v0ldek/rsonpath";
+    changelog = "https://github.com/v0ldek/rsonpath/blob/${src.rev}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "rq";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/rtss/default.nix b/nixpkgs/pkgs/development/tools/misc/rtss/default.nix
new file mode 100644
index 000000000000..cb5b55b8894c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/rtss/default.nix
@@ -0,0 +1,22 @@
+{ lib, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rtss";
+  version = "0.6.2";
+
+  src = fetchFromGitHub {
+    owner = "Freaky";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-WeeZsB42/4SlIaWwKvOqWiPNV5p0QOToynI8ozVVxJM=";
+  };
+
+  cargoSha256 = "sha256-aHK9KBzRbU2IYr7vOdlz0Aw4iYGjD6VedbWPE/V7AVc=";
+
+  meta = with lib; {
+    description = "Annotate output with relative durations between lines";
+    homepage = "https://github.com/Freaky/rtss";
+    license = licenses.mit;
+    maintainers = with maintainers; [ djanatyn ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/runme/default.nix b/nixpkgs/pkgs/development/tools/misc/runme/default.nix
new file mode 100644
index 000000000000..92299626ae9f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/runme/default.nix
@@ -0,0 +1,75 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+, nodejs
+, python3
+, runtimeShell
+, stdenv
+, testers
+, runme
+}:
+
+buildGoModule rec {
+  pname = "runme";
+  version = "2.2.6";
+
+  src = fetchFromGitHub {
+    owner = "stateful";
+    repo = "runme";
+    rev = "v${version}";
+    hash = "sha256-pbdY0/1ityPWI3bGjpgWZ5pKTIh8wRqquBuK7aCbeHg=";
+  };
+
+  vendorHash = "sha256-QoZzEq1aC7cjY/RVp5Z5HhSuTFf2BSYQnfg0jSaeTJU=";
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  nativeCheckInputs = [
+    nodejs
+    python3
+  ];
+
+  subPackages = [
+    "."
+  ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=github.com/stateful/runme/internal/version.BuildDate=1970-01-01T00:00:00Z"
+    "-X=github.com/stateful/runme/internal/version.BuildVersion=${version}"
+    "-X=github.com/stateful/runme/internal/version.Commit=${src.rev}"
+  ];
+
+  # tests fail to access /etc/bashrc on darwin
+  doCheck = !stdenv.isDarwin;
+
+  postPatch = ''
+    substituteInPlace testdata/{categories/basic,runall/basic,script/basic}.txtar \
+      --replace /bin/bash "${runtimeShell}"
+  '';
+
+  postInstall = lib.optionalString (stdenv.buildPlatform.canExecute stdenv.hostPlatform) ''
+    installShellCompletion --cmd runme \
+      --bash <($out/bin/runme completion bash) \
+      --fish <($out/bin/runme completion fish) \
+      --zsh <($out/bin/runme completion zsh)
+  '';
+
+  passthru.tests = {
+    version = testers.testVersion {
+      package = runme;
+    };
+  };
+
+  meta = with lib; {
+    description = "Execute commands inside your runbooks, docs, and READMEs";
+    homepage = "https://runme.dev";
+    changelog = "https://github.com/stateful/runme/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/rustywind/default.nix b/nixpkgs/pkgs/development/tools/misc/rustywind/default.nix
new file mode 100644
index 000000000000..5fe1e15b8fa5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/rustywind/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rustywind";
+  version = "0.21.0";
+
+  src = fetchFromGitHub {
+    owner = "avencera";
+    repo = "rustywind";
+    rev = "v${version}";
+    hash = "sha256-gcSpifeOWq9kKmOqyO02DbcvR9tyTlE2kVkezpy7D5k=";
+  };
+
+  cargoHash = "sha256-m++IeB0XvfeARkh+yO9WQtc7luz+ThGD5niwwOPobKY=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  meta = with lib; {
+    description = "CLI for organizing Tailwind CSS classes";
+    homepage = "https://github.com/avencera/rustywind";
+    changelog = "https://github.com/avencera/rustywind/blob/${src.rev}/CHANGELOG.md";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/saleae-logic-2/default.nix b/nixpkgs/pkgs/development/tools/misc/saleae-logic-2/default.nix
new file mode 100644
index 000000000000..ce77855b419e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/saleae-logic-2/default.nix
@@ -0,0 +1,72 @@
+{ lib, fetchurl, makeDesktopItem, appimageTools }:
+let
+  name = "saleae-logic-2";
+  version = "2.4.13";
+  src = fetchurl {
+    url = "https://downloads.saleae.com/logic2/Logic-${version}-linux-x64.AppImage";
+    hash = "sha256-0GIZQKQDY3arDUlxjQKWOHDB3j76xVwkx5H+8q+d0Rc=";
+  };
+  desktopItem = makeDesktopItem {
+    inherit name;
+    exec = name;
+    icon = "Logic";
+    comment = "Software for Saleae logic analyzers";
+    desktopName = "Saleae Logic";
+    genericName = "Logic analyzer";
+    categories = [ "Development" ];
+  };
+in
+appimageTools.wrapType2 {
+  inherit name src;
+
+  extraInstallCommands =
+    let
+      appimageContents = appimageTools.extractType2 { inherit name src; };
+    in
+      ''
+        mkdir -p $out/etc/udev/rules.d
+        cp ${appimageContents}/resources/linux-x64/99-SaleaeLogic.rules $out/etc/udev/rules.d/
+        mkdir -p $out/share/pixmaps
+        ln -s ${desktopItem}/share/applications $out/share/
+        cp ${appimageContents}/usr/share/icons/hicolor/256x256/apps/Logic.png $out/share/pixmaps/Logic.png
+      '';
+
+  extraPkgs = pkgs: with pkgs; [
+    wget
+    unzip
+    glib
+    xorg.libX11
+    xorg.libxcb
+    xorg.libXcomposite
+    xorg.libXcursor
+    xorg.libXdamage
+    xorg.libXext
+    xorg.libXfixes
+    xorg.libXi
+    xorg.libXrender
+    xorg.libXtst
+    nss
+    nspr
+    dbus
+    gdk-pixbuf
+    gtk3
+    pango
+    atk
+    cairo
+    expat
+    xorg.libXrandr
+    xorg.libXScrnSaver
+    alsa-lib
+    at-spi2-core
+    cups
+    libxcrypt-legacy
+  ];
+
+  meta = with lib; {
+    homepage = "https://www.saleae.com/";
+    description = "Software for Saleae logic analyzers";
+    license = licenses.unfree;
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ j-hui newam ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/saleae-logic/default.nix b/nixpkgs/pkgs/development/tools/misc/saleae-logic/default.nix
new file mode 100644
index 000000000000..d4f17fb595d0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/saleae-logic/default.nix
@@ -0,0 +1,98 @@
+# Saleae logic analyzer software
+#
+# Suggested udev rules to be able to access the Logic device without being root:
+#   SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="0925", ATTR{idProduct}=="3881", MODE="0666"
+#   SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="21a9", ATTR{idProduct}=="1001", MODE="0666"
+#
+# In NixOS, simply add this package to services.udev.packages.
+
+{ lib, stdenv, fetchurl, unzip, glib, libSM, libICE, gtk2, libXext, libXft
+, fontconfig, libXrender, libXfixes, libX11, libXi, libXrandr, libXcursor
+, freetype, libXinerama, libxcb, zlib, pciutils
+, makeDesktopItem, xkeyboardconfig, dbus, runtimeShell, libGL
+}:
+
+let
+
+  libPath = lib.makeLibraryPath [
+    glib libSM libICE gtk2 libXext libXft fontconfig libXrender libXfixes libX11
+    libXi libXrandr libXcursor freetype libXinerama libxcb zlib stdenv.cc.cc.lib
+    dbus libGL
+  ];
+
+in
+
+assert stdenv.hostPlatform.system == "x86_64-linux";
+
+stdenv.mkDerivation rec {
+  pname = "saleae-logic";
+  version = "1.2.18";
+
+  src = fetchurl {
+    name = "saleae-logic-${version}-64bit.zip";
+    url = "http://downloads.saleae.com/logic/${version}/Logic%20${version}%20(64-bit).zip";
+    sha256 = "0lhair2vsg8sjvzicvfcjfmvy30q7i01xj4z02iqh7pgzpb025h8";
+  };
+
+  desktopItem = makeDesktopItem {
+    name = "saleae-logic";
+    exec = "saleae-logic";
+    icon = ""; # the package contains no icon
+    comment = "Software for Saleae logic analyzers";
+    desktopName = "Saleae Logic";
+    genericName = "Logic analyzer";
+    categories = [ "Development" ];
+  };
+
+  nativeBuildInputs = [ unzip ];
+
+  installPhase = ''
+    # Copy prebuilt app to $out
+    mkdir "$out"
+    cp -r * "$out"
+
+    # Patch it
+    patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" "$out/Logic"
+    for bin in "$out/Logic"              \
+               "$out/libQt5Widgets.so.5" \
+               "$out/libQt5Gui.so.5"     \
+               "$out/libQt5Core.so.5"    \
+               "$out/libQt5Network.so.5" ; do
+        patchelf --set-rpath "${stdenv.cc.cc.lib}/lib:${stdenv.cc.cc.lib}/lib64:${libPath}:\$ORIGIN/Analyzers:\$ORIGIN" "$bin"
+    done
+
+    patchelf --set-rpath "${stdenv.cc.cc.lib}/lib:${stdenv.cc.cc.lib}/lib64:${libPath}:\$ORIGIN/../" "$out/platforms/libqxcb.so"
+
+    # Build the LD_PRELOAD library that makes Logic work from a read-only directory
+    mkdir -p "$out/lib"
+    gcc -shared -fPIC -DOUT=\"$out\" "${./preload.c}" -o "$out/lib/preload.so" -ldl
+
+    # Make wrapper script that uses the LD_PRELOAD library
+    mkdir -p "$out/bin"
+    cat > "$out/bin/saleae-logic" << EOF
+    #!${runtimeShell}
+    export LD_PRELOAD="$out/lib/preload.so"
+    export QT_XKB_CONFIG_ROOT="${xkeyboardconfig}/share/X11/xkb"
+    export PATH="${pciutils}/bin:\$PATH"
+    exec "$out/Logic" "\$@"
+    EOF
+    chmod a+x "$out"/bin/saleae-logic
+
+    # Copy the generated .desktop file
+    mkdir -p "$out/share/applications"
+    cp "$desktopItem"/share/applications/* "$out/share/applications/"
+
+    # Install provided udev rules
+    mkdir -p "$out/etc/udev/rules.d"
+    cp Drivers/99-SaleaeLogic.rules "$out/etc/udev/rules.d/"
+  '';
+
+  meta = with lib; {
+    description = "Software for Saleae logic analyzers";
+    homepage = "https://www.saleae.com/";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/saleae-logic/preload.c b/nixpkgs/pkgs/development/tools/misc/saleae-logic/preload.c
new file mode 100644
index 000000000000..b4451e4d99f7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/saleae-logic/preload.c
@@ -0,0 +1,341 @@
+/*
+ * LD_PRELOAD trick to make Saleae Logic work from a read-only installation
+ * directory.
+ *
+ * Saleae Logic tries to write to a few directories inside its installation
+ * directory. Because the Nix store is read-only, we have to redirect access to
+ * this file somewhere else. Here's the map:
+ *
+ *   $out/Settings/    => $HOME/.saleae-logic/Settings/
+ *   $out/Databases/   => $HOME/.saleae-logic/Databases/
+ *   $out/Errors/      => $HOME/.saleae-logic/Errors/
+ *   $out/Calibration/ => $HOME/.saleae-logic/Calibration/
+ *
+ * This also makes the software multi-user aware :-)
+ *
+ * NOTE: AFAIK (Bjørn Forsman), Logic version 1.2+ was supposed to have a
+ * command line parameter for redirecting these write operations, but
+ * apparently that feature got postponed.
+ *
+ * Usage:
+ *   gcc -shared -fPIC -DOUT="$out" preload.c -o preload.so -ldl
+ *   LD_PRELOAD=$PWD/preload.so ./result/Logic
+ *
+ * To see the paths that are modified at runtime, set the environment variable
+ * PRELOAD_DEBUG to 1 (or anything really; debugging is on as long as the
+ * variable exists).
+ */
+
+#define _GNU_SOURCE
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <dlfcn.h>
+#include <limits.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <errno.h>
+
+#ifndef OUT
+#error Missing OUT define - path to the installation directory.
+#endif
+
+/*
+ * TODO: How to properly wrap "open", which is declared as a variadic function
+ * in glibc? The man page lists these signatures:
+ *
+ *   int open(const char *pathname, int flags);
+ *   int open(const char *pathname, int flags, mode_t mode);
+ *
+ * But using either signature in this code cause a compile error, because
+ * glibc has declared the function as "int open(const char *, int, ...)".
+ * Same thing with "openat".
+ *
+ * For now we discard the variadic args. It seems to work.
+ *
+ * Relevant:
+ * http://stackoverflow.com/questions/28462523/how-to-wrap-ioctlint-d-unsigned-long-request-using-ld-preload
+ */
+typedef FILE *(*fopen_func_t)(const char *path, const char *mode);
+typedef FILE *(*fopen64_func_t)(const char *path, const char *mode);
+typedef int (*open_func_t)(const char *pathname, int flags, ...);
+typedef int (*open64_func_t)(const char *pathname, int flags, ...);
+typedef int (*openat_func_t)(int dirfd, const char *pathname, int flags, ...);
+typedef int (*openat64_func_t)(int dirfd, const char *pathname, int flags, ...);
+typedef int (*xstat_func_t)(int vers, const char *pathname, struct stat *buf);
+typedef int (*xstat64_func_t)(int vers, const char *pathname, struct stat64 *buf);
+typedef int (*access_func_t)(const char *pathname, int mode);
+typedef int (*faccessat_func_t)(int dirfd, const char *pathname, int mode, int flags);
+typedef int (*unlink_func_t)(const char *pathname);
+
+/*
+ * Redirect $out/{Settings,Databases,Errors,Calibration}/ => $HOME/.saleae-logic/.
+ * Path is truncated if bigger than PATH_MAX.
+ *
+ * @param pathname Original file path.
+ * @param buffer Pointer to a buffer of size PATH_MAX bytes that this function
+ * will write the new redirected path to (if needed).
+ *
+ * @return Pointer to the resulting path. It will either be equal to the
+ * pathname (no redirect) or buffer argument (was redirected).
+ */
+static const char *redirect(const char *pathname, char *buffer)
+{
+	const char *homepath;
+	const char *new_path;
+	static char have_warned;
+	const char *remainder;
+	static char have_initialized;
+	static size_t out_strlen;
+	static size_t settings_strlen;
+	static size_t databases_strlen;
+	static size_t errors_strlen;
+	static size_t calibration_strlen;
+	int ret;
+	int i;
+
+	homepath = getenv("HOME");
+	if (!homepath) {
+		homepath = "/";
+		if (!have_warned && getenv("PRELOAD_DEBUG")) {
+			fprintf(stderr, "preload_debug: WARNING: HOME is unset, using \"/\" (root) instead.\n");
+			have_warned = 1;
+		}
+	}
+
+	if (!have_initialized) {
+		/*
+		 * The directories that Saleae Logic expects to find.
+		 * The first element is intentionally empty (create base dir).
+		 */
+		char *dirs[] = {"", "/Settings", "/Databases", "/Errors", "/Calibration"};
+		char old_settings_path[PATH_MAX];
+		access_func_t orig_access;
+
+		out_strlen = strlen(OUT);
+		settings_strlen = out_strlen + strlen("/Settings");
+		databases_strlen = out_strlen + strlen("/Databases");
+		errors_strlen = out_strlen + strlen("/Errors");
+		calibration_strlen = out_strlen + strlen("/Calibration");
+		for (i = 0; i < sizeof dirs / sizeof dirs[0]; i++) {
+			snprintf(buffer, PATH_MAX, "%s/.saleae-logic%s", homepath, dirs[i]);
+			buffer[PATH_MAX-1] = '\0';
+			ret = mkdir(buffer, 0755);
+			if (0 != ret && errno != EEXIST) {
+				fprintf(stderr, "ERROR: Failed to create directory \"%s\": %s\n",
+						buffer, strerror(errno));
+				return NULL;
+			}
+		}
+
+		/*
+		 * Automatic migration of the settings file:
+		 * ~/.saleae-logic-settings.xml => ~/.saleae-logic/Settings/settings.xml
+		 */
+		snprintf(old_settings_path, PATH_MAX, "%s/.saleae-logic-settings.xml", homepath);
+		old_settings_path[PATH_MAX-1] = '\0';
+		orig_access = (access_func_t)dlsym(RTLD_NEXT, "access");
+		if (orig_access(old_settings_path, F_OK) == 0) {
+			snprintf(buffer, PATH_MAX, "%s/.saleae-logic/Settings/settings.xml", homepath);
+			buffer[PATH_MAX-1] = '\0';
+			ret = rename(old_settings_path, buffer);
+			if (ret != 0) {
+				fprintf(stderr, "WARN: Failed to move %s to %s",
+						old_settings_path, buffer);
+			}
+		}
+
+		have_initialized = 1;
+	}
+
+	new_path = pathname;
+	remainder = pathname + out_strlen;
+
+	if ((strncmp(OUT "/Settings", pathname, settings_strlen) == 0) ||
+	    (strncmp(OUT "/Databases", pathname, databases_strlen) == 0) ||
+	    (strncmp(OUT "/Errors", pathname, errors_strlen) == 0) ||
+	    (strncmp(OUT "/Calibration", pathname, calibration_strlen) == 0)) {
+		snprintf(buffer, PATH_MAX, "%s/.saleae-logic%s", homepath, remainder);
+		buffer[PATH_MAX-1] = '\0';
+		new_path = buffer;
+	}
+
+	return new_path;
+}
+
+FILE *fopen(const char *pathname, const char *mode)
+{
+	const char *path;
+	char buffer[PATH_MAX];
+	fopen_func_t orig_fopen;
+
+	orig_fopen = (fopen_func_t)dlsym(RTLD_NEXT, "fopen");
+	path = redirect(pathname, buffer);
+	if (path != pathname && getenv("PRELOAD_DEBUG")) {
+		fprintf(stderr, "preload_debug: fopen(\"%s\", \"%s\") => \"%s\"\n", pathname, mode, path);
+	}
+
+	return orig_fopen(path, mode);
+}
+
+FILE *fopen64(const char *pathname, const char *mode)
+{
+	const char *path;
+	char buffer[PATH_MAX];
+	fopen64_func_t orig_fopen64;
+
+	orig_fopen64 = (fopen64_func_t)dlsym(RTLD_NEXT, "fopen64");
+	path = redirect(pathname, buffer);
+	if (path != pathname && getenv("PRELOAD_DEBUG")) {
+		fprintf(stderr, "preload_debug: fopen64(\"%s\", \"%s\") => \"%s\"\n", pathname, mode, path);
+	}
+
+	return orig_fopen64(path, mode);
+}
+
+int open(const char *pathname, int flags, ...)
+{
+	const char *path;
+	char buffer[PATH_MAX];
+	open_func_t orig_open;
+
+	orig_open = (open_func_t)dlsym(RTLD_NEXT, "open");
+	path = redirect(pathname, buffer);
+	if (path != pathname && getenv("PRELOAD_DEBUG")) {
+		fprintf(stderr, "preload_debug: open(\"%s\", ...) => \"%s\"\n", pathname, path);
+	}
+
+	return orig_open(path, flags);
+}
+
+int open64(const char *pathname, int flags, ...)
+{
+	const char *path;
+	char buffer[PATH_MAX];
+	open64_func_t orig_open64;
+
+	orig_open64 = (open64_func_t)dlsym(RTLD_NEXT, "open64");
+	path = redirect(pathname, buffer);
+	if (path != pathname && getenv("PRELOAD_DEBUG")) {
+		fprintf(stderr, "preload_debug: open64(\"%s\", ...) => \"%s\"\n", pathname, path);
+	}
+
+	return orig_open64(path, flags);
+}
+
+int openat(int dirfd, const char *pathname, int flags, ...)
+{
+	const char *path;
+	char buffer[PATH_MAX];
+	openat_func_t orig_openat;
+
+	orig_openat = (openat_func_t)dlsym(RTLD_NEXT, "openat");
+	path = redirect(pathname, buffer);
+	if (path != pathname && getenv("PRELOAD_DEBUG")) {
+		fprintf(stderr, "preload_debug: openat(%d, \"%s\", %#x) => \"%s\"\n", dirfd, pathname, flags, path);
+	}
+
+	return orig_openat(dirfd, path, flags);
+}
+
+int openat64(int dirfd, const char *pathname, int flags, ...)
+{
+	const char *path;
+	char buffer[PATH_MAX];
+	openat64_func_t orig_openat64;
+
+	orig_openat64 = (openat64_func_t)dlsym(RTLD_NEXT, "openat64");
+	path = redirect(pathname, buffer);
+	if (path != pathname && getenv("PRELOAD_DEBUG")) {
+		fprintf(stderr, "preload_debug: openat64(%d, \"%s\", %#x) => \"%s\"\n", dirfd, pathname, flags, path);
+	}
+
+	return orig_openat64(dirfd, path, flags);
+}
+
+/*
+ * Notes about "stat".
+ *
+ * The stat function is special, at least in glibc, in that it cannot be
+ * directly overridden by LD_PRELOAD, due to it being inline wrapper around
+ * __xstat. The __xstat functions take one extra parameter, a version number,
+ * to indicate what "struct stat" should look like. This trick allows changing
+ * the contents of mode_t without changing the shared library major number. See
+ * sys/stat.h header for more info.
+ */
+int __xstat(int vers, const char *pathname, struct stat *buf)
+{
+	const char *path;
+	char buffer[PATH_MAX];
+	xstat_func_t orig_xstat;
+
+	orig_xstat = (xstat_func_t)dlsym(RTLD_NEXT, "__xstat");
+	path = redirect(pathname, buffer);
+	if (path != pathname && getenv("PRELOAD_DEBUG")) {
+		fprintf(stderr, "preload_debug: (__x)stat(\"%s\", ...) => \"%s\"\n", pathname, path);
+	}
+
+	return orig_xstat(vers, path, buf);
+}
+
+int __xstat64(int vers, const char *pathname, struct stat64 *buf)
+{
+	const char *path;
+	char buffer[PATH_MAX];
+	xstat64_func_t orig_xstat64;
+
+	orig_xstat64 = (xstat64_func_t)dlsym(RTLD_NEXT, "__xstat64");
+	path = redirect(pathname, buffer);
+	if (path != pathname && getenv("PRELOAD_DEBUG")) {
+		fprintf(stderr, "preload_debug: (__x)stat64(\"%s\", ...) => \"%s\"\n", pathname, path);
+	}
+
+	return orig_xstat64(vers, path, buf);
+}
+
+int access(const char *pathname, int mode)
+{
+	const char *path;
+	char buffer[PATH_MAX];
+	access_func_t orig_access;
+
+	orig_access = (access_func_t)dlsym(RTLD_NEXT, "access");
+	path = redirect(pathname, buffer);
+	if (path != pathname && getenv("PRELOAD_DEBUG")) {
+		fprintf(stderr, "preload_debug: access(\"%s\", ...) => \"%s\"\n", pathname, path);
+	}
+
+	return orig_access(path, mode);
+}
+
+int faccessat(int dirfd, const char *pathname, int mode, int flags)
+{
+	const char *path;
+	char buffer[PATH_MAX];
+	faccessat_func_t orig_faccessat;
+
+	orig_faccessat = (faccessat_func_t)dlsym(RTLD_NEXT, "faccessat");
+	path = redirect(pathname, buffer);
+	if (path != pathname && getenv("PRELOAD_DEBUG")) {
+		fprintf(stderr, "preload_debug: faccessat(\"%s\", ...) => \"%s\"\n", pathname, path);
+	}
+
+	return orig_faccessat(dirfd, path, mode, flags);
+}
+
+int unlink(const char *pathname)
+{
+	const char *path;
+	char buffer[PATH_MAX];
+	unlink_func_t orig_unlink;
+
+	orig_unlink = (unlink_func_t)dlsym(RTLD_NEXT, "unlink");
+	path = redirect(pathname, buffer);
+	if (path != pathname && getenv("PRELOAD_DEBUG")) {
+		fprintf(stderr, "preload_debug: unlink(\"%s\") => \"%s\"\n", pathname, path);
+	}
+
+	return orig_unlink(path);
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/samply/default.nix b/nixpkgs/pkgs/development/tools/misc/samply/default.nix
new file mode 100644
index 000000000000..9d70b9bc14d6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/samply/default.nix
@@ -0,0 +1,55 @@
+{ lib
+, rustPlatform
+, fetchCrate
+, jq
+, moreutils
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "samply";
+  version = "0.11.0";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-V0uAS7Oo7wv0yU5CgqqYhltwM5PXJ3GP/TLVZV2GkkI=";
+  };
+
+  cargoHash = "sha256-jsuICNVY3noZi/+mgVj9uUu53z+5bW9Vi5CBKcHOqSI=";
+
+  # the dependencies linux-perf-data and linux-perf-event-reader contains both README.md and Readme.md,
+  # which causes a hash mismatch on systems with a case-insensitive filesystem
+  # this removes the readme files and updates cargo's checksum file accordingly
+  depsExtraArgs = {
+    nativeBuildInputs = [
+      jq
+      moreutils
+    ];
+
+    postBuild = ''
+      for crate in linux-perf-data linux-perf-event-reader; do
+        pushd $name/$crate
+
+        rm -f README.md Readme.md
+        jq 'del(.files."README.md") | del(.files."Readme.md")' \
+          .cargo-checksum.json -c \
+          | sponge .cargo-checksum.json
+
+        popd
+      done
+    '';
+  };
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.CoreServices
+  ];
+
+  meta = with lib; {
+    description = "A command line profiler for macOS and Linux";
+    homepage = "https://github.com/mstange/samply";
+    changelog = "https://github.com/mstange/samply/releases/tag/samply-v${version}";
+    license = with licenses; [ asl20 mit ];
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/scc/default.nix b/nixpkgs/pkgs/development/tools/misc/scc/default.nix
new file mode 100644
index 000000000000..63ef5ed345a7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/scc/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "scc";
+  version = "3.2.0";
+
+  src = fetchFromGitHub {
+    owner = "boyter";
+    repo = "scc";
+    rev = "v${version}";
+    hash = "sha256-ZQIOV7TznaIrgSUgc5Pyc4sz2d5MFO+RgczQq3gZevk=";
+  };
+
+  vendorHash = null;
+
+  # scc has a scripts/ sub-package that's for testing.
+  excludedPackages = [ "scripts" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/boyter/scc";
+    description = "A very fast accurate code counter with complexity calculations and COCOMO estimates written in pure Go";
+    maintainers = with maintainers; [ sigma Br1ght0ne ];
+    license = with licenses; [ unlicense /* or */ mit ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/sccache/default.nix b/nixpkgs/pkgs/development/tools/misc/sccache/default.nix
new file mode 100644
index 000000000000..9b9311529b77
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/sccache/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+, pkg-config
+, openssl
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  version = "0.7.7";
+  pname = "sccache";
+
+  src = fetchFromGitHub {
+    owner = "mozilla";
+    repo = "sccache";
+    rev = "v${version}";
+    sha256 = "sha256-nWSMWaz1UvjsA2V7q7WKx44G45VVaoQxteZqrKAlxY8=";
+  };
+
+  cargoHash = "sha256-ezub+pOqNjCfH7QgjLBrYtsyYbPM3/SADLpNgPtlG+I=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+  buildInputs = [
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+    darwin.apple_sdk.frameworks.SystemConfiguration
+  ];
+
+  # Tests fail because of client server setup which is not possible inside the
+  # pure environment, see https://github.com/mozilla/sccache/issues/460
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Ccache with Cloud Storage";
+    homepage = "https://github.com/mozilla/sccache";
+    changelog = "https://github.com/mozilla/sccache/releases/tag/v${version}";
+    maintainers = with maintainers; [ doronbehar figsoda ];
+    license = licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/scip/default.nix b/nixpkgs/pkgs/development/tools/misc/scip/default.nix
new file mode 100644
index 000000000000..176ddccbe34e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/scip/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, testers
+, scip
+}:
+
+buildGoModule rec {
+  pname = "scip";
+  version = "0.3.3";
+
+  src = fetchFromGitHub {
+    owner = "sourcegraph";
+    repo = "scip";
+    rev = "v${version}";
+    hash = "sha256-aSApi6fEKQP5bpuda2Zz6i/5xkyH+mxch803toJsZm8=";
+  };
+
+  vendorHash = "sha256-3Tq2cexcxHjaH6WIz2hneE1QeBSGoMINBncKbqxODxQ=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=main.Reproducible=true"
+  ];
+
+  # update documentation to fix broken test
+  postPatch = ''
+    substituteInPlace docs/CLI.md \
+      --replace 0.3.0 0.3.1
+  '';
+
+  passthru.tests = {
+    version = testers.testVersion {
+      package = scip;
+      version = "v${version}";
+    };
+  };
+
+  meta = with lib; {
+    description = "SCIP Code Intelligence Protocol CLI";
+    homepage = "https://github.com/sourcegraph/scip";
+    changelog = "https://github.com/sourcegraph/scip/blob/${src.rev}/CHANGELOG.md";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/scriptisto/default.nix b/nixpkgs/pkgs/development/tools/misc/scriptisto/default.nix
new file mode 100644
index 000000000000..9b7b287fce5d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/scriptisto/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, installShellFiles
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "scriptisto";
+  version = "2.1.1";
+
+  src = fetchFromGitHub {
+    owner = "igor-petruk";
+    repo = "scriptisto";
+    rev = "v${version}";
+    hash = "sha256-WQSgN1iX26tPPaJXLtU5Eo8kFahT6g+gZKJEDT6zj1E=";
+  };
+
+  cargoHash = "sha256-trDf6N7PMjxlum8Rx2TxGePM6UPzMlTU6ATyGzmFoNc=";
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  postInstall = ''
+    installManPage man/*
+  '';
+
+  meta = with lib; {
+    description = "A language-agnostic \"shebang interpreter\" that enables you to write scripts in compiled languages";
+    homepage = "https://github.com/igor-petruk/scriptisto";
+    changelog = "https://github.com/igor-petruk/scriptisto/releases/tag/${src.rev}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/seer/default.nix b/nixpkgs/pkgs/development/tools/misc/seer/default.nix
new file mode 100644
index 000000000000..92bc871185ff
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/seer/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, cmake, gdb, qtcharts, qtbase, wrapQtAppsHook }:
+
+stdenv.mkDerivation rec {
+  pname = "seer";
+  version = "1.17";
+
+  src = fetchFromGitHub {
+    owner = "epasveer";
+    repo = "seer";
+    rev = "v${version}";
+    sha256 = "sha256-lM6w+QwIRYP/2JDx4yynJxhVXt8SouOWgsLGXSwolIw=";
+  };
+
+  preConfigure = ''
+    cd src
+  '';
+
+  patchPhase = ''
+    substituteInPlace src/{SeerGdbConfigPage,SeerMainWindow,SeerGdbWidget}.cpp \
+      --replace "/usr/bin/gdb" "${gdb}/bin/gdb"
+  '';
+
+  buildInputs = [ qtbase qtcharts ];
+  nativeBuildInputs = [ cmake wrapQtAppsHook ];
+
+  meta = with lib; {
+    description = "A Qt gui frontend for GDB";
+    homepage = "https://github.com/epasveer/seer";
+    license = licenses.gpl3Only;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ foolnotion ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/segger-ozone/default.nix b/nixpkgs/pkgs/development/tools/misc/segger-ozone/default.nix
new file mode 100644
index 000000000000..8109c1e42a36
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/segger-ozone/default.nix
@@ -0,0 +1,87 @@
+{ lib
+, stdenv
+, fetchurl
+, autoPatchelfHook
+, fontconfig
+, freetype
+, libICE
+, libSM
+, libX11
+, libXcursor
+, libXfixes
+, libXrandr
+, libXrender
+}:
+
+stdenv.mkDerivation rec {
+  pname = "segger-ozone";
+  version = "3.30b";
+
+  src = {
+    x86_64-linux = fetchurl {
+      url = "https://www.segger.com/downloads/jlink/Ozone_Linux_V${builtins.replaceStrings ["."] [""] version}_x86_64.tgz";
+      hash = "sha256-W8Fo0q58pAn1aB92CjYARcN3vMLEguvsyozsS7VRArQ=";
+    };
+    i686-linux = fetchurl {
+      url = "https://www.segger.com/downloads/jlink/Ozone_Linux_V${builtins.replaceStrings ["."] [""] version}_i386.tgz";
+      hash = "sha256-Xq/69lwF2Ll5VdkYMDNRtc0YUUvWc+XR0FHJXxOLNQ4=";
+    };
+  }.${stdenv.hostPlatform.system} or (throw "unsupported system: ${stdenv.hostPlatform.system}");
+
+  nativeBuildInputs = [
+    autoPatchelfHook
+  ];
+
+  buildInputs = [
+    fontconfig
+    freetype
+    libICE
+    libSM
+    libX11
+    libXcursor
+    libXfixes
+    libXrandr
+    libXrender
+    stdenv.cc.cc.lib
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    mv Lib lib
+    mv * $out
+    ln -s $out/Ozone $out/bin
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "J-Link Debugger and Performance Analyzer";
+    longDescription = ''
+      Ozone is a cross-platform debugger and performance analyzer for J-Link
+      and J-Trace.
+
+        - Stand-alone graphical debugger
+        - Debug output of any tool chain and IDE 1
+        - C/C++ source level debugging and assembly instruction debugging
+        - Debug information windows for any purpose: disassembly, memory,
+          globals and locals, (live) watches, CPU and peripheral registers
+        - Source editor to fix bugs immediately
+        - High-speed programming of the application into the target
+        - Direct use of J-Link built-in features (Unlimited Flash
+          Breakpoints, Flash Download, Real Time Terminal, Instruction Trace)
+        - Scriptable project files to set up everything automatically
+          - New project wizard to ease the basic configuration of new projects
+
+      1 Ozone has been tested with the output of the following compilers:
+      GCC, Clang, ARM, IAR. Output of other compilers may be supported but is
+      not guaranteed to be.
+    '';
+    homepage = "https://www.segger.com/products/development-tools/ozone-j-link-debugger";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    maintainers = [ maintainers.bmilanov ];
+    platforms = [ "x86_64-linux" "i686-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/semver-tool/default.nix b/nixpkgs/pkgs/development/tools/misc/semver-tool/default.nix
new file mode 100644
index 000000000000..a26c99171662
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/semver-tool/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, lib, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "semver-tool";
+  version = "3.4.0";
+
+  src = fetchFromGitHub {
+    owner = "fsaintjacques";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-BnHuiCxE0VjzMWFTEMunQ9mkebQKIKbbMxZVfBUO57Y=";
+  };
+
+  dontBuild = true; # otherwise we try to 'make' which fails.
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    install src/semver $out/bin
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/fsaintjacques/semver-tool";
+    description = "semver bash implementation";
+    license = licenses.asl20;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.qyliss ];
+    mainProgram = "semver";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/sipp/default.nix b/nixpkgs/pkgs/development/tools/misc/sipp/default.nix
new file mode 100644
index 000000000000..297669733c0e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/sipp/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchurl, ncurses, libpcap, cmake, openssl, git, lksctp-tools }:
+
+stdenv.mkDerivation rec {
+  version = "3.6.1";
+  pname = "sipp";
+
+  src = fetchurl {
+    url = "https://github.com/SIPp/${pname}/releases/download/v${version}/${pname}-${version}.tar.gz";
+    sha256 = "sha256-alYOg6/5gvMx3byt+zvVMMWJbNW3V91utoITPMhg7LE=";
+  };
+
+  postPatch = ''
+    cp version.h src/version.h
+  '';
+
+  cmakeFlags = [
+    "-DUSE_GSL=1"
+    "-DUSE_PCAP=1"
+    "-DUSE_SSL=1"
+    "-DUSE_SCTP=${if stdenv.isLinux then "1" else "0"}"
+
+    # file RPATH_CHANGE could not write new RPATH
+    "-DCMAKE_SKIP_BUILD_RPATH=ON"
+  ];
+  enableParallelBuilding = true;
+
+  nativeBuildInputs = [ cmake git ];
+  buildInputs = [ ncurses libpcap openssl ]
+    ++ lib.optional (stdenv.isLinux) lksctp-tools;
+
+  meta = with lib; {
+    homepage = "http://sipp.sf.net";
+    description = "The SIPp testing tool";
+    license = licenses.gpl3;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/slint-lsp/default.nix b/nixpkgs/pkgs/development/tools/misc/slint-lsp/default.nix
new file mode 100644
index 000000000000..85977e549797
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/slint-lsp/default.nix
@@ -0,0 +1,62 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchCrate
+, pkg-config
+, cmake
+, fontconfig
+, libGL
+, xorg
+, libxkbcommon
+, wayland
+  # Darwin Frameworks
+, AppKit
+, CoreGraphics
+, CoreServices
+, CoreText
+, Foundation
+, libiconv
+, OpenGL
+}:
+
+let
+  rpathLibs = [ fontconfig libGL xorg.libxcb xorg.libX11 xorg.libXcursor xorg.libXrandr xorg.libXi ]
+    ++ lib.optionals stdenv.isLinux [ libxkbcommon wayland ];
+in
+rustPlatform.buildRustPackage rec {
+  pname = "slint-lsp";
+  version = "1.4.1";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-m1W+Q/SD5DmI3XGRZRAWj/dVY7fQM9CeIvX3E1GQdlU=";
+  };
+
+  cargoHash = "sha256-X4xBPU49XskmRg8TuLtiAqpoeZOBTIFvhj7WWFNBRDw=";
+
+  nativeBuildInputs = [ cmake pkg-config fontconfig ];
+  buildInputs = rpathLibs ++ [ xorg.libxcb.dev ]
+    ++ lib.optionals stdenv.isDarwin [
+    AppKit
+    CoreGraphics
+    CoreServices
+    CoreText
+    Foundation
+    libiconv
+    OpenGL
+  ];
+
+  postInstall = lib.optionalString stdenv.isLinux  ''
+    patchelf --set-rpath ${lib.makeLibraryPath rpathLibs} $out/bin/slint-lsp
+  '';
+
+  dontPatchELF = true;
+
+  meta = with lib; {
+    description = "Language Server Protocol (LSP) for Slint UI language";
+    homepage = "https://slint-ui.com/";
+    changelog = "https://github.com/slint-ui/slint/blob/v${version}/CHANGELOG.md";
+    license = with licenses; [ gpl3Plus ];
+    maintainers = with maintainers; [ xgroleau ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/sloccount/default.nix b/nixpkgs/pkgs/development/tools/misc/sloccount/default.nix
new file mode 100644
index 000000000000..fc619612a48b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/sloccount/default.nix
@@ -0,0 +1,73 @@
+{ fetchurl, lib, stdenv, perl, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "sloccount";
+  version = "2.26";
+
+  src = fetchurl {
+    url = "https://www.dwheeler.com/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "0ayiwfjdh1946asah861ah9269s5xkc8p5fv1wnxs9znyaxs4zzs";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ perl ];
+
+  # Make sure the Flex-generated files are newer than the `.l' files, so that
+  # Flex isn't needed to recompile them.
+  patchPhase = ''
+    for file in *
+    do
+      if grep -q /usr/bin/perl "$file"
+      then
+          echo "patching \`$file'..."
+          substituteInPlace "$file" --replace \
+            "/usr/bin/perl" "${perl}/bin/perl"
+      fi
+    done
+
+    for file in *.l
+    do
+      touch "$(echo $file | sed -es'/\.l$/.c/g')"
+    done
+  '';
+
+  makeFlags = [ "PREFIX=$(out)" "CC=${stdenv.cc.targetPrefix}cc" ];
+
+  doCheck = true;
+  checkPhase = ''HOME="$TMPDIR" PATH="$PWD:$PATH" make test'';
+
+  preInstall = ''
+    mkdir -p "$out/bin"
+    mkdir -p "$out/share/man/man1"
+    mkdir -p "$out/share/doc"
+  '';
+
+  postInstall = ''
+    for w in "$out/bin"/*; do
+      isScript "$w" || continue
+      wrapProgram "$w" --prefix PATH : "$out/bin"
+    done
+    '';
+
+  meta = {
+    description = "Set of tools for counting physical Source Lines of Code (SLOC)";
+
+    longDescription = ''
+      This is the home page of "SLOCCount", a set of tools for
+      counting physical Source Lines of Code (SLOC) in a large number
+      of languages of a potentially large set of programs.  This suite
+      of tools was used in my papers More than a Gigabuck: Estimating
+      GNU/Linux's Size and Estimating Linux's Size to measure the SLOC
+      of entire GNU/Linux distributions, and my essay Linux Kernel
+      2.6: It's Worth More!  Others have measured Debian GNU/Linux and
+      the Perl CPAN library using this tool suite.
+    '';
+
+    license = lib.licenses.gpl2Plus;
+
+    homepage = "https://www.dwheeler.com/sloccount/";
+
+    maintainers = [ ];
+    platforms = lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/spruce/default.nix b/nixpkgs/pkgs/development/tools/misc/spruce/default.nix
new file mode 100644
index 000000000000..2cf0f184a729
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/spruce/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "spruce";
+  version = "1.31.0";
+
+  src = fetchFromGitHub {
+    owner = "geofffranks";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-7BZl3GPEuXdZptbkChlmdUkxfIkA3B3IdPFO46zejQ4=";
+  };
+
+  vendorHash = null;
+
+  meta = with lib; {
+    description = "A BOSH template merge tool";
+    homepage = "https://github.com/geofffranks/spruce";
+    license = licenses.mit;
+    maintainers = with maintainers; [ risson ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/sqitch/default.nix b/nixpkgs/pkgs/development/tools/misc/sqitch/default.nix
new file mode 100644
index 000000000000..32235e85c48d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/sqitch/default.nix
@@ -0,0 +1,48 @@
+{ stdenv
+, lib
+, perlPackages
+, makeWrapper
+, shortenPerlShebang
+, mysqlSupport ? false
+, postgresqlSupport ? false
+, templateToolkitSupport ? false
+}:
+
+let
+  sqitch = perlPackages.AppSqitch;
+  modules = with perlPackages; [ AlgorithmBackoff ]
+    ++ lib.optional mysqlSupport DBDmysql
+    ++ lib.optional postgresqlSupport DBDPg
+    ++ lib.optional templateToolkitSupport TemplateToolkit;
+in
+
+stdenv.mkDerivation {
+  pname = "sqitch";
+  version = sqitch.version;
+
+  nativeBuildInputs = [ makeWrapper ] ++ lib.optional stdenv.isDarwin shortenPerlShebang;
+
+  src = sqitch;
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p $out/bin
+    for d in bin/sqitch etc lib share ; do
+      # make sure dest alreay exists before symlink
+      # this prevents installing a broken link into the path
+      if [ -e ${sqitch}/$d ]; then
+        ln -s ${sqitch}/$d $out/$d
+      fi
+    done
+  '' + lib.optionalString stdenv.isDarwin ''
+    shortenPerlShebang $out/bin/sqitch
+  '';
+  dontStrip = true;
+  postFixup = ''
+    wrapProgram $out/bin/sqitch --prefix PERL5LIB : ${lib.escapeShellArg (perlPackages.makeFullPerlPath modules)}
+  '';
+
+  meta = {
+    inherit (sqitch.meta) description homepage license platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/src-cli/default.nix b/nixpkgs/pkgs/development/tools/misc/src-cli/default.nix
new file mode 100644
index 000000000000..c69ee18df314
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/src-cli/default.nix
@@ -0,0 +1,57 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, stdenv
+, xorg
+, darwin
+, testers
+, src-cli
+}:
+
+buildGoModule rec {
+  pname = "src-cli";
+  version = "5.2.1";
+
+  src = fetchFromGitHub {
+    owner = "sourcegraph";
+    repo = "src-cli";
+    rev = version;
+    hash = "sha256-WO9W4jDQklvHOlfbfTtQIpSxn/jzytz1P6ODO6LTwlI=";
+  };
+
+  vendorHash = "sha256-ogmshFRVZPCDKHcbDuJ4M1d+Bv3GSnylhnmuUHseRGM=";
+
+  subPackages = [
+    "cmd/src"
+  ];
+
+  buildInputs = lib.optionals stdenv.isLinux [
+    xorg.libX11
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Cocoa
+  ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=github.com/sourcegraph/src-cli/internal/version.BuildTag=${version}"
+  ];
+
+  __darwinAllowLocalNetworking = true;
+
+  passthru.tests = {
+    version = testers.testVersion {
+      package = src-cli;
+      command = "src version || true";
+    };
+  };
+
+  meta = with lib; {
+    description = "Sourcegraph CLI";
+    homepage = "https://github.com/sourcegraph/src-cli";
+    changelog = "https://github.com/sourcegraph/src-cli/blob/${src.rev}/CHANGELOG.md";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "src";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/srecord/default.nix b/nixpkgs/pkgs/development/tools/misc/srecord/default.nix
new file mode 100644
index 000000000000..1d542383bfb0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/srecord/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchurl, boost, libtool, groff, ghostscript, libgcrypt ? null }:
+
+stdenv.mkDerivation rec {
+  pname = "srecord";
+  version = "1.64";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "1qk75q0k5vzmm3932q9hqz2gp8n9rrdfjacsswxc02656f3l3929";
+  };
+
+  buildInputs = [ boost libtool groff ghostscript libgcrypt ];
+
+  configureFlags = lib.optional (libgcrypt == null) "--without-gcrypt";
+
+  meta = with lib; {
+    description = "Collection of powerful tools for manipulating EPROM load files";
+    homepage = "https://srecord.sourceforge.net/";
+    license = licenses.gpl3Plus;
+    maintainers = [ maintainers.bjornfor ];
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/stlink/default.nix b/nixpkgs/pkgs/development/tools/misc/stlink/default.nix
new file mode 100644
index 000000000000..2255fbfd8dcb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/stlink/default.nix
@@ -0,0 +1,54 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, libusb1
+, gtk3
+, pkg-config
+, wrapGAppsHook
+, withGUI ? false
+}:
+
+let
+  # The Darwin build of stlink explicitly refers to static libusb.
+  libusb1' = if stdenv.isDarwin then libusb1.override { withStatic = true; } else libusb1;
+
+# IMPORTANT: You need permissions to access the stlink usb devices.
+# Add services.udev.packages = [ pkgs.stlink ] to your configuration.nix
+
+in stdenv.mkDerivation rec {
+  pname = "stlink";
+  version = "1.8.0";
+
+  src = fetchFromGitHub {
+    owner = "stlink-org";
+    repo = "stlink";
+    rev = "v${version}";
+    sha256 = "sha256-hlFI2xpZ4ldMcxZbg/T5/4JuFFdO9THLcU0DQKSFqrw=";
+  };
+
+  buildInputs = [
+    libusb1'
+  ] ++ lib.optionals withGUI [
+    gtk3
+  ];
+  nativeBuildInputs = [
+    cmake
+  ] ++ lib.optionals withGUI [
+    pkg-config
+    wrapGAppsHook
+  ];
+
+  cmakeFlags = [
+    "-DSTLINK_MODPROBED_DIR=${placeholder "out"}/etc/modprobe.d"
+    "-DSTLINK_UDEV_RULES_DIR=${placeholder "out"}/lib/udev/rules.d"
+  ];
+
+  meta = with lib; {
+    description = "In-circuit debug and programming for ST-Link devices";
+    license = licenses.bsd3;
+    platforms = platforms.unix;
+    badPlatforms = platforms.darwin;
+    maintainers = [ maintainers.bjornfor maintainers.rongcuid ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/strace-analyzer/default.nix b/nixpkgs/pkgs/development/tools/misc/strace-analyzer/default.nix
new file mode 100644
index 000000000000..db0591cab10a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/strace-analyzer/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, strace
+, stdenv
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "strace-analyzer";
+  version = "0.5.2";
+
+  src = fetchFromGitHub {
+    owner = "wookietreiber";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-wx0/Jb2uaS1qdRQymfE00IEOyfgLtD4lXYasaJgcoxo=";
+  };
+
+  cargoHash = "sha256-3OS3LEEk58+IJDQrgwo+BJq6hblojk22QxDtZY5ofA4=";
+
+  nativeCheckInputs = [ strace ];
+
+  checkFlags = lib.optionals stdenv.isAarch64 [
+    # thread 'analysis::tests::analyze_dd' panicked at 'assertion failed: ...'
+    "--skip=analysis::tests::analyze_dd"
+  ];
+
+  meta = with lib; {
+    description = "Analyzes strace output";
+    homepage = "https://github.com/wookietreiber/strace-analyzer";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/strace/default.nix b/nixpkgs/pkgs/development/tools/misc/strace/default.nix
new file mode 100644
index 000000000000..d851aa217b5f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/strace/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchurl, perl, libunwind, buildPackages, gitUpdater, elfutils }:
+
+stdenv.mkDerivation rec {
+  pname = "strace";
+  version = "6.7";
+
+  src = fetchurl {
+    url = "https://strace.io/files/${version}/${pname}-${version}.tar.xz";
+    sha256 = "sha256-IJAgHho/8yhG9P5CHBFjsV9EC7OOMTVdCfgtOUmSKvc=";
+  };
+
+  depsBuildBuild = [ buildPackages.stdenv.cc ];
+  nativeBuildInputs = [ perl ];
+
+  # On RISC-V platforms, LLVM's libunwind implementation is unsupported by strace.
+  # The build will silently fall back and -k will not work on RISC-V.
+  buildInputs = [ libunwind elfutils ]; # support -k and -kk
+
+  configureFlags = [ "--enable-mpers=check" ];
+
+  passthru.updateScript = gitUpdater {
+    # No nicer place to find latest release.
+    url = "https://github.com/strace/strace.git";
+    rev-prefix = "v";
+  };
+
+  meta = with lib; {
+    homepage = "https://strace.io/";
+    description = "A system call tracer for Linux";
+    license =  with licenses; [ lgpl21Plus gpl2Plus ]; # gpl2Plus is for the test suite
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ globin ma27 qyliss ];
+    mainProgram = "strace";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/swig/2.x.nix b/nixpkgs/pkgs/development/tools/misc/swig/2.x.nix
new file mode 100644
index 000000000000..ac03372d9761
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/swig/2.x.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchFromGitHub, autoconf, automake, libtool, bison, pcre }:
+
+stdenv.mkDerivation rec {
+  pname = "swig";
+  version = "2.0.12";
+
+  src = fetchFromGitHub {
+    owner = "swig";
+    repo = "swig";
+    rev = "rel-${version}";
+    sha256 = "0khm9gh5pczfcihr0pbicaicc4v9kjm5ip2alvkhmbb3ga6njkcm";
+  };
+
+  nativeBuildInputs = [ autoconf automake libtool bison ];
+  buildInputs = [ pcre ];
+
+  configureFlags = [ "--without-tcl" ];
+
+  # Disable ccache documentation as it needs yodl
+  postPatch = ''
+    sed -i '/man1/d' CCache/Makefile.in
+  '';
+
+  preConfigure = ''
+    ./autogen.sh
+  '';
+
+  meta = with lib; {
+    description = "SWIG, an interface compiler that connects C/C++ code to higher-level languages";
+    homepage = "https://swig.org/";
+    # Different types of licenses available: http://www.swig.org/Release/LICENSE .
+    license = licenses.gpl3Plus;
+    platforms = with platforms; linux ++ darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/swig/3.x.nix b/nixpkgs/pkgs/development/tools/misc/swig/3.x.nix
new file mode 100644
index 000000000000..f50c02d3e0cd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/swig/3.x.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchFromGitHub, autoconf, automake, libtool, bison, pcre }:
+
+stdenv.mkDerivation rec {
+  pname = "swig";
+  version = "3.0.12";
+
+  src = fetchFromGitHub {
+    owner = "swig";
+    repo = "swig";
+    rev = "rel-${version}";
+    sha256 = "1wyffskbkzj5zyhjnnpip80xzsjcr3p0q5486z3wdwabnysnhn8n";
+  };
+
+  PCRE_CONFIG = "${pcre.dev}/bin/pcre-config";
+  nativeBuildInputs = [ autoconf automake libtool bison ];
+  buildInputs = [ pcre ];
+
+  configureFlags = [ "--without-tcl" ];
+
+  # Disable ccache documentation as it needs yodl
+  postPatch = ''
+    sed -i '/man1/d' CCache/Makefile.in
+  '';
+
+  preConfigure = ''
+    ./autogen.sh
+  '';
+
+  meta = with lib; {
+    description = "An interface compiler that connects C/C++ code to higher-level languages";
+    homepage = "https://swig.org/";
+    # Different types of licenses available: http://www.swig.org/Release/LICENSE .
+    license = licenses.gpl3Plus;
+    platforms = with platforms; linux ++ darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/swig/4.nix b/nixpkgs/pkgs/development/tools/misc/swig/4.nix
new file mode 100644
index 000000000000..6b6d1bc02db9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/swig/4.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchFromGitHub, autoconf, automake, libtool, bison, pcre }:
+
+stdenv.mkDerivation rec {
+  pname = "swig";
+  version = "4.0.2";
+
+  src = fetchFromGitHub {
+    owner = "swig";
+    repo = "swig";
+    rev = "rel-${version}";
+    sha256 = "12vlps766xvwck8q0i280s8yx21qm2dxl34710ybpmz3c1cfdjsc";
+  };
+
+  PCRE_CONFIG = "${pcre.dev}/bin/pcre-config";
+  nativeBuildInputs = [ autoconf automake libtool bison ];
+  buildInputs = [ pcre ];
+
+  configureFlags = [ "--without-tcl" ];
+
+  # Disable ccache documentation as it needs yodl
+  postPatch = ''
+    sed -i '/man1/d' CCache/Makefile.in
+  '';
+
+  preConfigure = ''
+    ./autogen.sh
+  '';
+
+  meta = with lib; {
+    description = "SWIG, an interface compiler that connects C/C++ code to higher-level languages";
+    homepage = "https://swig.org/";
+    # Different types of licenses available: http://www.swig.org/Release/LICENSE .
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ orivej ];
+    platforms = with platforms; linux ++ darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/swig/default.nix b/nixpkgs/pkgs/development/tools/misc/swig/default.nix
new file mode 100644
index 000000000000..41f33f4db67f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/swig/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchurl, boost, tcl }:
+
+stdenv.mkDerivation rec {
+  pname = "swig";
+  version = "1.3.40";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/swig/${pname}-${version}.tar.gz";
+    sha256 = "02dc8g8wy75nd2is1974rl24c6mdl0ai1vszs1xpg9nd7dlv6i8r";
+  };
+
+  doCheck = !stdenv.isCygwin;
+  # 'make check' uses boost and tcl
+  buildInputs = lib.optionals doCheck [ boost tcl ];
+
+  configureFlags = [ "--disable-ccache" ];
+
+
+  meta = with lib; {
+    description = "SWIG, an interface compiler that connects C/C++ code to higher-level languages";
+    homepage = "https://swig.org/";
+    # Different types of licenses available: http://www.swig.org/Release/LICENSE .
+    license = licenses.gpl3Plus;
+    platforms = with platforms; linux ++ darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/sysbench/default.nix b/nixpkgs/pkgs/development/tools/misc/sysbench/default.nix
new file mode 100644
index 000000000000..85d289e49b7a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/sysbench/default.nix
@@ -0,0 +1,61 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, pkg-config
+, libmysqlclient
+, libaio
+, libck
+, luajit
+# For testing:
+, testers
+, sysbench
+}:
+
+stdenv.mkDerivation rec {
+  pname = "sysbench";
+  version = "1.0.20";
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+  buildInputs = [ libmysqlclient luajit libck ] ++ lib.optionals stdenv.isLinux [ libaio ];
+  depsBuildBuild = [ pkg-config ];
+
+  src = fetchFromGitHub {
+    owner = "akopytov";
+    repo = pname;
+    rev = version;
+    sha256 = "1sanvl2a52ff4shj62nw395zzgdgywplqvwip74ky8q7s6qjf5qy";
+  };
+
+  enableParallelBuilding = true;
+
+  configureFlags = [
+    # The bundled version does not build on aarch64-darwin:
+    # https://github.com/akopytov/sysbench/issues/416
+    "--with-system-luajit"
+    "--with-system-ck"
+    "--with-mysql-includes=${lib.getDev libmysqlclient}/include/mysql"
+    "--with-mysql-libs=${libmysqlclient}/lib/mysql"
+  ];
+
+  passthru.tests = {
+    versionTest = testers.testVersion {
+      package = sysbench;
+    };
+  };
+
+  meta = {
+    description = "Modular, cross-platform and multi-threaded benchmark tool";
+    longDescription = ''
+      sysbench is a scriptable multi-threaded benchmark tool based on LuaJIT.
+      It is most frequently used for database benchmarks, but can also be used
+      to create arbitrarily complex workloads that do not involve a database
+      server.
+    '';
+    homepage = "https://github.com/akopytov/sysbench";
+    downloadPage = "https://github.com/akopytov/sysbench/releases/tag/${version}";
+    changelog = "https://github.com/akopytov/sysbench/blob/${version}/ChangeLog";
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/tcptrack/default.nix b/nixpkgs/pkgs/development/tools/misc/tcptrack/default.nix
new file mode 100644
index 000000000000..cf3cdf586cc4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/tcptrack/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, ncurses, libpcap }:
+
+stdenv.mkDerivation rec {
+  pname = "tcptrack";
+  version = "unstable-2017-04-29";
+
+  src = fetchFromGitHub {
+    owner = "bchretien";
+    repo = "tcptrack";
+    rev = "2b096ac103af2884bbd7648cff8adcbadbda9394";
+    sha256 = "0084g9s0ynv1az67j08q9nz4p07bqqz9k6w5lprzj3ljlh0x10gj";
+  };
+
+  patches = [
+    # Fix pending upstream inclusion for ncurses-6.3 support:
+    #  https://github.com/bchretien/tcptrack/pull/10
+    (fetchpatch {
+      name = "ncurses-6.3.patch";
+      url = "https://github.com/bchretien/tcptrack/commit/409007afbce8ec5a81312a2a4123dd83b62b4494.patch";
+      sha256 = "00641jyr52ksww5bbzvxlprmbb36jnvzg2w1aj1jgnm75jiajcfc";
+    })
+  ];
+
+  buildInputs = [ ncurses libpcap ];
+
+  env.NIX_CFLAGS_COMPILE = "-Wno-error=cpp";
+
+  meta = with lib; {
+    inherit (src.meta) homepage;
+    description = "libpcap based program for live TCP connection monitoring";
+    license = licenses.lgpl21;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.bjornfor maintainers.vrthra ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/terracognita/default.nix b/nixpkgs/pkgs/development/tools/misc/terracognita/default.nix
new file mode 100644
index 000000000000..55b13dad748b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/terracognita/default.nix
@@ -0,0 +1,29 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "terracognita";
+  version = "0.8.4";
+
+  src = fetchFromGitHub {
+    owner = "cycloidio";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-pPY8y+pQdk9/F7dnUBz/y4lvcR1k/EClywcZATArZVA=";
+  };
+
+  vendorHash = "sha256-ApnJH0uIClXbfXK+k4t9Tcayc2mfndoG9iMqZY3iWys=";
+
+  doCheck = false;
+
+  subPackages = [ "." ];
+
+  ldflags = [ "-s" "-w" "-X github.com/cycloidio/terracognita/cmd.Version=${version}" ];
+
+  meta = with lib; {
+    description = "Reads from existing Cloud Providers (reverse Terraform) and generates your infrastructure as code on Terraform configuration";
+    homepage = "https://github.com/cycloidio/terracognita";
+    changelog = "https://github.com/cycloidio/terracognita/raw/v${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = [ maintainers.marsam ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/terraform-ls/default.nix b/nixpkgs/pkgs/development/tools/misc/terraform-ls/default.nix
new file mode 100644
index 000000000000..5887228e088f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/terraform-ls/default.nix
@@ -0,0 +1,36 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "terraform-ls";
+  version = "0.32.6";
+
+  src = fetchFromGitHub {
+    owner = "hashicorp";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-+1nmxjR1iVtQXjdsqXaYTh8kLGq9gqSDjt1drvR9KoY=";
+  };
+
+  vendorHash = "sha256-8taGEDJ+Qtw/4eOWYiWZmEbmCwqcFXYh3x/9wR3oBJ8=";
+
+  ldflags = [ "-s" "-w" ];
+
+  # There's a mixture of tests that use networking and several that fail on aarch64
+  doCheck = false;
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+    $out/bin/terraform-ls --help
+    $out/bin/terraform-ls --version | grep "${version}"
+    runHook postInstallCheck
+  '';
+
+  meta = with lib; {
+    description = "Terraform Language Server (official)";
+    homepage = "https://github.com/hashicorp/terraform-ls";
+    changelog = "https://github.com/hashicorp/terraform-ls/blob/v${version}/CHANGELOG.md";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ mbaillie jk ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/terraform-lsp/default.nix b/nixpkgs/pkgs/development/tools/misc/terraform-lsp/default.nix
new file mode 100644
index 000000000000..332913e71130
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/terraform-lsp/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "terraform-lsp";
+  version = "0.0.12";
+
+  src = fetchFromGitHub {
+    owner = "juliosueiras";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "111350jbq0dp0qhk48j12hrlisd1fwzqpcv357igrbqf6ki7r78q";
+  };
+
+  vendorHash = null;
+
+  ldflags = [ "-s" "-w" "-X main.Version=${version}" "-X main.GitCommit=${src.rev}" ];
+
+  meta = with lib; {
+    description = "Language Server Protocol for Terraform";
+    homepage = "https://github.com/juliosueiras/terraform-lsp";
+    license = licenses.mit;
+    maintainers = with maintainers; [ marsam ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/terraformer/default.nix b/nixpkgs/pkgs/development/tools/misc/terraformer/default.nix
new file mode 100644
index 000000000000..4b6001a17c70
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/terraformer/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "terraformer";
+  version = "0.8.24";
+
+  src = fetchFromGitHub {
+    owner = "GoogleCloudPlatform";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-paBj2vaBicXHMEei2HPW+d4fXWf8VnVhvcanXmo/5KI=";
+  };
+
+  vendorHash = "sha256-Rh2ZGSfa95Yw8GGjsZjwmj0o4qKpygbPsLCbzUTOBxQ=";
+
+  subPackages = [ "." ];
+
+  meta = with lib; {
+    description = "CLI tool to generate terraform files from existing infrastructure (reverse Terraform). Infrastructure to Code";
+    homepage = "https://github.com/GoogleCloudPlatform/terraformer";
+    license = licenses.asl20;
+    maintainers = [ maintainers.marsam ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/terramate/default.nix b/nixpkgs/pkgs/development/tools/misc/terramate/default.nix
new file mode 100644
index 000000000000..b6efe2732dca
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/terramate/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, git
+}:
+
+buildGoModule rec {
+  pname = "terramate";
+  version = "0.4.2";
+
+  src = fetchFromGitHub {
+    owner = "terramate-io";
+    repo = "terramate";
+    rev = "v${version}";
+    hash = "sha256-aOKUC1FtDDhdUbPUSLW6GrSwh6r29Y2ObC6y487W4Zc=";
+  };
+
+  vendorHash = "sha256-gl5xsaSkGXlh+MfieVBPHGAbYZVF3GBbIkmvVhlJvqw=";
+
+  # required for version info
+  nativeBuildInputs = [ git ];
+
+  ldflags = [ "-extldflags" "-static" ];
+
+  meta = with lib; {
+    description = "Adds code generation, stacks, orchestration, change detection, data sharing and more to Terraform";
+    homepage = "https://github.com/terramate-io/terramate";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ dit7ya ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/terser/default.nix b/nixpkgs/pkgs/development/tools/misc/terser/default.nix
new file mode 100644
index 000000000000..8b862bcc2cd3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/terser/default.nix
@@ -0,0 +1,22 @@
+{ buildNpmPackage, fetchFromGitHub, lib }:
+
+buildNpmPackage rec {
+  pname = "terser";
+  version = "5.19.3";
+
+  src = fetchFromGitHub {
+    owner = "terser";
+    repo = "terser";
+    rev = "v${version}";
+    hash = "sha256-ZI5ElHnQwoCJspGL/v0PqddMUAAhQGWDZA9utWZD/nM=";
+  };
+
+  npmDepsHash = "sha256-M7LGXoZFBQrXpkiofnam7tgFkk6+N7ckPxTcwAAuqxU=";
+
+  meta = with lib; {
+    description = "JavaScript parser, mangler and compressor toolkit for ES6+";
+    homepage = "https://terser.org";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ talyz ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/tet/default.nix b/nixpkgs/pkgs/development/tools/misc/tet/default.nix
new file mode 100644
index 000000000000..6bfcb3129236
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/tet/default.nix
@@ -0,0 +1,29 @@
+{ fetchurl, lib, stdenv }:
+
+stdenv.mkDerivation ({
+  version = "3.8";
+  pname = "tet";
+
+  src = fetchurl {
+    url = "http://tetworks.opengroup.org/downloads/38/software/Sources/3.8/tet3.8-src.tar.gz";
+    sha256 = "1j57hv56df38w249l595b8rsgmsyvjkbysai03a9724gax5jl9av" ;
+  };
+
+  buildInputs = [ ];
+
+  patchPhase = "chmod +x configure";
+
+  configurePhase = "./configure -t lite";
+
+  buildPhase = "cd src; make; cd -";
+
+  installPhase = "cd src; make install; cd -; cp -vr $PWD $out";
+
+  meta = {
+    description = "The Test Environment Toolkit is used in test applications like The Open Group's UNIX Certification program and the Free Standards Group's LSB Certification program";
+    homepage = "http://tetworks.opengroup.org/Products/tet.htm";
+    license = lib.licenses.artistic1;
+    platforms = lib.platforms.unix;
+    maintainers = [ ];
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/misc/texi2html/default.nix b/nixpkgs/pkgs/development/tools/misc/texi2html/default.nix
new file mode 100644
index 000000000000..98f846b7c2f7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/texi2html/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchurl, perl, gettext, buildPackages }:
+
+stdenv.mkDerivation rec {
+  pname = "texi2html";
+  version = "5.0";
+
+  src = fetchurl {
+    url = "mirror://savannah/texi2html/${pname}-${version}.tar.bz2";
+    sha256 = "1yprv64vrlcbksqv25asplnjg07mbq38lfclp1m5lj8cw878pag8";
+  };
+
+  strictDeps = true;
+
+  nativeBuildInputs = [ gettext perl ];
+  buildInputs = [ perl ];
+
+  postPatch = ''
+    patchShebangs separated_to_hash.pl
+  '';
+
+  postInstall = lib.optionalString (stdenv.buildPlatform != stdenv.hostPlatform) ''
+    for f in $out/bin/*; do
+      substituteInPlace $f --replace "${buildPackages.perl}" "${perl}"
+    done
+  '';
+
+  meta = with lib; {
+    description = "Perl script which converts Texinfo source files to HTML output";
+    homepage = "https://www.nongnu.org/texi2html/";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.marcweber ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/texinfo/4.13a.nix b/nixpkgs/pkgs/development/tools/misc/texinfo/4.13a.nix
new file mode 100644
index 000000000000..b8da38ace6fb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/texinfo/4.13a.nix
@@ -0,0 +1,19 @@
+{ stdenv, fetchurl, texinfo, ncurses, xz }:
+
+stdenv.mkDerivation rec {
+  pname = "texinfo";
+  version = "4.13a";
+
+  src = fetchurl {
+    url = "mirror://gnu/texinfo/${pname}-${version}.tar.lzma";
+    sha256 = "1rf9ckpqwixj65bw469i634897xwlgkm5i9g2hv3avl6mv7b0a3d";
+  };
+
+  buildInputs = [ ncurses ];
+  nativeBuildInputs = [ xz ];
+
+  # Disabled because we don't have zdiff in the stdenv bootstrap.
+  #doCheck = true;
+
+  meta = texinfo.meta // { branch = version; };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/texinfo/5.2.nix b/nixpkgs/pkgs/development/tools/misc/texinfo/5.2.nix
new file mode 100644
index 000000000000..d395494984d5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/texinfo/5.2.nix
@@ -0,0 +1,4 @@
+import ./common.nix {
+  version = "5.2";
+  sha256 = "1njfwh2z34r2c4r0iqa7v24wmjzvsfyz4vplzry8ln3479lfywal";
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/texinfo/6.5.nix b/nixpkgs/pkgs/development/tools/misc/texinfo/6.5.nix
new file mode 100644
index 000000000000..34596f306581
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/texinfo/6.5.nix
@@ -0,0 +1,4 @@
+import ./common.nix {
+  version = "6.5";
+  sha256 = "0qjzvbvnv9003xdrcpi3jp7y68j4hq2ciw9frh2hghh698zlnxvp";
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/texinfo/6.7.nix b/nixpkgs/pkgs/development/tools/misc/texinfo/6.7.nix
new file mode 100644
index 000000000000..7915d6e3c6be
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/texinfo/6.7.nix
@@ -0,0 +1,4 @@
+import ./common.nix {
+  version = "6.7";
+  sha256 = "1aicn1v3czqii08wc91jw089n1x3gfchkf808q2as59dak0h714q";
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/texinfo/6.8.nix b/nixpkgs/pkgs/development/tools/misc/texinfo/6.8.nix
new file mode 100644
index 000000000000..992f695bc92c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/texinfo/6.8.nix
@@ -0,0 +1,8 @@
+import ./common.nix {
+  version = "6.8";
+  sha256 = "1i7yb7mrp3inz25zbzv2pllr4y7d58v818f1as7iz8mw53nm7dwf";
+  patches = [
+    # glibc 2.34 compat
+    ./fix-glibc-2.34.patch
+  ];
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/texinfo/7.0.nix b/nixpkgs/pkgs/development/tools/misc/texinfo/7.0.nix
new file mode 100644
index 000000000000..01788f40d78d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/texinfo/7.0.nix
@@ -0,0 +1,4 @@
+import ./common.nix {
+  version = "7.0.3";
+  sha256 = "sha256-dLQg0J1/Uo6E+XqjMPDdaamKYFPnpOAXZ+7RFQOIB78=";
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/texinfo/common.nix b/nixpkgs/pkgs/development/tools/misc/texinfo/common.nix
new file mode 100644
index 000000000000..d8d63088ee7e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/texinfo/common.nix
@@ -0,0 +1,113 @@
+{ version, sha256, patches ? [] }:
+
+{ lib, stdenv, buildPackages, fetchurl, perl, xz, libintl, bash
+, gnulib, gawk
+
+# we are a dependency of gcc, this simplifies bootstraping
+, interactive ? false, ncurses, procps
+}:
+
+# Note: this package is used for bootstrapping fetchurl, and thus
+# cannot use fetchpatch! All mutable patches (generated by GitHub or
+# cgit) that are needed here should be included directly in Nixpkgs as
+# files.
+
+let
+  crossBuildTools = stdenv.hostPlatform != stdenv.buildPlatform;
+in
+
+with lib;
+
+stdenv.mkDerivation {
+  pname = "texinfo${optionalString interactive "-interactive"}";
+  inherit version;
+
+  src = fetchurl {
+    url = "mirror://gnu/texinfo/texinfo-${version}.tar.xz";
+    inherit sha256;
+  };
+
+  patches = patches ++ optional crossBuildTools ./cross-tools-flags.patch;
+
+  postPatch = ''
+    patchShebangs tp/maintain
+  ''
+  # This patch is needed for IEEE-standard long doubles on
+  # powerpc64; it does not apply cleanly to texinfo 5.x or
+  # earlier.  It is merged upstream in texinfo 6.8.
+  + lib.optionalString (version == "6.7") ''
+    patch -p1 -d gnulib < ${gnulib.passthru.longdouble-redirect-patch}
+  '';
+
+  # ncurses is required to build `makedoc'
+  # this feature is introduced by the ./cross-tools-flags.patch
+  NATIVE_TOOLS_CFLAGS = if crossBuildTools then "-I${getDev buildPackages.ncurses}/include" else null;
+  NATIVE_TOOLS_LDFLAGS = if crossBuildTools then "-L${getLib buildPackages.ncurses}/lib" else null;
+
+  strictDeps = true;
+  enableParallelBuilding = true;
+
+  # A native compiler is needed to build tools needed at build time
+  depsBuildBuild = [ buildPackages.stdenv.cc perl ];
+
+  buildInputs = [ xz.bin bash libintl ]
+    ++ optionals stdenv.isSunOS [ libiconv gawk ]
+    ++ optional interactive ncurses;
+
+  configureFlags = [ "PERL=${buildPackages.perl}/bin/perl" ]
+    # Perl XS modules are difficult to cross-compile and texinfo has pure Perl
+    # fallbacks.
+    # Also prevent the buildPlatform's awk being used in the texindex script
+    ++ optionals crossBuildTools [ "--enable-perl-xs=no" "TI_AWK=${gawk}/bin/awk" ]
+    ++ lib.optional stdenv.isSunOS "AWK=${gawk}/bin/awk";
+
+  installFlags = [ "TEXMF=$(out)/texmf-dist" ];
+  installTargets = [ "install" "install-tex" ];
+
+  nativeCheckInputs = [ procps ];
+
+  doCheck = interactive
+    && !stdenv.isDarwin
+    && !stdenv.isSunOS; # flaky
+
+  checkFlags = lib.optionals (!stdenv.hostPlatform.isMusl && lib.versionOlder version "7") [
+    # Test is known to fail on various locales on texinfo-6.8:
+    #   https://lists.gnu.org/r/bug-texinfo/2021-07/msg00012.html
+    "XFAIL_TESTS=test_scripts/layout_formatting_fr_icons.sh"
+  ];
+
+  postFixup = optionalString crossBuildTools ''
+    for f in "$out"/bin/{pod2texi,texi2any}; do
+      substituteInPlace "$f" \
+        --replace ${buildPackages.perl}/bin/perl ${perl}/bin/perl
+    done
+  '';
+
+  meta = {
+    description = "The GNU documentation system";
+    homepage = "https://www.gnu.org/software/texinfo/";
+    changelog = "https://git.savannah.gnu.org/cgit/texinfo.git/plain/NEWS";
+    license = licenses.gpl3Plus;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ vrthra oxij ];
+    # see comment above in patches section
+    broken = stdenv.hostPlatform.isPower64 && lib.strings.versionOlder version "6.0";
+
+    longDescription = ''
+      Texinfo is the official documentation format of the GNU project.
+      It was invented by Richard Stallman and Bob Chassell many years
+      ago, loosely based on Brian Reid's Scribe and other formatting
+      languages of the time.  It is used by many non-GNU projects as
+      well.
+
+      Texinfo uses a single source file to produce output in a number
+      of formats, both online and printed (dvi, html, info, pdf, xml,
+      etc.).  This means that instead of writing different documents
+      for online information and another for a printed manual, you
+      need write only one document.  And when the work is revised, you
+      need revise only that one document.  The Texinfo system is
+      well-integrated with GNU Emacs.
+    '';
+    branch = version;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/texinfo/cross-tools-flags.patch b/nixpkgs/pkgs/development/tools/misc/texinfo/cross-tools-flags.patch
new file mode 100644
index 000000000000..f0a8c4dfdc1e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/texinfo/cross-tools-flags.patch
@@ -0,0 +1,13 @@
+diff -ur texinfo-6.5/configure texinfo-6.5-patched/configure
+--- texinfo-6.5/configure	2017-09-13 03:50:18.000000000 +0900
++++ texinfo-6.5-patched/configure	2019-12-28 17:39:06.692818866 +0900
+@@ -23281,7 +23281,7 @@
+   # env -i gives this build host configure a clean environment;
+   # consequently, we have to re-initialize $PATH.
+-  env -i CC="$BUILD_CC" AR="$BUILD_AR" RANLIB="$BUILD_RANLIB" \
+-      PATH="$PATH" \
++  env -i CC="$CC_FOR_BUILD" AR="$AR_FOR_BUILD" RANLIB="$RANLIB_FOR_BUILD" \
++      PATH="$PATH" CFLAGS="$NATIVE_TOOLS_CFLAGS" LDFLAGS="$NATIVE_TOOLS_LDFLAGS" \
+       tools_only=1 \
+     ${confdir}/configure --build=${build} --host=${build} \
+                          --disable-rpath --disable-nls
diff --git a/nixpkgs/pkgs/development/tools/misc/texinfo/fix-glibc-2.34.patch b/nixpkgs/pkgs/development/tools/misc/texinfo/fix-glibc-2.34.patch
new file mode 100644
index 000000000000..60f2e63b7ce0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/texinfo/fix-glibc-2.34.patch
@@ -0,0 +1,186 @@
+
+Patch by Vitezslav Crhonek <vcrhonek@redhat.com>
+Source: https://src.fedoraproject.org/rpms/texinfo/c/9b2cca4817fa4bd8d520fed05e9560fc7183dcdf?branch=rawhide
+
+diff -up texinfo-6.8/gnulib/lib/cdefs.h.orig texinfo-6.8/gnulib/lib/cdefs.h
+--- texinfo-6.8/gnulib/lib/cdefs.h.orig	2021-03-11 19:57:53.000000000 +0100
++++ texinfo-6.8/gnulib/lib/cdefs.h	2021-07-19 12:26:46.985176475 +0200
+@@ -321,15 +321,15 @@
+ 
+ /* The nonnull function attribute marks pointer parameters that
+    must not be NULL.  */
+-#ifndef __attribute_nonnull__
++#ifndef __nonnull
+ # if __GNUC_PREREQ (3,3) || __glibc_has_attribute (__nonnull__)
+-#  define __attribute_nonnull__(params) __attribute__ ((__nonnull__ params))
++#  define __nonnull(params) __attribute__ ((__nonnull__ params))
+ # else
+-#  define __attribute_nonnull__(params)
++#  define __nonnull(params)
+ # endif
+-#endif
+-#ifndef __nonnull
+-# define __nonnull(params) __attribute_nonnull__ (params)
++#elif !defined __GLIBC__
++# undef __nonnull
++# define __nonnull(params) _GL_ATTRIBUTE_NONNULL (params)
+ #endif
+ 
+ /* If fortification mode, we warn about unused results of certain
+diff -up texinfo-6.8/gnulib/lib/libc-config.h.orig texinfo-6.8/gnulib/lib/libc-config.h
+--- texinfo-6.8/gnulib/lib/libc-config.h.orig	2021-03-11 19:57:54.000000000 +0100
++++ texinfo-6.8/gnulib/lib/libc-config.h	2021-07-19 12:27:58.810590975 +0200
+@@ -33,9 +33,9 @@
+ #include <config.h>
+ 
+ /* On glibc this includes <features.h> and <sys/cdefs.h> and #defines
+-   _FEATURES_H, __WORDSIZE, and __set_errno.  On FreeBSD 11 and
+-   DragonFlyBSD 5.9 it includes <sys/cdefs.h> which defines __nonnull.
+-   Elsewhere it is harmless.  */
++   _FEATURES_H, __WORDSIZE, and __set_errno.  On FreeBSD 11 it
++   includes <sys/cdefs.h> which defines __nonnull.  Elsewhere it
++   is harmless.  */
+ #include <errno.h>
+ 
+ /* From glibc <errno.h>.  */
+diff -up texinfo-6.8/gnulib/lib/malloc/dynarray-skeleton.c.orig texinfo-6.8/gnulib/lib/malloc/dynarray-skeleton.c
+--- texinfo-6.8/gnulib/lib/malloc/dynarray-skeleton.c.orig	2021-03-11 19:57:54.000000000 +0100
++++ texinfo-6.8/gnulib/lib/malloc/dynarray-skeleton.c	2021-07-19 12:24:46.878419397 +0200
+@@ -192,7 +192,7 @@ DYNARRAY_NAME (free__array__) (struct DY
+ 
+ /* Initialize a dynamic array object.  This must be called before any
+    use of the object.  */
+-__attribute_nonnull__ ((1))
++__nonnull ((1))
+ static void
+ DYNARRAY_NAME (init) (struct DYNARRAY_STRUCT *list)
+ {
+@@ -202,7 +202,7 @@ DYNARRAY_NAME (init) (struct DYNARRAY_ST
+ }
+ 
+ /* Deallocate the dynamic array and its elements.  */
+-__attribute_maybe_unused__ __attribute_nonnull__ ((1))
++__attribute_maybe_unused__ __nonnull ((1))
+ static void
+ DYNARRAY_FREE (struct DYNARRAY_STRUCT *list)
+ {
+@@ -213,7 +213,7 @@ DYNARRAY_FREE (struct DYNARRAY_STRUCT *l
+ }
+ 
+ /* Return true if the dynamic array is in an error state.  */
+-__attribute_nonnull__ ((1))
++__nonnull ((1))
+ static inline bool
+ DYNARRAY_NAME (has_failed) (const struct DYNARRAY_STRUCT *list)
+ {
+@@ -222,7 +222,7 @@ DYNARRAY_NAME (has_failed) (const struct
+ 
+ /* Mark the dynamic array as failed.  All elements are deallocated as
+    a side effect.  */
+-__attribute_nonnull__ ((1))
++__nonnull ((1))
+ static void
+ DYNARRAY_NAME (mark_failed) (struct DYNARRAY_STRUCT *list)
+ {
+@@ -236,7 +236,7 @@ DYNARRAY_NAME (mark_failed) (struct DYNA
+ 
+ /* Return the number of elements which have been added to the dynamic
+    array.  */
+-__attribute_nonnull__ ((1))
++__nonnull ((1))
+ static inline size_t
+ DYNARRAY_NAME (size) (const struct DYNARRAY_STRUCT *list)
+ {
+@@ -245,7 +245,7 @@ DYNARRAY_NAME (size) (const struct DYNAR
+ 
+ /* Return a pointer to the array element at INDEX.  Terminate the
+    process if INDEX is out of bounds.  */
+-__attribute_nonnull__ ((1))
++__nonnull ((1))
+ static inline DYNARRAY_ELEMENT *
+ DYNARRAY_NAME (at) (struct DYNARRAY_STRUCT *list, size_t index)
+ {
+@@ -257,7 +257,7 @@ DYNARRAY_NAME (at) (struct DYNARRAY_STRU
+ /* Return a pointer to the first array element, if any.  For a
+    zero-length array, the pointer can be NULL even though the dynamic
+    array has not entered the failure state.  */
+-__attribute_nonnull__ ((1))
++__nonnull ((1))
+ static inline DYNARRAY_ELEMENT *
+ DYNARRAY_NAME (begin) (struct DYNARRAY_STRUCT *list)
+ {
+@@ -267,7 +267,7 @@ DYNARRAY_NAME (begin) (struct DYNARRAY_S
+ /* Return a pointer one element past the last array element.  For a
+    zero-length array, the pointer can be NULL even though the dynamic
+    array has not entered the failure state.  */
+-__attribute_nonnull__ ((1))
++__nonnull ((1))
+ static inline DYNARRAY_ELEMENT *
+ DYNARRAY_NAME (end) (struct DYNARRAY_STRUCT *list)
+ {
+@@ -294,7 +294,7 @@ DYNARRAY_NAME (add__) (struct DYNARRAY_S
+ /* Add ITEM at the end of the array, enlarging it by one element.
+    Mark *LIST as failed if the dynamic array allocation size cannot be
+    increased.  */
+-__attribute_nonnull__ ((1))
++__nonnull ((1))
+ static inline void
+ DYNARRAY_NAME (add) (struct DYNARRAY_STRUCT *list, DYNARRAY_ELEMENT item)
+ {
+@@ -348,8 +348,7 @@ DYNARRAY_NAME (emplace__) (struct DYNARR
+ /* Allocate a place for a new element in *LIST and return a pointer to
+    it.  The pointer can be NULL if the dynamic array cannot be
+    enlarged due to a memory allocation failure.  */
+-__attribute_maybe_unused__ __attribute_warn_unused_result__
+-__attribute_nonnull__ ((1))
++__attribute_maybe_unused__ __attribute_warn_unused_result__ __nonnull ((1))
+ static
+ /* Avoid inlining with the larger initialization code.  */
+ #if !(defined (DYNARRAY_ELEMENT_INIT) || defined (DYNARRAY_ELEMENT_FREE))
+@@ -373,7 +372,7 @@ DYNARRAY_NAME (emplace) (struct DYNARRAY
+    existing size, new elements are added (which can be initialized).
+    Otherwise, the list is truncated, and elements are freed.  Return
+    false on memory allocation failure (and mark *LIST as failed).  */
+-__attribute_maybe_unused__ __attribute_nonnull__ ((1))
++__attribute_maybe_unused__ __nonnull ((1))
+ static bool
+ DYNARRAY_NAME (resize) (struct DYNARRAY_STRUCT *list, size_t size)
+ {
+@@ -418,7 +417,7 @@ DYNARRAY_NAME (resize) (struct DYNARRAY_
+ }
+ 
+ /* Remove the last element of LIST if it is present.  */
+-__attribute_maybe_unused__ __attribute_nonnull__ ((1))
++__attribute_maybe_unused__ __nonnull ((1))
+ static void
+ DYNARRAY_NAME (remove_last) (struct DYNARRAY_STRUCT *list)
+ {
+@@ -435,7 +434,7 @@ DYNARRAY_NAME (remove_last) (struct DYNA
+ 
+ /* Remove all elements from the list.  The elements are freed, but the
+    list itself is not.  */
+-__attribute_maybe_unused__ __attribute_nonnull__ ((1))
++__attribute_maybe_unused__ __nonnull ((1))
+ static void
+ DYNARRAY_NAME (clear) (struct DYNARRAY_STRUCT *list)
+ {
+@@ -453,8 +452,7 @@ DYNARRAY_NAME (clear) (struct DYNARRAY_S
+    stored in *RESULT if LIST refers to an empty list.  On success, the
+    pointer in *RESULT is heap-allocated and must be deallocated using
+    free.  */
+-__attribute_maybe_unused__ __attribute_warn_unused_result__
+-__attribute_nonnull__ ((1, 2))
++__attribute_maybe_unused__ __attribute_warn_unused_result__ __nonnull ((1, 2))
+ static bool
+ DYNARRAY_NAME (finalize) (struct DYNARRAY_STRUCT *list,
+                           DYNARRAY_FINAL_TYPE *result)
+@@ -485,8 +483,7 @@ DYNARRAY_NAME (finalize) (struct DYNARRA
+    have a sentinel at the end).  If LENGTHP is not NULL, the array
+    length is written to *LENGTHP.  *LIST is re-initialized and can be
+    reused.  */
+-__attribute_maybe_unused__ __attribute_warn_unused_result__
+-__attribute_nonnull__ ((1))
++__attribute_maybe_unused__ __attribute_warn_unused_result__ __nonnull ((1))
+ static DYNARRAY_ELEMENT *
+ DYNARRAY_NAME (finalize) (struct DYNARRAY_STRUCT *list, size_t *lengthp)
+ {
diff --git a/nixpkgs/pkgs/development/tools/misc/texlab/default.nix b/nixpkgs/pkgs/development/tools/misc/texlab/default.nix
new file mode 100644
index 000000000000..4756be84a860
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/texlab/default.nix
@@ -0,0 +1,59 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+, help2man
+, installShellFiles
+, libiconv
+, Security
+, CoreServices
+, nix-update-script
+}:
+
+let
+  isCross = stdenv.hostPlatform != stdenv.buildPlatform;
+in
+rustPlatform.buildRustPackage rec {
+  pname = "texlab";
+  version = "5.12.3";
+
+  src = fetchFromGitHub {
+    owner = "latex-lsp";
+    repo = "texlab";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-/QjaAzCPhXzsiRhnRRZcujmk1C9IONYlMfjp/a1iIDA=";
+  };
+
+  cargoHash = "sha256-VDRLbhgQkPkeTpQxRsq8QEU53Zd4b5F0phoq2cAWIK8=";
+
+  outputs = [ "out" ] ++ lib.optional (!isCross) "man";
+
+  nativeBuildInputs = [ installShellFiles ]
+    ++ lib.optional (!isCross) help2man;
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    libiconv
+    Security
+    CoreServices
+  ];
+
+  # When we cross compile we cannot run the output executable to
+  # generate the man page
+  postInstall = lib.optionalString (!isCross) ''
+    # TexLab builds man page separately in CI:
+    # https://github.com/latex-lsp/texlab/blob/v5.12.0/.github/workflows/publish.yml#L117-L121
+    help2man --no-info "$out/bin/texlab" > texlab.1
+    installManPage texlab.1
+  '';
+
+  passthru.updateScript = nix-update-script { };
+
+  meta = with lib; {
+    description = "An implementation of the Language Server Protocol for LaTeX";
+    homepage = "https://github.com/latex-lsp/texlab";
+    changelog = "https://github.com/latex-lsp/texlab/blob/v${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ doronbehar kira-bruneau ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/tie/default.nix b/nixpkgs/pkgs/development/tools/misc/tie/default.nix
new file mode 100644
index 000000000000..52a740ed1c8c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/tie/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "tie";
+  version = "2.4";
+
+  src = fetchurl {
+    url = "http://mirrors.ctan.org/web/tie/${pname}-${version}.tar.gz";
+    sha256 = "1m5952kdfffiz33p1jw0wv7dh272mmw28mpxw9v7lkb352zv4xsj";
+  };
+
+  buildPhase = ''
+    ${stdenv.cc.targetPrefix}cc tie.c -o tie
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp tie $out/bin
+  '';
+
+  meta = with lib; {
+    homepage = "https://www.ctan.org/tex-archive/web/tie";
+    description = "Allow multiple web change files";
+    platforms = platforms.all;
+    maintainers = with maintainers; [ vrthra ];
+    license = licenses.abstyles;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/tockloader/default.nix b/nixpkgs/pkgs/development/tools/misc/tockloader/default.nix
new file mode 100644
index 000000000000..fbca0b0359de
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/tockloader/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, python3
+, fetchPypi
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "tockloader";
+  version = "1.9.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-7W55jugVtamFUL8N3dD1LFLJP2UDQb74V6o96rd/tEg=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    argcomplete
+    colorama
+    crcmod
+    pycryptodome
+    pyserial
+    questionary
+    toml
+    tqdm
+  ];
+
+  # Project has no test suite
+  checkPhase = ''
+    runHook preCheck
+    $out/bin/tockloader --version | grep -q ${version}
+    runHook postCheck
+  '';
+
+  meta = with lib; {
+    description = "Tool for programming Tock onto hardware boards";
+    homepage = "https://github.com/tock/tockloader";
+    changelog = "https://github.com/tock/tockloader/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/development/tools/misc/tokei/default.nix b/nixpkgs/pkgs/development/tools/misc/tokei/default.nix
new file mode 100644
index 000000000000..3472a21f51dd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/tokei/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, libiconv, Security, zlib }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "tokei";
+  version = "12.1.2";
+
+  src = fetchFromGitHub {
+    owner = "XAMPPRocky";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-jqDsxUAMD/MCCI0hamkGuCYa8rEXNZIR8S+84S8FbgI=";
+  };
+
+  cargoSha256 = "sha256-U7Bode8qwDsNf4FVppfEHA9uiOFz74CtKgXG6xyYlT8=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    libiconv Security
+  ];
+
+  checkInputs = lib.optionals stdenv.isDarwin [ zlib ];
+
+  # enable all output formats
+  buildFeatures = [ "all" ];
+
+  meta = with lib; {
+    description = "A program that allows you to count your code, quickly";
+    longDescription = ''
+      Tokei is a program that displays statistics about your code. Tokei will show number of files, total lines within those files and code, comments, and blanks grouped by language.
+    '';
+    homepage = "https://github.com/XAMPPRocky/tokei";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ gebner lilyball ];
+    mainProgram = "tokei";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/topiary/Cargo.lock b/nixpkgs/pkgs/development/tools/misc/topiary/Cargo.lock
new file mode 100644
index 000000000000..0b0af1fcb05d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/topiary/Cargo.lock
@@ -0,0 +1,1741 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "addr2line"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4fa78e18c64fce05e902adecd7a5eed15a5e0a3439f7b0e169f0252214865e3"
+dependencies = [
+ "gimli",
+]
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "aho-corasick"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43f6cb1bf222025340178f382c426f13757b2960e89779dfcb319c32542a5a41"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "anes"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299"
+
+[[package]]
+name = "ansi_term"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "anstream"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ca84f3628370c59db74ee214b3263d58f9aadd9b4fe7e711fd87dc452b7f163"
+dependencies = [
+ "anstyle",
+ "anstyle-parse",
+ "anstyle-query",
+ "anstyle-wincon",
+ "colorchoice",
+ "is-terminal",
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a30da5c5f2d5e72842e00bcb57657162cdabef0931f40e2deb9b4140440cecd"
+
+[[package]]
+name = "anstyle-parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "938874ff5980b03a87c5524b3ae5b59cf99b1d6bc836848df7bc5ada9643c333"
+dependencies = [
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle-query"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b"
+dependencies = [
+ "windows-sys",
+]
+
+[[package]]
+name = "anstyle-wincon"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "180abfa45703aebe0093f79badacc01b8fd4ea2e35118747e5811127f926e188"
+dependencies = [
+ "anstyle",
+ "windows-sys",
+]
+
+[[package]]
+name = "assert_cmd"
+version = "2.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88903cb14723e4d4003335bb7f8a14f27691649105346a0f0957466c096adfe6"
+dependencies = [
+ "anstyle",
+ "bstr",
+ "doc-comment",
+ "predicates",
+ "predicates-core",
+ "predicates-tree",
+ "wait-timeout",
+]
+
+[[package]]
+name = "async-scoped"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e7a6a57c8aeb40da1ec037f5d455836852f7a57e69e1b1ad3d8f38ac1d6cadf"
+dependencies = [
+ "futures",
+ "pin-project",
+ "slab",
+ "tokio",
+]
+
+[[package]]
+name = "async-stream"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51"
+dependencies = [
+ "async-stream-impl",
+ "futures-core",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "async-stream-impl"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.26",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "backtrace"
+version = "0.3.68"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4319208da049c43661739c5fade2ba182f09d1dc2299b32298d3a31692b17e12"
+dependencies = [
+ "addr2line",
+ "cc",
+ "cfg-if",
+ "libc",
+ "miniz_oxide",
+ "object",
+ "rustc-demangle",
+]
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bitflags"
+version = "2.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "630be753d4e58660abd17930c71b647fe46c27ea6b63cc59e1e3851406972e42"
+
+[[package]]
+name = "bstr"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6798148dccfbff0fae41c7574d2fa8f1ef3492fba0face179de5d8d447d67b05"
+dependencies = [
+ "memchr",
+ "regex-automata",
+ "serde",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1"
+
+[[package]]
+name = "bytes"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be"
+
+[[package]]
+name = "cast"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5"
+
+[[package]]
+name = "cc"
+version = "1.0.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "ciborium"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "effd91f6c78e5a4ace8a5d3c0b6bfaec9e2baaef55f3efc00e45fb2e477ee926"
+dependencies = [
+ "ciborium-io",
+ "ciborium-ll",
+ "serde",
+]
+
+[[package]]
+name = "ciborium-io"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cdf919175532b369853f5d5e20b26b43112613fd6fe7aee757e35f7a44642656"
+
+[[package]]
+name = "ciborium-ll"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "defaa24ecc093c77630e6c15e17c51f5e187bf35ee514f4e2d67baaa96dae22b"
+dependencies = [
+ "ciborium-io",
+ "half",
+]
+
+[[package]]
+name = "clap"
+version = "4.3.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c27cdf28c0f604ba3f512b0c9a409f8de8513e4816705deb0498b627e7c3a3fd"
+dependencies = [
+ "clap_builder",
+ "clap_derive",
+ "once_cell",
+]
+
+[[package]]
+name = "clap_builder"
+version = "4.3.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08a9f1ab5e9f01a9b81f202e8562eb9a10de70abf9eaeac1be465c28b75aa4aa"
+dependencies = [
+ "anstream",
+ "anstyle",
+ "clap_lex",
+ "strsim",
+ "terminal_size",
+]
+
+[[package]]
+name = "clap_complete"
+version = "4.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4110a1e6af615a9e6d0a36f805d5c99099f8bab9b8042f5bc1fa220a4a89e36f"
+dependencies = [
+ "clap",
+]
+
+[[package]]
+name = "clap_derive"
+version = "4.3.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54a9bb5758fc5dfe728d1019941681eccaf0cf8a4189b692a0ee2f2ecf90a050"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.26",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2da6da31387c7e4ef160ffab6d5e7f00c42626fe39aea70a7b0f1773f7dd6c1b"
+
+[[package]]
+name = "colorchoice"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
+
+[[package]]
+name = "criterion"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2b12d017a929603d80db1831cd3a24082f8137ce19c69e6447f54f5fc8d692f"
+dependencies = [
+ "anes",
+ "cast",
+ "ciborium",
+ "clap",
+ "criterion-plot",
+ "futures",
+ "is-terminal",
+ "itertools 0.10.5",
+ "num-traits",
+ "once_cell",
+ "oorandom",
+ "plotters",
+ "rayon",
+ "regex",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "tinytemplate",
+ "walkdir",
+]
+
+[[package]]
+name = "criterion-plot"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1"
+dependencies = [
+ "cast",
+ "itertools 0.10.5",
+]
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200"
+dependencies = [
+ "cfg-if",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
+dependencies = [
+ "cfg-if",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7"
+dependencies = [
+ "autocfg",
+ "cfg-if",
+ "crossbeam-utils",
+ "memoffset",
+ "scopeguard",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "diff"
+version = "0.1.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8"
+
+[[package]]
+name = "difflib"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8"
+
+[[package]]
+name = "directories"
+version = "5.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a49173b84e034382284f27f1af4dcbbd231ffa358c0fe316541a7337f376a35"
+dependencies = [
+ "dirs-sys",
+]
+
+[[package]]
+name = "dirs-sys"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c"
+dependencies = [
+ "libc",
+ "option-ext",
+ "redox_users",
+ "windows-sys",
+]
+
+[[package]]
+name = "doc-comment"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10"
+
+[[package]]
+name = "either"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91"
+
+[[package]]
+name = "env_logger"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0"
+dependencies = [
+ "humantime",
+ "is-terminal",
+ "log",
+ "regex",
+ "termcolor",
+]
+
+[[package]]
+name = "equivalent"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
+
+[[package]]
+name = "errno"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "windows-sys",
+]
+
+[[package]]
+name = "errno-dragonfly"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "fastrand"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "float-cmp"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "futures"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-io",
+ "futures-sink",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c"
+
+[[package]]
+name = "futures-executor"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-io"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964"
+
+[[package]]
+name = "futures-macro"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.26",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e"
+
+[[package]]
+name = "futures-task"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65"
+
+[[package]]
+name = "futures-util"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-macro",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "gimli"
+version = "0.27.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e"
+
+[[package]]
+name = "half"
+version = "1.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7"
+
+[[package]]
+name = "hashbrown"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a"
+
+[[package]]
+name = "heck"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b"
+
+[[package]]
+name = "humantime"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
+
+[[package]]
+name = "indexmap"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d"
+dependencies = [
+ "equivalent",
+ "hashbrown",
+]
+
+[[package]]
+name = "indoc"
+version = "2.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c785eefb63ebd0e33416dfcb8d6da0bf27ce752843a45632a67bf10d4d4b5c4"
+
+[[package]]
+name = "instant"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "io-lifetimes"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2"
+dependencies = [
+ "hermit-abi",
+ "libc",
+ "windows-sys",
+]
+
+[[package]]
+name = "is-terminal"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b"
+dependencies = [
+ "hermit-abi",
+ "rustix 0.38.4",
+ "windows-sys",
+]
+
+[[package]]
+name = "itertools"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itertools"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
+
+[[package]]
+name = "js-sys"
+version = "0.3.61"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.147"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09fc20d2ca12cb9f044c93e3bd6d32d523e6e2ec3db4f7b2939cd99026ecd3f0"
+
+[[package]]
+name = "log"
+version = "0.4.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4"
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "memoffset"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "miniz_oxide"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "normalize-line-endings"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be"
+
+[[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.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
+dependencies = [
+ "hermit-abi",
+ "libc",
+]
+
+[[package]]
+name = "object"
+version = "0.31.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8bda667d9f2b5051b8833f59f3bf748b28ef54f850f4fcb389a252aa383866d1"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
+
+[[package]]
+name = "oorandom"
+version = "11.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575"
+
+[[package]]
+name = "option-ext"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d"
+
+[[package]]
+name = "pad"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2ad9b889f1b12e0b9ee24db044b5129150d5eada288edc800f789928dc8c0e3"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "pin-project"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422"
+dependencies = [
+ "pin-project-internal",
+]
+
+[[package]]
+name = "pin-project-internal"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.26",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "plotters"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2c224ba00d7cadd4d5c660deaf2098e5e80e07846537c51f9cfa4be50c1fd45"
+dependencies = [
+ "num-traits",
+ "plotters-backend",
+ "plotters-svg",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "plotters-backend"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e76628b4d3a7581389a35d5b6e2139607ad7c75b17aed325f210aa91f4a9609"
+
+[[package]]
+name = "plotters-svg"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38f6d39893cca0701371e3c27294f09797214b86f1fb951b89ade8ec04e2abab"
+dependencies = [
+ "plotters-backend",
+]
+
+[[package]]
+name = "predicates"
+version = "3.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09963355b9f467184c04017ced4a2ba2d75cbcb4e7462690d388233253d4b1a9"
+dependencies = [
+ "anstyle",
+ "difflib",
+ "float-cmp",
+ "itertools 0.10.5",
+ "normalize-line-endings",
+ "predicates-core",
+ "regex",
+]
+
+[[package]]
+name = "predicates-core"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b794032607612e7abeb4db69adb4e33590fa6cf1149e95fd7cb00e634b92f174"
+
+[[package]]
+name = "predicates-tree"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "368ba315fb8c5052ab692e68a0eefec6ec57b23a36959c14496f0b0df2c0cecf"
+dependencies = [
+ "predicates-core",
+ "termtree",
+]
+
+[[package]]
+name = "pretty_assertions"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af7cee1a6c8a5b9208b3cb1061f10c0cb689087b3d8ce85fb9d2dd7a29b6ba66"
+dependencies = [
+ "diff",
+ "yansi",
+]
+
+[[package]]
+name = "prettydiff"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ff1fec61082821f8236cf6c0c14e8172b62ce8a72a0eedc30d3b247bb68dc11"
+dependencies = [
+ "ansi_term",
+ "pad",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.66"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fe8a65d69dd0808184ebb5f836ab526bb259db23c657efa38711b1072ee47f0"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rayon"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b"
+dependencies = [
+ "either",
+ "rayon-core",
+]
+
+[[package]]
+name = "rayon-core"
+version = "1.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d"
+dependencies = [
+ "crossbeam-channel",
+ "crossbeam-deque",
+ "crossbeam-utils",
+ "num_cpus",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "redox_users"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b"
+dependencies = [
+ "getrandom",
+ "redox_syscall 0.2.16",
+ "thiserror",
+]
+
+[[package]]
+name = "regex"
+version = "1.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2eae68fc220f7cf2532e4494aded17545fce192d59cd996e0fe7887f4ceb575"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-automata",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39354c10dd07468c2e73926b23bb9c2caca74c5501e38a35da70406f1d923310"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5ea92a5b6195c6ef2a0295ea818b312502c6fc94dde986c5553242e18fd4ce2"
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
+
+[[package]]
+name = "rustix"
+version = "0.37.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d69718bf81c6127a49dc64e44a742e8bb9213c0ff8869a22c308f84c1d4ab06"
+dependencies = [
+ "bitflags 1.3.2",
+ "errno",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys 0.3.8",
+ "windows-sys",
+]
+
+[[package]]
+name = "rustix"
+version = "0.38.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0a962918ea88d644592894bc6dc55acc6c0956488adcebbfb6e273506b7fd6e5"
+dependencies = [
+ "bitflags 2.3.3",
+ "errno",
+ "libc",
+ "linux-raw-sys 0.4.3",
+ "windows-sys",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741"
+
+[[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 = "scopeguard"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+
+[[package]]
+name = "serde"
+version = "1.0.171"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30e27d1e4fd7659406c492fd6cfaf2066ba8773de45ca75e855590f856dc34a9"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde-toml-merge"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a78072b550e5c20bc4a9d1384be28809cbdb7b25b2b4707ddc6d908b7e6de3bf"
+dependencies = [
+ "toml",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.171"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "389894603bd18c46fa56231694f8d827779c0951a667087194cf9de94ed24682"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.26",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.103"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d03b412469450d4404fe8499a268edd7f8b79fecb074b0d812ad64ca21f4031b"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_spanned"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96426c9936fd7a0124915f9185ea1d20aa9445cc9821142f0a73bc9207a2e186"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "slab"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d"
+dependencies = [
+ "autocfg",
+]
+
+[[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.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "45c3457aacde3c65315de5031ec191ce46604304d2446e803d71ade03308d970"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "tempfile"
+version = "3.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31c0432476357e58790aaa47a8efb0c5138f137343f3b5f23bd36a27e3b0a6d6"
+dependencies = [
+ "autocfg",
+ "cfg-if",
+ "fastrand",
+ "redox_syscall 0.3.5",
+ "rustix 0.37.23",
+ "windows-sys",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "terminal_size"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e6bf6f19e9f8ed8d4048dc22981458ebcf406d67e94cd422e5ecd73d63b3237"
+dependencies = [
+ "rustix 0.37.23",
+ "windows-sys",
+]
+
+[[package]]
+name = "termtree"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76"
+
+[[package]]
+name = "test-log"
+version = "0.2.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9601d162c1d77e62c1ea0bc8116cd1caf143ce3af947536c3c9052a1677fe0c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.43"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a35fc5b8971143ca348fa6df4f024d4d55264f3468c71ad1c2f365b0a4d58c42"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.43"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "463fe12d7993d3b327787537ce8dd4dfa058de32fc2b195ef3cde03dc4771e8f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.26",
+]
+
+[[package]]
+name = "tinytemplate"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc"
+dependencies = [
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "tokio"
+version = "1.32.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17ed6077ed6cd6c74735e21f37eb16dc3935f96878b1fe961074089cc80893f9"
+dependencies = [
+ "backtrace",
+ "num_cpus",
+ "pin-project-lite",
+ "tokio-macros",
+]
+
+[[package]]
+name = "tokio-macros"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.26",
+]
+
+[[package]]
+name = "tokio-stream"
+version = "0.1.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842"
+dependencies = [
+ "futures-core",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-test"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53474327ae5e166530d17f2d956afcb4f8a004de581b3cae10f12006bc8163e3"
+dependencies = [
+ "async-stream",
+ "bytes",
+ "futures-core",
+ "tokio",
+ "tokio-stream",
+]
+
+[[package]]
+name = "toml"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c17e963a819c331dcacd7ab957d80bc2b9a9c1e71c804826d2f283dd65306542"
+dependencies = [
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "toml_edit",
+]
+
+[[package]]
+name = "toml_datetime"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.19.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8123f27e969974a3dfba720fdb560be359f57b44302d280ba72e76a74480e8a"
+dependencies = [
+ "indexmap",
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "winnow",
+]
+
+[[package]]
+name = "topiary"
+version = "0.3.0"
+dependencies = [
+ "clap",
+ "criterion",
+ "env_logger",
+ "futures",
+ "itertools 0.11.0",
+ "log",
+ "pretty_assertions",
+ "prettydiff",
+ "regex",
+ "serde",
+ "serde_json",
+ "test-log",
+ "tokio",
+ "tokio-test",
+ "toml",
+ "tree-sitter-bash",
+ "tree-sitter-facade",
+ "tree-sitter-json",
+ "tree-sitter-nickel",
+ "tree-sitter-ocaml",
+ "tree-sitter-ocamllex",
+ "tree-sitter-query",
+ "tree-sitter-rust",
+ "tree-sitter-toml",
+ "unescape",
+ "web-tree-sitter-sys",
+]
+
+[[package]]
+name = "topiary-cli"
+version = "0.3.0"
+dependencies = [
+ "assert_cmd",
+ "async-scoped",
+ "clap",
+ "clap_complete",
+ "directories",
+ "env_logger",
+ "futures",
+ "indoc",
+ "itertools 0.11.0",
+ "log",
+ "predicates",
+ "serde-toml-merge",
+ "tempfile",
+ "tokio",
+ "toml",
+ "topiary",
+ "topiary-queries",
+ "tree-sitter-bash",
+ "tree-sitter-facade",
+ "tree-sitter-json",
+ "tree-sitter-nickel",
+ "tree-sitter-ocaml",
+ "tree-sitter-ocamllex",
+ "tree-sitter-query",
+ "tree-sitter-rust",
+ "tree-sitter-toml",
+]
+
+[[package]]
+name = "topiary-playground"
+version = "0.3.0"
+dependencies = [
+ "cfg-if",
+ "itertools 0.11.0",
+ "topiary",
+ "tree-sitter-facade",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+]
+
+[[package]]
+name = "topiary-queries"
+version = "0.3.0"
+
+[[package]]
+name = "tree-sitter"
+version = "0.20.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e747b1f9b7b931ed39a548c1fae149101497de3c1fc8d9e18c62c1a66c683d3d"
+dependencies = [
+ "cc",
+ "regex",
+]
+
+[[package]]
+name = "tree-sitter-bash"
+version = "0.19.0"
+source = "git+https://github.com/tree-sitter/tree-sitter-bash#1b0321ee85701d5036c334a6f04761cdc672e64c"
+dependencies = [
+ "cc",
+ "tree-sitter",
+]
+
+[[package]]
+name = "tree-sitter-facade"
+version = "0.9.3"
+source = "git+https://github.com/tweag/tree-sitter-facade#1b290e795e700a57d8bd303f98a9715ab1c4f598"
+dependencies = [
+ "js-sys",
+ "tree-sitter",
+ "wasm-bindgen",
+ "web-sys",
+ "web-tree-sitter-sys",
+]
+
+[[package]]
+name = "tree-sitter-json"
+version = "0.20.0"
+source = "git+https://github.com/tree-sitter/tree-sitter-json.git#ca3f8919800e3c1ad4508de3bfd7b0b860ce434f"
+dependencies = [
+ "cc",
+ "tree-sitter",
+]
+
+[[package]]
+name = "tree-sitter-nickel"
+version = "0.0.1"
+source = "git+https://github.com/nickel-lang/tree-sitter-nickel?rev=b1a4718601ebd29a62bf3a7fd1069a99ccf48093#b1a4718601ebd29a62bf3a7fd1069a99ccf48093"
+dependencies = [
+ "cc",
+ "tree-sitter",
+]
+
+[[package]]
+name = "tree-sitter-ocaml"
+version = "0.20.4"
+source = "git+https://github.com/tree-sitter/tree-sitter-ocaml.git#694c57718fd85d514f8b81176038e7a4cfabcaaf"
+dependencies = [
+ "cc",
+ "tree-sitter",
+]
+
+[[package]]
+name = "tree-sitter-ocamllex"
+version = "0.20.2"
+source = "git+https://github.com/314eter/tree-sitter-ocamllex.git#4b9898ccbf198602bb0dec9cd67cc1d2c0a4fad2"
+dependencies = [
+ "cc",
+ "tree-sitter",
+]
+
+[[package]]
+name = "tree-sitter-query"
+version = "0.1.0"
+source = "git+https://github.com/nvim-treesitter/tree-sitter-query#3a9808b22742d5bd906ef5d1a562f2f1ae57406d"
+dependencies = [
+ "cc",
+ "tree-sitter",
+]
+
+[[package]]
+name = "tree-sitter-rust"
+version = "0.20.4"
+source = "git+https://github.com/tree-sitter/tree-sitter-rust.git#17a6b15562b09db1f27b8f5f26f17edbb2aac097"
+dependencies = [
+ "cc",
+ "tree-sitter",
+]
+
+[[package]]
+name = "tree-sitter-toml"
+version = "0.5.1"
+source = "git+https://github.com/tree-sitter/tree-sitter-toml.git#342d9be207c2dba869b9967124c679b5e6fd0ebe"
+dependencies = [
+ "cc",
+ "tree-sitter",
+]
+
+[[package]]
+name = "unescape"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ccb97dac3243214f8d8507998906ca3e2e0b900bf9bf4870477f125b82e68f6e"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+
+[[package]]
+name = "utf8parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
+
+[[package]]
+name = "wait-timeout"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "walkdir"
+version = "2.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698"
+dependencies = [
+ "same-file",
+ "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 = "wasm-bindgen"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.34"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f219e0d211ba40266969f6dbdd90636da12f75bee4fc9d6c23d1260dadb51454"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d"
+
+[[package]]
+name = "web-sys"
+version = "0.3.61"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "web-tree-sitter-sys"
+version = "1.3.0"
+source = "git+https://github.com/tweag/web-tree-sitter-sys#9e9755b9ab59055092de4717ba0bafe6483f4e5c"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+]
+
+[[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"
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05d4b17490f70499f20b9e791dcf6a299785ce8af4d709018206dc5b4953e95f"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
+
+[[package]]
+name = "winnow"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81fac9742fd1ad1bd9643b991319f72dd031016d44b77039a26977eb667141e7"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "yansi"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec"
diff --git a/nixpkgs/pkgs/development/tools/misc/topiary/default.nix b/nixpkgs/pkgs/development/tools/misc/topiary/default.nix
new file mode 100644
index 000000000000..cb4f3884d79f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/topiary/default.nix
@@ -0,0 +1,58 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, stdenv
+, nix-update-script
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "topiary";
+  version = "0.3.0";
+
+  src = fetchFromGitHub {
+    owner = "tweag";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-zt4uXkO6Y0Yc1Wt8l5O79oKbgNLrgip40ftD7UfUPwo=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "tree-sitter-bash-0.19.0" = "sha256-a0/KyHV2jUpytsZSHI7tVw8GfYnuqVjfs5KScLZkB0I=";
+      "tree-sitter-facade-0.9.3" = "sha256-M/npshnHJkU70pP3I4WMXp3onlCSWM5mMIqXP45zcUs=";
+      "tree-sitter-json-0.20.0" = "sha256-cyrea0Y13OVGkXbYE0Cwc7nUsDGEZyoQmPAS9wVuHw0=";
+      "tree-sitter-nickel-0.0.1" = "sha256-aYsEx1Y5oDEqSPCUbf1G3J5Y45ULT9OkD+fn6stzrOU=";
+      "tree-sitter-ocaml-0.20.4" = "sha256-j3Hv2qOMxeBNOW+WIgIYzG3zMIFWPQpoHe94b2rT+A8=";
+      "tree-sitter-ocamllex-0.20.2" = "sha256-YhmEE7I7UF83qMuldHqc/fD/no/7YuZd6CaAIaZ1now=";
+      "tree-sitter-query-0.1.0" = "sha256-5N7FT0HTK3xzzhAlk3wBOB9xlEpKSNIfakgFnsxEi18=";
+      "tree-sitter-rust-0.20.4" = "sha256-seWoMuA87ZWCq3mUXopVeDCcTxX/Bh+B4PFLVa0CBQA=";
+      "tree-sitter-toml-0.5.1" = "sha256-5nLNBxFeOGE+gzbwpcrTVnuL1jLUA0ZLBVw2QrOLsDQ=";
+      "web-tree-sitter-sys-1.3.0" = "sha256-9rKB0rt0y9TD/HLRoB9LjEP9nO4kSWR9ylbbOXo2+2M=";
+    };
+  };
+
+  cargoBuildFlags = [ "-p" "topiary-cli" ];
+  cargoTestFlags = cargoBuildFlags;
+
+  env = {
+    TOPIARY_LANGUAGE_DIR = "${placeholder "out"}/share/queries";
+  } // lib.optionalAttrs stdenv.cc.isClang {
+    # Work around https://github.com/NixOS/nixpkgs/issues/166205.
+    NIX_LDFLAGS = "-l${stdenv.cc.libcxx.cxxabi.libName}";
+  };
+
+  postInstall = ''
+    install -Dm444 queries/* -t $out/share/queries
+  '';
+
+  passthru.updateScript = nix-update-script { };
+
+  meta = with lib; {
+    description = "A uniform formatter for simple languages, as part of the Tree-sitter ecosystem";
+    homepage = "https://github.com/tweag/topiary";
+    changelog = "https://github.com/tweag/topiary/blob/${src.rev}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/travis/Gemfile b/nixpkgs/pkgs/development/tools/misc/travis/Gemfile
new file mode 100644
index 000000000000..3da9975913e8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/travis/Gemfile
@@ -0,0 +1,4 @@
+source "https://rubygems.org"
+
+gem "travis"
+gem "pry", "~> 0.11.0"
diff --git a/nixpkgs/pkgs/development/tools/misc/travis/Gemfile.lock b/nixpkgs/pkgs/development/tools/misc/travis/Gemfile.lock
new file mode 100644
index 000000000000..91df15a9bb65
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/travis/Gemfile.lock
@@ -0,0 +1,71 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    activesupport (5.2.4.3)
+      concurrent-ruby (~> 1.0, >= 1.0.2)
+      i18n (>= 0.7, < 2)
+      minitest (~> 5.1)
+      tzinfo (~> 1.1)
+    addressable (2.7.0)
+      public_suffix (>= 2.0.2, < 5.0)
+    coderay (1.1.3)
+    concurrent-ruby (1.1.6)
+    ethon (0.12.0)
+      ffi (>= 1.3.0)
+    faraday (1.0.1)
+      multipart-post (>= 1.2, < 3)
+    faraday_middleware (1.0.0)
+      faraday (~> 1.0)
+    ffi (1.13.1)
+    gh (0.17.0)
+      activesupport (~> 5.0)
+      addressable (~> 2.4)
+      faraday (~> 1.0)
+      faraday_middleware (~> 1.0)
+      multi_json (~> 1.0)
+      net-http-persistent (~> 2.9)
+      net-http-pipeline
+    highline (2.0.3)
+    i18n (1.8.3)
+      concurrent-ruby (~> 1.0)
+    json (2.3.0)
+    launchy (2.4.3)
+      addressable (~> 2.3)
+    method_source (0.9.2)
+    minitest (5.14.1)
+    multi_json (1.14.1)
+    multipart-post (2.1.1)
+    net-http-persistent (2.9.4)
+    net-http-pipeline (1.0.1)
+    pry (0.11.3)
+      coderay (~> 1.1.0)
+      method_source (~> 0.9.0)
+    public_suffix (4.0.5)
+    pusher-client (0.6.2)
+      json
+      websocket (~> 1.0)
+    thread_safe (0.3.6)
+    travis (1.9.1)
+      faraday (~> 1.0)
+      faraday_middleware (~> 1.0)
+      gh (~> 0.13)
+      highline (~> 2.0)
+      json (~> 2.3)
+      launchy (~> 2.1, < 2.5.0)
+      pusher-client (~> 0.4)
+      typhoeus (~> 0.6, >= 0.6.8)
+    typhoeus (0.8.0)
+      ethon (>= 0.8.0)
+    tzinfo (1.2.7)
+      thread_safe (~> 0.1)
+    websocket (1.2.8)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  pry (~> 0.11.0)
+  travis
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/development/tools/misc/travis/default.nix b/nixpkgs/pkgs/development/tools/misc/travis/default.nix
new file mode 100644
index 000000000000..0be7721fe080
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/travis/default.nix
@@ -0,0 +1,16 @@
+{ lib, bundlerEnv, ruby, bundlerUpdateScript }:
+
+bundlerEnv {
+  inherit ruby;
+  pname = "travis";
+  gemdir = ./.;
+
+  passthru.updateScript = bundlerUpdateScript "travis";
+
+  meta = with lib; {
+    description = "CLI and Ruby client library for Travis CI";
+    homepage    = "https://github.com/travis-ci/travis.rb";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ zimbatm nicknovitski ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/travis/gemset.nix b/nixpkgs/pkgs/development/tools/misc/travis/gemset.nix
new file mode 100644
index 000000000000..02b39bfca947
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/travis/gemset.nix
@@ -0,0 +1,269 @@
+{
+  activesupport = {
+    dependencies = ["concurrent-ruby" "i18n" "minitest" "tzinfo"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "02fdawr3wyvpzpja3r7mvb8lmn2mm5jdw502bx3ncr2sy2nw1kx6";
+      type = "gem";
+    };
+    version = "5.2.4.3";
+  };
+  addressable = {
+    dependencies = ["public_suffix"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fvchp2rhp2rmigx7qglf69xvjqvzq7x0g49naliw29r2bz656sy";
+      type = "gem";
+    };
+    version = "2.7.0";
+  };
+  coderay = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jvxqxzply1lwp7ysn94zjhh57vc14mcshw1ygw14ib8lhc00lyw";
+      type = "gem";
+    };
+    version = "1.1.3";
+  };
+  concurrent-ruby = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "094387x4yasb797mv07cs3g6f08y56virc2rjcpb1k79rzaj3nhl";
+      type = "gem";
+    };
+    version = "1.1.6";
+  };
+  ethon = {
+    dependencies = ["ffi"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0gggrgkcq839mamx7a8jbnp2h7x2ykfn34ixwskwb0lzx2ak17g9";
+      type = "gem";
+    };
+    version = "0.12.0";
+  };
+  faraday = {
+    dependencies = ["multipart-post"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0wwks9652xwgjm7yszcq5xr960pjypc07ivwzbjzpvy9zh2fw6iq";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  faraday_middleware = {
+    dependencies = ["faraday"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jik2kgfinwnfi6fpp512vlvs0mlggign3gkbpkg5fw1jr9his0r";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  ffi = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "12lpwaw82bb0rm9f52v1498bpba8aj2l2q359mkwbxsswhpga5af";
+      type = "gem";
+    };
+    version = "1.13.1";
+  };
+  gh = {
+    dependencies = ["activesupport" "addressable" "faraday" "faraday_middleware" "multi_json" "net-http-persistent" "net-http-pipeline"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1nj2dm2pahfa4d39y8csvjv5l3hpsm6yjq2y96vj2bqgg0qs26bj";
+      type = "gem";
+    };
+    version = "0.17.0";
+  };
+  highline = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0yclf57n2j3cw8144ania99h1zinf8q3f5zrhqa754j6gl95rp9d";
+      type = "gem";
+    };
+    version = "2.0.3";
+  };
+  i18n = {
+    dependencies = ["concurrent-ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "10nq1xjqvkhngiygji831qx9bryjwws95r4vrnlq9142bzkg670s";
+      type = "gem";
+    };
+    version = "1.8.3";
+  };
+  json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nrmw2r4nfxlfgprfgki3hjifgrcrs3l5zvm3ca3gb4743yr25mn";
+      type = "gem";
+    };
+    version = "2.3.0";
+  };
+  launchy = {
+    dependencies = ["addressable"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "190lfbiy1vwxhbgn4nl4dcbzxvm049jwc158r2x7kq3g5khjrxa2";
+      type = "gem";
+    };
+    version = "2.4.3";
+  };
+  method_source = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pviwzvdqd90gn6y7illcdd9adapw8fczml933p5vl739dkvl3lq";
+      type = "gem";
+    };
+    version = "0.9.2";
+  };
+  minitest = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09bz9nsznxgaf06cx3b5z71glgl0hdw469gqx3w7bqijgrb55p5g";
+      type = "gem";
+    };
+    version = "5.14.1";
+  };
+  multi_json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xy54mjf7xg41l8qrg1bqri75agdqmxap9z466fjismc1rn2jwfr";
+      type = "gem";
+    };
+    version = "1.14.1";
+  };
+  multipart-post = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zgw9zlwh2a6i1yvhhc4a84ry1hv824d6g2iw2chs3k5aylpmpfj";
+      type = "gem";
+    };
+    version = "2.1.1";
+  };
+  net-http-persistent = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1y9fhaax0d9kkslyiqi1zys6cvpaqx9a0y0cywp24rpygwh4s9r4";
+      type = "gem";
+    };
+    version = "2.9.4";
+  };
+  net-http-pipeline = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bxjy33yhxwsbnld8xj3zv64ibgfjn9rjpiqkyd5ipmz50pww8v9";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  pry = {
+    dependencies = ["coderay" "method_source"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1mh312k3y94sj0pi160wpia0ps8f4kmzvm505i6bvwynfdh7v30g";
+      type = "gem";
+    };
+    version = "0.11.3";
+  };
+  public_suffix = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0vywld400fzi17cszwrchrzcqys4qm6sshbv73wy5mwcixmrgg7g";
+      type = "gem";
+    };
+    version = "4.0.5";
+  };
+  pusher-client = {
+    dependencies = ["json" "websocket"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "18ymxz34gmg7jff3h0nyzp5vdg5i06dbdxlrdl2nq4hf14qwj1f4";
+      type = "gem";
+    };
+    version = "0.6.2";
+  };
+  thread_safe = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nmhcgq6cgz44srylra07bmaw99f5271l0dpsvl5f75m44l0gmwy";
+      type = "gem";
+    };
+    version = "0.3.6";
+  };
+  travis = {
+    dependencies = ["faraday" "faraday_middleware" "gh" "highline" "json" "launchy" "pusher-client" "typhoeus"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1yizj5nqvyrfbyiv1kfwc33dylhsmk5l007z06djj152v04z63i3";
+      type = "gem";
+    };
+    version = "1.9.1";
+  };
+  typhoeus = {
+    dependencies = ["ethon"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "03x3fxjsnhgayl4s96h0a9975awlvx2v9nmx2ba0cnliglyczdr8";
+      type = "gem";
+    };
+    version = "0.8.0";
+  };
+  tzinfo = {
+    dependencies = ["thread_safe"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1i3jh086w1kbdj3k5l60lc3nwbanmzdf8yjj3mlrx9b2gjjxhi9r";
+      type = "gem";
+    };
+    version = "1.2.7";
+  };
+  websocket = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0f11rcn4qgffb1rq4kjfwi7di79w8840x9l74pkyif5arp0mb08x";
+      type = "gem";
+    };
+    version = "1.2.8";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/travis/shell.nix b/nixpkgs/pkgs/development/tools/misc/travis/shell.nix
new file mode 100644
index 000000000000..ddcf493bb468
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/travis/shell.nix
@@ -0,0 +1,11 @@
+# Env to update Gemfile.lock / gemset.nix
+
+with import <nixpkgs> {};
+stdenv.mkDerivation {
+  name = "env";
+  buildInputs = [
+    ruby.devEnv
+    gnumake
+    bundix
+  ];
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/ttags/default.nix b/nixpkgs/pkgs/development/tools/misc/ttags/default.nix
new file mode 100644
index 000000000000..f07f2d3ef5e8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/ttags/default.nix
@@ -0,0 +1,44 @@
+{ lib, fetchFromGitHub, rustPlatform, testers, ttags }:
+let version = "0.3.0";
+in rustPlatform.buildRustPackage {
+  pname = "ttags";
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner = "npezza93";
+    repo = "ttags";
+    rev = "${version}";
+    hash = "sha256-yqrCcA/+FyGPpX3hhULiwhMfrDWjq+rzT04M+o9ry5s=";
+  };
+
+  cargoHash = "sha256-jW3xIlo2cN5aoEUp3FxN4pwGFvlg50i5RMNgQopGb88=";
+
+  passthru.tests.version = testers.testVersion {
+    package = ttags;
+    command = "ttags --version";
+    version = version;
+  };
+
+  meta = with lib; {
+    description = "Generate tags using tree-sitter";
+    longDescription = ''
+      ttags generates tags (similar to ctags) for various
+      languages, using tree-sitter.
+
+      Can be run as a language server that updates the tags
+      for a file when it is saved.
+
+      Supported languages:
+      - Haskell
+      - JavaScript
+      - Nix
+      - Ruby
+      - Rust
+      - Swift
+    '';
+    homepage = "https://github.com/npezza93/ttags";
+    license = licenses.mit;
+    maintainers = with maintainers; [ mrcjkb ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/typical/default.nix b/nixpkgs/pkgs/development/tools/misc/typical/default.nix
new file mode 100644
index 000000000000..7944f14ca4d6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/typical/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, installShellFiles
+, stdenv
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "typical";
+  version = "0.9.7";
+
+  src = fetchFromGitHub {
+    owner = "stepchowfun";
+    repo = "typical";
+    rev = "v${version}";
+    hash = "sha256-UoTzgYxLdlWefNLeege7+tlqWh4uzotO5EbcyqvU2Xo=";
+  };
+
+  cargoHash = "sha256-GIyvwByzNKFvEdVSLo2cxuQ7JvKRFezhyKQrWjbj7Kk=";
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  preCheck = ''
+    export NO_COLOR=true
+  '';
+
+  postInstall = lib.optionalString (stdenv.buildPlatform.canExecute stdenv.hostPlatform) ''
+    installShellCompletion --cmd typical \
+      --bash <($out/bin/typical shell-completion bash) \
+      --fish <($out/bin/typical shell-completion fish) \
+      --zsh <($out/bin/typical shell-completion zsh)
+  '';
+
+  meta = with lib; {
+    description = "Data interchange with algebraic data types";
+    homepage = "https://github.com/stepchowfun/typical";
+    changelog = "https://github.com/stepchowfun/typical/blob/${src.rev}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/tyson/default.nix b/nixpkgs/pkgs/development/tools/misc/tyson/default.nix
new file mode 100644
index 000000000000..b10b78708b58
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/tyson/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+}:
+
+buildGoModule rec {
+  pname = "tyson";
+  version = "0.1.1";
+
+  src = fetchFromGitHub {
+    owner = "jetpack-io";
+    repo = "tyson";
+    rev = "v${version}";
+    hash = "sha256-c4ROLn+BSX7v/4C9/IeU6HiE2YvnqDuXXGp2iZhAVk4=";
+  };
+
+  vendorHash = "sha256-NhDv7oH8LK/vebwjs55tsCCWVhbZZd15z5ewOF5z9+Y=";
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  ldflags = [ "-s" "-w" ];
+
+  postInstall = ''
+    installShellCompletion --cmd tyson \
+      --bash <($out/bin/tyson completion bash) \
+      --fish <($out/bin/tyson completion fish) \
+      --zsh <($out/bin/tyson completion zsh)
+  '';
+
+  meta = with lib; {
+    description = "TypeScript as a configuration language";
+    homepage = "https://github.com/jetpack-io/tyson";
+    changelog = "https://github.com/jetpack-io/tyson/releases/tag/${src.rev}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/uncrustify/default.nix b/nixpkgs/pkgs/development/tools/misc/uncrustify/default.nix
new file mode 100644
index 000000000000..d57010a4bad3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/uncrustify/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchFromGitHub, cmake, python3 }:
+
+stdenv.mkDerivation rec {
+  pname = "uncrustify";
+  version = "0.78.1";
+
+  src = fetchFromGitHub {
+    owner = "uncrustify";
+    repo = "uncrustify";
+    rev = "uncrustify-${version}";
+    sha256 = "sha256-L+YEVZC7sIDYuCM3xpSfZLjA3B8XsW5hi+zV2NEgXTs=";
+  };
+
+  nativeBuildInputs = [ cmake python3 ];
+
+  meta = with lib; {
+    description = "Source code beautifier for C, C++, C#, ObjectiveC, D, Java, Pawn and VALA";
+    homepage = "https://uncrustify.sourceforge.net/";
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/unifdef/default.nix b/nixpkgs/pkgs/development/tools/misc/unifdef/default.nix
new file mode 100644
index 000000000000..ebb034a92e72
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/unifdef/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "unifdef";
+  version = "2.12";
+
+  src = fetchurl {
+    url = "https://dotat.at/prog/unifdef/unifdef-${version}.tar.xz";
+    sha256 = "00647bp3m9n01ck6ilw6r24fk4mivmimamvm4hxp5p6wxh10zkj3";
+  };
+
+  makeFlags = [
+    "prefix=$(out)"
+    "DESTDIR="
+  ];
+
+  meta = with lib; {
+    homepage = "https://dotat.at/prog/unifdef/";
+    description = "Selectively remove C preprocessor conditionals";
+    license = licenses.bsd2;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ orivej vrthra ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/universal-ctags/000-nixos-specific.patch b/nixpkgs/pkgs/development/tools/misc/universal-ctags/000-nixos-specific.patch
new file mode 100644
index 000000000000..8445b36b204a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/universal-ctags/000-nixos-specific.patch
@@ -0,0 +1,14 @@
+This small Nix-specific patch removes a source of impurity from source code,
+namely the date and time of compilation.
+
+diff -Naur uctags-old/main/options.c uctags-new/main/options.c
+--- uctags-old/main/options.c	1969-12-31 21:00:01.000000000 -0300
++++ uctags-new/main/options.c	2022-11-06 11:43:00.028550121 -0300
+@@ -1609,7 +1609,6 @@
+ 	printf ("Universal Ctags is derived from Exuberant Ctags.\n");
+ 	printf ("Exuberant Ctags 5.8, Copyright (C) 1996-2009 Darren Hiebert\n");
+ 
+-	printf ("  Compiled: %s, %s\n", __DATE__, __TIME__);
+ 	printf ("  URL: %s\n", PROGRAM_URL);
+ 
+ 	printFeatureList ();
diff --git a/nixpkgs/pkgs/development/tools/misc/universal-ctags/default.nix b/nixpkgs/pkgs/development/tools/misc/universal-ctags/default.nix
new file mode 100644
index 000000000000..65f4ab67a161
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/universal-ctags/default.nix
@@ -0,0 +1,84 @@
+{ lib
+, stdenv
+, autoreconfHook
+, buildPackages
+, coreutils
+, fetchFromGitHub
+, jansson
+, libiconv
+, perl
+, pkg-config
+, python3
+, libseccomp
+, libyaml
+, pcre2
+, libxml2
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "universal-ctags";
+  version = "6.1.0";
+
+  src = fetchFromGitHub {
+    owner = "universal-ctags";
+    repo = "ctags";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-f8+Ifjn7bhSYozOy7kn+zCLdHGrH3iFupHUZEGynz9Y=";
+  };
+
+  depsBuildBuild = [
+    buildPackages.stdenv.cc
+  ];
+
+  nativeBuildInputs = [
+    autoreconfHook
+    perl
+    pkg-config
+    (python3.withPackages (p: [ p.docutils ]))
+  ];
+
+  buildInputs = [
+    libyaml
+    pcre2
+    libxml2
+    jansson
+  ]
+  ++ lib.optional stdenv.isDarwin libiconv
+  ++ lib.optional stdenv.isLinux libseccomp;
+
+  configureFlags = [ "--enable-tmpdir=/tmp" ];
+
+  patches = [
+    ./000-nixos-specific.patch
+  ];
+
+  postPatch = ''
+    substituteInPlace Tmain/utils.sh \
+      --replace /bin/echo ${coreutils}/bin/echo
+    # fails on sandbox
+    rm -fr Tmain/ptag-proc-cwd.d/
+    patchShebangs misc/*
+  '';
+
+  doCheck = true;
+
+  checkFlags = [
+    "man-test" "tlib" "tmain" "tutil" "units"
+  ];
+
+  meta = with lib; {
+    homepage = "https://docs.ctags.io/en/latest/";
+    description = "A maintained ctags implementation";
+    longDescription = ''
+      Universal Ctags (abbreviated as u-ctags) is a maintained implementation of
+      ctags. ctags generates an index (or tag) file of language objects found in
+      source files for programming languages. This index makes it easy for text
+      editors and other tools to locate the indexed items.
+    '';
+    license = licenses.gpl2Plus;
+    maintainers = [ maintainers.AndersonTorres ];
+    platforms = platforms.all;
+    mainProgram = "ctags";
+    priority = 1; # over the emacs implementation
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/misc/unixbench/common.patch b/nixpkgs/pkgs/development/tools/misc/unixbench/common.patch
new file mode 100644
index 000000000000..68961cbe2edd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/unixbench/common.patch
@@ -0,0 +1,108 @@
+diff --git a/UnixBench/Run b/UnixBench/Run
+index 34d2c72..130b56e 100755
+--- a/UnixBench/Run
++++ b/UnixBench/Run
+@@ -81,23 +81,23 @@ my $longIterCount = 10;
+ my $shortIterCount = 3;
+ 
+ # C compiler to use in compilation tests.
+-my $cCompiler = 'gcc';
++my $cCompiler = 'cc -w';
+ 
+ # Establish full paths to directories.  These need to be full pathnames
+ # (or do they, any more?).  They can be set in env.
+ # variable names are the first parameter to getDir() below.
+ 
+ # Directory where the test programs live.
+-my $BINDIR = getDir('UB_BINDIR', $FindBin::Bin . "/pgms");
++my $BINDIR = getDir('UB_BINDIR', '@out@/libexec/pgms');
+ 
+ # Temp directory, for temp files.
+-my $TMPDIR = getDir('UB_TMPDIR', $FindBin::Bin . "/tmp");
++my $TMPDIR = getDir('UB_TMPDIR', "$ENV{'PWD'}/unixbench/temp");
+ 
+ # Directory to put results in.
+-my $RESULTDIR = getDir('UB_RESULTDIR', $FindBin::Bin . "/results");
++my $RESULTDIR = getDir('UB_RESULTDIR', "$ENV{'PWD'}/unixbench/results");
+ 
+ # Directory where the tests are executed.
+-my $TESTDIR = getDir('UB_TESTDIR', $FindBin::Bin . "/testdir");
++my $TESTDIR = getDir('UB_TESTDIR', '@out@/share/testdir');
+ 
+ 
+ ############################################################################
+@@ -330,19 +330,19 @@ my $testParams = {
+         "logmsg" => "Shell Scripts (1 concurrent)",
+         "cat"    => 'system',
+         "prog" => "${BINDIR}/looper",
+-        "options" => "60 \"${BINDIR}/multi.sh\" 1",
++        "options" => "60 \"${BINDIR}/multi.sh\" 1 ${TMPDIR} ${TESTDIR}",
+     },
+     "shell8" => {
+         "logmsg" => "Shell Scripts (8 concurrent)",
+         "cat"    => 'system',
+         "prog" => "${BINDIR}/looper",
+-        "options" => "60 \"${BINDIR}/multi.sh\" 8",
++        "options" => "60 \"${BINDIR}/multi.sh\" 8 ${TMPDIR} ${TESTDIR}",
+     },
+     "shell16" => {
+         "logmsg" => "Shell Scripts (16 concurrent)",
+         "cat"    => 'system',
+         "prog" => "${BINDIR}/looper",
+-        "options" => "60 \"${BINDIR}/multi.sh\" 16",
++        "options" => "60 \"${BINDIR}/multi.sh\" 16 ${TMPDIR} ${TESTDIR}",
+     },
+ 
+     ##########################
+@@ -434,7 +434,7 @@ my $testParams = {
+         "logmsg" => "C Compiler Throughput ($cCompiler)",
+         "cat"    => 'misc',
+         "prog" => "${BINDIR}/looper",
+-        "options" => "60 $cCompiler cctest.c",
++        "options" => "60 $cCompiler $TESTDIR/cctest.c -o $TMPDIR/cctest",
+     },
+     "arithoh" => {
+         "logmsg" => "Arithoh",
+@@ -873,16 +873,6 @@ sub preChecks {
+     # Set the language.
+     $ENV{'LANG'} = $language;
+ 
+-    # Check that the required files are in the proper places.
+-    my $make = $ENV{MAKE} || "make";
+-    system("$make check");
+-    if ($? != 0) {
+-        system("$make all");
+-        if ($? != 0) {
+-            abortRun("\"$make all\" failed");
+-        }
+-    }
+-
+     # Create a script to kill this run.
+     system("echo \"kill -9 $$\" > \"${TMPDIR}/kill_run\"");
+     chmod(0755, $TMPDIR . "/kill_run");
+@@ -923,7 +913,10 @@ sub parseArgs {
+                 $params->{'copies'} = [ ];
+             }
+             push(@{$params->{'copies'}}, shift(@words));
+-        } else {
++        } elsif ($word eq "--help" || $word eq "-h") {
++	    print "Run: please see ubench(1) for available options\n";
++	    exit 0;
++	}else {
+             die("Run: unknown option $word\n");
+         }
+     }
+diff --git a/UnixBench/pgms/multi.sh b/UnixBench/pgms/multi.sh
+index 72e8716..d2f5f48 100755
+--- a/UnixBench/pgms/multi.sh
++++ b/UnixBench/pgms/multi.sh
+@@ -15,7 +15,8 @@
+ ###############################################################################
+ ID="@(#)multi.sh:3.4 -- 5/15/91 19:30:24";
+ instance=1
+-sort_src=sort.src
++sort_src=$3/sort.src
++cd $2
+ work_factor=${MULTI_SH_WORK_FACTOR:-1}
+ if [ $work_factor -gt 1 ]; then
+ 	inputs=
diff --git a/nixpkgs/pkgs/development/tools/misc/unixbench/default.nix b/nixpkgs/pkgs/development/tools/misc/unixbench/default.nix
new file mode 100644
index 000000000000..9f4546248e5e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/unixbench/default.nix
@@ -0,0 +1,109 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, makeWrapper
+, pandoc
+, installShellFiles
+, perl
+, xorg
+, libGL
+, coreutils
+, unixtools
+, targetPackages
+, gnugrep
+, gawk
+, withGL? true
+, withX11perf? true
+}:
+
+stdenv.mkDerivation rec {
+  pname = "unixbench";
+  version = "unstable-2023-02-27";
+
+  src = fetchFromGitHub {
+    owner = "kdlucas";
+    repo = "byte-unixbench";
+    rev = "a07fcc03264915c624f0e4818993c5b4df3fa703";
+    hash = "sha256-gmRWAqE9/HBb0S9rK0DXoaCoiGbtat0gmdeozhbv0NI=";
+  };
+
+  patches = [
+    ./common.patch
+  ];
+
+  patchFlags = [ "-p2" ];
+
+  sourceRoot = "${src.name}/UnixBench";
+
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace "-Wa,-q" ""
+  '';
+
+  nativeBuildInputs = [
+    makeWrapper
+    pandoc
+    installShellFiles
+  ];
+
+  buildInputs = [ perl ] ++ lib.optionals withGL [
+    xorg.libX11
+    xorg.libXext
+    libGL
+  ];
+
+  runtimeDependencies = [
+    coreutils
+    unixtools.nettools
+    unixtools.locale
+    targetPackages.stdenv.cc
+    gnugrep
+    gawk
+  ] ++ lib.optionals withX11perf [
+    xorg.x11perf
+  ];
+
+  makeFlags = [
+    "CC=${stdenv.cc.targetPrefix}cc"
+  ] ++ lib.optionals withGL [
+    "GRAPHIC_TESTS=defined"
+  ];
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out/{bin,libexec,share}
+    install -D Run $out/bin/ubench
+    cp -r pgms $out/libexec/
+    cp -r testdir $out/share/
+    runHook postInstall
+  '';
+
+  postInstall = ''
+    substituteInPlace USAGE \
+      --replace 'Run"' 'ubench"' \
+      --replace './Run' 'ubench' \
+      --replace 'Run ' 'ubench '
+    pandoc -f rst -t man USAGE -o ubench.1
+    installManPage ubench.1
+  '';
+
+  preFixup = ''
+    substituteInPlace $out/libexec/pgms/multi.sh \
+      --replace '/bin/sh "$' '${targetPackages.runtimeShell} "$'
+
+    substituteInPlace $out/bin/ubench \
+      --subst-var out
+
+    wrapProgram $out/bin/ubench \
+      --prefix PATH : ${lib.makeBinPath runtimeDependencies}
+  '';
+
+  meta = with lib; {
+    description = "A basic indicator of the performance of a Unix-like system";
+    homepage = "https://github.com/kdlucas/byte-unixbench";
+    license = licenses.gpl2Plus;
+    mainProgram = "ubench";
+    maintainers = with maintainers; [ aleksana ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/unused/default.nix b/nixpkgs/pkgs/development/tools/misc/unused/default.nix
new file mode 100644
index 000000000000..b644a762908e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/unused/default.nix
@@ -0,0 +1,23 @@
+{ lib, fetchFromGitHub, rustPlatform, cmake }:
+rustPlatform.buildRustPackage rec {
+  pname = "unused";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "unused-code";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-+1M8dUfjjrT4llS0C6WYDyNxJ9QZ5s9v+W185TbgwMw=";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  cargoSha256 = "sha256-hCtkR20+xs1UHZP7oJVpJACVGcMQLQmSS1QE2tmIVhs=";
+
+  meta = with lib; {
+    description = "A tool to identify potentially unused code";
+    homepage = "https://unused.codes";
+    license = licenses.mit;
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/usb-modeswitch/configurable-usb-modeswitch.patch b/nixpkgs/pkgs/development/tools/misc/usb-modeswitch/configurable-usb-modeswitch.patch
new file mode 100644
index 000000000000..d55caab22e69
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/usb-modeswitch/configurable-usb-modeswitch.patch
@@ -0,0 +1,283 @@
+Index: usb-modeswitch-2.6.0/Makefile
+===================================================================
+--- usb-modeswitch-2.6.0.orig/Makefile
++++ usb-modeswitch-2.6.0/Makefile
+@@ -5,17 +5,24 @@ CFLAGS      += -Wall -Wno-deprecated-dec
+ LIBS        = `pkg-config --libs --cflags libusb-1.0`
+ RM          = /bin/rm -f
+ OBJS        = usb_modeswitch.c
+-PREFIX      = $(DESTDIR)/usr
+-ETCDIR      = $(DESTDIR)/etc
++PREFIX      = /usr/local
++ETCDIR      = $(PREFIX)/etc
+ SYSDIR      = $(ETCDIR)/systemd/system
+ UPSDIR      = $(ETCDIR)/init
+-UDEVDIR     = $(DESTDIR)/lib/udev
++UDEVDIR     = $(PREFIX)/lib/udev
+ SBINDIR     = $(PREFIX)/sbin
+ MANDIR      = $(PREFIX)/share/man/man1
+ 
++USE_UPSTART=$(shell if command -v initctl > /dev/null; then echo "true"; fi)
++USE_SYSTEMD=$(shell if command -v systemctl > /dev/null; then echo "true"; fi)
++
+ .PHONY: clean install install-common uninstall \
+ 	dispatcher-script dispatcher-dynlink dispatcher-statlink \
+-	install-script install-dynlink install-statlink
++	install-script install-dynlink install-statlink \
++	install-upstart install-systemd \
++	configure-dispatcher configure-script \
++	configure-upstart configure-systemd \
++	configure
+ 
+ all: all-with-script-dispatcher
+ 
+@@ -28,7 +35,25 @@ all-with-statlink-dispatcher: $(PROG) di
+ $(PROG): $(OBJS) usb_modeswitch.h
+ 	$(CC) -o $(PROG) $(OBJS) $(CFLAGS) $(LIBS) $(LDFLAGS)
+ 
+-dispatcher-script: usb_modeswitch_dispatcher.tcl
++configure-dispatcher:
++	sed -i \
++	  -e 's,^\(set setup(sbindir) \).*$$,\1$(SBINDIR),' \
++	  -e 's,^\(set setup(etcdir) \).*$$,\1$(ETCDIR),' \
++	  usb_modeswitch_dispatcher.tcl
++
++configure-script:
++	sed -i -e 's,^\(SBINDIR=\).*$$,\1$(SBINDIR),' usb_modeswitch.sh
++
++configure-systemd:
++	sed -i -e 's,@sbindir@,$(SBINDIR),' usb_modeswitch@.service
++
++configure-upstart:
++	sed -i -e 's,@sbindir@,$(SBINDIR),' usb-modeswitch-upstart.conf
++
++configure: configure-dispatcher configure-script \
++	configure-systemd configure-upstart
++
++dispatcher-script: configure-dispatcher usb_modeswitch_dispatcher.tcl
+ 	DISPATCH=dispatcher-script
+ 	cp -f usb_modeswitch_dispatcher.tcl usb_modeswitch_dispatcher
+ 
+@@ -53,16 +78,28 @@ distclean: clean
+ # If the systemd folder is present, install the service for starting the dispatcher
+ # If not, use the dispatcher directly from the udev rule as in previous versions
+ 
+-install-common: $(PROG) $(DISPATCH)
+-	install -D --mode=755 usb_modeswitch $(SBINDIR)/usb_modeswitch
+-	install -D --mode=755 usb_modeswitch.sh $(UDEVDIR)/usb_modeswitch
+-	install -D --mode=644 usb_modeswitch.conf $(ETCDIR)/usb_modeswitch.conf
+-	install -D --mode=644 usb_modeswitch.1 $(MANDIR)/usb_modeswitch.1
+-	install -D --mode=644 usb_modeswitch_dispatcher.1 $(MANDIR)/usb_modeswitch_dispatcher.1
+-	install -D --mode=755 usb_modeswitch_dispatcher $(SBINDIR)/usb_modeswitch_dispatcher
++install-common: $(PROG) configure $(DISPATCH)
++	install -D --mode=755 usb_modeswitch $(DESTDIR)$(SBINDIR)/usb_modeswitch
++	install -D --mode=755 usb_modeswitch.sh $(DESTDIR)$(UDEVDIR)/usb_modeswitch
++	install -D --mode=644 usb_modeswitch.conf $(DESTDIR)$(ETCDIR)/usb_modeswitch.conf
++	install -D --mode=644 usb_modeswitch.1 $(DESTDIR)$(MANDIR)/usb_modeswitch.1
++	install -D --mode=644 usb_modeswitch_dispatcher.1 $(DESTDIR)$(MANDIR)/usb_modeswitch_dispatcher.1
++	install -D --mode=755 usb_modeswitch_dispatcher $(DESTDIR)$(SBINDIR)/usb_modeswitch_dispatcher
+ 	install -d $(DESTDIR)/var/lib/usb_modeswitch
+-	test -d $(UPSDIR) -a -e /sbin/initctl && install --mode=644 usb-modeswitch-upstart.conf $(UPSDIR) || test 1
+-	test -d $(SYSDIR) -a \( -e /usr/bin/systemctl -o -e /bin/systemctl \) && install --mode=644 usb_modeswitch@.service $(SYSDIR) || test 1
++
++install-upstart:
++	install -D --mode=644 usb-modeswitch-upstart.conf $(DESTDIR)$(UPSDIR)/usb-modeswitch-upstart.conf
++
++install-systemd:
++	install -D --mode=644 usb_modeswitch@.service $(DESTDIR)$(SYSDIR)/usb_modeswitch@.service
++
++ifeq ($(USE_UPSTART),true)
++install-common: install-upstart
++endif
++
++ifeq ($(USE_SYSTEMD),true)
++install-common: install-systemd
++endif
+ 
+ install: install-script
+ 
+@@ -73,10 +110,10 @@ install-dynlink: dispatcher-dynlink inst
+ install-statlink: dispatcher-statlink install-common
+ 
+ uninstall:
+-	$(RM) $(SBINDIR)/usb_modeswitch
+-	$(RM) $(SBINDIR)/usb_modeswitch_dispatcher
+-	$(RM) $(UDEVDIR)/usb_modeswitch
+-	$(RM) $(ETCDIR)/usb_modeswitch.conf
+-	$(RM) $(MANDIR)/usb_modeswitch.1
++	$(RM) $(DESTDIR)$(SBINDIR)/usb_modeswitch
++	$(RM) $(DESTDIR)$(SBINDIR)/usb_modeswitch_dispatcher
++	$(RM) $(DESTDIR)$(UDEVDIR)/usb_modeswitch
++	$(RM) $(DESTDIR)$(ETCDIR)/usb_modeswitch.conf
++	$(RM) $(DESTDIR)$(MANDIR)/usb_modeswitch.1
+ 	$(RM) -R $(DESTDIR)/var/lib/usb_modeswitch
+-	$(RM) $(SYSDIR)/usb_modeswitch@.service
++	$(RM) $(DESTDIR)$(SYSDIR)/usb_modeswitch@.service
+Index: usb-modeswitch-2.6.0/usb-modeswitch-upstart.conf
+===================================================================
+--- usb-modeswitch-2.6.0.orig/usb-modeswitch-upstart.conf
++++ usb-modeswitch-2.6.0/usb-modeswitch-upstart.conf
+@@ -1,5 +1,5 @@
+ start on usb-modeswitch-upstart
+ task
+ script
+-	exec /usr/sbin/usb_modeswitch_dispatcher --switch-mode $UMS_PARAM
++	exec @sbindir@/usb_modeswitch_dispatcher --switch-mode $UMS_PARAM
+ end script
+Index: usb-modeswitch-2.6.0/usb_modeswitch.sh
+===================================================================
+--- usb-modeswitch-2.6.0.orig/usb_modeswitch.sh
++++ usb-modeswitch-2.6.0/usb_modeswitch.sh
+@@ -1,5 +1,9 @@
+ #!/bin/sh
+ # part of usb_modeswitch 2.6.0
++
++# Compile time configuration, injected by the Makefile
++SBINDIR=/usr/sbin
++
+ device_in()
+ {
+ 	if [ ! -e /var/lib/usb_modeswitch/$1 ]; then
+@@ -37,7 +41,7 @@ if [ $(expr "$1" : "--.*") ]; then
+ 		v_id=$3
+ 	fi
+ fi
+-PATH=/sbin:/usr/sbin:$PATH
++
+ case "$1" in
+ 	--driver-bind)
+ 		# driver binding code removed
+@@ -46,9 +50,7 @@ case "$1" in
+ 	--symlink-name)
+ 		device_in "link_list" $v_id $p_id
+ 		if [ "$?" = "1" ]; then
+-			if [ -e "/usr/sbin/usb_modeswitch_dispatcher" ]; then
+-				exec usb_modeswitch_dispatcher $1 $2 2>>/dev/null
+-			fi
++			exec $SBINDIR/usb_modeswitch_dispatcher $1 $2 2>>/dev/null
+ 		fi
+ 		exit 0
+ 		;;
+@@ -61,15 +63,13 @@ if [ "$p2" = "" -a "$p1" != "" ]; then
+ 	p2=$p1
+ fi
+ 
+-PATH=/bin:/sbin:/usr/bin:/usr/sbin
+-init_path=`readlink -f /sbin/init`
+-if [ `basename $init_path` = "systemd" ]; then
++if command -v systemctl > /dev/null; then
+ 	systemctl --no-block restart usb_modeswitch@$p2.service
+-elif [ -e "/etc/init/usb-modeswitch-upstart.conf" ]; then
++elif command -v initctl > /dev/null; then
+ 	initctl emit --no-wait usb-modeswitch-upstart UMS_PARAM=$p2
+ else
+ 	# only old distros, new udev will kill all subprocesses
+ 	exec 1<&- 2<&- 5<&- 7<&-
+-	exec usb_modeswitch_dispatcher --switch-mode $p2 &
++	exec $SBINDIR/usb_modeswitch_dispatcher --switch-mode $p2 &
+ fi
+ exit 0
+Index: usb-modeswitch-2.6.0/usb_modeswitch@.service
+===================================================================
+--- usb-modeswitch-2.6.0.orig/usb_modeswitch@.service
++++ usb-modeswitch-2.6.0/usb_modeswitch@.service
+@@ -3,6 +3,6 @@ Description=USB_ModeSwitch_%i
+ 
+ [Service]
+ Type=oneshot
+-ExecStart=/usr/sbin/usb_modeswitch_dispatcher --switch-mode %i
++ExecStart=@sbindir@/usb_modeswitch_dispatcher --switch-mode %i
+ #ExecStart=/bin/echo %i
+ 
+Index: usb-modeswitch-2.6.0/usb_modeswitch_dispatcher.tcl
+===================================================================
+--- usb-modeswitch-2.6.0.orig/usb_modeswitch_dispatcher.tcl
++++ usb-modeswitch-2.6.0/usb_modeswitch_dispatcher.tcl
+@@ -12,6 +12,16 @@
+ # Part of usb-modeswitch-2.6.0 package
+ # (C) Josua Dietze 2009-2019
+ 
++# Compile-time configuration, injected by the Makefile.
++set setup(sbindir) /usr/sbin
++set setup(etcdir) /etc
++
++# External dependency default location
++set setup(dbdir) /usr/share/usb_modeswitch
++
++# Derived configuration
++set setup(dbdir_etc) $setup(etcdir)/usb_modeswitch.d
++
+ set arg0 [lindex $argv 0]
+ if [regexp {\.tcl$} $arg0] {
+ 	if [file exists $arg0] {
+@@ -115,10 +125,8 @@ if {![regexp {(.*?):.*$} $arg1 d device]
+ 	}
+ }
+ 
+-set setup(dbdir) /usr/share/usb_modeswitch
+-set setup(dbdir_etc) /etc/usb_modeswitch.d
+ if {![file exists $setup(dbdir)] && ![file exists $setup(dbdir_etc)]} {
+-	Log "\nError: no config database found in /usr/share or /etc. Exit"
++	Log "\nError: no config database found in $setup(dbdir) or $setup(dbdir_etc). Exit"
+ 	SafeExit
+ }
+ 
+@@ -285,7 +293,7 @@ if {$config(NoMBIMCheck)==0 && $usb(bNum
+ 	if [CheckMBIM] {
+ 		Log " driver for MBIM devices is available"
+ 		Log "Find MBIM configuration number ..."
+-		if [catch {set cfgno [exec /usr/sbin/usb_modeswitch -j -Q $busParam $devParam -v $usb(idVendor) -p $usb(idProduct)]} err] {
++		if [catch {set cfgno [exec $setup(sbindir)/usb_modeswitch -j -Q $busParam $devParam -v $usb(idVendor) -p $usb(idProduct)]} err] {
+ 			Log "Error when trying to find MBIM configuration, switch to legacy modem mode"
+ 		} else {
+ 			set cfgno [string trim $cfgno]
+@@ -321,7 +329,7 @@ if {$report == ""} {
+ 	# Now we are actually switching
+ 	if $flags(logging) {
+ 		Log "Command line:\nusb_modeswitch -W -D $configParam $busParam $devParam -v $usb(idVendor) -p $usb(idProduct) -f \$flags(config)"
+-		catch {set report [exec /usr/sbin/usb_modeswitch -W -D $configParam $busParam $devParam -v $usb(idVendor) -p $usb(idProduct) -f "$flags(config)" 2>@1]} report
++		catch {set report [exec $setup(sbindir)/usb_modeswitch -W -D $configParam $busParam $devParam -v $usb(idVendor) -p $usb(idProduct) -f "$flags(config)" 2>@1]} report
+ 		Log "\nVerbose debug output of usb_modeswitch and libusb follows"
+ 		Log "(Note that some USB errors are to be expected in the process)"
+ 		Log "--------------------------------"
+@@ -329,7 +337,7 @@ if {$report == ""} {
+ 		Log "--------------------------------"
+ 		Log "(end of usb_modeswitch output)\n"
+ 	} else {
+-		catch {set report [exec /usr/sbin/usb_modeswitch -Q -D $configParam $busParam $devParam -v $usb(idVendor) -p $usb(idProduct) -f "$flags(config)" 2>@1]} report
++		catch {set report [exec $setup(sbindir)/usb_modeswitch -Q -D $configParam $busParam $devParam -v $usb(idVendor) -p $usb(idProduct) -f "$flags(config)" 2>@1]} report
+ 	}
+ }
+ 
+@@ -522,12 +530,12 @@ return 1
+ 
+ proc {ParseGlobalConfig} {path} {
+ 
+-global flags
++global flags setup
+ set configFile ""
+ if [string length $path] {
+ 	set places [list $path]
+ } else {
+-	set places [list /etc/usb_modeswitch.conf /etc/sysconfig/usb_modeswitch /etc/default/usb_modeswitch]
++	set places [list $setup(etcdir)/usb_modeswitch.conf $setup(etcdir)/sysconfig/usb_modeswitch $setup(etcdir)/default/usb_modeswitch]
+ }
+ foreach cfg $places {
+ 	if [file exists $cfg] {
+@@ -923,10 +931,12 @@ proc {SysLog} {msg} {
+ 
+ global flags
+ if {![info exists flags(logger)]} {
+-	set flags(logger) ""
+-	foreach fn {/bin/logger /usr/bin/logger} {
+-		if [file exists $fn] {
+-			set flags(logger) $fn
++	set flags(logger) [exec sh -c "command -v logger || true"]
++	if {$flags(logger) == ""} {
++		foreach fn {/bin/logger /usr/bin/logger} {
++			if [file exists $fn] {
++				set flags(logger) $fn
++			}
+ 		}
+ 	}
+ 	Log "Logger is $flags(logger)"
diff --git a/nixpkgs/pkgs/development/tools/misc/usb-modeswitch/data.nix b/nixpkgs/pkgs/development/tools/misc/usb-modeswitch/data.nix
new file mode 100644
index 000000000000..7bb9fc69c58a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/usb-modeswitch/data.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchurl, tcl, usb-modeswitch }:
+
+stdenv.mkDerivation rec {
+  pname = "usb-modeswitch-data";
+  version = "20191128";
+
+  src = fetchurl {
+    url    = "http://www.draisberghof.de/usb_modeswitch/${pname}-${version}.tar.bz2";
+    sha256 = "1ygahl3r26r38ai8yyblq9nhf3v5i6n6r6672p5wf88wg5h9n0rz";
+  };
+
+  makeFlags = [
+    "PREFIX=$(out)"
+    "DESTDIR=$(out)"
+  ];
+
+  prePatch = ''
+    sed -i 's@usb_modeswitch@${usb-modeswitch}/lib/udev/usb_modeswitch@g' 40-usb_modeswitch.rules
+  '';
+
+  # we add tcl here so we can patch in support for new devices by dropping config into
+  # the usb_modeswitch.d directory
+  nativeBuildInputs = [ tcl ];
+
+  meta = with lib; {
+    description = "Device database and the rules file for 'multi-mode' USB devices";
+    inherit (usb-modeswitch.meta) license maintainers platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/usb-modeswitch/default.nix b/nixpkgs/pkgs/development/tools/misc/usb-modeswitch/default.nix
new file mode 100644
index 000000000000..4f9dbe92d2b7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/usb-modeswitch/default.nix
@@ -0,0 +1,46 @@
+{ stdenv, lib, fetchurl, pkg-config, makeWrapper
+, libusb1, tcl, util-linux, coreutils, bash }:
+
+stdenv.mkDerivation rec {
+  pname = "usb-modeswitch";
+  version = "2.6.0";
+
+  src = fetchurl {
+    url    = "http://www.draisberghof.de/usb_modeswitch/${pname}-${version}.tar.bz2";
+    sha256 = "18wbbxc5cfsmikba0msdvd5qlaga27b32nhrzicyd9mdddp265f2";
+  };
+
+  patches = [ ./configurable-usb-modeswitch.patch ];
+
+  # Remove attempts to write to /etc and /var/lib.
+  postPatch = ''
+    sed -i \
+      -e '/^\tinstall .* usb_modeswitch.conf/s,$(ETCDIR),$(out)/etc,' \
+      -e '\,^\tinstall -d .*/var/lib/usb_modeswitch,d' \
+      Makefile
+  '';
+
+  makeFlags = [
+    "PREFIX=$(out)"
+    "ETCDIR=/etc"
+    "USE_UPSTART=false"
+    "USE_SYSTEMD=true"
+    "SYSDIR=$(out)/lib/systemd/system"
+    "UDEVDIR=$(out)/lib/udev"
+  ];
+
+  postFixup = ''
+    wrapProgram $out/bin/usb_modeswitch_dispatcher \
+      --set PATH ${lib.makeBinPath [ util-linux coreutils bash ]}
+  '';
+
+  buildInputs = [ libusb1 tcl ];
+  nativeBuildInputs = [ pkg-config makeWrapper ];
+
+  meta = with lib; {
+    description = "A mode switching tool for controlling 'multi-mode' USB devices";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ marcweber peterhoeg ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/usbsdmux/default.nix b/nixpkgs/pkgs/development/tools/misc/usbsdmux/default.nix
new file mode 100644
index 000000000000..31d6566a4214
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/usbsdmux/default.nix
@@ -0,0 +1,22 @@
+{ lib, python3Packages, fetchPypi }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "usbsdmux";
+  version = "24.1.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-OtGgToDGUr6pBu9+LS/DxaYw/9+Pd6jPhxVDAM22HB4=";
+  };
+
+  # usbsdmux is not meant to be used as an importable module and has no tests
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Control software for the LXA USB-SD-Mux";
+    homepage = "https://github.com/linux-automation/usbsdmux";
+    license = licenses.lgpl21;
+    maintainers = with maintainers; [ emantor ];
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/vtable-dumper/default.nix b/nixpkgs/pkgs/development/tools/misc/vtable-dumper/default.nix
new file mode 100644
index 000000000000..1bd59aa9944a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/vtable-dumper/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub, libelf }:
+
+stdenv.mkDerivation rec {
+  pname = "vtable-dumper";
+  version = "1.2";
+
+  src = fetchFromGitHub {
+    owner = "lvc";
+    repo = "vtable-dumper";
+    rev = version;
+    sha256 = "0sl7lnjr2l4c2f7qaazvpwpzsp4gckkvccfam88wcq9f7j9xxbyp";
+  };
+
+  buildInputs = [ libelf ];
+  makeFlags = [ "prefix=$(out)" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/lvc/vtable-dumper";
+    description = "A tool to list content of virtual tables in a C++ shared library";
+    license = licenses.lgpl21;
+    maintainers = [ maintainers.bhipple ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/wasmer-pack/default.nix b/nixpkgs/pkgs/development/tools/misc/wasmer-pack/default.nix
new file mode 100644
index 000000000000..0f5e85349833
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/wasmer-pack/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "wasmer-pack";
+  version = "0.7.1";
+
+  src = fetchFromGitHub {
+    owner = "wasmerio";
+    repo = "wasmer-pack";
+    rev = "v${version}";
+    hash = "sha256-+wqgYkdkuhPFkJBdQLnUKAGmUfGBU9mBfMRNBFmiT4E=";
+  };
+
+  cargoHash = "sha256-nyhjwEZyT8IEb0pTbou/EtN47gehge3fUCQVPs2TkIY=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  cargoBuildFlags = [ "-p=wasmer-pack-cli" ];
+
+  # requires internet access
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Import your WebAssembly code just like any other dependency";
+    homepage = "https://github.com/wasmerio/wasmer-pack";
+    changelog = "https://github.com/wasmerio/wasmer-pack/blob/${src.rev}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/watson-ruby/Gemfile b/nixpkgs/pkgs/development/tools/misc/watson-ruby/Gemfile
new file mode 100644
index 000000000000..fc739389e84e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/watson-ruby/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'watson-ruby'
diff --git a/nixpkgs/pkgs/development/tools/misc/watson-ruby/Gemfile.lock b/nixpkgs/pkgs/development/tools/misc/watson-ruby/Gemfile.lock
new file mode 100644
index 000000000000..9e3c166400f3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/watson-ruby/Gemfile.lock
@@ -0,0 +1,15 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    json (2.1.0)
+    watson-ruby (1.6.3)
+      json
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  watson-ruby
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/development/tools/misc/watson-ruby/default.nix b/nixpkgs/pkgs/development/tools/misc/watson-ruby/default.nix
new file mode 100644
index 000000000000..eb6c8bd76199
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/watson-ruby/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, bundlerEnv, ruby, bundlerUpdateScript }:
+
+stdenv.mkDerivation rec {
+  pname = "watson-ruby";
+  version = (import ./gemset.nix).watson-ruby.version;
+
+  dontUnpack = true;
+
+  installPhase = let
+    env = bundlerEnv {
+      name = "watson-ruby-gems-${version}";
+      inherit ruby;
+      # expects Gemfile, Gemfile.lock and gemset.nix in the same directory
+      gemdir = ./.;
+    };
+  in ''
+    mkdir -p $out/bin
+    ln -s ${env}/bin/watson $out/bin/watson
+  '';
+
+  passthru.updateScript = bundlerUpdateScript "watson-ruby";
+
+  meta = with lib; {
+    description = "An inline issue manager";
+    homepage    = "https://goosecode.com/watson/";
+    license     = with licenses; mit;
+    maintainers = with maintainers; [ robertodr nicknovitski ];
+    mainProgram = "watson";
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/watson-ruby/gemset.nix b/nixpkgs/pkgs/development/tools/misc/watson-ruby/gemset.nix
new file mode 100644
index 000000000000..2f865820f5aa
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/watson-ruby/gemset.nix
@@ -0,0 +1,18 @@
+{
+  json = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "01v6jjpvh3gnq6sgllpfqahlgxzj50ailwhj9b3cd20hi2dx0vxp";
+      type = "gem";
+    };
+    version = "2.1.0";
+  };
+  watson-ruby = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1d5m29nr0i030q8ygmbapwri5ndcg2q6lf8a15bk79lfcp9xyj9w";
+      type = "gem";
+    };
+    version = "1.6.3";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/whatstyle/default.nix b/nixpkgs/pkgs/development/tools/misc/whatstyle/default.nix
new file mode 100644
index 000000000000..08f5b85bc5ed
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/whatstyle/default.nix
@@ -0,0 +1,30 @@
+{ lib, python3, fetchFromGitHub, clang-unwrapped }:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "whatstyle";
+  version = "0.1.8";
+  src = fetchFromGitHub {
+    owner = "mikr";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "08lfd8h5fnvy5gci4f3an411cypad7p2yiahvbmlp51r9xwpaiwr";
+  };
+
+  # Fix references to previous version, to avoid confusion:
+  postPatch = ''
+    substituteInPlace setup.py --replace 0.1.6 ${version}
+    substituteInPlace ${pname}.py --replace 0.1.6 ${version}
+  '';
+
+  nativeCheckInputs = [ clang-unwrapped /* clang-format */ ];
+
+  doCheck = false; # 3 or 4 failures depending on version, haven't investigated.
+
+  meta = with lib; {
+    description = "Find a code format style that fits given source files";
+    homepage = "https://github.com/mikr/whatstyle";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dtzWill ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/wishbone-tool/default.nix b/nixpkgs/pkgs/development/tools/misc/wishbone-tool/default.nix
new file mode 100644
index 000000000000..0465fb74aa1a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/wishbone-tool/default.nix
@@ -0,0 +1,33 @@
+{ lib, fetchFromGitHub, rustPlatform, libusb-compat-0_1 }:
+
+let
+  version = "0.6.9";
+  src = fetchFromGitHub {
+    owner = "litex-hub";
+    repo = "wishbone-utils";
+    rev = "v${version}";
+    sha256 = "0gq359ybxnqvcp93cn154bs9kwlai62gnm71yvl2nhzjdlcr3fhp";
+  };
+in
+rustPlatform.buildRustPackage {
+  pname = "wishbone-tool";
+  inherit version;
+
+  src = "${src}/wishbone-tool";
+
+  # N.B. The cargo vendor consistency checker searches in "source" for lockfile
+  cargoDepsHook = ''
+    ln -s wishbone-tool source
+  '';
+  cargoSha256 = "1b12wpmzv7wxidc4hd8hmp8iwqhqlycxh8bdv3rf701sqsazkc5x";
+
+  buildInputs = [ libusb-compat-0_1 ];
+
+  meta = with lib; {
+    description = "Manipulate a Wishbone device over some sort of bridge";
+    homepage = "https://github.com/litex-hub/wishbone-utils";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ edef ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/xorg-autoconf/default.nix b/nixpkgs/pkgs/development/tools/misc/xorg-autoconf/default.nix
new file mode 100644
index 000000000000..34aa363550ae
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/xorg-autoconf/default.nix
@@ -0,0 +1,29 @@
+{ lib
+, stdenv
+, autoreconfHook
+, fetchFromGitLab
+}:
+
+stdenv.mkDerivation rec {
+  pname = "xorg-autoconf";
+  version = "1.19.3";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.freedesktop.org";
+    group = "xorg";
+    owner = "util";
+    repo = "macros";
+    rev = "util-macros-${version}";
+    sha256 = "sha256-+yEMCjLztdY5LKTNjfhudDS0fdaOj4LKZ3YL5witFR4=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  meta = with lib; {
+    description = "GNU autoconf macros shared across X.Org projects";
+    homepage = "https://gitlab.freedesktop.org/xorg/util/macros";
+    maintainers = with maintainers; [ raboof ];
+    license = licenses.mit;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/xspim/default.nix b/nixpkgs/pkgs/development/tools/misc/xspim/default.nix
new file mode 100644
index 000000000000..ccef80747a40
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/xspim/default.nix
@@ -0,0 +1,58 @@
+{ lib, stdenv, fetchsvn, imake, bison, flex, xorg }:
+
+stdenv.mkDerivation rec {
+  pname = "xspim";
+  version = "9.1.22";
+
+  src = fetchsvn {
+    url = "https://svn.code.sf.net/p/spimsimulator/code/";
+    rev = "r739";
+    sha256 = "1kazfgrbmi4xq7nrkmnqw1280rhdyc1hmr82flrsa3g1b1rlmj1s";
+  };
+
+  nativeBuildInputs = [ imake bison flex ];
+  buildInputs = [
+    xorg.libICE
+    xorg.libSM
+    xorg.libX11
+    xorg.libXaw
+    xorg.libXext
+    xorg.libXmu
+    xorg.libXpm
+    xorg.libXt
+  ];
+
+  preConfigure = ''
+    cd xspim
+    xmkmf
+  '';
+
+  makeFlags = [
+    "BIN_DIR=${placeholder "out"}/bin"
+    "EXCEPTION_DIR=${placeholder "out"}/share/spim"
+    "MAN_DIR=${placeholder "out"}/share/man/man1"
+  ];
+
+  doCheck = true;
+  preCheck = ''
+    pushd ../spim
+  '';
+  postCheck = ''
+    popd
+  '';
+
+  preInstall = ''
+    mkdir -p $out/share/spim
+    install -D ../spim/spim $out/bin/spim
+    install -D ../Documentation/spim.man $out/share/man/man1/spim.1
+    install -D ../Documentation/xspim.man $out/share/man/man1/xspim.1
+  '';
+
+  meta = with lib; {
+    description = "A MIPS32 simulator";
+    homepage = "https://spimsimulator.sourceforge.net/";
+    license = licenses.bsdOriginal;
+    maintainers = with maintainers; [ emilytrau ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/xxdiff/default.nix b/nixpkgs/pkgs/development/tools/misc/xxdiff/default.nix
new file mode 100644
index 000000000000..8f30a165df3c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/xxdiff/default.nix
@@ -0,0 +1,51 @@
+{ lib, mkDerivation, fetchFromBitbucket, docutils, bison, flex, qmake
+, qtbase
+}:
+
+mkDerivation rec {
+  pname = "xxdiff";
+  version = "5.0b1";
+
+  src = fetchFromBitbucket {
+    owner = "blais";
+    repo = pname;
+    rev = "5e5f885dfc43559549a81c59e9e8c9525306356a";
+    sha256 = "0gbvxrkwkbvag3298j89smszghpr8ilxxfb0cvsknfqdf15b296w";
+  };
+
+  nativeBuildInputs = [ bison docutils flex qmake ];
+
+  buildInputs = [ qtbase ];
+
+  dontUseQmakeConfigure = true;
+
+  # c++11 and above is needed for building with Qt 5.9+
+  env.NIX_CFLAGS_COMPILE = toString [ "-std=c++14" ];
+
+  sourceRoot = "${src.name}/src";
+
+  postPatch = ''
+    substituteInPlace xxdiff.pro --replace ../bin ./bin
+  '';
+
+  preConfigure = ''
+    make -f Makefile.bootstrap
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm555 -t $out/bin                ./bin/xxdiff
+    install -Dm444 -t $out/share/doc/${pname} ${src}/README
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Graphical file and directories comparator and merge tool";
+    homepage = "http://furius.ca/xxdiff/";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ pSub raskin ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/xxgdb/default.nix b/nixpkgs/pkgs/development/tools/misc/xxgdb/default.nix
new file mode 100644
index 000000000000..cc093476fec7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/xxgdb/default.nix
@@ -0,0 +1,54 @@
+{ lib
+, stdenv
+, fetchurl
+, imake
+, gccmakedep
+, libX11
+, libXaw
+, libXext
+, libXmu
+, libXt
+}:
+
+stdenv.mkDerivation rec {
+  pname = "xxgdb";
+  version = "1.12";
+
+  src = fetchurl {
+    url = "http://deb.debian.org/debian/pool/main/x/xxgdb/xxgdb_${version}.orig.tar.gz";
+    sha256 = "0jwazg99wk2l7r390ggw0yr8xipl07bp0qynni141xss530i6d1a";
+  };
+
+  patches = [
+    # http://zhu-qy.blogspot.com.es/2012/11/slackware-14-i-still-got-xxgdb-all-ptys.html
+    ./xxgdb-pty.patch
+  ];
+
+  nativeBuildInputs = [ imake gccmakedep ];
+  buildInputs = [ libX11 libXaw libXext libXmu libXt ];
+
+  preConfigure = ''
+    mkdir build
+    xmkmf
+  '';
+
+  makeFlags = [
+    "DESTDIR=build"
+  ];
+
+  postInstall = ''
+    # Fix up install paths
+    shopt -s globstar
+    mv build/**/bin $out/bin
+
+    install -D xxgdb.1 $out/share/man/man1/xxgdb.1
+  '';
+
+  meta = with lib; {
+    broken = stdenv.isDarwin;
+    description = "A simple but powerful graphical interface to gdb";
+    license = licenses.mit;
+    maintainers = with maintainers; [ emilytrau ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/xxgdb/xxgdb-pty.patch b/nixpkgs/pkgs/development/tools/misc/xxgdb/xxgdb-pty.patch
new file mode 100644
index 000000000000..735bb1b0b5fc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/xxgdb/xxgdb-pty.patch
@@ -0,0 +1,84 @@
+--- xxgdb-1.12-org/calldbx.c	2012-10-26 17:17:49.810750909 -0700
++++ xxgdb-1.12/calldbx.c	2012-10-26 17:53:59.209918816 -0700
+@@ -69,6 +69,12 @@
+  *    create_io_window(): create an io window for gdb to use 
+  */
+ 
++#ifdef linux
++#ifndef _GNU_SOURCE
++#define _GNU_SOURCE
++#endif
++#endif
++
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <string.h>
+@@ -126,6 +132,13 @@
+ {
+     int master;
+     
++#ifdef _POSIX_SOURCE
++    if ((master = posix_openpt (O_RDWR|O_NOCTTY)) < 0) {
++	perror("posix_openpt failed:");
++    } else {
++	return master;
++    }
++#else
+ #ifdef SVR4				/* (MJH) Use STREAMS */
+ 
+     if((master = open(MASTER_CLONE, O_RDWR)) < 0)
+@@ -152,6 +165,7 @@
+ 	}
+ #endif
+ #endif /* SVR4 */
++#endif /*  _POSIX_SOURCE */
+ 
+ #ifdef GDB
+     fprintf(stderr, "xxgdb: all ptys in use\n");
+@@ -167,7 +181,28 @@
+ {
+     int slave;
+ 
+-#ifdef SVR4				/* (MJH) */
++#ifdef _POSIX_SOURCE
++    char *slave_name = ptsname (master);
++    if (slave_name == NULL) {
++	perror ("Pseudo-tty slave");
++	exit (2);
++    } // end if
++    if (grantpt (master) < 0) {
++	perror ("grantpt error");
++	exit (3);
++    }
++    if (unlockpt (master) < 0) {
++	perror ("unlockpt error");
++	exit (4);
++    }
++    if ((slave = open (slave_name, O_RDWR)) < 0) {
++	perror (slave_name);
++	exit (5);
++    } // end if
++    return slave;
++#else
++#ifdef SVR4		
++	/* (MJH) */
+     char *slave_name = "unknown";
+     extern char *ptsname(int master);
+     void (*handler)();
+@@ -194,6 +229,7 @@
+ 	    }
+     return slave;
+ #endif /* SVR4 */
++#endif /*  _POSIX_SOURCE */
+ }
+ 
+ #ifdef CREATE_IO_WINDOW 
+@@ -230,7 +266,7 @@
+     {
+ 	/* child */
+ 	/* printf("xterm xterm -l -e xxgdbiowin\n");*/
+-	if (execlp("xterm", "xterm", "-e", "xxgdbiowin", 0))
++	if (execlp("xterm", "xterm", "-e", "xxgdbiowin", NULL))
+ 	{
+ 	    printf("exec of 'xterm -e xxgdbiowin' fails\n");
+ 	    unlink("/tmp/iowindowtty");
diff --git a/nixpkgs/pkgs/development/tools/misc/yakut/default.nix b/nixpkgs/pkgs/development/tools/misc/yakut/default.nix
new file mode 100644
index 000000000000..c4589eefb4de
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/yakut/default.nix
@@ -0,0 +1,51 @@
+{ lib
+, buildPythonApplication
+, fetchPypi
+, stdenv
+, click
+, coloredlogs
+, psutil
+, pycyphal
+, pyserial
+, ruamel-yaml
+, requests
+, scipy
+, simplejson
+}:
+
+buildPythonApplication rec {
+  pname = "yakut";
+  version = "0.13.0";
+  format = "setuptools";
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-MBVSt01D36rBPW2bopujyu8Opwwavmm7S3tdaWp5ACw=";
+  };
+
+  buildInputs = [
+    stdenv.cc.cc.lib
+    click
+    coloredlogs
+    psutil
+    pycyphal
+    pyserial
+    ruamel-yaml
+    requests
+    scipy
+    simplejson
+  ];
+
+  # Can't seem to run the tests on nix
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Simple CLI tool for diagnostics and debugging of Cyphal networks";
+    longDescription = ''
+      Yakút is a simple cross-platform command-line interface (CLI) tool for diagnostics and debugging of Cyphal networks. By virtue of being based on PyCyphal, Yakut supports all Cyphal transports (UDP, serial, CAN, ...) and is compatible with all major features of the protocol. It is designed to be usable with GNU/Linux, Windows, and macOS.
+    '';
+    homepage = "https://github.com/OpenCyphal/yakut/";
+    license = licenses.mit;
+    maintainers = teams.ororatech.members;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/ycmd/default.nix b/nixpkgs/pkgs/development/tools/misc/ycmd/default.nix
new file mode 100644
index 000000000000..ae741234a8e2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/ycmd/default.nix
@@ -0,0 +1,92 @@
+{ stdenv, lib, fetchFromGitHub, cmake, ninja, python
+, withGodef ? true, godef
+, withGotools? true, gotools
+, withTypescript ? true, typescript
+, abseil-cpp, boost, llvmPackages
+, fixDarwinDylibNames, Cocoa
+}:
+
+stdenv.mkDerivation {
+  pname = "ycmd";
+  version = "unstable-2023-11-06";
+  disabled = !python.isPy3k;
+
+  # required for third_party directory creation
+  src = fetchFromGitHub {
+    owner = "ycm-core";
+    repo = "ycmd";
+    rev = "0607eed2bc211f88f82657b7781f4fe66579855b";
+    hash = "sha256-SzEcMQ4lX7NL2/g9tuhA6CaZ8pX/DGs7Fla/gr+RcOU=";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [ cmake ninja ]
+    ++ lib.optional stdenv.hostPlatform.isDarwin fixDarwinDylibNames;
+  buildInputs = with python.pkgs; with llvmPackages; [ abseil-cpp boost libllvm.all libclang.all ]
+    ++  [ jedi jedi-language-server pybind11 ]
+    ++ lib.optional stdenv.isDarwin Cocoa;
+
+  buildPhase = ''
+    export EXTRA_CMAKE_ARGS="-DPATH_TO_LLVM_ROOT=${llvmPackages.libllvm} -DUSE_SYSTEM_ABSEIL=true"
+    ${python.pythonOnBuildForHost.interpreter} build.py --system-libclang --clang-completer --ninja
+  '';
+
+  dontConfigure = true;
+
+  # remove the tests
+  #
+  # make __main__.py executable and add shebang
+  #
+  # copy over third-party libs
+  # note: if we switch to using our packaged libs, we'll need to symlink them
+  # into the same spots, as YouCompleteMe (the vim plugin) expects those paths
+  # to be available
+  #
+  # symlink completion backends where ycmd expects them
+  installPhase = ''
+    rm -rf ycmd/tests
+
+    chmod +x ycmd/__main__.py
+    sed -i "1i #!${python.interpreter}\
+    " ycmd/__main__.py
+
+    mkdir -p $out/lib/ycmd
+    cp -r ycmd/ CORE_VERSION *.so* *.dylib* $out/lib/ycmd/
+
+    mkdir -p $out/bin
+    ln -s $out/lib/ycmd/ycmd/__main__.py $out/bin/ycmd
+
+    # Copy everything: the structure of third_party has been known to change.
+    # When linking our own libraries below, do so with '-f'
+    # to clobber anything we may have copied here.
+    mkdir -p $out/lib/ycmd/third_party
+    cp -r third_party/* $out/lib/ycmd/third_party/
+
+  '' + lib.optionalString withGodef ''
+    TARGET=$out/lib/ycmd/third_party/godef
+    mkdir -p $TARGET
+    ln -sf ${godef}/bin/godef $TARGET
+  '' + lib.optionalString withGotools ''
+    TARGET=$out/lib/ycmd/third_party/go/src/golang.org/x/tools/cmd/gopls
+    mkdir -p $TARGET
+    ln -sf ${gotools}/bin/gopls $TARGET
+  '' + lib.optionalString withTypescript ''
+    TARGET=$out/lib/ycmd/third_party/tsserver
+    ln -sf ${typescript} $TARGET
+  '';
+
+  # fixup the argv[0] and replace __file__ with the corresponding path so
+  # python won't be thrown off by argv[0]
+  postFixup = ''
+    substituteInPlace $out/lib/ycmd/ycmd/__main__.py \
+      --replace __file__ "'$out/lib/ycmd/ycmd/__main__.py'"
+  '';
+
+  meta = with lib; {
+    description = "A code-completion and comprehension server";
+    homepage = "https://github.com/ycm-core/ycmd";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ rasendubi lnl7 siriobalmelli ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/yodl/default.nix b/nixpkgs/pkgs/development/tools/misc/yodl/default.nix
new file mode 100644
index 000000000000..2eee78c1c19c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/yodl/default.nix
@@ -0,0 +1,52 @@
+{ lib, stdenv, fetchFromGitLab, perl, icmake, util-linux }:
+
+stdenv.mkDerivation rec {
+  pname = "yodl";
+  version = "4.03.03";
+
+  nativeBuildInputs = [ icmake ];
+
+  buildInputs = [ perl ];
+
+  src = fetchFromGitLab {
+    sha256 = "sha256-MeD/jjhwoiWTb/G8pHrnEEX22h+entPr9MhJ6WHO3DM=";
+    rev = version;
+    repo = "yodl";
+    owner = "fbb-git";
+  };
+
+  setSourceRoot = ''
+    sourceRoot=$(echo */yodl)
+  '';
+
+  preConfigure = ''
+    patchShebangs ./build
+    patchShebangs scripts/
+    substituteInPlace INSTALL.im --replace /usr $out
+    substituteInPlace macros/rawmacros/startdoc.pl --replace /usr/bin/perl ${perl}/bin/perl
+    substituteInPlace scripts/yodl2whatever.in --replace getopt ${util-linux}/bin/getopt
+  '';
+
+  # Set TERM because icmbuild calls tput.
+  TERM = "xterm";
+
+  buildPhase = ''
+    ./build programs
+    ./build macros
+    ./build man
+  '';
+
+  installPhase = ''
+    ./build install programs
+    ./build install macros
+    ./build install man
+  '';
+
+  meta = with lib; {
+    description = "A package that implements a pre-document language and tools to process it";
+    homepage = "https://fbb-git.gitlab.io/yodl/";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ pSub ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/ztags/default.nix b/nixpkgs/pkgs/development/tools/misc/ztags/default.nix
new file mode 100644
index 000000000000..25010cc0cc67
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/ztags/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, scdoc
+, zig_0_11
+}:
+
+stdenv.mkDerivation {
+  pname = "ztags";
+  version = "unstable-2023-09-07";
+
+  src = fetchFromGitHub {
+    owner = "gpanders";
+    repo = "ztags";
+    rev = "6cdbd6dcdeda0d1ab9ad30261000e3d21b2407e6";
+    hash = "sha256-lff5L7MG8RJdJM/YebJKDkKfkG4oumC0HytiCUOUG5Q=";
+  };
+
+  nativeBuildInputs = [
+    scdoc
+    zig_0_11.hook
+  ];
+
+  postInstall = ''
+    zig build docs --prefix $out
+  '';
+
+  meta = with lib; {
+    description = "Generate tags files for Zig projects";
+    homepage = "https://github.com/gpanders/ztags";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "ztags";
+    inherit (zig_0_11.meta) platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/mix2nix/default.nix b/nixpkgs/pkgs/development/tools/mix2nix/default.nix
new file mode 100644
index 000000000000..7c2d773884d9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/mix2nix/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, lib, fetchFromGitHub, elixir, erlang }:
+
+stdenv.mkDerivation rec {
+  pname = "mix2nix";
+  version = "0.1.9";
+
+  src = fetchFromGitHub {
+    owner = "ydlr";
+    repo = "mix2nix";
+    rev = version;
+    hash = "sha256-Wh3KFp1gNDOKOG/DZdftmgy/M+67ZGfdj6W3ETQpX/8=";
+  };
+
+  nativeBuildInputs = [ elixir ];
+  buildInputs = [ erlang ];
+
+  buildPhase = "mix escript.build";
+  installPhase = "install -Dt $out/bin mix2nix";
+
+  meta = with lib; {
+    description = "Generate nix expressions from mix.lock file.";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ydlr ] ++ teams.beam.members;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/mmixware/default.nix b/nixpkgs/pkgs/development/tools/mmixware/default.nix
new file mode 100644
index 000000000000..024028fd5b69
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/mmixware/default.nix
@@ -0,0 +1,48 @@
+{ lib, stdenv, fetchFromGitLab, tetex }:
+
+stdenv.mkDerivation {
+  pname = "mmixware";
+  version = "unstable-2021-06-18";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.lrz.de";
+    owner = "mmix";
+    repo = "mmixware";
+    rev = "7c790176d50d13ae2422fa7457ccc4c2d29eba9b";
+    sha256 = "sha256-eSwHiJ5SP/Nennalv4QFTgVnM6oan/DWDZRqtk0o6Z0=";
+  };
+
+  hardeningDisable = [ "format" ];
+
+  postPatch = ''
+    substituteInPlace Makefile --replace 'rm abstime.h' ""
+  '';
+
+  # Workaround build failure on -fno-common toolchains:
+  #   ld: mmix-config.o:(.bss+0x600): multiple definition of `buffer'; /build/ccDuGrwH.o:(.bss+0x20): first defined here
+  env.NIX_CFLAGS_COMPILE = "-fcommon";
+
+  nativeBuildInputs = [ tetex ];
+  enableParallelBuilding = true;
+
+  makeFlags = [ "all" "doc" "CFLAGS=-O2" ];
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out/share/doc
+    cp *.ps $out/share/doc
+    install -Dm755 mmixal -t $out/bin
+    install -Dm755 mmix -t $out/bin
+    install -Dm755 mmotype -t $out/bin
+    install -Dm755 mmmix -t $out/bin
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description  = "MMIX simulator and assembler";
+    homepage     = "https://www-cs-faculty.stanford.edu/~knuth/mmix-news.html";
+    maintainers  = with maintainers; [ siraben ];
+    platforms    = platforms.unix;
+    license      = licenses.publicDomain;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/mockgen/default.nix b/nixpkgs/pkgs/development/tools/mockgen/default.nix
new file mode 100644
index 000000000000..ed2aa4e50d93
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/mockgen/default.nix
@@ -0,0 +1,49 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+, testers
+, mockgen
+}:
+
+buildGoModule rec {
+  pname = "mockgen";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "uber-go";
+    repo = "mock";
+    rev = "v${version}";
+    sha256 = "sha256-3nt70xrZisK5vgQa+STZPiY4F9ITKw8PbBWcKoBn4Vc=";
+  };
+
+  vendorHash = "sha256-mcNVud2jzvlPPQEaar/eYZkP71V2Civz+R5v10+tewA=";
+
+  CGO_ENABLED = 0;
+
+  subPackages = [ "mockgen" ];
+
+  ldflags = [
+    "-X=main.version=${version}"
+    "-X=main.date=1970-01-01T00:00:00Z"
+    "-X=main.commit=unknown"
+  ];
+
+  passthru.tests.version = testers.testVersion {
+    package = mockgen;
+    command = "mockgen -version";
+    version = ''
+      v${version}
+      Commit: unknown
+      Date: 1970-01-01T00:00:00Z
+    '';
+  };
+
+  meta = with lib; {
+    description = "GoMock is a mocking framework for the Go programming language";
+    homepage = "https://github.com/uber-go/mock";
+    changelog = "https://github.com/uber-go/mock/blob/v${version}/CHANGELOG.md";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ bouk ];
+    mainProgram = "mockgen";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/mod/default.nix b/nixpkgs/pkgs/development/tools/mod/default.nix
new file mode 100644
index 000000000000..fb5abd0fe6ad
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/mod/default.nix
@@ -0,0 +1,31 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+buildGoModule rec {
+  pname = "mod";
+  version = "0.7.1";
+
+  src = fetchFromGitHub {
+    owner = "marwan-at-work";
+    repo = "mod";
+    rev = "v${version}";
+    sha256 = "sha256-QkLARUN/NiN0D6VEhosdFJSce6DP+sWRWFwAEocZaOQ=";
+  };
+
+  vendorHash = "sha256-5A4W99wcuXMWH0s+uykBWuKCxo8wr3GbTpUKj+Ql0os=";
+
+  doCheck = false;
+
+  subPackages = [ "cmd/mod" ];
+
+  meta = with lib; {
+    description = "Automated Semantic Import Versioning Upgrades for Go";
+    longDescription = ''
+      Command line tool to upgrade/downgrade Semantic Import Versioning in Go
+      Modules.
+      '';
+    homepage = "https://github.com/marwan-at-work/mod";
+    license = licenses.mit;
+    maintainers = with maintainers; [ kalbasit ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/modd/default.nix b/nixpkgs/pkgs/development/tools/modd/default.nix
new file mode 100644
index 000000000000..4ad15ecfc80f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/modd/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "modd";
+  version = "unstable-2021-12-15";
+
+  src = fetchFromGitHub {
+    owner = "cortesi";
+    repo = "modd";
+    rev = "6083f9d1c171bd3292945672dab654a70d205945";
+    sha256 = "sha256-KDZyOnytDLyybHTgU1v/NpiomeHXMIUHiQ+Xpmwyo0w=";
+  };
+
+  vendorHash = "sha256-O+hJRMSwV/9NHxbaLjloCWnfPugfRYaXNve098wjbqQ=";
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "A flexible developer tool that runs processes and responds to filesystem changes";
+    homepage = "https://github.com/cortesi/modd";
+    license = licenses.mit;
+    maintainers = with maintainers; [ kierdavis ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/mold/default.nix b/nixpkgs/pkgs/development/tools/mold/default.nix
new file mode 100644
index 000000000000..9f9599e047dc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/mold/default.nix
@@ -0,0 +1,119 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, nix-update-script
+
+, cmake
+, mimalloc
+, ninja
+, tbb
+, zlib
+, zstd
+
+, buildPackages
+, clangStdenv
+, gccStdenv
+, hello
+, mold
+, mold-wrapped
+, runCommandCC
+, testers
+, useMoldLinker
+}:
+
+stdenv.mkDerivation rec {
+  pname = "mold";
+  version = "2.4.0";
+
+  src = fetchFromGitHub {
+    owner = "rui314";
+    repo = "mold";
+    rev = "v${version}";
+    hash = "sha256-ufqTbY59AI1MrY/vrsDg5a4WEVz9IFTdgl1GHMw9HGc=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    ninja
+  ];
+
+  buildInputs = [
+    tbb
+    zlib
+    zstd
+  ] ++ lib.optionals (!stdenv.isDarwin) [
+    mimalloc
+  ];
+
+  cmakeFlags = [
+    "-DMOLD_USE_SYSTEM_MIMALLOC:BOOL=ON"
+    "-DMOLD_USE_SYSTEM_TBB:BOOL=ON"
+  ];
+
+  env.NIX_CFLAGS_COMPILE = toString (lib.optionals stdenv.isDarwin [
+    "-faligned-allocation"
+  ]);
+
+  passthru = {
+    updateScript = nix-update-script { };
+    tests =
+      let
+        helloTest = name: helloMold:
+          let
+            command = "$READELF -p .comment ${lib.getExe helloMold}";
+            emulator = stdenv.hostPlatform.emulator buildPackages;
+          in
+          runCommandCC "mold-${name}-test" { passthru = { inherit helloMold; }; }
+            ''
+              echo "Testing running the 'hello' binary which should be linked with 'mold'" >&2
+              ${emulator} ${lib.getExe helloMold}
+
+              echo "Checking for mold in the '.comment' section" >&2
+              if output=$(${command} 2>&1); then
+                if grep -Fw -- "mold" - <<< "$output"; then
+                  touch $out
+                else
+                  echo "No mention of 'mold' detected in the '.comment' section" >&2
+                  echo "The command was:" >&2
+                  echo "${command}" >&2
+                  echo "The output was:" >&2
+                  echo "$output" >&2
+                  exit 1
+                fi
+              else
+                echo -n "${command}" >&2
+                echo " returned a non-zero exit code." >&2
+                echo "$output" >&2
+                exit 1
+              fi
+            ''
+        ;
+      in
+      {
+        version = testers.testVersion { package = mold; };
+      } // lib.optionalAttrs stdenv.isLinux {
+        adapter-gcc = helloTest "adapter-gcc" (hello.override (old: { stdenv = useMoldLinker gccStdenv; }));
+        adapter-llvm = helloTest "adapter-llvm" (hello.override (old: { stdenv = useMoldLinker clangStdenv; }));
+        wrapped = helloTest "wrapped" (hello.overrideAttrs (previousAttrs: {
+          nativeBuildInputs = (previousAttrs.nativeBuildInputs or [ ]) ++ [ mold-wrapped ];
+          NIX_CFLAGS_LINK = toString (previousAttrs.NIX_CFLAGS_LINK or "") + " -fuse-ld=mold";
+        }));
+      };
+  };
+
+  meta = with lib; {
+    description = "A faster drop-in replacement for existing Unix linkers (unwrapped)";
+    longDescription = ''
+      mold is a faster drop-in replacement for existing Unix linkers. It is
+      several times faster than the LLVM lld linker. mold is designed to
+      increase developer productivity by reducing build time, especially in
+      rapid debug-edit-rebuild cycles.
+    '';
+    homepage = "https://github.com/rui314/mold";
+    changelog = "https://github.com/rui314/mold/releases/tag/v${version}";
+    license = licenses.mit;
+    platforms = platforms.unix;
+    mainProgram = "mold";
+    maintainers = with maintainers; [ azahi paveloom ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/mongosh/default.nix b/nixpkgs/pkgs/development/tools/mongosh/default.nix
new file mode 100644
index 000000000000..56e2e2e8e421
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/mongosh/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, buildNpmPackage
+, fetchurl
+, testers
+, mongosh
+}:
+
+let
+  source = lib.importJSON ./source.json;
+in
+buildNpmPackage {
+  pname = "mongosh";
+  inherit (source) version;
+
+  src = fetchurl {
+    url = "https://registry.npmjs.org/mongosh/-/${source.filename}";
+    hash = source.integrity;
+  };
+
+  postPatch = ''
+    ln -s ${./package-lock.json} package-lock.json
+  '';
+
+  npmDepsHash = source.deps;
+
+  makeCacheWritable = true;
+  dontNpmBuild = true;
+  npmFlags = [ "--omit=optional" ];
+
+  passthru = {
+    tests.version = testers.testVersion {
+      package = mongosh;
+    };
+    updateScript = ./update.sh;
+  };
+
+  meta = with lib; {
+    homepage = "https://www.mongodb.com/try/download/shell";
+    description = "The MongoDB Shell";
+    maintainers = with maintainers; [ aaronjheng ];
+    license = licenses.asl20;
+    mainProgram = "mongosh";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/mongosh/package-lock.json b/nixpkgs/pkgs/development/tools/mongosh/package-lock.json
new file mode 100644
index 000000000000..4c59e94cee8e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/mongosh/package-lock.json
@@ -0,0 +1,5109 @@
+{
+  "name": "mongosh",
+  "version": "2.1.3",
+  "lockfileVersion": 3,
+  "requires": true,
+  "packages": {
+    "": {
+      "name": "mongosh",
+      "version": "2.1.3",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@mongosh/cli-repl": "2.1.3"
+      },
+      "bin": {
+        "mongosh": "bin/mongosh.js"
+      },
+      "engines": {
+        "node": ">=16.15.0"
+      }
+    },
+    "node_modules/@ampproject/remapping": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmmirror.com/@ampproject/remapping/-/remapping-2.2.1.tgz",
+      "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==",
+      "dependencies": {
+        "@jridgewell/gen-mapping": "^0.3.0",
+        "@jridgewell/trace-mapping": "^0.3.9"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@aws-crypto/crc32": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/@aws-crypto/crc32/-/crc32-3.0.0.tgz",
+      "integrity": "sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==",
+      "dependencies": {
+        "@aws-crypto/util": "^3.0.0",
+        "@aws-sdk/types": "^3.222.0",
+        "tslib": "^1.11.1"
+      }
+    },
+    "node_modules/@aws-crypto/crc32/node_modules/tslib": {
+      "version": "1.14.1",
+      "resolved": "https://registry.npmmirror.com/tslib/-/tslib-1.14.1.tgz",
+      "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
+    },
+    "node_modules/@aws-crypto/ie11-detection": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz",
+      "integrity": "sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==",
+      "dependencies": {
+        "tslib": "^1.11.1"
+      }
+    },
+    "node_modules/@aws-crypto/ie11-detection/node_modules/tslib": {
+      "version": "1.14.1",
+      "resolved": "https://registry.npmmirror.com/tslib/-/tslib-1.14.1.tgz",
+      "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
+    },
+    "node_modules/@aws-crypto/sha256-browser": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz",
+      "integrity": "sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==",
+      "dependencies": {
+        "@aws-crypto/ie11-detection": "^3.0.0",
+        "@aws-crypto/sha256-js": "^3.0.0",
+        "@aws-crypto/supports-web-crypto": "^3.0.0",
+        "@aws-crypto/util": "^3.0.0",
+        "@aws-sdk/types": "^3.222.0",
+        "@aws-sdk/util-locate-window": "^3.0.0",
+        "@aws-sdk/util-utf8-browser": "^3.0.0",
+        "tslib": "^1.11.1"
+      }
+    },
+    "node_modules/@aws-crypto/sha256-browser/node_modules/tslib": {
+      "version": "1.14.1",
+      "resolved": "https://registry.npmmirror.com/tslib/-/tslib-1.14.1.tgz",
+      "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
+    },
+    "node_modules/@aws-crypto/sha256-js": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz",
+      "integrity": "sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==",
+      "dependencies": {
+        "@aws-crypto/util": "^3.0.0",
+        "@aws-sdk/types": "^3.222.0",
+        "tslib": "^1.11.1"
+      }
+    },
+    "node_modules/@aws-crypto/sha256-js/node_modules/tslib": {
+      "version": "1.14.1",
+      "resolved": "https://registry.npmmirror.com/tslib/-/tslib-1.14.1.tgz",
+      "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
+    },
+    "node_modules/@aws-crypto/supports-web-crypto": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz",
+      "integrity": "sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==",
+      "dependencies": {
+        "tslib": "^1.11.1"
+      }
+    },
+    "node_modules/@aws-crypto/supports-web-crypto/node_modules/tslib": {
+      "version": "1.14.1",
+      "resolved": "https://registry.npmmirror.com/tslib/-/tslib-1.14.1.tgz",
+      "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
+    },
+    "node_modules/@aws-crypto/util": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/@aws-crypto/util/-/util-3.0.0.tgz",
+      "integrity": "sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==",
+      "dependencies": {
+        "@aws-sdk/types": "^3.222.0",
+        "@aws-sdk/util-utf8-browser": "^3.0.0",
+        "tslib": "^1.11.1"
+      }
+    },
+    "node_modules/@aws-crypto/util/node_modules/tslib": {
+      "version": "1.14.1",
+      "resolved": "https://registry.npmmirror.com/tslib/-/tslib-1.14.1.tgz",
+      "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
+    },
+    "node_modules/@aws-sdk/client-cognito-identity": {
+      "version": "3.504.0",
+      "resolved": "https://registry.npmmirror.com/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.504.0.tgz",
+      "integrity": "sha512-WsQY6CRDC9Y1rKjpsk187EHKES6nLmM9sD6iHAKZFLhi/DiYsy8SIafPFPEvluubYlheeLzgUB8Oxpj6Z69hlA==",
+      "dependencies": {
+        "@aws-crypto/sha256-browser": "3.0.0",
+        "@aws-crypto/sha256-js": "3.0.0",
+        "@aws-sdk/client-sts": "3.504.0",
+        "@aws-sdk/core": "3.496.0",
+        "@aws-sdk/credential-provider-node": "3.504.0",
+        "@aws-sdk/middleware-host-header": "3.502.0",
+        "@aws-sdk/middleware-logger": "3.502.0",
+        "@aws-sdk/middleware-recursion-detection": "3.502.0",
+        "@aws-sdk/middleware-signing": "3.502.0",
+        "@aws-sdk/middleware-user-agent": "3.502.0",
+        "@aws-sdk/region-config-resolver": "3.502.0",
+        "@aws-sdk/types": "3.502.0",
+        "@aws-sdk/util-endpoints": "3.502.0",
+        "@aws-sdk/util-user-agent-browser": "3.502.0",
+        "@aws-sdk/util-user-agent-node": "3.502.0",
+        "@smithy/config-resolver": "^2.1.1",
+        "@smithy/core": "^1.3.1",
+        "@smithy/fetch-http-handler": "^2.4.1",
+        "@smithy/hash-node": "^2.1.1",
+        "@smithy/invalid-dependency": "^2.1.1",
+        "@smithy/middleware-content-length": "^2.1.1",
+        "@smithy/middleware-endpoint": "^2.4.1",
+        "@smithy/middleware-retry": "^2.1.1",
+        "@smithy/middleware-serde": "^2.1.1",
+        "@smithy/middleware-stack": "^2.1.1",
+        "@smithy/node-config-provider": "^2.2.1",
+        "@smithy/node-http-handler": "^2.3.1",
+        "@smithy/protocol-http": "^3.1.1",
+        "@smithy/smithy-client": "^2.3.1",
+        "@smithy/types": "^2.9.1",
+        "@smithy/url-parser": "^2.1.1",
+        "@smithy/util-base64": "^2.1.1",
+        "@smithy/util-body-length-browser": "^2.1.1",
+        "@smithy/util-body-length-node": "^2.2.1",
+        "@smithy/util-defaults-mode-browser": "^2.1.1",
+        "@smithy/util-defaults-mode-node": "^2.1.1",
+        "@smithy/util-endpoints": "^1.1.1",
+        "@smithy/util-retry": "^2.1.1",
+        "@smithy/util-utf8": "^2.1.1",
+        "tslib": "^2.5.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@aws-sdk/client-sso": {
+      "version": "3.502.0",
+      "resolved": "https://registry.npmmirror.com/@aws-sdk/client-sso/-/client-sso-3.502.0.tgz",
+      "integrity": "sha512-OZAYal1+PQgUUtWiHhRayDtX0OD+XpXHKAhjYgEIPbyhQaCMp3/Bq1xDX151piWXvXqXLJHFKb8DUEqzwGO9QA==",
+      "dependencies": {
+        "@aws-crypto/sha256-browser": "3.0.0",
+        "@aws-crypto/sha256-js": "3.0.0",
+        "@aws-sdk/core": "3.496.0",
+        "@aws-sdk/middleware-host-header": "3.502.0",
+        "@aws-sdk/middleware-logger": "3.502.0",
+        "@aws-sdk/middleware-recursion-detection": "3.502.0",
+        "@aws-sdk/middleware-user-agent": "3.502.0",
+        "@aws-sdk/region-config-resolver": "3.502.0",
+        "@aws-sdk/types": "3.502.0",
+        "@aws-sdk/util-endpoints": "3.502.0",
+        "@aws-sdk/util-user-agent-browser": "3.502.0",
+        "@aws-sdk/util-user-agent-node": "3.502.0",
+        "@smithy/config-resolver": "^2.1.1",
+        "@smithy/core": "^1.3.1",
+        "@smithy/fetch-http-handler": "^2.4.1",
+        "@smithy/hash-node": "^2.1.1",
+        "@smithy/invalid-dependency": "^2.1.1",
+        "@smithy/middleware-content-length": "^2.1.1",
+        "@smithy/middleware-endpoint": "^2.4.1",
+        "@smithy/middleware-retry": "^2.1.1",
+        "@smithy/middleware-serde": "^2.1.1",
+        "@smithy/middleware-stack": "^2.1.1",
+        "@smithy/node-config-provider": "^2.2.1",
+        "@smithy/node-http-handler": "^2.3.1",
+        "@smithy/protocol-http": "^3.1.1",
+        "@smithy/smithy-client": "^2.3.1",
+        "@smithy/types": "^2.9.1",
+        "@smithy/url-parser": "^2.1.1",
+        "@smithy/util-base64": "^2.1.1",
+        "@smithy/util-body-length-browser": "^2.1.1",
+        "@smithy/util-body-length-node": "^2.2.1",
+        "@smithy/util-defaults-mode-browser": "^2.1.1",
+        "@smithy/util-defaults-mode-node": "^2.1.1",
+        "@smithy/util-endpoints": "^1.1.1",
+        "@smithy/util-retry": "^2.1.1",
+        "@smithy/util-utf8": "^2.1.1",
+        "tslib": "^2.5.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@aws-sdk/client-sso-oidc": {
+      "version": "3.504.0",
+      "resolved": "https://registry.npmmirror.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.504.0.tgz",
+      "integrity": "sha512-ODA33/nm2srhV08EW0KZAP577UgV0qjyr7Xp2yEo8MXWL4ZqQZprk1c+QKBhjr4Djesrm0VPmSD/np0mtYP68A==",
+      "dependencies": {
+        "@aws-crypto/sha256-browser": "3.0.0",
+        "@aws-crypto/sha256-js": "3.0.0",
+        "@aws-sdk/client-sts": "3.504.0",
+        "@aws-sdk/core": "3.496.0",
+        "@aws-sdk/middleware-host-header": "3.502.0",
+        "@aws-sdk/middleware-logger": "3.502.0",
+        "@aws-sdk/middleware-recursion-detection": "3.502.0",
+        "@aws-sdk/middleware-signing": "3.502.0",
+        "@aws-sdk/middleware-user-agent": "3.502.0",
+        "@aws-sdk/region-config-resolver": "3.502.0",
+        "@aws-sdk/types": "3.502.0",
+        "@aws-sdk/util-endpoints": "3.502.0",
+        "@aws-sdk/util-user-agent-browser": "3.502.0",
+        "@aws-sdk/util-user-agent-node": "3.502.0",
+        "@smithy/config-resolver": "^2.1.1",
+        "@smithy/core": "^1.3.1",
+        "@smithy/fetch-http-handler": "^2.4.1",
+        "@smithy/hash-node": "^2.1.1",
+        "@smithy/invalid-dependency": "^2.1.1",
+        "@smithy/middleware-content-length": "^2.1.1",
+        "@smithy/middleware-endpoint": "^2.4.1",
+        "@smithy/middleware-retry": "^2.1.1",
+        "@smithy/middleware-serde": "^2.1.1",
+        "@smithy/middleware-stack": "^2.1.1",
+        "@smithy/node-config-provider": "^2.2.1",
+        "@smithy/node-http-handler": "^2.3.1",
+        "@smithy/protocol-http": "^3.1.1",
+        "@smithy/smithy-client": "^2.3.1",
+        "@smithy/types": "^2.9.1",
+        "@smithy/url-parser": "^2.1.1",
+        "@smithy/util-base64": "^2.1.1",
+        "@smithy/util-body-length-browser": "^2.1.1",
+        "@smithy/util-body-length-node": "^2.2.1",
+        "@smithy/util-defaults-mode-browser": "^2.1.1",
+        "@smithy/util-defaults-mode-node": "^2.1.1",
+        "@smithy/util-endpoints": "^1.1.1",
+        "@smithy/util-retry": "^2.1.1",
+        "@smithy/util-utf8": "^2.1.1",
+        "tslib": "^2.5.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      },
+      "peerDependencies": {
+        "@aws-sdk/credential-provider-node": "^3.504.0"
+      }
+    },
+    "node_modules/@aws-sdk/client-sts": {
+      "version": "3.504.0",
+      "resolved": "https://registry.npmmirror.com/@aws-sdk/client-sts/-/client-sts-3.504.0.tgz",
+      "integrity": "sha512-IESs8FkL7B/uY+ml4wgoRkrr6xYo4PizcNw6JX17eveq1gRBCPKeGMjE6HTDOcIYZZ8rqz/UeuH3JD4UhrMOnA==",
+      "dependencies": {
+        "@aws-crypto/sha256-browser": "3.0.0",
+        "@aws-crypto/sha256-js": "3.0.0",
+        "@aws-sdk/core": "3.496.0",
+        "@aws-sdk/middleware-host-header": "3.502.0",
+        "@aws-sdk/middleware-logger": "3.502.0",
+        "@aws-sdk/middleware-recursion-detection": "3.502.0",
+        "@aws-sdk/middleware-user-agent": "3.502.0",
+        "@aws-sdk/region-config-resolver": "3.502.0",
+        "@aws-sdk/types": "3.502.0",
+        "@aws-sdk/util-endpoints": "3.502.0",
+        "@aws-sdk/util-user-agent-browser": "3.502.0",
+        "@aws-sdk/util-user-agent-node": "3.502.0",
+        "@smithy/config-resolver": "^2.1.1",
+        "@smithy/core": "^1.3.1",
+        "@smithy/fetch-http-handler": "^2.4.1",
+        "@smithy/hash-node": "^2.1.1",
+        "@smithy/invalid-dependency": "^2.1.1",
+        "@smithy/middleware-content-length": "^2.1.1",
+        "@smithy/middleware-endpoint": "^2.4.1",
+        "@smithy/middleware-retry": "^2.1.1",
+        "@smithy/middleware-serde": "^2.1.1",
+        "@smithy/middleware-stack": "^2.1.1",
+        "@smithy/node-config-provider": "^2.2.1",
+        "@smithy/node-http-handler": "^2.3.1",
+        "@smithy/protocol-http": "^3.1.1",
+        "@smithy/smithy-client": "^2.3.1",
+        "@smithy/types": "^2.9.1",
+        "@smithy/url-parser": "^2.1.1",
+        "@smithy/util-base64": "^2.1.1",
+        "@smithy/util-body-length-browser": "^2.1.1",
+        "@smithy/util-body-length-node": "^2.2.1",
+        "@smithy/util-defaults-mode-browser": "^2.1.1",
+        "@smithy/util-defaults-mode-node": "^2.1.1",
+        "@smithy/util-endpoints": "^1.1.1",
+        "@smithy/util-middleware": "^2.1.1",
+        "@smithy/util-retry": "^2.1.1",
+        "@smithy/util-utf8": "^2.1.1",
+        "fast-xml-parser": "4.2.5",
+        "tslib": "^2.5.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      },
+      "peerDependencies": {
+        "@aws-sdk/credential-provider-node": "^3.504.0"
+      }
+    },
+    "node_modules/@aws-sdk/core": {
+      "version": "3.496.0",
+      "resolved": "https://registry.npmmirror.com/@aws-sdk/core/-/core-3.496.0.tgz",
+      "integrity": "sha512-yT+ug7Cw/3eJi7x2es0+46x12+cIJm5Xv+GPWsrTFD1TKgqO/VPEgfDtHFagDNbFmjNQA65Ygc/kEdIX9ICX/A==",
+      "dependencies": {
+        "@smithy/core": "^1.3.1",
+        "@smithy/protocol-http": "^3.1.1",
+        "@smithy/signature-v4": "^2.1.1",
+        "@smithy/smithy-client": "^2.3.1",
+        "@smithy/types": "^2.9.1",
+        "tslib": "^2.5.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@aws-sdk/credential-provider-cognito-identity": {
+      "version": "3.504.0",
+      "resolved": "https://registry.npmmirror.com/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.504.0.tgz",
+      "integrity": "sha512-QRmKLl4wM7Yd1HBzUdHIA+QhQxLROXptQjwMNL+KNfl5vMFYOUt0FMXwg80DRHl7qEScvZZEDovcswuuw5Uo2w==",
+      "dependencies": {
+        "@aws-sdk/client-cognito-identity": "3.504.0",
+        "@aws-sdk/types": "3.502.0",
+        "@smithy/property-provider": "^2.1.1",
+        "@smithy/types": "^2.9.1",
+        "tslib": "^2.5.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@aws-sdk/credential-provider-env": {
+      "version": "3.502.0",
+      "resolved": "https://registry.npmmirror.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.502.0.tgz",
+      "integrity": "sha512-KIB8Ae1Z7domMU/jU4KiIgK4tmYgvuXlhR54ehwlVHxnEoFPoPuGHFZU7oFn79jhhSLUFQ1lRYMxP0cEwb7XeQ==",
+      "dependencies": {
+        "@aws-sdk/types": "3.502.0",
+        "@smithy/property-provider": "^2.1.1",
+        "@smithy/types": "^2.9.1",
+        "tslib": "^2.5.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@aws-sdk/credential-provider-http": {
+      "version": "3.503.1",
+      "resolved": "https://registry.npmmirror.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.503.1.tgz",
+      "integrity": "sha512-rTdlFFGoPPFMF2YjtlfRuSgKI+XsF49u7d98255hySwhsbwd3Xp+utTTPquxP+CwDxMHbDlI7NxDzFiFdsoZug==",
+      "dependencies": {
+        "@aws-sdk/types": "3.502.0",
+        "@smithy/fetch-http-handler": "^2.4.1",
+        "@smithy/node-http-handler": "^2.3.1",
+        "@smithy/property-provider": "^2.1.1",
+        "@smithy/protocol-http": "^3.1.1",
+        "@smithy/smithy-client": "^2.3.1",
+        "@smithy/types": "^2.9.1",
+        "@smithy/util-stream": "^2.1.1",
+        "tslib": "^2.5.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@aws-sdk/credential-provider-ini": {
+      "version": "3.504.0",
+      "resolved": "https://registry.npmmirror.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.504.0.tgz",
+      "integrity": "sha512-ODICLXfr8xTUd3wweprH32Ge41yuBa+u3j0JUcLdTUO1N9ldczSMdo8zOPlP0z4doqD3xbnqMkjNQWgN/Q+5oQ==",
+      "dependencies": {
+        "@aws-sdk/client-sts": "3.504.0",
+        "@aws-sdk/credential-provider-env": "3.502.0",
+        "@aws-sdk/credential-provider-process": "3.502.0",
+        "@aws-sdk/credential-provider-sso": "3.504.0",
+        "@aws-sdk/credential-provider-web-identity": "3.504.0",
+        "@aws-sdk/types": "3.502.0",
+        "@smithy/credential-provider-imds": "^2.2.1",
+        "@smithy/property-provider": "^2.1.1",
+        "@smithy/shared-ini-file-loader": "^2.3.1",
+        "@smithy/types": "^2.9.1",
+        "tslib": "^2.5.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@aws-sdk/credential-provider-node": {
+      "version": "3.504.0",
+      "resolved": "https://registry.npmmirror.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.504.0.tgz",
+      "integrity": "sha512-6+V5hIh+tILmUjf2ZQWQINR3atxQVgH/bFrGdSR/sHSp/tEgw3m0xWL3IRslWU1e4/GtXrfg1iYnMknXy68Ikw==",
+      "dependencies": {
+        "@aws-sdk/credential-provider-env": "3.502.0",
+        "@aws-sdk/credential-provider-http": "3.503.1",
+        "@aws-sdk/credential-provider-ini": "3.504.0",
+        "@aws-sdk/credential-provider-process": "3.502.0",
+        "@aws-sdk/credential-provider-sso": "3.504.0",
+        "@aws-sdk/credential-provider-web-identity": "3.504.0",
+        "@aws-sdk/types": "3.502.0",
+        "@smithy/credential-provider-imds": "^2.2.1",
+        "@smithy/property-provider": "^2.1.1",
+        "@smithy/shared-ini-file-loader": "^2.3.1",
+        "@smithy/types": "^2.9.1",
+        "tslib": "^2.5.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@aws-sdk/credential-provider-process": {
+      "version": "3.502.0",
+      "resolved": "https://registry.npmmirror.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.502.0.tgz",
+      "integrity": "sha512-fJJowOjQ4infYQX0E1J3xFVlmuwEYJAFk0Mo1qwafWmEthsBJs+6BR2RiWDELHKrSK35u4Pf3fu3RkYuCtmQFw==",
+      "dependencies": {
+        "@aws-sdk/types": "3.502.0",
+        "@smithy/property-provider": "^2.1.1",
+        "@smithy/shared-ini-file-loader": "^2.3.1",
+        "@smithy/types": "^2.9.1",
+        "tslib": "^2.5.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@aws-sdk/credential-provider-sso": {
+      "version": "3.504.0",
+      "resolved": "https://registry.npmmirror.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.504.0.tgz",
+      "integrity": "sha512-4MgH2or2SjPzaxM08DCW+BjaX4DSsEGJlicHKmz6fh+w9JmLh750oXcTnbvgUeVz075jcs6qTKjvUcsdGM/t8Q==",
+      "dependencies": {
+        "@aws-sdk/client-sso": "3.502.0",
+        "@aws-sdk/token-providers": "3.504.0",
+        "@aws-sdk/types": "3.502.0",
+        "@smithy/property-provider": "^2.1.1",
+        "@smithy/shared-ini-file-loader": "^2.3.1",
+        "@smithy/types": "^2.9.1",
+        "tslib": "^2.5.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@aws-sdk/credential-provider-web-identity": {
+      "version": "3.504.0",
+      "resolved": "https://registry.npmmirror.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.504.0.tgz",
+      "integrity": "sha512-L1ljCvGpIEFdJk087ijf2ohg7HBclOeB1UgBxUBBzf4iPRZTQzd2chGaKj0hm2VVaXz7nglswJeURH5PFcS5oA==",
+      "dependencies": {
+        "@aws-sdk/client-sts": "3.504.0",
+        "@aws-sdk/types": "3.502.0",
+        "@smithy/property-provider": "^2.1.1",
+        "@smithy/types": "^2.9.1",
+        "tslib": "^2.5.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@aws-sdk/credential-providers": {
+      "version": "3.504.1",
+      "resolved": "https://registry.npmmirror.com/@aws-sdk/credential-providers/-/credential-providers-3.504.1.tgz",
+      "integrity": "sha512-D/ef7ZVxJVXC1qe6ZMS0dOWM92LNHJRHn9Biz5eRqRvRhNL+Rq68ZULlc0TQTVY71Fcc5TJ8OwFhaboPUiqWXA==",
+      "dependencies": {
+        "@aws-sdk/client-cognito-identity": "3.504.0",
+        "@aws-sdk/client-sso": "3.502.0",
+        "@aws-sdk/client-sts": "3.504.0",
+        "@aws-sdk/credential-provider-cognito-identity": "3.504.0",
+        "@aws-sdk/credential-provider-env": "3.502.0",
+        "@aws-sdk/credential-provider-http": "3.503.1",
+        "@aws-sdk/credential-provider-ini": "3.504.0",
+        "@aws-sdk/credential-provider-node": "3.504.0",
+        "@aws-sdk/credential-provider-process": "3.502.0",
+        "@aws-sdk/credential-provider-sso": "3.504.0",
+        "@aws-sdk/credential-provider-web-identity": "3.504.0",
+        "@aws-sdk/types": "3.502.0",
+        "@smithy/credential-provider-imds": "^2.2.1",
+        "@smithy/property-provider": "^2.1.1",
+        "@smithy/types": "^2.9.1",
+        "tslib": "^2.5.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@aws-sdk/middleware-host-header": {
+      "version": "3.502.0",
+      "resolved": "https://registry.npmmirror.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.502.0.tgz",
+      "integrity": "sha512-EjnG0GTYXT/wJBmm5/mTjDcAkzU8L7wQjOzd3FTXuTCNNyvAvwrszbOj5FlarEw5XJBbQiZtBs+I5u9+zy560w==",
+      "dependencies": {
+        "@aws-sdk/types": "3.502.0",
+        "@smithy/protocol-http": "^3.1.1",
+        "@smithy/types": "^2.9.1",
+        "tslib": "^2.5.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@aws-sdk/middleware-logger": {
+      "version": "3.502.0",
+      "resolved": "https://registry.npmmirror.com/@aws-sdk/middleware-logger/-/middleware-logger-3.502.0.tgz",
+      "integrity": "sha512-FDyv6K4nCoHxbjLGS2H8ex8I0KDIiu4FJgVRPs140ZJy6gE5Pwxzv6YTzZGLMrnqcIs9gh065Lf6DjwMelZqaw==",
+      "dependencies": {
+        "@aws-sdk/types": "3.502.0",
+        "@smithy/types": "^2.9.1",
+        "tslib": "^2.5.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@aws-sdk/middleware-recursion-detection": {
+      "version": "3.502.0",
+      "resolved": "https://registry.npmmirror.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.502.0.tgz",
+      "integrity": "sha512-hvbyGJbxeuezxOu8VfFmcV4ql1hKXLxHTe5FNYfEBat2KaZXVhc1Hg+4TvB06/53p+E8J99Afmumkqbxs2esUA==",
+      "dependencies": {
+        "@aws-sdk/types": "3.502.0",
+        "@smithy/protocol-http": "^3.1.1",
+        "@smithy/types": "^2.9.1",
+        "tslib": "^2.5.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@aws-sdk/middleware-signing": {
+      "version": "3.502.0",
+      "resolved": "https://registry.npmmirror.com/@aws-sdk/middleware-signing/-/middleware-signing-3.502.0.tgz",
+      "integrity": "sha512-4hF08vSzJ7L6sB+393gOFj3s2N6nLusYS0XrMW6wYNFU10IDdbf8Z3TZ7gysDJJHEGQPmTAesPEDBsasGWcMxg==",
+      "dependencies": {
+        "@aws-sdk/types": "3.502.0",
+        "@smithy/property-provider": "^2.1.1",
+        "@smithy/protocol-http": "^3.1.1",
+        "@smithy/signature-v4": "^2.1.1",
+        "@smithy/types": "^2.9.1",
+        "@smithy/util-middleware": "^2.1.1",
+        "tslib": "^2.5.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@aws-sdk/middleware-user-agent": {
+      "version": "3.502.0",
+      "resolved": "https://registry.npmmirror.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.502.0.tgz",
+      "integrity": "sha512-TxbBZbRiXPH0AUxegqiNd9aM9zNSbfjtBs5MEfcBsweeT/B2O7K1EjP9+CkB8Xmk/5FLKhAKLr19b1TNoE27rw==",
+      "dependencies": {
+        "@aws-sdk/types": "3.502.0",
+        "@aws-sdk/util-endpoints": "3.502.0",
+        "@smithy/protocol-http": "^3.1.1",
+        "@smithy/types": "^2.9.1",
+        "tslib": "^2.5.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@aws-sdk/region-config-resolver": {
+      "version": "3.502.0",
+      "resolved": "https://registry.npmmirror.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.502.0.tgz",
+      "integrity": "sha512-mxmsX2AGgnSM+Sah7mcQCIneOsJQNiLX0COwEttuf8eO+6cLMAZvVudH3BnWTfea4/A9nuri9DLCqBvEmPrilg==",
+      "dependencies": {
+        "@aws-sdk/types": "3.502.0",
+        "@smithy/node-config-provider": "^2.2.1",
+        "@smithy/types": "^2.9.1",
+        "@smithy/util-config-provider": "^2.2.1",
+        "@smithy/util-middleware": "^2.1.1",
+        "tslib": "^2.5.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@aws-sdk/token-providers": {
+      "version": "3.504.0",
+      "resolved": "https://registry.npmmirror.com/@aws-sdk/token-providers/-/token-providers-3.504.0.tgz",
+      "integrity": "sha512-YIJWWsZi2ClUiILS1uh5L6VjmCUSTI6KKMuL9DkGjYqJ0aI6M8bd8fT9Wm7QmXCyjcArTgr/Atkhia4T7oKvzQ==",
+      "dependencies": {
+        "@aws-sdk/client-sso-oidc": "3.504.0",
+        "@aws-sdk/types": "3.502.0",
+        "@smithy/property-provider": "^2.1.1",
+        "@smithy/shared-ini-file-loader": "^2.3.1",
+        "@smithy/types": "^2.9.1",
+        "tslib": "^2.5.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@aws-sdk/types": {
+      "version": "3.502.0",
+      "resolved": "https://registry.npmmirror.com/@aws-sdk/types/-/types-3.502.0.tgz",
+      "integrity": "sha512-M0DSPYe/gXhwD2QHgoukaZv5oDxhW3FfvYIrJptyqUq3OnPJBcDbihHjrE0PBtfh/9kgMZT60/fQ2NVFANfa2g==",
+      "dependencies": {
+        "@smithy/types": "^2.9.1",
+        "tslib": "^2.5.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@aws-sdk/util-endpoints": {
+      "version": "3.502.0",
+      "resolved": "https://registry.npmmirror.com/@aws-sdk/util-endpoints/-/util-endpoints-3.502.0.tgz",
+      "integrity": "sha512-6LKFlJPp2J24r1Kpfoz5ESQn+1v5fEjDB3mtUKRdpwarhm3syu7HbKlHCF3KbcCOyahobvLvhoedT78rJFEeeg==",
+      "dependencies": {
+        "@aws-sdk/types": "3.502.0",
+        "@smithy/types": "^2.9.1",
+        "@smithy/util-endpoints": "^1.1.1",
+        "tslib": "^2.5.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@aws-sdk/util-locate-window": {
+      "version": "3.495.0",
+      "resolved": "https://registry.npmmirror.com/@aws-sdk/util-locate-window/-/util-locate-window-3.495.0.tgz",
+      "integrity": "sha512-MfaPXT0kLX2tQaR90saBT9fWQq2DHqSSJRzW+MZWsmF+y5LGCOhO22ac/2o6TKSQm7h0HRc2GaADqYYYor62yg==",
+      "dependencies": {
+        "tslib": "^2.5.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@aws-sdk/util-user-agent-browser": {
+      "version": "3.502.0",
+      "resolved": "https://registry.npmmirror.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.502.0.tgz",
+      "integrity": "sha512-v8gKyCs2obXoIkLETAeEQ3AM+QmhHhst9xbM1cJtKUGsRlVIak/XyyD+kVE6kmMm1cjfudHpHKABWk9apQcIZQ==",
+      "dependencies": {
+        "@aws-sdk/types": "3.502.0",
+        "@smithy/types": "^2.9.1",
+        "bowser": "^2.11.0",
+        "tslib": "^2.5.0"
+      }
+    },
+    "node_modules/@aws-sdk/util-user-agent-node": {
+      "version": "3.502.0",
+      "resolved": "https://registry.npmmirror.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.502.0.tgz",
+      "integrity": "sha512-9RjxpkGZKbTdl96tIJvAo+vZoz4P/cQh36SBUt9xfRfW0BtsaLyvSrvlR5wyUYhvRcC12Axqh/8JtnAPq//+Vw==",
+      "dependencies": {
+        "@aws-sdk/types": "3.502.0",
+        "@smithy/node-config-provider": "^2.2.1",
+        "@smithy/types": "^2.9.1",
+        "tslib": "^2.5.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      },
+      "peerDependencies": {
+        "aws-crt": ">=1.0.0"
+      },
+      "peerDependenciesMeta": {
+        "aws-crt": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@aws-sdk/util-utf8-browser": {
+      "version": "3.259.0",
+      "resolved": "https://registry.npmmirror.com/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz",
+      "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==",
+      "dependencies": {
+        "tslib": "^2.3.1"
+      }
+    },
+    "node_modules/@babel/code-frame": {
+      "version": "7.23.5",
+      "resolved": "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.23.5.tgz",
+      "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==",
+      "dependencies": {
+        "@babel/highlight": "^7.23.4",
+        "chalk": "^2.4.2"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/compat-data": {
+      "version": "7.23.5",
+      "resolved": "https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.23.5.tgz",
+      "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==",
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/core": {
+      "version": "7.23.9",
+      "resolved": "https://registry.npmmirror.com/@babel/core/-/core-7.23.9.tgz",
+      "integrity": "sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==",
+      "dependencies": {
+        "@ampproject/remapping": "^2.2.0",
+        "@babel/code-frame": "^7.23.5",
+        "@babel/generator": "^7.23.6",
+        "@babel/helper-compilation-targets": "^7.23.6",
+        "@babel/helper-module-transforms": "^7.23.3",
+        "@babel/helpers": "^7.23.9",
+        "@babel/parser": "^7.23.9",
+        "@babel/template": "^7.23.9",
+        "@babel/traverse": "^7.23.9",
+        "@babel/types": "^7.23.9",
+        "convert-source-map": "^2.0.0",
+        "debug": "^4.1.0",
+        "gensync": "^1.0.0-beta.2",
+        "json5": "^2.2.3",
+        "semver": "^6.3.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/core/node_modules/semver": {
+      "version": "6.3.1",
+      "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz",
+      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+      "bin": {
+        "semver": "bin/semver.js"
+      }
+    },
+    "node_modules/@babel/generator": {
+      "version": "7.23.6",
+      "resolved": "https://registry.npmmirror.com/@babel/generator/-/generator-7.23.6.tgz",
+      "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==",
+      "dependencies": {
+        "@babel/types": "^7.23.6",
+        "@jridgewell/gen-mapping": "^0.3.2",
+        "@jridgewell/trace-mapping": "^0.3.17",
+        "jsesc": "^2.5.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-compilation-targets": {
+      "version": "7.23.6",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz",
+      "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==",
+      "dependencies": {
+        "@babel/compat-data": "^7.23.5",
+        "@babel/helper-validator-option": "^7.23.5",
+        "browserslist": "^4.22.2",
+        "lru-cache": "^5.1.1",
+        "semver": "^6.3.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-compilation-targets/node_modules/semver": {
+      "version": "6.3.1",
+      "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz",
+      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+      "bin": {
+        "semver": "bin/semver.js"
+      }
+    },
+    "node_modules/@babel/helper-environment-visitor": {
+      "version": "7.22.20",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz",
+      "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==",
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-function-name": {
+      "version": "7.23.0",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz",
+      "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==",
+      "dependencies": {
+        "@babel/template": "^7.22.15",
+        "@babel/types": "^7.23.0"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-hoist-variables": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz",
+      "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==",
+      "dependencies": {
+        "@babel/types": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-module-imports": {
+      "version": "7.22.15",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz",
+      "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==",
+      "dependencies": {
+        "@babel/types": "^7.22.15"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-module-transforms": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz",
+      "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==",
+      "dependencies": {
+        "@babel/helper-environment-visitor": "^7.22.20",
+        "@babel/helper-module-imports": "^7.22.15",
+        "@babel/helper-simple-access": "^7.22.5",
+        "@babel/helper-split-export-declaration": "^7.22.6",
+        "@babel/helper-validator-identifier": "^7.22.20"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/@babel/helper-plugin-utils": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz",
+      "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==",
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-simple-access": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz",
+      "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==",
+      "dependencies": {
+        "@babel/types": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-split-export-declaration": {
+      "version": "7.22.6",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz",
+      "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==",
+      "dependencies": {
+        "@babel/types": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-string-parser": {
+      "version": "7.23.4",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz",
+      "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==",
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-validator-identifier": {
+      "version": "7.22.20",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
+      "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-validator-option": {
+      "version": "7.23.5",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz",
+      "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==",
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helpers": {
+      "version": "7.23.9",
+      "resolved": "https://registry.npmmirror.com/@babel/helpers/-/helpers-7.23.9.tgz",
+      "integrity": "sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ==",
+      "dependencies": {
+        "@babel/template": "^7.23.9",
+        "@babel/traverse": "^7.23.9",
+        "@babel/types": "^7.23.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/highlight": {
+      "version": "7.23.4",
+      "resolved": "https://registry.npmmirror.com/@babel/highlight/-/highlight-7.23.4.tgz",
+      "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==",
+      "dependencies": {
+        "@babel/helper-validator-identifier": "^7.22.20",
+        "chalk": "^2.4.2",
+        "js-tokens": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/parser": {
+      "version": "7.23.9",
+      "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.23.9.tgz",
+      "integrity": "sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==",
+      "bin": {
+        "parser": "bin/babel-parser.js"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-destructuring": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz",
+      "integrity": "sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-parameters": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz",
+      "integrity": "sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-shorthand-properties": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz",
+      "integrity": "sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/template": {
+      "version": "7.23.9",
+      "resolved": "https://registry.npmmirror.com/@babel/template/-/template-7.23.9.tgz",
+      "integrity": "sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==",
+      "dependencies": {
+        "@babel/code-frame": "^7.23.5",
+        "@babel/parser": "^7.23.9",
+        "@babel/types": "^7.23.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/traverse": {
+      "version": "7.23.9",
+      "resolved": "https://registry.npmmirror.com/@babel/traverse/-/traverse-7.23.9.tgz",
+      "integrity": "sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==",
+      "dependencies": {
+        "@babel/code-frame": "^7.23.5",
+        "@babel/generator": "^7.23.6",
+        "@babel/helper-environment-visitor": "^7.22.20",
+        "@babel/helper-function-name": "^7.23.0",
+        "@babel/helper-hoist-variables": "^7.22.5",
+        "@babel/helper-split-export-declaration": "^7.22.6",
+        "@babel/parser": "^7.23.9",
+        "@babel/types": "^7.23.9",
+        "debug": "^4.3.1",
+        "globals": "^11.1.0"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/types": {
+      "version": "7.23.9",
+      "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.23.9.tgz",
+      "integrity": "sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==",
+      "dependencies": {
+        "@babel/helper-string-parser": "^7.23.4",
+        "@babel/helper-validator-identifier": "^7.22.20",
+        "to-fast-properties": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@hapi/hoek": {
+      "version": "9.3.0",
+      "resolved": "https://registry.npmmirror.com/@hapi/hoek/-/hoek-9.3.0.tgz",
+      "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ=="
+    },
+    "node_modules/@hapi/topo": {
+      "version": "5.1.0",
+      "resolved": "https://registry.npmmirror.com/@hapi/topo/-/topo-5.1.0.tgz",
+      "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==",
+      "dependencies": {
+        "@hapi/hoek": "^9.0.0"
+      }
+    },
+    "node_modules/@isaacs/cliui": {
+      "version": "8.0.2",
+      "resolved": "https://registry.npmmirror.com/@isaacs/cliui/-/cliui-8.0.2.tgz",
+      "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
+      "dependencies": {
+        "string-width": "^5.1.2",
+        "string-width-cjs": "npm:string-width@^4.2.0",
+        "strip-ansi": "^7.0.1",
+        "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
+        "wrap-ansi": "^8.1.0",
+        "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@isaacs/cliui/node_modules/ansi-regex": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-6.0.1.tgz",
+      "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@isaacs/cliui/node_modules/strip-ansi": {
+      "version": "7.1.0",
+      "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-7.1.0.tgz",
+      "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+      "dependencies": {
+        "ansi-regex": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@jridgewell/gen-mapping": {
+      "version": "0.3.3",
+      "resolved": "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
+      "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
+      "dependencies": {
+        "@jridgewell/set-array": "^1.0.1",
+        "@jridgewell/sourcemap-codec": "^1.4.10",
+        "@jridgewell/trace-mapping": "^0.3.9"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@jridgewell/resolve-uri": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
+      "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@jridgewell/set-array": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmmirror.com/@jridgewell/set-array/-/set-array-1.1.2.tgz",
+      "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@jridgewell/sourcemap-codec": {
+      "version": "1.4.15",
+      "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
+      "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="
+    },
+    "node_modules/@jridgewell/trace-mapping": {
+      "version": "0.3.22",
+      "resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz",
+      "integrity": "sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==",
+      "dependencies": {
+        "@jridgewell/resolve-uri": "^3.1.0",
+        "@jridgewell/sourcemap-codec": "^1.4.14"
+      }
+    },
+    "node_modules/@mongodb-js/devtools-connect": {
+      "version": "2.4.3",
+      "resolved": "https://registry.npmmirror.com/@mongodb-js/devtools-connect/-/devtools-connect-2.4.3.tgz",
+      "integrity": "sha512-JS288VVm/Mu8+kHL8ybKCpL2/AiA4CWhWun7FR3iRNH5NXbT9c6aovEc2pxjsCbmYUjzuTsRoIo9LTrNoCvNrQ==",
+      "dependencies": {
+        "lodash.merge": "^4.6.2",
+        "mongodb-connection-string-url": "^3.0.0",
+        "system-ca": "^1.0.2"
+      },
+      "optionalDependencies": {
+        "os-dns-native": "^1.2.0",
+        "resolve-mongodb-srv": "^1.1.1"
+      },
+      "peerDependencies": {
+        "@mongodb-js/oidc-plugin": "^0.3.0",
+        "mongodb": "^5.8.1 || ^6.0.0",
+        "mongodb-log-writer": "^1.2.0"
+      }
+    },
+    "node_modules/@mongodb-js/mongodb-constants": {
+      "version": "0.7.2",
+      "resolved": "https://registry.npmmirror.com/@mongodb-js/mongodb-constants/-/mongodb-constants-0.7.2.tgz",
+      "integrity": "sha512-ElaVCCQo80vQTX865RXbJoITaB6kHJmOWqv0ANO5I/S9nP5LaIEfA2QQuBmE4cHOmb3ZGfzLfyCCfwbeSBwE6w==",
+      "dependencies": {
+        "dedent": "^1.5.1",
+        "semver": "^7.5.4"
+      }
+    },
+    "node_modules/@mongodb-js/oidc-plugin": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmmirror.com/@mongodb-js/oidc-plugin/-/oidc-plugin-0.3.0.tgz",
+      "integrity": "sha512-XIriu5WYwBJWiHFpIpiXz7FkeA0+jUyGB4KBs6v0U8JGlkkoAJY9lWuzBt0surjcl/dBWvpsZYun6492fMb2kw==",
+      "dependencies": {
+        "abort-controller": "^3.0.0",
+        "express": "^4.18.2",
+        "open": "^9.1.0",
+        "openid-client": "^5.4.0"
+      },
+      "engines": {
+        "node": ">= 14.18.0"
+      }
+    },
+    "node_modules/@mongodb-js/saslprep": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmmirror.com/@mongodb-js/saslprep/-/saslprep-1.1.4.tgz",
+      "integrity": "sha512-8zJ8N1x51xo9hwPh6AWnKdLGEC5N3lDa6kms1YHmFBoRhTpJR6HG8wWk0td1MVCu9cD4YBrvjZEtd5Obw0Fbnw==",
+      "dependencies": {
+        "sparse-bitfield": "^3.0.3"
+      }
+    },
+    "node_modules/@mongosh/arg-parser": {
+      "version": "2.1.3",
+      "resolved": "https://registry.npmmirror.com/@mongosh/arg-parser/-/arg-parser-2.1.3.tgz",
+      "integrity": "sha512-EcxL04M21mAoHonYHN3l+kurOOFqdCuAU9J3Bv70O7YqVmsI7cfOaZEyGQoAQCj2FkolzfTQ73xCGvl4q0pKSg==",
+      "dependencies": {
+        "@mongosh/errors": "2.1.3",
+        "@mongosh/i18n": "2.1.3",
+        "mongodb-connection-string-url": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=14.15.1"
+      }
+    },
+    "node_modules/@mongosh/async-rewriter2": {
+      "version": "2.1.3",
+      "resolved": "https://registry.npmmirror.com/@mongosh/async-rewriter2/-/async-rewriter2-2.1.3.tgz",
+      "integrity": "sha512-ySJeI69E7E33wvpgiR1IrYi+kU7F2pkLmvpOrnwKExWdHgpw48LW2o2WrjQGfZBIGeTfgvby30+XbgA/kxj9NQ==",
+      "dependencies": {
+        "@babel/core": "^7.22.8",
+        "@babel/plugin-transform-destructuring": "^7.22.5",
+        "@babel/plugin-transform-parameters": "^7.22.5",
+        "@babel/plugin-transform-shorthand-properties": "^7.22.5",
+        "@babel/types": "^7.22.5",
+        "@types/babel__core": "^7.20.1"
+      },
+      "bin": {
+        "async-rewrite": "bin/async-rewrite.js"
+      },
+      "engines": {
+        "node": ">=14.15.1"
+      }
+    },
+    "node_modules/@mongosh/autocomplete": {
+      "version": "2.1.3",
+      "resolved": "https://registry.npmmirror.com/@mongosh/autocomplete/-/autocomplete-2.1.3.tgz",
+      "integrity": "sha512-WRvq9u70wyQeC7o6sgmZYGOTJPCi13XjnvW1E7yrw1jJke95l2QD4tb3kT/gRXUvpYfsulImwp4v2feqeaP5Yg==",
+      "dependencies": {
+        "@mongodb-js/mongodb-constants": "^0.7.1",
+        "@mongosh/shell-api": "2.1.3",
+        "semver": "^7.5.4"
+      },
+      "engines": {
+        "node": ">=14.15.1"
+      }
+    },
+    "node_modules/@mongosh/cli-repl": {
+      "version": "2.1.3",
+      "resolved": "https://registry.npmmirror.com/@mongosh/cli-repl/-/cli-repl-2.1.3.tgz",
+      "integrity": "sha512-qGKqeLFvMLGt9NIF9ukE+N0OWBlycUsXl3bSCsQ/g9Oeeke2/4Zf9OTSwLA1bSK+QXBaeQzMtKwuwrXM5jXSTA==",
+      "dependencies": {
+        "@mongosh/arg-parser": "2.1.3",
+        "@mongosh/autocomplete": "2.1.3",
+        "@mongosh/editor": "2.1.3",
+        "@mongosh/errors": "2.1.3",
+        "@mongosh/history": "2.1.3",
+        "@mongosh/i18n": "2.1.3",
+        "@mongosh/js-multiline-to-singleline": "2.1.3",
+        "@mongosh/logging": "2.1.3",
+        "@mongosh/service-provider-core": "2.1.3",
+        "@mongosh/service-provider-server": "2.1.3",
+        "@mongosh/shell-api": "2.1.3",
+        "@mongosh/shell-evaluator": "2.1.3",
+        "@mongosh/snippet-manager": "2.1.3",
+        "@mongosh/types": "2.1.3",
+        "analytics-node": "^5.1.2",
+        "ansi-escape-sequences": "^5.1.2",
+        "askcharacter": "^1.0.0",
+        "askpassword": "^1.2.4",
+        "is-recoverable-error": "^1.0.3",
+        "js-yaml": "^4.1.0",
+        "mongodb-connection-string-url": "^3.0.0",
+        "mongodb-log-writer": "^1.4.0",
+        "numeral": "^2.0.6",
+        "pretty-repl": "^4.0.0",
+        "semver": "^7.5.4",
+        "strip-ansi": "^6.0.0",
+        "text-table": "^0.2.0",
+        "yargs-parser": "^20.2.4"
+      },
+      "bin": {
+        "mongosh": "bin/mongosh.js"
+      },
+      "engines": {
+        "node": ">=16.15.0"
+      },
+      "optionalDependencies": {
+        "get-console-process-list": "^1.0.4",
+        "macos-export-certificate-and-key": "^1.1.1",
+        "mongodb-crypt-library-version": "^1.0.3",
+        "win-export-certificate-and-key": "^1.1.1"
+      }
+    },
+    "node_modules/@mongosh/editor": {
+      "version": "2.1.3",
+      "resolved": "https://registry.npmmirror.com/@mongosh/editor/-/editor-2.1.3.tgz",
+      "integrity": "sha512-Dcr0UNcONp+4rGcVkgBtAvxjOZm+qjaHWLsa+/evHoE5APep1pfDM5LL59V+xz9zQMHrrlf62F90zaSeM2Yb7Q==",
+      "dependencies": {
+        "@mongosh/js-multiline-to-singleline": "2.1.3",
+        "@mongosh/service-provider-core": "2.1.3",
+        "@mongosh/shell-api": "2.1.3",
+        "@mongosh/shell-evaluator": "2.1.3",
+        "@mongosh/types": "2.1.3",
+        "js-beautify": "^1.14.0"
+      },
+      "engines": {
+        "node": ">=16.15.0"
+      }
+    },
+    "node_modules/@mongosh/errors": {
+      "version": "2.1.3",
+      "resolved": "https://registry.npmmirror.com/@mongosh/errors/-/errors-2.1.3.tgz",
+      "integrity": "sha512-+s1upI1R0zCcMQigIohrzFjnSD+wFC7amJqRQf64bFtXF0+y6ylfp1E5mNSGEZjbzEdrbmukEhJs68SbWIEwWA==",
+      "engines": {
+        "node": ">=14.15.1"
+      }
+    },
+    "node_modules/@mongosh/history": {
+      "version": "2.1.3",
+      "resolved": "https://registry.npmmirror.com/@mongosh/history/-/history-2.1.3.tgz",
+      "integrity": "sha512-oJT6ilvwZttmIzOub9ke7VBLKXBI48le3RrftIgGQ/MfVxzFsS3i+STGB24u2B+F8oh1DIPSEPCqED3dZYvAKA==",
+      "dependencies": {
+        "mongodb-connection-string-url": "^3.0.0",
+        "mongodb-redact": "^0.2.2"
+      },
+      "engines": {
+        "node": ">=14.15.1"
+      }
+    },
+    "node_modules/@mongosh/i18n": {
+      "version": "2.1.3",
+      "resolved": "https://registry.npmmirror.com/@mongosh/i18n/-/i18n-2.1.3.tgz",
+      "integrity": "sha512-gJ7fr21al4cTie27qITk2DpoDVfow/WTLghgVnSa1t/iBH0la0kJbei20cURHaG8OKIB3a+iSdcrIkK2TGlJGA==",
+      "dependencies": {
+        "@mongosh/errors": "2.1.3",
+        "mustache": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=14.15.1"
+      }
+    },
+    "node_modules/@mongosh/js-multiline-to-singleline": {
+      "version": "2.1.3",
+      "resolved": "https://registry.npmmirror.com/@mongosh/js-multiline-to-singleline/-/js-multiline-to-singleline-2.1.3.tgz",
+      "integrity": "sha512-kNHsE28Qiosv7B7CZ/D80p4s97Myz39LVrVs73wkM2sNOYyZ2wEyVm8Pi6l3FrLgzzwHDkbb0nLNpQWSoRonvQ==",
+      "dependencies": {
+        "@babel/core": "^7.16.12",
+        "@babel/types": "^7.21.2"
+      },
+      "engines": {
+        "node": ">=14.15.1"
+      }
+    },
+    "node_modules/@mongosh/logging": {
+      "version": "2.1.3",
+      "resolved": "https://registry.npmmirror.com/@mongosh/logging/-/logging-2.1.3.tgz",
+      "integrity": "sha512-eCpWljCh7e9jNgeUiRqc4TcfQK0HUYBX/iosQDDDNvZZAdLsfuTOp2NF2LN4gwoaWp5ICgFqB0lCA0m9mbQn/g==",
+      "dependencies": {
+        "@mongodb-js/devtools-connect": "^2.4.3",
+        "@mongosh/errors": "2.1.3",
+        "@mongosh/history": "2.1.3",
+        "@mongosh/types": "2.1.3",
+        "mongodb-log-writer": "^1.4.0",
+        "mongodb-redact": "^0.2.2"
+      },
+      "engines": {
+        "node": ">=14.15.1"
+      }
+    },
+    "node_modules/@mongosh/service-provider-core": {
+      "version": "2.1.3",
+      "resolved": "https://registry.npmmirror.com/@mongosh/service-provider-core/-/service-provider-core-2.1.3.tgz",
+      "integrity": "sha512-dEj6ikteC2QGxuaY6/NFotriVCRVTaY/PcFSqCL/ssg26KTlpXqd2NqNh7UPHzlwEO1aM6Bhw/PfS3uP9l0tBg==",
+      "dependencies": {
+        "@aws-sdk/credential-providers": "^3.347.1",
+        "@mongosh/errors": "2.1.3",
+        "bson": "^6.2.0",
+        "mongodb": "^6.3.0",
+        "mongodb-build-info": "^1.7.1"
+      },
+      "engines": {
+        "node": ">=14.15.1"
+      },
+      "optionalDependencies": {
+        "mongodb-client-encryption": "^6.0.0"
+      }
+    },
+    "node_modules/@mongosh/service-provider-server": {
+      "version": "2.1.3",
+      "resolved": "https://registry.npmmirror.com/@mongosh/service-provider-server/-/service-provider-server-2.1.3.tgz",
+      "integrity": "sha512-bN1CGAlQnLVb2JCWIm4TNt2+z5/4YWoGbS5AKY8uuisM49VWl21BM74eDTbym75tXbwu/2d5vyf20cHJeAVMGA==",
+      "dependencies": {
+        "@mongodb-js/devtools-connect": "^2.4.3",
+        "@mongodb-js/oidc-plugin": "^0.3.0",
+        "@mongosh/errors": "2.1.3",
+        "@mongosh/service-provider-core": "2.1.3",
+        "@mongosh/types": "2.1.3",
+        "@types/sinon-chai": "^3.2.4",
+        "aws4": "^1.11.0",
+        "mongodb": "^6.3.0",
+        "mongodb-connection-string-url": "^3.0.0",
+        "socks": "^2.7.1"
+      },
+      "engines": {
+        "node": ">=14.15.1"
+      },
+      "optionalDependencies": {
+        "kerberos": "^2.1.0",
+        "mongodb-client-encryption": "^6.0.0"
+      }
+    },
+    "node_modules/@mongosh/shell-api": {
+      "version": "2.1.3",
+      "resolved": "https://registry.npmmirror.com/@mongosh/shell-api/-/shell-api-2.1.3.tgz",
+      "integrity": "sha512-zq+qM+6Xfx8GFF+wM8saGzRcwxRqKYGPolKO0gulEhenOLlNiOeotfe7khKeKTahW28QzCjC36gli5G2cV7tgQ==",
+      "dependencies": {
+        "@mongosh/arg-parser": "2.1.3",
+        "@mongosh/errors": "2.1.3",
+        "@mongosh/history": "2.1.3",
+        "@mongosh/i18n": "2.1.3",
+        "@mongosh/service-provider-core": "2.1.3",
+        "mongodb-redact": "^0.2.2"
+      },
+      "engines": {
+        "node": ">=14.15.1"
+      }
+    },
+    "node_modules/@mongosh/shell-evaluator": {
+      "version": "2.1.3",
+      "resolved": "https://registry.npmmirror.com/@mongosh/shell-evaluator/-/shell-evaluator-2.1.3.tgz",
+      "integrity": "sha512-+H+VrUmXtiF0aBLZZ2hAUyai5Cgm1FogyUDg0UE1LR7sboFTnEaHI7ReoLxabK/PoV56ZXjxByUgWAGVlTvQfA==",
+      "dependencies": {
+        "@mongosh/async-rewriter2": "2.1.3",
+        "@mongosh/history": "2.1.3",
+        "@mongosh/shell-api": "2.1.3"
+      },
+      "engines": {
+        "node": ">=14.15.1"
+      }
+    },
+    "node_modules/@mongosh/snippet-manager": {
+      "version": "2.1.3",
+      "resolved": "https://registry.npmmirror.com/@mongosh/snippet-manager/-/snippet-manager-2.1.3.tgz",
+      "integrity": "sha512-3OFSWP4A29gMKwlzOLHrwEvJRH2i2EFPTagi2edzZGnHnj+56kqOxBW1M9nPtFVeoWrb0j+UcjXZ7q5IDYuL1A==",
+      "dependencies": {
+        "@mongosh/errors": "2.1.3",
+        "@mongosh/shell-api": "2.1.3",
+        "@mongosh/types": "2.1.3",
+        "bson": "^6.2.0",
+        "cross-spawn": "^7.0.3",
+        "escape-string-regexp": "^4.0.0",
+        "joi": "^17.4.0",
+        "node-fetch": "^2.6.1",
+        "tar": "^6.1.15"
+      },
+      "engines": {
+        "node": ">=14.15.1"
+      }
+    },
+    "node_modules/@mongosh/types": {
+      "version": "2.1.3",
+      "resolved": "https://registry.npmmirror.com/@mongosh/types/-/types-2.1.3.tgz",
+      "integrity": "sha512-2E3lkUp5DM52KIZSSkgtxPQbb7zH8w3jvE1gvX7lx2EvrMcHVII52RL91k9JHFK/wL+dcqX83Etl9nLORWAjog==",
+      "dependencies": {
+        "@mongodb-js/devtools-connect": "^2.4.3"
+      },
+      "engines": {
+        "node": ">=14.15.1"
+      }
+    },
+    "node_modules/@one-ini/wasm": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmmirror.com/@one-ini/wasm/-/wasm-0.1.1.tgz",
+      "integrity": "sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw=="
+    },
+    "node_modules/@pkgjs/parseargs": {
+      "version": "0.11.0",
+      "resolved": "https://registry.npmmirror.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
+      "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
+      "optional": true,
+      "engines": {
+        "node": ">=14"
+      }
+    },
+    "node_modules/@segment/loosely-validate-event": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/@segment/loosely-validate-event/-/loosely-validate-event-2.0.0.tgz",
+      "integrity": "sha512-ZMCSfztDBqwotkl848ODgVcAmN4OItEWDCkshcKz0/W6gGSQayuuCtWV/MlodFivAZD793d6UgANd6wCXUfrIw==",
+      "dependencies": {
+        "component-type": "^1.2.1",
+        "join-component": "^1.1.0"
+      }
+    },
+    "node_modules/@sideway/address": {
+      "version": "4.1.5",
+      "resolved": "https://registry.npmmirror.com/@sideway/address/-/address-4.1.5.tgz",
+      "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==",
+      "dependencies": {
+        "@hapi/hoek": "^9.0.0"
+      }
+    },
+    "node_modules/@sideway/formula": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmmirror.com/@sideway/formula/-/formula-3.0.1.tgz",
+      "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg=="
+    },
+    "node_modules/@sideway/pinpoint": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz",
+      "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ=="
+    },
+    "node_modules/@smithy/abort-controller": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmmirror.com/@smithy/abort-controller/-/abort-controller-2.1.1.tgz",
+      "integrity": "sha512-1+qdrUqLhaALYL0iOcN43EP6yAXXQ2wWZ6taf4S2pNGowmOc5gx+iMQv+E42JizNJjB0+gEadOXeV1Bf7JWL1Q==",
+      "dependencies": {
+        "@smithy/types": "^2.9.1",
+        "tslib": "^2.5.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@smithy/config-resolver": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmmirror.com/@smithy/config-resolver/-/config-resolver-2.1.1.tgz",
+      "integrity": "sha512-lxfLDpZm+AWAHPFZps5JfDoO9Ux1764fOgvRUBpHIO8HWHcSN1dkgsago1qLRVgm1BZ8RCm8cgv99QvtaOWIhw==",
+      "dependencies": {
+        "@smithy/node-config-provider": "^2.2.1",
+        "@smithy/types": "^2.9.1",
+        "@smithy/util-config-provider": "^2.2.1",
+        "@smithy/util-middleware": "^2.1.1",
+        "tslib": "^2.5.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@smithy/core": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmmirror.com/@smithy/core/-/core-1.3.1.tgz",
+      "integrity": "sha512-tf+NIu9FkOh312b6M9G4D68is4Xr7qptzaZGZUREELF8ysE1yLKphqt7nsomjKZVwW7WE5pDDex9idowNGRQ/Q==",
+      "dependencies": {
+        "@smithy/middleware-endpoint": "^2.4.1",
+        "@smithy/middleware-retry": "^2.1.1",
+        "@smithy/middleware-serde": "^2.1.1",
+        "@smithy/protocol-http": "^3.1.1",
+        "@smithy/smithy-client": "^2.3.1",
+        "@smithy/types": "^2.9.1",
+        "@smithy/util-middleware": "^2.1.1",
+        "tslib": "^2.5.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@smithy/credential-provider-imds": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmmirror.com/@smithy/credential-provider-imds/-/credential-provider-imds-2.2.1.tgz",
+      "integrity": "sha512-7XHjZUxmZYnONheVQL7j5zvZXga+EWNgwEAP6OPZTi7l8J4JTeNh9aIOfE5fKHZ/ee2IeNOh54ZrSna+Vc6TFA==",
+      "dependencies": {
+        "@smithy/node-config-provider": "^2.2.1",
+        "@smithy/property-provider": "^2.1.1",
+        "@smithy/types": "^2.9.1",
+        "@smithy/url-parser": "^2.1.1",
+        "tslib": "^2.5.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@smithy/eventstream-codec": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmmirror.com/@smithy/eventstream-codec/-/eventstream-codec-2.1.1.tgz",
+      "integrity": "sha512-E8KYBxBIuU4c+zrpR22VsVrOPoEDzk35bQR3E+xm4k6Pa6JqzkDOdMyf9Atac5GPNKHJBdVaQ4JtjdWX2rl/nw==",
+      "dependencies": {
+        "@aws-crypto/crc32": "3.0.0",
+        "@smithy/types": "^2.9.1",
+        "@smithy/util-hex-encoding": "^2.1.1",
+        "tslib": "^2.5.0"
+      }
+    },
+    "node_modules/@smithy/fetch-http-handler": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmmirror.com/@smithy/fetch-http-handler/-/fetch-http-handler-2.4.1.tgz",
+      "integrity": "sha512-VYGLinPsFqH68lxfRhjQaSkjXM7JysUOJDTNjHBuN/ykyRb2f1gyavN9+VhhPTWCy32L4yZ2fdhpCs/nStEicg==",
+      "dependencies": {
+        "@smithy/protocol-http": "^3.1.1",
+        "@smithy/querystring-builder": "^2.1.1",
+        "@smithy/types": "^2.9.1",
+        "@smithy/util-base64": "^2.1.1",
+        "tslib": "^2.5.0"
+      }
+    },
+    "node_modules/@smithy/hash-node": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmmirror.com/@smithy/hash-node/-/hash-node-2.1.1.tgz",
+      "integrity": "sha512-Qhoq0N8f2OtCnvUpCf+g1vSyhYQrZjhSwvJ9qvR8BUGOtTXiyv2x1OD2e6jVGmlpC4E4ax1USHoyGfV9JFsACg==",
+      "dependencies": {
+        "@smithy/types": "^2.9.1",
+        "@smithy/util-buffer-from": "^2.1.1",
+        "@smithy/util-utf8": "^2.1.1",
+        "tslib": "^2.5.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@smithy/invalid-dependency": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmmirror.com/@smithy/invalid-dependency/-/invalid-dependency-2.1.1.tgz",
+      "integrity": "sha512-7WTgnKw+VPg8fxu2v9AlNOQ5yaz6RA54zOVB4f6vQuR0xFKd+RzlCpt0WidYTsye7F+FYDIaS/RnJW4pxjNInw==",
+      "dependencies": {
+        "@smithy/types": "^2.9.1",
+        "tslib": "^2.5.0"
+      }
+    },
+    "node_modules/@smithy/is-array-buffer": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmmirror.com/@smithy/is-array-buffer/-/is-array-buffer-2.1.1.tgz",
+      "integrity": "sha512-xozSQrcUinPpNPNPds4S7z/FakDTh1MZWtRP/2vQtYB/u3HYrX2UXuZs+VhaKBd6Vc7g2XPr2ZtwGBNDN6fNKQ==",
+      "dependencies": {
+        "tslib": "^2.5.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@smithy/middleware-content-length": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmmirror.com/@smithy/middleware-content-length/-/middleware-content-length-2.1.1.tgz",
+      "integrity": "sha512-rSr9ezUl9qMgiJR0UVtVOGEZElMdGFyl8FzWEF5iEKTlcWxGr2wTqGfDwtH3LAB7h+FPkxqv4ZU4cpuCN9Kf/g==",
+      "dependencies": {
+        "@smithy/protocol-http": "^3.1.1",
+        "@smithy/types": "^2.9.1",
+        "tslib": "^2.5.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@smithy/middleware-endpoint": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmmirror.com/@smithy/middleware-endpoint/-/middleware-endpoint-2.4.1.tgz",
+      "integrity": "sha512-XPZTb1E2Oav60Ven3n2PFx+rX9EDsU/jSTA8VDamt7FXks67ekjPY/XrmmPDQaFJOTUHJNKjd8+kZxVO5Ael4Q==",
+      "dependencies": {
+        "@smithy/middleware-serde": "^2.1.1",
+        "@smithy/node-config-provider": "^2.2.1",
+        "@smithy/shared-ini-file-loader": "^2.3.1",
+        "@smithy/types": "^2.9.1",
+        "@smithy/url-parser": "^2.1.1",
+        "@smithy/util-middleware": "^2.1.1",
+        "tslib": "^2.5.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@smithy/middleware-retry": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmmirror.com/@smithy/middleware-retry/-/middleware-retry-2.1.1.tgz",
+      "integrity": "sha512-eMIHOBTXro6JZ+WWzZWd/8fS8ht5nS5KDQjzhNMHNRcG5FkNTqcKpYhw7TETMYzbLfhO5FYghHy1vqDWM4FLDA==",
+      "dependencies": {
+        "@smithy/node-config-provider": "^2.2.1",
+        "@smithy/protocol-http": "^3.1.1",
+        "@smithy/service-error-classification": "^2.1.1",
+        "@smithy/smithy-client": "^2.3.1",
+        "@smithy/types": "^2.9.1",
+        "@smithy/util-middleware": "^2.1.1",
+        "@smithy/util-retry": "^2.1.1",
+        "tslib": "^2.5.0",
+        "uuid": "^8.3.2"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@smithy/middleware-serde": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmmirror.com/@smithy/middleware-serde/-/middleware-serde-2.1.1.tgz",
+      "integrity": "sha512-D8Gq0aQBeE1pxf3cjWVkRr2W54t+cdM2zx78tNrVhqrDykRA7asq8yVJij1u5NDtKzKqzBSPYh7iW0svUKg76g==",
+      "dependencies": {
+        "@smithy/types": "^2.9.1",
+        "tslib": "^2.5.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@smithy/middleware-stack": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmmirror.com/@smithy/middleware-stack/-/middleware-stack-2.1.1.tgz",
+      "integrity": "sha512-KPJhRlhsl8CjgGXK/DoDcrFGfAqoqvuwlbxy+uOO4g2Azn1dhH+GVfC3RAp+6PoL5PWPb+vt6Z23FP+Mr6qeCw==",
+      "dependencies": {
+        "@smithy/types": "^2.9.1",
+        "tslib": "^2.5.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@smithy/node-config-provider": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmmirror.com/@smithy/node-config-provider/-/node-config-provider-2.2.1.tgz",
+      "integrity": "sha512-epzK3x1xNxA9oJgHQ5nz+2j6DsJKdHfieb+YgJ7ATWxzNcB7Hc+Uya2TUck5MicOPhDV8HZImND7ZOecVr+OWg==",
+      "dependencies": {
+        "@smithy/property-provider": "^2.1.1",
+        "@smithy/shared-ini-file-loader": "^2.3.1",
+        "@smithy/types": "^2.9.1",
+        "tslib": "^2.5.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@smithy/node-http-handler": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmmirror.com/@smithy/node-http-handler/-/node-http-handler-2.3.1.tgz",
+      "integrity": "sha512-gLA8qK2nL9J0Rk/WEZSvgin4AppvuCYRYg61dcUo/uKxvMZsMInL5I5ZdJTogOvdfVug3N2dgI5ffcUfS4S9PA==",
+      "dependencies": {
+        "@smithy/abort-controller": "^2.1.1",
+        "@smithy/protocol-http": "^3.1.1",
+        "@smithy/querystring-builder": "^2.1.1",
+        "@smithy/types": "^2.9.1",
+        "tslib": "^2.5.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@smithy/property-provider": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmmirror.com/@smithy/property-provider/-/property-provider-2.1.1.tgz",
+      "integrity": "sha512-FX7JhhD/o5HwSwg6GLK9zxrMUrGnb3PzNBrcthqHKBc3dH0UfgEAU24xnJ8F0uow5mj17UeBEOI6o3CF2k7Mhw==",
+      "dependencies": {
+        "@smithy/types": "^2.9.1",
+        "tslib": "^2.5.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@smithy/protocol-http": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmmirror.com/@smithy/protocol-http/-/protocol-http-3.1.1.tgz",
+      "integrity": "sha512-6ZRTSsaXuSL9++qEwH851hJjUA0OgXdQFCs+VDw4tGH256jQ3TjYY/i34N4vd24RV3nrjNsgd1yhb57uMoKbzQ==",
+      "dependencies": {
+        "@smithy/types": "^2.9.1",
+        "tslib": "^2.5.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@smithy/querystring-builder": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmmirror.com/@smithy/querystring-builder/-/querystring-builder-2.1.1.tgz",
+      "integrity": "sha512-C/ko/CeEa8jdYE4gt6nHO5XDrlSJ3vdCG0ZAc6nD5ZIE7LBp0jCx4qoqp7eoutBu7VrGMXERSRoPqwi1WjCPbg==",
+      "dependencies": {
+        "@smithy/types": "^2.9.1",
+        "@smithy/util-uri-escape": "^2.1.1",
+        "tslib": "^2.5.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@smithy/querystring-parser": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmmirror.com/@smithy/querystring-parser/-/querystring-parser-2.1.1.tgz",
+      "integrity": "sha512-H4+6jKGVhG1W4CIxfBaSsbm98lOO88tpDWmZLgkJpt8Zkk/+uG0FmmqMuCAc3HNM2ZDV+JbErxr0l5BcuIf/XQ==",
+      "dependencies": {
+        "@smithy/types": "^2.9.1",
+        "tslib": "^2.5.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@smithy/service-error-classification": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmmirror.com/@smithy/service-error-classification/-/service-error-classification-2.1.1.tgz",
+      "integrity": "sha512-txEdZxPUgM1PwGvDvHzqhXisrc5LlRWYCf2yyHfvITWioAKat7srQvpjMAvgzf0t6t7j8yHrryXU9xt7RZqFpw==",
+      "dependencies": {
+        "@smithy/types": "^2.9.1"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@smithy/shared-ini-file-loader": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmmirror.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.3.1.tgz",
+      "integrity": "sha512-2E2kh24igmIznHLB6H05Na4OgIEilRu0oQpYXo3LCNRrawHAcfDKq9004zJs+sAMt2X5AbY87CUCJ7IpqpSgdw==",
+      "dependencies": {
+        "@smithy/types": "^2.9.1",
+        "tslib": "^2.5.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@smithy/signature-v4": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmmirror.com/@smithy/signature-v4/-/signature-v4-2.1.1.tgz",
+      "integrity": "sha512-Hb7xub0NHuvvQD3YwDSdanBmYukoEkhqBjqoxo+bSdC0ryV9cTfgmNjuAQhTPYB6yeU7hTR+sPRiFMlxqv6kmg==",
+      "dependencies": {
+        "@smithy/eventstream-codec": "^2.1.1",
+        "@smithy/is-array-buffer": "^2.1.1",
+        "@smithy/types": "^2.9.1",
+        "@smithy/util-hex-encoding": "^2.1.1",
+        "@smithy/util-middleware": "^2.1.1",
+        "@smithy/util-uri-escape": "^2.1.1",
+        "@smithy/util-utf8": "^2.1.1",
+        "tslib": "^2.5.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@smithy/smithy-client": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmmirror.com/@smithy/smithy-client/-/smithy-client-2.3.1.tgz",
+      "integrity": "sha512-YsTdU8xVD64r2pLEwmltrNvZV6XIAC50LN6ivDopdt+YiF/jGH6PY9zUOu0CXD/d8GMB8gbhnpPsdrjAXHS9QA==",
+      "dependencies": {
+        "@smithy/middleware-endpoint": "^2.4.1",
+        "@smithy/middleware-stack": "^2.1.1",
+        "@smithy/protocol-http": "^3.1.1",
+        "@smithy/types": "^2.9.1",
+        "@smithy/util-stream": "^2.1.1",
+        "tslib": "^2.5.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@smithy/types": {
+      "version": "2.9.1",
+      "resolved": "https://registry.npmmirror.com/@smithy/types/-/types-2.9.1.tgz",
+      "integrity": "sha512-vjXlKNXyprDYDuJ7UW5iobdmyDm6g8dDG+BFUncAg/3XJaN45Gy5RWWWUVgrzIK7S4R1KWgIX5LeJcfvSI24bw==",
+      "dependencies": {
+        "tslib": "^2.5.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@smithy/url-parser": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmmirror.com/@smithy/url-parser/-/url-parser-2.1.1.tgz",
+      "integrity": "sha512-qC9Bv8f/vvFIEkHsiNrUKYNl8uKQnn4BdhXl7VzQRP774AwIjiSMMwkbT+L7Fk8W8rzYVifzJNYxv1HwvfBo3Q==",
+      "dependencies": {
+        "@smithy/querystring-parser": "^2.1.1",
+        "@smithy/types": "^2.9.1",
+        "tslib": "^2.5.0"
+      }
+    },
+    "node_modules/@smithy/util-base64": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmmirror.com/@smithy/util-base64/-/util-base64-2.1.1.tgz",
+      "integrity": "sha512-UfHVpY7qfF/MrgndI5PexSKVTxSZIdz9InghTFa49QOvuu9I52zLPLUHXvHpNuMb1iD2vmc6R+zbv/bdMipR/g==",
+      "dependencies": {
+        "@smithy/util-buffer-from": "^2.1.1",
+        "tslib": "^2.5.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@smithy/util-body-length-browser": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmmirror.com/@smithy/util-body-length-browser/-/util-body-length-browser-2.1.1.tgz",
+      "integrity": "sha512-ekOGBLvs1VS2d1zM2ER4JEeBWAvIOUKeaFch29UjjJsxmZ/f0L3K3x0dEETgh3Q9bkZNHgT+rkdl/J/VUqSRag==",
+      "dependencies": {
+        "tslib": "^2.5.0"
+      }
+    },
+    "node_modules/@smithy/util-body-length-node": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmmirror.com/@smithy/util-body-length-node/-/util-body-length-node-2.2.1.tgz",
+      "integrity": "sha512-/ggJG+ta3IDtpNVq4ktmEUtOkH1LW64RHB5B0hcr5ZaWBmo96UX2cIOVbjCqqDickTXqBWZ4ZO0APuaPrD7Abg==",
+      "dependencies": {
+        "tslib": "^2.5.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@smithy/util-buffer-from": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmmirror.com/@smithy/util-buffer-from/-/util-buffer-from-2.1.1.tgz",
+      "integrity": "sha512-clhNjbyfqIv9Md2Mg6FffGVrJxw7bgK7s3Iax36xnfVj6cg0fUG7I4RH0XgXJF8bxi+saY5HR21g2UPKSxVCXg==",
+      "dependencies": {
+        "@smithy/is-array-buffer": "^2.1.1",
+        "tslib": "^2.5.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@smithy/util-config-provider": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmmirror.com/@smithy/util-config-provider/-/util-config-provider-2.2.1.tgz",
+      "integrity": "sha512-50VL/tx9oYYcjJn/qKqNy7sCtpD0+s8XEBamIFo4mFFTclKMNp+rsnymD796uybjiIquB7VCB/DeafduL0y2kw==",
+      "dependencies": {
+        "tslib": "^2.5.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@smithy/util-defaults-mode-browser": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmmirror.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.1.1.tgz",
+      "integrity": "sha512-lqLz/9aWRO6mosnXkArtRuQqqZBhNpgI65YDpww4rVQBuUT7qzKbDLG5AmnQTCiU4rOquaZO/Kt0J7q9Uic7MA==",
+      "dependencies": {
+        "@smithy/property-provider": "^2.1.1",
+        "@smithy/smithy-client": "^2.3.1",
+        "@smithy/types": "^2.9.1",
+        "bowser": "^2.11.0",
+        "tslib": "^2.5.0"
+      },
+      "engines": {
+        "node": ">= 10.0.0"
+      }
+    },
+    "node_modules/@smithy/util-defaults-mode-node": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmmirror.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.1.1.tgz",
+      "integrity": "sha512-tYVrc+w+jSBfBd267KDnvSGOh4NMz+wVH7v4CClDbkdPfnjvImBZsOURncT5jsFwR9KCuDyPoSZq4Pa6+eCUrA==",
+      "dependencies": {
+        "@smithy/config-resolver": "^2.1.1",
+        "@smithy/credential-provider-imds": "^2.2.1",
+        "@smithy/node-config-provider": "^2.2.1",
+        "@smithy/property-provider": "^2.1.1",
+        "@smithy/smithy-client": "^2.3.1",
+        "@smithy/types": "^2.9.1",
+        "tslib": "^2.5.0"
+      },
+      "engines": {
+        "node": ">= 10.0.0"
+      }
+    },
+    "node_modules/@smithy/util-endpoints": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmmirror.com/@smithy/util-endpoints/-/util-endpoints-1.1.1.tgz",
+      "integrity": "sha512-sI4d9rjoaekSGEtq3xSb2nMjHMx8QXcz2cexnVyRWsy4yQ9z3kbDpX+7fN0jnbdOp0b3KSTZJZ2Yb92JWSanLw==",
+      "dependencies": {
+        "@smithy/node-config-provider": "^2.2.1",
+        "@smithy/types": "^2.9.1",
+        "tslib": "^2.5.0"
+      },
+      "engines": {
+        "node": ">= 14.0.0"
+      }
+    },
+    "node_modules/@smithy/util-hex-encoding": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmmirror.com/@smithy/util-hex-encoding/-/util-hex-encoding-2.1.1.tgz",
+      "integrity": "sha512-3UNdP2pkYUUBGEXzQI9ODTDK+Tcu1BlCyDBaRHwyxhA+8xLP8agEKQq4MGmpjqb4VQAjq9TwlCQX0kP6XDKYLg==",
+      "dependencies": {
+        "tslib": "^2.5.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@smithy/util-middleware": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmmirror.com/@smithy/util-middleware/-/util-middleware-2.1.1.tgz",
+      "integrity": "sha512-mKNrk8oz5zqkNcbcgAAepeJbmfUW6ogrT2Z2gDbIUzVzNAHKJQTYmH9jcy0jbWb+m7ubrvXKb6uMjkSgAqqsFA==",
+      "dependencies": {
+        "@smithy/types": "^2.9.1",
+        "tslib": "^2.5.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@smithy/util-retry": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmmirror.com/@smithy/util-retry/-/util-retry-2.1.1.tgz",
+      "integrity": "sha512-Mg+xxWPTeSPrthpC5WAamJ6PW4Kbo01Fm7lWM1jmGRvmrRdsd3192Gz2fBXAMURyXpaNxyZf6Hr/nQ4q70oVEA==",
+      "dependencies": {
+        "@smithy/service-error-classification": "^2.1.1",
+        "@smithy/types": "^2.9.1",
+        "tslib": "^2.5.0"
+      },
+      "engines": {
+        "node": ">= 14.0.0"
+      }
+    },
+    "node_modules/@smithy/util-stream": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmmirror.com/@smithy/util-stream/-/util-stream-2.1.1.tgz",
+      "integrity": "sha512-J7SMIpUYvU4DQN55KmBtvaMc7NM3CZ2iWICdcgaovtLzseVhAqFRYqloT3mh0esrFw+3VEK6nQFteFsTqZSECQ==",
+      "dependencies": {
+        "@smithy/fetch-http-handler": "^2.4.1",
+        "@smithy/node-http-handler": "^2.3.1",
+        "@smithy/types": "^2.9.1",
+        "@smithy/util-base64": "^2.1.1",
+        "@smithy/util-buffer-from": "^2.1.1",
+        "@smithy/util-hex-encoding": "^2.1.1",
+        "@smithy/util-utf8": "^2.1.1",
+        "tslib": "^2.5.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@smithy/util-uri-escape": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmmirror.com/@smithy/util-uri-escape/-/util-uri-escape-2.1.1.tgz",
+      "integrity": "sha512-saVzI1h6iRBUVSqtnlOnc9ssU09ypo7n+shdQ8hBTZno/9rZ3AuRYvoHInV57VF7Qn7B+pFJG7qTzFiHxWlWBw==",
+      "dependencies": {
+        "tslib": "^2.5.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@smithy/util-utf8": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmmirror.com/@smithy/util-utf8/-/util-utf8-2.1.1.tgz",
+      "integrity": "sha512-BqTpzYEcUMDwAKr7/mVRUtHDhs6ZoXDi9NypMvMfOr/+u1NW7JgqodPDECiiLboEm6bobcPcECxzjtQh865e9A==",
+      "dependencies": {
+        "@smithy/util-buffer-from": "^2.1.1",
+        "tslib": "^2.5.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@types/babel__core": {
+      "version": "7.20.5",
+      "resolved": "https://registry.npmmirror.com/@types/babel__core/-/babel__core-7.20.5.tgz",
+      "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==",
+      "dependencies": {
+        "@babel/parser": "^7.20.7",
+        "@babel/types": "^7.20.7",
+        "@types/babel__generator": "*",
+        "@types/babel__template": "*",
+        "@types/babel__traverse": "*"
+      }
+    },
+    "node_modules/@types/babel__generator": {
+      "version": "7.6.8",
+      "resolved": "https://registry.npmmirror.com/@types/babel__generator/-/babel__generator-7.6.8.tgz",
+      "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==",
+      "dependencies": {
+        "@babel/types": "^7.0.0"
+      }
+    },
+    "node_modules/@types/babel__template": {
+      "version": "7.4.4",
+      "resolved": "https://registry.npmmirror.com/@types/babel__template/-/babel__template-7.4.4.tgz",
+      "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==",
+      "dependencies": {
+        "@babel/parser": "^7.1.0",
+        "@babel/types": "^7.0.0"
+      }
+    },
+    "node_modules/@types/babel__traverse": {
+      "version": "7.20.5",
+      "resolved": "https://registry.npmmirror.com/@types/babel__traverse/-/babel__traverse-7.20.5.tgz",
+      "integrity": "sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==",
+      "dependencies": {
+        "@babel/types": "^7.20.7"
+      }
+    },
+    "node_modules/@types/chai": {
+      "version": "4.3.11",
+      "resolved": "https://registry.npmmirror.com/@types/chai/-/chai-4.3.11.tgz",
+      "integrity": "sha512-qQR1dr2rGIHYlJulmr8Ioq3De0Le9E4MJ5AiaeAETJJpndT1uUNHsGFK3L/UIu+rbkQSdj8J/w2bCsBZc/Y5fQ=="
+    },
+    "node_modules/@types/sinon": {
+      "version": "17.0.3",
+      "resolved": "https://registry.npmmirror.com/@types/sinon/-/sinon-17.0.3.tgz",
+      "integrity": "sha512-j3uovdn8ewky9kRBG19bOwaZbexJu/XjtkHyjvUgt4xfPFz18dcORIMqnYh66Fx3Powhcr85NT5+er3+oViapw==",
+      "dependencies": {
+        "@types/sinonjs__fake-timers": "*"
+      }
+    },
+    "node_modules/@types/sinon-chai": {
+      "version": "3.2.12",
+      "resolved": "https://registry.npmmirror.com/@types/sinon-chai/-/sinon-chai-3.2.12.tgz",
+      "integrity": "sha512-9y0Gflk3b0+NhQZ/oxGtaAJDvRywCa5sIyaVnounqLvmf93yBF4EgIRspePtkMs3Tr844nCclYMlcCNmLCvjuQ==",
+      "dependencies": {
+        "@types/chai": "*",
+        "@types/sinon": "*"
+      }
+    },
+    "node_modules/@types/sinonjs__fake-timers": {
+      "version": "8.1.5",
+      "resolved": "https://registry.npmmirror.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.5.tgz",
+      "integrity": "sha512-mQkU2jY8jJEF7YHjHvsQO8+3ughTL1mcnn96igfhONmR+fUPSKIkefQYpSe8bsly2Ep7oQbn/6VG5/9/0qcArQ=="
+    },
+    "node_modules/@types/webidl-conversions": {
+      "version": "7.0.3",
+      "resolved": "https://registry.npmmirror.com/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz",
+      "integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA=="
+    },
+    "node_modules/@types/whatwg-url": {
+      "version": "11.0.4",
+      "resolved": "https://registry.npmmirror.com/@types/whatwg-url/-/whatwg-url-11.0.4.tgz",
+      "integrity": "sha512-lXCmTWSHJvf0TRSO58nm978b8HJ/EdsSsEKLd3ODHFjo+3VGAyyTp4v50nWvwtzBxSMQrVOK7tcuN0zGPLICMw==",
+      "dependencies": {
+        "@types/webidl-conversions": "*"
+      }
+    },
+    "node_modules/abbrev": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/abbrev/-/abbrev-2.0.0.tgz",
+      "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==",
+      "engines": {
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+      }
+    },
+    "node_modules/abort-controller": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/abort-controller/-/abort-controller-3.0.0.tgz",
+      "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
+      "dependencies": {
+        "event-target-shim": "^5.0.0"
+      },
+      "engines": {
+        "node": ">=6.5"
+      }
+    },
+    "node_modules/accepts": {
+      "version": "1.3.8",
+      "resolved": "https://registry.npmmirror.com/accepts/-/accepts-1.3.8.tgz",
+      "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
+      "dependencies": {
+        "mime-types": "~2.1.34",
+        "negotiator": "0.6.3"
+      },
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/acorn": {
+      "version": "8.11.3",
+      "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.11.3.tgz",
+      "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==",
+      "bin": {
+        "acorn": "bin/acorn"
+      },
+      "engines": {
+        "node": ">=0.4.0"
+      }
+    },
+    "node_modules/acorn-class-fields": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/acorn-class-fields/-/acorn-class-fields-1.0.0.tgz",
+      "integrity": "sha512-l+1FokF34AeCXGBHkrXFmml9nOIRI+2yBnBpO5MaVAaTIJ96irWLtcCxX+7hAp6USHFCe+iyyBB4ZhxV807wmA==",
+      "dependencies": {
+        "acorn-private-class-elements": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=4.8.2"
+      },
+      "peerDependencies": {
+        "acorn": "^6 || ^7 || ^8"
+      }
+    },
+    "node_modules/acorn-numeric-separator": {
+      "version": "0.3.6",
+      "resolved": "https://registry.npmmirror.com/acorn-numeric-separator/-/acorn-numeric-separator-0.3.6.tgz",
+      "integrity": "sha512-jUr5esgChu4k7VzesH/Nww3EysuyGJJcTEEiXqILUFKpO96PNyEXmK21M6nE0TSqGA1PeEg1MzgqJaoFsn9JMw==",
+      "deprecated": "acorn>=7.4 supports numeric separators",
+      "engines": {
+        "node": ">=4.8.2"
+      },
+      "peerDependencies": {
+        "acorn": "^6 || ^7 || ^8"
+      }
+    },
+    "node_modules/acorn-private-class-elements": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/acorn-private-class-elements/-/acorn-private-class-elements-1.0.0.tgz",
+      "integrity": "sha512-zYNcZtxKgVCg1brS39BEou86mIao1EV7eeREG+6WMwKbuYTeivRRs6S2XdWnboRde6G9wKh2w+WBydEyJsJ6mg==",
+      "engines": {
+        "node": ">=4.8.2"
+      },
+      "peerDependencies": {
+        "acorn": "^6.1.0 || ^7 || ^8"
+      }
+    },
+    "node_modules/acorn-private-methods": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/acorn-private-methods/-/acorn-private-methods-1.0.0.tgz",
+      "integrity": "sha512-Jou2L3nfwfPpFdmmHObI3yUpVPM1bPohTUAZCyVDw5Efyn9LSS6E36neRLCRfIr8QjskAfdxRdABOrvP4c/gwQ==",
+      "dependencies": {
+        "acorn-private-class-elements": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=4.8.2"
+      },
+      "peerDependencies": {
+        "acorn": "^6 || ^7 || ^8"
+      }
+    },
+    "node_modules/acorn-static-class-features": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/acorn-static-class-features/-/acorn-static-class-features-1.0.0.tgz",
+      "integrity": "sha512-XZJECjbmMOKvMHiNzbiPXuXpLAJfN3dAKtfIYbk1eHiWdsutlek+gS7ND4B8yJ3oqvHo1NxfafnezVmq7NXK0A==",
+      "dependencies": {
+        "acorn-private-class-elements": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=4.8.2"
+      },
+      "peerDependencies": {
+        "acorn": "^6.1.0 || ^7 || ^8"
+      }
+    },
+    "node_modules/analytics-node": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmmirror.com/analytics-node/-/analytics-node-5.1.2.tgz",
+      "integrity": "sha512-WZ8gkXtLuqD2Q2xEOr/2/LJiR0AnhWHfXZhfPnMZpB7vEwCsh3HapYAUmA1cPj1abrhAqBX7POWuWo/1wUu/Fw==",
+      "dependencies": {
+        "@segment/loosely-validate-event": "^2.0.0",
+        "axios": "^0.21.4",
+        "axios-retry": "3.2.0",
+        "lodash.isstring": "^4.0.1",
+        "md5": "^2.2.1",
+        "ms": "^2.0.0",
+        "remove-trailing-slash": "^0.1.0",
+        "uuid": "^8.3.2"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/ansi-escape-sequences": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmmirror.com/ansi-escape-sequences/-/ansi-escape-sequences-5.1.2.tgz",
+      "integrity": "sha512-JcpoVp1W1bl1Qn4cVuiXEhD6+dyXKSOgCn2zlzE8inYgCJCBy1aPnUhlz6I4DFum8D4ovb9Qi/iAjUcGvG2lqw==",
+      "dependencies": {
+        "array-back": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8.0.0"
+      }
+    },
+    "node_modules/ansi-regex": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz",
+      "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/ansi-styles": {
+      "version": "3.2.1",
+      "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz",
+      "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+      "dependencies": {
+        "color-convert": "^1.9.0"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/argparse": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz",
+      "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
+    },
+    "node_modules/array-back": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmmirror.com/array-back/-/array-back-4.0.2.tgz",
+      "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/array-flatten": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmmirror.com/array-flatten/-/array-flatten-1.1.1.tgz",
+      "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
+    },
+    "node_modules/askcharacter": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/askcharacter/-/askcharacter-1.0.0.tgz",
+      "integrity": "sha512-WsJcKyOh7iOWQSWcwPVE//yDUSXn3WvL+bgT9JYdEuiY/xeg1Vgwl5re72ZzufhXOwoiCrWWxW4CscRrxb3kZg==",
+      "dependencies": {
+        "hijack-stream": "^1.0.0"
+      }
+    },
+    "node_modules/askpassword": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npmmirror.com/askpassword/-/askpassword-1.2.4.tgz",
+      "integrity": "sha512-HR27ScUv/j6vHSKU0AN+y3pGA3iqXzD09qqJl6JjVqSJRk7QiKPJt+W4tFhozMbiTsOh/QrIkeRi+Okd97VkRA==",
+      "dependencies": {
+        "handle-backspaces": "^1.0.0",
+        "hijack-stream": "^1.0.0"
+      }
+    },
+    "node_modules/aws4": {
+      "version": "1.12.0",
+      "resolved": "https://registry.npmmirror.com/aws4/-/aws4-1.12.0.tgz",
+      "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg=="
+    },
+    "node_modules/axios": {
+      "version": "0.21.4",
+      "resolved": "https://registry.npmmirror.com/axios/-/axios-0.21.4.tgz",
+      "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==",
+      "dependencies": {
+        "follow-redirects": "^1.14.0"
+      }
+    },
+    "node_modules/axios-retry": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmmirror.com/axios-retry/-/axios-retry-3.2.0.tgz",
+      "integrity": "sha512-RK2cLMgIsAQBDhlIsJR5dOhODPigvel18XUv1dDXW+4k1FzebyfRk+C+orot6WPZOYFKSfhLwHPwVmTVOODQ5w==",
+      "dependencies": {
+        "is-retry-allowed": "^1.1.0"
+      }
+    },
+    "node_modules/balanced-match": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz",
+      "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+    },
+    "node_modules/base64-js": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz",
+      "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
+      "optional": true
+    },
+    "node_modules/big-integer": {
+      "version": "1.6.52",
+      "resolved": "https://registry.npmmirror.com/big-integer/-/big-integer-1.6.52.tgz",
+      "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==",
+      "engines": {
+        "node": ">=0.6"
+      }
+    },
+    "node_modules/bindings": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmmirror.com/bindings/-/bindings-1.5.0.tgz",
+      "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
+      "optional": true,
+      "dependencies": {
+        "file-uri-to-path": "1.0.0"
+      }
+    },
+    "node_modules/bl": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmmirror.com/bl/-/bl-4.1.0.tgz",
+      "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
+      "optional": true,
+      "dependencies": {
+        "buffer": "^5.5.0",
+        "inherits": "^2.0.4",
+        "readable-stream": "^3.4.0"
+      }
+    },
+    "node_modules/body-parser": {
+      "version": "1.20.1",
+      "resolved": "https://registry.npmmirror.com/body-parser/-/body-parser-1.20.1.tgz",
+      "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==",
+      "dependencies": {
+        "bytes": "3.1.2",
+        "content-type": "~1.0.4",
+        "debug": "2.6.9",
+        "depd": "2.0.0",
+        "destroy": "1.2.0",
+        "http-errors": "2.0.0",
+        "iconv-lite": "0.4.24",
+        "on-finished": "2.4.1",
+        "qs": "6.11.0",
+        "raw-body": "2.5.1",
+        "type-is": "~1.6.18",
+        "unpipe": "1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.8",
+        "npm": "1.2.8000 || >= 1.4.16"
+      }
+    },
+    "node_modules/body-parser/node_modules/debug": {
+      "version": "2.6.9",
+      "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz",
+      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+      "dependencies": {
+        "ms": "2.0.0"
+      }
+    },
+    "node_modules/body-parser/node_modules/ms": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz",
+      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+    },
+    "node_modules/bowser": {
+      "version": "2.11.0",
+      "resolved": "https://registry.npmmirror.com/bowser/-/bowser-2.11.0.tgz",
+      "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA=="
+    },
+    "node_modules/bplist-parser": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmmirror.com/bplist-parser/-/bplist-parser-0.2.0.tgz",
+      "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==",
+      "dependencies": {
+        "big-integer": "^1.6.44"
+      },
+      "engines": {
+        "node": ">= 5.10.0"
+      }
+    },
+    "node_modules/brace-expansion": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz",
+      "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+      "dependencies": {
+        "balanced-match": "^1.0.0"
+      }
+    },
+    "node_modules/browserslist": {
+      "version": "4.22.3",
+      "resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.22.3.tgz",
+      "integrity": "sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A==",
+      "dependencies": {
+        "caniuse-lite": "^1.0.30001580",
+        "electron-to-chromium": "^1.4.648",
+        "node-releases": "^2.0.14",
+        "update-browserslist-db": "^1.0.13"
+      },
+      "bin": {
+        "browserslist": "cli.js"
+      },
+      "engines": {
+        "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+      }
+    },
+    "node_modules/bson": {
+      "version": "6.3.0",
+      "resolved": "https://registry.npmmirror.com/bson/-/bson-6.3.0.tgz",
+      "integrity": "sha512-balJfqwwTBddxfnidJZagCBPP/f48zj9Sdp3OJswREOgsJzHiQSaOIAtApSgDQFYgHqAvFkp53AFSqjMDZoTFw==",
+      "engines": {
+        "node": ">=16.20.1"
+      }
+    },
+    "node_modules/buffer": {
+      "version": "5.7.1",
+      "resolved": "https://registry.npmmirror.com/buffer/-/buffer-5.7.1.tgz",
+      "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+      "optional": true,
+      "dependencies": {
+        "base64-js": "^1.3.1",
+        "ieee754": "^1.1.13"
+      }
+    },
+    "node_modules/bundle-name": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/bundle-name/-/bundle-name-3.0.0.tgz",
+      "integrity": "sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==",
+      "dependencies": {
+        "run-applescript": "^5.0.0"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/bytes": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmmirror.com/bytes/-/bytes-3.1.2.tgz",
+      "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/call-bind": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmmirror.com/call-bind/-/call-bind-1.0.5.tgz",
+      "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==",
+      "dependencies": {
+        "function-bind": "^1.1.2",
+        "get-intrinsic": "^1.2.1",
+        "set-function-length": "^1.1.1"
+      }
+    },
+    "node_modules/caniuse-lite": {
+      "version": "1.0.30001583",
+      "resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001583.tgz",
+      "integrity": "sha512-acWTYaha8xfhA/Du/z4sNZjHUWjkiuoAi2LM+T/aL+kemKQgPT1xBb/YKjlQ0Qo8gvbHsGNplrEJ+9G3gL7i4Q=="
+    },
+    "node_modules/chalk": {
+      "version": "2.4.2",
+      "resolved": "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz",
+      "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+      "dependencies": {
+        "ansi-styles": "^3.2.1",
+        "escape-string-regexp": "^1.0.5",
+        "supports-color": "^5.3.0"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/chalk/node_modules/escape-string-regexp": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+      "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+      "engines": {
+        "node": ">=0.8.0"
+      }
+    },
+    "node_modules/charenc": {
+      "version": "0.0.2",
+      "resolved": "https://registry.npmmirror.com/charenc/-/charenc-0.0.2.tgz",
+      "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==",
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/chownr": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/chownr/-/chownr-2.0.0.tgz",
+      "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/color-convert": {
+      "version": "1.9.3",
+      "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz",
+      "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+      "dependencies": {
+        "color-name": "1.1.3"
+      }
+    },
+    "node_modules/color-name": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz",
+      "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
+    },
+    "node_modules/commander": {
+      "version": "10.0.1",
+      "resolved": "https://registry.npmmirror.com/commander/-/commander-10.0.1.tgz",
+      "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==",
+      "engines": {
+        "node": ">=14"
+      }
+    },
+    "node_modules/component-type": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmmirror.com/component-type/-/component-type-1.2.2.tgz",
+      "integrity": "sha512-99VUHREHiN5cLeHm3YLq312p6v+HUEcwtLCAtelvUDI6+SH5g5Cr85oNR2S1o6ywzL0ykMbuwLzM2ANocjEOIA=="
+    },
+    "node_modules/config-chain": {
+      "version": "1.1.13",
+      "resolved": "https://registry.npmmirror.com/config-chain/-/config-chain-1.1.13.tgz",
+      "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==",
+      "dependencies": {
+        "ini": "^1.3.4",
+        "proto-list": "~1.2.1"
+      }
+    },
+    "node_modules/content-disposition": {
+      "version": "0.5.4",
+      "resolved": "https://registry.npmmirror.com/content-disposition/-/content-disposition-0.5.4.tgz",
+      "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
+      "dependencies": {
+        "safe-buffer": "5.2.1"
+      },
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/content-type": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmmirror.com/content-type/-/content-type-1.0.5.tgz",
+      "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/convert-source-map": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/convert-source-map/-/convert-source-map-2.0.0.tgz",
+      "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="
+    },
+    "node_modules/cookie": {
+      "version": "0.5.0",
+      "resolved": "https://registry.npmmirror.com/cookie/-/cookie-0.5.0.tgz",
+      "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/cookie-signature": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmmirror.com/cookie-signature/-/cookie-signature-1.0.6.tgz",
+      "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
+    },
+    "node_modules/cross-spawn": {
+      "version": "7.0.3",
+      "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz",
+      "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+      "dependencies": {
+        "path-key": "^3.1.0",
+        "shebang-command": "^2.0.0",
+        "which": "^2.0.1"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/crypt": {
+      "version": "0.0.2",
+      "resolved": "https://registry.npmmirror.com/crypt/-/crypt-0.0.2.tgz",
+      "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==",
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/debug": {
+      "version": "4.3.4",
+      "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz",
+      "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+      "dependencies": {
+        "ms": "2.1.2"
+      },
+      "engines": {
+        "node": ">=6.0"
+      },
+      "peerDependenciesMeta": {
+        "supports-color": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/debug/node_modules/ms": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz",
+      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+    },
+    "node_modules/decompress-response": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmmirror.com/decompress-response/-/decompress-response-6.0.0.tgz",
+      "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==",
+      "optional": true,
+      "dependencies": {
+        "mimic-response": "^3.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/dedent": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npmmirror.com/dedent/-/dedent-1.5.1.tgz",
+      "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==",
+      "peerDependencies": {
+        "babel-plugin-macros": "^3.1.0"
+      },
+      "peerDependenciesMeta": {
+        "babel-plugin-macros": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/deep-extend": {
+      "version": "0.6.0",
+      "resolved": "https://registry.npmmirror.com/deep-extend/-/deep-extend-0.6.0.tgz",
+      "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
+      "optional": true,
+      "engines": {
+        "node": ">=4.0.0"
+      }
+    },
+    "node_modules/default-browser": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/default-browser/-/default-browser-4.0.0.tgz",
+      "integrity": "sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==",
+      "dependencies": {
+        "bundle-name": "^3.0.0",
+        "default-browser-id": "^3.0.0",
+        "execa": "^7.1.1",
+        "titleize": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=14.16"
+      }
+    },
+    "node_modules/default-browser-id": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/default-browser-id/-/default-browser-id-3.0.0.tgz",
+      "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==",
+      "dependencies": {
+        "bplist-parser": "^0.2.0",
+        "untildify": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/define-data-property": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmmirror.com/define-data-property/-/define-data-property-1.1.1.tgz",
+      "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==",
+      "dependencies": {
+        "get-intrinsic": "^1.2.1",
+        "gopd": "^1.0.1",
+        "has-property-descriptors": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/define-lazy-prop": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz",
+      "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==",
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/depd": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/depd/-/depd-2.0.0.tgz",
+      "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/destroy": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmmirror.com/destroy/-/destroy-1.2.0.tgz",
+      "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
+      "engines": {
+        "node": ">= 0.8",
+        "npm": "1.2.8000 || >= 1.4.16"
+      }
+    },
+    "node_modules/detect-libc": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmmirror.com/detect-libc/-/detect-libc-2.0.2.tgz",
+      "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==",
+      "optional": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/eastasianwidth": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmmirror.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
+      "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="
+    },
+    "node_modules/editorconfig": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmmirror.com/editorconfig/-/editorconfig-1.0.4.tgz",
+      "integrity": "sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q==",
+      "dependencies": {
+        "@one-ini/wasm": "0.1.1",
+        "commander": "^10.0.0",
+        "minimatch": "9.0.1",
+        "semver": "^7.5.3"
+      },
+      "bin": {
+        "editorconfig": "bin/editorconfig"
+      },
+      "engines": {
+        "node": ">=14"
+      }
+    },
+    "node_modules/ee-first": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz",
+      "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
+    },
+    "node_modules/electron-to-chromium": {
+      "version": "1.4.655",
+      "resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.655.tgz",
+      "integrity": "sha512-2yszojF7vIZ68adIOvzV4bku8OZad9w5H9xF3ZAMZjPuOjBarlflUkjN6DggdV+L71WZuKUfKUhov/34+G5QHg=="
+    },
+    "node_modules/emoji-regex": {
+      "version": "9.2.2",
+      "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-9.2.2.tgz",
+      "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="
+    },
+    "node_modules/emphasize": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmmirror.com/emphasize/-/emphasize-4.2.0.tgz",
+      "integrity": "sha512-yGKvcFUHlBsUPwlxTlzKLR8+zhpbitkFOMCUxN8fTJng9bdH3WNzUGkhdaGdjndSUgqmMPBN7umfwnUdLz5Axg==",
+      "dependencies": {
+        "chalk": "^4.0.0",
+        "highlight.js": "~10.4.0",
+        "lowlight": "~1.17.0"
+      }
+    },
+    "node_modules/emphasize/node_modules/ansi-styles": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+      "dependencies": {
+        "color-convert": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/emphasize/node_modules/chalk": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/emphasize/node_modules/color-convert": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+      "dependencies": {
+        "color-name": "~1.1.4"
+      },
+      "engines": {
+        "node": ">=7.0.0"
+      }
+    },
+    "node_modules/emphasize/node_modules/color-name": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+    },
+    "node_modules/emphasize/node_modules/has-flag": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/emphasize/node_modules/supports-color": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/encodeurl": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/encodeurl/-/encodeurl-1.0.2.tgz",
+      "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/end-of-stream": {
+      "version": "1.4.4",
+      "resolved": "https://registry.npmmirror.com/end-of-stream/-/end-of-stream-1.4.4.tgz",
+      "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
+      "optional": true,
+      "dependencies": {
+        "once": "^1.4.0"
+      }
+    },
+    "node_modules/escalade": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.1.1.tgz",
+      "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/escape-html": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz",
+      "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
+    },
+    "node_modules/escape-string-regexp": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+      "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/etag": {
+      "version": "1.8.1",
+      "resolved": "https://registry.npmmirror.com/etag/-/etag-1.8.1.tgz",
+      "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/event-target-shim": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmmirror.com/event-target-shim/-/event-target-shim-5.0.1.tgz",
+      "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/execa": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmmirror.com/execa/-/execa-7.2.0.tgz",
+      "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==",
+      "dependencies": {
+        "cross-spawn": "^7.0.3",
+        "get-stream": "^6.0.1",
+        "human-signals": "^4.3.0",
+        "is-stream": "^3.0.0",
+        "merge-stream": "^2.0.0",
+        "npm-run-path": "^5.1.0",
+        "onetime": "^6.0.0",
+        "signal-exit": "^3.0.7",
+        "strip-final-newline": "^3.0.0"
+      },
+      "engines": {
+        "node": "^14.18.0 || ^16.14.0 || >=18.0.0"
+      }
+    },
+    "node_modules/execa/node_modules/signal-exit": {
+      "version": "3.0.7",
+      "resolved": "https://registry.npmmirror.com/signal-exit/-/signal-exit-3.0.7.tgz",
+      "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="
+    },
+    "node_modules/expand-template": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmmirror.com/expand-template/-/expand-template-2.0.3.tgz",
+      "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==",
+      "optional": true,
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/express": {
+      "version": "4.18.2",
+      "resolved": "https://registry.npmmirror.com/express/-/express-4.18.2.tgz",
+      "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==",
+      "dependencies": {
+        "accepts": "~1.3.8",
+        "array-flatten": "1.1.1",
+        "body-parser": "1.20.1",
+        "content-disposition": "0.5.4",
+        "content-type": "~1.0.4",
+        "cookie": "0.5.0",
+        "cookie-signature": "1.0.6",
+        "debug": "2.6.9",
+        "depd": "2.0.0",
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "etag": "~1.8.1",
+        "finalhandler": "1.2.0",
+        "fresh": "0.5.2",
+        "http-errors": "2.0.0",
+        "merge-descriptors": "1.0.1",
+        "methods": "~1.1.2",
+        "on-finished": "2.4.1",
+        "parseurl": "~1.3.3",
+        "path-to-regexp": "0.1.7",
+        "proxy-addr": "~2.0.7",
+        "qs": "6.11.0",
+        "range-parser": "~1.2.1",
+        "safe-buffer": "5.2.1",
+        "send": "0.18.0",
+        "serve-static": "1.15.0",
+        "setprototypeof": "1.2.0",
+        "statuses": "2.0.1",
+        "type-is": "~1.6.18",
+        "utils-merge": "1.0.1",
+        "vary": "~1.1.2"
+      },
+      "engines": {
+        "node": ">= 0.10.0"
+      }
+    },
+    "node_modules/express/node_modules/debug": {
+      "version": "2.6.9",
+      "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz",
+      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+      "dependencies": {
+        "ms": "2.0.0"
+      }
+    },
+    "node_modules/express/node_modules/ms": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz",
+      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+    },
+    "node_modules/fast-xml-parser": {
+      "version": "4.2.5",
+      "resolved": "https://registry.npmmirror.com/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz",
+      "integrity": "sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==",
+      "dependencies": {
+        "strnum": "^1.0.5"
+      },
+      "bin": {
+        "fxparser": "src/cli/cli.js"
+      }
+    },
+    "node_modules/fault": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmmirror.com/fault/-/fault-1.0.4.tgz",
+      "integrity": "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==",
+      "dependencies": {
+        "format": "^0.2.0"
+      }
+    },
+    "node_modules/file-uri-to-path": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
+      "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
+      "optional": true
+    },
+    "node_modules/finalhandler": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmmirror.com/finalhandler/-/finalhandler-1.2.0.tgz",
+      "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
+      "dependencies": {
+        "debug": "2.6.9",
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "on-finished": "2.4.1",
+        "parseurl": "~1.3.3",
+        "statuses": "2.0.1",
+        "unpipe": "~1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/finalhandler/node_modules/debug": {
+      "version": "2.6.9",
+      "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz",
+      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+      "dependencies": {
+        "ms": "2.0.0"
+      }
+    },
+    "node_modules/finalhandler/node_modules/ms": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz",
+      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+    },
+    "node_modules/follow-redirects": {
+      "version": "1.15.5",
+      "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.5.tgz",
+      "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==",
+      "engines": {
+        "node": ">=4.0"
+      },
+      "peerDependenciesMeta": {
+        "debug": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/foreground-child": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmmirror.com/foreground-child/-/foreground-child-3.1.1.tgz",
+      "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==",
+      "dependencies": {
+        "cross-spawn": "^7.0.0",
+        "signal-exit": "^4.0.1"
+      },
+      "engines": {
+        "node": ">=14"
+      }
+    },
+    "node_modules/format": {
+      "version": "0.2.2",
+      "resolved": "https://registry.npmmirror.com/format/-/format-0.2.2.tgz",
+      "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==",
+      "engines": {
+        "node": ">=0.4.x"
+      }
+    },
+    "node_modules/forwarded": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmmirror.com/forwarded/-/forwarded-0.2.0.tgz",
+      "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/fresh": {
+      "version": "0.5.2",
+      "resolved": "https://registry.npmmirror.com/fresh/-/fresh-0.5.2.tgz",
+      "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/fs-constants": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/fs-constants/-/fs-constants-1.0.0.tgz",
+      "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==",
+      "optional": true
+    },
+    "node_modules/fs-minipass": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/fs-minipass/-/fs-minipass-2.1.0.tgz",
+      "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
+      "dependencies": {
+        "minipass": "^3.0.0"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/fs-minipass/node_modules/minipass": {
+      "version": "3.3.6",
+      "resolved": "https://registry.npmmirror.com/minipass/-/minipass-3.3.6.tgz",
+      "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+      "dependencies": {
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/fs-minipass/node_modules/yallist": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz",
+      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+    },
+    "node_modules/function-bind": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz",
+      "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="
+    },
+    "node_modules/gensync": {
+      "version": "1.0.0-beta.2",
+      "resolved": "https://registry.npmmirror.com/gensync/-/gensync-1.0.0-beta.2.tgz",
+      "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/get-console-process-list": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmmirror.com/get-console-process-list/-/get-console-process-list-1.0.4.tgz",
+      "integrity": "sha512-vn5MA+CCTMgRuF9fxvJYLC2fMCuBPKQ7RwhA9H2TvMvy33oDivjIqA4mh2NJlUDoZXPcu/1moN3VfyukxxKwpA==",
+      "hasInstallScript": true,
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "dependencies": {
+        "bindings": "^1.5.0",
+        "node-addon-api": "^4.3.0"
+      }
+    },
+    "node_modules/get-intrinsic": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz",
+      "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==",
+      "dependencies": {
+        "function-bind": "^1.1.2",
+        "has-proto": "^1.0.1",
+        "has-symbols": "^1.0.3",
+        "hasown": "^2.0.0"
+      }
+    },
+    "node_modules/get-stream": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-6.0.1.tgz",
+      "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/github-from-package": {
+      "version": "0.0.0",
+      "resolved": "https://registry.npmmirror.com/github-from-package/-/github-from-package-0.0.0.tgz",
+      "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==",
+      "optional": true
+    },
+    "node_modules/glob": {
+      "version": "10.3.10",
+      "resolved": "https://registry.npmmirror.com/glob/-/glob-10.3.10.tgz",
+      "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==",
+      "dependencies": {
+        "foreground-child": "^3.1.0",
+        "jackspeak": "^2.3.5",
+        "minimatch": "^9.0.1",
+        "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0",
+        "path-scurry": "^1.10.1"
+      },
+      "bin": {
+        "glob": "dist/esm/bin.mjs"
+      },
+      "engines": {
+        "node": ">=16 || 14 >=14.17"
+      }
+    },
+    "node_modules/globals": {
+      "version": "11.12.0",
+      "resolved": "https://registry.npmmirror.com/globals/-/globals-11.12.0.tgz",
+      "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/gopd": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.0.1.tgz",
+      "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
+      "dependencies": {
+        "get-intrinsic": "^1.1.3"
+      }
+    },
+    "node_modules/handle-backspaces": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/handle-backspaces/-/handle-backspaces-1.0.0.tgz",
+      "integrity": "sha512-w11NXUn51gVN50nTW5MOuhKuko9xZonnHDe5LlapaOZvuyxDXVDn9b1ZtG0IJTABGbL/UGeSitqHgo9Bb7nDhQ=="
+    },
+    "node_modules/has-flag": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-3.0.0.tgz",
+      "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/has-property-descriptors": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz",
+      "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==",
+      "dependencies": {
+        "get-intrinsic": "^1.2.2"
+      }
+    },
+    "node_modules/has-proto": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/has-proto/-/has-proto-1.0.1.tgz",
+      "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==",
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/has-symbols": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.0.3.tgz",
+      "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/hasown": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/hasown/-/hasown-2.0.0.tgz",
+      "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==",
+      "dependencies": {
+        "function-bind": "^1.1.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/heap-js": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmmirror.com/heap-js/-/heap-js-2.3.0.tgz",
+      "integrity": "sha512-E5303mzwQ+4j/n2J0rDvEPBN7GKjhis10oHiYOgjxsmxYgqG++hz9NyLLOXttzH8as/DyiBHYpUrJTZWYaMo8Q==",
+      "engines": {
+        "node": ">=10.0.0"
+      }
+    },
+    "node_modules/highlight.js": {
+      "version": "10.4.1",
+      "resolved": "https://registry.npmmirror.com/highlight.js/-/highlight.js-10.4.1.tgz",
+      "integrity": "sha512-yR5lWvNz7c85OhVAEAeFhVCc/GV4C30Fjzc/rCP0aCWzc1UUOPUk55dK/qdwTZHBvMZo+eZ2jpk62ndX/xMFlg==",
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/hijack-stream": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/hijack-stream/-/hijack-stream-1.0.0.tgz",
+      "integrity": "sha512-9riBbIorIgSvsLQHL/rKEK6vJBexhgSRZC/tkieuei7a1U+CHgrXJVqW+RPswgEyuPbxcGCpx0QXO3iJuKRrrw=="
+    },
+    "node_modules/http-errors": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/http-errors/-/http-errors-2.0.0.tgz",
+      "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
+      "dependencies": {
+        "depd": "2.0.0",
+        "inherits": "2.0.4",
+        "setprototypeof": "1.2.0",
+        "statuses": "2.0.1",
+        "toidentifier": "1.0.1"
+      },
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/human-signals": {
+      "version": "4.3.1",
+      "resolved": "https://registry.npmmirror.com/human-signals/-/human-signals-4.3.1.tgz",
+      "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==",
+      "engines": {
+        "node": ">=14.18.0"
+      }
+    },
+    "node_modules/iconv-lite": {
+      "version": "0.4.24",
+      "resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.24.tgz",
+      "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+      "dependencies": {
+        "safer-buffer": ">= 2.1.2 < 3"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/ieee754": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz",
+      "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
+      "optional": true
+    },
+    "node_modules/inherits": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz",
+      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+    },
+    "node_modules/ini": {
+      "version": "1.3.8",
+      "resolved": "https://registry.npmmirror.com/ini/-/ini-1.3.8.tgz",
+      "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="
+    },
+    "node_modules/ip": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/ip/-/ip-2.0.0.tgz",
+      "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ=="
+    },
+    "node_modules/ipaddr.js": {
+      "version": "1.9.1",
+      "resolved": "https://registry.npmmirror.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
+      "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
+      "engines": {
+        "node": ">= 0.10"
+      }
+    },
+    "node_modules/ipv6-normalize": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/ipv6-normalize/-/ipv6-normalize-1.0.1.tgz",
+      "integrity": "sha512-Bm6H79i01DjgGTCWjUuCjJ6QDo1HB96PT/xCYuyJUP9WFbVDrLSbG4EZCvOCun2rNswZb0c3e4Jt/ws795esHA==",
+      "optional": true
+    },
+    "node_modules/is-buffer": {
+      "version": "1.1.6",
+      "resolved": "https://registry.npmmirror.com/is-buffer/-/is-buffer-1.1.6.tgz",
+      "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
+    },
+    "node_modules/is-docker": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/is-docker/-/is-docker-3.0.0.tgz",
+      "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==",
+      "bin": {
+        "is-docker": "cli.js"
+      },
+      "engines": {
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+      }
+    },
+    "node_modules/is-fullwidth-code-point": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+      "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/is-inside-container": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/is-inside-container/-/is-inside-container-1.0.0.tgz",
+      "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==",
+      "dependencies": {
+        "is-docker": "^3.0.0"
+      },
+      "bin": {
+        "is-inside-container": "cli.js"
+      },
+      "engines": {
+        "node": ">=14.16"
+      }
+    },
+    "node_modules/is-recoverable-error": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmmirror.com/is-recoverable-error/-/is-recoverable-error-1.0.3.tgz",
+      "integrity": "sha512-T06goBQXH5WCzWtzuU+kYhT3Ui0d3wgk8n4GR/3n9UjgO6cuphhel+W02ps/Z2PYZB8C+l//XAJk9tR5Txo6/w==",
+      "dependencies": {
+        "acorn": "^8.8.1",
+        "acorn-class-fields": "^1.0.0",
+        "acorn-numeric-separator": "^0.3.6",
+        "acorn-private-methods": "^1.0.0",
+        "acorn-static-class-features": "^1.0.0"
+      }
+    },
+    "node_modules/is-retry-allowed": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmmirror.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz",
+      "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/is-stream": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/is-stream/-/is-stream-3.0.0.tgz",
+      "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==",
+      "engines": {
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+      }
+    },
+    "node_modules/is-wsl": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmmirror.com/is-wsl/-/is-wsl-2.2.0.tgz",
+      "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
+      "dependencies": {
+        "is-docker": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/is-wsl/node_modules/is-docker": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmmirror.com/is-docker/-/is-docker-2.2.1.tgz",
+      "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
+      "bin": {
+        "is-docker": "cli.js"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/isexe": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz",
+      "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
+    },
+    "node_modules/jackspeak": {
+      "version": "2.3.6",
+      "resolved": "https://registry.npmmirror.com/jackspeak/-/jackspeak-2.3.6.tgz",
+      "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==",
+      "dependencies": {
+        "@isaacs/cliui": "^8.0.2"
+      },
+      "engines": {
+        "node": ">=14"
+      },
+      "optionalDependencies": {
+        "@pkgjs/parseargs": "^0.11.0"
+      }
+    },
+    "node_modules/joi": {
+      "version": "17.12.1",
+      "resolved": "https://registry.npmmirror.com/joi/-/joi-17.12.1.tgz",
+      "integrity": "sha512-vtxmq+Lsc5SlfqotnfVjlViWfOL9nt/avKNbKYizwf6gsCfq9NYY/ceYRMFD8XDdrjJ9abJyScWmhmIiy+XRtQ==",
+      "dependencies": {
+        "@hapi/hoek": "^9.3.0",
+        "@hapi/topo": "^5.1.0",
+        "@sideway/address": "^4.1.5",
+        "@sideway/formula": "^3.0.1",
+        "@sideway/pinpoint": "^2.0.0"
+      }
+    },
+    "node_modules/join-component": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmmirror.com/join-component/-/join-component-1.1.0.tgz",
+      "integrity": "sha512-bF7vcQxbODoGK1imE2P9GS9aw4zD0Sd+Hni68IMZLj7zRnquH7dXUmMw9hDI5S/Jzt7q+IyTXN0rSg2GI0IKhQ=="
+    },
+    "node_modules/jose": {
+      "version": "4.15.4",
+      "resolved": "https://registry.npmmirror.com/jose/-/jose-4.15.4.tgz",
+      "integrity": "sha512-W+oqK4H+r5sITxfxpSU+MMdr/YSWGvgZMQDIsNoBDGGy4i7GBPTtvFKibQzW06n3U3TqHjhvBJsirShsEJ6eeQ=="
+    },
+    "node_modules/js-beautify": {
+      "version": "1.14.11",
+      "resolved": "https://registry.npmmirror.com/js-beautify/-/js-beautify-1.14.11.tgz",
+      "integrity": "sha512-rPogWqAfoYh1Ryqqh2agUpVfbxAhbjuN1SmU86dskQUKouRiggUTCO4+2ym9UPXllc2WAp0J+T5qxn7Um3lCdw==",
+      "dependencies": {
+        "config-chain": "^1.1.13",
+        "editorconfig": "^1.0.3",
+        "glob": "^10.3.3",
+        "nopt": "^7.2.0"
+      },
+      "bin": {
+        "css-beautify": "js/bin/css-beautify.js",
+        "html-beautify": "js/bin/html-beautify.js",
+        "js-beautify": "js/bin/js-beautify.js"
+      },
+      "engines": {
+        "node": ">=14"
+      }
+    },
+    "node_modules/js-tokens": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz",
+      "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+    },
+    "node_modules/js-yaml": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmmirror.com/js-yaml/-/js-yaml-4.1.0.tgz",
+      "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+      "dependencies": {
+        "argparse": "^2.0.1"
+      },
+      "bin": {
+        "js-yaml": "bin/js-yaml.js"
+      }
+    },
+    "node_modules/jsesc": {
+      "version": "2.5.2",
+      "resolved": "https://registry.npmmirror.com/jsesc/-/jsesc-2.5.2.tgz",
+      "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
+      "bin": {
+        "jsesc": "bin/jsesc"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/json5": {
+      "version": "2.2.3",
+      "resolved": "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz",
+      "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+      "bin": {
+        "json5": "lib/cli.js"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/kerberos": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/kerberos/-/kerberos-2.1.0.tgz",
+      "integrity": "sha512-HvOl6O6cyEN/8Z4CAocHe/sekJtvt5UrxUdCuu7bXDZ2Hnsy6OpsQbISW+lpm03vrbO2ir+1QQ5Sx/vMEhHnog==",
+      "hasInstallScript": true,
+      "optional": true,
+      "dependencies": {
+        "bindings": "^1.5.0",
+        "node-addon-api": "^6.1.0",
+        "prebuild-install": "7.1.1"
+      },
+      "engines": {
+        "node": ">=12.9.0"
+      }
+    },
+    "node_modules/kerberos/node_modules/node-addon-api": {
+      "version": "6.1.0",
+      "resolved": "https://registry.npmmirror.com/node-addon-api/-/node-addon-api-6.1.0.tgz",
+      "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==",
+      "optional": true
+    },
+    "node_modules/lodash": {
+      "version": "4.17.21",
+      "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz",
+      "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
+    },
+    "node_modules/lodash.isstring": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmmirror.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz",
+      "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw=="
+    },
+    "node_modules/lodash.merge": {
+      "version": "4.6.2",
+      "resolved": "https://registry.npmmirror.com/lodash.merge/-/lodash.merge-4.6.2.tgz",
+      "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="
+    },
+    "node_modules/lowlight": {
+      "version": "1.17.0",
+      "resolved": "https://registry.npmmirror.com/lowlight/-/lowlight-1.17.0.tgz",
+      "integrity": "sha512-vmtBgYKD+QVNy7tIa7ulz5d//Il9R4MooOVh4nkOf9R9Cb/Dk5TXMSTieg/vDulkBkIWj59/BIlyFQxT9X1oAQ==",
+      "dependencies": {
+        "fault": "^1.0.0",
+        "highlight.js": "~10.4.0"
+      }
+    },
+    "node_modules/lru-cache": {
+      "version": "5.1.1",
+      "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-5.1.1.tgz",
+      "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+      "dependencies": {
+        "yallist": "^3.0.2"
+      }
+    },
+    "node_modules/macos-export-certificate-and-key": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmmirror.com/macos-export-certificate-and-key/-/macos-export-certificate-and-key-1.1.1.tgz",
+      "integrity": "sha512-J2g0dJRLG3DghmdCkbJnif/zPmSylj6ql//xBYff5allzNlHPnWxRoyho9XznBYLbPJw4jZlKjMO69jtV8VC7Q==",
+      "hasInstallScript": true,
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "dependencies": {
+        "bindings": "^1.5.0",
+        "node-addon-api": "^4.3.0"
+      }
+    },
+    "node_modules/md5": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmmirror.com/md5/-/md5-2.3.0.tgz",
+      "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==",
+      "dependencies": {
+        "charenc": "0.0.2",
+        "crypt": "0.0.2",
+        "is-buffer": "~1.1.6"
+      }
+    },
+    "node_modules/media-typer": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmmirror.com/media-typer/-/media-typer-0.3.0.tgz",
+      "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/memory-pager": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmmirror.com/memory-pager/-/memory-pager-1.5.0.tgz",
+      "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg=="
+    },
+    "node_modules/merge-descriptors": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
+      "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w=="
+    },
+    "node_modules/merge-stream": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/merge-stream/-/merge-stream-2.0.0.tgz",
+      "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="
+    },
+    "node_modules/methods": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmmirror.com/methods/-/methods-1.1.2.tgz",
+      "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/mime": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz",
+      "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+      "bin": {
+        "mime": "cli.js"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/mime-db": {
+      "version": "1.52.0",
+      "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz",
+      "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/mime-types": {
+      "version": "2.1.35",
+      "resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz",
+      "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+      "dependencies": {
+        "mime-db": "1.52.0"
+      },
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/mimic-fn": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-4.0.0.tgz",
+      "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==",
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/mimic-response": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmmirror.com/mimic-response/-/mimic-response-3.1.0.tgz",
+      "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==",
+      "optional": true,
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/minimatch": {
+      "version": "9.0.1",
+      "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.1.tgz",
+      "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==",
+      "dependencies": {
+        "brace-expansion": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=16 || 14 >=14.17"
+      }
+    },
+    "node_modules/minimist": {
+      "version": "1.2.8",
+      "resolved": "https://registry.npmmirror.com/minimist/-/minimist-1.2.8.tgz",
+      "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+      "optional": true
+    },
+    "node_modules/minipass": {
+      "version": "7.0.4",
+      "resolved": "https://registry.npmmirror.com/minipass/-/minipass-7.0.4.tgz",
+      "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==",
+      "engines": {
+        "node": ">=16 || 14 >=14.17"
+      }
+    },
+    "node_modules/minizlib": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmmirror.com/minizlib/-/minizlib-2.1.2.tgz",
+      "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
+      "dependencies": {
+        "minipass": "^3.0.0",
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/minizlib/node_modules/minipass": {
+      "version": "3.3.6",
+      "resolved": "https://registry.npmmirror.com/minipass/-/minipass-3.3.6.tgz",
+      "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+      "dependencies": {
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/minizlib/node_modules/yallist": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz",
+      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+    },
+    "node_modules/mkdirp": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmmirror.com/mkdirp/-/mkdirp-1.0.4.tgz",
+      "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+      "bin": {
+        "mkdirp": "bin/cmd.js"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/mkdirp-classic": {
+      "version": "0.5.3",
+      "resolved": "https://registry.npmmirror.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz",
+      "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==",
+      "optional": true
+    },
+    "node_modules/mongodb": {
+      "version": "6.3.0",
+      "resolved": "https://registry.npmmirror.com/mongodb/-/mongodb-6.3.0.tgz",
+      "integrity": "sha512-tt0KuGjGtLUhLoU263+xvQmPHEGTw5LbcNC73EoFRYgSHwZt5tsoJC110hDyO1kjQzpgNrpdcSza9PknWN4LrA==",
+      "dependencies": {
+        "@mongodb-js/saslprep": "^1.1.0",
+        "bson": "^6.2.0",
+        "mongodb-connection-string-url": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=16.20.1"
+      },
+      "peerDependencies": {
+        "@aws-sdk/credential-providers": "^3.188.0",
+        "@mongodb-js/zstd": "^1.1.0",
+        "gcp-metadata": "^5.2.0",
+        "kerberos": "^2.0.1",
+        "mongodb-client-encryption": ">=6.0.0 <7",
+        "snappy": "^7.2.2",
+        "socks": "^2.7.1"
+      },
+      "peerDependenciesMeta": {
+        "@aws-sdk/credential-providers": {
+          "optional": true
+        },
+        "@mongodb-js/zstd": {
+          "optional": true
+        },
+        "gcp-metadata": {
+          "optional": true
+        },
+        "kerberos": {
+          "optional": true
+        },
+        "mongodb-client-encryption": {
+          "optional": true
+        },
+        "snappy": {
+          "optional": true
+        },
+        "socks": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/mongodb-build-info": {
+      "version": "1.7.1",
+      "resolved": "https://registry.npmmirror.com/mongodb-build-info/-/mongodb-build-info-1.7.1.tgz",
+      "integrity": "sha512-he4lTotY5AkGSc4Js9Dtqvx4W7x5JSNa9xtvR08y1tUyhglHG1tV+NnuUTrysXA0hNHMMvOd/Hh4Ez9Po84p1g==",
+      "dependencies": {
+        "mongodb-connection-string-url": "^3.0.0"
+      }
+    },
+    "node_modules/mongodb-client-encryption": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmmirror.com/mongodb-client-encryption/-/mongodb-client-encryption-6.0.0.tgz",
+      "integrity": "sha512-GtqkqlSq19acX006/U1odA3l+gwhvABeoTUlvvgtvSs6qcN3qSHPnur3Z5N4oKOv6fZ7EtT8rIsWP2riI0+Eyg==",
+      "hasInstallScript": true,
+      "optional": true,
+      "dependencies": {
+        "bindings": "^1.5.0",
+        "node-addon-api": "^4.3.0",
+        "prebuild-install": "^7.1.1"
+      },
+      "engines": {
+        "node": ">=16.20.1"
+      }
+    },
+    "node_modules/mongodb-connection-string-url": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/mongodb-connection-string-url/-/mongodb-connection-string-url-3.0.0.tgz",
+      "integrity": "sha512-t1Vf+m1I5hC2M5RJx/7AtxgABy1cZmIPQRMXw+gEIPn/cZNF3Oiy+l0UIypUwVB5trcWHq3crg2g3uAR9aAwsQ==",
+      "dependencies": {
+        "@types/whatwg-url": "^11.0.2",
+        "whatwg-url": "^13.0.0"
+      }
+    },
+    "node_modules/mongodb-crypt-library-version": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmmirror.com/mongodb-crypt-library-version/-/mongodb-crypt-library-version-1.0.3.tgz",
+      "integrity": "sha512-w+T89kF9fC7npcf7m/+OUeXasf5TSL0GlugOCxzdXQFykV5MdU2yvcuuDZz4MD1pJickvGxBcw41jGg2s4lJ0g==",
+      "hasInstallScript": true,
+      "optional": true,
+      "dependencies": {
+        "bindings": "^1.5.0",
+        "node-addon-api": "^4.3.0"
+      },
+      "bin": {
+        "mongodb-crypt-library-version": "bin/mongodb-crypt-library-version.js"
+      }
+    },
+    "node_modules/mongodb-log-writer": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmmirror.com/mongodb-log-writer/-/mongodb-log-writer-1.4.0.tgz",
+      "integrity": "sha512-hQrn8Xu58Z9uLmd2oncvu/b5KNxxKaW6MUrVRI/xObz/yzYNVWF3V4rgK9Ort72nOCmMD3PWOS+ZoZBtxgKibA==",
+      "dependencies": {
+        "bson": "^4.5.1 || ^5.0.0 || ^6.0.0",
+        "heap-js": "^2.3.0"
+      }
+    },
+    "node_modules/mongodb-redact": {
+      "version": "0.2.2",
+      "resolved": "https://registry.npmmirror.com/mongodb-redact/-/mongodb-redact-0.2.2.tgz",
+      "integrity": "sha512-tmgDpSBymFtKggsLzpa0vDYaqh2wEXOswBZtJkXvbPKP0ThfPwoFYXtOukactU6WZsC4RYmpSPM4P6582FR/Xw==",
+      "dependencies": {
+        "lodash": "^4.17.15"
+      }
+    },
+    "node_modules/ms": {
+      "version": "2.1.3",
+      "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz",
+      "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+    },
+    "node_modules/mustache": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmmirror.com/mustache/-/mustache-4.2.0.tgz",
+      "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==",
+      "bin": {
+        "mustache": "bin/mustache"
+      }
+    },
+    "node_modules/napi-build-utils": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz",
+      "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==",
+      "optional": true
+    },
+    "node_modules/negotiator": {
+      "version": "0.6.3",
+      "resolved": "https://registry.npmmirror.com/negotiator/-/negotiator-0.6.3.tgz",
+      "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/node-abi": {
+      "version": "3.54.0",
+      "resolved": "https://registry.npmmirror.com/node-abi/-/node-abi-3.54.0.tgz",
+      "integrity": "sha512-p7eGEiQil0YUV3ItH4/tBb781L5impVmmx2E9FRKF7d18XXzp4PGT2tdYMFY6wQqgxD0IwNZOiSJ0/K0fSi/OA==",
+      "optional": true,
+      "dependencies": {
+        "semver": "^7.3.5"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/node-addon-api": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmmirror.com/node-addon-api/-/node-addon-api-4.3.0.tgz",
+      "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==",
+      "optional": true
+    },
+    "node_modules/node-fetch": {
+      "version": "2.7.0",
+      "resolved": "https://registry.npmmirror.com/node-fetch/-/node-fetch-2.7.0.tgz",
+      "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
+      "dependencies": {
+        "whatwg-url": "^5.0.0"
+      },
+      "engines": {
+        "node": "4.x || >=6.0.0"
+      },
+      "peerDependencies": {
+        "encoding": "^0.1.0"
+      },
+      "peerDependenciesMeta": {
+        "encoding": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/node-fetch/node_modules/tr46": {
+      "version": "0.0.3",
+      "resolved": "https://registry.npmmirror.com/tr46/-/tr46-0.0.3.tgz",
+      "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
+    },
+    "node_modules/node-fetch/node_modules/webidl-conversions": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+      "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
+    },
+    "node_modules/node-fetch/node_modules/whatwg-url": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-5.0.0.tgz",
+      "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
+      "dependencies": {
+        "tr46": "~0.0.3",
+        "webidl-conversions": "^3.0.0"
+      }
+    },
+    "node_modules/node-forge": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmmirror.com/node-forge/-/node-forge-1.3.1.tgz",
+      "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==",
+      "optional": true,
+      "engines": {
+        "node": ">= 6.13.0"
+      }
+    },
+    "node_modules/node-releases": {
+      "version": "2.0.14",
+      "resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.14.tgz",
+      "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw=="
+    },
+    "node_modules/nopt": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmmirror.com/nopt/-/nopt-7.2.0.tgz",
+      "integrity": "sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA==",
+      "dependencies": {
+        "abbrev": "^2.0.0"
+      },
+      "bin": {
+        "nopt": "bin/nopt.js"
+      },
+      "engines": {
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+      }
+    },
+    "node_modules/npm-run-path": {
+      "version": "5.2.0",
+      "resolved": "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-5.2.0.tgz",
+      "integrity": "sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==",
+      "dependencies": {
+        "path-key": "^4.0.0"
+      },
+      "engines": {
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+      }
+    },
+    "node_modules/npm-run-path/node_modules/path-key": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/path-key/-/path-key-4.0.0.tgz",
+      "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==",
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/numeral": {
+      "version": "2.0.6",
+      "resolved": "https://registry.npmmirror.com/numeral/-/numeral-2.0.6.tgz",
+      "integrity": "sha512-qaKRmtYPZ5qdw4jWJD6bxEf1FJEqllJrwxCLIm0sQU/A7v2/czigzOb+C2uSiFsa9lBUzeH7M1oK+Q+OLxL3kA==",
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/object-hash": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmmirror.com/object-hash/-/object-hash-2.2.0.tgz",
+      "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==",
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/object-inspect": {
+      "version": "1.13.1",
+      "resolved": "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.13.1.tgz",
+      "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ=="
+    },
+    "node_modules/oidc-token-hash": {
+      "version": "5.0.3",
+      "resolved": "https://registry.npmmirror.com/oidc-token-hash/-/oidc-token-hash-5.0.3.tgz",
+      "integrity": "sha512-IF4PcGgzAr6XXSff26Sk/+P4KZFJVuHAJZj3wgO3vX2bMdNVp/QXTP3P7CEm9V1IdG8lDLY3HhiqpsE/nOwpPw==",
+      "engines": {
+        "node": "^10.13.0 || >=12.0.0"
+      }
+    },
+    "node_modules/on-finished": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmmirror.com/on-finished/-/on-finished-2.4.1.tgz",
+      "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
+      "dependencies": {
+        "ee-first": "1.1.1"
+      },
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/once": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmmirror.com/once/-/once-1.4.0.tgz",
+      "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+      "optional": true,
+      "dependencies": {
+        "wrappy": "1"
+      }
+    },
+    "node_modules/onetime": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmmirror.com/onetime/-/onetime-6.0.0.tgz",
+      "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==",
+      "dependencies": {
+        "mimic-fn": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/open": {
+      "version": "9.1.0",
+      "resolved": "https://registry.npmmirror.com/open/-/open-9.1.0.tgz",
+      "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==",
+      "dependencies": {
+        "default-browser": "^4.0.0",
+        "define-lazy-prop": "^3.0.0",
+        "is-inside-container": "^1.0.0",
+        "is-wsl": "^2.2.0"
+      },
+      "engines": {
+        "node": ">=14.16"
+      }
+    },
+    "node_modules/openid-client": {
+      "version": "5.6.4",
+      "resolved": "https://registry.npmmirror.com/openid-client/-/openid-client-5.6.4.tgz",
+      "integrity": "sha512-T1h3B10BRPKfcObdBklX639tVz+xh34O7GjofqrqiAQdm7eHsQ00ih18x6wuJ/E6FxdtS2u3FmUGPDeEcMwzNA==",
+      "dependencies": {
+        "jose": "^4.15.4",
+        "lru-cache": "^6.0.0",
+        "object-hash": "^2.2.0",
+        "oidc-token-hash": "^5.0.3"
+      }
+    },
+    "node_modules/openid-client/node_modules/lru-cache": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz",
+      "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+      "dependencies": {
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/openid-client/node_modules/yallist": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz",
+      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+    },
+    "node_modules/os-dns-native": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmmirror.com/os-dns-native/-/os-dns-native-1.2.1.tgz",
+      "integrity": "sha512-LbU43lWBxnZhy72Ngr+Vga0og5Q2+Ob8lvSHJkP2uYBkvdmAnK4CvaVaBhC1hk9AQV3YxAZ9fZWaJTuIyPEi+Q==",
+      "hasInstallScript": true,
+      "optional": true,
+      "dependencies": {
+        "bindings": "^1.5.0",
+        "debug": "^4.3.3",
+        "ipv6-normalize": "^1.0.1",
+        "node-addon-api": "^4.3.0"
+      }
+    },
+    "node_modules/parseurl": {
+      "version": "1.3.3",
+      "resolved": "https://registry.npmmirror.com/parseurl/-/parseurl-1.3.3.tgz",
+      "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/path-key": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz",
+      "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/path-scurry": {
+      "version": "1.10.1",
+      "resolved": "https://registry.npmmirror.com/path-scurry/-/path-scurry-1.10.1.tgz",
+      "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==",
+      "dependencies": {
+        "lru-cache": "^9.1.1 || ^10.0.0",
+        "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+      },
+      "engines": {
+        "node": ">=16 || 14 >=14.17"
+      }
+    },
+    "node_modules/path-scurry/node_modules/lru-cache": {
+      "version": "10.2.0",
+      "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-10.2.0.tgz",
+      "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==",
+      "engines": {
+        "node": "14 || >=16.14"
+      }
+    },
+    "node_modules/path-to-regexp": {
+      "version": "0.1.7",
+      "resolved": "https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
+      "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
+    },
+    "node_modules/picocolors": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz",
+      "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
+    },
+    "node_modules/prebuild-install": {
+      "version": "7.1.1",
+      "resolved": "https://registry.npmmirror.com/prebuild-install/-/prebuild-install-7.1.1.tgz",
+      "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==",
+      "optional": true,
+      "dependencies": {
+        "detect-libc": "^2.0.0",
+        "expand-template": "^2.0.3",
+        "github-from-package": "0.0.0",
+        "minimist": "^1.2.3",
+        "mkdirp-classic": "^0.5.3",
+        "napi-build-utils": "^1.0.1",
+        "node-abi": "^3.3.0",
+        "pump": "^3.0.0",
+        "rc": "^1.2.7",
+        "simple-get": "^4.0.0",
+        "tar-fs": "^2.0.0",
+        "tunnel-agent": "^0.6.0"
+      },
+      "bin": {
+        "prebuild-install": "bin.js"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/pretty-repl": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/pretty-repl/-/pretty-repl-4.0.0.tgz",
+      "integrity": "sha512-2WmwcEXvMDQ3UVb/emuYb0M7dVVU1NSm7L7lf9nwGxvzWovUbLaXWUve8VqOoAO34GQBQ2l+nYcXY0HGllNc5Q==",
+      "dependencies": {
+        "ansi-regex": "^5.0.1",
+        "chalk": "^4.1.1",
+        "emphasize": "^4.2.0",
+        "strip-ansi": "^6.0.0"
+      },
+      "engines": {
+        "node": ">=14"
+      }
+    },
+    "node_modules/pretty-repl/node_modules/ansi-styles": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+      "dependencies": {
+        "color-convert": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/pretty-repl/node_modules/chalk": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/pretty-repl/node_modules/color-convert": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+      "dependencies": {
+        "color-name": "~1.1.4"
+      },
+      "engines": {
+        "node": ">=7.0.0"
+      }
+    },
+    "node_modules/pretty-repl/node_modules/color-name": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+    },
+    "node_modules/pretty-repl/node_modules/has-flag": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/pretty-repl/node_modules/supports-color": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/proto-list": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npmmirror.com/proto-list/-/proto-list-1.2.4.tgz",
+      "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA=="
+    },
+    "node_modules/proxy-addr": {
+      "version": "2.0.7",
+      "resolved": "https://registry.npmmirror.com/proxy-addr/-/proxy-addr-2.0.7.tgz",
+      "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
+      "dependencies": {
+        "forwarded": "0.2.0",
+        "ipaddr.js": "1.9.1"
+      },
+      "engines": {
+        "node": ">= 0.10"
+      }
+    },
+    "node_modules/pump": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/pump/-/pump-3.0.0.tgz",
+      "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+      "optional": true,
+      "dependencies": {
+        "end-of-stream": "^1.1.0",
+        "once": "^1.3.1"
+      }
+    },
+    "node_modules/punycode": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmmirror.com/punycode/-/punycode-2.3.1.tgz",
+      "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/qs": {
+      "version": "6.11.0",
+      "resolved": "https://registry.npmmirror.com/qs/-/qs-6.11.0.tgz",
+      "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
+      "dependencies": {
+        "side-channel": "^1.0.4"
+      },
+      "engines": {
+        "node": ">=0.6"
+      }
+    },
+    "node_modules/range-parser": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmmirror.com/range-parser/-/range-parser-1.2.1.tgz",
+      "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/raw-body": {
+      "version": "2.5.1",
+      "resolved": "https://registry.npmmirror.com/raw-body/-/raw-body-2.5.1.tgz",
+      "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==",
+      "dependencies": {
+        "bytes": "3.1.2",
+        "http-errors": "2.0.0",
+        "iconv-lite": "0.4.24",
+        "unpipe": "1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/rc": {
+      "version": "1.2.8",
+      "resolved": "https://registry.npmmirror.com/rc/-/rc-1.2.8.tgz",
+      "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
+      "optional": true,
+      "dependencies": {
+        "deep-extend": "^0.6.0",
+        "ini": "~1.3.0",
+        "minimist": "^1.2.0",
+        "strip-json-comments": "~2.0.1"
+      },
+      "bin": {
+        "rc": "cli.js"
+      }
+    },
+    "node_modules/readable-stream": {
+      "version": "3.6.2",
+      "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.2.tgz",
+      "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+      "optional": true,
+      "dependencies": {
+        "inherits": "^2.0.3",
+        "string_decoder": "^1.1.1",
+        "util-deprecate": "^1.0.1"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/remove-trailing-slash": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmmirror.com/remove-trailing-slash/-/remove-trailing-slash-0.1.1.tgz",
+      "integrity": "sha512-o4S4Qh6L2jpnCy83ysZDau+VORNvnFw07CKSAymkd6ICNVEPisMyzlc00KlvvicsxKck94SEwhDnMNdICzO+tA=="
+    },
+    "node_modules/resolve-mongodb-srv": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmmirror.com/resolve-mongodb-srv/-/resolve-mongodb-srv-1.1.3.tgz",
+      "integrity": "sha512-TrD4ebxN+1wfGhTl1uEKPSReCK13OscqpatIFKabCivrfQSDeVB4GYxpbm5F7yryyniuCxiEDxyyJO3a0UPQjw==",
+      "optional": true,
+      "dependencies": {
+        "whatwg-url": "^11.0.0 || ^12.0.0 || ^13.0.0 || ^14.0.0"
+      },
+      "bin": {
+        "resolve-mongodb-srv": "bin/resolve-mongodb-srv.js"
+      }
+    },
+    "node_modules/run-applescript": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmmirror.com/run-applescript/-/run-applescript-5.0.0.tgz",
+      "integrity": "sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==",
+      "dependencies": {
+        "execa": "^5.0.0"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/run-applescript/node_modules/execa": {
+      "version": "5.1.1",
+      "resolved": "https://registry.npmmirror.com/execa/-/execa-5.1.1.tgz",
+      "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
+      "dependencies": {
+        "cross-spawn": "^7.0.3",
+        "get-stream": "^6.0.0",
+        "human-signals": "^2.1.0",
+        "is-stream": "^2.0.0",
+        "merge-stream": "^2.0.0",
+        "npm-run-path": "^4.0.1",
+        "onetime": "^5.1.2",
+        "signal-exit": "^3.0.3",
+        "strip-final-newline": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/run-applescript/node_modules/human-signals": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/human-signals/-/human-signals-2.1.0.tgz",
+      "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
+      "engines": {
+        "node": ">=10.17.0"
+      }
+    },
+    "node_modules/run-applescript/node_modules/is-stream": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/is-stream/-/is-stream-2.0.1.tgz",
+      "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/run-applescript/node_modules/mimic-fn": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-2.1.0.tgz",
+      "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/run-applescript/node_modules/npm-run-path": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-4.0.1.tgz",
+      "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
+      "dependencies": {
+        "path-key": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/run-applescript/node_modules/onetime": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmmirror.com/onetime/-/onetime-5.1.2.tgz",
+      "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+      "dependencies": {
+        "mimic-fn": "^2.1.0"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/run-applescript/node_modules/signal-exit": {
+      "version": "3.0.7",
+      "resolved": "https://registry.npmmirror.com/signal-exit/-/signal-exit-3.0.7.tgz",
+      "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="
+    },
+    "node_modules/run-applescript/node_modules/strip-final-newline": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
+      "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/safe-buffer": {
+      "version": "5.2.1",
+      "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz",
+      "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
+    },
+    "node_modules/safer-buffer": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz",
+      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+    },
+    "node_modules/semver": {
+      "version": "7.5.4",
+      "resolved": "https://registry.npmmirror.com/semver/-/semver-7.5.4.tgz",
+      "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+      "dependencies": {
+        "lru-cache": "^6.0.0"
+      },
+      "bin": {
+        "semver": "bin/semver.js"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/semver/node_modules/lru-cache": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz",
+      "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+      "dependencies": {
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/semver/node_modules/yallist": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz",
+      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+    },
+    "node_modules/send": {
+      "version": "0.18.0",
+      "resolved": "https://registry.npmmirror.com/send/-/send-0.18.0.tgz",
+      "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
+      "dependencies": {
+        "debug": "2.6.9",
+        "depd": "2.0.0",
+        "destroy": "1.2.0",
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "etag": "~1.8.1",
+        "fresh": "0.5.2",
+        "http-errors": "2.0.0",
+        "mime": "1.6.0",
+        "ms": "2.1.3",
+        "on-finished": "2.4.1",
+        "range-parser": "~1.2.1",
+        "statuses": "2.0.1"
+      },
+      "engines": {
+        "node": ">= 0.8.0"
+      }
+    },
+    "node_modules/send/node_modules/debug": {
+      "version": "2.6.9",
+      "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz",
+      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+      "dependencies": {
+        "ms": "2.0.0"
+      }
+    },
+    "node_modules/send/node_modules/debug/node_modules/ms": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz",
+      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+    },
+    "node_modules/serve-static": {
+      "version": "1.15.0",
+      "resolved": "https://registry.npmmirror.com/serve-static/-/serve-static-1.15.0.tgz",
+      "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
+      "dependencies": {
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "parseurl": "~1.3.3",
+        "send": "0.18.0"
+      },
+      "engines": {
+        "node": ">= 0.8.0"
+      }
+    },
+    "node_modules/set-function-length": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmmirror.com/set-function-length/-/set-function-length-1.2.0.tgz",
+      "integrity": "sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==",
+      "dependencies": {
+        "define-data-property": "^1.1.1",
+        "function-bind": "^1.1.2",
+        "get-intrinsic": "^1.2.2",
+        "gopd": "^1.0.1",
+        "has-property-descriptors": "^1.0.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/setprototypeof": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.2.0.tgz",
+      "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
+    },
+    "node_modules/shebang-command": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz",
+      "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+      "dependencies": {
+        "shebang-regex": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/shebang-regex": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz",
+      "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/side-channel": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmmirror.com/side-channel/-/side-channel-1.0.4.tgz",
+      "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+      "dependencies": {
+        "call-bind": "^1.0.0",
+        "get-intrinsic": "^1.0.2",
+        "object-inspect": "^1.9.0"
+      }
+    },
+    "node_modules/signal-exit": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmmirror.com/signal-exit/-/signal-exit-4.1.0.tgz",
+      "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+      "engines": {
+        "node": ">=14"
+      }
+    },
+    "node_modules/simple-concat": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/simple-concat/-/simple-concat-1.0.1.tgz",
+      "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==",
+      "optional": true
+    },
+    "node_modules/simple-get": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmmirror.com/simple-get/-/simple-get-4.0.1.tgz",
+      "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==",
+      "optional": true,
+      "dependencies": {
+        "decompress-response": "^6.0.0",
+        "once": "^1.3.1",
+        "simple-concat": "^1.0.0"
+      }
+    },
+    "node_modules/smart-buffer": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmmirror.com/smart-buffer/-/smart-buffer-4.2.0.tgz",
+      "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==",
+      "engines": {
+        "node": ">= 6.0.0",
+        "npm": ">= 3.0.0"
+      }
+    },
+    "node_modules/socks": {
+      "version": "2.7.1",
+      "resolved": "https://registry.npmmirror.com/socks/-/socks-2.7.1.tgz",
+      "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==",
+      "dependencies": {
+        "ip": "^2.0.0",
+        "smart-buffer": "^4.2.0"
+      },
+      "engines": {
+        "node": ">= 10.13.0",
+        "npm": ">= 3.0.0"
+      }
+    },
+    "node_modules/sparse-bitfield": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmmirror.com/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz",
+      "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==",
+      "dependencies": {
+        "memory-pager": "^1.0.2"
+      }
+    },
+    "node_modules/statuses": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/statuses/-/statuses-2.0.1.tgz",
+      "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/string_decoder": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.3.0.tgz",
+      "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+      "optional": true,
+      "dependencies": {
+        "safe-buffer": "~5.2.0"
+      }
+    },
+    "node_modules/string-width": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmmirror.com/string-width/-/string-width-5.1.2.tgz",
+      "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+      "dependencies": {
+        "eastasianwidth": "^0.2.0",
+        "emoji-regex": "^9.2.2",
+        "strip-ansi": "^7.0.1"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/string-width-cjs": {
+      "name": "string-width",
+      "version": "4.2.3",
+      "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz",
+      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+      "dependencies": {
+        "emoji-regex": "^8.0.0",
+        "is-fullwidth-code-point": "^3.0.0",
+        "strip-ansi": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/string-width-cjs/node_modules/emoji-regex": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz",
+      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
+    },
+    "node_modules/string-width/node_modules/ansi-regex": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-6.0.1.tgz",
+      "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/string-width/node_modules/strip-ansi": {
+      "version": "7.1.0",
+      "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-7.1.0.tgz",
+      "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+      "dependencies": {
+        "ansi-regex": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/strip-ansi": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz",
+      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+      "dependencies": {
+        "ansi-regex": "^5.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/strip-ansi-cjs": {
+      "name": "strip-ansi",
+      "version": "6.0.1",
+      "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz",
+      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+      "dependencies": {
+        "ansi-regex": "^5.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/strip-final-newline": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz",
+      "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==",
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/strip-json-comments": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+      "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==",
+      "optional": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/strnum": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmmirror.com/strnum/-/strnum-1.0.5.tgz",
+      "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA=="
+    },
+    "node_modules/supports-color": {
+      "version": "5.5.0",
+      "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz",
+      "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+      "dependencies": {
+        "has-flag": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/system-ca": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/system-ca/-/system-ca-1.0.2.tgz",
+      "integrity": "sha512-/6CCJOKB5Fpi0x7/DCbV7uiFPgwGCeJsAaSondXS2DjLBv7ER2worVGvQWJqPM0kgOKO6auaCcSWpJKnrDmXjw==",
+      "optionalDependencies": {
+        "macos-export-certificate-and-key": "^1.1.1",
+        "win-export-certificate-and-key": "^1.1.1"
+      }
+    },
+    "node_modules/tar": {
+      "version": "6.2.0",
+      "resolved": "https://registry.npmmirror.com/tar/-/tar-6.2.0.tgz",
+      "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==",
+      "dependencies": {
+        "chownr": "^2.0.0",
+        "fs-minipass": "^2.0.0",
+        "minipass": "^5.0.0",
+        "minizlib": "^2.1.1",
+        "mkdirp": "^1.0.3",
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/tar-fs": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmmirror.com/tar-fs/-/tar-fs-2.1.1.tgz",
+      "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==",
+      "optional": true,
+      "dependencies": {
+        "chownr": "^1.1.1",
+        "mkdirp-classic": "^0.5.2",
+        "pump": "^3.0.0",
+        "tar-stream": "^2.1.4"
+      }
+    },
+    "node_modules/tar-fs/node_modules/chownr": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmmirror.com/chownr/-/chownr-1.1.4.tgz",
+      "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
+      "optional": true
+    },
+    "node_modules/tar-stream": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmmirror.com/tar-stream/-/tar-stream-2.2.0.tgz",
+      "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
+      "optional": true,
+      "dependencies": {
+        "bl": "^4.0.3",
+        "end-of-stream": "^1.4.1",
+        "fs-constants": "^1.0.0",
+        "inherits": "^2.0.3",
+        "readable-stream": "^3.1.1"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/tar/node_modules/minipass": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmmirror.com/minipass/-/minipass-5.0.0.tgz",
+      "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/tar/node_modules/yallist": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz",
+      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+    },
+    "node_modules/text-table": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmmirror.com/text-table/-/text-table-0.2.0.tgz",
+      "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw=="
+    },
+    "node_modules/titleize": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/titleize/-/titleize-3.0.0.tgz",
+      "integrity": "sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==",
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/to-fast-properties": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+      "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/toidentifier": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/toidentifier/-/toidentifier-1.0.1.tgz",
+      "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
+      "engines": {
+        "node": ">=0.6"
+      }
+    },
+    "node_modules/tr46": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmmirror.com/tr46/-/tr46-4.1.1.tgz",
+      "integrity": "sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==",
+      "dependencies": {
+        "punycode": "^2.3.0"
+      },
+      "engines": {
+        "node": ">=14"
+      }
+    },
+    "node_modules/tslib": {
+      "version": "2.6.2",
+      "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.6.2.tgz",
+      "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
+    },
+    "node_modules/tunnel-agent": {
+      "version": "0.6.0",
+      "resolved": "https://registry.npmmirror.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+      "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
+      "optional": true,
+      "dependencies": {
+        "safe-buffer": "^5.0.1"
+      },
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/type-is": {
+      "version": "1.6.18",
+      "resolved": "https://registry.npmmirror.com/type-is/-/type-is-1.6.18.tgz",
+      "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
+      "dependencies": {
+        "media-typer": "0.3.0",
+        "mime-types": "~2.1.24"
+      },
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/unpipe": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/unpipe/-/unpipe-1.0.0.tgz",
+      "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/untildify": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/untildify/-/untildify-4.0.0.tgz",
+      "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/update-browserslist-db": {
+      "version": "1.0.13",
+      "resolved": "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz",
+      "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==",
+      "dependencies": {
+        "escalade": "^3.1.1",
+        "picocolors": "^1.0.0"
+      },
+      "bin": {
+        "update-browserslist-db": "cli.js"
+      },
+      "peerDependencies": {
+        "browserslist": ">= 4.21.0"
+      }
+    },
+    "node_modules/util-deprecate": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz",
+      "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
+      "optional": true
+    },
+    "node_modules/utils-merge": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/utils-merge/-/utils-merge-1.0.1.tgz",
+      "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
+      "engines": {
+        "node": ">= 0.4.0"
+      }
+    },
+    "node_modules/uuid": {
+      "version": "8.3.2",
+      "resolved": "https://registry.npmmirror.com/uuid/-/uuid-8.3.2.tgz",
+      "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
+      "bin": {
+        "uuid": "dist/bin/uuid"
+      }
+    },
+    "node_modules/vary": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmmirror.com/vary/-/vary-1.1.2.tgz",
+      "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/webidl-conversions": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
+      "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==",
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/whatwg-url": {
+      "version": "13.0.0",
+      "resolved": "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-13.0.0.tgz",
+      "integrity": "sha512-9WWbymnqj57+XEuqADHrCJ2eSXzn8WXIW/YSGaZtb2WKAInQ6CHfaUUcTyyver0p8BDg5StLQq8h1vtZuwmOig==",
+      "dependencies": {
+        "tr46": "^4.1.1",
+        "webidl-conversions": "^7.0.0"
+      },
+      "engines": {
+        "node": ">=16"
+      }
+    },
+    "node_modules/which": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz",
+      "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+      "dependencies": {
+        "isexe": "^2.0.0"
+      },
+      "bin": {
+        "node-which": "bin/node-which"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/win-export-certificate-and-key": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmmirror.com/win-export-certificate-and-key/-/win-export-certificate-and-key-1.1.1.tgz",
+      "integrity": "sha512-wvF1DKlbt/PLOSdnKzIqv0Ipj+87n2VYOJFbkqBoN7l3l244reT7Lf6+Dnu86bYVWoVpq3ZZG417OLNHFnkP6A==",
+      "hasInstallScript": true,
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "dependencies": {
+        "bindings": "^1.5.0",
+        "node-addon-api": "^4.3.0",
+        "node-forge": "^1.2.1"
+      }
+    },
+    "node_modules/wrap-ansi": {
+      "version": "8.1.0",
+      "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
+      "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
+      "dependencies": {
+        "ansi-styles": "^6.1.0",
+        "string-width": "^5.0.1",
+        "strip-ansi": "^7.0.1"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/wrap-ansi-cjs": {
+      "name": "wrap-ansi",
+      "version": "7.0.0",
+      "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+      "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+      "dependencies": {
+        "ansi-styles": "^4.0.0",
+        "string-width": "^4.1.0",
+        "strip-ansi": "^6.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+      "dependencies": {
+        "color-convert": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/wrap-ansi-cjs/node_modules/color-convert": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+      "dependencies": {
+        "color-name": "~1.1.4"
+      },
+      "engines": {
+        "node": ">=7.0.0"
+      }
+    },
+    "node_modules/wrap-ansi-cjs/node_modules/color-name": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+    },
+    "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz",
+      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
+    },
+    "node_modules/wrap-ansi-cjs/node_modules/string-width": {
+      "version": "4.2.3",
+      "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz",
+      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+      "dependencies": {
+        "emoji-regex": "^8.0.0",
+        "is-fullwidth-code-point": "^3.0.0",
+        "strip-ansi": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/wrap-ansi/node_modules/ansi-regex": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-6.0.1.tgz",
+      "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/wrap-ansi/node_modules/ansi-styles": {
+      "version": "6.2.1",
+      "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-6.2.1.tgz",
+      "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/wrap-ansi/node_modules/strip-ansi": {
+      "version": "7.1.0",
+      "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-7.1.0.tgz",
+      "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+      "dependencies": {
+        "ansi-regex": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/wrappy": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz",
+      "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+      "optional": true
+    },
+    "node_modules/yallist": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmmirror.com/yallist/-/yallist-3.1.1.tgz",
+      "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
+    },
+    "node_modules/yargs-parser": {
+      "version": "20.2.9",
+      "resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-20.2.9.tgz",
+      "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
+      "engines": {
+        "node": ">=10"
+      }
+    }
+  }
+}
diff --git a/nixpkgs/pkgs/development/tools/mongosh/source.json b/nixpkgs/pkgs/development/tools/mongosh/source.json
new file mode 100644
index 000000000000..d8b801e9055d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/mongosh/source.json
@@ -0,0 +1,6 @@
+{
+  "version": "2.1.3",
+  "integrity": "sha512-kyggXyuSbjsQDjabXvXlfXW6k7MD+hByNSn8Z30dAQd+OYeM63MvEZubav2+uQUIzCsSycBqYX9xH+4cssz9gQ==",
+  "filename": "mongosh-2.1.3.tgz",
+  "deps": "sha256-kuUahlM3QJKOrepzlZlapemgFmBcQDW83Zzgv5zCHOU="
+}
diff --git a/nixpkgs/pkgs/development/tools/mongosh/update.sh b/nixpkgs/pkgs/development/tools/mongosh/update.sh
new file mode 100755
index 000000000000..08ceb076093b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/mongosh/update.sh
@@ -0,0 +1,25 @@
+#!/usr/bin/env nix-shell
+#! nix-shell -i bash -p nodejs libarchive prefetch-npm-deps moreutils jq
+# shellcheck shell=bash
+
+set -exuo pipefail
+
+cd -- "$(dirname -- "${BASH_SOURCE[0]}")"
+
+TMPDIR="$(mktemp -d)"
+trap 'rm -r -- "$TMPDIR"' EXIT
+
+pushd -- "$TMPDIR"
+npm pack mongosh --json | jq '.[0] | { version, integrity, filename }' > source.json
+bsdtar -x -f "$(jq -r .filename source.json)"
+
+pushd package
+npm install --omit=optional --package-lock-only
+popd
+
+DEPS="$(prefetch-npm-deps package/package-lock.json)"
+jq ".deps = \"$DEPS\"" source.json | sponge source.json
+
+popd
+
+cp -t . -- "$TMPDIR/source.json" "$TMPDIR/package/package-lock.json"
diff --git a/nixpkgs/pkgs/development/tools/moq/default.nix b/nixpkgs/pkgs/development/tools/moq/default.nix
new file mode 100644
index 000000000000..1c94ce10d5d5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/moq/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, buildGoModule, fetchFromGitHub, lib }:
+
+buildGoModule rec {
+  pname = "moq";
+  version = "0.3.4";
+
+  src = fetchFromGitHub {
+    owner = "matryer";
+    repo = "moq";
+    rev = "v${version}";
+    sha256 = "sha256-HJAfTTmsVIz/2gZxl5Sw+OMh6I6bjpZGd1afIjBWtXo=";
+  };
+
+  vendorHash = "sha256-2C5p2JTTCADGRsf0BMuxpQXk+25Q1YI25SSVE/5uZ1A=";
+
+  subPackages = [ "." ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X main.Version=${version}"
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/matryer/moq";
+    description = "Interface mocking tool for go generate";
+    longDescription = ''
+      Moq is a tool that generates a struct from any interface. The struct can
+      be used in test code as a mock of the interface.
+    '';
+    license = licenses.mit;
+    maintainers = with maintainers; [ anpryl ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/mpfshell/default.nix b/nixpkgs/pkgs/development/tools/mpfshell/default.nix
new file mode 100644
index 000000000000..e8a2a9b89217
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/mpfshell/default.nix
@@ -0,0 +1,26 @@
+{ lib, python3Packages, fetchFromGitHub }:
+
+python3Packages.buildPythonPackage rec {
+  pname = "mpfshell-unstable";
+  version = "2020-04-11";
+
+  src = fetchFromGitHub {
+    owner = "wendlers";
+    repo = "mpfshell";
+    rev = "429469fcccbda770fddf7a4277f5db92b1217664";
+    sha256 = "0md6ih9vp65dacqy8gki3b2p4v76xb9ijqmxymk4b4f9z684x2m7";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    pyserial colorama websocket-client
+  ];
+
+  doCheck = false;
+  pythonImportsCheck = [ "mp.mpfshell" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/wendlers/mpfshell";
+    description = "A simple shell based file explorer for ESP8266 Micropython based devices";
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/msgpack-tools/default.nix b/nixpkgs/pkgs/development/tools/msgpack-tools/default.nix
new file mode 100644
index 000000000000..a7b3c36d87b2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/msgpack-tools/default.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv, fetchurl, fetchFromGitHub, cmake }:
+
+stdenv.mkDerivation rec {
+  pname = "msgpack-tools";
+  version = "0.6";
+
+  src = fetchFromGitHub {
+    owner = "ludocode";
+    repo = "msgpack-tools";
+    rev = "v${version}";
+    sha256 = "1ygjk25zlpqjckxgqmahnz999704zy2bd9id6hp5jych1szkjgs5";
+  };
+
+  libb64 = fetchurl {
+    url = "mirror://sourceforge/libb64/libb64-1.2.1.zip";
+    sha256 = "1chlcc8qggzxnbpy5wrda533xyz38dk20w9wl4srrzawm45ny410";
+  };
+
+  rapidjson = fetchurl {
+    url = "https://github.com/miloyip/rapidjson/archive/99ba17bd66a85ec64a2f322b68c2b9c3b77a4391.tar.gz";
+    sha256 = "0jxgyy5n0lf9w36dycwwgz2wici4z9dnxlsn0z6m23zaa47g3wyw";
+  };
+
+  mpack = fetchurl {
+    url = "https://github.com/ludocode/mpack/archive/df17e83f0fa8571b9cd0d8ccf38144fa90e244d1.tar.gz";
+    sha256 = "1br8g3rf86h8z8wbqkd50aq40953862lgn0xk7cy68m07fhqc3pg";
+  };
+
+  postUnpack = ''
+    mkdir $sourceRoot/contrib
+    cp ${rapidjson} $sourceRoot/contrib/rapidjson-99ba17bd66a85ec64a2f322b68c2b9c3b77a4391.tar.gz
+    cp ${libb64} $sourceRoot/contrib/libb64-1.2.1.zip
+    cp ${mpack} $sourceRoot/contrib/mpack-df17e83f0fa8571b9cd0d8ccf38144fa90e244d1.tar.gz
+  '';
+
+  nativeBuildInputs = [ cmake ];
+
+  meta = with lib; {
+    description = "Command-line tools for converting between MessagePack and JSON";
+    homepage = "https://github.com/ludocode/msgpack-tools";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ alibabzo ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/mustache-go/default.nix b/nixpkgs/pkgs/development/tools/mustache-go/default.nix
new file mode 100644
index 000000000000..be5218cb1d33
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/mustache-go/default.nix
@@ -0,0 +1,26 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "mustache-go";
+  version = "1.4.0";
+
+  src = fetchFromGitHub {
+    owner = "cbroglie";
+    repo = "mustache";
+    rev = "v${version}";
+    fetchSubmodules = true;
+    sha256 = "sha256-A7LIkidhpFmhIjiDu9KdmSIdqFNsV3N8J2QEo7yT+DE=";
+  };
+
+  vendorHash = "sha256-FYdsLcW6FYxSgixZ5US9cBPABOAVwidC3ejUNbs1lbA=";
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/cbroglie/mustache";
+    description = "The mustache template language in Go";
+    license = [ licenses.mit ];
+    maintainers = with maintainers; [ Zimmi48 ];
+    mainProgram = "mustache";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/mutmut/default.nix b/nixpkgs/pkgs/development/tools/mutmut/default.nix
new file mode 100644
index 000000000000..85d981961d16
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/mutmut/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, fetchFromGitHub
+, python3
+, testers
+}:
+
+let self = with python3.pkgs; buildPythonApplication rec {
+  pname = "mutmut";
+  version = "2.2.0";
+
+  src = fetchFromGitHub {
+    repo = pname;
+    owner = "boxed";
+    rev = version;
+    hash = "sha256-G+OL/9km2iUeZ1QCpU73CIWVWMexcs3r9RdCnAsESnY=";
+  };
+
+  postPatch = ''
+    substituteInPlace requirements.txt --replace 'junit-xml==1.8' 'junit-xml==1.9'
+  '';
+
+  disabled = pythonOlder "3.7";
+
+  doCheck = false;
+
+  propagatedBuildInputs = [ click glob2 parso pony junit-xml ];
+
+  passthru.tests.version = testers.testVersion { package = self; };
+
+  meta = with lib; {
+    description = "mutation testing system for Python, with a strong focus on ease of use";
+    homepage = "https://github.com/boxed/mutmut";
+    changelog = "https://github.com/boxed/mutmut/blob/${version}/HISTORY.rst";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ synthetica ];
+  };
+};
+in self
diff --git a/nixpkgs/pkgs/development/tools/mysql-shell/default.nix b/nixpkgs/pkgs/development/tools/mysql-shell/default.nix
new file mode 100644
index 000000000000..fe8ad46fe2f2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/mysql-shell/default.nix
@@ -0,0 +1,126 @@
+{ lib
+, stdenv
+, pkg-config
+, cmake
+, fetchurl
+, git
+, cctools
+, DarwinTools
+, makeWrapper
+, CoreServices
+, bison
+, openssl
+, protobuf
+, curl
+, zlib
+, libssh
+, zstd
+, lz4
+, boost
+, readline
+, libtirpc
+, rpcsvc-proto
+, libedit
+, libevent
+, icu
+, re2
+, ncurses
+, libfido2
+, python3
+, cyrus_sasl
+, openldap
+, antlr
+}:
+
+let
+  pythonDeps = with python3.pkgs; [ certifi paramiko pyyaml ];
+in
+stdenv.mkDerivation (finalAttrs: {
+  pname = "mysql-shell";
+  version = "8.0.36";
+
+  srcs = [
+    (fetchurl {
+      url = "https://cdn.mysql.com//Downloads/MySQL-${lib.versions.majorMinor finalAttrs.version}/mysql-${finalAttrs.version}.tar.gz";
+      hash = "sha256-9PJwa5WKinOA72yVjdlyMHvb7qRR76/DQuTEbim36d0=";
+    })
+    (fetchurl {
+      url = "https://cdn.mysql.com//Downloads/MySQL-Shell/mysql-shell-${finalAttrs.version}-src.tar.gz";
+      hash = "sha256-s0+7dbcLcgS8u/6p7vpVAV9sR2gf2j9VDnSCJvw77fQ=";
+    })
+  ];
+
+  sourceRoot = "mysql-shell-${finalAttrs.version}-src";
+
+  postUnpack = ''
+    mv mysql-${finalAttrs.version} mysql
+  '';
+
+  postPatch = ''
+    substituteInPlace ../mysql/cmake/libutils.cmake --replace /usr/bin/libtool libtool
+    substituteInPlace ../mysql/cmake/os/Darwin.cmake --replace /usr/bin/libtool libtool
+
+    substituteInPlace cmake/libutils.cmake --replace /usr/bin/libtool libtool
+  '';
+
+  nativeBuildInputs = [ pkg-config cmake git bison makeWrapper ]
+    ++ lib.optionals (!stdenv.isDarwin) [ rpcsvc-proto ]
+    ++ lib.optionals stdenv.isDarwin [ cctools DarwinTools ];
+
+  buildInputs = [
+    boost
+    curl
+    libedit
+    libssh
+    lz4
+    openssl
+    protobuf
+    readline
+    zlib
+    zstd
+    libevent
+    icu
+    re2
+    ncurses
+    libfido2
+    cyrus_sasl
+    openldap
+    python3
+    antlr.runtime.cpp
+  ] ++ pythonDeps
+  ++ lib.optionals stdenv.isLinux [ libtirpc ]
+  ++ lib.optionals stdenv.isDarwin [ CoreServices ];
+
+  preConfigure = ''
+    # Build MySQL
+    echo "Building mysqlclient mysqlxclient"
+
+    cmake -DWITH_SYSTEM_LIBS=ON -DWITH_BOOST=system -DWITH_FIDO=system -DWITH_ROUTER=OFF -DWITH_UNIT_TESTS=OFF \
+      -DFORCE_UNSUPPORTED_COMPILER=1 -S ../mysql -B ../mysql/build
+
+    cmake --build ../mysql/build --parallel ''${NIX_BUILD_CORES:-1} --target mysqlclient mysqlxclient
+  '';
+
+  cmakeFlags = [
+    "-DMYSQL_SOURCE_DIR=../mysql"
+    "-DMYSQL_BUILD_DIR=../mysql/build"
+    "-DMYSQL_CONFIG_EXECUTABLE=../../mysql/build/scripts/mysql_config"
+    "-DWITH_ZSTD=system"
+    "-DWITH_LZ4=system"
+    "-DWITH_ZLIB=system"
+    "-DWITH_PROTOBUF=${protobuf}"
+    "-DHAVE_PYTHON=1"
+  ];
+
+  postFixup = ''
+    wrapProgram $out/bin/mysqlsh --set PYTHONPATH "${lib.makeSearchPath python3.sitePackages pythonDeps}"
+  '';
+
+  meta = with lib; {
+    homepage = "https://dev.mysql.com/doc/mysql-shell/${lib.versions.majorMinor finalAttrs.version}/en/";
+    description = "A new command line scriptable shell for MySQL";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ aaronjheng ];
+    mainProgram = "mysqlsh";
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/mysql-shell/innovation.nix b/nixpkgs/pkgs/development/tools/mysql-shell/innovation.nix
new file mode 100644
index 000000000000..0755b2271c03
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/mysql-shell/innovation.nix
@@ -0,0 +1,127 @@
+{ lib
+, stdenv
+, pkg-config
+, cmake
+, fetchurl
+, git
+, cctools
+, DarwinTools
+, makeWrapper
+, CoreServices
+, bison
+, openssl
+, protobuf
+, curl
+, zlib
+, libssh
+, zstd
+, lz4
+, readline
+, libtirpc
+, rpcsvc-proto
+, libedit
+, libevent
+, icu
+, re2
+, ncurses
+, libfido2
+, python3
+, cyrus_sasl
+, openldap
+, antlr
+}:
+
+let
+  pythonDeps = with python3.pkgs; [ certifi paramiko pyyaml ];
+
+  mysqlShellVersion = "8.3.0";
+  mysqlServerVersion = "8.3.0";
+in
+stdenv.mkDerivation (finalAttrs: {
+  pname = "mysql-shell-innovation";
+  version = mysqlShellVersion;
+
+  srcs = [
+    (fetchurl {
+      url = "https://cdn.mysql.com//Downloads/MySQL-${lib.versions.majorMinor mysqlServerVersion}/mysql-${mysqlServerVersion}.tar.gz";
+      hash = "sha256-HyFJWgt6grJKRT1S4hU6gUs8pwTsz5mXZtVFvOUvOG4=";
+    })
+    (fetchurl {
+      url = "https://cdn.mysql.com//Downloads/MySQL-Shell/mysql-shell-${finalAttrs.version}-src.tar.gz";
+      hash = "sha256-O0j/gvS9fR/xp9plytjj249H7LY/+eyst1IsFpy318U=";
+    })
+  ];
+
+  sourceRoot = "mysql-shell-${finalAttrs.version}-src";
+
+  postUnpack = ''
+    mv mysql-${mysqlServerVersion} mysql
+  '';
+
+  postPatch = ''
+    substituteInPlace ../mysql/cmake/libutils.cmake --replace /usr/bin/libtool libtool
+    substituteInPlace ../mysql/cmake/os/Darwin.cmake --replace /usr/bin/libtool libtool
+
+    substituteInPlace cmake/libutils.cmake --replace /usr/bin/libtool libtool
+  '';
+
+  nativeBuildInputs = [ pkg-config cmake git bison makeWrapper ]
+    ++ lib.optionals (!stdenv.isDarwin) [ rpcsvc-proto ]
+    ++ lib.optionals stdenv.isDarwin [ cctools DarwinTools ];
+
+  buildInputs = [
+    curl
+    libedit
+    libssh
+    lz4
+    openssl
+    protobuf
+    readline
+    zlib
+    zstd
+    libevent
+    icu
+    re2
+    ncurses
+    libfido2
+    cyrus_sasl
+    openldap
+    python3
+    antlr.runtime.cpp
+  ] ++ pythonDeps
+  ++ lib.optionals stdenv.isLinux [ libtirpc ]
+  ++ lib.optionals stdenv.isDarwin [ CoreServices ];
+
+  preConfigure = ''
+    # Build MySQL
+    echo "Building mysqlclient mysqlxclient"
+
+    cmake -DWITH_SYSTEM_LIBS=ON -DWITH_FIDO=system -DWITH_ROUTER=OFF -DWITH_UNIT_TESTS=OFF \
+      -DFORCE_UNSUPPORTED_COMPILER=1 -S ../mysql -B ../mysql/build
+
+    cmake --build ../mysql/build --parallel ''${NIX_BUILD_CORES:-1} --target mysqlclient mysqlxclient
+  '';
+
+  cmakeFlags = [
+    "-DMYSQL_SOURCE_DIR=../mysql"
+    "-DMYSQL_BUILD_DIR=../mysql/build"
+    "-DMYSQL_CONFIG_EXECUTABLE=../../mysql/build/scripts/mysql_config"
+    "-DWITH_ZSTD=system"
+    "-DWITH_LZ4=system"
+    "-DWITH_ZLIB=system"
+    "-DWITH_PROTOBUF=${protobuf}"
+    "-DHAVE_PYTHON=1"
+  ];
+
+  postFixup = ''
+    wrapProgram $out/bin/mysqlsh --set PYTHONPATH "${lib.makeSearchPath python3.sitePackages pythonDeps}"
+  '';
+
+  meta = with lib; {
+    homepage = "https://dev.mysql.com/doc/mysql-shell/${lib.versions.majorMinor finalAttrs.version}/en/";
+    description = "A new command line scriptable shell for MySQL";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ aaronjheng ];
+    mainProgram = "mysqlsh";
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/nagelfar/default.nix b/nixpkgs/pkgs/development/tools/nagelfar/default.nix
new file mode 100644
index 000000000000..e770d162dc47
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/nagelfar/default.nix
@@ -0,0 +1,34 @@
+{ lib, fetchzip, tcl, tcllib, tk, }:
+
+tcl.mkTclDerivation {
+  pname = "nagelfar";
+  version = "1.3.3";
+
+  src = fetchzip {
+    url = "https://sourceforge.net/projects/nagelfar/files/Rel_133/nagelfar133.tar.gz";
+    sha256 = "sha256-bdH53LSOKMwq53obVQitl7bpaSpwvMce8oJgg/GKrg0=";
+  };
+
+  buildInputs = [
+    tcl
+    tcllib
+    tk
+  ];
+
+  installPhase = ''
+    install -Dm 755 $src/nagelfar.tcl $out/bin/nagelfar
+  '';
+
+  meta = with lib; {
+    homepage = "https://nagelfar.sourceforge.net/";
+    description = "A static syntax checker (linter) for Tcl";
+    longDescription = ''
+      Provides static syntax checking, code coverage instrumentation,
+      and is very extendable through its syntax database and plugins.
+    '';
+    mainProgram = "nagelfar";
+    license = licenses.gpl3Plus;
+    platforms = platforms.all;
+    maintainers = [ maintainers.nat-418 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/nailgun/default.nix b/nixpkgs/pkgs/development/tools/nailgun/default.nix
new file mode 100644
index 000000000000..6c71e374ffc7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/nailgun/default.nix
@@ -0,0 +1,69 @@
+{ lib, stdenv, stdenvNoCC, fetchMavenArtifact, fetchFromGitHub, jre, makeWrapper, symlinkJoin }:
+
+let
+  version = "1.0.0";
+  nailgun-server = fetchMavenArtifact {
+    groupId = "com.facebook";
+    artifactId = "nailgun-server";
+    inherit version;
+    sha256 = "1mk8pv0g2xg9m0gsb96plbh6mc24xrlyrmnqac5mlbl4637l4q95";
+  };
+
+  commonMeta = {
+    license = lib.licenses.asl20;
+    homepage = "https://www.martiansoftware.com/nailgun/";
+    platforms = lib.platforms.linux;
+    maintainers = with lib.maintainers; [ ];
+  };
+
+  server = stdenvNoCC.mkDerivation {
+    pname = "nailgun-server";
+    inherit version;
+
+    nativeBuildInputs = [ makeWrapper ];
+
+    dontUnpack = true;
+    installPhase = ''
+      runHook preInstall
+
+      makeWrapper ${jre}/bin/java $out/bin/ng-server \
+        --add-flags '-classpath ${nailgun-server.jar}:$CLASSPATH com.facebook.nailgun.NGServer'
+
+      runHook postInstall
+    '';
+
+    meta = commonMeta // {
+      description = "Server for running Java programs from the command line without incurring the JVM startup overhead";
+      sourceProvenance = with lib.sourceTypes; [ binaryBytecode ];
+    };
+  };
+
+  client = stdenv.mkDerivation {
+    pname = "nailgun-client";
+    inherit version;
+
+    src = fetchFromGitHub {
+      owner = "facebook";
+      repo = "nailgun";
+      rev = "nailgun-all-v${version}";
+      sha256 = "1syyk4ss5vq1zf0ma00svn56lal53ffpikgqgzngzbwyksnfdlh6";
+    };
+
+    makeFlags = [ "PREFIX=$(out)" ];
+
+    meta = commonMeta // {
+      description = "Client for running Java programs from the command line without incurring the JVM startup overhead";
+    };
+  };
+in
+symlinkJoin rec {
+  pname = "nailgun";
+  inherit client server version;
+
+  name = "${pname}-${version}";
+  paths = [ client server ];
+
+  meta = commonMeta // {
+    description = "Client, protocol, and server for running Java programs from the command line without incurring the JVM startup overhead";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/nap/default.nix b/nixpkgs/pkgs/development/tools/nap/default.nix
new file mode 100644
index 000000000000..fdc585fd5e18
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/nap/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub, callPackage }:
+
+buildGoModule rec {
+  pname = "nap";
+  version = "0.1.1";
+
+  src = fetchFromGitHub {
+    owner = "maaslalani";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0b3sz8zp1nwcjl02b3lli5yjc7vfay1ig6fs8bgxwz22imfx076p";
+  };
+
+  vendorHash = "sha256-puCqql77kvdWTcwp8z6LExBt/HbNRNe0f+wtM0kLoWM=";
+
+  excludedPackages = ".nap";
+
+  meta = {
+    description = "Code snippets in your terminal 🛌";
+    homepage = "https://github.com/maaslalani/nap";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ phdcybersec maaslalani ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/napi-rs-cli/default.nix b/nixpkgs/pkgs/development/tools/napi-rs-cli/default.nix
new file mode 100644
index 000000000000..3b73a05a7c88
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/napi-rs-cli/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchurl, makeWrapper, nodejs }:
+
+stdenv.mkDerivation rec {
+  pname = "napi-rs-cli";
+  version = "2.17.0";
+
+  src = fetchurl {
+    url = "https://registry.npmjs.org/@napi-rs/cli/-/cli-${version}.tgz";
+    hash = "sha256-DeqH3pEtGZoKEBz5G0RfDO9LWHGMKL2OiWS1uWk4v44=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p "$out/bin" "$out/lib/napi-rs-cli"
+
+    cp scripts/index.js "$out/lib/napi-rs-cli"
+
+    makeWrapper ${nodejs}/bin/node "$out/bin/napi" --add-flags "$out/lib/napi-rs-cli/index.js"
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "CLI tools for napi-rs";
+    homepage = "https://napi.rs";
+    license = licenses.mit;
+    maintainers = with maintainers; [ winter ];
+    inherit (nodejs.meta) platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/nasmfmt/default.nix b/nixpkgs/pkgs/development/tools/nasmfmt/default.nix
new file mode 100644
index 000000000000..413d7df67885
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/nasmfmt/default.nix
@@ -0,0 +1,28 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "nasmfmt";
+  version = "unstable-2022-09-15";
+
+  src = fetchFromGitHub {
+    owner = "yamnikov-oleg";
+    repo = "nasmfmt";
+    rev = "127dbe8e72376c67d7dff89010ccfb49fc7b533e";
+    hash = "sha256-1c7ZOdoM0/Us7cnTT3sds2P5pcCedrCfl0GqQBnf9Rk=";
+  };
+
+  vendorHash = null;
+
+  preBuild = ''
+    cp ${./go.mod} go.mod
+  '';
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "Formatter for NASM source files";
+    homepage = "https://github.com/yamnikov-oleg/nasmfmt";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ckie ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/nasmfmt/go.mod b/nixpkgs/pkgs/development/tools/nasmfmt/go.mod
new file mode 100644
index 000000000000..0dfb1521c9e5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/nasmfmt/go.mod
@@ -0,0 +1,3 @@
+module github.com/yamnikov-oleg/nasmfmt
+
+go 1.18
diff --git a/nixpkgs/pkgs/development/tools/nc4nix/default.nix b/nixpkgs/pkgs/development/tools/nc4nix/default.nix
new file mode 100644
index 000000000000..f8fd1bb2830f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/nc4nix/default.nix
@@ -0,0 +1,50 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, nix
+, makeWrapper
+, fetchpatch
+}:
+
+buildGoModule {
+  pname = "nc4nix";
+  version = "unstable-2023-11-06";
+
+  src = fetchFromGitHub {
+    owner = "helsinki-systems";
+    repo = "nc4nix";
+    rev = "47666b418a71c609f8d2b2c2679956c2ac9818e5";
+    hash = "sha256-cXg0emFFAYI1Jtiz+Xilmct3JNiO9cSWUbghyIRQBnY=";
+  };
+
+  patches = [
+    # Switch hash calculation method
+    # https://github.com/helsinki-systems/nc4nix/pull/3
+    (fetchpatch {
+      url = "https://github.com/helsinki-systems/nc4nix/commit/a7bca4793cc12e87d381f12f6f8c00ae2ca02893.patch";
+      sha256 = "sha256-0JxyhSQLtlgLtsMv82wMjQHGdmOoQ2dcPPNAw2cFByE=";
+      name = "switch_hash_calculation_method.patch";
+    })
+  ];
+
+  vendorHash = "sha256-uhINWxFny/OY7M2vV3ehFzP90J6Z8cn5IZHWOuEg91M=";
+
+ nativeBuildInputs = [
+    makeWrapper
+  ];
+
+  postInstall = ''
+    # Depends on nix-prefetch-url
+    wrapProgram $out/bin/nc4nix \
+      --prefix PATH : ${lib.makeBinPath [ nix ]}
+  '';
+
+  meta = with lib; {
+    description = "Packaging helper for Nextcloud apps";
+    homepage = "https://github.com/helsinki-systems/nc4nix";
+    license = licenses.mit;
+    maintainers = with maintainers; [ onny ];
+    platforms = platforms.linux;
+  };
+}
+
diff --git a/nixpkgs/pkgs/development/tools/neil/default.nix b/nixpkgs/pkgs/development/tools/neil/default.nix
new file mode 100644
index 000000000000..96eb34f09170
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/neil/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, makeWrapper
+, babashka
+}:
+
+stdenv.mkDerivation rec {
+  pname = "neil";
+  version = "0.2.63";
+
+  src = fetchFromGitHub {
+    owner = "babashka";
+    repo = "neil";
+    rev = "v${version}";
+    sha256 = "sha256-mcygDOx5yzOW80bv54cPOKl1t443DXFRq4Hb4KYD5e8=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  dontBuild = true;
+
+  installPhase = ''
+    install -D neil $out/bin/neil
+    wrapProgram $out/bin/neil \
+      --prefix PATH : "${lib.makeBinPath [ babashka ]}"
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/babashka/neil";
+    description = "A CLI to add common aliases and features to deps.edn-based projects";
+    license = licenses.mit;
+    platforms = babashka.meta.platforms;
+    maintainers = with maintainers; [ jlesquembre ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/nemiver/default.nix b/nixpkgs/pkgs/development/tools/nemiver/default.nix
new file mode 100644
index 000000000000..7894dfe797d6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/nemiver/default.nix
@@ -0,0 +1,88 @@
+{ lib, stdenv
+, fetchurl
+, fetchpatch
+, pkg-config
+, gnome
+, gtk3
+, libxml2
+, intltool
+, itstool
+, gdb
+, boost
+, sqlite
+, libgtop
+, glibmm
+, gtkmm3
+, vte
+, gtksourceview
+, gsettings-desktop-schemas
+, gtksourceviewmm
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "nemiver";
+  version = "0.9.6";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/nemiver/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "85ab8cf6c4f83262f441cb0952a6147d075c3c53d0687389a3555e946b694ef2";
+  };
+
+  nativeBuildInputs = [
+    libxml2
+    intltool
+    itstool
+    pkg-config
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    gtk3
+    gdb
+    boost
+    sqlite
+    libgtop
+    glibmm
+    gtkmm3
+    vte
+    gtksourceview
+    gtksourceviewmm
+    gsettings-desktop-schemas
+  ];
+
+  patches = [
+    # build fixes
+    (fetchpatch {
+      url = "https://gitlab.gnome.org/GNOME/nemiver/commit/e0e42221ceb77d88be64fac1c09792dc5c9e2f43.patch";
+      sha256 = "1g0ixll6yqfj6ysf50p0c7nmh3lgmb6ds15703q7ibnw7dyidvj8";
+    })
+    (fetchpatch {
+      url = "https://gitlab.gnome.org/GNOME/nemiver/commit/7005393a8c4d914eac9705e7f47818d0f4de3578.patch";
+      sha256 = "1mxb1sdqdj7dm204gja8cdygx8579bjriqqbb7cna9rj0m9c8pjg";
+    })
+    (fetchpatch {
+      url = "https://gitlab.gnome.org/GNOME/nemiver/commit/262cf9657f9c2727a816972b348692adcc666008.patch";
+      sha256 = "03jv6z54b8nzvplplapk4aj206zl1gvnv6iz0mad19g6yvfbw7a7";
+    })
+  ];
+
+  configureFlags = [
+    "--enable-gsettings"
+  ];
+
+  passthru = {
+    updateScript = gnome.updateScript {
+      packageName = "nemiver";
+      versionPolicy = "none";
+    };
+  };
+
+  meta = with lib; {
+    homepage = "https://wiki.gnome.org/Apps/Nemiver";
+    description = "Easy to use standalone C/C++ debugger";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.juliendehos ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/neoload/default.nix b/nixpkgs/pkgs/development/tools/neoload/default.nix
new file mode 100644
index 000000000000..b7e927dbfd07
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/neoload/default.nix
@@ -0,0 +1,97 @@
+{ lib, stdenv, fetchurl, writeTextFile, jre, makeWrapper, fontsConf, licenseAccepted ? false }:
+
+# If you happen to use this software on the XMonad window manager, you will have issues with
+# grey windows, no resizing, menus not showing and other glitches.
+# This can be fixed by setting a different WM name:
+# http://www.haskell.org/haskellwiki/Xmonad/Frequently_asked_questions#Using_SetWMName
+
+if !licenseAccepted then throw ''
+    You have to accept the neoload EULA at
+    https://www.neotys.com/documents/legal/eula/neoload/eula_en.html
+    by setting nixpkgs config option 'neoload.accept_license = true';
+  ''
+else assert licenseAccepted;
+
+# the installer is very picky and demands 1.7.0.07
+let dotInstall4j = path: writeTextFile { name = "dot-install4j"; text = ''
+      JRE_VERSION	${path}	1	7	0	7
+      JRE_INFO	${path}	94
+    ''; };
+
+    responseVarfile = writeTextFile { name = "response.varfile"; text = ''
+      sys.programGroupDisabled$Boolean=false
+      sys.component.Monitor\ Agent$Boolean=true
+      sys.component.Common$Boolean=true
+      sys.component.Controller$Boolean=true
+      sys.languageId=en
+      sys.component.Load\ Generator$Boolean=true
+      sys.installationTypeId=Controller
+      sys.installationDir=INSTALLDIR/lib/neoload
+      sys.symlinkDir=INSTALLDIR/bin
+    ''; };
+
+in stdenv.mkDerivation rec {
+  pname = "neoload";
+  version = "4.1.4";
+
+  src = fetchurl (
+    if stdenv.hostPlatform.system == "x86_64-linux" then
+      { url = "http://neoload.installers.neotys.com/documents/download/${pname}/v${lib.versions.majorMinor version}/${pname}_${lib.replaceStrings ["."] ["_"] version}_linux_x64.sh";
+        sha256 = "199jcf5a0nwfm8wfld2rcjgq64g91vvz2bkmki8dxfzf1yasifcd"; }
+    else
+      { url = "http://neoload.installers.neotys.com/documents/download/${pname}/v${lib.versions.majorMinor version}/${pname}_${lib.replaceStrings ["."] ["_"] version}_linux_x86.sh";
+        sha256 = "1z66jiwcxixsqqwa0f4q8m2p5kna4knq6lic8y8l74dgv25mw912"; } );
+
+  nativeBuildInputs = [ makeWrapper ];
+  phases = [ "installPhase" ];
+
+  # TODO: load generator / monitoring agent only builds
+
+  installPhase = ''
+    mkdir -p $out/lib/neoload
+
+    # the installer wants to use its internal JRE
+    # disable this. The extra spaces are needed because the installer carries
+    # a binary payload, so should not change in size
+    sed -e 's/^if \[ -f jre.tar.gz/if false          /' $src > installer
+    chmod a+x installer
+
+    cp ${dotInstall4j jre} .install4j
+    chmod u+w .install4j
+
+    sed -e "s|INSTALLDIR|$out|" ${responseVarfile} > response.varfile
+
+    export HOME=`pwd`
+    export INSTALL4J_JAVA_HOME=${jre.home}
+    export FONTCONFIG_FILE=${fontsConf}
+    bash -ic './installer -q -varfile response.varfile'
+
+    sed -i 's/Xmx450m/Xmx900m/;s/Xss192k/Xss384k/' $out/lib/neoload/conf/agent.properties
+
+    for i in $out/bin/*; do
+      wrapProgram $i --run 'cp ${dotInstall4j "${jre.home}/jre"} ~/.install4j' \
+                     --run 'chmod u+w ~/.install4j'
+    done
+
+    mkdir -p $out/share/applications
+    for i in $out/lib/neoload/*.desktop; do
+      name=$(basename "$i")
+      sed -e 's|/lib/neoload/bin|/bin|' "$i" > "$out/share/applications/$name"
+    done
+    rm -r $out/lib/neoload/*.desktop $out/lib/neoload/uninstall
+
+  '';
+
+  meta = {
+    description = "Load testing software for Web applications to realistically simulate user activity and analyze server behavior";
+
+    homepage = "https://www.neotys.com/product/overview-neoload.html";
+
+    sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
+    # https://www.neotys.com/documents/legal/eula/neoload/eula_en.html
+    license = lib.licenses.unfree;
+
+    maintainers = [ lib.maintainers.bluescreen303 ];
+    platforms = [ "i686-linux" "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/nest-cli/default.nix b/nixpkgs/pkgs/development/tools/nest-cli/default.nix
new file mode 100644
index 000000000000..7fa9595e1828
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/nest-cli/default.nix
@@ -0,0 +1,41 @@
+{ buildNpmPackage
+, darwin
+, fetchFromGitHub
+, lib
+, python3
+, stdenv
+}:
+
+buildNpmPackage rec {
+  pname = "nest-cli";
+  version = "10.2.1";
+
+  src = fetchFromGitHub {
+    owner = "nestjs";
+    repo = pname;
+    rev = version;
+    hash = "sha256-vnF+ES6RK4iiIJsWUV57DqoLischh+1MlmlK46Z6USY=";
+  };
+
+  npmDepsHash = "sha256-9yd+k+HpARM63/esW+av0zfcuAVsp9Lkfp6hmUQO5Yg=";
+
+  env = {
+    npm_config_build_from_source = true;
+  };
+
+  nativeBuildInputs = [
+    python3
+  ];
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.CoreServices
+  ];
+
+  meta = with lib; {
+    description = "CLI tool for Nest applications";
+    homepage = "https://nestjs.com";
+    license = licenses.mit;
+    mainProgram = "nest";
+    maintainers = [ maintainers.ehllie ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/nodehun/default.nix b/nixpkgs/pkgs/development/tools/nodehun/default.nix
new file mode 100644
index 000000000000..cef41d918791
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/nodehun/default.nix
@@ -0,0 +1,64 @@
+{ buildNpmPackage
+, darwin
+, fetchFromGitHub
+, lib
+, nodePackages
+, nodejs
+, python3
+, stdenv
+}:
+
+buildNpmPackage {
+  pname = "nodehun";
+  version = "3.0.2";
+
+  src = fetchFromGitHub {
+    owner = "Wulf";
+    repo = "nodehun";
+    rev = "03c9dcf1fcd965031a68553ccaf6487d1fe87f79";
+    hash = "sha256-MoY95lSIQK1K4aIlMdPm93YxJuez9HYx2zlUhHvDao0=";
+  };
+
+  patches = [
+    # fsevents is needed on Darwin, but its dependency "nan" in the upstream package-lock.json
+    # is too old for the Node 18.x in Nixpkgs.
+    # This patch is generated by checking out the upstream source and running
+    # npm update nan --lockfile-version 1
+    ./update-nan.patch
+  ];
+
+  npmDepsHash = "sha256-mV6rWNf2p2w4H0ESUT0/Ybtx9YEdvO5l2gCvlWFXK+U=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [ darwin.apple_sdk.frameworks.CoreServices ];
+  nativeBuildInputs = [ nodePackages.node-gyp python3 ]
+    ++ lib.optionals stdenv.isDarwin [ darwin.cctools ];
+
+  postInstall = ''
+    # Only keep the necessary parts of build/Release to reduce closure size
+    cd $out/lib/node_modules/nodehun
+    mv build build_old
+    mkdir build
+    cp -r build_old/Release build/
+    rm -rf build_old
+    rm -rf build/Release/.deps
+    # Remove a development script to eliminate runtime dependency on node
+    rm node_modules/node-addon-api/tools/conversion.js
+  '';
+
+  doInstallCheck = true;
+  nativeCheckInputs = [ nodejs ];
+  postInstallCheck = ''
+    # Smoke check: require() works
+    export NODE_PATH=$out/lib/node_modules
+    echo 'require("nodehun")' | node -
+  '';
+
+  disallowedReferences = [ nodejs ];
+
+  meta = with lib; {
+    description = "The Hunspell binding for NodeJS that exposes as much of Hunspell as possible and also adds new features";
+    homepage = "https://github.com/Wulf/nodehun";
+    license = licenses.mit;
+    maintainers = [ maintainers.thomasjm ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/nodehun/update-nan.patch b/nixpkgs/pkgs/development/tools/nodehun/update-nan.patch
new file mode 100644
index 000000000000..e01f1e15c0e6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/nodehun/update-nan.patch
@@ -0,0 +1,150 @@
+diff --git a/package-lock.json b/package-lock.json
+index 3c577dd..64be338 100644
+--- a/package-lock.json
++++ b/package-lock.json
+@@ -932,10 +932,6 @@
+             "concat-map": "0.0.1"
+           }
+         },
+-        "chownr": {
+-          "version": "1.1.1",
+-          "bundled": true
+-        },
+         "code-point-at": {
+           "version": "1.1.0",
+           "bundled": true,
+@@ -987,13 +983,6 @@
+           "dev": true,
+           "optional": true
+         },
+-        "fs-minipass": {
+-          "version": "1.2.5",
+-          "bundled": true,
+-          "requires": {
+-            "minipass": "^2.2.1"
+-          }
+-        },
+         "fs.realpath": {
+           "version": "1.0.0",
+           "bundled": true,
+@@ -1100,22 +1089,6 @@
+           "dev": true,
+           "optional": true
+         },
+-        "minipass": {
+-          "version": "2.3.5",
+-          "bundled": true,
+-          "optional": true,
+-          "requires": {
+-            "safe-buffer": "^5.1.2",
+-            "yallist": "^3.0.0"
+-          }
+-        },
+-        "minizlib": {
+-          "version": "1.2.1",
+-          "bundled": true,
+-          "requires": {
+-            "minipass": "^2.2.1"
+-          }
+-        },
+         "mkdirp": {
+           "version": "0.5.1",
+           "bundled": true,
+@@ -1300,6 +1273,7 @@
+         "safe-buffer": {
+           "version": "5.1.2",
+           "bundled": true,
++          "dev": true,
+           "optional": true
+         },
+         "safer-buffer": {
+@@ -1332,24 +1306,24 @@
+           "dev": true,
+           "optional": true
+         },
+-        "string-width": {
+-          "version": "1.0.2",
++        "string_decoder": {
++          "version": "1.1.1",
+           "bundled": true,
+           "dev": true,
+           "optional": true,
+           "requires": {
+-            "code-point-at": "^1.0.0",
+-            "is-fullwidth-code-point": "^1.0.0",
+-            "strip-ansi": "^3.0.0"
++            "safe-buffer": "~5.1.0"
+           }
+         },
+-        "string_decoder": {
+-          "version": "1.1.1",
++        "string-width": {
++          "version": "1.0.2",
+           "bundled": true,
+           "dev": true,
+           "optional": true,
+           "requires": {
+-            "safe-buffer": "~5.1.0"
++            "code-point-at": "^1.0.0",
++            "is-fullwidth-code-point": "^1.0.0",
++            "strip-ansi": "^3.0.0"
+           }
+         },
+         "strip-ansi": {
+@@ -1387,11 +1361,6 @@
+           "bundled": true,
+           "dev": true,
+           "optional": true
+-        },
+-        "yallist": {
+-          "version": "3.0.3",
+-          "bundled": true,
+-          "optional": true
+         }
+       }
+     },
+@@ -2096,9 +2065,9 @@
+       "dev": true
+     },
+     "nan": {
+-      "version": "2.14.0",
+-      "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz",
+-      "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==",
++      "version": "2.17.0",
++      "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz",
++      "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==",
+       "dev": true,
+       "optional": true
+     },
+@@ -2768,6 +2737,15 @@
+         }
+       }
+     },
++    "string_decoder": {
++      "version": "1.1.1",
++      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
++      "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
++      "dev": true,
++      "requires": {
++        "safe-buffer": "~5.1.0"
++      }
++    },
+     "string-width": {
+       "version": "2.1.1",
+       "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+@@ -2798,15 +2776,6 @@
+         "function-bind": "^1.1.1"
+       }
+     },
+-    "string_decoder": {
+-      "version": "1.1.1",
+-      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+-      "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+-      "dev": true,
+-      "requires": {
+-        "safe-buffer": "~5.1.0"
+-      }
+-    },
+     "strip-ansi": {
+       "version": "4.0.0",
+       "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
diff --git a/nixpkgs/pkgs/development/tools/nodenv/default.nix b/nixpkgs/pkgs/development/tools/nodenv/default.nix
new file mode 100644
index 000000000000..657492966cf2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/nodenv/default.nix
@@ -0,0 +1,44 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+}:
+
+stdenv.mkDerivation rec {
+  pname = "nodenv";
+  version = "1.4.1";
+
+  src = fetchFromGitHub {
+    owner = "nodenv";
+    repo = "nodenv";
+    rev = "v${version}";
+    sha256 = "sha256-S7Uld7wiVJjwuvfupBodIAIOO2c/ywEmFfhEHVOCcCc=";
+  };
+
+  buildPhase = ''
+    runHook preBuild
+
+    bash src/configure
+    make -C src
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out
+    cp -r libexec $out/
+    cp -r bin $out/
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Manage multiple NodeJS versions";
+    homepage = "https://github.com/nodenv/nodenv/";
+    changelog = "https://github.com/nodenv/nodenv/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ alexnortung ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/norminette/default.nix b/nixpkgs/pkgs/development/tools/norminette/default.nix
new file mode 100644
index 000000000000..0be1693d5d2a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/norminette/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, python3Packages
+, fetchFromGitHub
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "norminette";
+  version = "3.3.55";
+
+  src = fetchFromGitHub {
+    owner = "42School";
+    repo = pname;
+    rev = "refs/tags/${version}";
+    hash = "sha256-SaXOUpYEbc2QhZ8aKS+JeJ22MSXZ8HZuRmVQ9fWk7tM=";
+  };
+
+  nativeCheckInputs = with python3Packages; [
+    pytestCheckHook
+  ];
+
+  preCheck = ''
+    export PYTHONPATH=norminette:$PYTHONPATH
+  '';
+
+  meta = with lib; {
+    description = "Open source norminette to apply 42's norme to C files";
+    homepage = "https://github.com/42School/norminette";
+    license = licenses.mit;
+    maintainers = with maintainers; [ wegank ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/npm-check/default.nix b/nixpkgs/pkgs/development/tools/npm-check/default.nix
new file mode 100644
index 000000000000..3e1ad56e4414
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/npm-check/default.nix
@@ -0,0 +1,30 @@
+{ buildNpmPackage
+, fetchFromGitHub
+, lib
+}:
+
+buildNpmPackage rec {
+  pname = "npm-check";
+  version = "6.0.1";
+
+  src = fetchFromGitHub {
+    owner = "dylang";
+    repo = "npm-check";
+    rev = "v${version}";
+    hash = "sha256-F7bMvGqOxJzoaw25VR6D90UNwT8HxZ4PZhhQEvQFDn4=";
+  };
+
+  npmDepsHash = "sha256-KRLgLWikcCWMF8/cOxThom6DHE9ar6WO/9HtosJQnLE=";
+
+  npmFlags = [ "--legacy-peer-deps" ];
+
+  dontNpmBuild = true;
+
+  meta = with lib; {
+    description = "Check for outdated, incorrect, and unused dependencies";
+    homepage = "https://github.com/dylang/npm-check";
+    changelog = "https://github.com/dylang/npm-check/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = [ maintainers.thomasjm ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/nsis/default.nix b/nixpkgs/pkgs/development/tools/nsis/default.nix
new file mode 100644
index 000000000000..e27c43135bad
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/nsis/default.nix
@@ -0,0 +1,76 @@
+{ lib
+, stdenv
+, symlinkJoin
+, fetchurl
+, fetchzip
+, scons
+, zlib
+, libiconv
+}:
+
+stdenv.mkDerivation rec {
+  pname = "nsis";
+  version = "3.06.1";
+
+  src =
+    fetchurl {
+      url = "mirror://sourceforge/project/nsis/NSIS%203/${version}/nsis-${version}-src.tar.bz2";
+      sha256 = "1w1z2m982l6j8lw8hy91c3979wbnqglcf4148f9v79vl32znhpcv";
+    };
+  srcWinDistributable =
+    fetchzip {
+      url = "mirror://sourceforge/project/nsis/NSIS%203/${version}/nsis-${version}.zip";
+      sha256 = "04qm9jqbcybpwcrjlksggffdyafzwxxcaz9xhjw8w5rb95x7lw5q";
+    };
+
+  postUnpack = ''
+    mkdir -p $out/share/nsis
+    cp -avr ${srcWinDistributable}/{Contrib,Include,Plugins,Stubs} \
+      $out/share/nsis
+    chmod -R u+w $out/share/nsis
+  '';
+
+  nativeBuildInputs = [ scons ];
+  buildInputs = [ zlib ] ++ lib.optionals stdenv.isDarwin [ libiconv ];
+
+  CPPPATH = symlinkJoin {
+     name = "nsis-includes";
+     paths = [ zlib.dev ] ++ lib.optionals stdenv.isDarwin [ libiconv ];
+  };
+
+  LIBPATH = symlinkJoin {
+    name = "nsis-libs";
+    paths = [ zlib ] ++ lib.optionals stdenv.isDarwin [ libiconv ];
+  };
+
+  sconsFlags = [
+    "SKIPSTUBS=all"
+    "SKIPPLUGINS=all"
+    "SKIPUTILS=all"
+    "SKIPMISC=all"
+    "NSIS_CONFIG_CONST_DATA=no"
+  ] ++ lib.optional stdenv.isDarwin "APPEND_LINKFLAGS=-liconv";
+
+  preBuild = ''
+    sconsFlagsArray+=(
+      "PATH=$PATH"
+      "CC=$CC"
+      "CXX=$CXX"
+      "APPEND_CPPPATH=$CPPPATH/include"
+      "APPEND_LIBPATH=$LIBPATH/lib"
+    )
+  '';
+
+  prefixKey = "PREFIX=";
+  installTargets = [ "install-compiler" ];
+
+  meta = with lib; {
+    description = "A free scriptable win32 installer/uninstaller system that doesn't suck and isn't huge";
+    homepage = "https://nsis.sourceforge.io/";
+    license = licenses.zlib;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ pombeirp ];
+    mainProgram = "makensis";
+    broken = stdenv.isDarwin;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/nwjs/default.nix b/nixpkgs/pkgs/development/tools/nwjs/default.nix
new file mode 100644
index 000000000000..9b1d662ae756
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/nwjs/default.nix
@@ -0,0 +1,147 @@
+{ alsa-lib
+, at-spi2-core
+, atk
+, autoPatchelfHook
+, buildEnv
+, cairo
+, cups
+, dbus
+, expat
+, fetchurl
+, ffmpeg
+, fontconfig
+, freetype
+, gdk-pixbuf
+, glib
+, gtk3
+, lib
+, libcap
+, libdrm
+, libnotify
+, libuuid
+, libxcb
+, libxkbcommon
+, makeWrapper
+, mesa
+, nspr
+, nss
+, pango
+, sdk ? false
+, sqlite
+, stdenv
+, systemd
+, udev
+, wrapGAppsHook
+, xorg
+}:
+
+let
+  bits = if stdenv.hostPlatform.system == "x86_64-linux" then "x64" else "ia32";
+
+  nwEnv = buildEnv {
+    name = "nwjs-env";
+    paths = [
+      alsa-lib
+      at-spi2-core
+      atk
+      cairo
+      cups
+      dbus
+      expat
+      fontconfig
+      freetype
+      gdk-pixbuf
+      glib
+      gtk3
+      libcap
+      libdrm
+      libnotify
+      libxkbcommon
+      mesa
+      nspr
+      nss
+      pango
+      xorg.libX11
+      xorg.libXScrnSaver
+      xorg.libXcomposite
+      xorg.libXcursor
+      xorg.libXdamage
+      xorg.libXext
+      xorg.libXfixes
+      xorg.libXi
+      xorg.libXrandr
+      xorg.libXrender
+      xorg.libXtst
+      xorg.libxshmfence
+      # libnw-specific (not chromium dependencies)
+      ffmpeg
+      libxcb
+      # chromium runtime deps (dlopen’d)
+      libuuid
+      sqlite
+      udev
+    ];
+
+    extraOutputsToInstall = [ "lib" "out" ];
+  };
+
+  version = "0.84.0";
+in
+stdenv.mkDerivation {
+  pname = "nwjs";
+  inherit version;
+
+  src =
+    let flavor = if sdk then "sdk-" else "";
+    in fetchurl {
+      url = "https://dl.nwjs.io/v${version}/nwjs-${flavor}v${version}-linux-${bits}.tar.gz";
+      hash = {
+        "sdk-ia32" = "sha256-uy6WZuA5b79yACSe3wiKiEeMb6K/z84cSeQDrKFUUdE=";
+        "sdk-x64" = "sha256-xI/YMHg5RWYh9XCLskSkuDwemH77U43Fzb8C9+fS9wE=";
+        "ia32" = "sha256-Sc9geGuwl9TIdLrKr97Wz2h4S+AEgP3DAd12Toyk7b8=";
+        "x64" = "sha256-VIygMzCPTKzLr47bG1DYy/zj0OxsjGcms0G1BkI/TEI=";
+      }."${flavor + bits}";
+    };
+
+  nativeBuildInputs = [
+    autoPatchelfHook
+    (wrapGAppsHook.override { inherit makeWrapper; })
+  ];
+
+  buildInputs = [ nwEnv ];
+  appendRunpaths = map (pkg: (lib.getLib pkg) + "/lib") [ nwEnv stdenv.cc.libc stdenv.cc.cc ];
+
+  preFixup = ''
+    gappsWrapperArgs+=(
+      --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations}}"
+    )
+  '';
+
+  installPhase = ''
+      runHook preInstall
+
+      mkdir -p $out/share/nwjs
+      cp -R * $out/share/nwjs
+      find $out/share/nwjs
+
+      ln -s ${lib.getLib systemd}/lib/libudev.so $out/share/nwjs/libudev.so.0
+
+      mkdir -p $out/bin
+      ln -s $out/share/nwjs/nw $out/bin
+
+      mkdir $out/lib
+      ln -s $out/share/nwjs/lib/libnw.so $out/lib/libnw.so
+
+      runHook postInstall
+    '';
+
+  meta = with lib; {
+    description = "An app runtime based on Chromium and node.js";
+    homepage = "https://nwjs.io/";
+    platforms = [ "i686-linux" "x86_64-linux" ];
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    maintainers = [ maintainers.mikaelfangel ];
+    mainProgram = "nw";
+    license = licenses.bsd3;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/camlidl/default.nix b/nixpkgs/pkgs/development/tools/ocaml/camlidl/default.nix
new file mode 100644
index 000000000000..22104d3d4dc0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/camlidl/default.nix
@@ -0,0 +1,55 @@
+{ lib, stdenv, fetchFromGitHub, ocaml, writeText }:
+
+lib.throwIfNot (lib.versionAtLeast ocaml.version "4.03")
+  "camlidl is not available for OCaml ${ocaml.version}"
+
+stdenv.mkDerivation rec {
+  pname = "ocaml${ocaml.version}-camlidl";
+  version = "1.12";
+
+  src = fetchFromGitHub {
+    owner = "xavierleroy";
+    repo = "camlidl";
+    rev = "camlidl112";
+    hash = "sha256-ONPQMDFaU2OzFa5jgMVKx+ZRKk8ZgBZyk42vDvbM7E0=";
+  };
+
+  nativeBuildInputs = [ ocaml ];
+
+  # build fails otherwise
+  enableParallelBuilding = false;
+
+  preBuild = ''
+    mv config/Makefile.unix config/Makefile
+    substituteInPlace config/Makefile --replace BINDIR=/usr/local/bin BINDIR=$out
+    substituteInPlace config/Makefile --replace 'OCAMLLIB=$(shell $(OCAMLC) -where)' OCAMLLIB=$out/lib/ocaml/${ocaml.version}/site-lib/camlidl
+    substituteInPlace config/Makefile --replace CPP=cpp CPP=${stdenv.cc}/bin/cpp
+    substituteInPlace lib/Makefile --replace '$(OCAMLLIB)/Makefile.config' "${ocaml}/lib/ocaml/Makefile.config"
+    mkdir -p $out/lib/ocaml/${ocaml.version}/site-lib/camlidl/caml
+    mkdir -p $out/lib/ocaml/${ocaml.version}/site-lib/camlidl/stublibs
+  '';
+
+  postInstall = ''
+    cat >$out/lib/ocaml/${ocaml.version}/site-lib/camlidl/META <<EOF
+    # Courtesy of GODI
+    description = "Stub generator"
+    version = "${version}"
+    archive(byte) = "com.cma"
+    archive(native) = "com.cmxa"
+    EOF
+    mkdir -p $out/bin
+    ln -s $out/camlidl $out/bin
+  '';
+
+  setupHook = writeText "setupHook.sh" ''
+    export NIX_CFLAGS_COMPILE+=" -isystem $1/lib/ocaml/${ocaml.version}/site-lib/camlidl"
+    export NIX_LDFLAGS+=" -L $1/lib/ocaml/${ocaml.version}/site-lib/camlidl"
+  '';
+
+  meta = {
+    description = "A stub code generator and COM binding for Objective Caml";
+    homepage = "https://xavierleroy.org/camlidl/";
+    license = lib.licenses.lgpl21;
+    maintainers = [ lib.maintainers.roconnor ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/camlp4/default.nix b/nixpkgs/pkgs/development/tools/ocaml/camlp4/default.nix
new file mode 100644
index 000000000000..dd25dd864cee
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/camlp4/default.nix
@@ -0,0 +1,97 @@
+{ lib, stdenv, fetchzip, which, ocaml, ocamlbuild }:
+
+if lib.versionAtLeast ocaml.version "4.15"
+then throw "camlp4 is not available for OCaml ${ocaml.version}"
+else
+
+let param = {
+  "4.02" = {
+     version = "4.02+6";
+     sha256 = "06yl4q0qazl7g25b0axd1gdkfd4qpqzs1gr5fkvmkrcbz113h1hj"; };
+  "4.03" = {
+     version = "4.03+1";
+     sha256 = "1f2ndch6f1m4fgnxsjb94qbpwjnjgdlya6pard44y6n0dqxi1wsq"; };
+  "4.04" = {
+     version = "4.04+1";
+     sha256 = "1ad7rygqjxrc1im95gw9lp8q83nhdaf383f2808f1p63yl42xm7k"; };
+  "4.05" = {
+     version = "4.05+1";
+     sha256 = "0wm795hpwvwpib9c9z6p8kw2fh7p7b2hml6g15z8zry3y7w738sv"; };
+  "4.06" = {
+     version = "4.06+1";
+     sha256 = "0fazfw2l7wdmbwnqc22xby5n4ri1wz27lw9pfzhsbcdrighykysf"; };
+  "4.07" = {
+     version = "4.07+1";
+     sha256 = "0cxl4hkqcvspvkx4f2k83217rh6051fll9i2yz7cw6m3bq57mdvl"; };
+  "4.08" = {
+     version = "4.08+1";
+     sha256 = "0qplawvxwai25bi27niw2cgz2al01kcnkj8wxwhxslpi21z6pyx1"; };
+  "4.09" = {
+     version = "4.09+1";
+     sha256 = "1gr33x6xs1rs0bpyq4vzyfxd6vn47jfkg8imi81db2r0cbs0kxx1"; };
+  "4.10" = {
+     version = "4.10+1";
+     sha256 = "093bc1c28wid5li0jwglnd4p3csxw09fmbs9ffybq2z41a5mgay6"; };
+  "4.11" = {
+     version = "4.11+1";
+     sha256 = "0sn7f6im940qh0ixmx1k738xrwwdvy9g7r19bv5218jb6mh0g068"; };
+  "4.12" = {
+     version = "4.12+1";
+     sha256 = "1cfk5ppnd511vzsr9gc0grxbafmh0m3m897aij198rppzxps5kyz"; };
+  "4.13" = {
+     version = "4.13+1";
+     sha256 = "0fzxa1zdhk74mlxpin7p90flks6sp4gkc0mfclmj9zak15rii55n"; };
+  "4.14" = {
+     version = "4.14+1";
+     sha256 = "sha256-cPN3GioZT/Zt6uzbjGUPEGVJcPQdsAnCkU/AQoPfvuo="; };
+  }.${ocaml.meta.branch};
+in
+
+stdenv.mkDerivation rec {
+  pname = "camlp4";
+  inherit (param) version;
+
+  src = fetchzip {
+    url = "https://github.com/ocaml/camlp4/archive/${version}.tar.gz";
+    inherit (param) sha256;
+  };
+
+  strictDeps = true;
+
+  nativeBuildInputs = [ which ocaml ocamlbuild ];
+
+  # build fails otherwise
+  enableParallelBuilding = false;
+
+  dontAddPrefix = true;
+
+  preConfigure = ''
+    # increase stack space for spacetime variant of the compiler
+    # https://github.com/ocaml/ocaml/issues/7435
+    # but disallowed by darwin sandbox
+    ulimit -s unlimited || true
+
+    configureFlagsArray=(
+      --bindir=$out/bin
+      --libdir=$out/lib/ocaml/${ocaml.version}/site-lib
+      --pkgdir=$out/lib/ocaml/${ocaml.version}/site-lib
+    )
+  '';
+
+  postConfigure = ''
+    substituteInPlace camlp4/META.in \
+    --replace +camlp4 $out/lib/ocaml/${ocaml.version}/site-lib/camlp4
+  '';
+
+  makeFlags = [ "all" ];
+
+  installTargets = [ "install" "install-META" ];
+
+  dontStrip = true;
+
+  meta = with lib; {
+    description = "A software system for writing extensible parsers for programming languages";
+    homepage = "https://github.com/ocaml/camlp4";
+    platforms = ocaml.meta.platforms or [];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/camlp5/default.nix b/nixpkgs/pkgs/development/tools/ocaml/camlp5/default.nix
new file mode 100644
index 000000000000..d0308f31f7ee
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/camlp5/default.nix
@@ -0,0 +1,68 @@
+{ lib, stdenv, fetchFromGitHub, ocaml, findlib, perl, makeWrapper
+, rresult, bos, re, camlp-streams
+, legacy ? false
+}:
+
+if lib.versionOlder ocaml.version "4.02"
+then throw "camlp5 is not available for OCaml ${ocaml.version}"
+else
+
+let params =
+  if lib.versionAtLeast ocaml.version "4.12" && !legacy
+  then rec {
+    version = "8.02.01";
+
+    src = fetchFromGitHub {
+      owner = "camlp5";
+      repo = "camlp5";
+      rev = version;
+      hash = "sha256-qSA2559vqWLU+0ns7LPUGI2K5f8sfu+QQ0sCH8sR6To=";
+    };
+
+    nativeBuildInputs = [ makeWrapper ocaml findlib perl ];
+    buildInputs = [ bos re rresult ];
+    propagatedBuildInputs = [ camlp-streams ];
+
+  } else rec {
+    version = "7.14";
+    src = fetchFromGitHub {
+      owner = "camlp5";
+      repo = "camlp5";
+      rev = "rel${builtins.replaceStrings [ "." ] [ "" ] version}";
+      sha256 = "1dd68bisbpqn5lq2pslm582hxglcxnbkgfkwhdz67z4w9d5nvr7w";
+    };
+    nativeBuildInputs = [ ocaml perl ];
+  }
+; in
+
+stdenv.mkDerivation (params // {
+
+  pname = "ocaml${ocaml.version}-camlp5";
+
+  strictDeps = true;
+
+  prefixKey = "-prefix ";
+
+  preConfigure = ''
+    configureFlagsArray=(--strict --libdir $out/lib/ocaml/${ocaml.version}/site-lib)
+    patchShebangs ./config/find_stuffversion.pl etc/META.pl
+  '';
+
+  buildFlags = [ "world.opt" ];
+
+  dontStrip = true;
+
+  meta = with lib; {
+    description = "Preprocessor-pretty-printer for OCaml";
+    longDescription = ''
+      Camlp5 is a preprocessor and pretty-printer for OCaml programs.
+      It also provides parsing and printing tools.
+    '';
+    homepage = "https://camlp5.github.io/";
+    license = licenses.bsd3;
+    platforms = ocaml.meta.platforms or [];
+    maintainers = with maintainers; [
+      maggesi vbgl
+    ];
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/ocaml/cppo/default.nix b/nixpkgs/pkgs/development/tools/ocaml/cppo/default.nix
new file mode 100644
index 000000000000..2f057ada92b9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/cppo/default.nix
@@ -0,0 +1,69 @@
+{ lib, stdenv, fetchFromGitHub, ocaml, findlib, ocamlbuild
+, buildDunePackage
+}:
+
+let
+  pname = "cppo";
+
+  meta = with lib; {
+    description = "The C preprocessor for OCaml";
+    longDescription = ''
+      Cppo is an equivalent of the C preprocessor targeted at the OCaml language and its variants.
+    '';
+    homepage = "https://github.com/ocaml-community/${pname}";
+    maintainers = [ maintainers.vbgl ];
+    license = licenses.bsd3;
+  };
+
+in
+
+if lib.versionAtLeast ocaml.version "4.02" then
+
+buildDunePackage rec {
+  inherit pname;
+  version = "1.6.9";
+
+  duneVersion = "3";
+
+  src = fetchFromGitHub {
+    owner = "ocaml-community";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-NdN2QnVRfRq9hEcSAnO2Wha7icDlf2Zg4JQqoEWmErE=";
+  };
+
+  doCheck = true;
+
+  inherit meta;
+}
+
+else
+
+let version = "1.5.0"; in
+
+stdenv.mkDerivation {
+
+  name = "${pname}-${version}";
+
+  src = fetchFromGitHub {
+    owner = "mjambon";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1xqldjz9risndnabvadw41fdbi5sa2hl4fnqls7j9xfbby1izbg8";
+  };
+
+  strictDeps = true;
+
+  nativeBuildInputs = [ ocaml findlib ocamlbuild ];
+
+  inherit meta;
+
+  createFindlibDestdir = true;
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  preBuild = ''
+    mkdir -p $out/bin
+  '';
+
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/cppo/ocamlbuild.nix b/nixpkgs/pkgs/development/tools/ocaml/cppo/ocamlbuild.nix
new file mode 100644
index 000000000000..3f1f436b076c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/cppo/ocamlbuild.nix
@@ -0,0 +1,20 @@
+{ lib, buildDunePackage, cppo, ocamlbuild }:
+
+if lib.versionOlder (lib.getVersion cppo) "1.6"
+then cppo
+else
+
+buildDunePackage {
+  pname = "cppo_ocamlbuild";
+
+  inherit (cppo) version src;
+
+  minimalOCamlVersion = "4.03";
+  duneVersion = "3";
+
+  propagatedBuildInputs = [ ocamlbuild ];
+
+  meta = cppo.meta // {
+    description = "Plugin to use cppo with ocamlbuild";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/crunch/default.nix b/nixpkgs/pkgs/development/tools/ocaml/crunch/default.nix
new file mode 100644
index 000000000000..d7b4d64096ca
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/crunch/default.nix
@@ -0,0 +1,32 @@
+{ lib, buildDunePackage, fetchurl, ocaml, cmdliner, ptime }:
+
+buildDunePackage rec {
+
+  pname = "crunch";
+  version = "3.3.1";
+
+  minimalOCamlVersion = "4.08";
+
+  src = fetchurl {
+    url = "https://github.com/mirage/ocaml-crunch/releases/download/v${version}/crunch-${version}.tbz";
+    sha256 = "sha256-LFug1BELy7dzHLpOr7bESnSHw/iMGtR0AScbaf+o7Wo=";
+  };
+
+  buildInputs = [ cmdliner ];
+
+  propagatedBuildInputs = [ ptime ];
+
+  outputs = [ "lib" "bin" "out" ];
+
+  installPhase = ''
+    dune install --prefix=$bin --libdir=$lib/lib/ocaml/${ocaml.version}/site-lib/
+  '';
+
+  meta = {
+    homepage = "https://github.com/mirage/ocaml-crunch";
+    description = "Convert a filesystem into a static OCaml module";
+    license = lib.licenses.isc;
+    maintainers = [ lib.maintainers.vbgl ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/dune-release/default.nix b/nixpkgs/pkgs/development/tools/ocaml/dune-release/default.nix
new file mode 100644
index 000000000000..16c65b3ae243
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/dune-release/default.nix
@@ -0,0 +1,58 @@
+{ lib, buildDunePackage, fetchurl, makeWrapper, fetchpatch
+, curly, fmt, bos, cmdliner, re, rresult, logs, fpath
+, odoc, opam-format, opam-core, opam-state, yojson, astring
+, opam, git, findlib, mercurial, bzip2, gnutar, coreutils
+, alcotest
+}:
+
+# don't include dune as runtime dep, so user can
+# choose between dune and dune_2
+let runtimeInputs = [ opam findlib git mercurial bzip2 gnutar coreutils ];
+in buildDunePackage rec {
+  pname = "dune-release";
+  version = "2.0.0";
+  duneVersion = "3";
+
+  minimalOCamlVersion = "4.06";
+
+  src = fetchurl {
+    url = "https://github.com/ocamllabs/${pname}/releases/download/${version}/${pname}-${version}.tbz";
+    hash = "sha256-u8TgaoeDaDLenu3s1Km/Kh85WHMtvUy7C7Q+OY588Ss=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ] ++ runtimeInputs;
+  buildInputs = [ curly fmt cmdliner re opam-format opam-state opam-core
+                  rresult logs odoc bos yojson astring fpath ];
+  nativeCheckInputs = [ odoc ];
+  checkInputs = [ alcotest ] ++ runtimeInputs;
+  doCheck = true;
+
+  postPatch = ''
+    # remove check for curl in PATH, since curly is patched
+    # to have a fixed path to the binary in nix store
+    sed -i '/must_exist (Cmd\.v "curl"/d' lib/github.ml
+  '';
+
+  preCheck = ''
+    export HOME=$TMPDIR
+    git config --global user.email "nix-builder@nixos.org"
+    git config --global user.name "Nix Builder"
+
+    # it fails when it tries to reference "./make_check_deterministic.exe"
+    rm -r tests/bin/check
+  '';
+
+  # tool specific env vars have been deprecated, use PATH
+  preFixup = ''
+    wrapProgram $out/bin/dune-release \
+      --prefix PATH : "${lib.makeBinPath runtimeInputs}"
+  '';
+
+  meta = with lib; {
+    description = "Release dune packages in opam";
+    homepage = "https://github.com/ocamllabs/dune-release";
+    changelog = "https://github.com/tarides/dune-release/blob/${version}/CHANGES.md";
+    license = licenses.isc;
+    maintainers = with maintainers; [ sternenseemann ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/dune/1.nix b/nixpkgs/pkgs/development/tools/ocaml/dune/1.nix
new file mode 100644
index 000000000000..d6d3863afab8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/dune/1.nix
@@ -0,0 +1,37 @@
+{ stdenv, lib, fetchurl, ocaml, findlib, ncurses }:
+
+if lib.versionOlder ocaml.version "4.02"
+|| lib.versionAtLeast ocaml.version "4.12"
+then throw "dune 1 is not available for OCaml ${ocaml.version}"
+else
+
+stdenv.mkDerivation rec {
+  pname = "dune";
+  version = "1.11.4";
+  src = fetchurl {
+    url = "https://github.com/ocaml/dune/releases/download/${version}/dune-build-info-${version}.tbz";
+    sha256 = "1rkc8lqw30ifjaz8d81la6i8j05ffd0whpxqsbg6dci16945zjvp";
+  };
+
+  nativeBuildInputs = [ ocaml findlib ];
+  buildInputs = [ ncurses ];
+  strictDeps = true;
+
+  buildFlags = [ "release" ];
+  makeFlags = [
+    "PREFIX=${placeholder "out"}"
+    "LIBDIR=$(OCAMLFIND_DESTDIR)"
+  ];
+
+  dontAddPrefix = true;
+  dontAddStaticConfigureFlags = true;
+  configurePlatforms = [];
+
+  meta = with lib; {
+    homepage = "https://dune.build/";
+    description = "A composable build system";
+    maintainers = [ maintainers.vbgl maintainers.marsam ];
+    license = licenses.mit;
+    inherit (ocaml.meta) platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/dune/2.nix b/nixpkgs/pkgs/development/tools/ocaml/dune/2.nix
new file mode 100644
index 000000000000..65f8c7eda3ca
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/dune/2.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchurl, ocaml, findlib }:
+
+if lib.versionOlder ocaml.version "4.08"
+then throw "dune 2 is not available for OCaml ${ocaml.version}"
+else
+
+stdenv.mkDerivation rec {
+  pname = "dune";
+  version = "2.9.3";
+
+  src = fetchurl {
+    url = "https://github.com/ocaml/dune/releases/download/${version}/dune-site-${version}.tbz";
+    sha256 = "sha256:1ml8bxym8sdfz25bx947al7cvsi2zg5lcv7x9w6xb01cmdryqr9y";
+  };
+
+  nativeBuildInputs = [ ocaml findlib ];
+  strictDeps = true;
+
+  buildFlags = [ "release" ];
+
+  dontAddPrefix = true;
+  dontAddStaticConfigureFlags = true;
+  configurePlatforms = [];
+
+  installFlags = [ "PREFIX=${placeholder "out"}" "LIBDIR=$(OCAMLFIND_DESTDIR)" ];
+
+  meta = {
+    homepage = "https://dune.build/";
+    description = "A composable build system";
+    changelog = "https://github.com/ocaml/dune/raw/${version}/CHANGES.md";
+    maintainers = [ lib.maintainers.vbgl lib.maintainers.marsam ];
+    license = lib.licenses.mit;
+    inherit (ocaml.meta) platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/dune/3.nix b/nixpkgs/pkgs/development/tools/ocaml/dune/3.nix
new file mode 100644
index 000000000000..5f4816c79896
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/dune/3.nix
@@ -0,0 +1,44 @@
+{ lib, stdenv, fetchurl, ocaml, findlib, darwin, ocaml-lsp }:
+
+if lib.versionOlder ocaml.version "4.08"
+then throw "dune 3 is not available for OCaml ${ocaml.version}"
+else
+
+stdenv.mkDerivation rec {
+  pname = "dune";
+  version = "3.13.1";
+
+  src = fetchurl {
+    url = "https://github.com/ocaml/dune/releases/download/${version}/dune-${version}.tbz";
+    hash = "sha256-L+CvG0z5hknHVVtVXZ9PgdXe2HcYqJ30mI4hSlbIqRY=";
+  };
+
+  nativeBuildInputs = [ ocaml findlib ];
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.CoreServices
+  ];
+
+  strictDeps = true;
+
+  buildFlags = [ "release" ];
+
+  dontAddPrefix = true;
+  dontAddStaticConfigureFlags = true;
+  configurePlatforms = [];
+
+  installFlags = [ "PREFIX=${placeholder "out"}" "LIBDIR=$(OCAMLFIND_DESTDIR)" ];
+
+  passthru.tests = {
+    inherit ocaml-lsp;
+  };
+
+  meta = {
+    homepage = "https://dune.build/";
+    description = "A composable build system";
+    changelog = "https://github.com/ocaml/dune/raw/${version}/CHANGES.md";
+    maintainers = [ lib.maintainers.vbgl lib.maintainers.marsam ];
+    license = lib.licenses.mit;
+    inherit (ocaml.meta) platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/findlib/default.nix b/nixpkgs/pkgs/development/tools/ocaml/findlib/default.nix
new file mode 100644
index 000000000000..ac4050d9f283
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/findlib/default.nix
@@ -0,0 +1,80 @@
+{ lib, stdenv, fetchurl, ncurses, ocaml, writeText }:
+
+stdenv.mkDerivation rec {
+  pname = "ocaml${ocaml.version}-findlib";
+  version = "1.9.6";
+
+  src = fetchurl {
+    url = "http://download.camlcity.org/download/findlib-${version}.tar.gz";
+    sha256 = "sha256-LfmWJ5rha2Bttf9Yefk9v63giY258aPoL3+EX6opMKI=";
+  };
+
+  nativeBuildInputs = [ ocaml ];
+  buildInputs = lib.optional (lib.versionOlder ocaml.version "4.07") ncurses;
+
+  patches = [ ./ldconf.patch ./install_topfind.patch ];
+
+  dontAddPrefix=true;
+  dontAddStaticConfigureFlags = true;
+  configurePlatforms = [];
+
+  configureFlags = [
+      "-bindir" "${placeholder "out"}/bin"
+      "-mandir" "${placeholder "out"}/share/man"
+      "-sitelib" "${placeholder "out"}/lib/ocaml/${ocaml.version}/site-lib"
+      "-config" "${placeholder "out"}/etc/findlib.conf"
+  ];
+
+  buildFlags = [ "all" "opt" ];
+
+  setupHook = writeText "setupHook.sh" ''
+    addOCamlPath () {
+        if test -d "''$1/lib/ocaml/${ocaml.version}/site-lib"; then
+            export OCAMLPATH="''${OCAMLPATH-}''${OCAMLPATH:+:}''$1/lib/ocaml/${ocaml.version}/site-lib/"
+        fi
+        if test -d "''$1/lib/ocaml/${ocaml.version}/site-lib/stublibs"; then
+            export CAML_LD_LIBRARY_PATH="''${CAML_LD_LIBRARY_PATH-}''${CAML_LD_LIBRARY_PATH:+:}''$1/lib/ocaml/${ocaml.version}/site-lib/stublibs"
+        fi
+    }
+    exportOcamlDestDir () {
+        export OCAMLFIND_DESTDIR="''$out/lib/ocaml/${ocaml.version}/site-lib/"
+    }
+    createOcamlDestDir () {
+        if test -n "''${createFindlibDestdir-}"; then
+          mkdir -p $OCAMLFIND_DESTDIR
+        fi
+    }
+    detectOcamlConflicts () {
+      local conflict
+      conflict="$(ocamlfind list |& grep "has multiple definitions" || true)"
+      if [[ -n "$conflict" ]]; then
+        echo "Conflicting ocaml packages detected";
+        echo "$conflict"
+        echo "Set dontDetectOcamlConflicts to true to disable this check."
+        exit 1
+      fi
+    }
+
+    # run for every buildInput
+    addEnvHooks "$targetOffset" addOCamlPath
+    # run before installPhase, even without buildInputs, and not in nix-shell
+    preInstallHooks+=(createOcamlDestDir)
+    # run even in nix-shell, and even without buildInputs
+    addEnvHooks "$hostOffset" exportOcamlDestDir
+    # runs after all calls to addOCamlPath
+    if [[ -z "''${dontDetectOcamlConflicts-}" ]]; then
+      postHooks+=("detectOcamlConflicts")
+    fi
+  '';
+
+  meta = {
+    description = "O'Caml library manager";
+    homepage = "http://projects.camlcity.org/projects/findlib.html";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ maggesi vbmithr ];
+    mainProgram = "ocamlfind";
+    platforms = ocaml.meta.platforms or [];
+  };
+}
+
+
diff --git a/nixpkgs/pkgs/development/tools/ocaml/findlib/install_topfind.patch b/nixpkgs/pkgs/development/tools/ocaml/findlib/install_topfind.patch
new file mode 100644
index 000000000000..c8bb6f8f7a33
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/findlib/install_topfind.patch
@@ -0,0 +1,13 @@
+--- a/src/findlib/Makefile
++++ b/src/findlib/Makefile
+@@ -123,8 +123,8 @@
+ install: all
+ 	$(INSTALLDIR) "$(DESTDIR)$(prefix)$(OCAML_SITELIB)/$(NAME)"
+ 	$(INSTALLDIR) "$(DESTDIR)$(prefix)$(OCAMLFIND_BIN)"
+-	test $(INSTALL_TOPFIND) -eq 0 || $(INSTALLDIR) "$(DESTDIR)$(prefix)$(OCAML_CORE_STDLIB)"
+-	test $(INSTALL_TOPFIND) -eq 0 || $(INSTALLFILE) topfind "$(DESTDIR)$(prefix)$(OCAML_CORE_STDLIB)/"
++	test $(INSTALL_TOPFIND) -eq 0 || $(INSTALLDIR) "$(DESTDIR)$(prefix)$(OCAML_SITELIB)"
++	test $(INSTALL_TOPFIND) -eq 0 || $(INSTALLFILE) topfind "$(DESTDIR)$(prefix)$(OCAML_SITELIB)/"
+ 	files=`$(SH) $(TOP)/tools/collect_files $(TOP)/Makefile.config \
+ 	findlib.cmi findlib.mli findlib.cma findlib.cmxa findlib$(LIB_SUFFIX) findlib.cmxs \
+ 	findlib_config.cmi findlib_config.ml topfind.cmi topfind.mli \
diff --git a/nixpkgs/pkgs/development/tools/ocaml/findlib/ldconf.patch b/nixpkgs/pkgs/development/tools/ocaml/findlib/ldconf.patch
new file mode 100644
index 000000000000..7718cb673925
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/findlib/ldconf.patch
@@ -0,0 +1,8 @@
+Setting paths to search for dnynmic libraries isn't very useful in Nix.
+
+--- findlib-1.2.6/findlib.conf.in	2010-08-17 14:50:28.000000000 -0400
++++ findlib-1.2.6/findlib.conf.in	2010-11-24 09:46:55.179648354 -0500
+@@ -1,2 +1,3 @@
+ destdir="@SITELIB@"
+ path="@SITELIB@"
++ldconf="ignore"
diff --git a/nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/Makefile.conf.diff b/nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/Makefile.conf.diff
new file mode 100644
index 000000000000..e6fc96038ff8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/Makefile.conf.diff
@@ -0,0 +1,10 @@
+--- old/Makefile.conf	2014-05-19 16:53:09.263564921 +0200
++++ new/Makefile.conf	2014-05-19 16:53:42.213152994 +0200
+@@ -1,6 +1,6 @@
+ 
+ # Where binaries are installed:
+-BINDIR := `dirname  \`which ocamlc\``
++BINDIR := $(out)/bin
+ 
+ ####
+ 
diff --git a/nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/compiler.nix b/nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/compiler.nix
new file mode 100644
index 000000000000..5af30cc25506
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/compiler.nix
@@ -0,0 +1,28 @@
+{ lib, fetchurl, buildDunePackage
+, cmdliner, yojson, ppxlib, findlib
+, menhir, menhirLib, sedlex
+}:
+
+buildDunePackage rec {
+  pname = "js_of_ocaml-compiler";
+  version = "5.6.0";
+  minimalOCamlVersion = "4.08";
+
+  src = fetchurl {
+    url = "https://github.com/ocsigen/js_of_ocaml/releases/download/${version}/js_of_ocaml-${version}.tbz";
+    hash = "sha256-hDXwJjOhfvbIoaMXGmU3/bIGwAxPt9TKVCUN9tr2wj8=";
+  };
+
+  nativeBuildInputs = [ menhir ];
+  buildInputs = [ cmdliner ppxlib ];
+
+  propagatedBuildInputs = [ menhirLib yojson findlib sedlex ];
+
+  meta = {
+    description = "Compiler from OCaml bytecode to Javascript";
+    homepage = "https://ocsigen.org/js_of_ocaml/";
+    license = lib.licenses.gpl2;
+    maintainers = [ lib.maintainers.vbgl ];
+    mainProgram = "js_of_ocaml";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/default.nix b/nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/default.nix
new file mode 100644
index 000000000000..71e35f749e83
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/default.nix
@@ -0,0 +1,15 @@
+{ buildDunePackage, js_of_ocaml-compiler
+, ppxlib, uchar
+}:
+
+buildDunePackage {
+  pname = "js_of_ocaml";
+
+  inherit (js_of_ocaml-compiler) version src;
+
+  buildInputs = [ ppxlib ];
+
+  propagatedBuildInputs = [ js_of_ocaml-compiler uchar ];
+
+  meta = builtins.removeAttrs js_of_ocaml-compiler.meta [ "mainProgram" ];
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/lwt.nix b/nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/lwt.nix
new file mode 100644
index 000000000000..90d92415a9fc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/lwt.nix
@@ -0,0 +1,15 @@
+{ buildDunePackage, js_of_ocaml-compiler, js_of_ocaml-ppx
+, js_of_ocaml, ocaml_lwt, lwt_log
+}:
+
+buildDunePackage {
+  pname = "js_of_ocaml-lwt";
+
+  inherit (js_of_ocaml-compiler) version src;
+
+  buildInputs = [ js_of_ocaml-ppx ];
+
+  propagatedBuildInputs = [ js_of_ocaml ocaml_lwt lwt_log ];
+
+  meta = builtins.removeAttrs js_of_ocaml-compiler.meta [ "mainProgram" ];
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/ocamlbuild.nix b/nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/ocamlbuild.nix
new file mode 100644
index 000000000000..861dc22c8038
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/ocamlbuild.nix
@@ -0,0 +1,24 @@
+{ lib, buildDunePackage, fetchurl
+, ocamlbuild
+}:
+
+buildDunePackage rec {
+  pname = "js_of_ocaml-ocamlbuild";
+  version = "5.0";
+
+  minimalOCamlVersion = "4.03";
+
+  src = fetchurl {
+    url = "https://github.com/ocsigen/js_of_ocaml-ocamlbuild/releases/download/${version}/js_of_ocaml-ocamlbuild-${version}.tbz";
+    sha256 = "sha256-qlm8vxzie8sqPrd6iiwf8X6d2+DyQOOhmMoc67ChwHs=";
+  };
+
+  propagatedBuildInputs = [ ocamlbuild ];
+
+  meta = {
+    description = "An ocamlbuild plugin to compile to JavaScript";
+    homepage = "https://github.com/ocsigen/js_of_ocaml-ocamlbuild";
+    license = lib.licenses.lgpl2Only;
+    maintainers = [ lib.maintainers.vbgl ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/ppx.nix b/nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/ppx.nix
new file mode 100644
index 000000000000..34aecbf10bf3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/ppx.nix
@@ -0,0 +1,15 @@
+{ buildDunePackage, js_of_ocaml-compiler
+, ppxlib
+, js_of_ocaml
+}:
+
+buildDunePackage {
+  pname = "js_of_ocaml-ppx";
+
+  inherit (js_of_ocaml-compiler) version src;
+
+  buildInputs = [ js_of_ocaml ];
+  propagatedBuildInputs = [ ppxlib ];
+
+  meta = builtins.removeAttrs js_of_ocaml-compiler.meta [ "mainProgram" ];
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/ppx_deriving_json.nix b/nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/ppx_deriving_json.nix
new file mode 100644
index 000000000000..9ed0f5afcde7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/ppx_deriving_json.nix
@@ -0,0 +1,13 @@
+{ buildDunePackage, js_of_ocaml-compiler
+, js_of_ocaml, ppxlib
+}:
+
+buildDunePackage {
+  pname = "js_of_ocaml-ppx_deriving_json";
+
+  inherit (js_of_ocaml-compiler) version src;
+
+  propagatedBuildInputs = [ js_of_ocaml ppxlib ];
+
+  meta = builtins.removeAttrs js_of_ocaml-compiler.meta [ "mainProgram" ];
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/toplevel.nix b/nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/toplevel.nix
new file mode 100644
index 000000000000..814aab16cb00
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/toplevel.nix
@@ -0,0 +1,11 @@
+{ lib, buildDunePackage, js_of_ocaml-compiler, ppxlib }:
+
+buildDunePackage {
+  pname = "js_of_ocaml-toplevel";
+  inherit (js_of_ocaml-compiler) src version;
+  buildInputs = [ ppxlib ];
+  propagatedBuildInputs = [ js_of_ocaml-compiler ];
+  meta = js_of_ocaml-compiler.meta // {
+    mainProgram = "jsoo_mktop";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/tyxml.nix b/nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/tyxml.nix
new file mode 100644
index 000000000000..2dcde8bef45d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/tyxml.nix
@@ -0,0 +1,16 @@
+{ buildDunePackage, js_of_ocaml-compiler
+, js_of_ocaml-ppx
+, js_of_ocaml, reactivedata, tyxml
+}:
+
+buildDunePackage {
+  pname = "js_of_ocaml-tyxml";
+
+  inherit (js_of_ocaml-compiler) version src;
+
+  buildInputs = [ js_of_ocaml-ppx ];
+
+  propagatedBuildInputs = [ js_of_ocaml reactivedata tyxml ];
+
+  meta = builtins.removeAttrs js_of_ocaml-compiler.meta [ "mainProgram" ];
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/merlin/4.x.nix b/nixpkgs/pkgs/development/tools/ocaml/merlin/4.x.nix
new file mode 100644
index 000000000000..3bccf4162be6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/merlin/4.x.nix
@@ -0,0 +1,95 @@
+{ lib
+, substituteAll
+, fetchurl
+, ocaml
+, dune_3
+, buildDunePackage
+, yojson
+, csexp
+, merlin-lib
+, dot-merlin-reader
+, jq
+, menhir
+, menhirLib
+, menhirSdk
+}:
+
+let
+  # Each releases of Merlin support a limited range of versions of OCaml.
+  merlinVersions = {
+    "4.12.0" = "4.7-412";
+    "4.12.1" = "4.7-412";
+    "4.13.0" = "4.7-413";
+    "4.13.1" = "4.7-413";
+    "4.14.0" = "4.13-414";
+    "4.14.1" = "4.13-414";
+    "5.0.0" = "4.12-500";
+    "5.1.0" = "4.13-501";
+    "5.1.1" = "4.13.1-501";
+  };
+
+  hashes = {
+    "4.7-412" = "sha256-0U3Ia7EblKULNy8AuXFVKACZvGN0arYJv7BWiBRgT0Y=";
+    "4.7-413" = "sha256-aVmGWS4bJBLuwsxDKsng/n0A6qlyJ/pnDTcYab/5gyU=";
+    "4.12-500" = "sha256-j49R7KVzNKlXDL7WibTHxPG4VSOVv0uaz5/yMZZjkH8=";
+    "4.13-414" = "sha256-AlzxqTuh5AkW9dnPIv51abv7r0A/VOS3JOT5IHix2wM=";
+    "4.13-501" = "sha256-G/VrI+qBVj2wxuB2qE9P1M73IvDmqmTrBFAA6mp+NRE=";
+    "4.13.1-501" = "sha256-NVfgX3DFsQghApEgWilCgr5O2WSkwKtenZZFSJ1wwa0=";
+  };
+
+  version = lib.getAttr ocaml.version merlinVersions;
+in
+
+if !lib.hasAttr ocaml.version merlinVersions
+then builtins.throw "merlin is not available for OCaml ${ocaml.version}"
+else
+
+buildDunePackage {
+  pname = "merlin";
+  inherit version;
+  duneVersion = "3";
+
+  src = fetchurl {
+    url = "https://github.com/ocaml/merlin/releases/download/v${version}/merlin-${version}.tbz";
+    sha256 = hashes."${version}";
+  };
+
+  patches = [
+    (substituteAll {
+      src = ./fix-paths.patch;
+      dot_merlin_reader = "${dot-merlin-reader}/bin/dot-merlin-reader";
+      dune = "${dune_3}/bin/dune";
+    })
+  ];
+
+  strictDeps = true;
+
+  nativeBuildInputs = [
+    menhir
+    jq
+  ];
+  buildInputs = [
+    dot-merlin-reader
+    yojson
+    (if lib.versionAtLeast version "4.7-414"
+     then merlin-lib
+     else csexp)
+    menhirSdk
+    menhirLib
+  ];
+
+  doCheck = false;
+  checkPhase = ''
+    runHook preCheck
+    patchShebangs tests/merlin-wrapper
+    dune runtest # filtering with -p disables tests
+    runHook postCheck
+  '';
+
+  meta = with lib; {
+    description = "An editor-independent tool to ease the development of programs in OCaml";
+    homepage = "https://github.com/ocaml/merlin";
+    license = licenses.mit;
+    maintainers = [ maintainers.vbgl maintainers.sternenseemann ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/merlin/default.nix b/nixpkgs/pkgs/development/tools/ocaml/merlin/default.nix
new file mode 100644
index 000000000000..cff881d1c97e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/merlin/default.nix
@@ -0,0 +1,33 @@
+{ lib, fetchurl, buildDunePackage, substituteAll
+, dot-merlin-reader, dune_2, yojson, csexp, result, menhirSdk }:
+
+buildDunePackage rec {
+  pname = "merlin";
+  version = "3.8.0";
+
+  src = fetchurl {
+    url = "https://github.com/ocaml/merlin/releases/download/v${version}/merlin-${version}.tbz";
+    sha256 = "sha256-wmBGNwXL3BduF4o1sUXtAOUHJ4xmMvsWAxl/QdNj/28=";
+  };
+
+  minimalOCamlVersion = "4.02.3";
+
+  patches = [
+    (substituteAll {
+      src = ./fix-paths.patch;
+      dot_merlin_reader = "${dot-merlin-reader}/bin/dot-merlin-reader";
+      dune = "${dune_2}/bin/dune";
+    })
+  ];
+
+  strictDeps = true;
+
+  buildInputs = [ dot-merlin-reader yojson csexp result menhirSdk ];
+
+  meta = with lib; {
+    description = "An editor-independent tool to ease the development of programs in OCaml";
+    homepage = "https://github.com/ocaml/merlin";
+    license = licenses.mit;
+    maintainers = [ maintainers.vbgl ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/merlin/dot-merlin-reader.nix b/nixpkgs/pkgs/development/tools/ocaml/merlin/dot-merlin-reader.nix
new file mode 100644
index 000000000000..89af62ed70e6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/merlin/dot-merlin-reader.nix
@@ -0,0 +1,23 @@
+{ lib, fetchurl, yojson, csexp, findlib, buildDunePackage, merlin-lib, merlin, result }:
+
+buildDunePackage rec {
+  pname = "dot-merlin-reader";
+
+  duneVersion = "3";
+
+  inherit (merlin) version src;
+
+  minimalOCamlVersion = "4.06";
+
+  buildInputs = [ findlib ]
+  ++ (if lib.versionAtLeast version "4.7-414"
+  then [ merlin-lib ]
+  else [ yojson csexp result ]);
+
+  meta = with lib; {
+    description = "Reads config files for merlin";
+    homepage = "https://github.com/ocaml/merlin";
+    license = licenses.mit;
+    maintainers = [ maintainers.hongchangwu ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/merlin/fix-paths.patch b/nixpkgs/pkgs/development/tools/ocaml/merlin/fix-paths.patch
new file mode 100644
index 000000000000..05fafacc09c0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/merlin/fix-paths.patch
@@ -0,0 +1,15 @@
+--- a/src/kernel/mconfig_dot.ml
++++ b/src/kernel/mconfig_dot.ml
+@@ -126,10 +126,10 @@ module Configurator = struct
+       let prog, args =
+         match cfg with
+         | Dot_merlin ->
+-          let prog = "dot-merlin-reader" in
++          let prog = "@dot_merlin_reader@" in
+           prog, [| prog |]
+         | Dune ->
+-          let prog = "dune" in
++          let prog = "@dune@" in
+           prog, [| prog; "ocaml-merlin"; "--no-print-directory" |]
+       in
+       log ~title:"get_config" "Using %s configuration provider." (to_string cfg);
diff --git a/nixpkgs/pkgs/development/tools/ocaml/merlin/lib.nix b/nixpkgs/pkgs/development/tools/ocaml/merlin/lib.nix
new file mode 100644
index 000000000000..27c8035a5e3b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/merlin/lib.nix
@@ -0,0 +1,14 @@
+{ lib, buildDunePackage, merlin, csexp }:
+
+buildDunePackage {
+  pname = "merlin-lib";
+  inherit (merlin) version src;
+
+  minimalOCamlVersion = "4.14";
+
+  propagatedBuildInputs = [ csexp ];
+
+  meta = merlin.meta // {
+    description = "Merlin’s libraries";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/oasis/default.nix b/nixpkgs/pkgs/development/tools/ocaml/oasis/default.nix
new file mode 100644
index 000000000000..11b7c550d7c4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/oasis/default.nix
@@ -0,0 +1,47 @@
+{ lib, stdenv, fetchurl, ocaml, findlib, ocamlbuild, ocamlmod, ocamlify }:
+
+stdenv.mkDerivation {
+  version = "0.4.11";
+  pname = "ocaml-oasis";
+
+  src = fetchurl {
+    url = "https://download.ocamlcore.org/oasis/oasis/0.4.11/oasis-0.4.11.tar.gz";
+    hash = "sha256-GLc97vTtbpqDM38ks7vi3tZSaLP/cwn8wA0l5X4dwS4=";
+  };
+
+  createFindlibDestdir = true;
+
+  strictDeps = true;
+
+  nativeBuildInputs =
+    [
+      ocaml findlib ocamlbuild ocamlmod ocamlify
+    ];
+
+  buildInputs = [ ocamlbuild ];
+
+  configurePhase = ''
+    runHook preConfigure
+    ocaml setup.ml -configure --prefix $out
+    runHook postConfigure
+  '';
+  buildPhase = ''
+    runHook preBuild
+    ocaml setup.ml -build
+    runHook postBuild
+  '';
+  installPhase = ''
+    runHook preInstall
+    ocaml setup.ml -install
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Configure, build and install system for OCaml projects";
+    homepage = "https://github.com/ocaml/oasis";
+    license = licenses.lgpl21;
+    maintainers = with maintainers; [ vbgl maggesi ];
+    mainProgram = "oasis";
+    inherit (ocaml.meta) platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/obelisk/default.nix b/nixpkgs/pkgs/development/tools/ocaml/obelisk/default.nix
new file mode 100644
index 000000000000..938fa24374af
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/obelisk/default.nix
@@ -0,0 +1,25 @@
+{ lib, fetchFromGitHub, ocamlPackages, menhir }:
+
+ocamlPackages.buildDunePackage rec {
+  pname = "obelisk";
+  version = "0.6.0";
+  duneVersion = "3";
+  src = fetchFromGitHub {
+    owner = "Lelio-Brun";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1jjaqa2b7msl9qd3x7j34vdh1s9alq8hbvzk8a5srb4yyfyim15b";
+  };
+
+  strictDeps = true;
+
+  nativeBuildInputs = [ menhir ];
+  buildInputs = with ocamlPackages; [ re ];
+
+  meta = {
+    description = "A simple tool which produces pretty-printed output from a Menhir parser file (.mly)";
+    license = lib.licenses.mit;
+    maintainers = [ lib.maintainers.vbgl ];
+    homepage = "https://github.com/Lelio-Brun/Obelisk";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/obuild/default.nix b/nixpkgs/pkgs/development/tools/ocaml/obuild/default.nix
new file mode 100644
index 000000000000..94848a79360c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/obuild/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchFromGitHub, ocamlPackages }:
+
+stdenv.mkDerivation rec {
+  pname = "obuild";
+  version = "0.1.11";
+
+  src = fetchFromGitHub {
+    owner = "ocaml-obuild";
+    repo = "obuild";
+    rev = "obuild-v${version}";
+    hash = "sha256-me9/FVD7S0uPIpFZzcxDfYKVWn9ifq6JryBAGCo681I=";
+  };
+
+  strictDeps = true;
+
+  nativeBuildInputs = with ocamlPackages; [ ocaml findlib ];
+
+  buildPhase = ''
+    patchShebangs ./bootstrap
+    ./bootstrap
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp dist/build/obuild/obuild dist/build/obuild-from-oasis/obuild-from-oasis dist/build/obuild-simple/obuild-simple $out/bin/
+  '';
+
+  meta = {
+    homepage = "https://github.com/ocaml-obuild/obuild";
+    inherit (ocamlPackages.ocaml.meta) platforms;
+    description = "Simple package build system for OCaml";
+    license = lib.licenses.lgpl21;
+    maintainers = with lib.maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/ocaml-recovery-parser/default.nix b/nixpkgs/pkgs/development/tools/ocaml/ocaml-recovery-parser/default.nix
new file mode 100644
index 000000000000..11564d4e985c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/ocaml-recovery-parser/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, fetchFromGitHub
+, ocaml
+, buildDunePackage
+, fix
+, menhirLib
+, menhirSdk
+, gitUpdater
+}:
+
+lib.throwIf (lib.versionAtLeast ocaml.version "5.0")
+  "ocaml-recovery-parser is not available for OCaml ${ocaml.version}"
+
+buildDunePackage rec {
+  pname = "ocaml-recovery-parser";
+  version = "0.2.4";
+
+  minimalOCamlVersion = "4.08";
+  duneVersion = "3";
+
+  src = fetchFromGitHub {
+    owner = "serokell";
+    repo = pname;
+    rev = version;
+    sha256 = "gOKvjmlcHDOgsTllj2sPL/qNtW/rlNlEVIrosahNsAQ=";
+  };
+
+  propagatedBuildInputs = [
+    fix
+    menhirLib
+    menhirSdk
+  ];
+
+  passthru.updateScript = gitUpdater { };
+
+  meta = with lib; {
+    description = "A simple fork of OCaml parser with support for error recovery";
+    homepage = "https://github.com/serokell/ocaml-recovery-parser";
+    license = with licenses; [ lgpl2Only mit mpl20 ];
+    maintainers = with maintainers; [ romildo ];
+    mainProgram = "menhir-recover";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/ocaml-top/default.nix b/nixpkgs/pkgs/development/tools/ocaml/ocaml-top/default.nix
new file mode 100644
index 000000000000..57b457bff293
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/ocaml-top/default.nix
@@ -0,0 +1,22 @@
+{ lib, fetchFromGitHub, ocamlPackages }:
+
+with ocamlPackages; buildDunePackage rec {
+  pname = "ocaml-top";
+  version = "1.2.0";
+
+  src = fetchFromGitHub {
+    owner = "OCamlPro";
+    repo = "ocaml-top";
+    rev = version;
+    hash = "sha256-xmPGGB/zUpfeAxUIhR1PhfoESAJq7sTpqHuf++EH3Lw=";
+  };
+
+  buildInputs = [ lablgtk3-sourceview3 ocp-index ];
+
+  meta = {
+    homepage = "https://www.typerex.org/ocaml-top.html";
+    license = lib.licenses.gpl3;
+    description = "A simple cross-platform OCaml code editor built for top-level evaluation";
+    maintainers = with lib.maintainers; [ vbgl ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/ocamlbuild/default.nix b/nixpkgs/pkgs/development/tools/ocaml/ocamlbuild/default.nix
new file mode 100644
index 000000000000..7ce9a59866be
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/ocamlbuild/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchFromGitHub, ocaml, findlib }:
+stdenv.mkDerivation rec {
+  pname = "ocaml${ocaml.version}-ocamlbuild";
+  version = "0.14.3";
+
+  src = fetchFromGitHub {
+    owner = "ocaml";
+    repo = "ocamlbuild";
+    rev = version;
+    sha256 = "sha256-dfcNu4ugOYu/M0rRQla7lXum/g1UzncdLGmpPYo0QUM=";
+  };
+
+  createFindlibDestdir = true;
+
+  nativeBuildInputs = [ ocaml findlib ];
+  strictDeps = true;
+
+  # x86_64-unknown-linux-musl-ld: -r and -pie may not be used together
+  hardeningDisable = lib.optional stdenv.hostPlatform.isStatic "pie";
+
+  configurePhase = ''
+  runHook preConfigure
+
+  make -f configure.make Makefile.config \
+    "OCAMLBUILD_PREFIX=$out" \
+    "OCAMLBUILD_BINDIR=$out/bin" \
+    "OCAMLBUILD_MANDIR=$out/share/man" \
+    "OCAMLBUILD_LIBDIR=$OCAMLFIND_DESTDIR"
+
+  runHook postConfigure
+  '';
+
+  meta = with lib; {
+    description = "A build system with builtin rules to easily build most OCaml projects";
+    homepage = "https://github.com/ocaml/ocamlbuild/";
+    license = licenses.lgpl2;
+    maintainers = with maintainers; [ vbgl ];
+    mainProgram = "ocamlbuild";
+    inherit (ocaml.meta) platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/ocamlify/default.nix b/nixpkgs/pkgs/development/tools/ocaml/ocamlify/default.nix
new file mode 100644
index 000000000000..7dd6843d52f9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/ocamlify/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchurl, ocaml, findlib, ocamlbuild }:
+
+lib.throwIf (lib.versionAtLeast ocaml.version "5.0")
+  "ocamlify is not available for OCaml ${ocaml.version}"
+
+stdenv.mkDerivation rec {
+  pname = "ocamlify";
+  version = "0.0.2";
+
+  src = fetchurl {
+    url = "https://forge.ocamlcore.org/frs/download.php/1209/${pname}-${version}.tar.gz";
+    sha256 = "1f0fghvlbfryf5h3j4as7vcqrgfjb4c8abl5y0y5h069vs4kp5ii";
+  };
+
+  strictDeps = true;
+
+  nativeBuildInputs = [ ocaml findlib ocamlbuild ];
+
+  configurePhase = ''
+    substituteInPlace src/ocamlify.ml --replace 'OCamlifyConfig.version' '"0.0.2"'
+  '';
+
+  buildPhase = "ocamlbuild src/ocamlify.native";
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mv _build/src/ocamlify.native $out/bin/ocamlify
+  '';
+
+  dontStrip = true;
+
+  meta = {
+    homepage = "https://forge.ocamlcore.org/projects/ocamlmod/ocamlmod";
+    description = "Generate OCaml modules from source files";
+    platforms = ocaml.meta.platforms or [];
+    license = lib.licenses.lgpl21;
+    maintainers = with lib.maintainers; [
+      maggesi
+    ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/ocamlmod/default.nix b/nixpkgs/pkgs/development/tools/ocaml/ocamlmod/default.nix
new file mode 100644
index 000000000000..c9e57fa6a09c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/ocamlmod/default.nix
@@ -0,0 +1,44 @@
+{ lib, stdenv, fetchurl, ocaml, findlib, ocamlbuild, ounit }:
+
+let
+  # ounit is only available for OCaml >= 4.08
+  doCheck = lib.versionAtLeast ocaml.version "4.08";
+in
+
+lib.throwIf (lib.versionAtLeast ocaml.version "5.0")
+  "ocamlmod is not available for OCaml ≥ 5.0"
+
+stdenv.mkDerivation {
+  pname = "ocamlmod";
+  version = "0.0.9";
+
+  src = fetchurl {
+    url = "https://forge.ocamlcore.org/frs/download.php/1702/ocamlmod-0.0.9.tar.gz";
+    sha256 = "0cgp9qqrq7ayyhddrmqmq1affvfqcn722qiakjq4dkywvp67h4aa";
+  };
+
+  strictDeps = !doCheck;
+
+  nativeBuildInputs = [ ocaml findlib ocamlbuild ];
+
+  configurePhase = "ocaml setup.ml -configure --prefix $out"
+    + lib.optionalString doCheck " --enable-tests";
+  buildPhase     = "ocaml setup.ml -build";
+  installPhase   = "ocaml setup.ml -install";
+
+  inherit doCheck;
+  nativeCheckInputs = [ ounit ];
+
+  checkPhase = "ocaml setup.ml -test";
+
+  dontStrip = true;
+
+  meta = {
+    homepage = "https://forge.ocamlcore.org/projects/ocamlmod/ocamlmod";
+    description = "Generate OCaml modules from source files";
+    platforms = ocaml.meta.platforms or [];
+    maintainers = with lib.maintainers; [
+      maggesi
+    ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/ocamlscript/Makefile.patch b/nixpkgs/pkgs/development/tools/ocaml/ocamlscript/Makefile.patch
new file mode 100644
index 000000000000..e26993f760ae
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/ocamlscript/Makefile.patch
@@ -0,0 +1,67 @@
+diff --git a/Makefile b/Makefile
+index 894e94d..9adc44b 100644
+--- a/Makefile
++++ b/Makefile
+@@ -17,7 +17,7 @@ ifndef BINDIR
+ endif
+ export BINDIR
+ 
+-PACKS = unix str
++PACKS = unix str findlib
+ # PP = camlp4o -I . -parser pa_opt.cmo
+ # export PP
+ 
+diff --git a/main.ml b/main.ml
+index 288526a..b67c5e9 100644
+--- a/main.ml
++++ b/main.ml
+@@ -247,6 +247,11 @@ let write_header ~pos ~source ~source_option ~verbose ~prog_file lines =
+ 		    Sys.getcwd ())
+     | `File script_name -> "", get_dir script_name in
+ 
++  let findlibdir =
++    Filename.(
++      concat (Findlib.package_directory "findlib") parent_dir_name
++    ) in
++
+   let file, oc = Filename.open_temp_file "meta" ".ml" in
+   fprintf oc "\
+ #%i %S;;
+@@ -255,6 +260,7 @@ let () =
+   try Topdirs.dir_directory (Sys.getenv \"OCAML_TOPLEVEL_PATH\")
+   with Not_found -> ()
+ ;;
++#directory \"%s\";;
+ #use \"topfind\";;
+ #require \"ocamlscript\";;
+ Ocamlscript.Common.verbose := %s;;
+@@ -263,7 +269,7 @@ Ocamlscript.Common.script_dir := %S;;
+ open Ocamlscript;;
+ open Utils;;
+ #%i %S;;\n"
+-    pos source verbose script_dir extra_args trash pos source;
++    pos source findlibdir verbose script_dir extra_args trash pos source;
+ 
+   List.iter (output_line oc) lines;
+ 
+@@ -550,6 +556,7 @@ let main () =
+       exit compilation_status
+ 
+ let _ =
++  Findlib.init ();
+   try main ()
+   with Failure s ->
+     eprintf "ocamlscript: %s\n%!" s;
+diff --git a/ocaml.ml b/ocaml.ml
+index a1824c6..b8f287e 100644
+--- a/ocaml.ml
++++ b/ocaml.ml
+@@ -14,7 +14,7 @@ let ocamlfind = ref "ocamlfind"
+ let packs = ref []         (* findlib packages *)
+ let sources = ref []       (* extra sources *)
+ let use_ocamllex = ref false (* preprocess with ocamllex before camlp4 *)
+-let use_camlp4 = ref true  (* by default camlp4 is used *)
++let use_camlp4 = ref false  (* by default camlp4 is not used *)
+ let use_ocamlc = ref false (* by default we want native code *)
+ let use_ocamlfind = ref false (* used only if necessary *)
+ let revised = ref false    (* use this to use the revised syntax *)
diff --git a/nixpkgs/pkgs/development/tools/ocaml/ocamlscript/default.nix b/nixpkgs/pkgs/development/tools/ocaml/ocamlscript/default.nix
new file mode 100644
index 000000000000..8277f4adb06d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/ocamlscript/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchFromGitHub, ocaml, findlib }:
+
+lib.throwIfNot (lib.versionAtLeast ocaml.version "4.08")
+  "ocamlscript is not available for OCaml ${ocaml.version}"
+
+stdenv.mkDerivation rec {
+  pname = "ocaml${ocaml.version}-ocamlscript";
+  version = "3.0.0";
+  src = fetchFromGitHub {
+    owner = "mjambon";
+    repo = "ocamlscript";
+    rev = "v${version}";
+    sha256 = "sha256:10xz8jknlmcgnf233nahd04q98ijnxpijhpvb8hl7sv94dgkvpql";
+  };
+
+  nativeBuildInputs = [ ocaml findlib ];
+
+  patches = [ ./Makefile.patch ];
+
+  buildFlags = [ "PREFIX=$(out)" ];
+  installFlags = [ "PREFIX=$(out)" ];
+
+  preInstall = "mkdir -p $out/bin";
+  createFindlibDestdir = true;
+
+  meta = with lib; {
+    inherit (src.meta) homepage;
+    license = licenses.boost;
+    inherit (ocaml.meta) platforms;
+    description = "Natively-compiled OCaml scripts";
+    maintainers = [ maintainers.vbgl ];
+    mainProgram = "ocamlscript";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/ocp-build/default.nix b/nixpkgs/pkgs/development/tools/ocaml/ocp-build/default.nix
new file mode 100644
index 000000000000..33f9a123b744
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/ocp-build/default.nix
@@ -0,0 +1,47 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, ocaml, findlib, ncurses, cmdliner_1_0, re }:
+
+lib.throwIf (lib.versionAtLeast ocaml.version "5.0")
+  "ocp-build is not available for OCaml ${ocaml.version}"
+
+stdenv.mkDerivation rec {
+  pname = "ocaml${ocaml.version}-ocp-build";
+  version = "1.99.21";
+
+  src = fetchFromGitHub {
+    owner = "OCamlPro";
+    repo = "ocp-build";
+    rev = "v${version}";
+    sha256 = "1641xzik98c7xnjwxpacijd6d9jzx340fmdn6i372z8h554jjlg9";
+  };
+
+  patches = [
+    # Fix compilation with OCaml 4.12
+    (fetchpatch {
+      url = "https://github.com/OCamlPro/ocp-build/commit/104e4656ca6dba9edb03b62539c9f1e10abcaae8.patch";
+      sha256 = "0sbyi4acig9q8x1ky4hckfg5pm2nad6zasi51ravaf1spgl148c2";
+    })
+  ];
+
+  strictDeps = true;
+
+  nativeBuildInputs = [ ocaml findlib ];
+  buildInputs =  [ cmdliner_1_0 re ];
+  propagatedBuildInputs = [ ncurses ];
+  preInstall = "mkdir -p $out/bin";
+
+  meta = with lib; {
+    description = "A build tool for OCaml";
+    longDescription = ''
+      ocp-build is a build system for OCaml application, based on simple
+      descriptions of packages. ocp-build combines the descriptions of
+      packages, and optimize the parallel compilation of files depending on
+      the number of cores and the automatically-inferred dependencies
+      between source files.
+    '';
+    homepage = "https://www.typerex.org/ocp-build.html";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.jirkamarsik ];
+    mainProgram = "ocp-build";
+    inherit (ocaml.meta) platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/ocp-indent/default.nix b/nixpkgs/pkgs/development/tools/ocaml/ocp-indent/default.nix
new file mode 100644
index 000000000000..649e1bcd3559
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/ocp-indent/default.nix
@@ -0,0 +1,27 @@
+{ lib, fetchFromGitHub, buildDunePackage, cmdliner, findlib }:
+
+buildDunePackage rec {
+  version = "1.8.2";
+  pname = "ocp-indent";
+
+  duneVersion = "3";
+
+  src = fetchFromGitHub {
+    owner = "OCamlPro";
+    repo = "ocp-indent";
+    rev = version;
+    sha256 = "sha256-IyvURw/6R0eKrnahV1fqLV0iIeypykrmxDbliECgbLc=";
+  };
+
+  minimalOCamlVersion = "4.03";
+
+  buildInputs = [ cmdliner ];
+  propagatedBuildInputs = [ findlib ];
+
+  meta = with lib; {
+    homepage = "https://www.typerex.org/ocp-indent.html";
+    description = "A customizable tool to indent OCaml code";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.jirkamarsik ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/ocp-index/default.nix b/nixpkgs/pkgs/development/tools/ocaml/ocp-index/default.nix
new file mode 100644
index 000000000000..98e8b06e795b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/ocp-index/default.nix
@@ -0,0 +1,28 @@
+{ lib, fetchFromGitHub, buildDunePackage, cppo, ocp-indent, cmdliner, re }:
+
+buildDunePackage rec {
+  pname = "ocp-index";
+  version = "1.3.5";
+
+  minimalOCamlVersion = "4.08";
+
+  src = fetchFromGitHub {
+    owner = "OCamlPro";
+    repo = "ocp-index";
+    rev = version;
+    hash = "sha256-Zn3BPaMB68V363OljFFdmLyYf+S0wFJK44L8t1TSG1Q=";
+  };
+
+  nativeBuildInputs = [ cppo ];
+  buildInputs = [ cmdliner re ];
+
+  propagatedBuildInputs = [ ocp-indent ];
+
+  meta = {
+    homepage = "https://www.typerex.org/ocp-index.html";
+    description = "A simple and light-weight documentation extractor for OCaml";
+    changelog = "https://github.com/OCamlPro/ocp-index/raw/${version}/CHANGES.md";
+    license = lib.licenses.lgpl3;
+    maintainers = with lib.maintainers; [ vbgl ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/ocsigen-i18n/default.nix b/nixpkgs/pkgs/development/tools/ocaml/ocsigen-i18n/default.nix
new file mode 100644
index 000000000000..fcb43938112d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/ocsigen-i18n/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, ocamlPackages }:
+
+stdenv.mkDerivation rec {
+  pname = "ocsigen-i18n";
+  version = "3.7.0";
+
+  strictDeps = true;
+
+  nativeBuildInputs = with ocamlPackages; [ ocaml findlib ];
+  buildInputs = with ocamlPackages; [ ppx_tools ];
+
+  dontStrip = true;
+
+  installPhase = ''
+    mkdir -p $out/bin
+    make bindir=$out/bin install
+  '';
+
+  src = fetchFromGitHub {
+    owner = "besport";
+    repo = "ocsigen-i18n";
+    rev = version;
+    sha256 = "sha256-PmdDyn+MUcNFrZpP/KLGQzdXUFRr+dYRAZjTZxHSeaw=";
+  };
+
+  meta = {
+    homepage = "https://github.com/besport/ocsigen-i18n";
+    description = "I18n made easy for web sites written with eliom";
+    license = lib.licenses.lgpl21;
+    maintainers = [ lib.maintainers.gal_bolle ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/omake/default.nix b/nixpkgs/pkgs/development/tools/ocaml/omake/default.nix
new file mode 100644
index 000000000000..32650f80b581
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/omake/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchurl, ocaml }:
+
+stdenv.mkDerivation rec {
+
+  pname = "omake";
+  version = "0.10.6";
+
+  src = fetchurl {
+    url = "http://download.camlcity.org/download/${pname}-${version}.tar.gz";
+    hash = "sha256-AuSZEnybyk8HaDZ7mbwDqjFXMXVQ7TDRuRU/aRY8/yE=";
+  };
+
+  strictDeps = true;
+
+  nativeBuildInputs = [ ocaml ];
+
+  meta = {
+    description = "A build system designed for scalability and portability";
+    homepage = "http://projects.camlcity.org/projects/omake.html";
+    license = with lib.licenses; [
+      mit /* scripts */
+      gpl2 /* program */
+    ];
+    inherit (ocaml.meta) platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/opaline/default.nix b/nixpkgs/pkgs/development/tools/ocaml/opaline/default.nix
new file mode 100644
index 000000000000..b6bc9c9b9f6f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/opaline/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub, ocamlPackages }:
+
+stdenv.mkDerivation rec {
+  version = "0.3.3";
+  pname = "opaline";
+
+  src = fetchFromGitHub {
+    owner = "jaapb";
+    repo = "opaline";
+    rev = "v${version}";
+    sha256 = "sha256-6htaiFIcRMUYWn0U7zTNfCyDaTgDEvPch2q57qzvND4=";
+  };
+
+  nativeBuildInputs = with ocamlPackages; [ ocaml findlib ocamlbuild ];
+  buildInputs = with ocamlPackages; [ opam-file-format ];
+
+  preInstall = "mkdir -p $out/bin";
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  meta = {
+    description = "OPAm Light INstaller Engine";
+    license = lib.licenses.mit;
+    maintainers = [ lib.maintainers.vbgl ];
+    inherit (src.meta) homepage;
+    inherit (ocamlPackages.ocaml.meta) platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/opam-publish/default.nix b/nixpkgs/pkgs/development/tools/ocaml/opam-publish/default.nix
new file mode 100644
index 000000000000..dec119bc762c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/opam-publish/default.nix
@@ -0,0 +1,34 @@
+{ lib, fetchFromGitHub, ocamlPackages }:
+
+with ocamlPackages;
+
+buildDunePackage rec {
+  pname = "opam-publish";
+  version = "2.3.0";
+
+  src = fetchFromGitHub {
+    owner = "ocaml-opam";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-CiZOljFBUUC3ExGSzzTATGqmxKjbzjRlL4aaL/fx9zI=";
+  };
+
+  duneVersion = "3";
+
+  buildInputs = [
+    cmdliner
+    lwt_ssl
+    opam-core
+    opam-format
+    opam-state
+    github
+    github-unix
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/ocaml-opam/${pname}";
+    description = "A tool to ease contributions to opam repositories";
+    license = with licenses; [ lgpl21Only ocamlLgplLinkingException ];
+    maintainers = with maintainers; [ niols ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/opam/default.nix b/nixpkgs/pkgs/development/tools/ocaml/opam/default.nix
new file mode 100644
index 000000000000..4f85fc52343a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/opam/default.nix
@@ -0,0 +1,152 @@
+{ stdenv, lib, fetchurl, makeWrapper, getconf,
+  ocaml, unzip, ncurses, curl, bubblewrap, Foundation
+}:
+
+assert lib.versionAtLeast ocaml.version "4.02.3";
+
+let
+  srcs = {
+    "0install-solver" = fetchurl {
+      url = "https://github.com/0install/0install/releases/download/v2.17/0install-v2.17.tbz";
+      sha256 = "08q95mzmf9pyyqs68ff52422f834hi313cxmypwrxmxsabcfa10p";
+    };
+    "base64" = fetchurl {
+      url = "https://github.com/mirage/ocaml-base64/releases/download/v3.5.0/base64-v3.5.0.tbz";
+      sha256 = "19735bvb3k263hzcvdhn4d5lfv2qscc9ib4q85wgxsvq0p0fk7aq";
+    };
+    "cmdliner" = fetchurl {
+      url = "http://erratique.ch/software/cmdliner/releases/cmdliner-1.0.4.tbz";
+      sha256 = "1h04q0zkasd0mw64ggh4y58lgzkhg6yhzy60lab8k8zq9ba96ajw";
+    };
+    "cppo" = fetchurl {
+      url = "https://github.com/ocaml-community/cppo/archive/v1.6.8.tar.gz";
+      sha256 = "0lxy4xkkkwgs1cj6d9lyzsqi9f6fc9r6cir5imi7yjqrpd86s1by";
+    };
+    "cudf" = fetchurl {
+      url = "https://gitlab.com/irill/cudf/-/archive/v0.10/cudf-v0.10.tar.gz";
+      sha256 = "0l7vzvlrk4x4vw1lkd1wzarxz3h82r3835singcay8m8zj8777bv";
+    };
+    "dose3" = fetchurl {
+      url = "https://gitlab.com/irill/dose3/-/archive/7.0.0/dose3-7.0.0.tar.gz";
+      sha256 = "0ab0llqdmy82ljh8xdf57y00c9jvf1vnxiq9hczli0r6vc263nq2";
+    };
+    "dune-local" = fetchurl {
+      url = "https://github.com/ocaml/dune/releases/download/3.5.0/dune-3.5.0.tbz";
+      sha256 = "041n16sn41wwj6fgi7l10hvbl5x5swygqv33d4csx7rm0iklrgbp";
+    };
+    "extlib" = fetchurl {
+      url = "https://github.com/ygrek/ocaml-extlib/releases/download/1.7.9/extlib-1.7.9.tar.gz";
+      sha256 = "1jydzw2n84cfiz9y6lk4gih4wbr8jybanmiryfs01svd07g4vpjq";
+    };
+    "mccs" = fetchurl {
+      url = "https://github.com/AltGr/ocaml-mccs/archive/1.1+13.tar.gz";
+      sha256 = "05nnji9h8mss3hzjr5faid2v3xfr7rcv2ywmpcxxp28y6h2kv9gv";
+    };
+    "ocamlgraph" = fetchurl {
+      url = "https://github.com/backtracking/ocamlgraph/releases/download/2.0.0/ocamlgraph-2.0.0.tbz";
+      sha256 = "029692bvdz3hxpva9a2jg5w5381fkcw55ysdi8424lyyjxvjdzi0";
+    };
+    "opam-0install-cudf" = fetchurl {
+      url = "https://github.com/ocaml-opam/opam-0install-solver/releases/download/v0.4.2/opam-0install-cudf-v0.4.2.tbz";
+      sha256 = "10wma4hh9l8hk49rl8nql6ixsvlz3163gcxspay5fwrpbg51fmxr";
+    };
+    "opam-file-format" = fetchurl {
+      url = "https://github.com/ocaml/opam-file-format/archive/2.1.4.tar.gz";
+      sha256 = "0xbdlpxb0348pbwijna2x6nbi8fcxdh63cwrznn4q4zzbv9zsy02";
+    };
+    "re" = fetchurl {
+      url = "https://github.com/ocaml/ocaml-re/releases/download/1.10.3/re-1.10.3.tbz";
+      sha256 = "1fqfg609996bgxr14yyfxhvl6hm9c1j0mm2xjdjigqrzgyb4crc4";
+    };
+    "result" = fetchurl {
+      url = "https://github.com/janestreet/result/releases/download/1.5/result-1.5.tbz";
+      sha256 = "0cpfp35fdwnv3p30a06wd0py3805qxmq3jmcynjc3x2qhlimwfkw";
+    };
+    "seq" = fetchurl {
+      url = "https://github.com/c-cube/seq/archive/0.2.2.tar.gz";
+      sha256 = "1ck15v3pg8bacdg6d6iyp2jc3kgrzxk5jsgzx3287x2ycb897j53";
+    };
+    "stdlib-shims" = fetchurl {
+      url = "https://github.com/ocaml/stdlib-shims/releases/download/0.3.0/stdlib-shims-0.3.0.tbz";
+      sha256 = "0jnqsv6pqp5b5g7lcjwgd75zqqvcwcl5a32zi03zg1kvj79p5gxs";
+    };
+    opam = fetchurl {
+      url = "https://github.com/ocaml/opam/archive/2.1.5.zip";
+      sha256 = "0s8r5gfs2zsyfn3jzqnvns3g0rkik3pw628n0dik55fwq3zjgg4a";
+    };
+  };
+in stdenv.mkDerivation {
+  pname = "opam";
+  version = "2.1.5";
+
+  strictDeps = true;
+
+  nativeBuildInputs = [ makeWrapper unzip ocaml curl ];
+  buildInputs = [ ncurses getconf ]
+    ++ lib.optionals stdenv.isLinux [ bubblewrap ]
+    ++ lib.optionals stdenv.isDarwin [ Foundation ];
+
+  src = srcs.opam;
+
+  postUnpack = ''
+    ln -sv ${srcs."0install-solver"} $sourceRoot/src_ext/0install-solver.tbz
+    ln -sv ${srcs."base64"} $sourceRoot/src_ext/base64.tbz
+    ln -sv ${srcs."cmdliner"} $sourceRoot/src_ext/cmdliner.tbz
+    ln -sv ${srcs."cppo"} $sourceRoot/src_ext/cppo.tar.gz
+    ln -sv ${srcs."cudf"} $sourceRoot/src_ext/cudf.tar.gz
+    ln -sv ${srcs."dose3"} $sourceRoot/src_ext/dose3.tar.gz
+    ln -sv ${srcs."dune-local"} $sourceRoot/src_ext/dune-local.tbz
+    ln -sv ${srcs."extlib"} $sourceRoot/src_ext/extlib.tar.gz
+    ln -sv ${srcs."mccs"} $sourceRoot/src_ext/mccs.tar.gz
+    ln -sv ${srcs."ocamlgraph"} $sourceRoot/src_ext/ocamlgraph.tbz
+    ln -sv ${srcs."opam-0install-cudf"} $sourceRoot/src_ext/opam-0install-cudf.tbz
+    ln -sv ${srcs."opam-file-format"} $sourceRoot/src_ext/opam-file-format.tar.gz
+    ln -sv ${srcs."re"} $sourceRoot/src_ext/re.tbz
+    ln -sv ${srcs."result"} $sourceRoot/src_ext/result.tbz
+    ln -sv ${srcs."seq"} $sourceRoot/src_ext/seq.tar.gz
+    ln -sv ${srcs."stdlib-shims"} $sourceRoot/src_ext/stdlib-shims.tbz
+  '';
+
+  patches = [ ./opam-shebangs.patch ];
+
+  preConfigure = ''
+    substituteInPlace ./src_ext/Makefile --replace "%.stamp: %.download" "%.stamp:"
+    patchShebangs src/state/shellscripts
+  '';
+
+  postConfigure = "make lib-ext";
+
+  # Dirty, but apparently ocp-build requires a TERM
+  makeFlags = ["TERM=screen"];
+
+  outputs = [ "out" "installer" ];
+  setOutputFlags = false;
+
+  # Work around https://github.com/NixOS/nixpkgs/issues/166205.
+  env = lib.optionalAttrs stdenv.cc.isClang {
+    NIX_LDFLAGS = "-l${stdenv.cc.libcxx.cxxabi.libName}";
+  };
+
+  # change argv0 to "opam" as a workaround for
+  # https://github.com/ocaml/opam/issues/2142
+  postInstall = ''
+    mv $out/bin/opam $out/bin/.opam-wrapped
+    makeWrapper $out/bin/.opam-wrapped $out/bin/opam \
+      --argv0 "opam" \
+      --suffix PATH : ${unzip}/bin:${curl}/bin:${lib.optionalString stdenv.isLinux "${bubblewrap}/bin:"}${getconf}/bin \
+      --set OPAM_USER_PATH_RO /run/current-system/sw/bin:/nix/
+    $out/bin/opam-installer --prefix=$installer opam-installer.install
+  '';
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A package manager for OCaml";
+    homepage = "https://opam.ocaml.org/";
+    changelog = "https://github.com/ocaml/opam/raw/${version}/CHANGES";
+    maintainers = [ maintainers.marsam ];
+    license = licenses.lgpl21Only;
+    platforms = platforms.all;
+  };
+}
+# Generated by: ./opam.nix.pl -v 2.1.5 -p opam-shebangs.patch
diff --git a/nixpkgs/pkgs/development/tools/ocaml/opam/installer.nix b/nixpkgs/pkgs/development/tools/ocaml/opam/installer.nix
new file mode 100644
index 000000000000..9b3b7a5617ba
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/opam/installer.nix
@@ -0,0 +1,17 @@
+{ lib, unzip, opam, ocamlPackages }:
+
+ocamlPackages.buildDunePackage {
+  pname = "opam-installer";
+
+  duneVersion = "3";
+
+  inherit (opam) version src;
+  nativeBuildInputs = [ unzip ];
+
+  configureFlags = [ "--disable-checks" "--prefix=$out" ];
+  buildInputs = with ocamlPackages; [ opam-format cmdliner ];
+
+  meta = opam.meta // {
+    description = "Handle (un)installation from opam install files";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/opam/opam-shebangs.patch b/nixpkgs/pkgs/development/tools/ocaml/opam/opam-shebangs.patch
new file mode 100644
index 000000000000..72efec0a9105
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/opam/opam-shebangs.patch
@@ -0,0 +1,131 @@
+diff --git a/src/client/opamInitDefaults.ml b/src/client/opamInitDefaults.ml
+index eca13a7c..1fd66f43 100644
+--- a/src/client/opamInitDefaults.ml
++++ b/src/client/opamInitDefaults.ml
+@@ -35,14 +35,18 @@ let eval_variables = [
+ let os_filter os =
+   FOp (FIdent ([], OpamVariable.of_string "os", None), `Eq, FString os)
+ 
++let os_distribution_filter distro =
++  FOp (FIdent ([], OpamVariable.of_string "os-distribution", None), `Eq, FString distro)
++
+ let linux_filter = os_filter "linux"
+ let macos_filter = os_filter "macos"
+ let openbsd_filter = os_filter "openbsd"
+ let freebsd_filter = os_filter "freebsd"
+ let not_open_free_bsd_filter =
+   FNot (FOr (openbsd_filter,  freebsd_filter))
+ let win32_filter = os_filter "win32"
+ let sandbox_filter = FOr (linux_filter, macos_filter)
++let nixos_filter = os_distribution_filter "nixos"
+ 
+ let gpatch_filter = FOr (openbsd_filter, freebsd_filter)
+ let patch_filter = FNot gpatch_filter
+@@ -50,6 +54,11 @@ let wrappers ~sandboxing () =
+     CString t, None;
+   ] in
+   let w = OpamFile.Wrappers.empty in
++  let w = { w with
++            OpamFile.Wrappers.
++            pre_build = [[CString "%{hooks}%/shebangs.sh", None], Some nixos_filter];
++          }
++  in
+   if sandboxing then
+     { w with
+       OpamFile.Wrappers.
+@@ -113,6 +122,7 @@ let required_tools ~sandboxing () =
+ let init_scripts () = [
+   ("sandbox.sh", OpamScript.bwrap), Some bwrap_filter;
+   ("sandbox.sh", OpamScript.sandbox_exec), Some macos_filter;
++  ("shebangs.sh", OpamScript.patch_shebangs), Some nixos_filter;
+ ]
+ 
+ module I = OpamFile.InitConfig
+diff --git a/src/state/opamScript.mli b/src/state/opamScript.mli
+index 03449970..83de0b53 100644
+--- a/src/state/opamScript.mli
++++ b/src/state/opamScript.mli
+@@ -20,3 +20,4 @@ val env_hook : string
+ val env_hook_zsh : string
+ val env_hook_csh : string
+ val env_hook_fish : string
++val patch_shebangs : string
+diff --git a/src/state/shellscripts/patch_shebangs.sh b/src/state/shellscripts/patch_shebangs.sh
+new file mode 100755
+index 00000000..3ea84e2d
+--- /dev/null
++++ b/src/state/shellscripts/patch_shebangs.sh
+@@ -0,0 +1,73 @@
++#!/usr/bin/env bash
++# This setup hook causes the fixup phase to rewrite all script
++# interpreter file names (`#!  /path') to paths found in $PATH.  E.g.,
++# /bin/sh will be rewritten to /nix/store/<hash>-some-bash/bin/sh.
++# /usr/bin/env gets special treatment so that ".../bin/env python" is
++# rewritten to /nix/store/<hash>/bin/python.  Interpreters that are
++# already in the store are left untouched.
++
++header() { echo "$1"; }
++stopNest() { true; }
++
++fixupOutputHooks+=('if [ -z "${dontPatchShebangs-}" -a -e "$prefix" ]; then patchShebangs "$prefix"; fi')
++
++patchShebangs() {
++    local dir="$1"
++    header "patching script interpreter paths in $dir"
++    local f
++    local oldPath
++    local newPath
++    local arg0
++    local args
++    local oldInterpreterLine
++    local newInterpreterLine
++
++    find "$dir" -type f -perm -0100 | while read f; do
++        if [ "$(head -1 "$f" | head -c+2)" != '#!' ]; then
++            # missing shebang => not a script
++            continue
++        fi
++
++        oldInterpreterLine=$(head -1 "$f" | tail -c+3)
++        read -r oldPath arg0 args <<< "$oldInterpreterLine"
++
++        if $(echo "$oldPath" | grep -q "/bin/env$"); then
++            # Check for unsupported 'env' functionality:
++            # - options: something starting with a '-'
++            # - environment variables: foo=bar
++            if $(echo "$arg0" | grep -q -- "^-.*\|.*=.*"); then
++                echo "unsupported interpreter directive \"$oldInterpreterLine\" (set dontPatchShebangs=1 and handle shebang patching yourself)"
++                exit 1
++            fi
++            newPath="$(command -v "$arg0" || true)"
++        else
++            if [ "$oldPath" = "" ]; then
++                # If no interpreter is specified linux will use /bin/sh. Set
++                # oldpath="/bin/sh" so that we get /nix/store/.../sh.
++                oldPath="/bin/sh"
++            fi
++            newPath="$(command -v "$(basename "$oldPath")" || true)"
++            args="$arg0 $args"
++        fi
++
++        # Strip trailing whitespace introduced when no arguments are present
++        newInterpreterLine="$(echo "$newPath $args" | sed 's/[[:space:]]*$//')"
++
++        if [ -n "$oldPath" -a "${oldPath:0:${#NIX_STORE}}" != "$NIX_STORE" ]; then
++            if [ -n "$newPath" -a "$newPath" != "$oldPath" ]; then
++                echo "$f: interpreter directive changed from \"$oldInterpreterLine\" to \"$newInterpreterLine\""
++                # escape the escape chars so that sed doesn't interpret them
++                escapedInterpreterLine=$(echo "$newInterpreterLine" | sed 's|\\|\\\\|g')
++                # Preserve times, see: https://github.com/NixOS/nixpkgs/pull/33281
++                touch -r "$f" "$f.timestamp"
++                sed -i -e "1 s|.*|#\!$escapedInterpreterLine|" "$f"
++                touch -r "$f.timestamp" "$f"
++                rm "$f.timestamp"
++            fi
++        fi
++    done
++
++    stopNest
++}
++
++patchShebangs .
diff --git a/nixpkgs/pkgs/development/tools/ocaml/opam/opam.nix.pl b/nixpkgs/pkgs/development/tools/ocaml/opam/opam.nix.pl
new file mode 100755
index 000000000000..77c574cb9321
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/opam/opam.nix.pl
@@ -0,0 +1,143 @@
+#!/usr/bin/env perl
+
+use strict;
+use warnings qw<all>;
+use Getopt::Std;
+
+my $gencmd = "# Generated by: " . join(" ", $0, @ARGV) . "\n";
+
+our $opt_v;
+our $opt_p;
+our $opt_r;
+our $opt_t;
+getopts "v:p:t:r:";
+
+my $OPAM_RELEASE = $opt_v // "2.0.0";
+my $OPAM_TAG = $opt_t // $OPAM_RELEASE;
+my $OPAM_GITHUB_REPO = $opt_r // "ocaml/opam";
+my $OPAM_RELEASE_URL = "https://github.com/$OPAM_GITHUB_REPO/archive/$OPAM_TAG.zip";
+my $OPAM_RELEASE_SHA256 = `nix-prefetch-url \Q$OPAM_RELEASE_URL\E`;
+chomp $OPAM_RELEASE_SHA256;
+
+my $OPAM_BASE_URL = "https://raw.githubusercontent.com/$OPAM_GITHUB_REPO/$OPAM_TAG";
+my $OPAM_OPAM = `curl -L --url \Q$OPAM_BASE_URL\E/opam-devel.opam`;
+my($OCAML_MIN_VERSION) = $OPAM_OPAM =~ /^  "ocaml" \{>= "(.*)"}$/m
+  or die "could not parse ocaml version bound\n";
+
+print <<"EOF";
+{ stdenv, lib, fetchurl, makeWrapper, getconf,
+  ocaml, unzip, ncurses, curl, bubblewrap, Foundation
+}:
+
+assert lib.versionAtLeast ocaml.version "$OCAML_MIN_VERSION";
+
+let
+  srcs = {
+EOF
+
+my %urls = ();
+my %md5s = ();
+
+open(SOURCES, "-|", "curl", "-L", "--url", "$OPAM_BASE_URL/src_ext/Makefile.sources");
+while (<SOURCES>) {
+  if (/^URL_(?!PKG_)([-\w]+)\s*=\s*(\S+)$/) {
+    $urls{$1} = $2;
+  } elsif (/^MD5_(?!PKG_)([-\w]+)\s*=\s*(\S+)$/) {
+    $md5s{$1} = $2;
+  }
+}
+for my $src (sort keys %urls) {
+  my ($sha256,$store_path) = split /\n/, `nix-prefetch-url --print-path \Q$urls{$src}\E`;
+  system "echo \Q$md5s{$src}\E' *'\Q$store_path\E | md5sum -c 1>&2";
+  die "md5 check failed for $urls{$src}\n" if $?;
+  print <<"EOF";
+    "$src" = fetchurl {
+      url = "$urls{$src}";
+      sha256 = "$sha256";
+    };
+EOF
+}
+
+print <<"EOF";
+    opam = fetchurl {
+      url = "$OPAM_RELEASE_URL";
+      sha256 = "$OPAM_RELEASE_SHA256";
+    };
+  };
+in stdenv.mkDerivation {
+  pname = "opam";
+  version = "$OPAM_RELEASE";
+
+  strictDeps = true;
+
+  nativeBuildInputs = [ makeWrapper unzip ocaml curl ];
+  buildInputs = [ ncurses getconf ]
+    ++ lib.optionals stdenv.isLinux [ bubblewrap ]
+    ++ lib.optionals stdenv.isDarwin [ Foundation ];
+
+  src = srcs.opam;
+
+  postUnpack = ''
+EOF
+for my $src (sort keys %urls) {
+  my($ext) = $urls{$src} =~ /(\.(?:t(?:ar\.|)|)(?:gz|bz2?))$/
+    or die "could not find extension for $urls{$src}\n";
+  print <<"EOF";
+    ln -sv \${srcs."$src"} \$sourceRoot/src_ext/$src$ext
+EOF
+}
+print <<'EOF';
+  '';
+
+EOF
+if (defined $opt_p) {
+  print "  patches = [ ";
+  for my $patch (split /[, ]/, $opt_p) {
+    $patch =~ s/^(?=[^\/]*$)/.\//;
+    print "$patch ";
+  }
+  print "];\n\n";
+}
+print <<'EOF';
+  preConfigure = ''
+    substituteInPlace ./src_ext/Makefile --replace "%.stamp: %.download" "%.stamp:"
+    patchShebangs src/state/shellscripts
+  '';
+
+  postConfigure = "make lib-ext";
+
+  # Dirty, but apparently ocp-build requires a TERM
+  makeFlags = ["TERM=screen"];
+
+  outputs = [ "out" "installer" ];
+  setOutputFlags = false;
+
+  # Work around https://github.com/NixOS/nixpkgs/issues/166205.
+  env = lib.optionalAttrs stdenv.cc.isClang {
+    NIX_LDFLAGS = "-l${stdenv.cc.libcxx.cxxabi.libName}";
+  };
+
+  # change argv0 to "opam" as a workaround for
+  # https://github.com/ocaml/opam/issues/2142
+  postInstall = ''
+    mv $out/bin/opam $out/bin/.opam-wrapped
+    makeWrapper $out/bin/.opam-wrapped $out/bin/opam \
+      --argv0 "opam" \
+      --suffix PATH : ${unzip}/bin:${curl}/bin:${lib.optionalString stdenv.isLinux "${bubblewrap}/bin:"}${getconf}/bin \
+      --set OPAM_USER_PATH_RO /run/current-system/sw/bin:/nix/
+    $out/bin/opam-installer --prefix=$installer opam-installer.install
+  '';
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A package manager for OCaml";
+    homepage = "https://opam.ocaml.org/";
+    changelog = "https://github.com/ocaml/opam/raw/${version}/CHANGES";
+    maintainers = [ maintainers.marsam ];
+    license = licenses.lgpl21Only;
+    platforms = platforms.all;
+  };
+}
+EOF
+print $gencmd;
diff --git a/nixpkgs/pkgs/development/tools/ocaml/opam2json/default.nix b/nixpkgs/pkgs/development/tools/ocaml/opam2json/default.nix
new file mode 100644
index 000000000000..a3ca535d3f86
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/opam2json/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub, opam-installer, ocamlPackages }:
+stdenv.mkDerivation rec {
+  pname = "opam2json";
+  version = "0.4";
+
+  src = fetchFromGitHub {
+    owner = "tweag";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-5pXfbUfpVABtKbii6aaI2EdAZTjHJ2QntEf0QD2O5AM=";
+  };
+
+  buildInputs = with ocamlPackages; [ yojson opam-file-format cmdliner ];
+  nativeBuildInputs = with ocamlPackages; [ ocaml findlib opam-installer ];
+
+  preInstall = ''export PREFIX="$out"'';
+
+  meta = with lib; {
+    platforms = platforms.all;
+    description = "convert opam file syntax to JSON";
+    maintainers = [ maintainers.balsoft ];
+    license = licenses.gpl3;
+    homepage = "https://github.com/tweag/opam2json";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/utop/default.nix b/nixpkgs/pkgs/development/tools/ocaml/utop/default.nix
new file mode 100644
index 000000000000..e2f0abd65c95
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/utop/default.nix
@@ -0,0 +1,76 @@
+{ lib, stdenv, fetchurl, ocaml, findlib
+, lambda-term, cppo, makeWrapper, buildDunePackage
+, xdg, zed, logs, lwt, react, lwt_react
+}:
+
+buildDunePackage rec {
+  pname = "utop";
+
+  version = "2.13.1";
+  propagatedBuildInputs = [ findlib lambda-term xdg zed logs ];
+
+  minimalOCamlVersion = "4.11";
+
+  src = fetchurl {
+    url = "https://github.com/ocaml-community/utop/releases/download/${version}/utop-${version}.tbz";
+    sha256 = "sha256-sE7Co5TRpqKKeURMWPZuq3e390QB9HFKpubxwhJab/0=";
+  };
+
+  nativeBuildInputs = [ makeWrapper cppo ];
+
+  postFixup =
+   let
+     path = "etc/utop/env";
+
+     # derivation of just runtime deps so env vars created by
+     # setup-hooks can be saved for use at runtime
+     runtime = stdenv.mkDerivation {
+       pname = "utop-runtime-env";
+       inherit version;
+
+       buildInputs = [ findlib ] ++ propagatedBuildInputs;
+
+       dontUnpack = true;
+
+       installPhase = ''
+         mkdir -p "$out"/${path}
+         for e in OCAMLPATH CAML_LD_LIBRARY_PATH; do
+           [[ -v "$e" ]] || continue
+           printf %s "''${!e}" > "$out"/${path}/$e
+         done
+       '';
+     };
+
+     get = key: ''$(cat "${runtime}/${path}/${key}")'';
+   in ''
+   for prog in "$out"/bin/*
+   do
+
+    # Note: wrapProgram by default calls 'exec -a $0 ...', but this
+    # breaks utop on Linux with OCaml 4.04, and is disabled with
+    # '--argv0 ""' flag. See https://github.com/NixOS/nixpkgs/issues/24496
+    wrapProgram "$prog" \
+      --argv0 "" \
+      --prefix CAML_LD_LIBRARY_PATH ":" "${get "CAML_LD_LIBRARY_PATH"}" \
+      --prefix OCAMLPATH ":" "${get "OCAMLPATH"}" \
+      --prefix OCAMLPATH ":" $(unset OCAMLPATH; addOCamlPath "$out"; printf %s "$OCAMLPATH") \
+      --add-flags "-I ${findlib}/lib/ocaml/${lib.getVersion ocaml}/site-lib"
+   done
+   '';
+
+  meta = {
+    description = "Universal toplevel for OCaml";
+    longDescription = ''
+    utop is an improved toplevel for OCaml. It can run in a terminal or in Emacs. It supports line edition, history, real-time and context sensitive completion, colors, and more.
+
+    It integrates with the tuareg mode in Emacs.
+    '';
+    homepage = "https://github.com/ocaml-community/utop";
+    changelog = "https://github.com/ocaml-community/utop/blob/${version}/CHANGES.md";
+    license = lib.licenses.bsd3;
+    platforms = ocaml.meta.platforms or [];
+    maintainers = [
+      lib.maintainers.gal_bolle
+    ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ofono-phonesim/default.nix b/nixpkgs/pkgs/development/tools/ofono-phonesim/default.nix
new file mode 100644
index 000000000000..395211cd13c1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ofono-phonesim/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, mkDerivation
+, fetchzip
+, autoreconfHook
+, pkg-config
+, qtbase
+}:
+
+mkDerivation {
+  pname = "ofono-phonesim";
+  version = "unstable-2019-11-18";
+
+  src = fetchzip {
+    url = "https://git.kernel.org/pub/scm/network/ofono/phonesim.git/snapshot/phonesim-adf231a84cd3708b825dc82c56e841dd7e3b4541.tar.gz";
+    sha256 = "1840914sz46l8h2jwa0lymw6dvgj72wq9bhp3k4v4rk6masbf6hp";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    pkg-config
+  ];
+
+  buildInputs = [
+    qtbase
+  ];
+
+  makeFlags = [
+    "MOC=${qtbase.dev}/bin/moc"
+    "UIC=${qtbase.dev}/bin/uic"
+  ];
+
+  meta = with lib; {
+    description = "Phone Simulator for modem testing";
+    homepage = "https://01.org/ofono";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/oh-my-posh/default.nix b/nixpkgs/pkgs/development/tools/oh-my-posh/default.nix
new file mode 100644
index 000000000000..afbba2d7d4b1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/oh-my-posh/default.nix
@@ -0,0 +1,61 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+}:
+
+buildGoModule rec {
+  pname = "oh-my-posh";
+  version = "19.8.3";
+
+  src = fetchFromGitHub {
+    owner = "jandedobbeleer";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-sYXg/t8U+uu1kYtEH6j7s/dCQJGuG880ruQFrvB5GS8=";
+  };
+
+  vendorHash = "sha256-jJVqIH0Qa9otp2lnYKa7ypqeE01BynR/e852wuhuLuA=";
+
+  sourceRoot = "${src.name}/src";
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/jandedobbeleer/oh-my-posh/src/build.Version=${version}"
+    "-X github.com/jandedobbeleer/oh-my-posh/src/build.Date=1970-01-01T00:00:00Z"
+  ];
+
+  tags = [
+    "netgo"
+    "osusergo"
+    "static_build"
+  ];
+
+  postPatch = ''
+    # these tests requires internet access
+    rm engine/image_test.go engine/migrate_glyphs_test.go
+  '';
+
+  postInstall = ''
+    mv $out/bin/{src,oh-my-posh}
+    mkdir -p $out/share/oh-my-posh
+    cp -r ${src}/themes $out/share/oh-my-posh/
+    installShellCompletion --cmd oh-my-posh \
+      --bash <($out/bin/oh-my-posh completion bash) \
+      --fish <($out/bin/oh-my-posh completion fish) \
+      --zsh <($out/bin/oh-my-posh completion zsh)
+  '';
+
+  meta = with lib; {
+    description = "A prompt theme engine for any shell";
+    homepage = "https://ohmyposh.dev";
+    changelog = "https://github.com/JanDeDobbeleer/oh-my-posh/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ lucperkins urandom ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/okteto/default.nix b/nixpkgs/pkgs/development/tools/okteto/default.nix
new file mode 100644
index 000000000000..1c7ba093b6aa
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/okteto/default.nix
@@ -0,0 +1,54 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles, testers, okteto }:
+
+buildGoModule rec {
+  pname = "okteto";
+  version = "2.25.1";
+
+  src = fetchFromGitHub {
+    owner = "okteto";
+    repo = "okteto";
+    rev = version;
+    hash = "sha256-HBXp66chq+SzdEb463awolf4Uv0ScHN6MjoziYyh4kA=";
+  };
+
+  vendorHash = "sha256-+Adnveutg8soqK2Zwn2SNq7SEHd/Z91diHbPYHrGVrA=";
+
+  postPatch = ''
+    # Disable some tests that need file system & network access.
+    find cmd -name "*_test.go" | xargs rm -f
+    rm -f pkg/analytics/track_test.go
+  '';
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/okteto/okteto/pkg/config.VersionString=${version}"
+  ];
+
+  tags = [ "osusergo" "netgo" "static_build" ];
+
+  preCheck = ''
+    export HOME=$(mktemp -d)
+  '';
+
+  postInstall = ''
+    installShellCompletion --cmd okteto \
+      --bash <($out/bin/okteto completion bash) \
+      --fish <($out/bin/okteto completion fish) \
+      --zsh <($out/bin/okteto completion zsh)
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = okteto;
+    command = "HOME=$(mktemp -d) okteto version";
+  };
+
+  meta = with lib; {
+    description = "Develop your applications directly in your Kubernetes Cluster";
+    homepage = "https://okteto.com/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ aaronjheng ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ols/default.nix b/nixpkgs/pkgs/development/tools/ols/default.nix
new file mode 100644
index 000000000000..9357cdd9ae01
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ols/default.nix
@@ -0,0 +1,50 @@
+{ stdenv, fetchFromGitHub, makeBinaryWrapper, odin, lib }:
+
+stdenv.mkDerivation {
+  pname = "ols";
+  version = "0-unstable-2024-02-09";
+
+  src = fetchFromGitHub {
+    owner = "DanielGavin";
+    repo = "ols";
+    rev = "3eb1e0e60a66a4fc7347fb77837ff45ccbe1cabb";
+    hash = "sha256-qPcSZjvlBmFf3M98GrwIu8SGO2VbgdqBKzyFpGSEtrI=";
+  };
+
+  nativeBuildInputs = [
+    makeBinaryWrapper
+  ];
+
+  buildInputs = [
+    odin
+  ];
+
+  postPatch = ''
+    patchShebangs build.sh
+  '';
+
+  buildPhase = ''
+    runHook preBuild
+
+    ./build.sh
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 ols -t $out/bin/
+    wrapProgram $out/bin/ols --set-default ODIN_ROOT ${odin}/share
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    inherit (odin.meta) platforms;
+    description = "Language server for the Odin programming language";
+    homepage = "https://github.com/DanielGavin/ols";
+    license = licenses.mit;
+    maintainers = with maintainers; [ astavie znaniye ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/omniorb/default.nix b/nixpkgs/pkgs/development/tools/omniorb/default.nix
new file mode 100644
index 000000000000..d9bca7061c1a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/omniorb/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, stdenv
+, fetchurl
+, pkg-config
+, python3
+}:
+
+stdenv.mkDerivation rec {
+
+  pname = "omniorb";
+  version = "4.3.2";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/omniorb/omniORB/omniORB-${version}/omniORB-${version}.tar.bz2";
+    hash = "sha256-HHRTMNAZBK/Xoe0KWJa5puU6waS4ZKSFA7k8fuy/H6g=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ python3 ];
+
+  enableParallelBuilding = true;
+  hardeningDisable = [ "format" ];
+
+  meta = with lib; {
+    description = "A robust high performance CORBA ORB for C++ and Python";
+    longDescription = ''
+      omniORB is a robust high performance CORBA ORB for C++ and Python.
+      It is freely available under the terms of the GNU Lesser General Public License
+      (for the libraries),and GNU General Public License (for the tools).
+      omniORB is largely CORBA 2.6 compliant.
+    '';
+    homepage    = "http://omniorb.sourceforge.net/";
+    license     = with licenses; [ gpl2Plus lgpl21Plus ];
+    maintainers = with maintainers; [ smironov ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/omnisharp-roslyn/default.nix b/nixpkgs/pkgs/development/tools/omnisharp-roslyn/default.nix
new file mode 100644
index 000000000000..db7ad7d0b284
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/omnisharp-roslyn/default.nix
@@ -0,0 +1,93 @@
+{ buildDotnetModule
+, dotnetCorePackages
+, fetchFromGitHub
+, lib
+, stdenv
+, runCommand
+, expect
+}:
+let
+  inherit (dotnetCorePackages) sdk_8_0 runtime_6_0;
+in
+let finalPackage = buildDotnetModule rec {
+  pname = "omnisharp-roslyn";
+  version = "1.39.11";
+
+  src = fetchFromGitHub {
+    owner = "OmniSharp";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-b7LC3NJyw0ek3y6D3p4bKVH4Od2gXmW5/8fCCY9n3iE=";
+  };
+
+  projectFile = "src/OmniSharp.Stdio.Driver/OmniSharp.Stdio.Driver.csproj";
+  nugetDeps = ./deps.nix;
+
+  dotnet-sdk = sdk_8_0;
+  dotnet-runtime = sdk_8_0;
+
+  dotnetInstallFlags = [ "--framework net6.0" ];
+  dotnetBuildFlags = [ "--framework net6.0" "--no-self-contained" ];
+  dotnetFlags = [
+    # These flags are set by the cake build.
+    "-property:PackageVersion=${version}"
+    "-property:AssemblyVersion=${version}.0"
+    "-property:FileVersion=${version}.0"
+    "-property:InformationalVersion=${version}"
+    "-property:RuntimeFrameworkVersion=${runtime_6_0.version}"
+    "-property:RollForward=LatestMajor"
+  ];
+
+  postPatch = ''
+    # Relax the version requirement
+    rm global.json
+
+    # Patch the project files so we can compile them properly
+    for project in src/OmniSharp.Http.Driver/OmniSharp.Http.Driver.csproj src/OmniSharp.LanguageServerProtocol/OmniSharp.LanguageServerProtocol.csproj src/OmniSharp.Stdio.Driver/OmniSharp.Stdio.Driver.csproj; do
+      substituteInPlace $project \
+        --replace '<RuntimeIdentifiers>win7-x64;win7-x86;win10-arm64</RuntimeIdentifiers>' '<RuntimeIdentifiers>linux-x64;linux-arm64;osx-x64;osx-arm64</RuntimeIdentifiers>'
+    done
+  '';
+
+  useDotnetFromEnv = true;
+  executables = [ "OmniSharp" ];
+
+  passthru.tests = let
+    with-sdk = sdk: runCommand "with-${if sdk ? version then sdk.version else "no"}-sdk"
+      { nativeBuildInputs = [ finalPackage sdk expect ]; meta.timeout = 60; } ''
+      HOME=$TMPDIR
+      expect <<"EOF"
+        spawn OmniSharp
+        expect_before timeout {
+          send_error "timeout!\n"
+          exit 1
+        }
+        expect ".NET Core SDK ${if sdk ? version then sdk.version else sdk_8_0.version}"
+        expect "{\"Event\":\"started\","
+        send \x03
+        expect eof
+        catch wait result
+        exit [lindex $result 3]
+      EOF
+      touch $out
+    '';
+  in {
+    # Make sure we can run OmniSharp with any supported SDK version, as well as without
+    with-net6-sdk = with-sdk dotnetCorePackages.sdk_6_0;
+    with-net7-sdk = with-sdk dotnetCorePackages.sdk_7_0;
+    with-net8-sdk = with-sdk dotnetCorePackages.sdk_8_0;
+    no-sdk = with-sdk null;
+  };
+
+  meta = with lib; {
+    description = "OmniSharp based on roslyn workspaces";
+    homepage = "https://github.com/OmniSharp/omnisharp-roslyn";
+    sourceProvenance = with sourceTypes; [
+      fromSource
+      binaryNativeCode # dependencies
+    ];
+    license = licenses.mit;
+    maintainers = with maintainers; [ tesq0 ericdallo corngood mdarocha ];
+    mainProgram = "OmniSharp";
+  };
+}; in finalPackage
diff --git a/nixpkgs/pkgs/development/tools/omnisharp-roslyn/deps.nix b/nixpkgs/pkgs/development/tools/omnisharp-roslyn/deps.nix
new file mode 100644
index 000000000000..d53ef9b60c79
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/omnisharp-roslyn/deps.nix
@@ -0,0 +1,160 @@
+# This file was automatically generated by passthru.fetch-deps.
+# Please dont edit it manually, your changes might get overwritten!
+
+{ fetchNuGet }: [
+  (fetchNuGet { pname = "Cake.Scripting.Abstractions"; version = "0.15.0"; sha256 = "0nh1954zs6crl3nrgf41b2mvipf3pxda8dxg21bbdf7yysq7izw3"; })
+  (fetchNuGet { pname = "Cake.Scripting.Transport"; version = "0.15.0"; sha256 = "0xzlnadascsiibdhmpbqaawqlpyrwridih7y7054zsijlz1lp3am"; })
+  (fetchNuGet { pname = "Cake.Tool"; version = "3.0.0"; sha256 = "0gjacqdgnh1d40sm9vrdb8vr6jv3vyh6j265gj1aaf9af2569637"; })
+  (fetchNuGet { pname = "Dotnet.Script.DependencyModel"; version = "1.5.0"; sha256 = "00w9r2lv0yy30dafn6gs2qf4f6hhsg48923d2sdkyjdc94bx4kp4"; })
+  (fetchNuGet { pname = "Dotnet.Script.DependencyModel.NuGet"; version = "1.5.0"; sha256 = "0fy3cww1yclyvlhzla4klamcw7sjy2fg3sr2ihpd4jxlyd8qy60l"; })
+  (fetchNuGet { pname = "Humanizer.Core"; version = "2.14.1"; sha256 = "1ai7hgr0qwd7xlqfd92immddyi41j3ag91h3594yzfsgsy6yhyqi"; })
+  (fetchNuGet { pname = "ICSharpCode.Decompiler"; version = "8.2.0.7535"; sha256 = "1pvy3kss6s1v60yspfw11y3rs750rbxh735p90zrgxjshp9sq5g0"; })
+  (fetchNuGet { pname = "McMaster.Extensions.CommandLineUtils"; version = "4.1.0"; sha256 = "1ppw9nx9s5yyp6j8ljky7l9y5b91yf0sj2lqbakabjvzppr0pw4l"; })
+  (fetchNuGet { pname = "MediatR"; version = "8.1.0"; sha256 = "0cqx7yfh998xhsfk5pr6229lcjcs1jxxyqz7dwskc9jddl6a2akp"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.App.Ref"; version = "6.0.26"; sha256 = "1d8nkz24vsm0iy2xm8y5ak2q1w1p99dxyz0y26acs6sfk2na0vm6"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.App.Runtime.linux-arm64"; version = "6.0.26"; sha256 = "1za8lc52m4z54d68wd64c2nhzy05g3gx171k5cdlx73fbymiys9z"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.App.Runtime.linux-x64"; version = "6.0.26"; sha256 = "1zpbmz6z8758gwywzg0bac8kx9x39sxxc9j4a4r2jl74l9ssw4vm"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.App.Runtime.osx-arm64"; version = "6.0.26"; sha256 = "1i8ydlwjzk7j0mzvn0rpljxfp1h50zwaqalnyvfxai1fwgigzgw5"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.App.Runtime.osx-x64"; version = "6.0.26"; sha256 = "02src68hd3213sd1a2ms1my7i92knfmdxclvv90il9cky2zsq8kw"; })
+  (fetchNuGet { pname = "Microsoft.Bcl.AsyncInterfaces"; version = "7.0.0"; sha256 = "1waiggh3g1cclc81gmjrqbh128kwfjky3z79ma4bd2ms9pa3gvfm"; })
+  (fetchNuGet { pname = "Microsoft.Bcl.AsyncInterfaces"; version = "8.0.0"; sha256 = "0z4jq5prnxyb4p3163yxx35znpd2msjd8hw8ysmv4ah90f5sd9gm"; })
+  (fetchNuGet { pname = "Microsoft.Build"; version = "17.3.2"; sha256 = "17g4ka0c28l9v3pmf3i7cvic137h7zg6xqc78qf5j5hj7qbcps5g"; })
+  (fetchNuGet { pname = "Microsoft.Build.Framework"; version = "17.3.2"; sha256 = "1p8ikc91qc2b1h68w44brb64dy5kmkb089hdliwp02gba3dszw67"; })
+  (fetchNuGet { pname = "Microsoft.Build.Locator"; version = "1.6.10"; sha256 = "18xavj7zii38gkk6bkblif7j1j7y33z7f06xm81ljdl2124lbqc4"; })
+  (fetchNuGet { pname = "Microsoft.Build.Tasks.Core"; version = "17.3.2"; sha256 = "1mxm6xrq4illg502kjz4l7j0vjcpfv2li9wrvf4ix9m09vdwk2jl"; })
+  (fetchNuGet { pname = "Microsoft.Build.Utilities.Core"; version = "17.3.2"; sha256 = "0r82hrjjqpxjp3l7ncy8jdj30p7y0p1hhr1dbfrj5l3i0zxrrcj4"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.Analyzers"; version = "3.3.4"; sha256 = "0wd6v57p53ahz5z9zg4iyzmy3src7rlsncyqpcag02jjj1yx6g58"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.AnalyzerUtilities"; version = "3.3.0"; sha256 = "0b2xy6m3l1y6j2xc97cg5llia169jv4nszrrrqclh505gpw6qccz"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.Common"; version = "4.9.0-3.23611.3"; sha256 = "0b3lwd4m3jw7mf56xhzx4d3ziykv8g39a2s1x782c9bagh8i1b1f"; url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/microsoft.codeanalysis.common/4.9.0-3.23611.3/microsoft.codeanalysis.common.4.9.0-3.23611.3.nupkg"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.CSharp"; version = "4.9.0-3.23611.3"; sha256 = "0cja5pjhhh33lmc1kfqw9l3x1pb9g2dda6wgn9i92ay51j52l43n"; url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/microsoft.codeanalysis.csharp/4.9.0-3.23611.3/microsoft.codeanalysis.csharp.4.9.0-3.23611.3.nupkg"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.CSharp.Features"; version = "4.9.0-3.23611.3"; sha256 = "0alnvk5f68glimkqsz590pryg7pa5p0wp6i4aif1k5j1jz0b03v6"; url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/microsoft.codeanalysis.csharp.features/4.9.0-3.23611.3/microsoft.codeanalysis.csharp.features.4.9.0-3.23611.3.nupkg"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.CSharp.Scripting"; version = "4.9.0-3.23611.3"; sha256 = "1ai22hjqyc5xx1dpwl3nm4yjqjs9n6iw5whprpvb7vi8kv9zz16q"; url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/microsoft.codeanalysis.csharp.scripting/4.9.0-3.23611.3/microsoft.codeanalysis.csharp.scripting.4.9.0-3.23611.3.nupkg"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.CSharp.Workspaces"; version = "4.9.0-3.23611.3"; sha256 = "0x8xr193zqddmns0xx20hsf08qrb6fjjczgdm9yjr72p2djp14br"; url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/microsoft.codeanalysis.csharp.workspaces/4.9.0-3.23611.3/microsoft.codeanalysis.csharp.workspaces.4.9.0-3.23611.3.nupkg"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.Elfie"; version = "1.0.0"; sha256 = "1y5r6pm9rp70xyiaj357l3gdl4i4r8xxvqllgdyrwn9gx2aqzzqk"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.ExternalAccess.AspNetCore"; version = "4.9.0-3.23611.3"; sha256 = "13gx7v30jqikms0dh6in8kslgasdpj3j0jk1x3f9x0sgq8864ad9"; url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/microsoft.codeanalysis.externalaccess.aspnetcore/4.9.0-3.23611.3/microsoft.codeanalysis.externalaccess.aspnetcore.4.9.0-3.23611.3.nupkg"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.ExternalAccess.OmniSharp"; version = "4.9.0-3.23611.3"; sha256 = "12v6vcwnkdf84hs79ma4dkys7z07cf05k2ca1fnkz55zwaib4n59"; url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/microsoft.codeanalysis.externalaccess.omnisharp/4.9.0-3.23611.3/microsoft.codeanalysis.externalaccess.omnisharp.4.9.0-3.23611.3.nupkg"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.ExternalAccess.OmniSharp.CSharp"; version = "4.9.0-3.23611.3"; sha256 = "08c2b63vqwwda34kyrjglj2xgjjhqzgmdcnby8nm09j7jpz4z31y"; url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/microsoft.codeanalysis.externalaccess.omnisharp.csharp/4.9.0-3.23611.3/microsoft.codeanalysis.externalaccess.omnisharp.csharp.4.9.0-3.23611.3.nupkg"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.ExternalAccess.RazorCompiler"; version = "4.9.0-3.23611.3"; sha256 = "06svd5nhvyrww5prnx0055g0flfdi1x5n89in74i71mqvskqkh38"; url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/microsoft.codeanalysis.externalaccess.razorcompiler/4.9.0-3.23611.3/microsoft.codeanalysis.externalaccess.razorcompiler.4.9.0-3.23611.3.nupkg"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.Features"; version = "4.9.0-3.23611.3"; sha256 = "0nz2124hgxrh9k9c5p6xavkw8glmpwiq3qclvbggx9v8bnfl4p9k"; url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/microsoft.codeanalysis.features/4.9.0-3.23611.3/microsoft.codeanalysis.features.4.9.0-3.23611.3.nupkg"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.Scripting.Common"; version = "4.9.0-3.23611.3"; sha256 = "0k37wrw5jy57grbi9i0rx76ig2jplikkmiyzvzrydl0mmrb5ks1k"; url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/microsoft.codeanalysis.scripting.common/4.9.0-3.23611.3/microsoft.codeanalysis.scripting.common.4.9.0-3.23611.3.nupkg"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.Workspaces.Common"; version = "4.9.0-3.23611.3"; sha256 = "12scgd8bvh1p5hvkfcbm58j77ancn6wy23wdmwy0kqj0wm10n1wy"; url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/microsoft.codeanalysis.workspaces.common/4.9.0-3.23611.3/microsoft.codeanalysis.workspaces.common.4.9.0-3.23611.3.nupkg"; })
+  (fetchNuGet { pname = "Microsoft.CSharp"; version = "4.7.0"; sha256 = "0gd67zlw554j098kabg887b5a6pq9kzavpa3jjy5w53ccjzjfy8j"; })
+  (fetchNuGet { pname = "Microsoft.DiaSymReader"; version = "2.0.0"; sha256 = "0g4fqxqy68bgsqzxdpz8n1sw0az1zgk33zc0xa8bwibwd1k2s6pj"; })
+  (fetchNuGet { pname = "Microsoft.DotNet.PlatformAbstractions"; version = "3.1.6"; sha256 = "0b9myd7gqbpaw9pkd2bx45jhik9mwj0f1ss57sk2cxmag2lkdws5"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Caching.Abstractions"; version = "8.0.0"; sha256 = "04m6ywsf9731z24nfd14z0ah8xl06619ba7mkdb4vg8h5jpllsn4"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Caching.Memory"; version = "8.0.0"; sha256 = "0bv8ihd5i2gwr97qljwf56h8mdwspmlw0zs64qyk608fb3ciwi25"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Configuration"; version = "8.0.0"; sha256 = "080kab87qgq2kh0ijry5kfdiq9afyzb8s0k3jqi5zbbi540yq4zl"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Configuration.Abstractions"; version = "8.0.0"; sha256 = "1jlpa4ggl1gr5fs7fdcw04li3y3iy05w3klr9lrrlc7v8w76kq71"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Configuration.Binder"; version = "8.0.0"; sha256 = "1m0gawiz8f5hc3li9vd5psddlygwgkiw13d7div87kmkf4idza8r"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Configuration.CommandLine"; version = "8.0.0"; sha256 = "026f7f2iv6ph2dc5rnslll0bly8qcx5clmh2nn9hgyqjizzc4qvy"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Configuration.EnvironmentVariables"; version = "8.0.0"; sha256 = "13qb8wz3k59ihq0mjcqz1kwrpyzxn5da4dhk2pvcgc42z9kcbf7r"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Configuration.FileExtensions"; version = "8.0.0"; sha256 = "1jrmlfzy4h32nzf1nm5q8bhkpx958b0ww9qx1k1zm4pyaf6mqb04"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Configuration.Json"; version = "8.0.0"; sha256 = "1n3ss26v1lq6b69fxk1vz3kqv9ppxq8ypgdqpd7415xrq66y4bqn"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.DependencyInjection"; version = "8.0.0"; sha256 = "0i7qziz0iqmbk8zzln7kx9vd0lbx1x3va0yi3j1bgkjir13h78ps"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.DependencyInjection.Abstractions"; version = "8.0.0"; sha256 = "1zw0bpp5742jzx03wvqc8csnvsbgdqi0ls9jfc5i2vd3cl8b74pg"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.DependencyModel"; version = "8.0.0"; sha256 = "02jnx23hm1vid3yd9pw4gghzn6qkgdl5xfc5r0zrcxdax70rsh5a"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.FileProviders.Abstractions"; version = "8.0.0"; sha256 = "1idq65fxwcn882c06yci7nscy9i0rgw6mqjrl7362prvvsd9f15r"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.FileProviders.Physical"; version = "8.0.0"; sha256 = "05wxjvjbx79ir7vfkri6b28k8zl8fa6bbr0i7gahqrim2ijvkp6v"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.FileSystemGlobbing"; version = "8.0.0"; sha256 = "1igf2bqism22fxv7km5yv028r4rg12a4lki2jh4xg3brjkagiv7q"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Logging"; version = "8.0.0"; sha256 = "0nppj34nmq25gnrg0wh1q22y4wdqbih4ax493f226azv8mkp9s1i"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Logging.Abstractions"; version = "7.0.1"; sha256 = "0xv3sqc1lbx5j4yy6g2w3kakzvrpwqs2ihax6lqasj5sz5map6fk"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Logging.Abstractions"; version = "8.0.0"; sha256 = "1klcqhg3hk55hb6vmjiq2wgqidsl81aldw0li2z98lrwx26msrr6"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Logging.Configuration"; version = "8.0.0"; sha256 = "1d9b734vnll935661wqkgl7ry60rlh5p876l2bsa930mvfsaqfcv"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Logging.Console"; version = "8.0.0"; sha256 = "1mvp3ipw7k33v2qw2yrvc4vl5yzgpk3yxa94gg0gz7wmcmhzvmkd"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Options"; version = "8.0.0"; sha256 = "0p50qn6zhinzyhq9sy5svnmqqwhw2jajs2pbjh9sah504wjvhscz"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Options.ConfigurationExtensions"; version = "8.0.0"; sha256 = "04nm8v5a3zp0ill7hjnwnja3s2676b4wffdri8hdk2341p7mp403"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Primitives"; version = "8.0.0"; sha256 = "0aldaz5aapngchgdr7dax9jw5wy7k7hmjgjpfgfv1wfif27jlkqm"; })
+  (fetchNuGet { pname = "Microsoft.IO.Redist"; version = "6.0.0"; sha256 = "17d02106ksijzcnh03h8qaijs77xsba5l50chng6gb8nwi7wrbd5"; })
+  (fetchNuGet { pname = "Microsoft.NET.StringTools"; version = "17.3.2"; sha256 = "1sg1wr7lza5c0xc4cncqr9fbsr30jlzrd1kwszr9744pfqfk1jj3"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.App.Host.linux-arm64"; version = "6.0.26"; sha256 = "19y6c6v20bgf7x7rrh4rx9y7s5fy8vp5m4j9b6gi1wp4rpb5mza4"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.App.Host.linux-x64"; version = "6.0.26"; sha256 = "0p7hhidaa3mnyiwnsijwy8578v843x8hh99255s69qwwyld6falv"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.App.Host.osx-arm64"; version = "6.0.26"; sha256 = "1mq11xsv9g1vsasp6k80y7xlvwi9hrpk5dgm773fvy8538s01gfv"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.App.Host.osx-x64"; version = "6.0.26"; sha256 = "1chac9b4424ihrrnlzvc7qz6j4ymfjyv4kzyazzzw19yhymdkh2s"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.App.Ref"; version = "6.0.26"; sha256 = "12gb52dhg5h9hgnyqh1zgj2w46paxv2pfh33pphl9ajhrdr7hlsb"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.App.Runtime.linux-arm64"; version = "6.0.26"; sha256 = "164hfrwqz5dxcbb441lridk4mzcqmarb0b7ckgvqhsvpawyjw88v"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.App.Runtime.linux-x64"; version = "6.0.26"; sha256 = "0islayddpnflviqpbq4djc4f3v9nhsa2y76k5x6il3csq5vdw2hq"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.App.Runtime.osx-arm64"; version = "6.0.26"; sha256 = "1acn5zw1pxzmcg3c0pbf9hal36fbdh9mvbsiwra7simrk7hzqpdc"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.App.Runtime.osx-x64"; version = "6.0.26"; sha256 = "00f9l9dkdz0zv5csaw8fkm6s8ckrj5n9k3ygz12daa22l3bcn6ii"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "1.1.0"; sha256 = "08vh1r12g6ykjygq5d3vq09zylgb84l63k49jc4v8faw9g93iqqm"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "5.0.0"; sha256 = "0mwpwdflidzgzfx2dlpkvvnkgkr2ayaf0s80737h4wa35gaj11rc"; })
+  (fetchNuGet { pname = "Microsoft.NETFramework.ReferenceAssemblies"; version = "1.0.3"; sha256 = "0hc4d4d4358g5192mf8faijwk0bpf9pjwcfd3h85sr67j0zhj6hl"; })
+  (fetchNuGet { pname = "Microsoft.NETFramework.ReferenceAssemblies.net472"; version = "1.0.3"; sha256 = "0z7mpiljkqjw1qi5zapv7mg9pyfyzlgmil34j4wi3y9r19bsb87z"; })
+  (fetchNuGet { pname = "Microsoft.TestPlatform.ObjectModel"; version = "17.8.0"; sha256 = "0b0i7lmkrcfvim8i3l93gwqvkhhhfzd53fqfnygdqvkg6np0cg7m"; })
+  (fetchNuGet { pname = "Microsoft.TestPlatform.TranslationLayer"; version = "17.8.0"; sha256 = "0395fkyhibrlz672v23rgalbzw3y878aclk6shqvdk9xca6bg4b1"; })
+  (fetchNuGet { pname = "Microsoft.VisualStudio.Threading"; version = "17.6.40"; sha256 = "1iv67ndrvls7qa3wrh7mnswqbhx8ggr0w1hi7md1grfm4f0nqyz4"; })
+  (fetchNuGet { pname = "Microsoft.VisualStudio.Threading.Analyzers"; version = "17.6.40"; sha256 = "0ba9r9y3jsx3s3j190mv4gg47ibyl44s58whwvas9c64hhs4n22s"; })
+  (fetchNuGet { pname = "Microsoft.VisualStudio.Validation"; version = "17.6.11"; sha256 = "0qx4nzsx28galgzzjkgf541254d433dgxcaf7y2y1qyyxgsfjj1f"; })
+  (fetchNuGet { pname = "Microsoft.Win32.Registry"; version = "5.0.0"; sha256 = "102hvhq2gmlcbq8y2cb7hdr2dnmjzfp2k3asr1ycwrfacwyaak7n"; })
+  (fetchNuGet { pname = "Microsoft.Win32.SystemEvents"; version = "6.0.0"; sha256 = "0c6pcj088g1yd1vs529q3ybgsd2vjlk5y1ic6dkmbhvrp5jibl9p"; })
+  (fetchNuGet { pname = "Nerdbank.Streams"; version = "2.10.69"; sha256 = "1klsyly7k1xhbhrpq2s2iwdlmw3xyvh51rcakfazwxkv2hm5fj3b"; })
+  (fetchNuGet { pname = "NETStandard.Library"; version = "2.0.0"; sha256 = "1bc4ba8ahgk15m8k4nd7x406nhi0kwqzbgjk2dmw52ss553xz7iy"; })
+  (fetchNuGet { pname = "NETStandard.Library"; version = "2.0.3"; sha256 = "1fn9fxppfcg4jgypp2pmrpr6awl3qz1xmnri0cygpkwvyx27df1y"; })
+  (fetchNuGet { pname = "Newtonsoft.Json"; version = "13.0.3"; sha256 = "0xrwysmrn4midrjal8g2hr1bbg38iyisl0svamb11arqws4w2bw7"; })
+  (fetchNuGet { pname = "NuGet.Common"; version = "6.8.0-rc.122"; sha256 = "0sszc6426749r7dqq1i46pwl92n1dklqd723px57pjs0b1a7ddwc"; url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/nuget.common/6.8.0-rc.122/nuget.common.6.8.0-rc.122.nupkg"; })
+  (fetchNuGet { pname = "NuGet.Configuration"; version = "6.8.0-rc.122"; sha256 = "06d7r5yxf69d2wagpzkd77cnrbm5cv3z3dfsgj1zy7c2pb9a2rmk"; url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/nuget.configuration/6.8.0-rc.122/nuget.configuration.6.8.0-rc.122.nupkg"; })
+  (fetchNuGet { pname = "NuGet.DependencyResolver.Core"; version = "6.8.0-rc.122"; sha256 = "1sarid71h7cs7d2h7zv313rxx1icpwli2lcfpasascsf0ahbf0pv"; url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/nuget.dependencyresolver.core/6.8.0-rc.122/nuget.dependencyresolver.core.6.8.0-rc.122.nupkg"; })
+  (fetchNuGet { pname = "NuGet.Frameworks"; version = "6.8.0-rc.122"; sha256 = "07pfykvbm070dyiraillk5h4rzmfm89dr0km7bnflf1hq9l6z5xi"; url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/nuget.frameworks/6.8.0-rc.122/nuget.frameworks.6.8.0-rc.122.nupkg"; })
+  (fetchNuGet { pname = "NuGet.LibraryModel"; version = "6.8.0-rc.122"; sha256 = "1kflrd8kmd80190zjll4rzmfvz36ffnnb4w0psm977qpj90vpcgl"; url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/nuget.librarymodel/6.8.0-rc.122/nuget.librarymodel.6.8.0-rc.122.nupkg"; })
+  (fetchNuGet { pname = "NuGet.Packaging"; version = "6.8.0-rc.122"; sha256 = "1bhaclf8x3vgwd1hb05knb1hyq7kdg64l959mgsd9cwqgjy5rksy"; url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/nuget.packaging/6.8.0-rc.122/nuget.packaging.6.8.0-rc.122.nupkg"; })
+  (fetchNuGet { pname = "NuGet.Packaging.Core"; version = "6.8.0-rc.122"; sha256 = "10c2mfim8hk3jjbclaibh3j4cr9ii9mhg2f9f4pvcwwdd2xwcv0d"; url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/nuget.packaging.core/6.8.0-rc.122/nuget.packaging.core.6.8.0-rc.122.nupkg"; })
+  (fetchNuGet { pname = "NuGet.ProjectModel"; version = "6.8.0-rc.122"; sha256 = "07ddcwbpqj9ki56k26fqr2ya6lh81fx9iacq40gz2jnlfkx5ipa1"; url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/nuget.projectmodel/6.8.0-rc.122/nuget.projectmodel.6.8.0-rc.122.nupkg"; })
+  (fetchNuGet { pname = "NuGet.Protocol"; version = "6.8.0-rc.122"; sha256 = "012zjl6lqv7smgksjiglabnhx5ywqf0pl357kppmhbsifhrk7j6w"; url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/nuget.protocol/6.8.0-rc.122/nuget.protocol.6.8.0-rc.122.nupkg"; })
+  (fetchNuGet { pname = "NuGet.Versioning"; version = "6.8.0-rc.122"; sha256 = "1y1f0kzwzm5nx7bhmqdxfvl367mm0xj9ddiv5bwg7iwjxfz0ga29"; url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/nuget.versioning/6.8.0-rc.122/nuget.versioning.6.8.0-rc.122.nupkg"; })
+  (fetchNuGet { pname = "OmniSharp.Extensions.JsonRpc"; version = "0.19.9"; sha256 = "0r8m36qqddzmnv4wdpxs7qa17f4kbb9r2zwn7n41amy3lp5f7w4z"; })
+  (fetchNuGet { pname = "OmniSharp.Extensions.JsonRpc.Generators"; version = "0.19.9"; sha256 = "0g7v185mraq7bvihavagdl46rmfrkv1vr6cyb9jf1agi5i7abkyz"; })
+  (fetchNuGet { pname = "OmniSharp.Extensions.LanguageProtocol"; version = "0.19.9"; sha256 = "0352bg0g4818y3nbxq8jmmdw60dgyxw4pjpr181sdyi73vmbnlrg"; })
+  (fetchNuGet { pname = "OmniSharp.Extensions.LanguageServer"; version = "0.19.9"; sha256 = "0vb5kmf4hnrbssgj3nwsjdns0671k1llyplagm57m5wliaw12qkh"; })
+  (fetchNuGet { pname = "OmniSharp.Extensions.LanguageServer.Shared"; version = "0.19.9"; sha256 = "124af8b6ixra1xm168nz5wfn674xfk0zhpj9dmfaasfi33sdwvjb"; })
+  (fetchNuGet { pname = "SQLitePCLRaw.bundle_green"; version = "2.1.0"; sha256 = "008bnj279y7gxcai69r4bqgxpxwsdb8jvai4kxkd97arlcr1cpjv"; })
+  (fetchNuGet { pname = "SQLitePCLRaw.core"; version = "2.1.0"; sha256 = "0kq5x9k5kl6lh7jp1hgjn08wl37zribrykfimhln6mkqbp1myncp"; })
+  (fetchNuGet { pname = "SQLitePCLRaw.lib.e_sqlite3"; version = "2.1.0"; sha256 = "1ibkkz5dsac64nf7alsdsr8r1jm8j87vv6chsi3azkf5zv0rphsy"; })
+  (fetchNuGet { pname = "SQLitePCLRaw.provider.dynamic_cdecl"; version = "2.1.0"; sha256 = "12a6s3knynfrzf9vxxy6hwg4hvxncc0ad59g3bigqx86p8xfb4nq"; })
+  (fetchNuGet { pname = "SQLitePCLRaw.provider.e_sqlite3"; version = "2.1.0"; sha256 = "1g7gi1kdil8iv67g42xbmfhr1l0pkz645gqnd8lfv3q24449shan"; })
+  (fetchNuGet { pname = "System.Buffers"; version = "4.5.1"; sha256 = "04kb1mdrlcixj9zh1xdi5as0k0qi8byr5mi3p3jcxx72qz93s2y3"; })
+  (fetchNuGet { pname = "System.CodeDom"; version = "6.0.0"; sha256 = "1i55cxp8ycc03dmxx4n22qi6jkwfl23cgffb95izq7bjar8avxxq"; })
+  (fetchNuGet { pname = "System.Collections.Immutable"; version = "8.0.0"; sha256 = "0z53a42zjd59zdkszcm7pvij4ri5xbb8jly9hzaad9khlf69bcqp"; })
+  (fetchNuGet { pname = "System.ComponentModel.Annotations"; version = "5.0.0"; sha256 = "021h7x98lblq9avm1bgpa4i31c2kgsa7zn4sqhxf39g087ar756j"; })
+  (fetchNuGet { pname = "System.ComponentModel.Composition"; version = "8.0.0"; sha256 = "02hmqwrdvqzq4ka4kpf88i7n3qp6lw1xwp7424kg08pa9y69swij"; })
+  (fetchNuGet { pname = "System.Composition"; version = "8.0.0"; sha256 = "0y7rp5qwwvh430nr0r15zljw01gny8yvr0gg6w5cmsk3q7q7a3dc"; })
+  (fetchNuGet { pname = "System.Composition.AttributedModel"; version = "8.0.0"; sha256 = "16j61piz1jf8hbh14i1i4m2r9vw79gdqhjr4f4i588h52249fxlz"; })
+  (fetchNuGet { pname = "System.Composition.Convention"; version = "8.0.0"; sha256 = "10fwp7692a6yyw1p8b923k061zh95a6xs3vzfdmdv5pmf41cxlb7"; })
+  (fetchNuGet { pname = "System.Composition.Hosting"; version = "8.0.0"; sha256 = "1gbfimhxx6v6073pblv4rl5shz3kgx8lvfif5db26ak8pl5qj4kb"; })
+  (fetchNuGet { pname = "System.Composition.Runtime"; version = "8.0.0"; sha256 = "0snljpgfmg0wlkwilkvn9qjjghq1pjdfgdpnwhvl2qw6vzdij703"; })
+  (fetchNuGet { pname = "System.Composition.TypedParts"; version = "8.0.0"; sha256 = "0skwla26d8clfz3alr8m42qbzsrbi7dhg74z6ha832b6730mm4pr"; })
+  (fetchNuGet { pname = "System.Configuration.ConfigurationManager"; version = "8.0.0"; sha256 = "08dadpd8lx6x7craw3h3444p7ncz4wk0a3j1681lyhhd56ln66f6"; })
+  (fetchNuGet { pname = "System.Data.DataSetExtensions"; version = "4.5.0"; sha256 = "0gk9diqx388qjmbhljsx64b5i0p9cwcaibd4h7f8x901pz84x6ma"; })
+  (fetchNuGet { pname = "System.Diagnostics.DiagnosticSource"; version = "8.0.0"; sha256 = "0nzra1i0mljvmnj1qqqg37xs7bl71fnpl68nwmdajchh65l878zr"; })
+  (fetchNuGet { pname = "System.Drawing.Common"; version = "6.0.0"; sha256 = "02n8rzm58dac2np8b3xw8ychbvylja4nh6938l5k2fhyn40imlgz"; })
+  (fetchNuGet { pname = "System.Formats.Asn1"; version = "6.0.0"; sha256 = "1vvr7hs4qzjqb37r0w1mxq7xql2b17la63jwvmgv65s1hj00g8r9"; })
+  (fetchNuGet { pname = "System.IO.Pipelines"; version = "7.0.0"; sha256 = "1ila2vgi1w435j7g2y7ykp2pdbh9c5a02vm85vql89az93b7qvav"; })
+  (fetchNuGet { pname = "System.Memory"; version = "4.5.5"; sha256 = "08jsfwimcarfzrhlyvjjid61j02irx6xsklf32rv57x2aaikvx0h"; })
+  (fetchNuGet { pname = "System.Numerics.Vectors"; version = "4.4.0"; sha256 = "0rdvma399070b0i46c4qq1h2yvjj3k013sqzkilz4bz5cwmx1rba"; })
+  (fetchNuGet { pname = "System.Numerics.Vectors"; version = "4.5.0"; sha256 = "1kzrj37yzawf1b19jq0253rcs8hsq1l2q8g69d7ipnhzb0h97m59"; })
+  (fetchNuGet { pname = "System.Reactive"; version = "6.0.0"; sha256 = "1mkvx1fwychpczksy6svfmniqhbm3xqblxqik6178l12xgq7aw45"; })
+  (fetchNuGet { pname = "System.Reflection.Metadata"; version = "8.0.0"; sha256 = "10a8vm0c3n5cili5nix6bdmiaxr69qisvk356pb81f2s8bgq40bm"; })
+  (fetchNuGet { pname = "System.Reflection.MetadataLoadContext"; version = "6.0.0"; sha256 = "1ijfiqpi3flp5g9amridhjjmzz6md1c6pnxx5h7pdbiqqx9rwrpk"; })
+  (fetchNuGet { pname = "System.Resources.Extensions"; version = "6.0.0"; sha256 = "1h73gps9ffw77vys4zwgm78fgackqw6a7rjrg75mmx79vdw1shgw"; })
+  (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "4.5.3"; sha256 = "1afi6s2r1mh1kygbjmfba6l4f87pi5sg13p4a48idqafli94qxln"; })
+  (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "6.0.0"; sha256 = "0qm741kh4rh57wky16sq4m0v05fxmkjjr87krycf5vp9f0zbahbc"; })
+  (fetchNuGet { pname = "System.Runtime.InteropServices.RuntimeInformation"; version = "4.0.0"; sha256 = "0glmvarf3jz5xh22iy3w9v3wyragcm4hfdr17v90vs7vcrm7fgp6"; })
+  (fetchNuGet { pname = "System.Runtime.InteropServices.RuntimeInformation"; version = "4.3.0"; sha256 = "0q18r1sh4vn7bvqgd6dmqlw5v28flbpj349mkdish2vjyvmnb2ii"; })
+  (fetchNuGet { pname = "System.Security.AccessControl"; version = "5.0.0"; sha256 = "17n3lrrl6vahkqmhlpn3w20afgz09n7i6rv0r3qypngwi7wqdr5r"; })
+  (fetchNuGet { pname = "System.Security.AccessControl"; version = "6.0.0"; sha256 = "0a678bzj8yxxiffyzy60z2w1nczzpi8v97igr4ip3byd2q89dv58"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Pkcs"; version = "6.0.1"; sha256 = "0wswhbvm3gh06azg9k1zfvmhicpzlh7v71qzd4x5zwizq4khv7iq"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Pkcs"; version = "6.0.4"; sha256 = "0hh5h38pnxmlrnvs72f2hzzpz4b2caiiv6xf8y7fzdg84r3imvfr"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.ProtectedData"; version = "4.4.0"; sha256 = "1q8ljvqhasyynp94a1d7jknk946m20lkwy2c3wa8zw2pc517fbj6"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.ProtectedData"; version = "8.0.0"; sha256 = "1ysjx3b5ips41s32zacf4vs7ig41906mxrsbmykdzi0hvdmjkgbx"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Xml"; version = "6.0.0"; sha256 = "0aybd4mp9f8d4kgdnrnad7bmdg872044p75nk37f8a4lvkh2sywd"; })
+  (fetchNuGet { pname = "System.Security.Permissions"; version = "6.0.0"; sha256 = "0jsl4xdrkqi11iwmisi1r2f2qn5pbvl79mzq877gndw6ans2zhzw"; })
+  (fetchNuGet { pname = "System.Security.Principal.Windows"; version = "5.0.0"; sha256 = "1mpk7xj76lxgz97a5yg93wi8lj0l8p157a5d50mmjy3gbz1904q8"; })
+  (fetchNuGet { pname = "System.Text.Encoding.CodePages"; version = "6.0.0"; sha256 = "0gm2kiz2ndm9xyzxgi0jhazgwslcs427waxgfa30m7yqll1kcrww"; })
+  (fetchNuGet { pname = "System.Text.Encoding.CodePages"; version = "7.0.0"; sha256 = "0sn6hxdjm7bw3xgsmg041ccchsa4sp02aa27cislw3x61dbr68kq"; })
+  (fetchNuGet { pname = "System.Text.Encodings.Web"; version = "8.0.0"; sha256 = "1wbypkx0m8dgpsaqgyywz4z760xblnwalb241d5qv9kx8m128i11"; })
+  (fetchNuGet { pname = "System.Text.Json"; version = "8.0.0"; sha256 = "134savxw0sq7s448jnzw17bxcijsi1v38mirpbb6zfxmqlf04msw"; })
+  (fetchNuGet { pname = "System.Threading.Channels"; version = "6.0.0"; sha256 = "1qbyi7yymqc56frqy7awvcqc1m7x3xrpx87a37dgb3mbrjg9hlcj"; })
+  (fetchNuGet { pname = "System.Threading.Channels"; version = "7.0.0"; sha256 = "1qrmqa6hpzswlmyp3yqsbnmia9i5iz1y208xpqc1y88b1f6j1v8a"; })
+  (fetchNuGet { pname = "System.Threading.Tasks.Dataflow"; version = "8.0.0"; sha256 = "02mmqnbd7ybin1yiffrq3ph71rsbrnf6r6m01j98ynydqfscz9s3"; })
+  (fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.5.4"; sha256 = "0y6ncasgfcgnjrhynaf0lwpkpkmv4a07sswwkwbwb5h7riisj153"; })
+  (fetchNuGet { pname = "System.ValueTuple"; version = "4.5.0"; sha256 = "00k8ja51d0f9wrq4vv5z2jhq8hy31kac2rg0rv06prylcybzl8cy"; })
+  (fetchNuGet { pname = "System.Windows.Extensions"; version = "6.0.0"; sha256 = "1wy9pq9vn1bqg5qnv53iqrbx04yzdmjw4x5yyi09y3459vaa1sip"; })
+]
diff --git a/nixpkgs/pkgs/development/tools/omnisharp-roslyn/updater.sh b/nixpkgs/pkgs/development/tools/omnisharp-roslyn/updater.sh
new file mode 100755
index 000000000000..10868fbd0992
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/omnisharp-roslyn/updater.sh
@@ -0,0 +1,20 @@
+#! /usr/bin/env nix-shell
+#! nix-shell -I nixpkgs=./. -i bash -p curl jq common-updater-scripts
+# shellcheck shell=bash
+
+set -euo pipefail
+
+cd "$(dirname "${BASH_SOURCE[0]}")"
+
+new_version="$(curl -s "https://api.github.com/repos/OmniSharp/omnisharp-roslyn/releases?per_page=1" | jq -r '.[0].name')"
+old_version="$(sed -nE 's/\s*version = "(.*)".*/\1/p' ./default.nix)"
+
+if [[ "$new_version" == "$old_version" ]]; then
+  echo "Already up to date!"
+  exit 0
+fi
+
+cd ../../../..
+update-source-version omnisharp-roslyn "${new_version//v}"
+
+$(nix-build -A omnisharp-roslyn.fetch-deps --no-out-link)
diff --git a/nixpkgs/pkgs/development/tools/opcr-policy/default.nix b/nixpkgs/pkgs/development/tools/opcr-policy/default.nix
new file mode 100644
index 000000000000..e1900a1f84f3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/opcr-policy/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "opcr-policy";
+  version = "0.2.9";
+
+  src = fetchFromGitHub {
+    owner = "opcr-io";
+    repo = "policy";
+    rev = "v${version}";
+    sha256 = "sha256-3ubbCPliBFe+sOQxAkQr4bJJiMvbDwDaJO/hOa88P5w=";
+  };
+  vendorHash = "sha256-oxcyKVdiTJYypgrBmH1poWc21xDyTBHk781TbA7i2gc=";
+
+  ldflags = [ "-s" "-w" "-X github.com/opcr-io/policy/pkg/version.ver=${version}" ];
+
+  subPackages = [ "cmd/policy" ];
+  # disable go workspaces
+  GOWORK = "off";
+
+  doCheck = false;
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+
+    $out/bin/policy --help
+    $out/bin/policy version | grep "version: ${version}"
+
+    runHook postInstallCheck
+  '';
+
+  meta = with lib; {
+    mainProgram = "policy";
+    homepage = "https://www.openpolicyregistry.io/";
+    changelog = "https://github.com/opcr-io/policy/releases/tag/v${version}";
+    description = "CLI for managing authorization policies";
+    longDescription = ''
+      The policy CLI is a tool for building, versioning and publishing your authorization policies.
+      It uses OCI standards to manage artifacts, and the Open Policy Agent (OPA) to compile and run.
+    '';
+    license = licenses.asl20;
+    maintainers = with maintainers; [ naphta jk ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/open-policy-agent/default.nix b/nixpkgs/pkgs/development/tools/open-policy-agent/default.nix
new file mode 100644
index 000000000000..ee249c2c7657
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/open-policy-agent/default.nix
@@ -0,0 +1,91 @@
+{ lib
+, stdenv
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+
+, enableWasmEval ? false
+}:
+
+assert enableWasmEval && stdenv.isDarwin -> builtins.throw "building with wasm on darwin is failing in nixpkgs";
+
+buildGoModule rec {
+  pname = "open-policy-agent";
+  version = "0.61.0";
+
+  src = fetchFromGitHub {
+    owner = "open-policy-agent";
+    repo = "opa";
+    rev = "v${version}";
+    hash = "sha256-d0/S9XP/W6Mhs1b9IBzm7kerb6SJ7UzsYS0DnTDVfvY=";
+  };
+
+  vendorHash = null;
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  subPackages = [ "." ];
+
+  ldflags = [ "-s" "-w" "-X github.com/open-policy-agent/opa/version.Version=${version}" ];
+
+  tags = lib.optional enableWasmEval (
+    builtins.trace
+      ("Warning: enableWasmEval breaks reproducability, "
+        + "ensure you need wasm evaluation. "
+        + "`opa build` does not need this feature.")
+      "opa_wasm");
+
+  checkFlags = lib.optionals (!enableWasmEval) [
+    "-skip=TestRegoTargetWasmAndTargetPluginDisablesIndexingTopdownStages"
+  ];
+
+  preCheck = ''
+    # Feed in all but the e2e tests for testing
+    # This is because subPackages above limits what is built to just what we
+    # want but also limits the tests
+    # Also avoid wasm tests on darwin due to wasmtime-go build issues
+    getGoDirs() {
+      go list ./... | grep -v -e e2e ${lib.optionalString stdenv.isDarwin "-e wasm"}
+    }
+  '' + lib.optionalString stdenv.isDarwin ''
+    # remove tests that have "too many open files"/"no space left on device" issues on darwin in hydra
+    rm server/server_test.go
+  '';
+
+  postInstall = ''
+    installShellCompletion --cmd opa \
+      --bash <($out/bin/opa completion bash) \
+      --fish <($out/bin/opa completion fish) \
+      --zsh <($out/bin/opa completion zsh)
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+
+    $out/bin/opa --help
+    $out/bin/opa version | grep "Version: ${version}"
+
+    ${lib.optionalString enableWasmEval ''
+      # If wasm is enabled verify it works
+      $out/bin/opa eval -t wasm 'trace("hello from wasm")'
+    ''}
+
+    runHook postInstallCheck
+  '';
+
+  meta = with lib; {
+    mainProgram = "opa";
+    homepage = "https://www.openpolicyagent.org";
+    changelog = "https://github.com/open-policy-agent/opa/blob/v${version}/CHANGELOG.md";
+    description = "General-purpose policy engine";
+    longDescription = ''
+      The Open Policy Agent (OPA, pronounced "oh-pa") is an open source, general-purpose policy engine that unifies
+      policy enforcement across the stack. OPA provides a high-level declarative language that let’s you specify policy
+      as code and simple APIs to offload policy decision-making from your software. You can use OPA to enforce policies
+      in microservices, Kubernetes, CI/CD pipelines, API gateways, and more.
+    '';
+    license = licenses.asl20;
+    maintainers = with maintainers; [ lewo jk ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/operator-sdk/default.nix b/nixpkgs/pkgs/development/tools/operator-sdk/default.nix
new file mode 100644
index 000000000000..3ba63d8440b3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/operator-sdk/default.nix
@@ -0,0 +1,52 @@
+{ lib
+, buildGoModule
+, go
+, fetchFromGitHub
+, makeWrapper
+}:
+
+buildGoModule rec {
+  pname = "operator-sdk";
+  version = "1.31.0";
+
+  src = fetchFromGitHub {
+    owner = "operator-framework";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-v/7nqZg/lwiK2k92kQWSZCSjEZhTAQHCGBcTfxQX2r0=";
+  };
+
+  vendorHash = "sha256-geKWTsDLx5drTleTnneg2JIbe5sMS5JUQxTX9Bcm+IQ=";
+
+  nativeBuildInputs = [
+    makeWrapper
+  ];
+
+  buildInputs = [
+    go
+  ];
+
+  doCheck = false;
+
+  subPackages = [
+    "cmd/ansible-operator"
+    "cmd/helm-operator"
+    "cmd/operator-sdk"
+  ];
+
+  # operator-sdk uses the go compiler at runtime
+  allowGoReference = true;
+
+  postFixup = ''
+    wrapProgram $out/bin/operator-sdk --prefix PATH : ${lib.makeBinPath [ go ]}
+  '';
+
+  meta = with lib; {
+    description = "SDK for building Kubernetes applications. Provides high level APIs, useful abstractions, and project scaffolding";
+    homepage = "https://github.com/operator-framework/operator-sdk";
+    changelog = "https://github.com/operator-framework/operator-sdk/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ arnarg ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/oq/default.nix b/nixpkgs/pkgs/development/tools/oq/default.nix
new file mode 100644
index 000000000000..8e23e72912b0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/oq/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, fetchFromGitHub
+, fetchpatch
+, crystal
+, jq
+, libxml2
+, makeWrapper
+}:
+
+crystal.buildCrystalPackage rec {
+  pname = "oq";
+  version = "1.3.4";
+
+  src = fetchFromGitHub {
+    owner = "Blacksmoke16";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-W0iGE1yVOphooiab689AFT3rhGGdXqEFyYIhrx11RTE=";
+  };
+
+  patches = [
+    (fetchpatch {
+      url = "https://github.com/Blacksmoke16/oq/commit/4f9ef2a73770465bfe2348795461fc8a90a7b9b0.diff";
+      hash = "sha256-Ljvf2+1vsGv6wJHl27T7DufI9rTUCY/YQZziOWpW8Do=";
+    })
+  ];
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ libxml2 ];
+  nativeCheckInputs = [ jq ];
+
+  format = "shards";
+
+  postInstall = ''
+    wrapProgram "$out/bin/oq" \
+      --prefix PATH : "${lib.makeBinPath [ jq ]}"
+  '';
+
+  meta = with lib; {
+    description = "A performant, and portable jq wrapper";
+    homepage = "https://blacksmoke16.github.io/oq/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ Br1ght0ne ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/oras/default.nix b/nixpkgs/pkgs/development/tools/oras/default.nix
new file mode 100644
index 000000000000..50727b811c21
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/oras/default.nix
@@ -0,0 +1,57 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles, testers, oras }:
+
+buildGoModule rec {
+  pname = "oras";
+  version = "1.1.0";
+
+  src = fetchFromGitHub {
+    owner = "oras-project";
+    repo = "oras";
+    rev = "v${version}";
+    hash = "sha256-oWDxrxCrBU0quSpRLXZ0w1COuImVj4FzAmv8574x76o=";
+  };
+
+  vendorHash = "sha256-51keQmj1eGT3rJysnfTWIl8xoHfz3NPL/qXegc3wwNc=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  excludedPackages = [ "./test/e2e" ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X oras.land/oras/internal/version.Version=${version}"
+    "-X oras.land/oras/internal/version.BuildMetadata="
+    "-X oras.land/oras/internal/version.GitTreeState=clean"
+  ];
+
+  postInstall = ''
+    installShellCompletion --cmd oras \
+      --bash <($out/bin/oras completion bash) \
+      --fish <($out/bin/oras completion fish) \
+      --zsh <($out/bin/oras completion zsh)
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+
+    $out/bin/oras --help
+    $out/bin/oras version | grep "${version}"
+
+    runHook postInstallCheck
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = oras;
+    command = "oras version";
+  };
+
+  meta = with lib; {
+    homepage = "https://oras.land/";
+    changelog = "https://github.com/oras-project/oras/releases/tag/v${version}";
+    description = "The ORAS project provides a way to push and pull OCI Artifacts to and from OCI Registries";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ jk developer-guy ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/oshka/default.nix b/nixpkgs/pkgs/development/tools/oshka/default.nix
new file mode 100644
index 000000000000..489f41b718df
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/oshka/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "oshka";
+  version = "0.4.1";
+
+  src = fetchFromGitHub {
+    owner = "k1LoW";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-fpWhqFK5h/U7DCC/SyhAlMyCMhjZHRLMlwakvlhOd3w=";
+  };
+
+  vendorHash = "sha256-ZBI3WDXfJKBEF2rmUN3LvOOPT1185dHmj88qJKsdUiE=";
+
+  ldflags = [
+    "-w"
+    "-s"
+    "-X github.com/k1LoW/oshka/version.Version=${version}"
+  ];
+
+  # Tests requires a running Docker instance
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Tool for extracting nested CI/CD supply chains and executing commands";
+    homepage = "https://github.com/k1LoW/oshka";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/osslsigncode/default.nix b/nixpkgs/pkgs/development/tools/osslsigncode/default.nix
new file mode 100644
index 000000000000..1df3c26e3774
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/osslsigncode/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, pkg-config
+, python3
+, curl
+, openssl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "osslsigncode";
+  version = "2.7";
+
+  src = fetchFromGitHub {
+    owner = "mtrojnar";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-TW4/alnAW3vifAKf02RlnpOq1uW7nc+Sjs0g1BfplLk=";
+  };
+
+  nativeBuildInputs = [ cmake pkg-config python3 ];
+
+  buildInputs = [ curl openssl ];
+
+  meta = with lib; {
+    homepage = "https://github.com/mtrojnar/osslsigncode";
+    description = "OpenSSL based Authenticode signing for PE/MSI/Java CAB files";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ mmahut prusnak ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/out-of-tree/default.nix b/nixpkgs/pkgs/development/tools/out-of-tree/default.nix
new file mode 100644
index 000000000000..a96156ca7109
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/out-of-tree/default.nix
@@ -0,0 +1,30 @@
+{ lib, buildGoModule, fetchgit, qemu, podman, makeWrapper }:
+
+buildGoModule rec {
+  pname = "out-of-tree";
+  version = "2.1.1";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  src = fetchgit {
+    rev = "refs/tags/v${version}";
+    url = "https://code.dumpstack.io/tools/${pname}.git";
+    sha256 = "sha256-XzO8NU7A5m631PjAm0F/K7qLrD+ZDSdHXaNowGaZAPo=";
+  };
+
+  vendorHash = "sha256-p1dqzng3ak9lrnzrEABhE1TP1lM2Ikc8bmvp5L3nUp0=";
+
+  doCheck = false;
+
+  postFixup = ''
+    wrapProgram $out/bin/out-of-tree \
+      --prefix PATH : "${lib.makeBinPath [ qemu podman ]}"
+  '';
+
+  meta = with lib; {
+    description = "kernel {module, exploit} development tool";
+    homepage = "https://out-of-tree.io";
+    maintainers = [ maintainers.dump_stack ];
+    license = licenses.agpl3Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/overcommit/Gemfile b/nixpkgs/pkgs/development/tools/overcommit/Gemfile
new file mode 100644
index 000000000000..39325c7561b3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/overcommit/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'overcommit'
diff --git a/nixpkgs/pkgs/development/tools/overcommit/Gemfile.lock b/nixpkgs/pkgs/development/tools/overcommit/Gemfile.lock
new file mode 100644
index 000000000000..1c75368b7d81
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/overcommit/Gemfile.lock
@@ -0,0 +1,19 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    childprocess (4.1.0)
+    iniparse (1.5.0)
+    overcommit (0.60.0)
+      childprocess (>= 0.6.3, < 5)
+      iniparse (~> 1.4)
+      rexml (~> 3.2)
+    rexml (3.2.6)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  overcommit
+
+BUNDLED WITH
+   2.4.17
diff --git a/nixpkgs/pkgs/development/tools/overcommit/default.nix b/nixpkgs/pkgs/development/tools/overcommit/default.nix
new file mode 100644
index 000000000000..663a13af370d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/overcommit/default.nix
@@ -0,0 +1,19 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "overcommit";
+  gemdir = ./.;
+  exes = [ "overcommit" ];
+
+  passthru = {
+    updateScript = bundlerUpdateScript "overcommit";
+  };
+
+  meta = with lib; {
+    description = "Tool to manage and configure Git hooks";
+    homepage    = "https://github.com/sds/overcommit";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ Br1ght0ne anthonyroussel ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/overcommit/gemset.nix b/nixpkgs/pkgs/development/tools/overcommit/gemset.nix
new file mode 100644
index 000000000000..96e84f288e4f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/overcommit/gemset.nix
@@ -0,0 +1,43 @@
+{
+  childprocess = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1lvcp8bsd35g57f7wz4jigcw2sryzzwrpcgjwwf3chmjrjcww5in";
+      type = "gem";
+    };
+    version = "4.1.0";
+  };
+  iniparse = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1wb1qy4i2xrrd92dc34pi7q7ibrjpapzk9y465v0n9caiplnb89n";
+      type = "gem";
+    };
+    version = "1.5.0";
+  };
+  overcommit = {
+    dependencies = ["childprocess" "iniparse" "rexml"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0slqmsycbqx746liwq0qw0c81xrp4051iff8s574a4fmj941gkia";
+      type = "gem";
+    };
+    version = "0.60.0";
+  };
+  rexml = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "05i8518ay14kjbma550mv0jm8a6di8yp5phzrd8rj44z9qnrlrp0";
+      type = "gem";
+    };
+    version = "3.2.6";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/oxlint/default.nix b/nixpkgs/pkgs/development/tools/oxlint/default.nix
new file mode 100644
index 000000000000..54bbc4e27a92
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/oxlint/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, rust-jemalloc-sys
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "oxlint";
+  version = "0.1.2";
+
+  src = fetchFromGitHub {
+    owner = "web-infra-dev";
+    repo = "oxc";
+    rev = "oxlint_v${version}";
+    hash = "sha256-XQDkNfgqjfUSDwC3JgdzCqYT4O14UWGImpk5gVyQKfE=";
+  };
+
+  cargoHash = "sha256-pJW7191gUv3Sbp8C2IYxJz2G/nunmBnnKaV+yLX1ZKc=";
+
+  buildInputs = [
+    rust-jemalloc-sys
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  cargoBuildFlags = [ "--bin=oxlint" ];
+  cargoTestFlags = cargoBuildFlags;
+
+  meta = with lib; {
+    description = "A suite of high-performance tools for JavaScript and TypeScript written in Rust";
+    homepage = "https://github.com/web-infra-dev/oxc";
+    changelog = "https://github.com/web-infra-dev/oxc/releases/tag/${src.rev}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "oxlint";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/package-project-cmake/default.nix b/nixpkgs/pkgs/development/tools/package-project-cmake/default.nix
new file mode 100644
index 000000000000..e768a74c427d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/package-project-cmake/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, stdenvNoCC
+, fetchFromGitHub
+}:
+
+stdenvNoCC.mkDerivation (finalAttrs: {
+  pname = "package-project-cmake";
+  version = "1.11.2";
+
+  src = fetchFromGitHub {
+    owner = "TheLartians";
+    repo = "PackageProject.cmake";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-2u7H2ZR7eQ6eoRIVZ1WBxw9K93E8BVYErZNDe1Jl8rg=";
+  };
+
+  dontConfigure = true;
+  dontBuild = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/share/{,doc/}package-project-cmake
+    install -Dm644 CMakeLists.txt $out/share/package-project-cmake/
+    install -Dm644 README.md $out/share/doc/package-project-cmake/
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/TheLartians/PackageProject.cmake";
+    description = "A CMake script for packaging C/C++ projects";
+    longDescription = ''
+      Help other developers use your project. A CMake script for packaging
+      C/C++ projects for simple project installation while employing
+      best-practices for maximum compatibility. Creating installable
+      CMake scripts always requires a large amount of boilerplate code
+      to get things working. This small script should simplify the CMake
+      packaging process into a single, easy-to-use command.
+    '';
+    license = licenses.mit;
+    maintainers = with maintainers; [ ken-matsui ];
+    platforms = platforms.all;
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/packcc/default.nix b/nixpkgs/pkgs/development/tools/packcc/default.nix
new file mode 100644
index 000000000000..4f618665573c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/packcc/default.nix
@@ -0,0 +1,68 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, bats
+, uncrustify
+, testers
+, packcc
+}:
+
+stdenv.mkDerivation rec {
+  pname = "packcc";
+  version = "1.8.0";
+
+  src = fetchFromGitHub {
+    owner = "arithy";
+    repo = "packcc";
+    rev = "v${version}";
+    hash = "sha256-T7PWM5IGly6jpGt04dh5meQjrZPUTs8VEFTQEPO5RSw=";
+  };
+
+  dontConfigure = true;
+
+  preBuild = ''
+    cd build/${if stdenv.cc.isGNU then "gcc"
+               else if stdenv.cc.isClang then "clang"
+               else throw "Unsupported C compiler"}
+  '';
+
+  doCheck = true;
+
+  nativeCheckInputs = [ bats uncrustify ];
+
+  preCheck = ''
+    patchShebangs ../../tests
+
+    # Disable a failing test.
+    rm -rf ../../tests/style.d
+  '' + lib.optionalString stdenv.cc.isClang ''
+    export NIX_CFLAGS_COMPILE+=' -Wno-error=strict-prototypes -Wno-error=int-conversion'
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 release/bin/packcc $out/bin/packcc
+
+    runHook postInstall
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = packcc;
+  };
+
+  meta = with lib; {
+    description = "A parser generator for C";
+    longDescription = ''
+      PackCC is a parser generator for C. Its main features are as follows:
+      - Generates your parser in C from a grammar described in a PEG,
+      - Gives your parser great efficiency by packrat parsing,
+      - Supports direct and indirect left-recursive grammar rules.
+    '';
+    homepage = "https://github.com/arithy/packcc";
+    changelog = "https://github.com/arithy/packcc/releases/tag/${src.rev}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ azahi ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/packer/default.nix b/nixpkgs/pkgs/development/tools/packer/default.nix
new file mode 100644
index 000000000000..cbdd003d9216
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/packer/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+}:
+
+buildGoModule rec {
+  pname = "packer";
+  version = "1.10.1";
+
+  src = fetchFromGitHub {
+    owner = "hashicorp";
+    repo = "packer";
+    rev = "v${version}";
+    hash = "sha256-P7QG4ldOJn83w5XxIzC1dhVmn2e/gcwHBT9cZiQmsbo=";
+  };
+
+  vendorHash = "sha256-KtMK6jZ9c84OVWJC1njgOh1U+wrFo4G6Qt/XfOFvIhE=";
+
+  subPackages = [ "." ];
+
+  ldflags = [ "-s" "-w" ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    installShellCompletion --zsh contrib/zsh-completion/_packer
+  '';
+
+  meta = with lib; {
+    description = "A tool for creating identical machine images for multiple platforms from a single source configuration";
+    homepage    = "https://www.packer.io";
+    license     = licenses.bsl11;
+    maintainers = with maintainers; [ zimbatm ma27 techknowlogick qjoly ];
+    changelog   = "https://github.com/hashicorp/packer/blob/v${version}/CHANGELOG.md";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/packet-sd/default.nix b/nixpkgs/pkgs/development/tools/packet-sd/default.nix
new file mode 100644
index 000000000000..a1418df2cc3a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/packet-sd/default.nix
@@ -0,0 +1,43 @@
+{ buildGoModule
+, fetchFromGitHub
+, fetchpatch2
+, lib
+}:
+
+buildGoModule rec {
+  pname = "prometheus-packet-sd";
+  version = "0.0.3";
+
+  src = fetchFromGitHub {
+    owner = "packethost";
+    repo = "prometheus-packet-sd";
+    rev = "v${version}";
+    hash = "sha256-2k8AsmyhQNNZCzpVt6JdgvI8IFb5pRi4ic6Yn2NqHMM=";
+  };
+
+  patches = [
+    (fetchpatch2 {
+      # fix racy permissions on outfile
+      # https://github.com/packethost/prometheus-packet-sd/issues/15
+      url = "https://github.com/packethost/prometheus-packet-sd/commit/bf0ed3a1da4d0f797bd29e4a1857ac65a1d04750.patch";
+      hash = "sha256-ZLV9lyqZxpIQ1Cmzy/nY/85b4QWF5Ou0XcdrZXxck2E=";
+    })
+    (fetchpatch2 {
+      # restrict outfile to not be world/group writable
+      url = "https://github.com/packethost/prometheus-packet-sd/commit/a0afc2a4c3f49dc234d0d2c4901df25b4110b3ec.patch";
+      hash = "sha256-M5133+r77z21/Ulnbz+9sGbbuY5UpU1+22iY464UVAU=";
+    })
+  ];
+
+  vendorHash = null;
+
+  subPackages = [ "." ];
+
+  meta = with lib; {
+    description = "Prometheus service discovery for Equinix Metal";
+    homepage = "https://github.com/packethost/prometheus-packet-sd";
+    license = licenses.asl20;
+    maintainers = [ ];
+    mainProgram = "prometheus-packet-sd";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/packet/default.nix b/nixpkgs/pkgs/development/tools/packet/default.nix
new file mode 100644
index 000000000000..61e9b210683f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/packet/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "packet";
+  version = "2.2.2";
+
+  goPackagePath = "github.com/ebsarr/packet";
+
+  src = fetchFromGitHub {
+    owner = "ebsarr";
+    repo = "packet";
+    rev = "v${version}";
+    sha256 = "sha256-jm9u+LQE48aqO6CLdLZAw38woH1phYnEYpEsRbNwyKI=";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with lib; {
+    description = "a CLI tool to manage packet.net services";
+    homepage = "https://github.com/ebsarr/packet";
+    license = licenses.mit;
+    maintainers = with maintainers; [ grahamc ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/packet/deps.nix b/nixpkgs/pkgs/development/tools/packet/deps.nix
new file mode 100644
index 000000000000..53a9bef73207
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/packet/deps.nix
@@ -0,0 +1,156 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.2.1
+[
+  {
+    goPackagePath = "github.com/cpuguy83/go-md2man";
+    fetch = {
+      type = "git";
+      url = "https://github.com/cpuguy83/go-md2man";
+      rev = "691ee98543af2f262f35fbb54bdd42f00b9b9cc5";
+      sha256 = "1864g10y9n6ni0p1yqjhvwyjdh0lgxnf7dlb0c4njazdg5rppww9";
+    };
+  }
+  {
+    goPackagePath = "github.com/ebsarr/packngo";
+    fetch = {
+      type = "git";
+      url = "https://github.com/ebsarr/packngo";
+      rev = "bc067ae8c334d03f246fd5537dac6d4ed4192ada";
+      sha256 = "1q7w8pdw87ifmkpcayk5qri4lb81bh82jrzh3fdmnbldwmjynyj2";
+    };
+  }
+  {
+    goPackagePath = "github.com/fsnotify/fsnotify";
+    fetch = {
+      type = "git";
+      url = "https://github.com/fsnotify/fsnotify";
+      rev = "ccc981bf80385c528a65fbfdd49bf2d8da22aa23";
+      sha256 = "0hcrfmiyx27izac3v0ii0qq2kfjvhr9ma1i79hrl6a6y2ayagzz7";
+    };
+  }
+  {
+    goPackagePath = "github.com/hashicorp/hcl";
+    fetch = {
+      type = "git";
+      url = "https://github.com/hashicorp/hcl";
+      rev = "8cb6e5b959231cc1119e43259c4a608f9c51a241";
+      sha256 = "0q6ml0qqs0yil76mpn4mdx4lp94id8vbv575qm60jzl1ijcl5i66";
+    };
+  }
+  {
+    goPackagePath = "github.com/magiconair/properties";
+    fetch = {
+      type = "git";
+      url = "https://github.com/magiconair/properties";
+      rev = "c2353362d570a7bfa228149c62842019201cfb71";
+      sha256 = "1a10362wv8a8qwb818wygn2z48lgzch940hvpv81hv8gc747ajxn";
+    };
+  }
+  {
+    goPackagePath = "github.com/mitchellh/mapstructure";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mitchellh/mapstructure";
+      rev = "fa473d140ef3c6adf42d6b391fe76707f1f243c8";
+      sha256 = "0f06q4fpzg0c370cvmpsl0iq2apl5nkbz5cd3nba5x5ysmshv1lm";
+    };
+  }
+  {
+    goPackagePath = "github.com/packethost/packngo";
+    fetch = {
+      type = "git";
+      url = "https://github.com/packethost/packngo";
+      rev = "2100ba98e6dc4ca18563d91edfdbba3c4bf46ddb";
+      sha256 = "03iav4lxiir9dphygh5jgqvygs59ci80yfqws34vzy47pxb1wsc8";
+    };
+  }
+  {
+    goPackagePath = "github.com/pelletier/go-toml";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pelletier/go-toml";
+      rev = "c2dbbc24a97911339e01bda0b8cabdbd8f13b602";
+      sha256 = "0v1dsqnk5zmn6ir8jgxijx14s47jvijlqfz3aq435snfrgybd5rz";
+    };
+  }
+  {
+    goPackagePath = "github.com/spf13/afero";
+    fetch = {
+      type = "git";
+      url = "https://github.com/spf13/afero";
+      rev = "787d034dfe70e44075ccc060d346146ef53270ad";
+      sha256 = "0138rjiacl71h7kvhzinviwvy6qa2m6rflpv9lgqv15hnjvhwvg1";
+    };
+  }
+  {
+    goPackagePath = "github.com/spf13/cast";
+    fetch = {
+      type = "git";
+      url = "https://github.com/spf13/cast";
+      rev = "8965335b8c7107321228e3e3702cab9832751bac";
+      sha256 = "177bk7lq40jbgv9p9r80aydpaccfk8ja3a7jjhfwiwk9r1pa4rr2";
+    };
+  }
+  {
+    goPackagePath = "github.com/spf13/cobra";
+    fetch = {
+      type = "git";
+      url = "https://github.com/spf13/cobra";
+      rev = "99dc123558852f67743bd0b2caf8383cb3c6d720";
+      sha256 = "0b2rjgycgpkpvpsqgvilqkr66bfk477lyd6l0jxmgxb1h0za5s25";
+    };
+  }
+  {
+    goPackagePath = "github.com/spf13/jwalterweatherman";
+    fetch = {
+      type = "git";
+      url = "https://github.com/spf13/jwalterweatherman";
+      rev = "14d3d4c518341bea657dd8a226f5121c0ff8c9f2";
+      sha256 = "1f9154lijbz0kkgqwmbphykwl4adv4fvkx6n1p7fdq3x5j9g8i17";
+    };
+  }
+  {
+    goPackagePath = "github.com/spf13/pflag";
+    fetch = {
+      type = "git";
+      url = "https://github.com/spf13/pflag";
+      rev = "298182f68c66c05229eb03ac171abe6e309ee79a";
+      sha256 = "1cj3cjm7d3zk0mf1xdybh0jywkbbw7a6yr3y22x9sis31scprswd";
+    };
+  }
+  {
+    goPackagePath = "github.com/spf13/viper";
+    fetch = {
+      type = "git";
+      url = "https://github.com/spf13/viper";
+      rev = "0ac2068de99fd349edc4954d0e9b4a600d75da44";
+      sha256 = "1h33gm0m0d4mrwf097v2mpwjza1zmmkqy67a51jjdcrqx1zys8gj";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/sys";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sys";
+      rev = "fa5fdf94c78965f1aa8423f0cc50b8b8d728b05a";
+      sha256 = "1wrf7y6a1ar1r8yd88zlmic55alx91k5nqks7f8w1d5j7hp1if35";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/text";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/text";
+      rev = "6e3c4e7365ddcc329f090f96e4348398f6310088";
+      sha256 = "1r511ncipn7sdlssn06fpzcpy4mp4spagni4ryxq86p2b0bi8pn4";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/yaml.v2";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/yaml.v2";
+      rev = "5420a8b6744d3b0345ab293f6fcba19c978f1183";
+      sha256 = "0dwjrs2lp2gdlscs7bsrmyc5yf6mm4fvgw71bzr9mv2qrd2q73s1";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/development/tools/pactorio/default.nix b/nixpkgs/pkgs/development/tools/pactorio/default.nix
new file mode 100644
index 000000000000..5d7558669045
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/pactorio/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, installShellFiles
+, pkg-config
+, bzip2
+, stdenv
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "pactorio";
+  version = "0.6.0";
+
+  src = fetchFromGitHub {
+    owner = "figsoda";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-3+irejeDltf7x+gyJxWBgvPgpQx5uU3DewU23Z4Nr/A=";
+  };
+
+  cargoSha256 = "sha256-sAFsG+EPSmvPDFR9R0fZ5f+y/PXVpTJlMzL61vwf4SY=";
+
+  nativeBuildInputs = [ installShellFiles pkg-config ];
+
+  buildInputs = [ bzip2 ] ++ lib.optional stdenv.isDarwin Security;
+
+  postInstall = ''
+    installManPage artifacts/pactorio.1
+    installShellCompletion artifacts/pactorio.{bash,fish} --zsh artifacts/_pactorio
+  '';
+
+  GEN_ARTIFACTS = "artifacts";
+
+  meta = with lib; {
+    description = "Mod packager for factorio";
+    homepage = "https://github.com/figsoda/pactorio";
+    changelog = "https://github.com/figsoda/pactorio/blob/v${version}/CHANGELOG.md";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/paging-calculator/default.nix b/nixpkgs/pkgs/development/tools/paging-calculator/default.nix
new file mode 100644
index 000000000000..b3cf80588142
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/paging-calculator/default.nix
@@ -0,0 +1,31 @@
+{ fetchCrate
+, lib
+, rustPlatform
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "paging-calculator";
+  version = "0.3.0";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-uoijIA9xmifxHlMRo5Rh/Qy1wxiiCNLJnDysI01uPvk=";
+  };
+
+  cargoHash = "sha256-RbBlZCRVXZLXvz+/olkh2MqJiWq63AwLvo+/5UGRuyM=";
+
+  meta = {
+    description = "CLI utility that helps calculating page table indices from a virtual address";
+    longDescription = ''
+      paging-calculator is a CLI utility written in Rust that helps you finding the indices that a
+      virtual address will have into the page tables on different architectures.
+
+      It takes a (virtual) address in hexadecimal format and shows you which index is used for
+      which level of the page table.
+    '';
+    homepage = "https://github.com/phip1611/paging-calculator";
+    changelog = "https://github.com/phip1611/paging-calculator/blob/v${version}/CHANGELOG.md";
+    license = with lib.licenses; [ mit ];
+    maintainers = with lib.maintainers; [ phip1611 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/pandoc/default.nix b/nixpkgs/pkgs/development/tools/pandoc/default.nix
new file mode 100644
index 000000000000..a2ceef50eb6f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/pandoc/default.nix
@@ -0,0 +1,57 @@
+{ stdenv, lib, haskellPackages, haskell, removeReferencesTo, installShellFiles }:
+
+let
+  # Since pandoc 3.0 the pandoc binary resides in the pandoc-cli package.
+  static = haskell.lib.compose.justStaticExecutables haskellPackages.pandoc-cli;
+
+in
+  (haskell.lib.compose.overrideCabal (drv: {
+    # pandoc-cli's pandoc executable report the libraries version via --version, match that,
+    inherit (static.scope.pandoc) version;
+    # but prevent haskellPackages.mkDerivation from recomputing the src tarball based on that.
+    inherit (static) src;
+    # Make it possible to recover the cli version if necessary.
+    passthru = drv.passthru or {} // {
+      cliVersion = static.version;
+    };
+
+    configureFlags = drv.configureFlags or [] ++ ["-fembed_data_files"];
+    buildDepends = drv.buildDepends or [] ++ [haskellPackages.file-embed];
+    buildTools = (drv.buildTools or []) ++ [
+      removeReferencesTo
+      installShellFiles
+    ];
+
+    # Normally, the static linked executable shouldn't refer to any library or the compiler.
+    # This is not always the case when the dependency has Paths_* module generated by Cabal,
+    # where bindir, datadir, and libdir contain the path to the library, and thus make the
+    # executable indirectly refer to GHC. However, most Haskell programs only use Paths_*.version for
+    # getting the version at runtime, so it's safe to remove the references to them.
+    # This is true so far for pandoc-types and warp.
+    # For details see: https://github.com/NixOS/nixpkgs/issues/34376
+    postInstall = drv.postInstall or "" + ''
+      remove-references-to \
+        -t ${haskellPackages.pandoc-types} \
+        $out/bin/pandoc
+      remove-references-to \
+        -t ${haskellPackages.warp} \
+        $out/bin/pandoc
+      remove-references-to \
+        -t ${haskellPackages.pandoc_3_1_11} \
+        $out/bin/pandoc
+    '' + lib.optionalString (stdenv.buildPlatform == stdenv.hostPlatform) ''
+      mkdir -p $out/share/bash-completion/completions
+      $out/bin/pandoc --bash-completion > $out/share/bash-completion/completions/pandoc
+    '' + ''
+      installManPage man/*
+    '';
+  }) static).overrideAttrs (drv: {
+    # These libraries are still referenced, because they generate
+    # a `Paths_*` module for figuring out their version.
+    # The `Paths_*` module is generated by Cabal, and contains the
+    # version, but also paths to e.g. the data directories, which
+    # lead to a transitive runtime dependency on the whole GHC distribution.
+    # This should ideally be fixed in haskellPackages (or even Cabal),
+    # but a minimal pandoc is important enough to patch it manually.
+    disallowedReferences = [ haskellPackages.pandoc-types haskellPackages.warp haskellPackages.pandoc_3_1_11 ];
+  })
diff --git a/nixpkgs/pkgs/development/tools/parinfer-rust/default.nix b/nixpkgs/pkgs/development/tools/parinfer-rust/default.nix
new file mode 100644
index 000000000000..ade168b81614
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parinfer-rust/default.nix
@@ -0,0 +1,34 @@
+{ lib, rustPlatform, fetchFromGitHub, llvmPackages }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "parinfer-rust";
+  version = "0.4.3";
+
+  src = fetchFromGitHub {
+    owner = "eraserhd";
+    repo = "parinfer-rust";
+    rev = "v${version}";
+    sha256 = "0hj5in5h7pj72m4ag80ing513fh65q8xlsf341qzm3vmxm3y3jgd";
+  };
+
+  cargoSha256 = "1lam4gwzcj6w0pyxf61l2cpbvvf5gmj2gwi8dangnhd60qhlnvrx";
+
+  nativeBuildInputs = [ llvmPackages.clang rustPlatform.bindgenHook ];
+
+  postInstall = ''
+    mkdir -p $out/share/kak/autoload/plugins
+    cp rc/parinfer.kak $out/share/kak/autoload/plugins/
+
+    rtpPath=$out/plugin
+    mkdir -p $rtpPath
+    sed "s,let s:libdir = .*,let s:libdir = '${placeholder "out"}/lib'," \
+      plugin/parinfer.vim > $rtpPath/parinfer.vim
+  '';
+
+  meta = with lib; {
+    description = "Infer parentheses for Clojure, Lisp, and Scheme";
+    homepage = "https://github.com/eraserhd/parinfer-rust";
+    license = licenses.isc;
+    maintainers = with maintainers; [ eraserhd ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/parse-cli-bin/default.nix b/nixpkgs/pkgs/development/tools/parse-cli-bin/default.nix
new file mode 100644
index 000000000000..33dbd0fec181
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parse-cli-bin/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "parse-cli-bin";
+  version = "3.0.5";
+
+  src = fetchurl {
+    url = "https://github.com/ParsePlatform/parse-cli/releases/download/release_${version}/parse_linux";
+    sha256 = "1iyfizbbxmr87wjgqiwqds51irgw6l3vm9wn89pc3zpj2zkyvf5h";
+  };
+
+  meta = with lib; {
+    description = "Parse Command Line Interface";
+    homepage    = "https://parse.com";
+    platforms   = platforms.linux;
+    license     = licenses.bsd3;
+  };
+
+  dontUnpack = true;
+
+  installPhase = ''
+    mkdir -p "$out/bin"
+    cp "$src" "$out/bin/parse"
+    chmod +x "$out/bin/parse"
+  '';
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/antlr/2.7.7-fixes.patch b/nixpkgs/pkgs/development/tools/parsing/antlr/2.7.7-fixes.patch
new file mode 100644
index 000000000000..a71b7718e3bf
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/antlr/2.7.7-fixes.patch
@@ -0,0 +1,26 @@
+diff --git a/lib/cpp/antlr/CharScanner.hpp b/lib/cpp/antlr/CharScanner.hpp
+index 8a97e97..1835a3e 100644
+--- a/lib/cpp/antlr/CharScanner.hpp
++++ b/lib/cpp/antlr/CharScanner.hpp
+@@ -11,6 +11,8 @@
+ #include <antlr/config.hpp>
+ 
+ #include <map>
++#include <cstdio>
++#include <cstring>
+ 
+ #ifdef HAS_NOT_CCTYPE_H
+ #include <ctype.h>
+diff --git a/scripts/config.make.in b/scripts/config.make.in
+index c23dd5c..6057309 100644
+--- a/scripts/config.make.in
++++ b/scripts/config.make.in
+@@ -38,7 +38,7 @@ MAKEOVERRIDES := $(patsubst SUBDIRS=%,,$(MAKEOVERRIDES))
+ all clean distclean test install force-target clean-target :: 
+ 	@dirs="$(SUBDIRS)" ; \
+ 	test -z "$${dirs}" && { \
+-		dirs=`/bin/ls` ; \
++		dirs=`ls` ; \
+   } ; \
+ 	for d in . $${dirs} ; do \
+ 		case $${d} in \
diff --git a/nixpkgs/pkgs/development/tools/parsing/antlr/2.7.7.nix b/nixpkgs/pkgs/development/tools/parsing/antlr/2.7.7.nix
new file mode 100644
index 000000000000..b7437d70bf80
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/antlr/2.7.7.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchurl, jdk }:
+
+stdenv.mkDerivation rec {
+  pname = "antlr";
+  version = "2.7.7";
+  src = fetchurl {
+    url = "https://www.antlr2.org/download/antlr-${version}.tar.gz";
+    sha256 = "1ffvcwdw73id0dk6pj2mlxjvbg0662qacx4ylayqcxgg381fnfl5";
+  };
+  patches = [ ./2.7.7-fixes.patch ];
+  buildInputs = [ jdk ];
+
+  meta = with lib; {
+    description = "Powerful parser generator";
+    longDescription = ''
+      ANTLR (ANother Tool for Language Recognition) is a powerful parser
+      generator for reading, processing, executing, or translating structured
+      text or binary files. It's widely used to build languages, tools, and
+      frameworks. From a grammar, ANTLR generates a parser that can build and
+      walk parse trees.
+    '';
+    homepage = "https://www.antlr.org/";
+    license = licenses.bsd3;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/antlr/3.4.nix b/nixpkgs/pkgs/development/tools/parsing/antlr/3.4.nix
new file mode 100644
index 000000000000..38493dedab10
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/antlr/3.4.nix
@@ -0,0 +1,40 @@
+{lib, stdenv, fetchurl, jre}:
+
+stdenv.mkDerivation rec {
+  pname = "antlr";
+  version = "3.4";
+  src = fetchurl {
+    url ="https://www.antlr3.org/download/antlr-${version}-complete.jar";
+    sha256 = "1xqbam8vf04q5fasb0m2n1pn5dbp2yw763sj492ncq04c5mqcglx";
+  };
+
+  dontUnpack = true;
+
+  installPhase = ''
+    mkdir -p "$out"/{lib/antlr,bin}
+    cp "$src" "$out/lib/antlr/antlr-${version}-complete.jar"
+
+    echo "#! ${stdenv.shell}" >> "$out/bin/antlr"
+    echo "'${jre}/bin/java' -cp '$out/lib/antlr/antlr-${version}-complete.jar' -Xms200M -Xmx400M org.antlr.Tool \"\$@\"" >> "$out/bin/antlr"
+
+    chmod a+x "$out/bin/antlr"
+    ln -s "$out/bin/antlr"{,3}
+  '';
+
+  inherit jre;
+
+  meta = with lib; {
+    description = "Powerful parser generator";
+    longDescription = ''
+      ANTLR (ANother Tool for Language Recognition) is a powerful parser
+      generator for reading, processing, executing, or translating structured
+      text or binary files. It's widely used to build languages, tools, and
+      frameworks. From a grammar, ANTLR generates a parser that can build and
+      walk parse trees.
+    '';
+    homepage = "https://www.antlr.org/";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.bsd3;
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/antlr/3.5.nix b/nixpkgs/pkgs/development/tools/parsing/antlr/3.5.nix
new file mode 100644
index 000000000000..132da31fee35
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/antlr/3.5.nix
@@ -0,0 +1,53 @@
+{lib, stdenv, fetchpatch, fetchurl, fetchFromGitHub, jre}:
+
+stdenv.mkDerivation rec {
+  pname = "antlr";
+  version = "3.5.2";
+  jar = fetchurl {
+    url = "https://www.antlr3.org/download/antlr-${version}-complete.jar";
+    sha256 = "0srjwxipwsfzmpi0v32d1l5lzk9gi5in8ayg33sq8wyp8ygnbji6";
+  };
+  src = fetchFromGitHub {
+    owner = "antlr";
+    repo = "antlr3";
+    rev = "5c2a916a10139cdb5c7c8851ee592ed9c3b3d4ff";
+    sha256 = "1i0w2v9prrmczlwkfijfp4zfqfgrss90a7yk2hg3y0gkg2s4abbk";
+  };
+
+  patches = [
+    (fetchpatch {
+      url = "https://src.fedoraproject.org/rpms/antlr3/raw/f1bb8d639678047935e1761c3bf3c1c7da8d0f1d/f/0006-antlr3memory.hpp-fix-for-C-20-mode.patch";
+      sha256 = "0apk904afjqbad6c7z9r72a9lkbz69vwrl8j2a6zgxjn8dfb2p8b";
+    })
+  ];
+
+  installPhase = ''
+    mkdir -p "$out"/{lib/antlr,bin,include}
+    cp "$jar" "$out/lib/antlr/antlr-${version}-complete.jar"
+    cp runtime/Cpp/include/* $out/include/
+
+    echo "#! ${stdenv.shell}" >> "$out/bin/antlr"
+    echo "'${jre}/bin/java' -cp '$out/lib/antlr/antlr-${version}-complete.jar' -Xms200M -Xmx400M org.antlr.Tool \"\$@\"" >> "$out/bin/antlr"
+
+    chmod a+x "$out/bin/antlr"
+    ln -s "$out/bin/antlr"{,3}
+  '';
+
+  inherit jre;
+
+  meta = with lib; {
+    description = "Powerful parser generator";
+    longDescription = ''
+      ANTLR (ANother Tool for Language Recognition) is a powerful parser
+      generator for reading, processing, executing, or translating structured
+      text or binary files. It's widely used to build languages, tools, and
+      frameworks. From a grammar, ANTLR generates a parser that can build and
+      walk parse trees.
+    '';
+    homepage = "https://www.antlr.org/";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.bsd3;
+    platforms = platforms.linux;
+    maintainers = [ lib.maintainers.farlion ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/antlr/4.nix b/nixpkgs/pkgs/development/tools/parsing/antlr/4.nix
new file mode 100644
index 000000000000..a4b2034852f2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/antlr/4.nix
@@ -0,0 +1,184 @@
+{ lib, stdenv, fetchurl, jre
+, fetchFromGitHub, cmake, ninja, pkg-config
+
+# darwin only
+, CoreFoundation ? null
+
+# ANTLR 4.8 & 4.9
+, libuuid
+
+# ANTLR 4.9
+, utf8cpp }:
+
+let
+
+  mkAntlr = {
+    version, sourceSha256, jarSha256,
+    extraCppBuildInputs ? [],
+    extraCppCmakeFlags ? [],
+    extraPatches ? [ ]
+  }: rec {
+    source = fetchFromGitHub {
+      owner = "antlr";
+      repo = "antlr4";
+      rev = version;
+      sha256 = sourceSha256;
+    };
+
+    antlr = stdenv.mkDerivation {
+      pname = "antlr";
+      inherit version;
+
+      src = fetchurl {
+        url = "https://www.antlr.org/download/antlr-${version}-complete.jar";
+        sha256 = jarSha256;
+      };
+
+      dontUnpack = true;
+
+      installPhase = ''
+        mkdir -p "$out"/{share/java,bin}
+        cp "$src" "$out/share/java/antlr-${version}-complete.jar"
+
+        echo "#! ${stdenv.shell}" >> "$out/bin/antlr"
+        echo "'${jre}/bin/java' -cp '$out/share/java/antlr-${version}-complete.jar:$CLASSPATH' -Xmx500M org.antlr.v4.Tool \"\$@\"" >> "$out/bin/antlr"
+
+        echo "#! ${stdenv.shell}" >> "$out/bin/antlr-parse"
+        echo "'${jre}/bin/java' -cp '$out/share/java/antlr-${version}-complete.jar:$CLASSPATH' -Xmx500M org.antlr.v4.gui.Interpreter \"\$@\"" >> "$out/bin/antlr-parse"
+
+        echo "#! ${stdenv.shell}" >> "$out/bin/grun"
+        echo "'${jre}/bin/java' -cp '$out/share/java/antlr-${version}-complete.jar:$CLASSPATH' org.antlr.v4.gui.TestRig \"\$@\"" >> "$out/bin/grun"
+
+        chmod a+x "$out/bin/antlr" "$out/bin/antlr-parse" "$out/bin/grun"
+        ln -s "$out/bin/antlr"{,4}
+        ln -s "$out/bin/antlr"{,4}-parse
+      '';
+
+      inherit jre;
+
+      passthru = {
+        inherit runtime;
+        jarLocation = "${antlr}/share/java/antlr-${version}-complete.jar";
+      };
+
+      meta = with lib; {
+        description = "Powerful parser generator";
+        longDescription = ''
+          ANTLR (ANother Tool for Language Recognition) is a powerful parser
+          generator for reading, processing, executing, or translating structured
+          text or binary files. It's widely used to build languages, tools, and
+          frameworks. From a grammar, ANTLR generates a parser that can build and
+          walk parse trees.
+        '';
+        homepage = "https://www.antlr.org/";
+        sourceProvenance = with sourceTypes; [ binaryBytecode ];
+        license = licenses.bsd3;
+        platforms = platforms.unix;
+      };
+    };
+
+    runtime = {
+      cpp = stdenv.mkDerivation {
+        pname = "antlr-runtime-cpp";
+        inherit version;
+        src = source;
+
+        patches = extraPatches;
+
+        outputs = [ "out" "dev" "doc" ];
+
+        nativeBuildInputs = [ cmake ninja pkg-config ];
+        buildInputs =
+          lib.optional stdenv.isDarwin CoreFoundation ++
+          extraCppBuildInputs;
+
+        cmakeDir = "../runtime/Cpp";
+
+        cmakeFlags = extraCppCmakeFlags;
+
+        meta = with lib; {
+          description = "C++ target for ANTLR 4";
+          homepage = "https://www.antlr.org/";
+          license = licenses.bsd3;
+          platforms = platforms.unix;
+        };
+      };
+    };
+  };
+
+in {
+  antlr4_13 = (mkAntlr {
+    version = "4.13.0";
+    sourceSha256 = "sha256-s1yAdScMYg1wFpYNsBAtpifIhQsnSAgJg7JjPDx+htc=";
+    jarSha256 = "sha256-vG9KvA0iWidXASbFFAJWnwAKje2jSHtw52QoQOVw5KY=";
+    extraCppCmakeFlags = [
+      # Generate CMake config files, which are not installed by default.
+      "-DANTLR4_INSTALL=ON"
+
+      # Disable tests, since they require downloading googletest, which is
+      # not available in a sandboxed build.
+      "-DANTLR_BUILD_CPP_TESTS=OFF"
+    ];
+  }).antlr;
+
+  antlr4_12 = (mkAntlr {
+    version = "4.12.0";
+    sourceSha256 = "sha256-0JMG8UYFT+IAWvARY2KnuXSr5X6LlVZN4LJHy5d4x08=";
+    jarSha256 = "sha256-iPGKK/rA3eEAntpcfc41ilKHf673ho9WIjpbzBUynkM=";
+    extraCppCmakeFlags = [
+      # Generate CMake config files, which are not installed by default.
+      "-DANTLR4_INSTALL=ON"
+
+      # Disable tests, since they require downloading googletest, which is
+      # not available in a sandboxed build.
+      "-DANTLR_BUILD_CPP_TESTS=OFF"
+    ];
+  }).antlr;
+
+  antlr4_11 = (mkAntlr {
+    version = "4.11.1";
+    sourceSha256 = "sha256-SUeDgfqLjYQorC8r/CKlwbYooTThMOILkizwQV8pocc=";
+    jarSha256 = "sha256-YpdeGStK8mIrcrXwExVT7jy86X923CpBYy3MVeJUc+E=";
+    extraCppCmakeFlags = [
+      # Generate CMake config files, which are not installed by default.
+      "-DANTLR4_INSTALL=ON"
+
+      # Disable tests, since they require downloading googletest, which is
+      # not available in a sandboxed build.
+      "-DANTLR_BUILD_CPP_TESTS=OFF"
+    ];
+  }).antlr;
+
+  antlr4_10 = (mkAntlr {
+    version = "4.10.1";
+    sourceSha256 = "sha256-Z1P81L0aPbimitzrHH/9rxsMCA6Qn3i42jFbUmVqu1E=";
+    jarSha256 = "sha256-QZSdQfINMdW4J3GHc13XVRCN9Ss422yGUQjTOCBA+Rg=";
+    extraCppBuildInputs = lib.optional stdenv.isLinux libuuid;
+    extraCppCmakeFlags = [
+      "-DANTLR4_INSTALL=ON"
+      "-DANTLR_BUILD_CPP_TESTS=OFF"
+    ];
+  }).antlr;
+
+  antlr4_9 = (mkAntlr {
+    version = "4.9.3";
+    sourceSha256 = "1af3cfqwk7lq1b5qsh1am0922fyhy7wmlpnrqdnvch3zzza9n1qm";
+    jarSha256 = "0dnz2x54kigc58bxnynjhmr5iq49f938vj6p50gdir1xdna41kdg";
+    extraCppBuildInputs = [ utf8cpp ]
+      ++ lib.optional stdenv.isLinux libuuid;
+    extraCppCmakeFlags = [
+      "-DCMAKE_CXX_FLAGS='-I${lib.getDev utf8cpp}/include/utf8cpp'"
+    ];
+    extraPatches = [
+      ./utf8cpp.patch
+    ];
+  }).antlr;
+
+  antlr4_8 = (mkAntlr {
+    version = "4.8";
+    sourceSha256 = "1qal3add26qxskm85nk7r758arladn5rcyjinmhlhznmpbbv9j8m";
+    jarSha256 = "0nms976cnqyr1ndng3haxkmknpdq6xli4cpf4x4al0yr21l9v93k";
+    extraCppBuildInputs = lib.optional stdenv.isLinux libuuid;
+    extraCppCmakeFlags = [ "-DANTLR4_INSTALL=ON" ];
+  }).antlr;
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/antlr/builder.sh b/nixpkgs/pkgs/development/tools/parsing/antlr/builder.sh
new file mode 100644
index 000000000000..c1d20845e6bf
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/antlr/builder.sh
@@ -0,0 +1,24 @@
+if [ -e "$NIX_ATTRS_SH_FILE" ]; then . "$NIX_ATTRS_SH_FILE"; elif [ -f .attrs.sh ]; then . .attrs.sh; fi
+source $stdenv/setup
+
+tar zxvf $src
+cd antlr-*
+cd lib
+
+mkdir -p $out/lib/antlr
+mkdir -p $out/bin
+
+cp *.jar $out/lib/antlr
+
+classpath=""
+for jar in $out/lib/antlr/*.jar; do
+  classpath="$classpath:$jar"
+done
+
+cat > $out/bin/antlr <<EOF
+#! $SHELL
+
+$jre/bin/java -cp $classpath -Xms200M -Xmx400M org.antlr.Tool \$*
+EOF
+
+chmod u+x $out/bin/antlr
diff --git a/nixpkgs/pkgs/development/tools/parsing/antlr/utf8cpp.patch b/nixpkgs/pkgs/development/tools/parsing/antlr/utf8cpp.patch
new file mode 100644
index 000000000000..aad6b11857e3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/antlr/utf8cpp.patch
@@ -0,0 +1,15 @@
+diff --git a/runtime/Cpp/runtime/CMakeLists.txt b/runtime/Cpp/runtime/CMakeLists.txt
+index c8b16c6cf..e8da7960d 100644
+--- a/runtime/Cpp/runtime/CMakeLists.txt
++++ b/runtime/Cpp/runtime/CMakeLists.txt
+@@ -40,8 +40,8 @@ find_package(utf8cpp QUIET)
+ set(INSTALL_utf8cpp FALSE)
+ 
+ if (utf8cpp_FOUND)
+-  target_link_libraries(antlr4_shared utf8cpp)
+-  target_link_libraries(antlr4_static utf8cpp)
++  target_link_libraries(antlr4_shared utf8cpp::utf8cpp)
++  target_link_libraries(antlr4_static utf8cpp::utf8cpp)
+ else()
+ 
+   # older utf8cpp doesn't define the package above
diff --git a/nixpkgs/pkgs/development/tools/parsing/bison/default.nix b/nixpkgs/pkgs/development/tools/parsing/bison/default.nix
new file mode 100644
index 000000000000..43ef3ffa3e19
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/bison/default.nix
@@ -0,0 +1,58 @@
+{ lib, stdenv, fetchurl, m4, perl, help2man }:
+
+# Note: this package is used for bootstrapping fetchurl, and thus
+# cannot use fetchpatch! All mutable patches (generated by GitHub or
+# cgit) that are needed here should be included directly in Nixpkgs as
+# files.
+
+stdenv.mkDerivation rec {
+  pname = "bison";
+  version = "3.8.2";
+
+  src = fetchurl {
+    url = "mirror://gnu/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "sha256-BsnhO99+sk1M62tZIFpPZ8LH5yExGWREMP6C+9FKCrs=";
+  };
+
+  # gnulib relies on --host= to detect iconv() features on musl().
+  # Otherwise tests fail due to incorrect unicode symbol oconversion.
+  configurePlatforms = [ "build" "host" ];
+
+  # there's a /bin/sh shebang in bin/yacc which when no strictDeps is patched with the build stdenv shell
+  # however when cross-compiling it would still be patched with the build stdenv shell which would be wrong
+  # cannot add bash to buildInputs due to infinite recursion
+  strictDeps = stdenv.hostPlatform != stdenv.buildPlatform;
+
+  nativeBuildInputs = [ m4 perl ] ++ lib.optional stdenv.isSunOS help2man;
+  propagatedBuildInputs = [ m4 ];
+
+  enableParallelBuilding = true;
+
+  # Normal check and install check largely execute the same test suite
+  doCheck = false;
+  doInstallCheck = true;
+
+  meta = {
+    homepage = "https://www.gnu.org/software/bison/";
+    description = "Yacc-compatible parser generator";
+    license = lib.licenses.gpl3Plus;
+
+    longDescription = ''
+      Bison is a general-purpose parser generator that converts an
+      annotated context-free grammar into an LALR(1) or GLR parser for
+      that grammar.  Once you are proficient with Bison, you can use
+      it to develop a wide range of language parsers, from those used
+      in simple desk calculators to complex programming languages.
+
+      Bison is upward compatible with Yacc: all properly-written Yacc
+      grammars ought to work with Bison with no change.  Anyone
+      familiar with Yacc should be able to use Bison with little
+      trouble.  You need to be fluent in C or C++ programming in order
+      to use Bison.
+    '';
+
+    platforms = lib.platforms.unix;
+  };
+
+  passthru = { glrSupport = true; };
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/bisonc++/default.nix b/nixpkgs/pkgs/development/tools/parsing/bisonc++/default.nix
new file mode 100644
index 000000000000..5a38c6679eb2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/bisonc++/default.nix
@@ -0,0 +1,55 @@
+{lib, stdenv, fetchurl, fetchFromGitLab
+, yodl, icmake, flexcpp, bobcat
+}:
+stdenv.mkDerivation rec {
+  pname = "bisonc++";
+  version = "6.04.00";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.com";
+    owner = "fbb-git";
+    repo = "bisoncpp";
+    rev = "6.04.00";
+    sha256 = "sha256:0aa9bij4g08ilsk6cgrbgi03vyhqr9fn6j2164sjin93m63212wl";
+  };
+
+  buildInputs = [ bobcat ];
+
+  nativeBuildInputs = [ yodl icmake flexcpp ];
+
+  setSourceRoot = ''
+    sourceRoot="$(echo */bisonc++)"
+  '';
+
+  gpl = fetchurl {
+    url = "https://www.gnu.org/licenses/old-licenses/gpl-2.0.txt";
+    sha256 = "sha256:0hq6i0dm4420825fdm0lnnppbil6z67ls67n5kgjcd912dszjxw1";
+  };
+
+  postPatch = ''
+    substituteInPlace INSTALL.im --replace /usr $out
+    patchShebangs .
+    for file in $(find documentation -type f); do
+      substituteInPlace "$file" --replace /usr/share/common-licenses/GPL ${gpl}
+      substituteInPlace "$file" --replace /usr $out
+    done
+  '';
+
+  buildPhase = ''
+    ./build program
+    ./build man
+    ./build manual
+  '';
+
+  installPhase = ''
+    ./build install x
+  '';
+
+  meta = with lib; {
+    description = "A parser generator like bison, but it generates C++ code";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ raskin ];
+    platforms = platforms.linux;
+    homepage = "https://fbb-git.gitlab.io/bisoncpp/";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/byacc/default.nix b/nixpkgs/pkgs/development/tools/parsing/byacc/default.nix
new file mode 100644
index 000000000000..23c2894ae574
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/byacc/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, stdenv
+, fetchurl
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "byacc";
+  version = "20240109";
+
+  src = fetchurl {
+    urls = [
+      "https://invisible-mirror.net/archives/byacc/byacc-${finalAttrs.version}.tgz"
+      "ftp://ftp.invisible-island.net/byacc/byacc-${finalAttrs.version}.tgz"
+    ];
+    hash = "sha256-8ol3eQFxifGpR1dwXvb24V3JII7wee6n8oq+xXfghEY=";
+  };
+
+  configureFlags = [
+    # change yacc to byacc
+    "--program-transform-name='s,^,b,'"
+  ];
+
+  doCheck = true;
+
+  postInstall = ''
+    ln -s $out/bin/byacc $out/bin/yacc
+  '';
+
+  meta = {
+    homepage = "https://invisible-island.net/byacc/byacc.html";
+    description = "Berkeley YACC";
+    longDescription = ''
+      Berkeley Yacc (byacc) is generally conceded to be the best yacc variant
+      available. In contrast to bison, it is written to avoid dependencies upon
+      a particular compiler.
+
+      Byacc was written around 1990 by Robert Corbett who is the original author
+      of bison. Byacc is noted in Lex & Yacc by John Levine et al (O'Reilly,
+      1992) for its compatibility with the original yacc program.
+
+      Nowadays byacc is maintained by Thomas E. Dickey.
+    '';
+    changelog = "https://invisible-island.net/byacc/CHANGES.html";
+    license = lib.licenses.publicDomain;
+    maintainers = with lib.maintainers; [ AndersonTorres ];
+    platforms = lib.platforms.unix;
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/parsing/flex/2.5.35.nix b/nixpkgs/pkgs/development/tools/parsing/flex/2.5.35.nix
new file mode 100644
index 000000000000..c13abf071c56
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/flex/2.5.35.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchurl, autoreconfHook, flex, bison, texinfo, help2man, m4 }:
+
+stdenv.mkDerivation rec {
+  pname = "flex";
+  version = "2.5.35";
+
+  src = fetchurl {
+    url = "https://github.com/westes/flex/archive/flex-${lib.replaceStrings ["."] ["-"] version}.tar.gz";
+    sha256 = "0wh06nix8bd4w1aq4k2fbbkdq5i30a9lxz3xczf3ff28yy0kfwzm";
+  };
+
+  postPatch = ''
+    patchShebangs tests
+  '';
+
+  nativeBuildInputs = [ flex bison texinfo help2man autoreconfHook ];
+
+  propagatedBuildInputs = [ m4 ];
+
+  preConfigure = lib.optionalString (stdenv.hostPlatform != stdenv.buildPlatform) ''
+    ac_cv_func_malloc_0_nonnull=yes
+    ac_cv_func_realloc_0_nonnull=yes
+  '';
+
+  doCheck = false; # fails 2 out of 46 tests
+
+  meta = with lib; {
+    branch = "2.5.35";
+    homepage = "https://flex.sourceforge.net/";
+    description = "A fast lexical analyser generator";
+    license = licenses.bsd2;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/flex/default.nix b/nixpkgs/pkgs/development/tools/parsing/flex/default.nix
new file mode 100644
index 000000000000..8991c1419f2a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/flex/default.nix
@@ -0,0 +1,60 @@
+{ lib, stdenv, buildPackages, fetchurl, bison, m4
+, autoreconfHook, help2man
+}:
+
+# Avoid 'fetchpatch' to allow 'flex' to be used as a possible 'gcc'
+# dependency during bootstrap. Useful when gcc is built from snapshot
+# or from a git tree (flex lexers are not pre-generated there).
+
+stdenv.mkDerivation rec {
+  pname = "flex";
+  version = "2.6.4";
+
+  src = fetchurl {
+    url = "https://github.com/westes/flex/releases/download/v${version}/flex-${version}.tar.gz";
+    sha256 = "15g9bv236nzi665p9ggqjlfn4dwck5835vf0bbw2cz7h5c1swyp8";
+  };
+
+  # Also upstream, will be part of 2.6.5
+  # https://github.com/westes/flex/commit/24fd0551333e
+  patches = [(fetchurl {
+    name = "glibc-2.26.patch";
+    url = "https://raw.githubusercontent.com/lede-project/source/0fb14a2b1ab2f82ce63f4437b062229d73d90516/tools/flex/patches/200-build-AC_USE_SYSTEM_EXTENSIONS-in-configure.ac.patch";
+    sha256 = "0mpp41zdg17gx30kcpj83jl8hssks3adbks0qzbhcz882b9c083r";
+  })];
+
+  postPatch = ''
+    patchShebangs tests
+  '' + lib.optionalString (stdenv.buildPlatform != stdenv.hostPlatform) ''
+    substituteInPlace Makefile.in --replace "tests" " "
+
+    substituteInPlace doc/Makefile.am --replace 'flex.1: $(top_srcdir)/configure.ac' 'flex.1: '
+  '';
+
+  depsBuildBuild = [ buildPackages.stdenv.cc ];
+  nativeBuildInputs = [ autoreconfHook help2man ];
+  buildInputs = [ bison ];
+  propagatedBuildInputs = [ m4 ];
+
+  preConfigure = lib.optionalString (stdenv.hostPlatform != stdenv.buildPlatform) ''
+    export ac_cv_func_malloc_0_nonnull=yes
+    export ac_cv_func_realloc_0_nonnull=yes
+  '';
+
+  postConfigure = lib.optionalString (stdenv.isDarwin || stdenv.isCygwin) ''
+    sed -i Makefile -e 's/-no-undefined//;'
+  '';
+
+  dontDisableStatic = stdenv.buildPlatform != stdenv.hostPlatform;
+
+  postInstall = ''
+    ln -s $out/bin/flex $out/bin/lex
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/westes/flex";
+    description = "A fast lexical analyser generator";
+    license = licenses.bsd2;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/flexc++/default.nix b/nixpkgs/pkgs/development/tools/parsing/flexc++/default.nix
new file mode 100644
index 000000000000..e4db5631e7fe
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/flexc++/default.nix
@@ -0,0 +1,47 @@
+{ lib, stdenv, fetchFromGitHub, bobcat, icmake, yodl }:
+
+stdenv.mkDerivation rec {
+  pname = "flexc++";
+  version = "2.05.00";
+
+  src = fetchFromGitHub {
+    sha256 = "0s25d9jsfsqvm34rwf48cxwz23aq1zja3cqlzfz3z33p29wwazwz";
+    rev = version;
+    repo = "flexcpp";
+    owner = "fbb-git";
+  };
+
+  setSourceRoot = ''
+    sourceRoot=$(echo */flexc++)
+  '';
+
+  buildInputs = [ bobcat ];
+  nativeBuildInputs = [ icmake yodl ];
+
+  postPatch = ''
+    substituteInPlace INSTALL.im --replace /usr $out
+    patchShebangs .
+  '';
+
+  buildPhase = ''
+    ./build man
+    ./build manual
+    ./build program
+  '';
+
+  installPhase = ''
+    ./build install x
+  '';
+
+  meta = with lib; {
+    description = "C++ tool for generating lexical scanners";
+    longDescription = ''
+      Flexc++ was designed after `flex'. Flexc++ offers a cleaner class design
+      and requires simpler specification files than offered by flex's C++
+      option.
+    '';
+    homepage = "https://fbb-git.github.io/flexcpp/";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/hammer/default.nix b/nixpkgs/pkgs/development/tools/parsing/hammer/default.nix
new file mode 100644
index 000000000000..d1cd4b167003
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/hammer/default.nix
@@ -0,0 +1,38 @@
+{ fetchFromGitLab
+, glib
+, lib
+, pkg-config
+, scons
+, stdenv
+}:
+
+stdenv.mkDerivation rec {
+  pname = "hammer";
+  version = "nightly_20220416";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.special-circumstanc.es";
+    owner = "hammer";
+    repo = "hammer";
+    rev = version;
+    sha256 = "sha256-xMZhUnycGeHkNZfHQ2d9mETti8HwGHZNskFqh9f0810=";
+  };
+
+  nativeBuildInputs = [ pkg-config scons ];
+  buildInputs = [ glib ];
+
+  meta = with lib; {
+    description = "A bit-oriented parser combinator library";
+    longDescription = ''
+      Hammer is a parsing library. Like many modern parsing libraries, it
+      provides a parser combinator interface for writing grammars as inline
+      domain-specific languages, but Hammer also provides a variety of parsing
+      backends. It's also bit-oriented rather than character-oriented, making it
+      ideal for parsing binary data such as images, network packets, audio, and
+      executables.
+    '';
+    homepage = "https://gitlab.special-circumstanc.es/hammer/hammer";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ azahi ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/javacc/default.nix b/nixpkgs/pkgs/development/tools/parsing/javacc/default.nix
new file mode 100644
index 000000000000..42e1a536de04
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/javacc/default.nix
@@ -0,0 +1,64 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, ant
+, jdk
+, jre
+, makeWrapper
+, canonicalize-jars-hook
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "javacc";
+  version = "7.0.13";
+
+  src = fetchFromGitHub {
+    owner = "javacc";
+    repo = "javacc";
+    rev = "javacc-${finalAttrs.version}";
+    hash = "sha256-nDJvKIbJc23Tvfn7Zqvt5tDDffNf4KQ0juGQQCZ+i1c=";
+  };
+
+  nativeBuildInputs = [
+    ant
+    jdk
+    makeWrapper
+    canonicalize-jars-hook
+  ];
+
+  buildPhase = ''
+    runHook preBuild
+    ant jar
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm644 target/javacc.jar -t $out/target
+    install -Dm755 scripts/{javacc,jjdoc,jjtree,jjrun} -t $out/bin
+
+    for file in $out/bin/*; do
+      wrapProgram "$file" --suffix PATH : ${jre}/bin
+    done
+
+    runHook postInstall
+  '';
+
+  doCheck = true;
+
+  checkPhase = ''
+    runHook preCheck
+    ant test
+    runHook postCheck
+  '';
+
+  meta = with lib; {
+    changelog = "https://github.com/javacc/javacc/blob/${finalAttrs.src.rev}/docs/release-notes.md";
+    description = "A parser generator for building parsers from grammars";
+    homepage = "https://javacc.github.io/javacc";
+    license = licenses.bsd2;
+    mainProgram = "javacc";
+    maintainers = teams.deshaw.members;
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/parsing/jikespg/default.nix b/nixpkgs/pkgs/development/tools/parsing/jikespg/default.nix
new file mode 100644
index 000000000000..e9bd83416933
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/jikespg/default.nix
@@ -0,0 +1,29 @@
+{lib, stdenv, fetchurl}:
+
+stdenv.mkDerivation rec {
+  pname = "jikespg";
+  version = "1.3";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/jikes/${pname}-${version}.tar.gz";
+    sha256 = "083ibfxaiw1abxmv1crccx1g6sixkbyhxn2hsrlf6fwii08s6rgw";
+  };
+
+  postPatch = ''
+    substituteInPlace Makefile --replace "gcc" "${stdenv.cc.targetPrefix}cc"
+  '';
+
+  sourceRoot = "jikespg/src";
+
+  installPhase = ''
+    install -Dm755 -t $out/bin jikespg
+  '';
+
+  meta = with lib; {
+    homepage = "https://jikes.sourceforge.net/";
+    description = "The Jikes Parser Generator";
+    platforms = platforms.all;
+    license = licenses.ipl10;
+    maintainers = with maintainers; [ pSub ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/jshon/default.nix b/nixpkgs/pkgs/development/tools/parsing/jshon/default.nix
new file mode 100644
index 000000000000..977c4bb398c2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/jshon/default.nix
@@ -0,0 +1,43 @@
+{ stdenv, lib, fetchFromGitHub, fetchpatch, jansson }:
+
+stdenv.mkDerivation rec {
+  pname = "jshon";
+  version = "20170302";
+
+  src = fetchFromGitHub {
+    owner = "keenerd";
+    repo = "jshon";
+    rev = "d919aeaece37962251dbe6c1ee50f0028a5c90e4";
+    sha256 = "1x4zfmsjq0l2y994bxkhx3mn5vzjxxr39iib213zjchi9h6yxvnc";
+  };
+
+  buildInputs = [ jansson ];
+
+  env.NIX_CFLAGS_COMPILE = "-Wno-error=strict-prototypes";
+
+  patches = [
+    (fetchpatch {
+      # https://github.com/keenerd/jshon/pull/62
+      url = "https://github.com/keenerd/jshon/commit/96b4e9dbf578be7b31f29740b608aa7b34df3318.patch";
+      sha256 = "0kwbn3xb37iqb5y1n8vhzjiwlbg5jmki3f38pzakc24kzc5ksmaa";
+    })
+  ];
+
+  postPatch =
+    ''
+      substituteInPlace Makefile --replace "/usr/" "/"
+    '';
+
+  preInstall =
+    ''
+      export DESTDIR=$out
+    '';
+
+  meta = with lib; {
+    homepage = "http://kmkeen.com/jshon";
+    description = "JSON parser designed for maximum convenience within the shell";
+    license = licenses.free;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ rushmorem ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/lemon/default.nix b/nixpkgs/pkgs/development/tools/parsing/lemon/default.nix
new file mode 100644
index 000000000000..9c8786950d22
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/lemon/default.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv, fetchurl }:
+
+let
+
+  srcs = {
+    lemon = fetchurl {
+      sha256 = "1c5pk2hz7j9hix5mpc38rwnm8dnlr2jqswf4lan6v78ccbyqzkjx";
+      url = "http://www.sqlite.org/src/raw/tool/lemon.c?name=680980c7935bfa1edec20c804c9e5ba4b1dd96f5";
+      name = "lemon.c";
+    };
+    lempar = fetchurl {
+      sha256 = "1ba13a6yh9j2cs1aw2fh4dxqvgf399gxq1gpp4sh8q0f2w6qiw3i";
+      url = "http://www.sqlite.org/src/raw/tool/lempar.c?name=01ca97f87610d1dac6d8cd96ab109ab1130e76dc";
+      name = "lempar.c";
+    };
+  };
+
+in stdenv.mkDerivation {
+  pname = "lemon";
+  version = "1.69";
+
+  dontUnpack = true;
+
+  buildPhase = ''
+    sh -xc "$CC ${srcs.lemon} -o lemon"
+  '';
+
+  installPhase = ''
+    install -Dvm755 lemon $out/bin/lemon
+    install -Dvm644 ${srcs.lempar} $out/bin/lempar.c
+  '';
+
+  meta = with lib; {
+    description = "An LALR(1) parser generator";
+    longDescription = ''
+      The Lemon program is an LALR(1) parser generator that takes a
+      context-free grammar and converts it into a subroutine that will parse a
+      file using that grammar. Lemon is similar to the much more famous
+      programs "yacc" and "bison", but is not compatible with either.
+    '';
+    homepage = "http://www.hwaci.com/sw/lemon/";
+    license = licenses.publicDomain;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/nex/default.nix b/nixpkgs/pkgs/development/tools/parsing/nex/default.nix
new file mode 100644
index 000000000000..287098ed8d36
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/nex/default.nix
@@ -0,0 +1,27 @@
+{ buildGoPackage
+, fetchFromGitHub
+, lib
+}:
+# upstream is pretty stale, but it still works, so until they merge module
+# support we have to use gopath: see blynn/nex#57
+buildGoPackage rec {
+  pname = "nex";
+  version = "unstable-2021-03-30";
+
+  src = fetchFromGitHub {
+    owner = "blynn";
+    repo = pname;
+    rev = "1a3320dab988372f8910ccc838a6a7a45c8980ff";
+    hash = "sha256-DtJkV380T2B5j0+u7lYZfbC0ej0udF4GW2lbRmmbjAM=";
+  };
+
+  goPackagePath = "github.com/blynn/nex";
+  subPackages = [ "." ];
+
+  meta = with lib; {
+    description = "Lexer for Go";
+    homepage = "https://github.com/blynn/nex";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ urandom ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/peg/default.nix b/nixpkgs/pkgs/development/tools/parsing/peg/default.nix
new file mode 100644
index 000000000000..c5d6ad5b8703
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/peg/default.nix
@@ -0,0 +1,20 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "peg";
+  version = "0.1.20";
+
+  src = fetchurl {
+    url = "${meta.homepage}/${pname}-${version}.tar.gz";
+    sha256 = "sha256-uLcXvJOll2ijXWUlZ5pODOlOa/ZvkrrPKXnGR0VytFo=";
+  };
+
+  preBuild="makeFlagsArray+=( PREFIX=$out )";
+
+  meta = with lib; {
+    homepage = "http://piumarta.com/software/peg/";
+    description = "Tools for generating recursive-descent parsers: programs that perform pattern matching on text";
+    platforms = platforms.all;
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/ragel/default.nix b/nixpkgs/pkgs/development/tools/parsing/ragel/default.nix
new file mode 100644
index 000000000000..db5590ccbb96
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/ragel/default.nix
@@ -0,0 +1,54 @@
+{ lib, stdenv, fetchurl, fig2dev, texliveSmall, ghostscript, colm
+, build-manual ? false
+}:
+
+let
+  generic = { version, sha256, broken ? false, license }:
+    stdenv.mkDerivation rec {
+      pname = "ragel";
+      inherit version;
+
+      src = fetchurl {
+        url = "https://www.colm.net/files/ragel/${pname}-${version}.tar.gz";
+        inherit sha256;
+      };
+
+      buildInputs = lib.optionals build-manual [ fig2dev ghostscript texliveSmall ];
+
+      preConfigure = lib.optionalString build-manual ''
+        sed -i "s/build_manual=no/build_manual=yes/g" DIST
+      '';
+
+      configureFlags = [ "--with-colm=${colm}" ];
+
+      env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.cc.isGNU "-std=gnu++98";
+
+      doCheck = true;
+
+      enableParallelBuilding = true;
+
+      meta = with lib; {
+        homepage = "https://www.colm.net/open-source/ragel/";
+        description = "State machine compiler";
+        inherit broken license;
+        platforms = platforms.unix;
+        maintainers = with maintainers; [ pSub ];
+      };
+    };
+
+in
+
+{
+  ragelStable = generic {
+    version = "6.10";
+    sha256 = "0gvcsl62gh6sg73nwaxav4a5ja23zcnyxncdcdnqa2yjcpdnw5az";
+    license = lib.licenses.gpl2;
+  };
+
+  ragelDev = generic {
+    version = "7.0.0.12";
+    sha256 = "0x3si355lv6q051lgpg8bpclpiq5brpri5lv3p8kk2qhzfbyz69r";
+    license = lib.licenses.mit;
+    broken = stdenv.isDarwin;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/re-flex/default.nix b/nixpkgs/pkgs/development/tools/parsing/re-flex/default.nix
new file mode 100644
index 000000000000..85150a04884b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/re-flex/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, boost
+, autoconf
+, automake
+}:
+
+stdenv.mkDerivation rec {
+  pname = "re-flex";
+  version = "3.5.1";
+
+  src = fetchFromGitHub {
+    owner = "Genivia";
+    repo = "RE-flex";
+    rev = "v${version}";
+    sha256 = "sha256-AP8889MQSAq/CIfZRDOkaqkTrT6EPqHK0bbeLa9v6h8=";
+  };
+
+  nativeBuildInputs = [ boost autoconf automake ];
+
+  meta = with lib; {
+    homepage = "https://github.com/Genivia/RE-flex";
+    description = "The regex-centric, fast lexical analyzer generator for C++ with full Unicode support";
+    license = licenses.bsd3;
+    platforms = platforms.unix;
+    maintainers = with lib.maintainers; [ prrlvr ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/re2c/default.nix b/nixpkgs/pkgs/development/tools/parsing/re2c/default.nix
new file mode 100644
index 000000000000..311be4ccdc29
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/re2c/default.nix
@@ -0,0 +1,51 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, nix-update-script
+, python3
+
+# for passthru.tests
+, ninja
+, php
+, spamassassin
+}:
+
+stdenv.mkDerivation rec {
+  pname = "re2c";
+  version = "3.1";
+
+  src = fetchFromGitHub {
+    owner  = "skvadrik";
+    repo   = "re2c";
+    rev    = version;
+    sha256 = "sha256-7zZdLby7HdNoURgdkg+xnlp6VDCACcyGCTtjM43OLd4=";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    python3
+  ];
+
+  doCheck = true;
+  enableParallelBuilding = true;
+
+  preCheck = ''
+    patchShebangs run_tests.py
+  '';
+
+  passthru = {
+    updateScript = nix-update-script { };
+    tests = {
+      inherit ninja php spamassassin;
+    };
+  };
+
+  meta = with lib; {
+    description = "Tool for writing very fast and very flexible scanners";
+    homepage    = "https://re2c.org";
+    license     = licenses.publicDomain;
+    platforms   = platforms.all;
+    maintainers = with maintainers; [ thoughtpolice ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/spicy/default.nix b/nixpkgs/pkgs/development/tools/parsing/spicy/default.nix
new file mode 100644
index 000000000000..4b6db0adb731
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/spicy/default.nix
@@ -0,0 +1,67 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, makeWrapper
+, python3
+, bison
+, flex
+, zlib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "spicy";
+  version = "1.9.0";
+
+  strictDeps = true;
+
+  src = fetchFromGitHub {
+    owner = "zeek";
+    repo = "spicy";
+    rev = "v${version}";
+    hash = "sha256-nVHm0JJsFXGnYlBBlcR5zBS46PZuALle3ik3GMTPYTQ=";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [
+    cmake
+    makeWrapper
+    python3
+  ];
+
+  buildInputs = [
+    bison
+    flex
+    zlib
+  ];
+
+  postPatch = ''
+    patchShebangs scripts tests/scripts
+  '';
+
+  cmakeFlags = [
+    "-DHILTI_DEV_PRECOMPILE_HEADERS=OFF"
+  ];
+
+  preFixup = ''
+    for b in $out/bin/*
+      do wrapProgram "$b" --prefix PATH : "${lib.makeBinPath [ bison flex ]}"
+    done
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/zeek/spicy";
+    description = "A C++ parser generator for dissecting protocols & files";
+    longDescription = ''
+      Spicy is a parser generator that makes it easy to create robust C++
+      parsers for network protocols, file formats, and more. Spicy is a bit
+      like a "yacc for protocols", but it's much more than that: It's an
+      all-in-one system enabling developers to write attributed grammars that
+      describe both syntax and semantics of an input format using a single,
+      unified language. Think of Spicy as a domain-specific scripting language
+      for all your parsing needs.
+    '';
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ tobim ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/Cargo.lock b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/Cargo.lock
new file mode 100644
index 000000000000..bbd2be01932a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/Cargo.lock
@@ -0,0 +1,1935 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "ahash"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91429305e9f0a25f6205c5b8e0d2db09e0708a7a6df0f42212bb56c32c8ac97a"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+ "version_check",
+ "zerocopy",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "ansi_term"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.75"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6"
+
+[[package]]
+name = "arbitrary"
+version = "1.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2e1373abdaa212b704512ec2bd8b26bd0b7d5c3f70117411a5d9a451383c859"
+
+[[package]]
+name = "ascii"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d92bec98840b8f03a5ff5413de5293bfcd8bf96467cf5452609f939ec6f5de16"
+
+[[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 = "bincode"
+version = "1.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "bindgen"
+version = "0.66.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2b84e06fc203107bfbad243f4aba2af864eb7db3b1cf46ea0a023b0b433d2a7"
+dependencies = [
+ "bitflags 2.4.1",
+ "cexpr",
+ "clang-sys",
+ "lazy_static",
+ "lazycell",
+ "log",
+ "peeking_take_while",
+ "prettyplease",
+ "proc-macro2",
+ "quote",
+ "regex",
+ "rustc-hash",
+ "shlex",
+ "syn 2.0.38",
+ "which",
+]
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bitflags"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07"
+
+[[package]]
+name = "bumpalo"
+version = "3.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec"
+
+[[package]]
+name = "bytes"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223"
+
+[[package]]
+name = "cc"
+version = "1.0.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "cesu8"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c"
+
+[[package]]
+name = "cexpr"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766"
+dependencies = [
+ "nom",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "chunked_transfer"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cca491388666e04d7248af3f60f0c40cfb0991c72205595d7c396e3510207d1a"
+
+[[package]]
+name = "clang-sys"
+version = "1.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c688fc74432808e3eb684cae8830a86be1d66a2bd58e1f248ed0960a590baf6f"
+dependencies = [
+ "glob",
+ "libc",
+ "libloading",
+]
+
+[[package]]
+name = "clap"
+version = "2.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c"
+dependencies = [
+ "ansi_term",
+ "atty",
+ "bitflags 1.3.2",
+ "strsim",
+ "textwrap",
+ "unicode-width",
+ "vec_map",
+]
+
+[[package]]
+name = "combine"
+version = "4.6.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4"
+dependencies = [
+ "bytes",
+ "memchr",
+]
+
+[[package]]
+name = "core-foundation"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
+
+[[package]]
+name = "cranelift-bforest"
+version = "0.102.0"
+source = "git+https://github.com/bytecodealliance/wasmtime?rev=fa6fcd946b8f6d60c2d191a1b14b9399e261a76d#fa6fcd946b8f6d60c2d191a1b14b9399e261a76d"
+dependencies = [
+ "cranelift-entity",
+]
+
+[[package]]
+name = "cranelift-codegen"
+version = "0.102.0"
+source = "git+https://github.com/bytecodealliance/wasmtime?rev=fa6fcd946b8f6d60c2d191a1b14b9399e261a76d#fa6fcd946b8f6d60c2d191a1b14b9399e261a76d"
+dependencies = [
+ "bumpalo",
+ "cranelift-bforest",
+ "cranelift-codegen-meta",
+ "cranelift-codegen-shared",
+ "cranelift-control",
+ "cranelift-entity",
+ "cranelift-isle",
+ "gimli",
+ "hashbrown 0.14.2",
+ "log",
+ "regalloc2",
+ "smallvec",
+ "target-lexicon",
+]
+
+[[package]]
+name = "cranelift-codegen-meta"
+version = "0.102.0"
+source = "git+https://github.com/bytecodealliance/wasmtime?rev=fa6fcd946b8f6d60c2d191a1b14b9399e261a76d#fa6fcd946b8f6d60c2d191a1b14b9399e261a76d"
+dependencies = [
+ "cranelift-codegen-shared",
+]
+
+[[package]]
+name = "cranelift-codegen-shared"
+version = "0.102.0"
+source = "git+https://github.com/bytecodealliance/wasmtime?rev=fa6fcd946b8f6d60c2d191a1b14b9399e261a76d#fa6fcd946b8f6d60c2d191a1b14b9399e261a76d"
+
+[[package]]
+name = "cranelift-control"
+version = "0.102.0"
+source = "git+https://github.com/bytecodealliance/wasmtime?rev=fa6fcd946b8f6d60c2d191a1b14b9399e261a76d#fa6fcd946b8f6d60c2d191a1b14b9399e261a76d"
+dependencies = [
+ "arbitrary",
+]
+
+[[package]]
+name = "cranelift-entity"
+version = "0.102.0"
+source = "git+https://github.com/bytecodealliance/wasmtime?rev=fa6fcd946b8f6d60c2d191a1b14b9399e261a76d#fa6fcd946b8f6d60c2d191a1b14b9399e261a76d"
+dependencies = [
+ "serde",
+ "serde_derive",
+]
+
+[[package]]
+name = "cranelift-frontend"
+version = "0.102.0"
+source = "git+https://github.com/bytecodealliance/wasmtime?rev=fa6fcd946b8f6d60c2d191a1b14b9399e261a76d#fa6fcd946b8f6d60c2d191a1b14b9399e261a76d"
+dependencies = [
+ "cranelift-codegen",
+ "log",
+ "smallvec",
+ "target-lexicon",
+]
+
+[[package]]
+name = "cranelift-isle"
+version = "0.102.0"
+source = "git+https://github.com/bytecodealliance/wasmtime?rev=fa6fcd946b8f6d60c2d191a1b14b9399e261a76d#fa6fcd946b8f6d60c2d191a1b14b9399e261a76d"
+
+[[package]]
+name = "cranelift-native"
+version = "0.102.0"
+source = "git+https://github.com/bytecodealliance/wasmtime?rev=fa6fcd946b8f6d60c2d191a1b14b9399e261a76d#fa6fcd946b8f6d60c2d191a1b14b9399e261a76d"
+dependencies = [
+ "cranelift-codegen",
+ "libc",
+ "target-lexicon",
+]
+
+[[package]]
+name = "cranelift-wasm"
+version = "0.102.0"
+source = "git+https://github.com/bytecodealliance/wasmtime?rev=fa6fcd946b8f6d60c2d191a1b14b9399e261a76d#fa6fcd946b8f6d60c2d191a1b14b9399e261a76d"
+dependencies = [
+ "cranelift-codegen",
+ "cranelift-entity",
+ "cranelift-frontend",
+ "itertools",
+ "log",
+ "smallvec",
+ "wasmparser",
+ "wasmtime-types",
+]
+
+[[package]]
+name = "crc32fast"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "ctor"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37e366bff8cd32dd8754b0991fb66b279dc48f598c3a18914852a6673deef583"
+dependencies = [
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "ctrlc"
+version = "3.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "82e95fbd621905b854affdc67943b043a0fbb6ed7385fd5a25650d19a8a6cfdf"
+dependencies = [
+ "nix",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "diff"
+version = "0.1.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8"
+
+[[package]]
+name = "difference"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "524cbf6897b527295dff137cec09ecf3a05f4fddffd7dfcd1585403449e74198"
+
+[[package]]
+name = "dirs"
+version = "3.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30baa043103c9d0c2a57cf537cc2f35623889dc0d405e6c3cccfadbc81c71309"
+dependencies = [
+ "dirs-sys 0.3.7",
+]
+
+[[package]]
+name = "dirs"
+version = "5.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225"
+dependencies = [
+ "dirs-sys 0.4.1",
+]
+
+[[package]]
+name = "dirs-sys"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6"
+dependencies = [
+ "libc",
+ "redox_users",
+ "winapi",
+]
+
+[[package]]
+name = "dirs-sys"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c"
+dependencies = [
+ "libc",
+ "option-ext",
+ "redox_users",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "either"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
+
+[[package]]
+name = "equivalent"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
+
+[[package]]
+name = "errno"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3e13f66a2f95e32a39eaa81f6b95d42878ca0e1db0c7543723dfe12557e860"
+dependencies = [
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "fallible-iterator"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649"
+
+[[package]]
+name = "fastrand"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "gimli"
+version = "0.28.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0"
+dependencies = [
+ "fallible-iterator",
+ "indexmap",
+ "stable_deref_trait",
+]
+
+[[package]]
+name = "glob"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
+
+[[package]]
+name = "hashbrown"
+version = "0.13.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e"
+dependencies = [
+ "ahash",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.14.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f93e7192158dbcda357bdec5fb5788eebf8bbac027f3f33e719d29135ae84156"
+dependencies = [
+ "ahash",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "home"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb"
+dependencies = [
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "html-escape"
+version = "0.2.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d1ad449764d627e22bfd7cd5e8868264fc9236e07c752972b4080cd351cb476"
+dependencies = [
+ "utf8-width",
+]
+
+[[package]]
+name = "httpdate"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
+
+[[package]]
+name = "idna"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "indexmap"
+version = "2.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8adf3ddd720272c6ea8bf59463c04e0f93d0bbf7c5439b691bca2987e0270897"
+dependencies = [
+ "equivalent",
+ "hashbrown 0.14.2",
+ "serde",
+]
+
+[[package]]
+name = "indoc"
+version = "2.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e186cfbae8084e513daff4240b4797e342f988cecda4fb6c939150f96315fd8"
+
+[[package]]
+name = "itertools"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
+
+[[package]]
+name = "jni"
+version = "0.21.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97"
+dependencies = [
+ "cesu8",
+ "cfg-if",
+ "combine",
+ "jni-sys",
+ "log",
+ "thiserror",
+ "walkdir",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "jni-sys"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130"
+
+[[package]]
+name = "js-sys"
+version = "0.3.64"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "lazycell"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
+
+[[package]]
+name = "leb128"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67"
+
+[[package]]
+name = "libc"
+version = "0.2.149"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a08173bc88b7955d1b3145aa561539096c421ac8debde8cbc3612ec635fee29b"
+
+[[package]]
+name = "libloading"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f"
+dependencies = [
+ "cfg-if",
+ "winapi",
+]
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.4.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da2479e8c062e40bf0066ffa0bc823de0a9368974af99c9f6df941d2c231e03f"
+
+[[package]]
+name = "log"
+version = "0.4.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
+
+[[package]]
+name = "mach"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "malloc_buf"
+version = "0.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "memchr"
+version = "2.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167"
+
+[[package]]
+name = "memfd"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2cffa4ad52c6f791f4f8b15f0c05f9824b2ced1160e88cc393d64fff9a8ac64"
+dependencies = [
+ "rustix",
+]
+
+[[package]]
+name = "memoffset"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "minimal-lexical"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+
+[[package]]
+name = "ndk-context"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b"
+
+[[package]]
+name = "nix"
+version = "0.27.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053"
+dependencies = [
+ "bitflags 2.4.1",
+ "cfg-if",
+ "libc",
+]
+
+[[package]]
+name = "nom"
+version = "7.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
+dependencies = [
+ "memchr",
+ "minimal-lexical",
+]
+
+[[package]]
+name = "objc"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1"
+dependencies = [
+ "malloc_buf",
+]
+
+[[package]]
+name = "object"
+version = "0.32.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0"
+dependencies = [
+ "crc32fast",
+ "hashbrown 0.14.2",
+ "indexmap",
+ "memchr",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
+
+[[package]]
+name = "option-ext"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d"
+
+[[package]]
+name = "paste"
+version = "1.0.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c"
+
+[[package]]
+name = "path-slash"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e91099d4268b0e11973f036e885d652fb0b21fedcf69738c627f94db6a44f42"
+
+[[package]]
+name = "peeking_take_while"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099"
+
+[[package]]
+name = "percent-encoding"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94"
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+
+[[package]]
+name = "pretty_assertions"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af7cee1a6c8a5b9208b3cb1061f10c0cb689087b3d8ce85fb9d2dd7a29b6ba66"
+dependencies = [
+ "diff",
+ "yansi",
+]
+
+[[package]]
+name = "prettyplease"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae005bd773ab59b4725093fd7df83fd7892f7d8eafb48dbd7de6e024e4215f9d"
+dependencies = [
+ "proc-macro2",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "psm"
+version = "0.1.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5787f7cda34e3033a72192c018bc5883100330f362ef279a8cbccfce8bb4e874"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
+dependencies = [
+ "proc-macro2",
+]
+
+[[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",
+]
+
+[[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",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "raw-window-handle"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9"
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "redox_users"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b"
+dependencies = [
+ "getrandom",
+ "redox_syscall 0.2.16",
+ "thiserror",
+]
+
+[[package]]
+name = "regalloc2"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad156d539c879b7a24a363a2016d77961786e71f48f2e2fc8302a92abd2429a6"
+dependencies = [
+ "hashbrown 0.13.2",
+ "log",
+ "rustc-hash",
+ "slice-group-by",
+ "smallvec",
+]
+
+[[package]]
+name = "regex"
+version = "1.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-automata",
+ "regex-syntax 0.8.2",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax 0.8.2",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da"
+
+[[package]]
+name = "regex-syntax"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
+
+[[package]]
+name = "rustc-hash"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
+
+[[package]]
+name = "rustix"
+version = "0.38.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b426b0506e5d50a7d8dafcf2e81471400deb602392c7dd110815afb4eaf02a3"
+dependencies = [
+ "bitflags 2.4.1",
+ "errno",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741"
+
+[[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.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090"
+
+[[package]]
+name = "serde"
+version = "1.0.190"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91d3c334ca1ee894a2c6f6ad698fe8c435b76d504b13d436f0685d648d6d96f7"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.190"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67c5609f394e5c2bd7fc51efda478004ea80ef42fee983d5c67a65e34f32c0e3"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.107"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b420ce6e3d8bd882e9b243c6eed35dbc9a6110c9769e74b584e0d68d1f20c65"
+dependencies = [
+ "indexmap",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_spanned"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12022b835073e5b11e90a14f86838ceb1c8fb0325b72416845c487ac0fa95e80"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "shlex"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a7cee0529a6d40f580e7a5e6c495c8fbfe21b7b52795ed4bb5e62cdf92bc6380"
+
+[[package]]
+name = "slice-group-by"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "826167069c09b99d56f31e9ae5c99049e932a98c9dc2dac47645b08dbbf76ba7"
+
+[[package]]
+name = "smallbitvec"
+version = "2.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75ce4f9dc4a41b4c3476cc925f1efb11b66df373a8fde5d4b8915fa91b5d995e"
+
+[[package]]
+name = "smallvec"
+version = "1.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "942b4a808e05215192e39f4ab80813e599068285906cc91aa64f923db842bd5a"
+
+[[package]]
+name = "sptr"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b9b39299b249ad65f3b7e96443bad61c02ca5cd3589f46cb6d610a0fd6c0d6a"
+
+[[package]]
+name = "stable_deref_trait"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
+
+[[package]]
+name = "strsim"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e96b79aaa137db8f61e26363a0c9b47d8b4ec75da28b7d1d614c2303e232408b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "target-lexicon"
+version = "0.12.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14c39fd04924ca3a864207c66fc2cd7d22d7c016007f9ce846cbb9326331930a"
+
+[[package]]
+name = "tempfile"
+version = "3.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5"
+dependencies = [
+ "cfg-if",
+ "fastrand",
+ "redox_syscall 0.4.1",
+ "rustix",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.50"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.50"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "tiny_http"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "389915df6413a2e74fb181895f933386023c71110878cd0825588928e64cdc82"
+dependencies = [
+ "ascii",
+ "chunked_transfer",
+ "httpdate",
+ "log",
+]
+
+[[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.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+[[package]]
+name = "toml"
+version = "0.7.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257"
+dependencies = [
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "toml_edit",
+]
+
+[[package]]
+name = "toml_datetime"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.19.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421"
+dependencies = [
+ "indexmap",
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "winnow",
+]
+
+[[package]]
+name = "tracing"
+version = "0.1.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef"
+dependencies = [
+ "pin-project-lite",
+ "tracing-attributes",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-attributes"
+version = "0.1.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "tree-sitter"
+version = "0.20.10"
+dependencies = [
+ "bindgen",
+ "cc",
+ "regex",
+ "wasmtime",
+ "wasmtime-c-api-impl",
+]
+
+[[package]]
+name = "tree-sitter-cli"
+version = "0.20.9"
+dependencies = [
+ "ansi_term",
+ "anyhow",
+ "atty",
+ "clap",
+ "ctor",
+ "ctrlc",
+ "difference",
+ "dirs 5.0.1",
+ "glob",
+ "html-escape",
+ "indexmap",
+ "indoc",
+ "lazy_static",
+ "log",
+ "memchr",
+ "path-slash",
+ "pretty_assertions",
+ "rand",
+ "regex",
+ "regex-syntax 0.7.5",
+ "rustc-hash",
+ "semver",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "smallbitvec",
+ "tempfile",
+ "tiny_http",
+ "toml",
+ "tree-sitter",
+ "tree-sitter-config",
+ "tree-sitter-highlight",
+ "tree-sitter-loader",
+ "tree-sitter-tags",
+ "tree-sitter-tests-proc-macro",
+ "unindent",
+ "walkdir",
+ "webbrowser",
+ "which",
+]
+
+[[package]]
+name = "tree-sitter-config"
+version = "0.19.0"
+dependencies = [
+ "anyhow",
+ "dirs 3.0.2",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "tree-sitter-highlight"
+version = "0.20.2"
+dependencies = [
+ "lazy_static",
+ "regex",
+ "thiserror",
+ "tree-sitter",
+]
+
+[[package]]
+name = "tree-sitter-loader"
+version = "0.20.0"
+dependencies = [
+ "anyhow",
+ "cc",
+ "dirs 3.0.2",
+ "libloading",
+ "once_cell",
+ "regex",
+ "serde",
+ "serde_json",
+ "tree-sitter",
+ "tree-sitter-highlight",
+ "tree-sitter-tags",
+ "which",
+]
+
+[[package]]
+name = "tree-sitter-tags"
+version = "0.20.2"
+dependencies = [
+ "memchr",
+ "regex",
+ "thiserror",
+ "tree-sitter",
+]
+
+[[package]]
+name = "tree-sitter-tests-proc-macro"
+version = "0.0.0"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "rand",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-width"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85"
+
+[[package]]
+name = "unindent"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c7de7d73e1754487cb58364ee906a499937a0dfabd86bcb980fa99ec8c8fa2ce"
+
+[[package]]
+name = "url"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "percent-encoding",
+]
+
+[[package]]
+name = "utf8-width"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5190c9442dcdaf0ddd50f37420417d219ae5261bbf5db120d0f9bab996c9cba1"
+
+[[package]]
+name = "vec_map"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
+
+[[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.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee"
+dependencies = [
+ "same-file",
+ "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 = "wasm-bindgen"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1"
+
+[[package]]
+name = "wasm-encoder"
+version = "0.35.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ca90ba1b5b0a70d3d49473c5579951f3bddc78d47b59256d2f9d4922b150aca"
+dependencies = [
+ "leb128",
+]
+
+[[package]]
+name = "wasmparser"
+version = "0.115.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e06c0641a4add879ba71ccb3a1e4278fd546f76f1eafb21d8f7b07733b547cd5"
+dependencies = [
+ "indexmap",
+ "semver",
+]
+
+[[package]]
+name = "wasmtime"
+version = "15.0.0"
+source = "git+https://github.com/bytecodealliance/wasmtime?rev=fa6fcd946b8f6d60c2d191a1b14b9399e261a76d#fa6fcd946b8f6d60c2d191a1b14b9399e261a76d"
+dependencies = [
+ "anyhow",
+ "bincode",
+ "bumpalo",
+ "cfg-if",
+ "indexmap",
+ "libc",
+ "log",
+ "object",
+ "once_cell",
+ "paste",
+ "psm",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "target-lexicon",
+ "wasmparser",
+ "wasmtime-cranelift",
+ "wasmtime-environ",
+ "wasmtime-jit",
+ "wasmtime-runtime",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "wasmtime-asm-macros"
+version = "15.0.0"
+source = "git+https://github.com/bytecodealliance/wasmtime?rev=fa6fcd946b8f6d60c2d191a1b14b9399e261a76d#fa6fcd946b8f6d60c2d191a1b14b9399e261a76d"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "wasmtime-c-api-impl"
+version = "15.0.0"
+source = "git+https://github.com/bytecodealliance/wasmtime?rev=fa6fcd946b8f6d60c2d191a1b14b9399e261a76d#fa6fcd946b8f6d60c2d191a1b14b9399e261a76d"
+dependencies = [
+ "anyhow",
+ "log",
+ "once_cell",
+ "tracing",
+ "wasmtime",
+ "wasmtime-c-api-macros",
+]
+
+[[package]]
+name = "wasmtime-c-api-macros"
+version = "0.0.0"
+source = "git+https://github.com/bytecodealliance/wasmtime?rev=fa6fcd946b8f6d60c2d191a1b14b9399e261a76d#fa6fcd946b8f6d60c2d191a1b14b9399e261a76d"
+dependencies = [
+ "proc-macro2",
+ "quote",
+]
+
+[[package]]
+name = "wasmtime-cranelift"
+version = "15.0.0"
+source = "git+https://github.com/bytecodealliance/wasmtime?rev=fa6fcd946b8f6d60c2d191a1b14b9399e261a76d#fa6fcd946b8f6d60c2d191a1b14b9399e261a76d"
+dependencies = [
+ "anyhow",
+ "cfg-if",
+ "cranelift-codegen",
+ "cranelift-control",
+ "cranelift-entity",
+ "cranelift-frontend",
+ "cranelift-native",
+ "cranelift-wasm",
+ "gimli",
+ "log",
+ "object",
+ "target-lexicon",
+ "thiserror",
+ "wasmparser",
+ "wasmtime-cranelift-shared",
+ "wasmtime-environ",
+ "wasmtime-versioned-export-macros",
+]
+
+[[package]]
+name = "wasmtime-cranelift-shared"
+version = "15.0.0"
+source = "git+https://github.com/bytecodealliance/wasmtime?rev=fa6fcd946b8f6d60c2d191a1b14b9399e261a76d#fa6fcd946b8f6d60c2d191a1b14b9399e261a76d"
+dependencies = [
+ "anyhow",
+ "cranelift-codegen",
+ "cranelift-control",
+ "cranelift-native",
+ "gimli",
+ "object",
+ "target-lexicon",
+ "wasmtime-environ",
+]
+
+[[package]]
+name = "wasmtime-environ"
+version = "15.0.0"
+source = "git+https://github.com/bytecodealliance/wasmtime?rev=fa6fcd946b8f6d60c2d191a1b14b9399e261a76d#fa6fcd946b8f6d60c2d191a1b14b9399e261a76d"
+dependencies = [
+ "anyhow",
+ "cranelift-entity",
+ "gimli",
+ "indexmap",
+ "log",
+ "object",
+ "serde",
+ "serde_derive",
+ "target-lexicon",
+ "thiserror",
+ "wasmparser",
+ "wasmtime-types",
+]
+
+[[package]]
+name = "wasmtime-jit"
+version = "15.0.0"
+source = "git+https://github.com/bytecodealliance/wasmtime?rev=fa6fcd946b8f6d60c2d191a1b14b9399e261a76d#fa6fcd946b8f6d60c2d191a1b14b9399e261a76d"
+dependencies = [
+ "anyhow",
+ "bincode",
+ "cfg-if",
+ "gimli",
+ "log",
+ "object",
+ "rustix",
+ "serde",
+ "serde_derive",
+ "target-lexicon",
+ "wasmtime-environ",
+ "wasmtime-jit-icache-coherence",
+ "wasmtime-runtime",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "wasmtime-jit-debug"
+version = "15.0.0"
+source = "git+https://github.com/bytecodealliance/wasmtime?rev=fa6fcd946b8f6d60c2d191a1b14b9399e261a76d#fa6fcd946b8f6d60c2d191a1b14b9399e261a76d"
+dependencies = [
+ "once_cell",
+ "wasmtime-versioned-export-macros",
+]
+
+[[package]]
+name = "wasmtime-jit-icache-coherence"
+version = "15.0.0"
+source = "git+https://github.com/bytecodealliance/wasmtime?rev=fa6fcd946b8f6d60c2d191a1b14b9399e261a76d#fa6fcd946b8f6d60c2d191a1b14b9399e261a76d"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "wasmtime-runtime"
+version = "15.0.0"
+source = "git+https://github.com/bytecodealliance/wasmtime?rev=fa6fcd946b8f6d60c2d191a1b14b9399e261a76d#fa6fcd946b8f6d60c2d191a1b14b9399e261a76d"
+dependencies = [
+ "anyhow",
+ "cc",
+ "cfg-if",
+ "indexmap",
+ "libc",
+ "log",
+ "mach",
+ "memfd",
+ "memoffset",
+ "paste",
+ "rand",
+ "rustix",
+ "sptr",
+ "wasm-encoder",
+ "wasmtime-asm-macros",
+ "wasmtime-environ",
+ "wasmtime-jit-debug",
+ "wasmtime-versioned-export-macros",
+ "wasmtime-wmemcheck",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "wasmtime-types"
+version = "15.0.0"
+source = "git+https://github.com/bytecodealliance/wasmtime?rev=fa6fcd946b8f6d60c2d191a1b14b9399e261a76d#fa6fcd946b8f6d60c2d191a1b14b9399e261a76d"
+dependencies = [
+ "cranelift-entity",
+ "serde",
+ "serde_derive",
+ "thiserror",
+ "wasmparser",
+]
+
+[[package]]
+name = "wasmtime-versioned-export-macros"
+version = "15.0.0"
+source = "git+https://github.com/bytecodealliance/wasmtime?rev=fa6fcd946b8f6d60c2d191a1b14b9399e261a76d#fa6fcd946b8f6d60c2d191a1b14b9399e261a76d"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "wasmtime-wmemcheck"
+version = "15.0.0"
+source = "git+https://github.com/bytecodealliance/wasmtime?rev=fa6fcd946b8f6d60c2d191a1b14b9399e261a76d#fa6fcd946b8f6d60c2d191a1b14b9399e261a76d"
+
+[[package]]
+name = "web-sys"
+version = "0.3.64"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "webbrowser"
+version = "0.8.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "82b2391658b02c27719fc5a0a73d6e696285138e8b12fba9d4baa70451023c71"
+dependencies = [
+ "core-foundation",
+ "home",
+ "jni",
+ "log",
+ "ndk-context",
+ "objc",
+ "raw-window-handle",
+ "url",
+ "web-sys",
+]
+
+[[package]]
+name = "which"
+version = "4.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7"
+dependencies = [
+ "either",
+ "home",
+ "once_cell",
+ "rustix",
+]
+
+[[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.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596"
+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"
+
+[[package]]
+name = "windows-sys"
+version = "0.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
+dependencies = [
+ "windows-targets 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
+dependencies = [
+ "windows_aarch64_gnullvm 0.48.5",
+ "windows_aarch64_msvc 0.48.5",
+ "windows_i686_gnu 0.48.5",
+ "windows_i686_msvc 0.48.5",
+ "windows_x86_64_gnu 0.48.5",
+ "windows_x86_64_gnullvm 0.48.5",
+ "windows_x86_64_msvc 0.48.5",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
+
+[[package]]
+name = "winnow"
+version = "0.5.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3b801d0e0a6726477cc207f60162da452f3a95adb368399bef20a946e06f65c"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "yansi"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec"
+
+[[package]]
+name = "zerocopy"
+version = "0.7.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81ba595b9f2772fbee2312de30eeb80ec773b4cb2f1e8098db024afadda6c06f"
+dependencies = [
+ "zerocopy-derive",
+]
+
+[[package]]
+name = "zerocopy-derive"
+version = "0.7.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "772666c41fb6dceaf520b564b962d738a8e1a83b41bd48945f50837aed78bb1d"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/default.nix b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/default.nix
new file mode 100644
index 000000000000..2a6fd3374d8f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/default.nix
@@ -0,0 +1,173 @@
+{ lib
+, stdenv
+, fetchgit
+, fetchFromGitHub
+, runCommand
+, which
+, rustPlatform
+, emscripten
+, Security
+, callPackage
+, linkFarm
+, CoreServices
+, enableShared ? !stdenv.hostPlatform.isStatic
+, enableStatic ? stdenv.hostPlatform.isStatic
+, webUISupport ? false
+, extraGrammars ? { }
+}:
+
+let
+  # to update:
+  # 1) change all these hashes
+  # 2) nix-build -A tree-sitter.updater.update-all-grammars
+  # 3) Set GITHUB_TOKEN env variable to avoid api rate limit (Use a Personal Access Token from https://github.com/settings/tokens It does not need any permissions)
+  # 4) run the ./result script that is output by that (it updates ./grammars)
+  version = "0.20.9";
+  sha256 = "sha256-NxWqpMNwu5Ajffw1E2q9KS4TgkCH6M+ctFyi9Jp0tqQ=";
+
+  src = fetchFromGitHub {
+    owner = "tree-sitter";
+    repo = "tree-sitter";
+    rev = "v${version}";
+    inherit sha256;
+    fetchSubmodules = true;
+  };
+
+  update-all-grammars = callPackage ./update.nix { };
+
+  fetchGrammar = (v: fetchgit { inherit (v) url rev sha256 fetchSubmodules; });
+
+  grammars =
+    runCommand "grammars" { } (''
+      mkdir $out
+    '' + (lib.concatStrings (lib.mapAttrsToList
+      (name: grammar: "ln -s ${if grammar ? src then grammar.src else fetchGrammar grammar} $out/${name}\n")
+      (import ./grammars { inherit lib; }))));
+
+  buildGrammar = callPackage ./grammar.nix { };
+
+  builtGrammars =
+    let
+      build = name: grammar:
+        buildGrammar {
+          language = grammar.language or name;
+          inherit version;
+          src = grammar.src or (fetchGrammar grammar);
+          location = grammar.location or null;
+          generate = grammar.generate or false;
+        };
+      grammars' = import ./grammars { inherit lib; } // extraGrammars;
+      grammars = grammars' //
+        { tree-sitter-ocaml = grammars'.tree-sitter-ocaml // { location = "ocaml"; }; } //
+        { tree-sitter-ocaml-interface = grammars'.tree-sitter-ocaml // { location = "interface"; }; } //
+        { tree-sitter-org-nvim = grammars'.tree-sitter-org-nvim // { language = "org"; }; } //
+        { tree-sitter-typescript = grammars'.tree-sitter-typescript // { location = "typescript"; }; } //
+        { tree-sitter-tsx = grammars'.tree-sitter-typescript // { location = "tsx"; }; } //
+        { tree-sitter-typst = grammars'.tree-sitter-typst // { generate = true; }; } //
+        { tree-sitter-markdown = grammars'.tree-sitter-markdown // { location = "tree-sitter-markdown"; }; } //
+        { tree-sitter-markdown-inline = grammars'.tree-sitter-markdown // { language = "markdown_inline"; location = "tree-sitter-markdown-inline"; }; } //
+        { tree-sitter-wing = grammars'.tree-sitter-wing // { location = "libs/tree-sitter-wing"; generate = true; }; };
+    in
+    lib.mapAttrs build (grammars);
+
+  # Usage:
+  # pkgs.tree-sitter.withPlugins (p: [ p.tree-sitter-c p.tree-sitter-java ... ])
+  #
+  # or for all grammars:
+  # pkgs.tree-sitter.withPlugins (_: allGrammars)
+  # which is equivalent to
+  # pkgs.tree-sitter.withPlugins (p: builtins.attrValues p)
+  withPlugins = grammarFn:
+    let
+      grammars = grammarFn builtGrammars;
+    in
+    linkFarm "grammars"
+      (map
+        (drv:
+          let
+            name = lib.strings.getName drv;
+          in
+          {
+            name =
+              (lib.strings.replaceStrings [ "-" ] [ "_" ]
+                (lib.strings.removePrefix "tree-sitter-"
+                  (lib.strings.removeSuffix "-grammar" name)))
+              + ".so";
+            path = "${drv}/parser";
+          }
+        )
+        grammars);
+
+  allGrammars = builtins.attrValues builtGrammars;
+
+in
+rustPlatform.buildRustPackage {
+  pname = "tree-sitter";
+  inherit src version;
+
+  cargoLock.lockFile = ./Cargo.lock;
+  cargoLock.outputHashes."cranelift-bforest-0.102.0" = "sha256-rJeRbRDrAnKb8s98gNn1NTMKuB8B4aOI8Fh6JeLX7as=";
+
+  buildInputs =
+    lib.optionals stdenv.isDarwin [ Security CoreServices ];
+  nativeBuildInputs =
+    [ which ]
+    ++ lib.optionals webUISupport [ emscripten ];
+
+  postPatch = lib.optionalString (!webUISupport) ''
+    # remove web interface
+    sed -e '/pub mod playground/d' \
+        -i cli/src/lib.rs
+    sed -e 's/playground,//' \
+        -e 's/playground::serve(&current_dir.*$/println!("ERROR: web-ui is not available in this nixpkgs build; enable the webUISupport"); std::process::exit(1);/' \
+        -i cli/src/main.rs
+  '';
+
+  # Compile web assembly with emscripten. The --debug flag prevents us from
+  # minifying the JavaScript; passing it allows us to side-step more Node
+  # JS dependencies for installation.
+  preBuild = lib.optionalString webUISupport ''
+    mkdir -p .emscriptencache
+    export EM_CACHE=$(pwd)/.emscriptencache
+    bash ./script/build-wasm --debug
+  '';
+
+  postInstall = ''
+    PREFIX=$out make install
+    ${lib.optionalString (!enableShared) "rm $out/lib/*.so{,.*}"}
+    ${lib.optionalString (!enableStatic) "rm $out/lib/*.a"}
+  '';
+
+  # test result: FAILED. 120 passed; 13 failed; 0 ignored; 0 measured; 0 filtered out
+  doCheck = false;
+
+  passthru = {
+    updater = {
+      inherit update-all-grammars;
+    };
+    inherit grammars buildGrammar builtGrammars withPlugins allGrammars;
+
+    tests = {
+      # make sure all grammars build
+      builtGrammars = lib.recurseIntoAttrs builtGrammars;
+    };
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/tree-sitter/tree-sitter";
+    description = "A parser generator tool and an incremental parsing library";
+    longDescription = ''
+      Tree-sitter is a parser generator tool and an incremental parsing library.
+      It can build a concrete syntax tree for a source file and efficiently update the syntax tree as the source file is edited.
+
+      Tree-sitter aims to be:
+
+      * General enough to parse any programming language
+      * Fast enough to parse on every keystroke in a text editor
+      * Robust enough to provide useful results even in the presence of syntax errors
+      * Dependency-free so that the runtime library (which is written in pure C) can be embedded in any application
+    '';
+    license = licenses.mit;
+    maintainers = with maintainers; [ Profpatsch ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammar.nix b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammar.nix
new file mode 100644
index 000000000000..ce46e3623bae
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammar.nix
@@ -0,0 +1,61 @@
+{ stdenv
+, nodejs
+, tree-sitter
+, lib
+}:
+
+# Build a parser grammar and put the resulting shared object in `$out/parser`
+
+{
+  # language name
+  language
+, version
+, src
+, location ? null
+, generate ? false
+, ...
+}@args:
+
+stdenv.mkDerivation ({
+  pname = "${language}-grammar";
+
+  inherit src version;
+
+  nativeBuildInputs = lib.optionals generate [ nodejs tree-sitter ];
+
+  CFLAGS = [ "-Isrc" "-O2" ];
+  CXXFLAGS = [ "-Isrc" "-O2" ];
+
+  stripDebugList = [ "parser" ];
+
+  configurePhase = lib.optionalString (location != null) ''
+    cd ${location}
+  '' + lib.optionalString generate ''
+    tree-sitter generate
+  '';
+
+  # When both scanner.{c,cc} exist, we should not link both since they may be the same but in
+  # different languages. Just randomly prefer C++ if that happens.
+  buildPhase = ''
+    runHook preBuild
+    if [[ -e src/scanner.cc ]]; then
+      $CXX -fPIC -c src/scanner.cc -o scanner.o $CXXFLAGS
+    elif [[ -e src/scanner.c ]]; then
+      $CC -fPIC -c src/scanner.c -o scanner.o $CFLAGS
+    fi
+    $CC -fPIC -c src/parser.c -o parser.o $CFLAGS
+    rm -rf parser
+    $CXX -shared -o parser *.o
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    mkdir $out
+    mv parser $out/
+    if [[ -d queries ]]; then
+      cp -r queries $out
+    fi
+    runHook postInstall
+  '';
+} // removeAttrs args [ "language" "location" "generate" ])
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/default.nix b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/default.nix
new file mode 100644
index 000000000000..1544e737c0b9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/default.nix
@@ -0,0 +1,111 @@
+{ lib }:
+{
+  tree-sitter-bash = lib.importJSON ./tree-sitter-bash.json;
+  tree-sitter-beancount = lib.importJSON ./tree-sitter-beancount.json;
+  tree-sitter-bibtex = lib.importJSON ./tree-sitter-bibtex.json;
+  tree-sitter-bitbake = lib.importJSON ./tree-sitter-bitbake.json;
+  tree-sitter-c = lib.importJSON ./tree-sitter-c.json;
+  tree-sitter-c-sharp = lib.importJSON ./tree-sitter-c-sharp.json;
+  tree-sitter-clojure = lib.importJSON ./tree-sitter-clojure.json;
+  tree-sitter-cmake = lib.importJSON ./tree-sitter-cmake.json;
+  tree-sitter-comment = lib.importJSON ./tree-sitter-comment.json;
+  tree-sitter-commonlisp = lib.importJSON ./tree-sitter-commonlisp.json;
+  tree-sitter-cpp = lib.importJSON ./tree-sitter-cpp.json;
+  tree-sitter-css = lib.importJSON ./tree-sitter-css.json;
+  tree-sitter-cuda = lib.importJSON ./tree-sitter-cuda.json;
+  tree-sitter-cue = lib.importJSON ./tree-sitter-cue.json;
+  tree-sitter-dart = lib.importJSON ./tree-sitter-dart.json;
+  tree-sitter-devicetree = lib.importJSON ./tree-sitter-devicetree.json;
+  tree-sitter-dockerfile = lib.importJSON ./tree-sitter-dockerfile.json;
+  tree-sitter-dot = lib.importJSON ./tree-sitter-dot.json;
+  tree-sitter-eex = lib.importJSON ./tree-sitter-eex.json;
+  tree-sitter-elisp = lib.importJSON ./tree-sitter-elisp.json;
+  tree-sitter-elixir = lib.importJSON ./tree-sitter-elixir.json;
+  tree-sitter-elm = lib.importJSON ./tree-sitter-elm.json;
+  tree-sitter-embedded-template = lib.importJSON ./tree-sitter-embedded-template.json;
+  tree-sitter-erlang = lib.importJSON ./tree-sitter-erlang.json;
+  tree-sitter-fennel = lib.importJSON ./tree-sitter-fennel.json;
+  tree-sitter-fish = lib.importJSON ./tree-sitter-fish.json;
+  tree-sitter-fortran = lib.importJSON ./tree-sitter-fortran.json;
+  tree-sitter-gdscript = lib.importJSON ./tree-sitter-gdscript.json;
+  tree-sitter-glimmer = lib.importJSON ./tree-sitter-glimmer.json;
+  tree-sitter-glsl = lib.importJSON ./tree-sitter-glsl.json;
+  tree-sitter-go = lib.importJSON ./tree-sitter-go.json;
+  tree-sitter-godot-resource = lib.importJSON ./tree-sitter-godot-resource.json;
+  tree-sitter-gomod = lib.importJSON ./tree-sitter-gomod.json;
+  tree-sitter-gowork = lib.importJSON ./tree-sitter-gowork.json;
+  tree-sitter-graphql = lib.importJSON ./tree-sitter-graphql.json;
+  tree-sitter-haskell = lib.importJSON ./tree-sitter-haskell.json;
+  tree-sitter-hcl = lib.importJSON ./tree-sitter-hcl.json;
+  tree-sitter-heex = lib.importJSON ./tree-sitter-heex.json;
+  tree-sitter-hjson = lib.importJSON ./tree-sitter-hjson.json;
+  tree-sitter-html = lib.importJSON ./tree-sitter-html.json;
+  tree-sitter-http = lib.importJSON ./tree-sitter-http.json;
+  tree-sitter-janet-simple = lib.importJSON ./tree-sitter-janet-simple.json;
+  tree-sitter-java = lib.importJSON ./tree-sitter-java.json;
+  tree-sitter-javascript = lib.importJSON ./tree-sitter-javascript.json;
+  tree-sitter-jsdoc = lib.importJSON ./tree-sitter-jsdoc.json;
+  tree-sitter-json = lib.importJSON ./tree-sitter-json.json;
+  tree-sitter-json5 = lib.importJSON ./tree-sitter-json5.json;
+  tree-sitter-jsonnet = lib.importJSON ./tree-sitter-jsonnet.json;
+  tree-sitter-julia = lib.importJSON ./tree-sitter-julia.json;
+  tree-sitter-just = lib.importJSON ./tree-sitter-just.json;
+  tree-sitter-kotlin = lib.importJSON ./tree-sitter-kotlin.json;
+  tree-sitter-latex = lib.importJSON ./tree-sitter-latex.json;
+  tree-sitter-ledger = lib.importJSON ./tree-sitter-ledger.json;
+  tree-sitter-llvm = lib.importJSON ./tree-sitter-llvm.json;
+  tree-sitter-lua = lib.importJSON ./tree-sitter-lua.json;
+  tree-sitter-make = lib.importJSON ./tree-sitter-make.json;
+  tree-sitter-markdown = lib.importJSON ./tree-sitter-markdown.json;
+  tree-sitter-nickel = lib.importJSON ./tree-sitter-nickel.json;
+  tree-sitter-nix = lib.importJSON ./tree-sitter-nix.json;
+  tree-sitter-norg = lib.importJSON ./tree-sitter-norg.json;
+  tree-sitter-norg-meta = lib.importJSON ./tree-sitter-norg-meta.json;
+  tree-sitter-nu = lib.importJSON ./tree-sitter-nu.json;
+  tree-sitter-ocaml = lib.importJSON ./tree-sitter-ocaml.json;
+  tree-sitter-org-nvim = lib.importJSON ./tree-sitter-org-nvim.json;
+  tree-sitter-perl = lib.importJSON ./tree-sitter-perl.json;
+  tree-sitter-pgn = lib.importJSON ./tree-sitter-pgn.json;
+  tree-sitter-php = lib.importJSON ./tree-sitter-php.json;
+  tree-sitter-pioasm = lib.importJSON ./tree-sitter-pioasm.json;
+  tree-sitter-prisma = lib.importJSON ./tree-sitter-prisma.json;
+  tree-sitter-proto = lib.importJSON ./tree-sitter-proto.json;
+  tree-sitter-pug = lib.importJSON ./tree-sitter-pug.json;
+  tree-sitter-python = lib.importJSON ./tree-sitter-python.json;
+  tree-sitter-ql = lib.importJSON ./tree-sitter-ql.json;
+  tree-sitter-ql-dbscheme = lib.importJSON ./tree-sitter-ql-dbscheme.json;
+  tree-sitter-query = lib.importJSON ./tree-sitter-query.json;
+  tree-sitter-r = lib.importJSON ./tree-sitter-r.json;
+  tree-sitter-regex = lib.importJSON ./tree-sitter-regex.json;
+  tree-sitter-rego = lib.importJSON ./tree-sitter-rego.json;
+  tree-sitter-rst = lib.importJSON ./tree-sitter-rst.json;
+  tree-sitter-ruby = lib.importJSON ./tree-sitter-ruby.json;
+  tree-sitter-rust = lib.importJSON ./tree-sitter-rust.json;
+  tree-sitter-scala = lib.importJSON ./tree-sitter-scala.json;
+  tree-sitter-scheme = lib.importJSON ./tree-sitter-scheme.json;
+  tree-sitter-scss = lib.importJSON ./tree-sitter-scss.json;
+  tree-sitter-smithy = lib.importJSON ./tree-sitter-smithy.json;
+  tree-sitter-solidity = lib.importJSON ./tree-sitter-solidity.json;
+  tree-sitter-sparql = lib.importJSON ./tree-sitter-sparql.json;
+  tree-sitter-sql = lib.importJSON ./tree-sitter-sql.json;
+  tree-sitter-supercollider = lib.importJSON ./tree-sitter-supercollider.json;
+  tree-sitter-surface = lib.importJSON ./tree-sitter-surface.json;
+  tree-sitter-svelte = lib.importJSON ./tree-sitter-svelte.json;
+  tree-sitter-templ = lib.importJSON ./tree-sitter-templ.json;
+  tree-sitter-tiger = lib.importJSON ./tree-sitter-tiger.json;
+  tree-sitter-tlaplus = lib.importJSON ./tree-sitter-tlaplus.json;
+  tree-sitter-toml = lib.importJSON ./tree-sitter-toml.json;
+  tree-sitter-tsq = lib.importJSON ./tree-sitter-tsq.json;
+  tree-sitter-turtle = lib.importJSON ./tree-sitter-turtle.json;
+  tree-sitter-typescript = lib.importJSON ./tree-sitter-typescript.json;
+  tree-sitter-typst = lib.importJSON ./tree-sitter-typst.json;
+  tree-sitter-uiua = lib.importJSON ./tree-sitter-uiua.json;
+  tree-sitter-verilog = lib.importJSON ./tree-sitter-verilog.json;
+  tree-sitter-vim = lib.importJSON ./tree-sitter-vim.json;
+  tree-sitter-vue = lib.importJSON ./tree-sitter-vue.json;
+  tree-sitter-wgsl = lib.importJSON ./tree-sitter-wgsl.json;
+  tree-sitter-wing = lib.importJSON ./tree-sitter-wing.json;
+  tree-sitter-yaml = lib.importJSON ./tree-sitter-yaml.json;
+  tree-sitter-yang = lib.importJSON ./tree-sitter-yang.json;
+  tree-sitter-zig = lib.importJSON ./tree-sitter-zig.json;
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-bash.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-bash.json
new file mode 100644
index 000000000000..d10cb04e0f29
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-bash.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/tree-sitter/tree-sitter-bash",
+  "rev": "c0f5797a728fc4ebd78a8b0e436b1494a8ab5f51",
+  "date": "2023-08-18T05:23:36-04:00",
+  "path": "/nix/store/4x7nwivwmyibiq0y1k5wpswsl1npqgb4-tree-sitter-bash",
+  "sha256": "11gjjaf9hrsw3rd774c3gq27im2j9gxmkn59wcpg4nwni60p0vjh",
+  "hash": "sha256-UG5wgYmWW/Iu46nYWftLUtR4BH6DkXNaHlxnmJyS8oU=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-beancount.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-beancount.json
new file mode 100644
index 000000000000..93e266b4343c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-beancount.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/polarmutex/tree-sitter-beancount",
+  "rev": "358e5ecbb87109eef7fd596ea518a4ff74cb9b31",
+  "date": "2023-07-02T15:37:32-04:00",
+  "path": "/nix/store/h24aaxhp4hhp7f21by7shjvx7v4k513z-tree-sitter-beancount",
+  "sha256": "1pa673dzsv41rxlqb2a5w7r31rw9z3m6a54yx22wm75cwr9hagxz",
+  "hash": "sha256-vz8FU+asnMqF6J4UZer4iecw8uFFiYVpz4Fs/ds4Rt0=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-bibtex.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-bibtex.json
new file mode 100644
index 000000000000..3b1ebf2fe4d4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-bibtex.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/latex-lsp/tree-sitter-bibtex",
+  "rev": "ccfd77db0ed799b6c22c214fe9d2937f47bc8b34",
+  "date": "2021-03-26T15:53:50+01:00",
+  "path": "/nix/store/pg00zy53rni7znda2vbyyhkkclgja3kq-tree-sitter-bibtex",
+  "sha256": "0m7f3dkqbmy8x1bhl11m8f4p6n76wfvh99rp46zrqv39355nw1y2",
+  "hash": "sha256-wgduSxlpbJy/ITenBLfj5lhziUM1BApX6MjXhWcb7lQ=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-bitbake.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-bitbake.json
new file mode 100644
index 000000000000..61aeba0fec66
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-bitbake.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/amaanq/tree-sitter-bitbake",
+  "rev": "ffe6c2f3dbf30224479a28ca5d50df594b2486a9",
+  "date": "2023-11-08T10:34:03-05:00",
+  "path": "/nix/store/zzckcglck1cr32cmp14i95r7q0qkgajf-tree-sitter-bitbake",
+  "sha256": "1g547sq2xsfn7xmdmz1ny4lvk75akwi7k1vrrq6bdfkcg7gzkp1b",
+  "hash": "sha256-K9z533lsurYMznmHeSKfqpy5KfE2/NpqP9bpLrA+pLw=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-c-sharp.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-c-sharp.json
new file mode 100644
index 000000000000..0329b6e5e4f3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-c-sharp.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/tree-sitter/tree-sitter-c-sharp",
+  "rev": "7a47daeaf0d410dd1a91c97b274bb7276dd96605",
+  "date": "2022-09-15T09:14:12+01:00",
+  "path": "/nix/store/sscjjlp833rqqvfpgh84wsnq59jmy90c-tree-sitter-c-sharp",
+  "sha256": "0lijbi5q49g50ji00p2lb45rvd76h07sif3xjl9b31yyxwillr6l",
+  "hash": "sha256-1GRKI+/eh7ESlX24qA+A5rSdC1lUXACiBOUlgktcMlI=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-c.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-c.json
new file mode 100644
index 000000000000..0b347648c6fb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-c.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/tree-sitter/tree-sitter-c",
+  "rev": "93ef1785bbf854cf964e6e53d6e1e6885a4d8ebc",
+  "date": "2023-08-09T15:22:48-04:00",
+  "path": "/nix/store/ni6ry3r1gqpgcn6xgc1nga110hl313m3-tree-sitter-c",
+  "sha256": "0bshiwf7rvbafgdv9lj1hgmq3wc8i45gis34n6p6qlb9r6g5jzz6",
+  "hash": "sha256-5n9ZnslpUWyusWTo+AqJiPGB64NB0rTbc2rtfByPUC8=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-clojure.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-clojure.json
new file mode 100644
index 000000000000..66ef359104cd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-clojure.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/sogaiu/tree-sitter-clojure",
+  "rev": "6e41628e9d18b19caea1cb1d72aae4ccff5bdfe9",
+  "date": "2023-05-05T15:36:48+09:00",
+  "path": "/nix/store/fx50ap0gdspwcpgf0zni4j1pzz29abk5-tree-sitter-clojure",
+  "sha256": "0hcl4svn0q4979mx0nn3hhi27xfxj1lz7g1926lcjx6sv1z4ihmj",
+  "hash": "sha256-ssJIftjadMmoESm882mQ3fUjIoTDWtBrOolgYLcmlEE=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-cmake.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-cmake.json
new file mode 100644
index 000000000000..d66b68664042
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-cmake.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/uyha/tree-sitter-cmake",
+  "rev": "73ab4b8e9522f014a67f87f585e820d36fa47408",
+  "date": "2023-08-15T15:07:39+00:00",
+  "path": "/nix/store/rzb3dvqw2ngdbqbpv1zshxm2q9g09f9j-tree-sitter-cmake",
+  "sha256": "1z49jdachwxwbzrrapskpi2kxq3ydihfj45ab9892gbamfij2zp5",
+  "hash": "sha256-5X4ho6tqPZFQWqoQ6WBsfuA+RbxTX5XzX7xzyFSTifw=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-comment.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-comment.json
new file mode 100644
index 000000000000..ed34fe8a5d56
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-comment.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/stsewd/tree-sitter-comment",
+  "rev": "ef429992748f89e176243411e94b8ffc8777d118",
+  "date": "2023-06-03T20:48:17-05:00",
+  "path": "/nix/store/0kg71dvg10f1m2f08z1b2wh1ap4w4hw6-tree-sitter-comment",
+  "sha256": "1d5g69i8jplyg888yr7wzjb46cqnchwf4kdzgb83him7cwfx9wax",
+  "hash": "sha256-XfHUHWenRjjQer9N4jhkFjNDlvz8ZI8Qep5eiWIyr7Q=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-commonlisp.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-commonlisp.json
new file mode 100644
index 000000000000..5026e1d70f03
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-commonlisp.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/thehamsta/tree-sitter-commonlisp",
+  "rev": "5153dbbc70e4cc2324320c1bdae020d31079c7c0",
+  "date": "2023-08-26T00:52:05+02:00",
+  "path": "/nix/store/w5assc5jjkg8j9gj7zgqlm07h5y8gxp7-tree-sitter-commonlisp",
+  "sha256": "195g5qp38j9371zxq9d7blf02bp1bnrbkb6jgi5x0gywdxrbdq6i",
+  "hash": "sha256-0eC2cm/cP9BLfNKsubJd4S4BHF2nJdx/OCNJNC4ur6Q=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-cpp.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-cpp.json
new file mode 100644
index 000000000000..7aeb707a28a6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-cpp.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/tree-sitter/tree-sitter-cpp",
+  "rev": "a90f170f92d5d70e7c2d4183c146e61ba5f3a457",
+  "date": "2023-08-16T02:46:22-04:00",
+  "path": "/nix/store/vd49n2vnhsbmc8gdds9zh6psq93jj6cp-tree-sitter-cpp",
+  "sha256": "0lj5l0pahfixw5lqbw83r01s67szlc6a4ra8yg8s7cbci7rk7lvv",
+  "hash": "sha256-e9Mz84lssaPR80hlogyjXx+jA8gD8YVp4T06qC6gRVI=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-css.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-css.json
new file mode 100644
index 000000000000..a59d21058007
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-css.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/tree-sitter/tree-sitter-css",
+  "rev": "fec7d3757ab8f46a0ffe298be99b16ad5b9fa229",
+  "date": "2023-08-20T03:59:13-04:00",
+  "path": "/nix/store/dn0igch37dalqfrjdqzs2yj40a14ixql-tree-sitter-css",
+  "sha256": "0gvad0cpcxwmzgv75arcw40r5dxy6b3aq9kp91xf4bjlkfyajzvz",
+  "hash": "sha256-f3+pvJtULuJ6SHcmrMYyvreSAeEsq3L2+5V3dhloaj8=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-cuda.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-cuda.json
new file mode 100644
index 000000000000..646422b5df17
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-cuda.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/thehamsta/tree-sitter-cuda",
+  "rev": "275cfb95013b88382e11490aef1e7c9b17a95ef7",
+  "date": "2023-09-24T01:01:27+02:00",
+  "path": "/nix/store/cxvih9bkbpr3k2bcfzmcym6w3jw4k6p0-tree-sitter-cuda",
+  "sha256": "170qqhxnf5j34g1as5r5zamazvxss8rcmbxi92gkcgnindhgviny",
+  "hash": "sha256-3sb9YLPRPjafSLGvyjLSuu+vqvolF63CI0MWZzvEGJw=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-cue.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-cue.json
new file mode 100644
index 000000000000..2429e08f4b09
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-cue.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/eonpatapon/tree-sitter-cue",
+  "rev": "2df92e6755337e9234ad18ffef37f35d95e2ba9d",
+  "date": "2023-09-14T09:23:14+02:00",
+  "path": "/nix/store/96raymr29j4w3z8czzslb5n0w11789if-tree-sitter-cue",
+  "sha256": "195g75hrmgj17r7csjbwqrwqc21k4nbmrr4rjpcpfidnq0c9pia6",
+  "hash": "sha256-RsWbGMC2RXfZlZnkXJclMwiGecZ8Sc1OPkG+mmE5r6Q=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-dart.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-dart.json
new file mode 100644
index 000000000000..738b30cbd116
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-dart.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/usernobody14/tree-sitter-dart",
+  "rev": "7e447dc18a2d293498670fb5ea16138648c883e5",
+  "date": "2023-09-07T18:39:30-06:00",
+  "path": "/nix/store/fjmckpx1h2m3y8d63x05qn5lzgci37p8-tree-sitter-dart",
+  "sha256": "1hc2c2qmydka3iqz56md766lfy4s0xy2pr97hvdgvgq472jss984",
+  "hash": "sha256-BCWtpTgEv/3ahiflK3wHmnhHjTmtmvJxHGo2X7FggsE=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-devicetree.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-devicetree.json
new file mode 100644
index 000000000000..f3530c58c62e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-devicetree.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/joelspadin/tree-sitter-devicetree",
+  "rev": "59faca63ab28d8aa8b79416bfcbe5b935f3fa604",
+  "date": "2023-04-23T12:18:55-05:00",
+  "path": "/nix/store/m39bl3vasy0b1r0qzdn8flb480ys8laq-tree-sitter-devicetree",
+  "sha256": "11r46v3zw03p1fldhawn9zwyzpi7h57pjw9sydwq7b1fgdmdxvn7",
+  "hash": "sha256-x+7eansurIN58zpxeU+BJ97v+U+WK9ioC3cA/sc2JIc=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-dockerfile.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-dockerfile.json
new file mode 100644
index 000000000000..f089eea14505
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-dockerfile.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/camdencheek/tree-sitter-dockerfile",
+  "rev": "d34a0cebd094e830bdd2106a28cb2f1fb22401d8",
+  "date": "2022-01-27T11:20:14-07:00",
+  "path": "/nix/store/3whf6fv79zqk5w0d6jbzfgs5jzm4cll4-tree-sitter-dockerfile",
+  "sha256": "0kf4c4xs5naj8lpcmr3pbdvwj526wl9p6zphxxpimbll7qv6qfnd",
+  "hash": "sha256-zTpsNj6Urhpv7/B+cxPlRhTJd1t35MouRVLZojthxE0=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-dot.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-dot.json
new file mode 100644
index 000000000000..6665c2fefcd4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-dot.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/rydesun/tree-sitter-dot",
+  "rev": "9ab85550c896d8b294d9b9ca1e30698736f08cea",
+  "date": "2022-08-25T12:15:36+08:00",
+  "path": "/nix/store/p0lcm171skxdr4qbhqwl5slx76k9hap6-tree-sitter-dot",
+  "sha256": "013brrljrhgpnks1r0cdvj93l303kb68prm18gpl96pvhjfci063",
+  "hash": "sha256-w4DInIT7mkTvQ6Hmi8yaAww6ktyNgRz0tPfBLGnOawQ=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-eex.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-eex.json
new file mode 100644
index 000000000000..34dc023949d2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-eex.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/connorlay/tree-sitter-eex",
+  "rev": "f742f2fe327463335e8671a87c0b9b396905d1d1",
+  "date": "2022-01-12T10:01:23-08:00",
+  "path": "/nix/store/an5vj0gnziy44ckklm9hxp9wbydisk4l-tree-sitter-eex",
+  "sha256": "19n07ywavwkh4p189d18wxhch45qgn094b7mkdymh60zr7cbmyjh",
+  "hash": "sha256-UPq62MkfGFh9m/UskoB9uBDIYOcotITCJXDyrbg/wKY=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-elisp.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-elisp.json
new file mode 100644
index 000000000000..970cf5370bf0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-elisp.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/wilfred/tree-sitter-elisp",
+  "rev": "1991465e2722dd36c06e03dc7de6bc5d7da89d51",
+  "date": "2023-03-28T08:47:56-07:00",
+  "path": "/nix/store/mbb6q2yma6vszbzpw5hbpzf0iwg9y7vi-tree-sitter-elisp",
+  "sha256": "1m6lb60mlyk38pizcncp58f69kyf36b47rxnysf1l4193nscjqw6",
+  "hash": "sha256-hmPJtB0pEBqc9rbnQ5YZzs9kHCqXWfbjRWN6WoFZ1NQ=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-elixir.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-elixir.json
new file mode 100644
index 000000000000..a421c98aeeb4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-elixir.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/elixir-lang/tree-sitter-elixir",
+  "rev": "869dff3ceb8823ca4b17ca33b663667c8e41e8ba",
+  "date": "2023-03-14T10:58:34+01:00",
+  "path": "/nix/store/d8k07yvr8q14rc21fvhcnqrlpcwhlnmk-tree-sitter-elixir",
+  "sha256": "0m10vykaj36yxk0wwh0vk0pzvpdmac4apgihmxn3j0dwwgirchf0",
+  "hash": "sha256-wEGW4+O8ATlsrzC+qwhTtd39L5gbQM7B7N4MqabfIFQ=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-elm.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-elm.json
new file mode 100644
index 000000000000..94e99286fc3d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-elm.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/elm-tooling/tree-sitter-elm",
+  "rev": "b075803c445191af3cf7dbfdc84efef5f5bbc0f5",
+  "date": "2023-07-30T13:11:47+02:00",
+  "path": "/nix/store/mlg7amv3vmydvk9b21669zrk825pczlw-tree-sitter-elm",
+  "sha256": "1kn78h4w27r5kmf3vy3cc42xm0h0fj44cf4p6nfcl3jfqr9s7n1a",
+  "hash": "sha256-KtijU8ZODsqcNZc4Roh0AILaBWFs+D1cnSUfwQlEx84=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-embedded-template.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-embedded-template.json
new file mode 100644
index 000000000000..4491070428a0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-embedded-template.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/tree-sitter/tree-sitter-embedded-template",
+  "rev": "203f7bd3c1bbfbd98fc19add4b8fcb213c059205",
+  "date": "2023-02-06T19:11:08+01:00",
+  "path": "/nix/store/mch0z6q00g2pp5vjjcdcl2xzs1h96jzh-tree-sitter-embedded-template",
+  "sha256": "0gf33p08a6hqbxwy9zlp8y65gds2d6siqpgasc58ladh5p5n99j9",
+  "hash": "sha256-SaZkyy2wKYoK0+pdHLVpQrdXjEeX/uR5XxgahcAdwz0=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-erlang.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-erlang.json
new file mode 100644
index 000000000000..2b1a7b6c8761
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-erlang.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/abstractmachineslab/tree-sitter-erlang",
+  "rev": "3a9c769444f08bbccce03845270efac0c641c5e7",
+  "date": "2022-10-20T12:35:01+02:00",
+  "path": "/nix/store/lcpjcmkb2js7mmvpd9w9c4gql0yqvdaj-tree-sitter-erlang",
+  "sha256": "10hv3brjvrvg81qxi956mrc16riknhaqmxb6vpl46k0zsm6cgj36",
+  "hash": "sha256-ZsjHTNUfTEPo3Wb1ihW0M2YTWK6mpNhxQG/nLfMaG4I=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-fennel.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-fennel.json
new file mode 100644
index 000000000000..e954be4a24d2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-fennel.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/travonted/tree-sitter-fennel",
+  "rev": "517195970428aacca60891b050aa53eabf4ba78d",
+  "date": "2022-06-22T09:39:24-04:00",
+  "path": "/nix/store/v8by7ilv9fyv20rp714xq7vhwwi7vz0g-tree-sitter-fennel",
+  "sha256": "02ja5narbahc02f6gmnr5j2sg5sbjcc71hbny6n0nd57kcnapfgd",
+  "hash": "sha256-7bmrLJunNAus8XbBcBiTS5enhSzZ1mecAAyqlZUtSgo=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-fish.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-fish.json
new file mode 100644
index 000000000000..a1047117557c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-fish.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/ram02z/tree-sitter-fish",
+  "rev": "f9176908c9eb2e11eb684d79e1d00f3b29bd65c9",
+  "date": "2023-02-12T14:42:20+00:00",
+  "path": "/nix/store/hg229jskwvgmfgi9awznvp9cj5riacay-tree-sitter-fish",
+  "sha256": "1yxvibmmpkwswwrg1mzvcnfj6y0rpccrwyg27k4wpr2630ma9xcw",
+  "hash": "sha256-nPWkKhhG5MvJPOJ5nhm7GXgjnWX71/Ay55rPW+uKu/s=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-fortran.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-fortran.json
new file mode 100644
index 000000000000..d6cc94339f43
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-fortran.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/stadelmanma/tree-sitter-fortran",
+  "rev": "f73d473e3530862dee7cbb38520f28824e7804f6",
+  "date": "2023-08-30T10:25:35+01:00",
+  "path": "/nix/store/mkvh0z39lc89c3bgd91asxjwwiwskyp8-tree-sitter-fortran",
+  "sha256": "1nvxdrzkzs1hz0fki5g7a2h7did66jghaknfakqn92fa20pagl1b",
+  "hash": "sha256-K9CnLhDKiWTxVM5OBZ80psV2oFDnlTgd+DDoP39ufds=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-gdscript.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-gdscript.json
new file mode 100644
index 000000000000..2ac4b39f3710
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-gdscript.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/prestonknopp/tree-sitter-gdscript",
+  "rev": "fbbe22c7e3f8191f65df8cfb4cc8c6137eedb09a",
+  "date": "2023-02-08T15:20:29-08:00",
+  "path": "/nix/store/62skx6k41f6k95qf32b7yjd9m516z3lk-tree-sitter-gdscript",
+  "sha256": "0f4g5vnls2rkwnry47cvpmhsymf1s109sbzdf4x7h94k58f5ggw4",
+  "hash": "sha256-hL9XHCqTJHg6ce0vnUDQwVWvYb2bHeKz5TMLTe0ujzg=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-glimmer.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-glimmer.json
new file mode 100644
index 000000000000..ffafe8690893
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-glimmer.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/alexlafroscia/tree-sitter-glimmer",
+  "rev": "a23d28de811976f3ca310df735fe09a5d2de16ab",
+  "date": "2022-06-24T09:27:51-04:00",
+  "path": "/nix/store/m0hr0x0s3j7r6dn1kv6c77c9qbl4ggkw-tree-sitter-glimmer",
+  "sha256": "07dzpjyc644clh2x3r48w3mi3i68pkac5mwzha2iaxly9fndm0zk",
+  "hash": "sha256-84ParEuedhWFgp/XwtS8yMQR6+CI5NEFpIwQw7y8vx0=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-glsl.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-glsl.json
new file mode 100644
index 000000000000..c6e1437552f9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-glsl.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/thehamsta/tree-sitter-glsl",
+  "rev": "ec6100d2bdf22363ca8a711a212f2144ea49233f",
+  "date": "2023-09-24T00:29:42+02:00",
+  "path": "/nix/store/lk8wn775vpa8aq8vm9fid6dvpijnk9sg-tree-sitter-glsl",
+  "sha256": "0grvl3dibfcy3rqyn621pdlr1dkgqifzalvhh8bqs7s6znmhwns0",
+  "hash": "sha256-QFsOq/1GH40XgnBT9V3Eb7aQabtBGOtxHp65FdugOz8=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-go.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-go.json
new file mode 100644
index 000000000000..bbda8ba6b40d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-go.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/tree-sitter/tree-sitter-go",
+  "rev": "bbaa67a180cfe0c943e50c55130918be8efb20bd",
+  "date": "2023-07-26T05:48:29-04:00",
+  "path": "/nix/store/v9xq4ym9925y1qdgd4frcnbklphvw8mp-tree-sitter-go",
+  "sha256": "0wlhwcdlaj74japyn8wjza0fbwckqwbqv8iyyqdk0a5jf047rdqv",
+  "hash": "sha256-G7d8CHCyKDAb9j6ijRfHk/HlgPqSI+uvkuRIRRvjkHI=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-godot-resource.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-godot-resource.json
new file mode 100644
index 000000000000..06e95d787663
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-godot-resource.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/prestonknopp/tree-sitter-godot-resource",
+  "rev": "b6ef0768711086a86b3297056f9ffb5cc1d77b4a",
+  "date": "2021-12-20T22:40:16-08:00",
+  "path": "/nix/store/3lmwkk16jmjnkx8lrl33i7a19hjca2jz-tree-sitter-godot-resource",
+  "sha256": "0agnvg95fx60xkr5fivl1x3yhcw6ca58f7bpx3dq6fl7pyfgrky2",
+  "hash": "sha256-ws/8nL+HOoPb6Hcdh4pihjPoRw90R1fy7MB0V9Lb9ik=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-gomod.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-gomod.json
new file mode 100644
index 000000000000..6080553537af
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-gomod.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/camdencheek/tree-sitter-go-mod",
+  "rev": "4a65743dbc2bb3094114dd2b43da03c820aa5234",
+  "date": "2022-05-16T16:12:37-04:00",
+  "path": "/nix/store/1aj3kwndjrimfijq0fxx6khn5r6ics3a-tree-sitter-go-mod",
+  "sha256": "1hblbi2bs4hlil703myqhvvq2y1x41rc3w903hg2bhbazh7x8yyf",
+  "hash": "sha256-znvUD/xqwSUeHCDxwXIgPXiB94bY1wEOjRQSvURcdME=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-gowork.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-gowork.json
new file mode 100644
index 000000000000..05eca90427d3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-gowork.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/omertuc/tree-sitter-go-work",
+  "rev": "949a8a470559543857a62102c84700d291fc984c",
+  "date": "2022-10-04T10:19:22+02:00",
+  "path": "/nix/store/v8ny6m450z2g2ijk6gkbc3m1nsxcvck8-tree-sitter-go-work",
+  "sha256": "1nn6nfw24v4m38g9ac528cn608bbxffkll1y525a7i9rdpnmx1sf",
+  "hash": "sha256-Tode7W05xaOKKD5QOp3rayFgLEOiMJUeGpVsIrizxto=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-graphql.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-graphql.json
new file mode 100644
index 000000000000..eb16f2cd9c29
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-graphql.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/bkegley/tree-sitter-graphql",
+  "rev": "5e66e961eee421786bdda8495ed1db045e06b5fe",
+  "date": "2021-05-10T09:09:29-05:00",
+  "path": "/nix/store/am2ld0br0yhdny5c2ndp6l0bl3c78wwq-tree-sitter-graphql",
+  "sha256": "0xvrd6p9rxdjpqfq575ap6hpl2f7dad5i4d4m05w1qk9jx33vw9n",
+  "hash": "sha256-NvE9Rpdp4sALqKSRWJpqxwl6obmqnIIdvrL1nK5peXc=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-haskell.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-haskell.json
new file mode 100644
index 000000000000..200e63638eed
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-haskell.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/tree-sitter/tree-sitter-haskell",
+  "rev": "d7ac98f49e3ed7e17541256fe3881a967d7ffdd3",
+  "date": "2023-09-25T03:05:10+02:00",
+  "path": "/nix/store/8hjdhpw9g27hasl5czx80j7s3j65601k-tree-sitter-haskell",
+  "sha256": "0610dpnnrmwdxhj0cz4mnajx4aaxhr77w4vc756605zgv54djisw",
+  "hash": "sha256-XEfZSNnvF2BMOWwTfk6GXSnSpbKVfAYk7I3XbO1tIBg=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-hcl.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-hcl.json
new file mode 100644
index 000000000000..738b02ffdb69
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-hcl.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/MichaHoffmann/tree-sitter-hcl",
+  "rev": "636dbe70301ecbab8f353c8c78b3406fe4f185f5",
+  "date": "2023-07-25T19:21:31+02:00",
+  "path": "/nix/store/k5rmjfpgn4vpxxqc05xb5fflcck9645v-tree-sitter-hcl",
+  "sha256": "1yydi61jki7xpabi0aq6ykz4w4cya15g8rp34apb6qq9hm4lm9di",
+  "hash": "sha256-saVKSYUJY7OuIuNm9EpQnhFO/vQGKxCXuv3EKYOJzfs=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-heex.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-heex.json
new file mode 100644
index 000000000000..273dc4f69ecd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-heex.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/connorlay/tree-sitter-heex",
+  "rev": "881f1c805f51485a26ecd7865d15c9ef8d606a78",
+  "date": "2022-09-24T18:53:08-07:00",
+  "path": "/nix/store/vb6x1b9lc90ys55cwshdz5dxmwvzyjvv-tree-sitter-heex",
+  "sha256": "00330rgg67fq0d9gk1yswj78d9mn1jvvjmmy1k7cxpvm5993p3sw",
+  "hash": "sha256-XI87Uip1387ODL5WubcMtqaGjuTah/lSA9gd814GYwA=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-hjson.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-hjson.json
new file mode 100644
index 000000000000..7fd16a4f1aec
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-hjson.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/winston0410/tree-sitter-hjson",
+  "rev": "02fa3b79b3ff9a296066da6277adfc3f26cbc9e0",
+  "date": "2021-08-02T21:41:53+01:00",
+  "path": "/nix/store/cvbkxylvkpgxcmkv87fvknlfxg4q09bg-tree-sitter-hjson",
+  "sha256": "0zqf4bxqd2bpzdsw4kghq0jmn7l4sgdlrrlhc567b03p6kfdzi1n",
+  "hash": "sha256-NsTf3DR3gHVMYZDmTNvThB5bJcDwTcJ1+3eJhvsiDn8=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-html.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-html.json
new file mode 100644
index 000000000000..c00a9ac832ca
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-html.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/tree-sitter/tree-sitter-html",
+  "rev": "e5d7d7decbbdec5a4c90bbc69436b3828f5646e7",
+  "date": "2023-07-10T14:25:09-04:00",
+  "path": "/nix/store/fv14r2cf4i369jfjb74d7y3cbxyyg762-tree-sitter-html",
+  "sha256": "0ghgv712gq9bdaa4msz347cffgdbb5fc6a13q73dl9gwdjx0zl4c",
+  "hash": "sha256-jNAPumz8JdrGwSMow1xZqz3n2CHj60qUaivhJ8LZDz4=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-http.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-http.json
new file mode 100644
index 000000000000..ae2366b33fa4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-http.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/ntbbloodbath/tree-sitter-http",
+  "rev": "6824a247d1326079aab4fa9f9164e9319678081d",
+  "date": "2023-05-04T18:36:43-04:00",
+  "path": "/nix/store/7d2x9w6nqlhvgk70jahwlp6zg19iriij-tree-sitter-http",
+  "sha256": "0vhipdljx3s2pgzdk2a1zgqf8dd7p3bdbjckcb6z01hdg2p9v121",
+  "hash": "sha256-QYSdrngNBvDNYpPJ1da4pzXk8PtBidn+u0KPLmm7EW4=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-janet-simple.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-janet-simple.json
new file mode 100644
index 000000000000..c522ab892bf0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-janet-simple.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/sogaiu/tree-sitter-janet-simple",
+  "rev": "bd9cbaf1ea8b942dfd58e68df10c9a378ab3d2b6",
+  "date": "2023-04-29T13:15:11+09:00",
+  "path": "/nix/store/53gscixcapdpckbr4gfx26ax0jk84xcp-tree-sitter-janet-simple",
+  "sha256": "0hy1dm2jzghd7mi74n4b1ac5bhm809mcg3bcl9f300bh5m79qnyq",
+  "hash": "sha256-2FucTi1wATBcomyNx2oCqMJVmAqLWHJiPQ2+L0VtwUM=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-java.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-java.json
new file mode 100644
index 000000000000..b6aa4cf02f9b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-java.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/tree-sitter/tree-sitter-java",
+  "rev": "09d650def6cdf7f479f4b78f595e9ef5b58ce31e",
+  "date": "2022-09-19T09:37:51+02:00",
+  "path": "/nix/store/478mfssm2335hdflgba22n4f0dir7xmr-tree-sitter-java",
+  "sha256": "0440xh8x8rkbdlc1f1ail9wzl4583l29ic43x9lzl8290bm64q5l",
+  "hash": "sha256-tGBi6gJJIPpp6oOwmAQdqBD6eaJRBRcYbWtm1BHsgBA=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-javascript.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-javascript.json
new file mode 100644
index 000000000000..95e9ca95234b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-javascript.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/tree-sitter/tree-sitter-javascript",
+  "rev": "f1e5a09b8d02f8209a68249c93f0ad647b228e6e",
+  "date": "2023-08-25T01:24:52-04:00",
+  "path": "/nix/store/iiwzzd2b6ngim7lwpy2zdgzik7lm2w1y-tree-sitter-javascript",
+  "sha256": "0jslqjlmfx0xdgwhqam0lgw22r521iynp8l10pfan2bmqxmbdcjm",
+  "hash": "sha256-VbK2asd1CavcBYGia30MomQh+KOgKgz5ax10V6nEVEs=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-jsdoc.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-jsdoc.json
new file mode 100644
index 000000000000..1442cb58f4a8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-jsdoc.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/tree-sitter/tree-sitter-jsdoc",
+  "rev": "d01984de49927c979b46ea5c01b78c8ddd79baf9",
+  "date": "2023-08-20T17:54:07-04:00",
+  "path": "/nix/store/8fz1cj9fs1b3y85rd3mbpkhwsh07k6hq-tree-sitter-jsdoc",
+  "sha256": "11w3a6jfvf8fq1jg90bsnhj89gvx32kv1gy4gb5y32spx6h87f1v",
+  "hash": "sha256-O7iDoOlXi+HLesS/sKcYfb+EJLR6gfRkwA657aRRg4c=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-json.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-json.json
new file mode 100644
index 000000000000..2a32a4b3cd25
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-json.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/tree-sitter/tree-sitter-json",
+  "rev": "ca3f8919800e3c1ad4508de3bfd7b0b860ce434f",
+  "date": "2023-07-10T15:59:29-04:00",
+  "path": "/nix/store/3pkcya9skyx0k9k54sbp1sbqk9gpzwr4-tree-sitter-json",
+  "sha256": "038zdq2zf4phk082lrw466qd9fbkn1017n3nj53fbp1m8rmxwakk",
+  "hash": "sha256-cyrea0Y13OVGkXbYE0Cwc7nUsDGEZyoQmPAS9wVuHw0=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-json5.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-json5.json
new file mode 100644
index 000000000000..37d884b2d1b8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-json5.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/joakker/tree-sitter-json5",
+  "rev": "5dd5cdc418d9659682556b6adca2dd9ace0ac6d2",
+  "date": "2021-08-24T18:08:31-04:00",
+  "path": "/nix/store/0qhffwc84sp97d8im4lfrd06jsyvmzc4-tree-sitter-json5",
+  "sha256": "1la7bq5vi21gy0kf4zpwh0c0jfyv1bb62a3v7158hnxdyd5ijz07",
+  "hash": "sha256-B3wZS/OtW4hKOHsoYdYK2zsJGID8fuIm8C+IuAteR9E=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-jsonnet.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-jsonnet.json
new file mode 100644
index 000000000000..6a6114aeacb2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-jsonnet.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/sourcegraph/tree-sitter-jsonnet",
+  "rev": "d34615fa12cc1d1cfc1f1f1a80acc9db80ee4596",
+  "date": "2023-08-15T11:57:41-04:00",
+  "path": "/nix/store/4hf1f6klnr5wd4p1va1x5v8ndmcc7z7b-tree-sitter-jsonnet",
+  "sha256": "0vw4k1hxq6dhy3ahh40h06k67h073ryxl7513cn81lb6sfgf6c4f",
+  "hash": "sha256-jjDjntNm0YAsG6Ec2n0eB8BjpgEQEAjV8LAZ3GGYhG8=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-julia.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-julia.json
new file mode 100644
index 000000000000..345c66b33ca1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-julia.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/tree-sitter/tree-sitter-julia",
+  "rev": "0c088d1ad270f02c4e84189247ac7001e86fe342",
+  "date": "2023-09-04T11:11:28-05:00",
+  "path": "/nix/store/4zj06y16xi9ab4syip4cxcfw2wb2x5zm-tree-sitter-julia",
+  "sha256": "16l2flg1pzfcqd02k05y90ydmnki5vzp2m9rf2j2afr8slnawjaq",
+  "hash": "sha256-WEmuLNUoOyWkcDlVcf8ucdraPEi+gClAw8z9Gx51gpo=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-just.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-just.json
new file mode 100644
index 000000000000..46e3c31dc394
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-just.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/IndianBoy42/tree-sitter-just",
+  "rev": "f807ab33c36651ecb503a291aed933932754864d",
+  "date": "2024-01-11T04:53:14-05:00",
+  "path": "/nix/store/f6b4xvxkbzrwmxk8vr1gz4c3g3pqh2hz-tree-sitter-just",
+  "sha256": "1ng49slp5x98s9ydc7gha7gkcj93ks4iv0ixc7n0z9dr4akqrbw8",
+  "hash": "sha256-iK+MpyK5pQ/sYT2CHYmeI0k231HwHdZ80ij1cqlO5Nk=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-kotlin.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-kotlin.json
new file mode 100644
index 000000000000..2c73ae9d6ea0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-kotlin.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/fwcd/tree-sitter-kotlin",
+  "rev": "607af7be5606ad6580246cd9c68fc615e1ad97fd",
+  "date": "2021-10-12T01:11:47+02:00",
+  "path": "/nix/store/49cvpcypxjzpb0srcpd383ay9f0g19dy-tree-sitter-kotlin",
+  "sha256": "1sisvx7cp95d309ykhimn8bhbwd1lzcwrpz3s0mdsb2i44p69469",
+  "hash": "sha256-yZBkLiFRLN0q0OPfzNmnofEFF7I1wukTGK2ky07fOuo=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-latex.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-latex.json
new file mode 100644
index 000000000000..1ae0d28cde67
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-latex.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/latex-lsp/tree-sitter-latex",
+  "rev": "8c75e93cd08ccb7ce1ccab22c1fbd6360e3bcea6",
+  "date": "2022-10-26T10:55:26+02:00",
+  "path": "/nix/store/zhx1vnr3xdrb0ry6kfjsfrzs6c3nf8i9-tree-sitter-latex",
+  "sha256": "0lc42x604f04x3kkp88vyqa5dx90wqyisiwl7nn861lyxl6phjnf",
+  "hash": "sha256-zkp4De2eBoOsPZRHHT3mIPVWFPYboTvn6AQ4AkwXhFE=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-ledger.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-ledger.json
new file mode 100644
index 000000000000..02d5ca9f0cde
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-ledger.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/cbarrete/tree-sitter-ledger",
+  "rev": "8a841fb20ce683bfbb3469e6ba67f2851cfdf94a",
+  "date": "2023-05-07T23:13:39-04:00",
+  "path": "/nix/store/hdf6hzhb4h9p28hx26iqqz0cwf471aq8-tree-sitter-ledger",
+  "sha256": "12mfn42nhn0i8gf39aqbqfkccqc1mbn5z1vw5gh98pc9392jccq4",
+  "hash": "sha256-BDMmRRqJXZTgK3yHX+yqgWHGpsMLqzTcQxFYaAWxroo=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-llvm.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-llvm.json
new file mode 100644
index 000000000000..4fbad29a92d4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-llvm.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/benwilliamgraham/tree-sitter-llvm",
+  "rev": "1b96e58faf558ce057d4dc664b904528aee743cb",
+  "date": "2023-09-08T15:05:51-04:00",
+  "path": "/nix/store/hifa2i7b634kl47ldahvryj4n5fm3gwk-tree-sitter-llvm",
+  "sha256": "1sl3i37vzwbyn5ac12lrccmny0dg814my848cb25xdp8n47s5q7l",
+  "hash": "sha256-9OCiD7Hotl7EYoggX0lArwFvK2OZisBUsX7xv8+Ig+o=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-lua.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-lua.json
new file mode 100644
index 000000000000..379628e12e05
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-lua.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/MunifTanjim/tree-sitter-lua",
+  "rev": "9668709211b2e683f27f414454a8b51bf0a6bda1",
+  "date": "2023-09-07T13:41:24+06:00",
+  "path": "/nix/store/lahwsbw8a5lp7jg68wx7mfkhzz6sxzxl-tree-sitter-lua",
+  "sha256": "0iqqfncsli57ih5inllfzg5s8f9px7wdnddh6lkz4ycvmbq71pp6",
+  "hash": "sha256-5t5w8KqbefInNbA12/jpNzmky/uOUhsLjKdEqpl1GEc=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-make.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-make.json
new file mode 100644
index 000000000000..04d1eeeb505e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-make.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/alemuller/tree-sitter-make",
+  "rev": "a4b9187417d6be349ee5fd4b6e77b4172c6827dd",
+  "date": "2021-12-16T17:14:17+00:00",
+  "path": "/nix/store/v01s3lfi1w3bm433gf6zi0wb0r603906-tree-sitter-make",
+  "sha256": "07gz4x12xhigar2plr3jgazb2z4f9xp68nscmvy9a7wafak9l2m9",
+  "hash": "sha256-qQqapnKKH5X8rkxbZG5PjnyxvnpyZHpFVi/CLkIn/x0=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-markdown.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-markdown.json
new file mode 100644
index 000000000000..2be685060e15
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-markdown.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/MDeiml/tree-sitter-markdown",
+  "rev": "aaf76797aa8ecd9a5e78e0ec3681941de6c945ee",
+  "date": "2023-07-22T13:25:09+02:00",
+  "path": "/nix/store/5j100a9ksm598pvzzpdw91mmwxi11d03-tree-sitter-markdown",
+  "sha256": "1kksp7vx29f8qflg3sc1gi22xv24g7n9jz93v3fqvc4frx8iyyp0",
+  "hash": "sha256-4HofUc+OsI3d2CN9mex5ROwuRHyB6fGow8gl0fe5es4=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-nickel.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-nickel.json
new file mode 100644
index 000000000000..5db0b861a8fc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-nickel.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/nickel-lang/tree-sitter-nickel",
+  "rev": "b759233581fd8bae239e905c67a9ba453205da78",
+  "date": "2023-09-14T10:23:29+02:00",
+  "path": "/nix/store/s035753cs69k3pxcxn6pgmynfs9rlnxr-tree-sitter-nickel",
+  "sha256": "1y118sbpxqw045ys7y5g8iywa11b3jyldc8rzkc79c2jbavdvsp0",
+  "hash": "sha256-4OrdtlpSsHTY/BmxRr0cKwTFfUSv+KN9IYDjfpdGIfg=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-nix.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-nix.json
new file mode 100644
index 000000000000..9e3a8be40c22
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-nix.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/cstrahan/tree-sitter-nix",
+  "rev": "763168fa916a333a459434f1424b5d30645f015d",
+  "date": "2023-12-26T15:36:50+13:00",
+  "path": "/nix/store/wvnrjnrb3dgc5pg5n8nkwxm43478nk2k-tree-sitter-nix",
+  "sha256": "0nn3ij8k6wkbf3kcvkyyp0vhfjcksi31wyyfwmsbx66maf2xgaii",
+  "hash": "sha256-MarXhVPVmL505c57HkbUk0kHN7jez83mcGtyM5GMw1o=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-norg-meta.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-norg-meta.json
new file mode 100644
index 000000000000..93f8737bb7d9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-norg-meta.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/nvim-neorg/tree-sitter-norg-meta",
+  "rev": "a479d1ca05848d0b51dd25bc9f71a17e0108b240",
+  "date": "2023-05-28T19:01:42+02:00",
+  "path": "/nix/store/7yp5rzpmdvyhhl38brhz0vl3gd9qv03y-tree-sitter-norg-meta",
+  "sha256": "1vvl39m41wgsq7xkfi523zx6nza03dkzgk6izc39igmwx5hsdl7f",
+  "hash": "sha256-7tCmYem8vpgG+9HM92cbQH1r+h+iRDf7wfrxQGoadO8=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-norg.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-norg.json
new file mode 100644
index 000000000000..797b2b19ea94
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-norg.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/nvim-neorg/tree-sitter-norg",
+  "rev": "1a305093569632de50f9a316ff843dcda25b4ef5",
+  "date": "2023-02-12T20:47:35+01:00",
+  "path": "/nix/store/w7drx78c8w9claw3c6h7vlxdhyvfj8j6-tree-sitter-norg",
+  "sha256": "1wl6h5pin861msgmg5q3k0h62fl73svdwn0ppn4vp7a37s9p5xvm",
+  "hash": "sha256-dfdykz5DnbuJvRdY3rYehzphIJgDl1efrsEgG2+BhvI=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-nu.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-nu.json
new file mode 100644
index 000000000000..cc31e36aee6b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-nu.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/nushell/tree-sitter-nu",
+  "rev": "a0b80b2e21e5e39571252dc799e19eb89f1fc912",
+  "date": "2023-12-21T08:27:09-06:00",
+  "path": "/nix/store/nlczvz84gk9jjjiijczwyn1isy1rn1k7-tree-sitter-nu",
+  "sha256": "1y9bsdg9v7znlc1k4xxraaj8f8fn5m3zyc0r2m9fff2if9ijpll1",
+  "hash": "sha256-gdIrY3JROOdSFRkw/0ct1iGHpFK5dzIDo/afnV7TK/k=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-ocaml.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-ocaml.json
new file mode 100644
index 000000000000..24f45bacb80d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-ocaml.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/tree-sitter/tree-sitter-ocaml",
+  "rev": "694c57718fd85d514f8b81176038e7a4cfabcaaf",
+  "date": "2023-07-17T22:31:47+02:00",
+  "path": "/nix/store/2nq7apr98j81va00y74mfhcrqqdb7gwh-tree-sitter-ocaml",
+  "sha256": "03zqsdm6yy7g3ml0lganh4qg6vfc301255kg756y1icclgdfywcg",
+  "hash": "sha256-j3Hv2qOMxeBNOW+WIgIYzG3zMIFWPQpoHe94b2rT+A8=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-org-nvim.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-org-nvim.json
new file mode 100644
index 000000000000..817231cc8425
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-org-nvim.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/milisims/tree-sitter-org",
+  "rev": "64cfbc213f5a83da17632c95382a5a0a2f3357c1",
+  "date": "2023-06-19T18:05:11-04:00",
+  "path": "/nix/store/9hdl3i24q6af6wxmkg89ww4rwkl45la7-tree-sitter-org",
+  "sha256": "1l62p4a3b22pa7b5mzmy497pk5b8w01hx6zinfwpbnzg2rjdwkgz",
+  "hash": "sha256-/03eZBbv23W5s/GbDgPgaJV5TyK+/lrWUVeINRS5wtA=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-perl.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-perl.json
new file mode 100644
index 000000000000..be45f9a7aee7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-perl.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/ganezdragon/tree-sitter-perl",
+  "rev": "ba2a3411ab2270df7f6da8689d50a1fe29811d06",
+  "date": "2023-07-29T21:08:04+05:30",
+  "path": "/nix/store/rfnlnycbqxp4hwzgig60l9i0w89p2g5a-tree-sitter-perl",
+  "sha256": "1kkap2vqa95z5fh63qvy1jd87d5s6qb79bqm91p210i9yj5270zr",
+  "hash": "sha256-+YMjivQpgiBuSBWvdBY2urSDmgx+42GgK78khbe4as4=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-pgn.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-pgn.json
new file mode 100644
index 000000000000..ee5733041b82
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-pgn.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/rolandwalker/tree-sitter-pgn",
+  "rev": "e26ee30850f0cb81541480cf1e2c70385bdb013a",
+  "date": "2021-08-25T17:57:38-04:00",
+  "path": "/nix/store/fj882ab2hl3qrz45zvq366na6d2gqv8v-tree-sitter-pgn",
+  "sha256": "1c4602jmq3p7p7splzip76863l1z3rgbjlbksqv0diqjxp7c42gq",
+  "hash": "sha256-+AnCzu0SxwY21nNRuV4eP9BhkDk3fnr1uecOXKUAhrA=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-php.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-php.json
new file mode 100644
index 000000000000..c407d303c1db
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-php.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/tree-sitter/tree-sitter-php",
+  "rev": "a05c6112a1dfdd9e586cb275700931e68d3c7c85",
+  "date": "2023-09-16T22:44:24-04:00",
+  "path": "/nix/store/sswg2fpbb5l59g0kdhzxks2k2mqamv1w-tree-sitter-php",
+  "sha256": "1z54hgzkcqrjh6w7bp5hh8g27wli04x0pq8imwal8ml1gi7bvpzn",
+  "hash": "sha256-9t+9TnyBVkQVrxHhCzoBkfIjHoKw3HW4gTJjNv+DpPw=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-pioasm.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-pioasm.json
new file mode 100644
index 000000000000..52fedbf7a4cc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-pioasm.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/leo60228/tree-sitter-pioasm",
+  "rev": "924aadaf5dea2a6074d72027b064f939acf32e20",
+  "date": "2021-08-27T17:22:56-04:00",
+  "path": "/nix/store/nhxzw33vljxh5i90d0fb5nzdfjp5h9bl-tree-sitter-pioasm",
+  "sha256": "1lxvgc0zkd2sv8dxp2fy6b1k3gqrbkxgqy25lw9sbd4kij7463m2",
+  "hash": "sha256-og5DjoyTtKUTp0V4/PpcGb8xwzLeidsb2lq0+QF7u9M=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-prisma.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-prisma.json
new file mode 100644
index 000000000000..84f6abe3e4be
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-prisma.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/victorhqc/tree-sitter-prisma",
+  "rev": "eca2596a355b1a9952b4f80f8f9caed300a272b5",
+  "date": "2023-01-05T15:24:25+01:00",
+  "path": "/nix/store/hj6bbz4zdfwi7ps72zbbv0hg132g13gr-tree-sitter-prisma",
+  "sha256": "19zb3dkwp2kpyivygqxk8yph0jpl7hn9zzcry15mshn2n0rs9sih",
+  "hash": "sha256-MOqkM7DCQl1L8Jn9nyw89EoAr0ez4+d39HeKy2cb66c=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-proto.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-proto.json
new file mode 100644
index 000000000000..0bea1a55e3e0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-proto.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/mitchellh/tree-sitter-proto",
+  "rev": "42d82fa18f8afe59b5fc0b16c207ee4f84cb185f",
+  "date": "2021-06-12T09:29:04-07:00",
+  "path": "/nix/store/dsfx2jxc6nll0324pl3w6qcdv5acvyj5-tree-sitter-proto",
+  "sha256": "001y2z2683fagryqj5f0gs3rcgx2nbw3x3r9afydhss80ihb8zvi",
+  "hash": "sha256-cX+0YARIa9i8UymPPviyoj+Wh37AFYl9fsoNZMQXPgA=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-pug.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-pug.json
new file mode 100644
index 000000000000..ca5e0cfebaa0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-pug.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/zealot128/tree-sitter-pug",
+  "rev": "a7ff31a38908df9b9f34828d21d6ca5e12413e18",
+  "date": "2023-07-27T08:31:48+02:00",
+  "path": "/nix/store/g068db1k301bva5rxcmkrm7gm616m4pw-tree-sitter-pug",
+  "sha256": "0iz5gsw7m887i7kps2kqaz2mf55gj3xcb4x705p95f7ia9ipcg2q",
+  "hash": "sha256-WDx2Y1LxuJJuAaeTxfqQrxRXxVd4Cn3niQeherh+5Uc=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-python.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-python.json
new file mode 100644
index 000000000000..ce43cb5dda88
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-python.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/tree-sitter/tree-sitter-python",
+  "rev": "a901729099257aac932d79c60adb5e8a53fa7e6c",
+  "date": "2023-09-21T03:55:53-04:00",
+  "path": "/nix/store/arzga89mcw3yns4cxdy7rwyr6qrfyymp-tree-sitter-python",
+  "sha256": "1kkpaf8gmkb9nkggdlhqjm8ddi20p8dckrrh80c6r4j3rpf46641",
+  "hash": "sha256-gRhD3M1DkmwYQDDnyRq6QMTWUJUY0vbetGnN+pBTd84=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-ql-dbscheme.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-ql-dbscheme.json
new file mode 100644
index 000000000000..86a69e6f6731
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-ql-dbscheme.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/tree-sitter/tree-sitter-ql-dbscheme",
+  "rev": "6b66b9e6e3d36a49ce4def7abee2a286ac9ca289",
+  "date": "2022-08-29T08:49:16+02:00",
+  "path": "/nix/store/k58fls33kiwgbf8vn4488x5l79c9a18x-tree-sitter-ql-dbscheme",
+  "sha256": "1kpkjg97s5j1dx79r3fk0i2bxhpm9sdawgb1drqnjgz4qsshp7f2",
+  "hash": "sha256-wp0LtcbkP2lxbmE9rppO9cK+RATTjZxOb0EWfdKT884=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-ql.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-ql.json
new file mode 100644
index 000000000000..a03f115be957
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-ql.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/tree-sitter/tree-sitter-ql",
+  "rev": "bd087020f0d8c183080ca615d38de0ec827aeeaf",
+  "date": "2022-08-17T11:53:16+02:00",
+  "path": "/nix/store/id24yb922kcjnqx160b5hga65k9zmnkh-tree-sitter-ql",
+  "sha256": "18yv6sag794k0l7i0wxaffxhay6zgwnap5bbhi48h04q1cvas0yr",
+  "hash": "sha256-2QOtNguYAIhIhGuVqyx/33gFu3OqcxAPBZOk85Q226M=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-query.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-query.json
new file mode 100644
index 000000000000..1dbdb3291d2f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-query.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/nvim-treesitter/tree-sitter-query",
+  "rev": "e97504446f14f529d5a8e649667d3d60391e4dfd",
+  "date": "2023-03-09T05:33:03-08:00",
+  "path": "/nix/store/3p8d4hl2bnm1fzn0nx7zc62l73118vm2-tree-sitter-query",
+  "sha256": "0xd00idgmyr55yd10xaxma1pwahlvn7gqy78zf8zknfbqvd3rzqs",
+  "hash": "sha256-Gv882sbL2fmR++h4/I7dFCp+g6pddRCaLyX7+loEoHU=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-r.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-r.json
new file mode 100644
index 000000000000..7ec43650bb3b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-r.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/r-lib/tree-sitter-r",
+  "rev": "c55f8b4dfaa32c80ddef6c0ac0e79b05cb0cbf57",
+  "date": "2023-07-26T18:01:44-07:00",
+  "path": "/nix/store/ydqli8jal8g3nbr78nl8rimb0m5r7b50-tree-sitter-r",
+  "sha256": "0si338c05z3bapxkb7zwk30rza5w0saw0jyk0pljxi32869w8s9m",
+  "hash": "sha256-NWnEk0FixC7pBdNLwJUGvKifwZj8nzX7VWv8AhgaI2o=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-razor.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-razor.json
new file mode 100644
index 000000000000..6905f4145aaf
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-razor.json
@@ -0,0 +1,10 @@
+{
+  "url": "https://github.com/tree-sitter/tree-sitter-razor",
+  "rev": "60edbd8e798e416f5226a746396efa6a8614fa9b",
+  "date": "2016-07-08T15:17:50-07:00",
+  "path": "/nix/store/2vkxw48wc0xf07awi65r4rg2m1lpqq6c-tree-sitter-razor",
+  "sha256": "1ldsn9nxldxkxdy7irywx88d6a56q05f6907lypzass07piyqp2i",
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-regex.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-regex.json
new file mode 100644
index 000000000000..fec31ced29cc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-regex.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/tree-sitter/tree-sitter-regex",
+  "rev": "2354482d7e2e8f8ff33c1ef6c8aa5690410fbc96",
+  "date": "2023-07-19T17:58:43-04:00",
+  "path": "/nix/store/bvsgqya54sh9qxcida01iwcsl5schqhh-tree-sitter-regex",
+  "sha256": "1b5sbjzdhkvpqaq2jsb347mrspjzmif9sqmvs82mp2g08bmr122z",
+  "hash": "sha256-X4iQ60LgiVsF0rtinVysX16d6yFjaSmwwndP2L5cuqw=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-rego.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-rego.json
new file mode 100644
index 000000000000..16f2d8b4b3de
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-rego.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/FallenAngel97/tree-sitter-rego",
+  "rev": "b2667c975f07b33be3ceb83bea5cfbad88095866",
+  "date": "2022-11-18T14:07:12+02:00",
+  "path": "/nix/store/ky8xv5v5i273n0zqin0mnsx810382wfn-tree-sitter-rego",
+  "sha256": "18qw5ahx6qcfq9gs6gcakl178gnnryksv6gyamyd6vypz20kwz6b",
+  "hash": "sha256-y3w+gfjXb9N8Vf6ZrafP1j50Ap2KPaNfwo5h06EqHKM=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-rst.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-rst.json
new file mode 100644
index 000000000000..f8401f3ed865
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-rst.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/stsewd/tree-sitter-rst",
+  "rev": "25e6328872ac3a764ba8b926aea12719741103f1",
+  "date": "2022-08-26T17:09:42-05:00",
+  "path": "/nix/store/y831a05hzw8dsajijwkahgwwcf4ima8l-tree-sitter-rst",
+  "sha256": "0f53jmpjh2kcl9srwwwb7a5k24729ig96m87qjj99myqfnzahw43",
+  "hash": "sha256-g3CovnXY15SkxAdVk15M4hAxizqLc551omwKKG+Vozg=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-ruby.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-ruby.json
new file mode 100644
index 000000000000..2cb04c8940d1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-ruby.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/tree-sitter/tree-sitter-ruby",
+  "rev": "fe6a2d634da0e16b11b5aa255cc3df568a4572fd",
+  "date": "2021-03-03T16:54:30-08:00",
+  "path": "/nix/store/ragrvqj7hm98r74v5b3fljvc47gd3nhj-tree-sitter-ruby",
+  "sha256": "0m3h4928rbs300wcb6776h9r88hi32rybbhcaf6rdympl5nzi83v",
+  "hash": "sha256-e6D4baG3+paNUwyu5bMYESKUEzTnmMU4AEOvjEQicFQ=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-rust.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-rust.json
new file mode 100644
index 000000000000..c95bab92d309
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-rust.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/tree-sitter/tree-sitter-rust",
+  "rev": "48e053397b587de97790b055a1097b7c8a4ef846",
+  "date": "2023-09-21T23:15:14+00:00",
+  "path": "/nix/store/m01z8llh3nckvr7iiyap5mr91iisx6r1-tree-sitter-rust",
+  "sha256": "0jc8sisfj50jra89y3p6pv0b2smn125m4nvkaidz1cnympajbpc6",
+  "hash": "sha256-ht0l1a3esvBbVHNbUosItmqxwL7mDp+QyhIU6XTUiEk=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-scala.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-scala.json
new file mode 100644
index 000000000000..699ff6af9716
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-scala.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/tree-sitter/tree-sitter-scala",
+  "rev": "d50b6ca5cc3d925e3d1f497199cb8d8383ddae8a",
+  "date": "2023-08-20T03:15:51-04:00",
+  "path": "/nix/store/nb0987awf0a098gl9b43whbjlgxc428h-tree-sitter-scala",
+  "sha256": "0hs6gmkq5cx9qrmgfz1mh0c34flwffc0k2mhwf13laawswnywfkz",
+  "hash": "sha256-fzruLddcKTqC47CKCZhznDoyGIA1fPdqxqmzgmd9RkM=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-scheme.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-scheme.json
new file mode 100644
index 000000000000..be1d9fa8e1a6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-scheme.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/6cdh/tree-sitter-scheme",
+  "rev": "85b6188fb77c03dfb01d13e58e2844450506860c",
+  "date": "2023-09-01T09:52:02+08:00",
+  "path": "/nix/store/0ckxw6q3nh5vb2lmibzy2kw2p4kcrqf4-tree-sitter-scheme",
+  "sha256": "0rrygynsispdpkc5npvfcxri4x9n5w7j3ffbh27j5j8yw2jr1s5z",
+  "hash": "sha256-v+iQpeAeySKPgMu5IQ8vNnUSc2duX1vYvO3qqK1/Pmc=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-scss.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-scss.json
new file mode 100644
index 000000000000..0c3c6df0b6b2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-scss.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/serenadeai/tree-sitter-scss",
+  "rev": "c478c6868648eff49eb04a4df90d703dc45b312a",
+  "date": "2022-02-03T21:48:21+00:00",
+  "path": "/nix/store/s49l3jbhjni3l1d0m3xrpzml39aq9yr3-tree-sitter-scss",
+  "sha256": "15r3jiv36hzx2pmjmp63am3pbc01s52z36xfraa1aw4wlx7lqnq4",
+  "hash": "sha256-BFtMT6eccBWUyq6b8UXRAbB1R1XD3CrrFf1DM3aUI5c=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-smithy.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-smithy.json
new file mode 100644
index 000000000000..609520882b07
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-smithy.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/indoorvivants/tree-sitter-smithy",
+  "rev": "cf8c7eb9faf7c7049839585eac19c94af231e6a0",
+  "date": "2023-01-31T21:16:56+00:00",
+  "path": "/nix/store/y5j99bx1b6h25k1lnzs6s4gkg0mhll06-tree-sitter-smithy",
+  "sha256": "0k7gfpa3pcj1ji34k0kwk1xbadkgjadfg36xfwns1fmlwzmr7jnx",
+  "hash": "sha256-3cqT6+e0uqAtd92M55qSbza1eph8gklGlEGyO9R170w=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-solidity.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-solidity.json
new file mode 100644
index 000000000000..7034af3f1c19
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-solidity.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/JoranHonig/tree-sitter-solidity",
+  "rev": "168020304759ad5d8b4a88a541a699134e3730c5",
+  "date": "2022-12-14T12:24:29+01:00",
+  "path": "/nix/store/37x7jqscpg36xncjy7i4zbvmx42dc1wh-tree-sitter-solidity",
+  "sha256": "1bg7q7l5jv5xrr7pfzg6i3bfgs6mrzzflh3rf4lqcd373xf8290q",
+  "hash": "sha256-GCSBXB9nNIYpcXlA6v7P1ejn1ojmfXdPzr1sWejB560=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-sparql.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-sparql.json
new file mode 100644
index 000000000000..42199274dd42
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-sparql.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/bonabeavis/tree-sitter-sparql",
+  "rev": "05f949d3c1c15e3261473a244d3ce87777374dec",
+  "date": "2021-08-16T15:50:03+02:00",
+  "path": "/nix/store/vvgvb1jcv0qrn3xj0jbf83qwi1lh2m68-tree-sitter-sparql",
+  "sha256": "012c1pi4vc6hkvllymvl2yah3ix8k4pi7997iydy949fc33aa5i8",
+  "hash": "sha256-KBalxmAukeSbjyelEy+ZqMcBlRd0V0/pntCwTeINTAQ=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-sql.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-sql.json
new file mode 100644
index 000000000000..41073e08e8c0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-sql.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/derekstride/tree-sitter-sql",
+  "rev": "39750c48bf9ad63bcc1399554355b0aa0aaa1c33",
+  "date": "2023-09-07T13:39:32+00:00",
+  "path": "/nix/store/x1swbby8g0l0r7szdlgiqsqj3sdjambc-tree-sitter-sql",
+  "sha256": "1dnvmazyinchqj8gsv836m1kclycri0ypi4bf712nx3avw4ajwfz",
+  "hash": "sha256-33GpCN9qdCvCcYvE60HMzFM2QzUDbf2QxJDZ6L+q27Y=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-supercollider.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-supercollider.json
new file mode 100644
index 000000000000..ec2da6b0fd02
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-supercollider.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/madskjeldgaard/tree-sitter-supercollider",
+  "rev": "3b35bd0fded4423c8fb30e9585c7bacbcd0e8095",
+  "date": "2023-05-30T21:04:53+02:00",
+  "path": "/nix/store/fzb78sqxbxcyldz5m7yx6zirxsvxn5cc-tree-sitter-supercollider",
+  "sha256": "0ib8mja321zwbw59i45xa66p39gikn8n1pihhv26hm5xgdkwwr4r",
+  "hash": "sha256-mWTOZ3u9VGjEhjDeYJGd8aVxjVG9kJgKX/wHMZSsaEU=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-surface.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-surface.json
new file mode 100644
index 000000000000..047ede66e432
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-surface.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/connorlay/tree-sitter-surface",
+  "rev": "21b7676859c1187645a27ff301f76738af5dfd44",
+  "date": "2021-08-15T10:33:50-07:00",
+  "path": "/nix/store/7i1klj80jbcvwgad7nrbcs7hvn68f125-tree-sitter-surface",
+  "sha256": "122v1d2zb0w2k5h7xqgm1c42rwfrp59dzyb2lly7kxmylyazmshy",
+  "hash": "sha256-Hur6lae+9nk8pWL531K52fEsCAv14X5gmYKD9UULW4g=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-svelte.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-svelte.json
new file mode 100644
index 000000000000..7ffb07e2e731
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-svelte.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/Himujjal/tree-sitter-svelte",
+  "rev": "be7f2e7db1fc19f0852265ec60923fc058380739",
+  "date": "2023-04-03T22:59:58+05:30",
+  "path": "/nix/store/lqqls8g9zhiv2v32if429cwycn092zq6-tree-sitter-svelte",
+  "sha256": "1kp91sarydq41zznwxwxdv2i2pflgzhmpfv0iqgq47fma9bcv2wy",
+  "hash": "sha256-novNVlLVHYIfjmC7W+F/1F0RxW6dd27/DwQ3n5UO6c4=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-templ.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-templ.json
new file mode 100644
index 000000000000..240368e1e55d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-templ.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/vrischmann/tree-sitter-templ",
+  "rev": "14d105789af342f7f0c32bff2fec1a6edec59f60",
+  "date": "2023-12-29T22:31:39+01:00",
+  "path": "/nix/store/8yixhjmhynryb79g3wff5kxgz35ncg3n-tree-sitter-templ",
+  "sha256": "1hr0l9ibm12ggiyk5m3h12fjgrdkfv7d2qlcfy6l6c10k4ghngf2",
+  "hash": "sha256-wj0LH5kgMEONd4xi0c52s+UnnQhw1DJ9fE+EumKiIMM=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-tiger.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-tiger.json
new file mode 100644
index 000000000000..70a6bdf840dc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-tiger.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/ambroisie/tree-sitter-tiger",
+  "rev": "a7f11d946b44244f71df41d2a78af0665d618dae",
+  "date": "2023-08-29T21:54:01+01:00",
+  "path": "/nix/store/ynxdy89llzc9kqqw0h2fmv81dna7wrxq-tree-sitter-tiger",
+  "sha256": "100cpj00w021hk0cgn5qbgqa6yn8ji58hl77qf3054h2jxzxnsnc",
+  "hash": "sha256-zGrbf5cCkgKGw+dQiEqUyHqj8Fu42MfAhEEADoC8DIA=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-tlaplus.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-tlaplus.json
new file mode 100644
index 000000000000..69890d3d33fd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-tlaplus.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/tlaplus-community/tree-sitter-tlaplus",
+  "rev": "7ba226cf85280c7917d082940022006e6a3b7b6f",
+  "date": "2023-03-28T17:13:15-04:00",
+  "path": "/nix/store/biqm93z4n1ravfi5bs466fbp4bxadjmk-tree-sitter-tlaplus",
+  "sha256": "0md800h54792nv1mfzdw7wyjzz8wx5cvl6mzlb8l70p0ihjfrk1s",
+  "hash": "sha256-OszsJIzggkPRor8aulnpHP0vPT+8fVfDtiIdUiAAqFU=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-toml.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-toml.json
new file mode 100644
index 000000000000..5a329320368a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-toml.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/tree-sitter/tree-sitter-toml",
+  "rev": "342d9be207c2dba869b9967124c679b5e6fd0ebe",
+  "date": "2022-04-21T16:26:30-07:00",
+  "path": "/nix/store/is4vnj1s94455s9msasbn7px7jjfr0ai-tree-sitter-toml",
+  "sha256": "00pigsc947qc2p6g21iki6xy4h497arq53fp2fjgiw50bqmknrsp",
+  "hash": "sha256-V2c7K16g8PikE9eNgrM6iUDiu4kzBvHMFQwfkph+8QI=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-tsq.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-tsq.json
new file mode 100644
index 000000000000..7aa30ca2812d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-tsq.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/tree-sitter/tree-sitter-tsq",
+  "rev": "b665659d3238e6036e22ed0e24935e60efb39415",
+  "date": "2021-05-18T15:57:40-04:00",
+  "path": "/nix/store/j59y4s3bsv6d5nbmhhdgb043hmk8157k-tree-sitter-tsq",
+  "sha256": "03bch2wp2jwxk69zjplvm0gbyw06qqdy7il9qkiafvhrbh03ayd9",
+  "hash": "sha256-qXk1AFwZbqfixInG4xvGBnC/HqibXvmTmZ1LcbmAbA0=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-turtle.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-turtle.json
new file mode 100644
index 000000000000..6797d3fc6362
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-turtle.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/bonabeavis/tree-sitter-turtle",
+  "rev": "085437f5cb117703b7f520dd92161140a684f092",
+  "date": "2021-08-16T15:17:50+02:00",
+  "path": "/nix/store/c90hph3wfyhjmri3qbfb5lpy1bl855zv-tree-sitter-turtle",
+  "sha256": "1l5djvz90sq9w14kfcrffdigqs61r1p8v17xpj92sxz8z3ngpgmr",
+  "hash": "sha256-ub777Pjody2SvP2EjW7IwWj8YnMuMzdJ4AlrkP6WrdA=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-typescript.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-typescript.json
new file mode 100644
index 000000000000..f27faebc4d49
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-typescript.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/tree-sitter/tree-sitter-typescript",
+  "rev": "b1bf4825d9eaa0f3bdeb1e52f099533328acfbdf",
+  "date": "2023-07-19T03:17:33-04:00",
+  "path": "/nix/store/c858575avx33nmi4annm51fhasv43xm9-tree-sitter-typescript",
+  "sha256": "1r74108lxyp8hsq0pysy0na4kgn06b4xk4yrlq77fw8jr6vs54m1",
+  "hash": "sha256-oZKit8kScXcOptmT2ckywL5JlAVe+wuwhuj6ThEI5OQ=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-typst.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-typst.json
new file mode 100644
index 000000000000..0f35892e4d8e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-typst.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/uben0/tree-sitter-typst",
+  "rev": "791cac478226e3e78809b67ff856010bde709594",
+  "date": "2023-10-01T17:18:34+02:00",
+  "path": "/nix/store/fsdpsqf4g0maba3lqnq7237hvp443wn0-tree-sitter-typst-791cac4",
+  "sha256": "1mwj2qf1k1pfd892lkpw6jsd014209aiz6kdsyh5mhxgnb4893v0",
+  "hash": "sha256-YI+EyLKvw1qg122aH1UCggTQtDT8TioSau6GGRwWktc=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-uiua.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-uiua.json
new file mode 100644
index 000000000000..89e087c661c1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-uiua.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/shnarazk/tree-sitter-uiua",
+  "rev": "aa1e0202dbf2ba654d79f880b86f6c1073d81b20",
+  "date": "2023-11-20T13:01:37+09:00",
+  "path": "/nix/store/lawqd38bskf5gxsls3w9jjgdaj08q1ym-tree-sitter-uiua",
+  "sha256": "0sn1vrpdkkaw2j6sp403bhijz3561n0qjh2wcpgp6qbqaxj4gxap",
+  "hash": "sha256-V/VHZFd4YXPfZVxAiYENpowvI1wDkKuNFFzN2W7ewWo=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-verilog.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-verilog.json
new file mode 100644
index 000000000000..d802999df25c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-verilog.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/tree-sitter/tree-sitter-verilog",
+  "rev": "902031343056bc0b11f3e47b33f036a9cf59f58d",
+  "date": "2023-07-28T00:21:49-04:00",
+  "path": "/nix/store/nnd12xzsd387bng3yp4zlgvsaya24r7x-tree-sitter-verilog",
+  "sha256": "1mrgdi0aj2bm4f2jdz93r1c3m1hiymjfhd2pc14xlz6waxpd48zg",
+  "hash": "sha256-7yPSblfcfNpJYFc06GT1EYY6WMgj/SaFI3UJqUBsL9c=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-vim.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-vim.json
new file mode 100644
index 000000000000..eec5937247b6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-vim.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/vigoux/tree-sitter-viml",
+  "rev": "7c317fbade4b40baa7babcd6c9097c157d148e60",
+  "date": "2023-05-05T08:51:55+02:00",
+  "path": "/nix/store/dazqp112dyrxh96yizdm382fsz1rmsdj-tree-sitter-viml",
+  "sha256": "1fsngbgpvq4mg0qfwkpdn4qqi3djg2kv4a8g49yw2i8a3d88yg7x",
+  "hash": "sha256-/TyPUBsKRcF9Ig8psqd4so2IMbHtTu4weJXgfd96Vrs=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-vue.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-vue.json
new file mode 100644
index 000000000000..6d7140853580
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-vue.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/ikatyang/tree-sitter-vue",
+  "rev": "91fe2754796cd8fba5f229505a23fa08f3546c06",
+  "date": "2021-04-04T11:51:48+08:00",
+  "path": "/nix/store/9bw35fa56xli7r2k3b3bzzlm7vkpxzcy-tree-sitter-vue",
+  "sha256": "0l0kqy9ajm5izqcywd39aavgmc281s8qrhmjkbwl6r8arfj8vsrm",
+  "hash": "sha256-NeuNpMsKZUP5mrLCjJEOSLD6tlJpNO4Z/rFUqZLHE1A=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-wgsl.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-wgsl.json
new file mode 100644
index 000000000000..51c6f00b20a3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-wgsl.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/szebniok/tree-sitter-wgsl",
+  "rev": "40259f3c77ea856841a4e0c4c807705f3e4a2b65",
+  "date": "2023-01-09T17:32:53+01:00",
+  "path": "/nix/store/v97b952wz1x5np7cp5as603qzj2686yf-tree-sitter-wgsl",
+  "sha256": "0w15rhwafbjjmgbxj9fln9pca2w1wr7h5xwni9rniszlkxqf90my",
+  "hash": "sha256-voLkcJ/062hzipb3Ak/mgQvFbrLUJdnXq1IupzjMJXA=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-wing.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-wing.json
new file mode 100644
index 000000000000..15b26649a73b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-wing.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/winglang/wing",
+  "rev": "60c61fd6b6e2e6dbea7c206653d3e360435bfee2",
+  "date": "2023-09-25T21:05:07+00:00",
+  "path": "/nix/store/rb1g46ia45yjh9bsf6d99nzgs0yf8vl9-wing",
+  "sha256": "0hig7ll1rph3i4fqwpcxadyjxa9d0ipscmhs33jdir2brhw93vmp",
+  "hash": "sha256-t+6ROMxL5NjkGBpWpm8ELakufVOdXY4diQPeHCg9L0I=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-yaml.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-yaml.json
new file mode 100644
index 000000000000..e7e4b42987d5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-yaml.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/ikatyang/tree-sitter-yaml",
+  "rev": "0e36bed171768908f331ff7dff9d956bae016efb",
+  "date": "2021-05-11T12:47:24+08:00",
+  "path": "/nix/store/7d7m4zs4ydnwbn3xnfm3pvpy7gvkrmg8-tree-sitter-yaml",
+  "sha256": "0wyvjh62zdp5bhd2y8k7k7x4wz952l55i1c8d94rhffsbbf9763f",
+  "hash": "sha256-bpiT3FraOZhJaoiFWAoVJX1O+plnIi8aXOW2LwyU23M=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-yang.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-yang.json
new file mode 100644
index 000000000000..441acd3efcb7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-yang.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/hubro/tree-sitter-yang",
+  "rev": "2c0e6be8dd4dcb961c345fa35c309ad4f5bd3502",
+  "date": "2022-11-21T21:25:21+01:00",
+  "path": "/nix/store/ypd2cggg44l0sx0snvkgjbspkfcyscmf-tree-sitter-yang",
+  "sha256": "1vwcsp20dhccr2ag5s09j3jz9cnlkndb2hdn0h3va7md8ka0lhp8",
+  "hash": "sha256-6EIK1EStHrUHBLZBsZqd1LL05ZAJ6PKUyIzBBsTVjO8=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-zig.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-zig.json
new file mode 100644
index 000000000000..874cb0a1368a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-zig.json
@@ -0,0 +1,12 @@
+{
+  "url": "https://github.com/maxxnino/tree-sitter-zig",
+  "rev": "0d08703e4c3f426ec61695d7617415fff97029bd",
+  "date": "2023-04-25T05:51:06-03:00",
+  "path": "/nix/store/fzz8x1pa11zksamgk199fw0j7dkbsz0s-tree-sitter-zig",
+  "sha256": "0whj44fl6hmcyap5bjqhy90rd6xnnxgsy3vn1z3mvq8d2mwbnxbb",
+  "hash": "sha256-a3W7eBUN4V3HD3YPr1+3tpuWQfIQy1Wu8qxCQx0hEnI=",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/mypy.ini b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/mypy.ini
new file mode 100644
index 000000000000..3a34ffac26ed
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/mypy.ini
@@ -0,0 +1,11 @@
+[mypy]
+disallow_untyped_defs = true
+disallow_subclassing_any = true
+
+no_implicit_optional = true
+
+warn_redundant_casts = true
+warn_unused_ignores = true
+warn_no_return = true
+warn_return_any = true
+warn_unreachable = true
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/update.nix b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/update.nix
new file mode 100644
index 000000000000..aad4a6c9a029
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/update.nix
@@ -0,0 +1,510 @@
+{ writeShellScript
+, writeText
+, writers
+, nix-prefetch-git
+, formats
+, lib
+, coreutils
+, curl
+, xe
+}:
+
+# Grammar list:
+# https://github.com/tree-sitter/tree-sitter/blob/master/docs/index.md
+
+let
+  # Grammars we want to fetch from the tree-sitter github orga
+  knownTreeSitterOrgGrammarRepos = [
+    "tree-sitter-javascript"
+    "tree-sitter-c"
+    "tree-sitter-json"
+    "tree-sitter-cpp"
+    "tree-sitter-ruby"
+    "tree-sitter-go"
+    "tree-sitter-c-sharp"
+    "tree-sitter-python"
+    "tree-sitter-typescript"
+    "tree-sitter-rust"
+    "tree-sitter-bash"
+    "tree-sitter-php"
+    "tree-sitter-java"
+    "tree-sitter-scala"
+    "tree-sitter-ocaml"
+    "tree-sitter-julia"
+    "tree-sitter-html"
+    "tree-sitter-haskell"
+    "tree-sitter-regex"
+    "tree-sitter-css"
+    "tree-sitter-verilog"
+    "tree-sitter-jsdoc"
+    "tree-sitter-ql"
+    "tree-sitter-ql-dbscheme"
+    "tree-sitter-embedded-template"
+    "tree-sitter-tsq"
+    "tree-sitter-toml"
+  ];
+  knownTreeSitterOrgGrammarReposJson = jsonFile "known-tree-sitter-org-grammar-repos" knownTreeSitterOrgGrammarRepos;
+
+  # repos of the tree-sitter github orga we want to ignore (not grammars)
+  ignoredTreeSitterOrgRepos = [
+    "tree-sitter"
+    "tree-sitter-cli"
+    # this is the haskell language bindings, tree-sitter-haskell is the grammar
+    "haskell-tree-sitter"
+    # this is the ruby language bindings, tree-sitter-ruby is the grammar
+    "ruby-tree-sitter.old"
+    # this is the (unmaintained) rust language bindings, tree-sitter-rust is the grammar
+    "rust-tree-sitter"
+    # this is the nodejs language bindings, tree-sitter-javascript is the grammar
+    "node-tree-sitter"
+    # this is the python language bindings, tree-sitter-python is the grammar
+    "py-tree-sitter"
+    # afl fuzzing for tree sitter
+    "afl-tree-sitter"
+    # archived
+    "highlight-schema"
+    # website
+    "tree-sitter.github.io"
+    # not maintained
+    "tree-sitter-razor"
+    # rust library for constructing arbitrary graph structures from source code
+    "tree-sitter-graph"
+    # abandoned
+    "tree-sitter-swift"
+    # abandoned
+    "tree-sitter-agda"
+    # abandoned
+    "tree-sitter-fluent"
+    # to unblock my update
+    "csharp-tree-sitter"
+  ];
+  ignoredTreeSitterOrgReposJson = jsonFile "ignored-tree-sitter-org-repos" ignoredTreeSitterOrgRepos;
+
+  # Additional grammars that are not in the official github orga.
+  # If you need a grammar that already exists in the official orga,
+  # make sure to give it a different name.
+  otherGrammars = {
+    "tree-sitter-bitbake" = {
+      orga = "amaanq";
+      repo = "tree-sitter-bitbake";
+    };
+    "tree-sitter-beancount" = {
+      orga = "polarmutex";
+      repo = "tree-sitter-beancount";
+    };
+    "tree-sitter-clojure" = {
+      orga = "sogaiu";
+      repo = "tree-sitter-clojure";
+    };
+    "tree-sitter-comment" = {
+      orga = "stsewd";
+      repo = "tree-sitter-comment";
+    };
+    "tree-sitter-dart" = {
+      orga = "usernobody14";
+      repo = "tree-sitter-dart";
+    };
+    "tree-sitter-elisp" = {
+      orga = "wilfred";
+      repo = "tree-sitter-elisp";
+    };
+    "tree-sitter-just" = {
+      orga = "IndianBoy42";
+      repo = "tree-sitter-just";
+    };
+    "tree-sitter-nix" = {
+      orga = "cstrahan";
+      repo = "tree-sitter-nix";
+    };
+    "tree-sitter-latex" = {
+      orga = "latex-lsp";
+      repo = "tree-sitter-latex";
+    };
+    "tree-sitter-lua" = {
+      orga = "MunifTanjim";
+      repo = "tree-sitter-lua";
+    };
+    "tree-sitter-fennel" = {
+      orga = "travonted";
+      repo = "tree-sitter-fennel";
+    };
+    "tree-sitter-make" = {
+      orga = "alemuller";
+      repo = "tree-sitter-make";
+    };
+    "tree-sitter-markdown" = {
+      orga = "MDeiml";
+      repo = "tree-sitter-markdown";
+    };
+    "tree-sitter-proto" = {
+      orga = "mitchellh";
+      repo = "tree-sitter-proto";
+    };
+    "tree-sitter-rego" = {
+      orga = "FallenAngel97";
+      repo = "tree-sitter-rego";
+    };
+    "tree-sitter-rst" = {
+      orga = "stsewd";
+      repo = "tree-sitter-rst";
+    };
+    "tree-sitter-svelte" = {
+      orga = "Himujjal";
+      repo = "tree-sitter-svelte";
+    };
+    "tree-sitter-sql" = {
+      orga = "derekstride";
+      repo = "tree-sitter-sql";
+      branch = "gh-pages";
+    };
+    "tree-sitter-typst" = {
+      orga = "uben0";
+      repo = "tree-sitter-typst";
+    };
+    "tree-sitter-vim" = {
+      orga = "vigoux";
+      repo = "tree-sitter-viml";
+    };
+    "tree-sitter-yaml" = {
+      orga = "ikatyang";
+      repo = "tree-sitter-yaml";
+    };
+    "tree-sitter-zig" = {
+      orga = "maxxnino";
+      repo = "tree-sitter-zig";
+    };
+    "tree-sitter-fish" = {
+      orga = "ram02z";
+      repo = "tree-sitter-fish";
+    };
+    "tree-sitter-dot" = {
+      orga = "rydesun";
+      repo = "tree-sitter-dot";
+    };
+    "tree-sitter-norg" = {
+      orga = "nvim-neorg";
+      repo = "tree-sitter-norg";
+    };
+    "tree-sitter-norg-meta" = {
+      orga = "nvim-neorg";
+      repo = "tree-sitter-norg-meta";
+    };
+    "tree-sitter-commonlisp" = {
+      orga = "thehamsta";
+      repo = "tree-sitter-commonlisp";
+    };
+    "tree-sitter-cuda" = {
+      orga = "thehamsta";
+      repo = "tree-sitter-cuda";
+    };
+    "tree-sitter-glsl" = {
+      orga = "thehamsta";
+      repo = "tree-sitter-glsl";
+    };
+    "tree-sitter-dockerfile" = {
+      orga = "camdencheek";
+      repo = "tree-sitter-dockerfile";
+    };
+    "tree-sitter-ledger" = {
+      orga = "cbarrete";
+      repo = "tree-sitter-ledger";
+    };
+    "tree-sitter-gomod" = {
+      orga = "camdencheek";
+      repo = "tree-sitter-go-mod";
+    };
+    "tree-sitter-gowork" = {
+      orga = "omertuc";
+      repo = "tree-sitter-go-work";
+    };
+    "tree-sitter-graphql" = {
+      orga = "bkegley";
+      repo = "tree-sitter-graphql";
+    };
+    "tree-sitter-pgn" = {
+      orga = "rolandwalker";
+      repo = "tree-sitter-pgn";
+    };
+    "tree-sitter-perl" = {
+      orga = "ganezdragon";
+      repo = "tree-sitter-perl";
+    };
+    "tree-sitter-kotlin" = {
+      orga = "fwcd";
+      repo = "tree-sitter-kotlin";
+    };
+    "tree-sitter-scss" = {
+      orga = "serenadeai";
+      repo = "tree-sitter-scss";
+    };
+    "tree-sitter-erlang" = {
+      orga = "abstractmachineslab";
+      repo = "tree-sitter-erlang";
+    };
+    "tree-sitter-elixir" = {
+      orga = "elixir-lang";
+      repo = "tree-sitter-elixir";
+    };
+    "tree-sitter-surface" = {
+      orga = "connorlay";
+      repo = "tree-sitter-surface";
+    };
+    "tree-sitter-eex" = {
+      orga = "connorlay";
+      repo = "tree-sitter-eex";
+    };
+    "tree-sitter-heex" = {
+      orga = "connorlay";
+      repo = "tree-sitter-heex";
+    };
+    "tree-sitter-supercollider" = {
+      orga = "madskjeldgaard";
+      repo = "tree-sitter-supercollider";
+    };
+    "tree-sitter-tlaplus" = {
+      orga = "tlaplus-community";
+      repo = "tree-sitter-tlaplus";
+    };
+    "tree-sitter-glimmer" = {
+      orga = "alexlafroscia";
+      repo = "tree-sitter-glimmer";
+    };
+    "tree-sitter-pug" = {
+      orga = "zealot128";
+      repo = "tree-sitter-pug";
+    };
+    "tree-sitter-vue" = {
+      orga = "ikatyang";
+      repo = "tree-sitter-vue";
+    };
+    "tree-sitter-elm" = {
+      orga = "elm-tooling";
+      repo = "tree-sitter-elm";
+    };
+    "tree-sitter-yang" = {
+      orga = "hubro";
+      repo = "tree-sitter-yang";
+    };
+    "tree-sitter-query" = {
+      orga = "nvim-treesitter";
+      repo = "tree-sitter-query";
+    };
+    "tree-sitter-sparql" = {
+      orga = "bonabeavis";
+      repo = "tree-sitter-sparql";
+    };
+    "tree-sitter-gdscript" = {
+      orga = "prestonknopp";
+      repo = "tree-sitter-gdscript";
+    };
+    "tree-sitter-godot-resource" = {
+      orga = "prestonknopp";
+      repo = "tree-sitter-godot-resource";
+    };
+    "tree-sitter-turtle" = {
+      orga = "bonabeavis";
+      repo = "tree-sitter-turtle";
+    };
+    "tree-sitter-devicetree" = {
+      orga = "joelspadin";
+      repo = "tree-sitter-devicetree";
+    };
+    "tree-sitter-r" = {
+      orga = "r-lib";
+      repo = "tree-sitter-r";
+    };
+    "tree-sitter-bibtex" = {
+      orga = "latex-lsp";
+      repo = "tree-sitter-bibtex";
+    };
+    "tree-sitter-fortran" = {
+      orga = "stadelmanma";
+      repo = "tree-sitter-fortran";
+    };
+    "tree-sitter-cmake" = {
+      orga = "uyha";
+      repo = "tree-sitter-cmake";
+    };
+    "tree-sitter-janet-simple" = {
+      orga = "sogaiu";
+      repo = "tree-sitter-janet-simple";
+    };
+    "tree-sitter-json5" = {
+      orga = "joakker";
+      repo = "tree-sitter-json5";
+    };
+    "tree-sitter-pioasm" = {
+      orga = "leo60228";
+      repo = "tree-sitter-pioasm";
+    };
+    "tree-sitter-hjson" = {
+      orga = "winston0410";
+      repo = "tree-sitter-hjson";
+    };
+    "tree-sitter-llvm" = {
+      orga = "benwilliamgraham";
+      repo = "tree-sitter-llvm";
+    };
+    "tree-sitter-http" = {
+      orga = "ntbbloodbath";
+      repo = "tree-sitter-http";
+    };
+    "tree-sitter-prisma" = {
+      orga = "victorhqc";
+      repo = "tree-sitter-prisma";
+    };
+    "tree-sitter-org-nvim" = {
+      orga = "milisims";
+      repo = "tree-sitter-org";
+    };
+    "tree-sitter-hcl" = {
+      orga = "MichaHoffmann";
+      repo = "tree-sitter-hcl";
+    };
+    "tree-sitter-scheme" = {
+      orga = "6cdh";
+      repo = "tree-sitter-scheme";
+    };
+    "tree-sitter-tiger" = {
+      orga = "ambroisie";
+      repo = "tree-sitter-tiger";
+    };
+    "tree-sitter-nickel" = {
+      orga = "nickel-lang";
+      repo = "tree-sitter-nickel";
+    };
+    "tree-sitter-smithy" = {
+      orga = "indoorvivants";
+      repo = "tree-sitter-smithy";
+    };
+    "tree-sitter-jsonnet" = {
+      orga = "sourcegraph";
+      repo = "tree-sitter-jsonnet";
+    };
+    "tree-sitter-solidity" = {
+      orga = "JoranHonig";
+      repo = "tree-sitter-solidity";
+    };
+    "tree-sitter-nu" = {
+      orga = "nushell";
+      repo = "tree-sitter-nu";
+    };
+    "tree-sitter-cue" = {
+      orga = "eonpatapon";
+      repo = "tree-sitter-cue";
+    };
+    "tree-sitter-uiua" = {
+      orga = "shnarazk";
+      repo = "tree-sitter-uiua";
+    };
+    "tree-sitter-wing" = {
+      orga = "winglang";
+      repo = "wing";
+    };
+    "tree-sitter-wgsl" = {
+      orga = "szebniok";
+      repo = "tree-sitter-wgsl";
+    };
+    "tree-sitter-templ" = {
+      orga = "vrischmann";
+      repo = "tree-sitter-templ";
+    };
+  };
+
+  allGrammars =
+    let
+      treeSitterOrgaGrammars =
+        lib.listToAttrs (map
+          (repo:
+            {
+              name = repo;
+              value = {
+                orga = "tree-sitter";
+                inherit repo;
+              };
+            })
+          knownTreeSitterOrgGrammarRepos);
+
+    in
+    lib.attrsets.unionOfDisjoint otherGrammars treeSitterOrgaGrammars;
+
+
+
+  jsonFile = name: val: (formats.json { }).generate name val;
+
+  # implementation of the updater
+  updateImpl = passArgs "updateImpl-with-args"
+    {
+      binaries = {
+        curl = "${curl}/bin/curl";
+        nix-prefetch-git = "${nix-prefetch-git}/bin/nix-prefetch-git";
+        printf = "${coreutils}/bin/printf";
+      };
+      inherit
+        knownTreeSitterOrgGrammarRepos
+        ignoredTreeSitterOrgRepos
+        ;
+    }
+    (writers.writePython3 "updateImpl"
+      {
+        flakeIgnore = [ "E501" ];
+      } ./update_impl.py);
+
+  # Pass the given arguments to the command, in the ARGS environment variable.
+  # The arguments are just a json object that should be available in the script.
+  passArgs = name: argAttrs: script: writeShellScript name ''
+    env ARGS="$(< ${jsonFile "${name}-args" argAttrs})" \
+      ${script} "$@"
+  '';
+
+  foreachSh = attrs: f:
+    lib.concatMapStringsSep "\n" f
+      (lib.mapAttrsToList (k: v: { name = k; } // v) attrs);
+
+  jsonNewlines = lib.concatMapStringsSep "\n" (lib.generators.toJSON { });
+
+  # Run the given script for each of the attr list.
+  # The attrs are passed to the script as a json value.
+  forEachParallel = name: script: listOfAttrs: writeShellScript "for-each-parallel.sh" ''
+    < ${writeText "${name}.json" (jsonNewlines listOfAttrs)} \
+      ${xe}/bin/xe -F -j5 ${script} {}
+  '';
+
+  # The output directory in the current source tree.
+  # This will depend on your local environment, but that is intentional.
+  outputDir = "${toString ./.}/grammars";
+
+  update-all-grammars = writeShellScript "update-all-grammars.sh" ''
+     set -euo pipefail
+    ${updateImpl} fetch-and-check-tree-sitter-repos '{}'
+     echo "writing files to ${outputDir}" 1>&2
+     mkdir -p "${outputDir}"
+     ${forEachParallel
+         "repos-to-fetch"
+         (writeShellScript "fetch-repo" ''
+             ${updateImpl} fetch-repo "$1"
+         '')
+         (lib.mapAttrsToList
+           (nixRepoAttrName: attrs: attrs // {
+             inherit
+               nixRepoAttrName
+               outputDir;
+           })
+           allGrammars)
+     }
+     ${updateImpl} print-all-grammars-nix-file "$(< ${
+         jsonFile "all-grammars.json" {
+           allGrammars =
+             (lib.mapAttrsToList
+               (nixRepoAttrName: attrs: attrs // {
+                 inherit nixRepoAttrName;
+               })
+               allGrammars);
+           inherit outputDir;
+         }
+     })"
+  '';
+
+
+in
+update-all-grammars
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/update_impl.py b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/update_impl.py
new file mode 100644
index 000000000000..a53e1ee62c36
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/update_impl.py
@@ -0,0 +1,222 @@
+from urllib.parse import quote
+import json
+import subprocess as sub
+import os
+import sys
+from typing import Iterator, Any, Literal, TypedDict, Optional
+from tempfile import NamedTemporaryFile
+
+debug: bool = True if os.environ.get("DEBUG", False) else False
+Bin = str
+args: dict[str, Any] = json.loads(os.environ["ARGS"])
+bins: dict[str, Bin] = args["binaries"]
+
+mode: str = sys.argv[1]
+jsonArg: dict = json.loads(sys.argv[2])
+
+Args = Iterator[str]
+
+
+def log(msg: str) -> None:
+    print(msg, file=sys.stderr)
+
+
+def atomically_write(file_path: str, content: bytes) -> None:
+    """atomically write the content into `file_path`"""
+    with NamedTemporaryFile(
+        # write to the parent dir, so that it’s guaranteed to be on the same filesystem
+        dir=os.path.dirname(file_path),
+        delete=False
+    ) as tmp:
+        try:
+            tmp.write(content)
+            os.rename(
+                src=tmp.name,
+                dst=file_path
+            )
+        except Exception:
+            os.unlink(tmp.name)
+
+
+def curl_github_args(token: str | None, url: str) -> Args:
+    """Query the github API via curl"""
+    yield bins["curl"]
+    if not debug:
+        yield "--silent"
+    # follow redirects
+    yield "--location"
+    if token:
+        yield "-H"
+        yield f"Authorization: token {token}"
+    yield url
+
+
+def curl_result(output: bytes) -> Any | Literal["not found"]:
+    """Parse the curl result of the github API"""
+    res: Any = json.loads(output)
+    match res:
+        case dict(res):
+            message: str = res.get("message", "")
+            if "rate limit" in message:
+                sys.exit("Rate limited by the Github API")
+            if "Not Found" in message:
+                return "not found"
+    # if the result is another type, we can pass it on
+    return res
+
+
+def nix_prefetch_git_args(url: str, version_rev: str) -> Args:
+    """Prefetch a git repository"""
+    yield bins["nix-prefetch-git"]
+    if not debug:
+        yield "--quiet"
+    yield "--no-deepClone"
+    yield "--url"
+    yield url
+    yield "--rev"
+    yield version_rev
+
+
+def run_cmd(args: Args) -> bytes:
+    all = list(args)
+    if debug:
+        log(str(all))
+    return sub.check_output(all)
+
+
+Dir = str
+
+
+def fetchRepo() -> None:
+    """fetch the given repo and write its nix-prefetch output to the corresponding grammar json file"""
+    match jsonArg:
+        case {
+            "orga": orga,
+            "repo": repo,
+            "outputDir": outputDir,
+            "nixRepoAttrName": nixRepoAttrName,
+        }:
+            token: str | None = os.environ.get("GITHUB_TOKEN", None)
+            out = run_cmd(
+                curl_github_args(
+                    token,
+                    url=f"https://api.github.com/repos/{quote(orga)}/{quote(repo)}/releases/latest"
+                )
+            )
+            release: str
+            match curl_result(out):
+                case "not found":
+                    if "branch" in jsonArg:
+                        branch = jsonArg.get("branch")
+                        release = f"refs/heads/{branch}"
+                    else:
+                        # github sometimes returns an empty list even tough there are releases
+                        log(f"uh-oh, latest for {orga}/{repo} is not there, using HEAD")
+                        release = "HEAD"
+                case {"tag_name": tag_name}:
+                    release = tag_name
+                case _:
+                    sys.exit(f"git result for {orga}/{repo} did not have a `tag_name` field")
+
+            log(f"Fetching latest release ({release}) of {orga}/{repo} …")
+            res = run_cmd(
+                nix_prefetch_git_args(
+                    url=f"https://github.com/{quote(orga)}/{quote(repo)}",
+                    version_rev=release
+                )
+            )
+            atomically_write(
+                file_path=os.path.join(
+                    outputDir,
+                    f"{nixRepoAttrName}.json"
+                ),
+                content=res
+            )
+        case _:
+            sys.exit("input json must have `orga` and `repo` keys")
+
+
+def fetchOrgaLatestRepos(orga: str) -> set[str]:
+    """fetch the latest (100) repos from the given github organization"""
+    token: str | None = os.environ.get("GITHUB_TOKEN", None)
+    out = run_cmd(
+        curl_github_args(
+            token,
+            url=f"https://api.github.com/orgs/{quote(orga)}/repos?per_page=100"
+        )
+    )
+    match curl_result(out):
+        case "not found":
+            sys.exit(f"github organization {orga} not found")
+        case list(repos):
+            res: list[str] = []
+            for repo in repos:
+                name = repo.get("name")
+                if name:
+                    res.append(name)
+            return set(res)
+        case _:
+            sys.exit("github result was not a list of repos, but {other}")
+
+
+def checkTreeSitterRepos(latest_github_repos: set[str]) -> None:
+    """Make sure we know about all tree sitter repos on the tree sitter orga."""
+    known: set[str] = set(args["knownTreeSitterOrgGrammarRepos"])
+    ignored: set[str] = set(args["ignoredTreeSitterOrgRepos"])
+
+    unknown = latest_github_repos - (known | ignored)
+
+    if unknown:
+        sys.exit(f"These repositories are neither known nor ignored:\n{unknown}")
+
+
+Grammar = TypedDict(
+    "Grammar",
+    {
+        "nixRepoAttrName": str,
+        "orga": str,
+        "repo": str,
+        "branch": Optional[str]
+    }
+)
+
+
+def printAllGrammarsNixFile() -> None:
+    """Print a .nix file that imports all grammars."""
+    allGrammars: list[dict[str, Grammar]] = jsonArg["allGrammars"]
+    outputDir: Dir = jsonArg["outputDir"]
+
+    def file() -> Iterator[str]:
+        yield "{ lib }:"
+        yield "{"
+        for grammar in allGrammars:
+            n = grammar["nixRepoAttrName"]
+            yield f"  {n} = lib.importJSON ./{n}.json;"
+        yield "}"
+        yield ""
+
+    atomically_write(
+        file_path=os.path.join(
+            outputDir,
+            "default.nix"
+        ),
+        content="\n".join(file()).encode()
+    )
+
+
+def fetchAndCheckTreeSitterRepos() -> None:
+    log("fetching list of grammars")
+    latest_repos = fetchOrgaLatestRepos(orga="tree-sitter")
+    log("checking the tree-sitter repo list against the grammars we know")
+    checkTreeSitterRepos(latest_repos)
+
+
+match mode:
+    case "fetch-repo":
+        fetchRepo()
+    case "fetch-and-check-tree-sitter-repos":
+        fetchAndCheckTreeSitterRepos()
+    case "print-all-grammars-nix-file":
+        printAllGrammarsNixFile()
+    case _:
+        sys.exit(f"mode {mode} unknown")
diff --git a/nixpkgs/pkgs/development/tools/patatt/default.nix b/nixpkgs/pkgs/development/tools/patatt/default.nix
new file mode 100644
index 000000000000..aed80b94ac6b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/patatt/default.nix
@@ -0,0 +1,28 @@
+{ lib, python3Packages, fetchPypi }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "patatt";
+  version = "0.6.3";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-mAgm9lKdJXbCZ8ofVk1b7wRstH5UIVu1mO1sS5stCig=";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    pynacl
+  ];
+
+  meta = with lib; {
+    homepage = "https://git.kernel.org/pub/scm/utils/patatt/patatt.git/about/";
+    license = licenses.mit0;
+    description = "Add cryptographic attestation to patches sent via email";
+    longDescription = ''
+      This utility allows an easy way to add end-to-end cryptographic
+      attestation to patches sent via mail.  It does so by adapting the
+      DKIM email signature standard to include cryptographic
+      signatures via the X-Developer-Signature email header.
+    '';
+    maintainers = with maintainers; [ qyliss yoctocell ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/patcher9x/default.nix b/nixpkgs/pkgs/development/tools/patcher9x/default.nix
new file mode 100644
index 000000000000..33dad487b3f6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/patcher9x/default.nix
@@ -0,0 +1,47 @@
+{ fasm, lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation (finalAttr: {
+  name = "patcher9x";
+  version = "0.8.50";
+
+  srcs = [
+    (fetchFromGitHub {
+      owner = "JHRobotics";
+      repo = "patcher9x";
+      rev = "v${finalAttr.version}";
+      hash = "sha256-TZw2+R7Dzojzxzal1Wp8jhe5gwU4CfZDROITi5Z+auo=";
+      name = "src";
+    })
+
+    (fetchFromGitHub {
+      owner = "JHRobotics";
+      repo = "nocrt";
+      rev = "f65cc7ef2a3cccd6264b2eb265d7fffbecb06ba4";
+      hash = "sha256-oeHcK9zYMDWk5sWfzYqLtC3MAJVtcaDJy4PvUGrxiPE=";
+      name = "nocrt";
+    })
+  ];
+
+  buildInputs = [ fasm ];
+  sourceRoot = "src";
+  hardeningDisable = [ "fortify" ];
+
+  preBuild = ''
+    rmdir nocrt
+    ln -s ../nocrt .
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    install -D patcher9x $out/bin/patcher9x
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Patch for Windows 95/98/98 SE/Me to fix CPU issues";
+    homepage = "https://github.com/JHRobotics/patcher9x";
+    license = licenses.mit;
+    maintainers = with maintainers; [ hughobrien ];
+    platforms = platforms.linux;
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/pax-rs/default.nix b/nixpkgs/pkgs/development/tools/pax-rs/default.nix
new file mode 100644
index 000000000000..d89221da8fea
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/pax-rs/default.nix
@@ -0,0 +1,40 @@
+{ lib, fetchFromGitHub, fetchurl, rustPlatform, runCommand } :
+
+rustPlatform.buildRustPackage rec {
+  pname = "pax-rs";
+  version = "0.4.0";
+
+  meta = with lib; {
+    description = "The fastest JavaScript bundler in the galaxy";
+    longDescription = ''
+      The fastest JavaScript bundler in the galaxy. Fully supports ECMAScript module syntax (import/export) in addition to CommonJS require(<string>).
+    '';
+    homepage = "https://github.com/nathan/pax";
+    license = licenses.mit;
+    maintainers = [ maintainers.klntsky ];
+    platforms = platforms.linux;
+    mainProgram = "px";
+  };
+
+  src =
+    let
+      source = fetchFromGitHub {
+        owner = "nathan";
+        repo = "pax";
+        rev = "pax-v${version}";
+        sha256 = "1l2xpgsms0bfc0i3l0hyw4dbp6d4qdxa9vxyp704p27vvn4ndhv2";
+      };
+
+      cargo-lock = fetchurl {
+        url = "https://gist.github.com/klntsky/c7863424d7df0c379782015f6bb3b399/raw/1cf7481e33984fd1510dc77ed677606d08fa8eb6/Cargo.lock";
+        sha256 = "0ff1b64b99cbca1cc2ceabcd2e4f7bc3411e3a2a9fbb9db2204d9240fe38ddeb";
+      };
+    in
+    runCommand "pax-rs-src" {} ''
+      cp -R ${source} $out
+      chmod +w $out
+      cp ${cargo-lock} $out/Cargo.lock
+    '';
+
+  cargoSha256 = "0d6g52hjflnw2zvlx10pz78527vh7mw5n43yi8q6dwr3pkbds1fs";
+}
diff --git a/nixpkgs/pkgs/development/tools/perseus-cli/default.nix b/nixpkgs/pkgs/development/tools/perseus-cli/default.nix
new file mode 100644
index 000000000000..4b39fccdd366
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/perseus-cli/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchCrate
+, makeWrapper
+, wasm-pack
+, CoreServices
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "perseus-cli";
+  version = "0.3.1";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-IYjLx9/4oWSXa4jhOtGw1GOHmrR7LQ6bWyN5zbOuEFs=";
+  };
+
+  cargoSha256 = "sha256-i7MPmO9MoANZLzmR5gsD+v0gyDtFbzhsmE9xOsb88L0=";
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = lib.optionals stdenv.isDarwin [ CoreServices ];
+
+  postInstall = ''
+    wrapProgram $out/bin/perseus \
+      --prefix PATH : "${lib.makeBinPath [ wasm-pack ]}"
+  '';
+
+  meta = with lib; {
+    homepage = "https://arctic-hen7.github.io/perseus";
+    description = "A high-level web development framework for Rust with full support for server-side rendering and static generation";
+    maintainers = with maintainers; [ max-niederman ];
+    license = with licenses; [ mit ];
+    mainProgram = "perseus";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/pet/default.nix b/nixpkgs/pkgs/development/tools/pet/default.nix
new file mode 100644
index 000000000000..3b149f2e0577
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/pet/default.nix
@@ -0,0 +1,40 @@
+{ buildGoModule, fetchFromGitHub, installShellFiles, lib }:
+
+buildGoModule rec {
+  pname = "pet";
+  version = "0.6.0";
+
+  src = fetchFromGitHub {
+    owner = "knqyf263";
+    repo = "pet";
+    rev = "v${version}";
+    sha256 = "sha256-+SjeQJXWoyNVb9AUB0BlXUJpHYRLhvVjteZypjV0FtE=";
+  };
+
+  vendorHash = "sha256-A3VHpSJc6NJz8ojg6iSnQlIXbf9m1JCzg9Vnoie0ffU=";
+
+  ldflags = [
+    "-s" "-w" "-X=github.com/knqyf263/pet/cmd.version=${version}"
+  ];
+
+  doCheck = false;
+
+  subPackages = [ "." ];
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  postInstall = ''
+    installShellCompletion --cmd pet \
+      --zsh ./misc/completions/zsh/_pet
+  '';
+
+  meta = with lib; {
+    description = "Simple command-line snippet manager, written in Go";
+    homepage = "https://github.com/knqyf263/pet";
+    license = licenses.mit;
+    maintainers = with maintainers; [ kalbasit ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/pew/default.nix b/nixpkgs/pkgs/development/tools/pew/default.nix
new file mode 100644
index 000000000000..f0c9d7d62b6e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/pew/default.nix
@@ -0,0 +1,30 @@
+{ lib, python3, fetchPypi }:
+
+with python3.pkgs;
+
+buildPythonApplication rec {
+  pname = "pew";
+  version = "1.2.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "04anak82p4v9w0lgfs55s7diywxil6amq8c8bhli143ca8l2fcdq";
+  };
+
+  propagatedBuildInputs = [ virtualenv virtualenv-clone setuptools ];
+
+  # no tests are packaged
+  checkPhase = ''
+    $out/bin/pew > /dev/null
+  '';
+
+  pythonImportsCheck = [ "pew" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/berdario/pew";
+    description = "Tools to manage multiple virtualenvs written in pure python";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ berdario ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/pgformatter/default.nix b/nixpkgs/pkgs/development/tools/pgformatter/default.nix
new file mode 100644
index 000000000000..22e7116fb6cd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/pgformatter/default.nix
@@ -0,0 +1,53 @@
+{ lib, stdenv, perlPackages, fetchFromGitHub, fetchpatch, shortenPerlShebang }:
+
+perlPackages.buildPerlPackage rec {
+  pname = "pgformatter";
+  version = "5.5";
+
+  src = fetchFromGitHub {
+    owner = "darold";
+    repo = "pgFormatter";
+    rev = "v${version}";
+    hash = "sha256-4KtrsckO9Q9H0yIM0877YvWaDW02CQVAQiOKD919e9w=";
+  };
+
+  outputs = [ "out" ];
+
+  makeMakerFlags = [ "INSTALLDIRS=vendor" ];
+
+  # Avoid creating perllocal.pod, which contains a timestamp
+  installTargets = [ "pure_install" ];
+
+  patches = [
+    # Fix an uninitialized variable error. Remove with the next release.
+    (fetchpatch {
+      url = "https://github.com/darold/pgFormatter/commit/c2622c47d48cee47effecbf58a588c3cd3a7bf1a.patch";
+      sha256 = "sha256-WnQIOvfuzL2HrwtL0HaaYObrBxhXDu82jxGcqggQVhc=";
+    })
+  ];
+
+  # Makefile.PL only accepts DESTDIR and INSTALLDIRS, but we need to set more to make this work for NixOS.
+  patchPhase = ''
+    substituteInPlace pg_format \
+      --replace "#!/usr/bin/env perl" "#!/usr/bin/perl"
+    substituteInPlace Makefile.PL \
+      --replace "'DESTDIR'      => \$DESTDIR," "'DESTDIR'      => '$out/'," \
+      --replace "'INSTALLDIRS'  => \$INSTALLDIRS," "'INSTALLDIRS'  => \$INSTALLDIRS, 'INSTALLVENDORLIB' => 'bin/lib', 'INSTALLVENDORBIN' => 'bin', 'INSTALLVENDORSCRIPT' => 'bin', 'INSTALLVENDORMAN1DIR' => 'share/man/man1', 'INSTALLVENDORMAN3DIR' => 'share/man/man3',"
+  '';
+
+  nativeBuildInputs = lib.optional stdenv.isDarwin shortenPerlShebang;
+  postInstall = lib.optionalString stdenv.isDarwin ''
+    shortenPerlShebang $out/bin/pg_format
+  '';
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A PostgreSQL SQL syntax beautifier that can work as a console program or as a CGI";
+    homepage = "https://github.com/darold/pgFormatter";
+    changelog = "https://github.com/darold/pgFormatter/releases/tag/v${version}";
+    maintainers = [ maintainers.marsam ];
+    license = [ licenses.postgresql licenses.artistic2 ];
+    mainProgram = "pg_format";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/pgloader/default.nix b/nixpkgs/pkgs/development/tools/pgloader/default.nix
new file mode 100644
index 000000000000..dce892451c1c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/pgloader/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchurl, makeWrapper, sbcl, sqlite, freetds, libzip, curl, git, cacert, openssl }:
+stdenv.mkDerivation rec {
+  pname = "pgloader";
+  version = "3.6.9";
+
+  src = fetchurl {
+    url = "https://github.com/dimitri/pgloader/releases/download/v3.6.9/pgloader-bundle-3.6.9.tgz";
+    sha256 = "sha256-pdCcRmoJnrfVnkhbT0WqLrRbCtOEmRgGRsXK+3uByeA=";
+  };
+
+  nativeBuildInputs = [ git makeWrapper ];
+  buildInputs = [ sbcl cacert sqlite freetds libzip curl openssl ];
+
+  LD_LIBRARY_PATH = lib.makeLibraryPath [ sqlite libzip curl git openssl freetds ];
+
+  buildPhase = ''
+    export PATH=$PATH:$out/bin
+    export HOME=$TMPDIR
+
+    make pgloader
+  '';
+
+  dontStrip = true;
+  enableParallelBuilding = false;
+
+  installPhase = ''
+    install -Dm755 bin/pgloader "$out/bin/pgloader"
+    wrapProgram $out/bin/pgloader --prefix LD_LIBRARY_PATH : "${LD_LIBRARY_PATH}"
+  '';
+
+  meta = with lib; {
+    homepage = "https://pgloader.io/";
+    description = "Loads data into PostgreSQL and allows you to implement Continuous Migration from your current database to PostgreSQL";
+    maintainers = with maintainers; [ mguentner ];
+    license = licenses.postgresql;
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/pgtop/default.nix b/nixpkgs/pkgs/development/tools/pgtop/default.nix
new file mode 100644
index 000000000000..722f701892e4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/pgtop/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, perlPackages, fetchFromGitHub, shortenPerlShebang }:
+
+perlPackages.buildPerlPackage rec {
+  pname = "pgtop";
+  version = "0.11";
+
+  src = fetchFromGitHub {
+    owner = "cosimo";
+    repo = "pgtop";
+    rev = "v${version}";
+    sha256 = "1awyl6ddfihm7dfr5y2z15r1si5cyipnlyyj3m1l19pk98s4x66l";
+  };
+
+  outputs = [ "out" ];
+
+  buildInputs = with perlPackages; [ DBI DBDPg TermReadKey JSON LWP ];
+
+  nativeBuildInputs = lib.optional stdenv.isDarwin shortenPerlShebang;
+  postInstall = lib.optionalString stdenv.isDarwin ''
+    shortenPerlShebang $out/bin/pgtop
+  '';
+
+  meta = with lib; {
+    description = "a PostgreSQL clone of `mytop', which in turn is a `top' clone for MySQL";
+    homepage = "https://github.com/cosimo/pgtop";
+    changelog = "https://github.com/cosimo/pgtop/releases/tag/v${version}";
+    maintainers = [ maintainers.hagl ];
+    license = [ licenses.gpl2Only ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/phpactor/default.nix b/nixpkgs/pkgs/development/tools/phpactor/default.nix
new file mode 100644
index 000000000000..5b1b522709d0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/phpactor/default.nix
@@ -0,0 +1,23 @@
+{ lib, fetchFromGitHub, php }:
+
+php.buildComposerProject (finalAttrs: {
+  pname = "phpactor";
+  version = "2023.08.06-1";
+
+  src = fetchFromGitHub {
+    owner = "phpactor";
+    repo = "phpactor";
+    rev = finalAttrs.version;
+    hash = "sha256-NI+CLXlflQ8zQ+0AbjhJFdV6Y2+JGy7XDj0RBJ4YRRg=";
+  };
+
+  vendorHash = "sha256-XGVZw6t8CHcv39YHkn/mW6fdl65kFakADLOEWbXfh/g=";
+
+  meta = {
+    description = "Mainly a PHP Language Server";
+    homepage = "https://github.com/phpactor/phpactor";
+    license = lib.licenses.mit;
+    mainProgram = "phpactor";
+    maintainers = [ lib.maintainers.ryantm ] ++ lib.teams.php.members;
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/picotool/default.nix b/nixpkgs/pkgs/development/tools/picotool/default.nix
new file mode 100644
index 000000000000..03d3d440c297
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/picotool/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub, cmake, pkg-config, libusb1, pico-sdk }:
+
+stdenv.mkDerivation rec {
+  pname = "picotool";
+  version = "1.1.2";
+
+  src = fetchFromGitHub {
+    owner = "raspberrypi";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-OcQJeiva6X2rUyh1rJ+w4O2dWxaR7MwMfbHlnWuBVb8=";
+  };
+
+  buildInputs = [ libusb1 pico-sdk ];
+  nativeBuildInputs = [ cmake pkg-config ];
+  cmakeFlags = [ "-DPICO_SDK_PATH=${pico-sdk}/lib/pico-sdk" ];
+
+  postInstall = ''
+    install -Dm444 ../udev/99-picotool.rules -t $out/etc/udev/rules.d
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/raspberrypi/picotool";
+    description = "Tool for interacting with a RP2040 device in BOOTSEL mode, or with a RP2040 binary";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ muscaln ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/pifpaf/default.nix b/nixpkgs/pkgs/development/tools/pifpaf/default.nix
new file mode 100644
index 000000000000..e11baa783ba6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/pifpaf/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, python3
+, fetchPypi
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "pifpaf";
+  version = "3.1.5";
+  format = "setuptools";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-lmixfUP+pq0RdyXeY6MmUQOx1sMLHqojOKUK1mivbaU=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    click
+    daiquiri
+    fixtures
+    jinja2
+    pbr
+    psutil
+    xattr
+  ];
+
+  preCheck = ''
+    export PATH=$out/bin:$PATH
+  '';
+
+  nativeCheckInputs = with python3.pkgs; [
+    requests
+    testtools
+  ];
+
+  pythonImportsCheck = [ "pifpaf" ];
+
+  meta = with lib; {
+    description = "Suite of tools and fixtures to manage daemons for testing";
+    homepage = "https://github.com/jd/pifpaf";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/pigeon/default.nix b/nixpkgs/pkgs/development/tools/pigeon/default.nix
new file mode 100644
index 000000000000..74b2a69c4c7c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/pigeon/default.nix
@@ -0,0 +1,28 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "pigeon";
+  version = "1.1.0";
+
+  src = fetchFromGitHub {
+    owner = "mna";
+    repo = "pigeon";
+    rev = "v${version}";
+    sha256 = "sha256-0Cp/OnFvVZj9UZgl3F5MCzemBaHI4smGWU46VQnhLOg=";
+  };
+
+  vendorHash = "sha256-JbBXRkxnB7LeeWdBLIQvyjvWo0zZ1EOuEUPXxHWiq+E=";
+
+  proxyVendor = true;
+
+  subPackages = [ "." ];
+
+  doCheck = false;
+
+  meta = {
+    homepage = "https://github.com/mna/pigeon";
+    description = "A PEG parser generator for Go";
+    maintainers = with lib.maintainers; [ zimbatm ];
+    license = with lib.licenses; [ bsd3 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/pip-audit/default.nix b/nixpkgs/pkgs/development/tools/pip-audit/default.nix
new file mode 100644
index 000000000000..cd5ad59f9d23
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/pip-audit/default.nix
@@ -0,0 +1,68 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "pip-audit";
+  version = "2.7.0";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "trailofbits";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-xbplBcoW78Dh5uyhaPicjs74YQfAgTc746Srxa4vu7M=";
+  };
+
+  nativeBuildInputs = with python3.pkgs; [
+    flit-core
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    cachecontrol
+    cyclonedx-python-lib
+    html5lib
+    packaging
+    pip-api
+    pip-requirements-parser
+    rich
+    toml
+  ] ++ cachecontrol.optional-dependencies.filecache;
+
+  nativeCheckInputs = with python3.pkgs; [
+    pretend
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [
+    "pip_audit"
+  ];
+
+  preCheck = ''
+    export HOME=$(mktemp -d);
+  '';
+
+  disabledTestPaths = [
+    # Tests require network access
+    "test/dependency_source/test_requirement.py"
+    "test/service/test_pypi.py"
+    "test/service/test_osv.py"
+  ];
+
+  disabledTests = [
+    # Tests requrire network access
+    "test_get_pip_cache"
+    "test_virtual_env"
+    "test_pyproject_source"
+    "test_pyproject_source_duplicate_deps"
+  ];
+
+  meta = with lib; {
+    description = "Tool for scanning Python environments for known vulnerabilities";
+    homepage = "https://github.com/trailofbits/pip-audit";
+    changelog = "https://github.com/pypa/pip-audit/releases/tag/v${version}";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/pipenv/default.nix b/nixpkgs/pkgs/development/tools/pipenv/default.nix
new file mode 100644
index 000000000000..c8e4d0e20069
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/pipenv/default.nix
@@ -0,0 +1,90 @@
+{ lib
+, stdenv
+, python3
+, fetchFromGitHub
+, installShellFiles
+}:
+
+with python3.pkgs;
+
+let
+
+  runtimeDeps = ps: with ps; [
+    certifi
+    setuptools
+    pip
+    virtualenv
+    virtualenv-clone
+  ]
+  ++ lib.optionals stdenv.hostPlatform.isAndroid [
+    pyjnius
+  ];
+
+  pythonEnv = python3.withPackages runtimeDeps;
+
+in buildPythonApplication rec {
+  pname = "pipenv";
+  version = "2023.2.4";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "pypa";
+    repo = "pipenv";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-jZOBu4mWyu8U6CGqtYgfcCCDSa0pGqoZEFnXl5IO+JY=";
+  };
+
+  env.LC_ALL = "en_US.UTF-8";
+
+  nativeBuildInputs = [
+    installShellFiles
+    setuptools
+    wheel
+  ];
+
+  postPatch = ''
+    # pipenv invokes python in a subprocess to create a virtualenv
+    # and to call setup.py.
+    # It would use sys.executable, which in our case points to a python that
+    # does not have the required dependencies.
+    substituteInPlace pipenv/core.py \
+      --replace "sys.executable" "'${pythonEnv.interpreter}'"
+  '';
+
+  propagatedBuildInputs = runtimeDeps python3.pkgs;
+
+  preCheck = ''
+    export HOME="$TMPDIR"
+  '';
+
+  nativeCheckInputs = [
+    mock
+    pytestCheckHook
+    pytest-xdist
+    pytz
+    requests
+  ];
+
+  disabledTests = [
+    "test_convert_deps_to_pip"
+    "test_download_file"
+  ];
+
+  disabledTestPaths = [
+    "tests/integration"
+  ];
+
+  postInstall = ''
+    installShellCompletion --cmd pipenv \
+      --bash <(_PIPENV_COMPLETE=bash_source $out/bin/pipenv) \
+      --zsh <(_PIPENV_COMPLETE=zsh_source $out/bin/pipenv) \
+      --fish <(_PIPENV_COMPLETE=fish_source $out/bin/pipenv)
+  '';
+
+  meta = with lib; {
+    description = "Python Development Workflow for Humans";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ berdario ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/poac/default.nix b/nixpkgs/pkgs/development/tools/poac/default.nix
new file mode 100644
index 000000000000..e6d98f79cc27
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/poac/default.nix
@@ -0,0 +1,103 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, cpm-cmake
+, git
+, git2-cpp
+, cacert
+, boost179
+, icu
+, libarchive
+, libgit2
+, lz4
+, mitama-cpp-result
+, ninja
+, openssl_3
+, package-project-cmake
+, spdlog
+}:
+
+let
+  glob = fetchFromGitHub {
+    owner = "p-ranav";
+    repo = "glob";
+    rev = "v0.0.1";
+    sha256 = "sha256-2y+a7YFBiYX8wbwCCWw1Cm+SFoXGB3ZxLPi/QdZhcdw=";
+  };
+
+  structopt = fetchFromGitHub {
+    owner = "p-ranav";
+    repo = "structopt";
+    rev = "e9722d3c2b52cf751ebc1911b93d9649c4e365cc";
+    sha256 = "sha256-jIfKUyY2QQ2/donywwlz65PY8u7xODGoG6SlNtUhwkg=";
+  };
+
+  toml11 = fetchFromGitHub {
+    owner = "ToruNiina";
+    repo = "toml11";
+    rev = "9086b1114f39a8fb10d08ca704771c2f9f247d02";
+    sha256 = "sha256-fHUElHO4ckNQq7Q88GdbHGxfaAvWoWtGB0eD9y2MnLo=";
+  };
+in
+stdenv.mkDerivation rec {
+  pname = "poac";
+  version = "0.5.1";
+
+  src = fetchFromGitHub {
+    owner = "poacpm";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-JgGa7lomDvZG5HLxGJMALcezjnZprexJDTxyTUjLetg=";
+  };
+
+  preConfigure = ''
+    mkdir -p ${placeholder "out"}/share/cpm
+    cp ${cpm-cmake}/share/cpm/CPM.cmake ${placeholder "out"}/share/cpm/CPM_0.35.1.cmake
+  '';
+
+  cmakeFlags = [
+    "-DPOAC_BUILD_TESTING=OFF"
+    "-DCPM_SOURCE_CACHE=${placeholder "out"}/share"
+    "-DFETCHCONTENT_SOURCE_DIR_GIT2-CPP=${git2-cpp.src}"
+    "-DFETCHCONTENT_SOURCE_DIR_GLOB=${glob}"
+    "-DFETCHCONTENT_SOURCE_DIR_PACKAGEPROJECT.CMAKE=${package-project-cmake.src}"
+    "-DFETCHCONTENT_SOURCE_DIR_MITAMA-CPP-RESULT=${mitama-cpp-result.src}"
+    "-DFETCHCONTENT_SOURCE_DIR_NINJA=${ninja.src}"
+    "-DFETCHCONTENT_SOURCE_DIR_STRUCTOPT=${structopt}"
+    "-DFETCHCONTENT_SOURCE_DIR_TOML11=${toml11}"
+  ];
+
+  nativeBuildInputs = [ cmake git cacert ];
+  buildInputs = [
+    (boost179.override {
+      enableShared = stdenv.isDarwin;
+      enableStatic = !stdenv.isDarwin;
+    })
+    git2-cpp
+    glob
+    package-project-cmake
+    mitama-cpp-result
+    ninja
+    structopt
+    toml11
+    icu
+    libarchive
+    libgit2
+    lz4
+    openssl_3
+    spdlog
+  ];
+
+  meta = with lib; {
+    homepage = "https://poac.pm";
+    description = "Package Manager for C++";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ ken-matsui ];
+    platforms = platforms.unix;
+    # https://github.com/NixOS/nixpkgs/pull/189712#issuecomment-1237791234
+    broken = (stdenv.isLinux && stdenv.isAarch64)
+    # error: excess elements in scalar initializer on std::aligned_alloc
+          || (stdenv.isDarwin && stdenv.isx86_64);
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/postiats-utilities/default.nix b/nixpkgs/pkgs/development/tools/postiats-utilities/default.nix
new file mode 100644
index 000000000000..6ac021e1ba09
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/postiats-utilities/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchFromGitHub, python3, python3Packages }:
+
+stdenv.mkDerivation rec {
+  pname = "postiats-utilities";
+  version = "2.1.1";
+  src = fetchFromGitHub {
+    owner = "Hibou57";
+    repo = "PostiATS-Utilities";
+    rev = "v${version}";
+    sha256 = "sha256-QeBbv5lwqL2ARjB+RGyBHeuibaxugffBLhC9lYs+5tE=";
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/Hibou57/PostiATS-Utilities";
+    license = licenses.bsd2;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.ttuegel ];
+  };
+
+  buildInputs = [ python3 python3Packages.wrapPython ];
+
+  postPatch = ''
+    for f in pats-* postiats/*.py; do
+      sed -i "$f" -e "1 s,python3,python,"
+    done
+  '';
+
+  installPhase = ''
+    libdir="$out/${python3.sitePackages}"
+    mkdir -p "$libdir"
+    cp -r postiats "$libdir"
+
+    mkdir -p "$out/bin"
+    install pats-* "$out/bin"
+
+    wrapPythonPrograms
+  '';
+}
diff --git a/nixpkgs/pkgs/development/tools/pqrs/default.nix b/nixpkgs/pkgs/development/tools/pqrs/default.nix
new file mode 100644
index 000000000000..56c99d30babc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/pqrs/default.nix
@@ -0,0 +1,22 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "pqrs";
+  version = "0.3.1";
+
+  src = fetchFromGitHub {
+    owner = "manojkarthick";
+    repo = "pqrs";
+    rev = "v${version}";
+    sha256 = "sha256-t6Y6gpMEpccCoyhG66FZEKHVNCbHblaqYZY1iJUZVUA=";
+  };
+
+  cargoHash = "sha256-fnoYVWpBn5Dil2o+u2MKQqd8dEKFE2i29Qz7cJae+gE=";
+
+  meta = with lib; {
+    description = "CLI tool to inspect Parquet files";
+    homepage = "https://github.com/manojkarthick/pqrs";
+    license = with licenses; [ mit /* or */ asl20 ];
+    maintainers = [ maintainers.manojkarthick ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/prettierd/default.nix b/nixpkgs/pkgs/development/tools/prettierd/default.nix
new file mode 100644
index 000000000000..7e55e5be101a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/prettierd/default.nix
@@ -0,0 +1,52 @@
+{ lib
+, mkYarnPackage
+, fetchFromGitHub
+, makeWrapper
+, nodejs
+, fetchYarnDeps
+,
+}:
+mkYarnPackage rec {
+  pname = "prettierd";
+  version = "0.25.1";
+
+  src = fetchFromGitHub {
+    owner = "fsouza";
+    repo = "prettierd";
+    rev = "v${version}";
+    hash = "sha256-aoRfZ9SJazz0ir1fyHypn3aYqK9DJOLLVPMuFcOm/20=";
+  };
+
+  offlineCache = fetchYarnDeps {
+    yarnLock = src + "/yarn.lock";
+    hash = "sha256-HsWsRIONRNY9akZ2LXlWcPhH6N5qCKnesaDX1gQp+NU=";
+  };
+
+  packageJSON = ./package.json;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  buildPhase = ''
+    runHook preBuild
+    export HOME=$(mktemp -d)
+    yarn --offline build
+    runHook postBuild
+  '';
+
+  # prettierd needs to be wrapped with nodejs so that it can be executed
+  postInstall = ''
+    wrapProgram "$out/bin/prettierd" --prefix PATH : "${nodejs}/bin"
+  '';
+
+  doDist = false;
+
+  meta = with lib; {
+    mainProgram = "prettierd";
+    description = "Prettier, as a daemon, for improved formatting speed";
+    homepage = "https://github.com/fsouza/prettierd";
+    license = licenses.isc;
+    changelog = "https://github.com/fsouza/prettierd/blob/${src.rev}/CHANGELOG.md";
+    platforms = with platforms; linux ++ darwin;
+    maintainers = with maintainers; [ NotAShelf n3oney ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/prettierd/package.json b/nixpkgs/pkgs/development/tools/prettierd/package.json
new file mode 100644
index 000000000000..5ba4d0980034
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/prettierd/package.json
@@ -0,0 +1,45 @@
+{
+  "name": "@fsouza/prettierd",
+  "version": "0.25.1",
+  "description": "prettier, as a daemon",
+  "bin": {
+    "prettierd": "./bin/prettierd"
+  },
+  "scripts": {
+    "prepare": "yarn build",
+    "build": "tsc -b",
+    "run": "node bin/prettierd",
+    "start": "node bin/prettierd start",
+    "prettier:check": "prettier --check .",
+    "prettier:fix": "prettier --write ."
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/fsouza/prettierd.git"
+  },
+  "author": "Francisco Souza",
+  "license": "ISC",
+  "bugs": {
+    "url": "https://github.com/fsouza/prettierd/issues"
+  },
+  "homepage": "https://github.com/fsouza/prettierd",
+  "devDependencies": {
+    "@types/node": "^20.6.3",
+    "@types/prettier": "^3.0.0",
+    "typescript": "^5.2.2"
+  },
+  "dependencies": {
+    "core_d": "^6.0.0",
+    "prettier": "^3.0.3"
+  },
+  "files": [
+    "bin",
+    "dist",
+    "LICENSE",
+    "README.md"
+  ],
+  "optionalDependencies": {
+    "@babel/parser": "^7.22.16",
+    "@typescript-eslint/typescript-estree": "^6.7.2"
+  }
+}
diff --git a/nixpkgs/pkgs/development/tools/pretty-simple/default.nix b/nixpkgs/pkgs/development/tools/pretty-simple/default.nix
new file mode 100644
index 000000000000..0a33b6e6b2ea
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/pretty-simple/default.nix
@@ -0,0 +1,12 @@
+{ haskell, haskellPackages, lib }:
+
+haskell.lib.compose.justStaticExecutables (haskell.lib.compose.overrideCabal (oldAttrs: {
+  maintainers = (oldAttrs.maintainers or []) ++ [
+    lib.maintainers.cdepillabout
+  ];
+
+  configureFlags = (oldAttrs.configureFlags or []) ++ ["-fbuildexe"];
+
+  buildDepends = (oldAttrs.buildDepends or []) ++ [haskellPackages.optparse-applicative];
+}) haskellPackages.pretty-simple)
+
diff --git a/nixpkgs/pkgs/development/tools/profiling/EZTrace/default.nix b/nixpkgs/pkgs/development/tools/profiling/EZTrace/default.nix
new file mode 100644
index 000000000000..e05e61f60339
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/profiling/EZTrace/default.nix
@@ -0,0 +1,35 @@
+{ lib,
+  stdenv,
+  fetchFromGitLab,
+  gfortran,
+  libelf,
+  libiberty,
+  zlib,
+  # Once https://gitlab.com/eztrace/eztrace/-/issues/41
+  # is released we can switch to latest binutils.
+  libbfd_2_38,
+  libopcodes_2_38,
+  buildPackages,
+  autoreconfHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "EZTrace";
+  version = "1.1-11";
+
+  src = fetchFromGitLab {
+    owner = "eztrace";
+    repo = "eztrace";
+    rev = "eztrace-${version}";
+    sha256 = "sha256-A6HMr4ib5Ka1lTbbTQOdq3kIdCoN/CwAKRdXdv9wpfU=";
+  };
+
+  nativeBuildInputs = [ gfortran autoreconfHook ];
+  buildInputs = [ libelf libiberty zlib libbfd_2_38 libopcodes_2_38 ];
+
+  meta = with lib; {
+    description = "Tool that aims at generating automatically execution trace from HPC programs";
+    license = licenses.cecill-b;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/profiling/heaptrack/default.nix b/nixpkgs/pkgs/development/tools/profiling/heaptrack/default.nix
new file mode 100644
index 000000000000..2e4d996af01e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/profiling/heaptrack/default.nix
@@ -0,0 +1,31 @@
+{
+  lib, mkDerivation, fetchFromGitHub, cmake, extra-cmake-modules,
+  zlib, boost179, libunwind, elfutils, sparsehash, zstd,
+  qtbase, kio, kitemmodels, threadweaver, kconfigwidgets, kcoreaddons, kdiagram
+}:
+
+mkDerivation rec {
+  pname = "heaptrack";
+  version = "1.5.0";
+
+  src = fetchFromGitHub {
+    owner = "KDE";
+    repo = "heaptrack";
+    rev = "v${version}";
+    sha256 = "sha256-pP+s60ERnmOctYTe/vezCg0VYzziApNY0QaF3aTccZU=";
+  };
+
+  nativeBuildInputs = [ cmake extra-cmake-modules ];
+  buildInputs = [
+    zlib boost179 libunwind elfutils sparsehash zstd
+    qtbase kio kitemmodels threadweaver kconfigwidgets kcoreaddons kdiagram
+  ];
+
+  meta = with lib; {
+    description = "Heap memory profiler for Linux";
+    homepage = "https://github.com/KDE/heaptrack";
+    license = licenses.lgpl21Plus;
+    maintainers = with maintainers; [ gebner ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/profiling/malt/default.nix b/nixpkgs/pkgs/development/tools/profiling/malt/default.nix
new file mode 100644
index 000000000000..e13f488bdf74
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/profiling/malt/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, lib
+, fetchFromGitHub
+, cmake, nodejs, libelf, libunwind
+}:
+
+stdenv.mkDerivation rec {
+  pname = "malt";
+  version = "1.2.2";
+
+  src = fetchFromGitHub {
+    owner = "memtt";
+    repo = "malt";
+    rev = "v${version}";
+    sha256 = "sha256-6GGIdBaw/JSc2Qexy+P1NON27EBBRltthyQpMPZwi+8=";
+  };
+
+  postPatch = ''
+    sed -i s,@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_LIBDIR@,@CMAKE_INSTALL_LIBDIR@, \
+      src/integration/malt.sh.in
+    sed -i -e 's,^NODE=""$,NODE=${nodejs}/bin/node,' -e s,^detectNodeJS$,, \
+      src/integration/malt-{webview,passwd}.sh.in
+  '';
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ libelf libunwind ];
+
+  meta = with lib; {
+    description = "Memory tool to find where you allocate your memory";
+    homepage = "https://github.com/memtt/malt";
+    license = licenses.cecill-c;
+    maintainers = with maintainers; [ viric ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/profiling/oprofile/default.nix b/nixpkgs/pkgs/development/tools/profiling/oprofile/default.nix
new file mode 100644
index 000000000000..3bedc45c8d10
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/profiling/oprofile/default.nix
@@ -0,0 +1,49 @@
+{ lib, stdenv, buildPackages
+, fetchurl, pkg-config
+, libbfd, popt, zlib, linuxHeaders, libiberty_static
+}:
+
+stdenv.mkDerivation rec {
+  pname = "oprofile";
+  version = "1.4.0";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/oprofile/${pname}-${version}.tar.gz";
+    sha256 = "04m46ni0ryk4sqmzd6mahwzp7iwhwqzfbmfi42fki261sycnz83v";
+  };
+
+  postPatch = ''
+    substituteInPlace opjitconv/opjitconv.c \
+      --replace "/bin/rm" "${buildPackages.coreutils}/bin/rm" \
+      --replace "/bin/cp" "${buildPackages.coreutils}/bin/cp"
+  '';
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ libbfd zlib popt linuxHeaders libiberty_static ];
+
+  configureFlags = [
+    "--with-kernel=${linuxHeaders}"
+    "--disable-shared"   # needed because only the static libbfd is available
+  ];
+
+  meta = {
+    description = "System-wide profiler for Linux";
+    longDescription = ''
+      OProfile is a system-wide profiler for Linux systems, capable of
+      profiling all running code at low overhead.  It consists of a
+      kernel driver and a daemon for collecting sample data, and
+      several post-profiling tools for turning data into information.
+
+      OProfile leverages the hardware performance counters of the CPU
+      to enable profiling of a wide variety of interesting statistics,
+      which can also be used for basic time-spent profiling. All code
+      is profiled: hardware and software interrupt handlers, kernel
+      modules, the kernel, shared libraries, and applications.
+    '';
+    license = lib.licenses.gpl2;
+    homepage = "http://oprofile.sourceforge.net/";
+
+    platforms = lib.platforms.linux;
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/profiling/pprof/default.nix b/nixpkgs/pkgs/development/tools/profiling/pprof/default.nix
new file mode 100644
index 000000000000..05539f665861
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/profiling/pprof/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "pprof";
+  version = "unstable-2023-07-05";
+
+  src = fetchFromGitHub {
+    owner = "google";
+    repo = "pprof";
+    rev = "200ffdc848b879f8aff937ffeba601c186916257";
+    hash = "sha256-/Y1Tj9z+2MNe+b2vzd4F+PwHGSbCYP7HpbaDUL9ZzKQ=";
+  };
+
+  vendorHash = "sha256-MuejFoK49VMmLt7xsiX/4Av7TijPwM9/mewXlfdufd8=";
+
+  meta = with lib; {
+    description = "A tool for visualization and analysis of profiling data";
+    homepage = "https://github.com/google/pprof";
+    license = licenses.asl20;
+    longDescription = ''
+      pprof reads a collection of profiling samples in profile.proto format and
+      generates reports to visualize and help analyze the data. It can generate
+      both text and graphical reports (through the use of the dot visualization
+      package).
+
+      profile.proto is a protocol buffer that describes a set of callstacks and
+      symbolization information. A common usage is to represent a set of sampled
+      callstacks from statistical profiling. The format is described on the
+      proto/profile.proto file. For details on protocol buffers, see
+      https://developers.google.com/protocol-buffers
+
+      Profiles can be read from a local file, or over http. Multiple profiles of
+      the same type can be aggregated or compared.
+
+      If the profile samples contain machine addresses, pprof can symbolize them
+      through the use of the native binutils tools (addr2line and nm).
+
+      This is not an official Google product.
+    '';
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/profiling/sysprof/capture.nix b/nixpkgs/pkgs/development/tools/profiling/sysprof/capture.nix
new file mode 100644
index 000000000000..1739897096d7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/profiling/sysprof/capture.nix
@@ -0,0 +1,34 @@
+{ stdenv
+, lib
+, meson
+, ninja
+, sysprof
+}:
+
+stdenv.mkDerivation rec {
+  pname = "libsysprof-capture";
+
+  inherit (sysprof) src version;
+
+  nativeBuildInputs = [
+    meson
+    ninja
+  ];
+
+  mesonFlags = [
+    "-Dsysprofd=none"
+    "-Dgtk=false"
+    "-Dlibsysprof=false"
+    "-Dhelp=false"
+    "-Dtools=false"
+    "-Dtests=false"
+    "-Dexamples=false"
+  ];
+
+  meta = sysprof.meta // {
+    description = "Static library for Sysprof capture data generation";
+    license = lib.licenses.bsd2Patent;
+    platforms = lib.platforms.all;
+    pkgConfigModules = [ "sysprof-capture-4" ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/profiling/sysprof/default.nix b/nixpkgs/pkgs/development/tools/profiling/sysprof/default.nix
new file mode 100644
index 000000000000..96747b52a076
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/profiling/sysprof/default.nix
@@ -0,0 +1,86 @@
+{ stdenv
+, lib
+, desktop-file-utils
+, fetchurl
+, gettext
+, glib
+, gtk4
+, json-glib
+, itstool
+, libadwaita
+, libdex
+, libpanel
+, libunwind
+, libxml2
+, meson
+, ninja
+, pkg-config
+, polkit
+, shared-mime-info
+, systemd
+, wrapGAppsHook4
+, gnome
+}:
+
+stdenv.mkDerivation rec {
+  pname = "sysprof";
+  version = "45.1";
+
+  outputs = [ "out" "lib" "dev" ];
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "Mju51YVhPWDEOUYDMUUAEfK5Cz1ScmJb2FjaTBnfLPk=";
+  };
+
+  nativeBuildInputs = [
+    desktop-file-utils
+    gettext
+    itstool
+    libxml2
+    meson
+    ninja
+    pkg-config
+    shared-mime-info
+    wrapGAppsHook4
+  ];
+
+  buildInputs = [
+    glib
+    gtk4
+    json-glib
+    polkit
+    systemd
+    libadwaita
+    libdex
+    libpanel
+    libunwind
+  ];
+
+  mesonFlags = [
+    "-Dsystemdunitdir=lib/systemd/system"
+    # In a separate libsysprof-capture package
+    "-Dinstall-static=false"
+  ];
+
+  passthru = {
+    updateScript = gnome.updateScript {
+      packageName = pname;
+    };
+  };
+
+  meta = with lib; {
+    description = "System-wide profiler for Linux";
+    homepage = "https://wiki.gnome.org/Apps/Sysprof";
+    longDescription = ''
+      Sysprof is a sampling CPU profiler for Linux that uses the perf_event_open
+      system call to profile the entire system, not just a single
+      application.  Sysprof handles shared libraries and applications
+      do not need to be recompiled.  In fact they don't even have to
+      be restarted.
+    '';
+    license = licenses.gpl3Plus;
+    maintainers = teams.gnome.members;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/profiling/systemtap/default.nix b/nixpkgs/pkgs/development/tools/profiling/systemtap/default.nix
new file mode 100644
index 000000000000..25bdd45e03b8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/profiling/systemtap/default.nix
@@ -0,0 +1,55 @@
+{ lib, fetchgit, pkg-config, gettext, runCommand, makeWrapper
+, cpio, elfutils, kernel, gnumake, python3
+}:
+
+let
+  ## fetchgit info
+  url = "git://sourceware.org/git/systemtap.git";
+  rev = "release-${version}";
+  sha256 = "sha256-2L7+k/tgI6trkstDTY4xxfFzmNDlxbCHDRKAFaERQeM=";
+  version = "5.0a";
+
+  inherit (kernel) stdenv;
+
+  ## stap binaries
+  stapBuild = stdenv.mkDerivation {
+    pname = "systemtap";
+    inherit version;
+    src = fetchgit { inherit url rev sha256; };
+    nativeBuildInputs = [ pkg-config cpio python3 python3.pkgs.setuptools ];
+    buildInputs = [ elfutils gettext python3 ];
+    enableParallelBuilding = true;
+    env.NIX_CFLAGS_COMPILE = toString [ "-Wno-error=deprecated-declarations" ]; # Needed with GCC 12
+  };
+
+  ## symlink farm for --sysroot flag
+  sysroot = runCommand "systemtap-sysroot-${kernel.version}" { } ''
+    mkdir -p $out/boot $out/usr/lib/debug
+    ln -s ${kernel.dev}/vmlinux ${kernel.dev}/lib $out
+    ln -s ${kernel.dev}/vmlinux $out/usr/lib/debug
+    ln -s ${kernel}/System.map $out/boot/System.map-${kernel.version}
+  '';
+
+  pypkgs = with python3.pkgs; makePythonPath [ pyparsing ];
+
+in runCommand "systemtap-${kernel.version}-${version}" {
+  inherit stapBuild;
+  nativeBuildInputs = [ makeWrapper ];
+  meta = {
+    homepage = "https://sourceware.org/systemtap/";
+    description = "Provides a scripting language for instrumentation on a live kernel plus user-space";
+    license = lib.licenses.gpl2;
+    platforms = lib.systems.inspect.patterns.isGnu;
+  };
+} ''
+  mkdir -p $out/bin
+  for bin in $stapBuild/bin/*; do
+    ln -s $bin $out/bin
+  done
+  rm $out/bin/stap $out/bin/dtrace
+  makeWrapper $stapBuild/bin/stap $out/bin/stap \
+    --add-flags "--sysroot ${sysroot}" \
+    --prefix PATH : ${lib.makeBinPath [ stdenv.cc.cc stdenv.cc.bintools elfutils gnumake ]}
+  makeWrapper $stapBuild/bin/dtrace $out/bin/dtrace \
+    --prefix PYTHONPATH : ${pypkgs}
+''
diff --git a/nixpkgs/pkgs/development/tools/prospector/default.nix b/nixpkgs/pkgs/development/tools/prospector/default.nix
new file mode 100644
index 000000000000..598b2570600e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/prospector/default.nix
@@ -0,0 +1,79 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+let
+  setoptconf-tmp = python3.pkgs.callPackage ./setoptconf.nix { };
+in
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "prospector";
+  version = "1.9.0";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "PyCQA";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-94JGKX91d2kul+KMYohga9KCOj6RN/YKpD8e4nWSOOM=";
+  };
+
+  pythonRelaxDeps = [
+    "pyflakes"
+    "pep8-naming"
+    "flake8"
+  ];
+
+  nativeBuildInputs = with python3.pkgs; [
+    poetry-core
+    pythonRelaxDepsHook
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    bandit
+    dodgy
+    flake8
+    gitpython
+    mccabe
+    mypy
+    pep8-naming
+    pycodestyle
+    pydocstyle
+    pyflakes
+    pylint
+    pylint-celery
+    pylint-django
+    pylint-flask
+    pylint-plugin-utils
+    pyroma
+    pyyaml
+    requirements-detector
+    setoptconf-tmp
+    setuptools
+    toml
+    vulture
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [
+    "prospector"
+  ];
+
+  disabledTestPaths = [
+    # distutils.errors.DistutilsArgError: no commands supplied
+    "tests/tools/pyroma/test_pyroma_tool.py"
+  ];
+
+
+  meta = with lib; {
+    description = "Tool to analyse Python code and output information about errors, potential problems, convention violations and complexity";
+    homepage = "https://github.com/PyCQA/prospector";
+    changelog = "https://github.com/PyCQA/prospector/blob/v${version}/CHANGELOG.rst";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ kamadorueda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/prospector/setoptconf.nix b/nixpkgs/pkgs/development/tools/prospector/setoptconf.nix
new file mode 100644
index 000000000000..1d0f06a57e77
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/prospector/setoptconf.nix
@@ -0,0 +1,26 @@
+{ buildPythonPackage
+, fetchPypi
+, lib
+}:
+
+buildPythonPackage rec {
+  pname = "setoptconf-tmp";
+  version = "0.3.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0y2pgpraa36wzlzkxigvmz80mqd3mzcc9wv2yx9bliqks7fhlj70";
+  };
+
+  # Base tests provided via PyPi are broken
+  doCheck = false;
+
+  meta = with lib; {
+    homepage = "https://pypi.org/project/setoptconf-tmp";
+    description = "A module for retrieving program settings from various sources in a consistant method";
+    license = licenses.mit;
+    maintainers = with maintainers; [
+      kamadorueda
+    ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/proto-contrib/default.nix b/nixpkgs/pkgs/development/tools/proto-contrib/default.nix
new file mode 100644
index 000000000000..5437fd11345a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/proto-contrib/default.nix
@@ -0,0 +1,24 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+buildGoModule rec {
+  pname = "proto-contrib";
+  version = "0.9.0";
+
+  src = fetchFromGitHub {
+    owner = "emicklei";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0ksxic7cypv9gg8q5lkl5bla1n9i65z7b03cx9lwq6252glmf2jk";
+  };
+
+  vendorHash = "sha256-XAFB+DDWN7CLfNxIBqYJy88gUNrUJYExzy2/BFnBe8c=";
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Contributed tools and other packages on top of the Go proto package";
+    homepage = "https://github.com/emicklei/proto-contrib";
+    license = licenses.mit;
+    maintainers = with maintainers; [ kalbasit ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/protoc-gen-connect-go/default.nix b/nixpkgs/pkgs/development/tools/protoc-gen-connect-go/default.nix
new file mode 100644
index 000000000000..6a39509d0c67
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/protoc-gen-connect-go/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "protoc-gen-connect-go";
+  version = "1.14.0";
+
+  src = fetchFromGitHub {
+    owner = "connectrpc";
+    repo = "connect-go";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-lb0kMIcVOZz/8s7exsrv4I7PuF/mIzrZ6TSv4cii1UY=";
+  };
+
+  vendorHash = "sha256-tiTdGoAuY+DxYvwI1glX7LqgwOI3hCfrgszV81cxkE0=";
+
+  subPackages = [
+    "cmd/protoc-gen-connect-go"
+  ];
+
+  preCheck = ''
+    # test all paths
+    unset subPackages
+  '';
+
+  meta = with lib; {
+    description = "Simple, reliable, interoperable, better gRPC";
+    homepage = "https://github.com/connectrpc/connect-go";
+    changelog = "https://github.com/connectrpc/connect-go/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ kilimnik jk ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/protoc-gen-dart/default.nix b/nixpkgs/pkgs/development/tools/protoc-gen-dart/default.nix
new file mode 100644
index 000000000000..82f1c0de125d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/protoc-gen-dart/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, fetchFromGitHub
+, buildDartApplication
+}:
+
+buildDartApplication rec {
+  pname = "protoc-gen-dart";
+  version = "3.1.0";
+
+  src = fetchFromGitHub {
+    owner = "google";
+    repo = "protobuf.dart";
+    rev = "protobuf-v${version}";
+    sha256 = "sha256-2QnLS6GHhDHMCnAY+2c1wMyPY3EKtlijWHQC+9AVt0k=";
+  };
+  sourceRoot = "${src.name}/protoc_plugin";
+
+  pubspecLock = lib.importJSON ./pubspec.lock.json;
+
+  meta = with lib; {
+    description = "Protobuf plugin for generating Dart code";
+    homepage = "https://pub.dev/packages/protoc_plugin";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ lelgenio ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/protoc-gen-dart/pubspec.lock.json b/nixpkgs/pkgs/development/tools/protoc-gen-dart/pubspec.lock.json
new file mode 100644
index 000000000000..c48d164bc504
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/protoc-gen-dart/pubspec.lock.json
@@ -0,0 +1,496 @@
+{
+  "packages": {
+    "_fe_analyzer_shared": {
+      "dependency": "transitive",
+      "description": {
+        "name": "_fe_analyzer_shared",
+        "sha256": "eb376e9acf6938204f90eb3b1f00b578640d3188b4c8a8ec054f9f479af8d051",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "64.0.0"
+    },
+    "analyzer": {
+      "dependency": "transitive",
+      "description": {
+        "name": "analyzer",
+        "sha256": "69f54f967773f6c26c7dcb13e93d7ccee8b17a641689da39e878d5cf13b06893",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "6.2.0"
+    },
+    "args": {
+      "dependency": "transitive",
+      "description": {
+        "name": "args",
+        "sha256": "eef6c46b622e0494a36c5a12d10d77fb4e855501a91c1b9ef9339326e58f0596",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.4.2"
+    },
+    "async": {
+      "dependency": "transitive",
+      "description": {
+        "name": "async",
+        "sha256": "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.11.0"
+    },
+    "boolean_selector": {
+      "dependency": "transitive",
+      "description": {
+        "name": "boolean_selector",
+        "sha256": "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.1.1"
+    },
+    "collection": {
+      "dependency": "direct dev",
+      "description": {
+        "name": "collection",
+        "sha256": "ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.18.0"
+    },
+    "convert": {
+      "dependency": "transitive",
+      "description": {
+        "name": "convert",
+        "sha256": "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "3.1.1"
+    },
+    "coverage": {
+      "dependency": "transitive",
+      "description": {
+        "name": "coverage",
+        "sha256": "2fb815080e44a09b85e0f2ca8a820b15053982b2e714b59267719e8a9ff17097",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.6.3"
+    },
+    "crypto": {
+      "dependency": "transitive",
+      "description": {
+        "name": "crypto",
+        "sha256": "ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "3.0.3"
+    },
+    "dart_flutter_team_lints": {
+      "dependency": "direct dev",
+      "description": {
+        "name": "dart_flutter_team_lints",
+        "sha256": "e2f4fcafdaf0797e5af1c5c162d0b6c5025e9228ab3f95174340ed35c85dccd6",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.0.0"
+    },
+    "file": {
+      "dependency": "transitive",
+      "description": {
+        "name": "file",
+        "sha256": "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "7.0.0"
+    },
+    "fixnum": {
+      "dependency": "direct main",
+      "description": {
+        "name": "fixnum",
+        "sha256": "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.1.0"
+    },
+    "frontend_server_client": {
+      "dependency": "transitive",
+      "description": {
+        "name": "frontend_server_client",
+        "sha256": "408e3ca148b31c20282ad6f37ebfa6f4bdc8fede5b74bc2f08d9d92b55db3612",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "3.2.0"
+    },
+    "glob": {
+      "dependency": "transitive",
+      "description": {
+        "name": "glob",
+        "sha256": "0e7014b3b7d4dac1ca4d6114f82bf1782ee86745b9b42a92c9289c23d8a0ab63",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.1.2"
+    },
+    "http_multi_server": {
+      "dependency": "transitive",
+      "description": {
+        "name": "http_multi_server",
+        "sha256": "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "3.2.1"
+    },
+    "http_parser": {
+      "dependency": "transitive",
+      "description": {
+        "name": "http_parser",
+        "sha256": "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "4.0.2"
+    },
+    "io": {
+      "dependency": "transitive",
+      "description": {
+        "name": "io",
+        "sha256": "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.0.4"
+    },
+    "js": {
+      "dependency": "transitive",
+      "description": {
+        "name": "js",
+        "sha256": "f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "0.6.7"
+    },
+    "lints": {
+      "dependency": "transitive",
+      "description": {
+        "name": "lints",
+        "sha256": "0a217c6c989d21039f1498c3ed9f3ed71b354e69873f13a8dfc3c9fe76f1b452",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.1.1"
+    },
+    "logging": {
+      "dependency": "transitive",
+      "description": {
+        "name": "logging",
+        "sha256": "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.2.0"
+    },
+    "matcher": {
+      "dependency": "direct dev",
+      "description": {
+        "name": "matcher",
+        "sha256": "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "0.12.16"
+    },
+    "meta": {
+      "dependency": "transitive",
+      "description": {
+        "name": "meta",
+        "sha256": "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.9.1"
+    },
+    "mime": {
+      "dependency": "transitive",
+      "description": {
+        "name": "mime",
+        "sha256": "e4ff8e8564c03f255408decd16e7899da1733852a9110a58fe6d1b817684a63e",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.0.4"
+    },
+    "node_preamble": {
+      "dependency": "transitive",
+      "description": {
+        "name": "node_preamble",
+        "sha256": "6e7eac89047ab8a8d26cf16127b5ed26de65209847630400f9aefd7cd5c730db",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.0.2"
+    },
+    "package_config": {
+      "dependency": "transitive",
+      "description": {
+        "name": "package_config",
+        "sha256": "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.1.0"
+    },
+    "path": {
+      "dependency": "direct main",
+      "description": {
+        "name": "path",
+        "sha256": "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.8.3"
+    },
+    "pool": {
+      "dependency": "transitive",
+      "description": {
+        "name": "pool",
+        "sha256": "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.5.1"
+    },
+    "protobuf": {
+      "dependency": "direct main",
+      "description": {
+        "path": "../protobuf",
+        "relative": true
+      },
+      "source": "path",
+      "version": "3.1.0"
+    },
+    "pub_semver": {
+      "dependency": "transitive",
+      "description": {
+        "name": "pub_semver",
+        "sha256": "40d3ab1bbd474c4c2328c91e3a7df8c6dd629b79ece4c4bd04bee496a224fb0c",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.1.4"
+    },
+    "shelf": {
+      "dependency": "transitive",
+      "description": {
+        "name": "shelf",
+        "sha256": "ad29c505aee705f41a4d8963641f91ac4cee3c8fad5947e033390a7bd8180fa4",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.4.1"
+    },
+    "shelf_packages_handler": {
+      "dependency": "transitive",
+      "description": {
+        "name": "shelf_packages_handler",
+        "sha256": "89f967eca29607c933ba9571d838be31d67f53f6e4ee15147d5dc2934fee1b1e",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "3.0.2"
+    },
+    "shelf_static": {
+      "dependency": "transitive",
+      "description": {
+        "name": "shelf_static",
+        "sha256": "a41d3f53c4adf0f57480578c1d61d90342cd617de7fc8077b1304643c2d85c1e",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.1.2"
+    },
+    "shelf_web_socket": {
+      "dependency": "transitive",
+      "description": {
+        "name": "shelf_web_socket",
+        "sha256": "9ca081be41c60190ebcb4766b2486a7d50261db7bd0f5d9615f2d653637a84c1",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.0.4"
+    },
+    "source_map_stack_trace": {
+      "dependency": "transitive",
+      "description": {
+        "name": "source_map_stack_trace",
+        "sha256": "84cf769ad83aa6bb61e0aa5a18e53aea683395f196a6f39c4c881fb90ed4f7ae",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.1.1"
+    },
+    "source_maps": {
+      "dependency": "transitive",
+      "description": {
+        "name": "source_maps",
+        "sha256": "708b3f6b97248e5781f493b765c3337db11c5d2c81c3094f10904bfa8004c703",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "0.10.12"
+    },
+    "source_span": {
+      "dependency": "transitive",
+      "description": {
+        "name": "source_span",
+        "sha256": "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.10.0"
+    },
+    "stack_trace": {
+      "dependency": "transitive",
+      "description": {
+        "name": "stack_trace",
+        "sha256": "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.11.1"
+    },
+    "stream_channel": {
+      "dependency": "transitive",
+      "description": {
+        "name": "stream_channel",
+        "sha256": "ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.1.2"
+    },
+    "string_scanner": {
+      "dependency": "transitive",
+      "description": {
+        "name": "string_scanner",
+        "sha256": "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.2.0"
+    },
+    "term_glyph": {
+      "dependency": "transitive",
+      "description": {
+        "name": "term_glyph",
+        "sha256": "a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.2.1"
+    },
+    "test": {
+      "dependency": "direct dev",
+      "description": {
+        "name": "test",
+        "sha256": "9b0dd8e36af4a5b1569029949d50a52cb2a2a2fdaa20cebb96e6603b9ae241f9",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.24.6"
+    },
+    "test_api": {
+      "dependency": "transitive",
+      "description": {
+        "name": "test_api",
+        "sha256": "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "0.6.1"
+    },
+    "test_core": {
+      "dependency": "transitive",
+      "description": {
+        "name": "test_core",
+        "sha256": "4bef837e56375537055fdbbbf6dd458b1859881f4c7e6da936158f77d61ab265",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "0.5.6"
+    },
+    "typed_data": {
+      "dependency": "transitive",
+      "description": {
+        "name": "typed_data",
+        "sha256": "facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.3.2"
+    },
+    "vm_service": {
+      "dependency": "transitive",
+      "description": {
+        "name": "vm_service",
+        "sha256": "c538be99af830f478718b51630ec1b6bee5e74e52c8a802d328d9e71d35d2583",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "11.10.0"
+    },
+    "watcher": {
+      "dependency": "transitive",
+      "description": {
+        "name": "watcher",
+        "sha256": "3d2ad6751b3c16cf07c7fca317a1413b3f26530319181b37e3b9039b84fc01d8",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.1.0"
+    },
+    "web_socket_channel": {
+      "dependency": "transitive",
+      "description": {
+        "name": "web_socket_channel",
+        "sha256": "d88238e5eac9a42bb43ca4e721edba3c08c6354d4a53063afaa568516217621b",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.4.0"
+    },
+    "webkit_inspection_protocol": {
+      "dependency": "transitive",
+      "description": {
+        "name": "webkit_inspection_protocol",
+        "sha256": "67d3a8b6c79e1987d19d848b0892e582dbb0c66c57cc1fef58a177dd2aa2823d",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.2.0"
+    },
+    "yaml": {
+      "dependency": "transitive",
+      "description": {
+        "name": "yaml",
+        "sha256": "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "3.1.2"
+    }
+  },
+  "sdks": {
+    "dart": ">=3.0.0 <4.0.0"
+  }
+}
diff --git a/nixpkgs/pkgs/development/tools/protoc-gen-doc/default.nix b/nixpkgs/pkgs/development/tools/protoc-gen-doc/default.nix
new file mode 100644
index 000000000000..31e86f85cd08
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/protoc-gen-doc/default.nix
@@ -0,0 +1,30 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+buildGoModule rec {
+  pname = "protoc-gen-doc";
+  version = "1.5.1";
+
+  src = fetchFromGitHub {
+    owner = "pseudomuto";
+    repo = "protoc-gen-doc";
+    rev = "v${version}";
+    sha256 = "sha256-19CN62AwqQGq5Gb5kQqVYhs+LKsJ9K2L0VAakwzPD5Y=";
+  };
+
+  vendorHash = "sha256-K0rZBERSKob5ubZW28QpbcPhgFKOOASkd9UyC9f8gyQ=";
+
+  meta = with lib; {
+    description = "Documentation generator plugin for Google Protocol Buffers";
+    longDescription = ''
+      This is a documentation generator plugin for the Google Protocol Buffers
+      compiler (protoc). The plugin can generate HTML, JSON, DocBook and
+      Markdown documentation from comments in your .proto files.
+
+      It supports proto2 and proto3, and can handle having both in the same
+      context.
+    '';
+    homepage = "https://github.com/pseudomuto/protoc-gen-doc";
+    license = licenses.mit;
+    maintainers = with maintainers; [ kalbasit ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/protoc-gen-entgrpc/default.nix b/nixpkgs/pkgs/development/tools/protoc-gen-entgrpc/default.nix
new file mode 100644
index 000000000000..2047974cf286
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/protoc-gen-entgrpc/default.nix
@@ -0,0 +1,28 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "protoc-gen-entgrpc";
+  version = "0.4.5";
+
+  src = fetchFromGitHub {
+    owner = "ent";
+    repo = "contrib";
+    rev = "v${version}";
+    sha256 = "sha256-bEJjVNWd4NsUdWPqMZQ86U9F32q5M1iBRcS9MYDp9GE=";
+  };
+
+  vendorHash = "sha256-DgqCGXqEnLBxyLZJrTRZIeBIrHYA7TNMV4WTk/3IS8Y=";
+
+  subPackages = [ "entproto/cmd/protoc-gen-entgrpc" ];
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "Generator of an implementation of the service interface for ent protobuff";
+    downloadPage = "https://github.com/ent/contrib/";
+    license = licenses.asl20;
+    homepage = "https://entgo.io/";
+    maintainers = with maintainers; [ ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/development/tools/protoc-gen-go-grpc/default.nix b/nixpkgs/pkgs/development/tools/protoc-gen-go-grpc/default.nix
new file mode 100644
index 000000000000..fab6bfec12f0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/protoc-gen-go-grpc/default.nix
@@ -0,0 +1,25 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+}:
+
+buildGoModule rec {
+  pname = "protoc-gen-go-grpc";
+  version = "1.3.0";
+  modRoot = "cmd/protoc-gen-go-grpc";
+
+  src = fetchFromGitHub {
+    owner = "grpc";
+    repo = "grpc-go";
+    rev = "cmd/protoc-gen-go-grpc/v${version}";
+    sha256 = "sha256-Zy0k5X/KFzCao9xAGt5DNb0MMGEyqmEsDj+uvXI4xH4=";
+  };
+
+  vendorHash = "sha256-y+/hjYUTFZuq55YAZ5M4T1cwIR+XFQBmWVE+Cg1Y7PI=";
+
+  meta = with lib; {
+    description = "The Go language implementation of gRPC. HTTP/2 based RPC";
+    license = licenses.asl20;
+    maintainers = [ maintainers.raboof ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/protoc-gen-go-vtproto/default.nix b/nixpkgs/pkgs/development/tools/protoc-gen-go-vtproto/default.nix
new file mode 100644
index 000000000000..e1e716eee13a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/protoc-gen-go-vtproto/default.nix
@@ -0,0 +1,26 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+}:
+buildGoModule rec {
+  pname = "protoc-gen-go-vtproto";
+  version = "0.6.0";
+
+  src = fetchFromGitHub {
+    owner = "planetscale";
+    repo = "vtprotobuf";
+    rev = "v${version}";
+    sha256 = "sha256-ji6elc0hN49A4Ov/ckd8chPR4/8ZX11THzVz9HJGui4=";
+  };
+
+  vendorHash = "sha256-UMOEePOtOtmm9ShQy5LXcEUTv8/SIG9dU7/9vLhrBxQ=";
+
+  excludedPackages = [ "conformance" ];
+
+  meta = with lib; {
+    description = "A Protocol Buffers compiler that generates optimized marshaling & unmarshaling Go code for ProtoBuf APIv2";
+    homepage = "https://github.com/planetscale/vtprotobuf";
+    license = licenses.bsd3;
+    maintainers = [ maintainers.zane ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/protoc-gen-go/default.nix b/nixpkgs/pkgs/development/tools/protoc-gen-go/default.nix
new file mode 100644
index 000000000000..e1e06182672d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/protoc-gen-go/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "protoc-gen-go";
+  version = "1.32.0";
+
+  src = fetchFromGitHub {
+    owner = "protocolbuffers";
+    repo = "protobuf-go";
+    rev = "v${version}";
+    sha256 = "sha256-7i6neRiC0fdn5wnPDp7vCDPlVglzt7tDR0qtG9V/qZA=";
+  };
+
+  vendorHash = "sha256-nGI/Bd6eMEoY0sBwWEtyhFowHVvwLKjbT4yfzFz6Z3E=";
+
+  subPackages = [ "cmd/protoc-gen-go" ];
+
+  meta = with lib; {
+    description = "Go support for Google's protocol buffers";
+    homepage = "https://google.golang.org/protobuf";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ jojosch ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/protoc-gen-grpc-web/default.nix b/nixpkgs/pkgs/development/tools/protoc-gen-grpc-web/default.nix
new file mode 100644
index 000000000000..7308414504ed
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/protoc-gen-grpc-web/default.nix
@@ -0,0 +1,59 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, protobuf
+, isStatic ? stdenv.hostPlatform.isStatic
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "protoc-gen-grpc-web";
+  version = "1.5.0";
+
+  src = fetchFromGitHub {
+    owner = "grpc";
+    repo = "grpc-web";
+    rev = finalAttrs.version;
+    sha256 = "sha256-yqiSuqan4vynE3AS8OnYdzA+3AVlVFTBkxTuJe17114=";
+  };
+
+  sourceRoot = "${finalAttrs.src.name}/javascript/net/grpc/web/generator";
+
+  enableParallelBuilding = true;
+  strictDeps = true;
+  nativeBuildInputs = [ protobuf ];
+  buildInputs = [ protobuf ];
+
+  makeFlags = [
+    "PREFIX=$(out)"
+    "STATIC=${if isStatic then "yes" else "no"}"
+  ];
+
+  doCheck = true;
+  nativeCheckInputs = [ protobuf ];
+  checkPhase = ''
+    runHook preCheck
+
+    CHECK_TMPDIR="$TMPDIR/proto"
+    mkdir -p "$CHECK_TMPDIR"
+
+    protoc \
+      --proto_path="$src/packages/grpc-web/test/protos" \
+      --plugin="./protoc-gen-grpc-web" \
+      --grpc-web_out="import_style=commonjs,mode=grpcwebtext:$CHECK_TMPDIR" \
+      echo.proto
+
+    # check for grpc-web generated file
+    [ -f "$CHECK_TMPDIR/echo_grpc_web_pb.js" ]
+
+    runHook postCheck
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/grpc/grpc-web";
+    changelog = "https://github.com/grpc/grpc-web/blob/${finalAttrs.version}/CHANGELOG.md";
+    description = "gRPC web support for Google's protocol buffers";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ jk ];
+    platforms = platforms.unix;
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/protoc-gen-prost-crate/default.nix b/nixpkgs/pkgs/development/tools/protoc-gen-prost-crate/default.nix
new file mode 100644
index 000000000000..8503e9266944
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/protoc-gen-prost-crate/default.nix
@@ -0,0 +1,25 @@
+{ fetchCrate
+, lib
+, rustPlatform
+, protobuf
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "protoc-gen-prost-crate";
+  version = "0.3.1";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-MtGeU2PnVYPXb3nly2UaryjmjMz1lxcvYDjFiwf58FA=";
+  };
+
+  cargoSha256 = "sha256-dcKJRX/iHIWEmBD2nTMyQozxld8b7dhxxB85quPUysg=";
+
+  meta = with lib; {
+    description = "A protoc plugin that generates Cargo crates and include files for `protoc-gen-prost`";
+    homepage = "https://github.com/neoeinstein/protoc-gen-prost";
+    changelog = "https://github.com/neoeinstein/protoc-gen-prost/blob/main/CHANGELOG.md";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ felschr sitaaax ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/protoc-gen-prost-serde/default.nix b/nixpkgs/pkgs/development/tools/protoc-gen-prost-serde/default.nix
new file mode 100644
index 000000000000..843dc4fc684b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/protoc-gen-prost-serde/default.nix
@@ -0,0 +1,25 @@
+{ fetchCrate
+, lib
+, rustPlatform
+, protobuf
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "protoc-gen-prost-serde";
+  version = "0.2.3";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-V2Z6m9y/bBwrr1mgKXKZjVg+LqTe+GalN/AeaICyE64=";
+  };
+
+  cargoSha256 = "sha256-l27+Rs4TYIJXZVLj7Tjw8M5+7ivWEY0TXbLtbuzwxLw=";
+
+  meta = with lib; {
+    description = "A protoc plugin that generates serde serialization implementations for `protoc-gen-prost`";
+    homepage = "https://github.com/neoeinstein/protoc-gen-prost";
+    changelog = "https://github.com/neoeinstein/protoc-gen-prost/blob/main/CHANGELOG.md";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ felschr sitaaax ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/protoc-gen-prost/default.nix b/nixpkgs/pkgs/development/tools/protoc-gen-prost/default.nix
new file mode 100644
index 000000000000..645ecdee3081
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/protoc-gen-prost/default.nix
@@ -0,0 +1,25 @@
+{ fetchCrate
+, lib
+, rustPlatform
+, protobuf
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "protoc-gen-prost";
+  version = "0.2.3";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-QTt5mSUe41r2fxrgWj1l6fHC/utMVIgMi2ySsdGyl/Y=";
+  };
+
+  cargoSha256 = "sha256-ghXcyxG9zqUOFKGvUza29OgC3XiEtesqsAsfI/lFT08=";
+
+  meta = with lib; {
+    description = "Protocol Buffers compiler plugin powered by Prost";
+    homepage = "https://github.com/neoeinstein/protoc-gen-prost";
+    changelog = "https://github.com/neoeinstein/protoc-gen-prost/blob/main/CHANGELOG.md";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ felschr sitaaax ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/protoc-gen-rust/default.nix b/nixpkgs/pkgs/development/tools/protoc-gen-rust/default.nix
new file mode 100644
index 000000000000..7a1dcb4b3e48
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/protoc-gen-rust/default.nix
@@ -0,0 +1,29 @@
+{ fetchCrate
+, lib
+, rustPlatform
+, protobuf
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "protoc-gen-rust";
+  version = "3.2.0";
+
+  src = fetchCrate {
+    inherit version;
+    pname = "protobuf-codegen";
+    sha256 = "sha256-9Rf7GI/qxoqlISD169TJwUVAdJn8TpxTXDNxiQra2UY=";
+  };
+
+  cargoSha256 = "sha256-i1ZIEbU6tw7xA1w+ffD/h1HIkOwVep9wQJys9Bydvv0=";
+
+  cargoBuildFlags = ["--bin" pname];
+
+  nativeBuildInputs = [ protobuf ];
+
+  meta = with lib; {
+    description = "Protobuf plugin for generating Rust code";
+    homepage = "https://github.com/stepancheg/rust-protobuf";
+    license = licenses.mit;
+    maintainers = with maintainers; [ lucperkins ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/protoc-gen-tonic/default.nix b/nixpkgs/pkgs/development/tools/protoc-gen-tonic/default.nix
new file mode 100644
index 000000000000..7bc6fa52e54d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/protoc-gen-tonic/default.nix
@@ -0,0 +1,25 @@
+{ fetchCrate
+, lib
+, rustPlatform
+, protobuf
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "protoc-gen-tonic";
+  version = "0.3.0";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-jgU1XvUxIrZ72dLNPqDGHCONMlHsjW4k4vkO626iqxs=";
+  };
+
+  cargoSha256 = "sha256-FrkvL/uJitMkSyOytVSmlwr26yMVM12S2n+EaSw11CE=";
+
+  meta = with lib; {
+    description = "A protoc plugin that generates Tonic gRPC server and client code using the Prost code generation engine";
+    homepage = "https://github.com/neoeinstein/protoc-gen-prost";
+    changelog = "https://github.com/neoeinstein/protoc-gen-prost/blob/main/CHANGELOG.md";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ felschr sitaaax ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/protoc-gen-twirp/default.nix b/nixpkgs/pkgs/development/tools/protoc-gen-twirp/default.nix
new file mode 100644
index 000000000000..4b8ee1f35f65
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/protoc-gen-twirp/default.nix
@@ -0,0 +1,28 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "protoc-gen-twirp";
+  version = "8.1.3";
+
+  src = fetchFromGitHub {
+    owner = "twitchtv";
+    repo = "twirp";
+    rev = "v${version}";
+    sha256 = "sha256-p3gHVHGBHakOOQnJAuMK7vZumNXN15mOABuEHUG0wNs=";
+  };
+
+  goPackagePath = "github.com/twitchtv/twirp";
+
+  subPackages = [
+    "protoc-gen-twirp"
+  ];
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "A simple RPC framework with protobuf service definitions";
+    homepage = "https://github.com/twitchtv/twirp";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ jojosch ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/protoc-gen-twirp_php/default.nix b/nixpkgs/pkgs/development/tools/protoc-gen-twirp_php/default.nix
new file mode 100644
index 000000000000..30b2ff3ce78d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/protoc-gen-twirp_php/default.nix
@@ -0,0 +1,28 @@
+{ lib, buildGoModule, fetchgit }:
+
+buildGoModule rec {
+  pname = "protoc-gen-twirp_php";
+  version = "0.10.0";
+
+  # fetchFromGitHub currently not possible, because go.mod and go.sum are export-ignored
+  src = fetchgit {
+    url = "https://github.com/twirphp/twirp.git";
+    rev = "v${version}";
+    sha256 = "sha256-YMndB5DiER2Z1ARbw2cpxE1DBFCoVNWhMdsfA3X27EE=";
+  };
+
+  vendorHash = "sha256-Gf8thGuFAKX4pCNFJM3RbJ63vciLNcSqpOULcUOaGNw=";
+
+  subPackages = [ "protoc-gen-twirp_php" ];
+
+  ldflags = [
+    "-X main.version=${version}"
+  ];
+
+  meta = with lib; {
+    description = "PHP port of Twitch's Twirp RPC framework";
+    homepage = "https://github.com/twirphp/twirp";
+    license = licenses.mit;
+    maintainers = with maintainers; [ jojosch ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/protoc-gen-twirp_swagger/default.nix b/nixpkgs/pkgs/development/tools/protoc-gen-twirp_swagger/default.nix
new file mode 100644
index 000000000000..0b651a6ce0b4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/protoc-gen-twirp_swagger/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule {
+  pname = "protoc-gen-twirp_swagger";
+  version = "unstable-2021-03-29";
+
+  src = fetchFromGitHub {
+    owner = "elliots";
+    repo = "protoc-gen-twirp_swagger";
+    rev = "f21ef47d69e37c1602a7fb26146de05c092d30b6";
+    sha256 = "sha256-uHU15NbHK7SYgNS3VK21H/OqDo/JyyTZdXw3i9lsgLY=";
+  };
+
+  vendorHash = "sha256-g0+9l83Fc0XPzsZAKjLBrjD+tv2+Fot57hcilqAhOZk=";
+
+  subPackages = [ "." ];
+
+  meta = with lib; {
+    description = "Swagger generator for twirp";
+    homepage = "https://github.com/elliots/protoc-gen-twirp_swagger";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ jojosch ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/protoc-gen-twirp_typescript/default.nix b/nixpkgs/pkgs/development/tools/protoc-gen-twirp_typescript/default.nix
new file mode 100644
index 000000000000..259b2a8871a7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/protoc-gen-twirp_typescript/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule {
+  pname = "protoc-gen-twirp_typescript";
+  version = "unstable-2022-08-14";
+
+  src = fetchFromGitHub {
+    owner = "larrymyers";
+    repo = "protoc-gen-twirp_typescript";
+    rev = "535986b31881a214db3c04f122bcc96a2823a155";
+    sha256 = "sha256-LfF/n96LwRX8aoPHzCRI/QbDmZR9yMhE5yGhFAqa8nA=";
+  };
+
+  proxyVendor = true;
+  vendorHash = "sha256-UyxHa28SY60U8VeL7TbSTyscqN5T7tKGfuN2GIL6QIg";
+
+  subPackages = [ "." ];
+
+  meta = with lib; {
+    description = "Protobuf Plugin for Generating a Twirp Typescript Client";
+    homepage = "https://github.com/larrymyers/protoc-gen-twirp_typescript";
+    license = licenses.mit;
+    maintainers = with maintainers; [ jojosch dgollings ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/protoc-gen-validate/default.nix b/nixpkgs/pkgs/development/tools/protoc-gen-validate/default.nix
new file mode 100644
index 000000000000..b58988a4af59
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/protoc-gen-validate/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "protoc-gen-validate";
+  version = "1.0.4";
+
+  src = fetchFromGitHub {
+    owner = "bufbuild";
+    repo = "protoc-gen-validate";
+    rev = "v${version}";
+    sha256 = "sha256-NPjBVd5Ch8h2+48uymMRjjY6nepmGiY8z9Kwt+wN4lI=";
+  };
+
+  vendorHash = "sha256-1bR6cV7R9JEmayE3XN2fcrPQL6xspkKb+WYf+IrOhds=";
+
+  excludedPackages = [ "tests" ];
+
+  meta = with lib; {
+    description = "Protobuf plugin for generating polyglot message validators";
+    homepage = "https://github.com/envoyproxy/protoc-gen-validate";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ matthewpi ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/protolint/default.nix b/nixpkgs/pkgs/development/tools/protolint/default.nix
new file mode 100644
index 000000000000..02c5b18ad2e3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/protolint/default.nix
@@ -0,0 +1,40 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+buildGoModule rec {
+  pname = "protolint";
+  version = "0.47.5";
+
+  src = fetchFromGitHub {
+    owner = "yoheimuta";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-xXl9MY0oBjyDlLVvpdV7nquxUxahfPslxJeOeUmwFgk=";
+  };
+
+  vendorHash = "sha256-62SxRvoN4ejmAczs823jftXUmeI4ozfb6plHYT1JwZ0=";
+
+  # Something about the way we run tests causes issues. It doesn't happen
+  # when using "go test" directly:
+  # === RUN   TestEnumFieldNamesPrefixRule_Apply_fix/no_fix_for_a_correct_proto
+  #    util_test.go:35: open : no such file or directory
+  # === RUN   TestEnumFieldNamesPrefixRule_Apply_fix/fix_for_an_incorrect_proto
+  #    util_test.go:35: open : no such file or directory
+  excludedPackages = [ "internal" ];
+
+  ldflags = let
+    rev = builtins.substring 0 7 src.rev;
+  in [
+    "-X github.com/yoheimuta/protolint/internal/cmd.version=${version}"
+    "-X github.com/yoheimuta/protolint/internal/cmd.revision=${rev}"
+    "-X github.com/yoheimuta/protolint/internal/cmd/protocgenprotolint.version=${version}"
+    "-X github.com/yoheimuta/protolint/internal/cmd/protocgenprotolint.revision=${rev}"
+  ];
+
+  meta = with lib; {
+    description = "A pluggable linter and fixer to enforce Protocol Buffer style and conventions";
+    homepage = "https://github.com/yoheimuta/protolint";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = [ maintainers.zane ];
+    mainProgram = "protolint";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/protoscope/default.nix b/nixpkgs/pkgs/development/tools/protoscope/default.nix
new file mode 100644
index 000000000000..70eeab5f1575
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/protoscope/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "protoscope";
+  version = "unstable-2022-11-09";
+
+  src = fetchFromGitHub {
+    owner = "protocolbuffers";
+    repo = "protoscope";
+    rev = "8e7a6aafa2c9958527b1e0747e66e1bfff045819";
+    hash = "sha256-+VIy+CD6bKJzwtpHXRr9MqmsPE2MJ1dRdtvSMUkCh5I=";
+  };
+
+  vendorHash = "sha256-mK8eGo6oembs4nofvROn4g0+oO5E5/zQrmPKMe3xXik=";
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "Simple, human-editable language for representing and emitting the Protobuf wire format";
+    homepage = "https://github.com/protocolbuffers/protoscope";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ aaronjheng ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/prototool/default.nix b/nixpkgs/pkgs/development/tools/prototool/default.nix
new file mode 100644
index 000000000000..3e7c9b0b87db
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/prototool/default.nix
@@ -0,0 +1,34 @@
+{ lib, buildGoModule, fetchFromGitHub, makeWrapper, protobuf }:
+
+buildGoModule rec {
+  pname = "prototool";
+  version = "1.10.0";
+
+  src = fetchFromGitHub {
+    owner = "uber";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-T6SjjyHC4j5du2P4Emcfq/ZFbuCpMPPJFJTHb/FNMAo=";
+  };
+
+  vendorHash = "sha256-W924cy6bd3V/ep3JmzUCV7iuYNukEetr90SKmLMH0j8=";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  doCheck = false;
+
+  postInstall = ''
+    wrapProgram "$out/bin/prototool" \
+      --prefix PROTOTOOL_PROTOC_BIN_PATH : "${protobuf}/bin/protoc" \
+      --prefix PROTOTOOL_PROTOC_WKT_PATH : "${protobuf}/include"
+  '';
+
+  subPackages = [ "cmd/prototool" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/uber/prototool";
+    description = "Your Swiss Army Knife for Protocol Buffers";
+    maintainers = [ maintainers.marsam ];
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/pry/Gemfile b/nixpkgs/pkgs/development/tools/pry/Gemfile
new file mode 100644
index 000000000000..ec63e2251d5c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/pry/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'pry'
diff --git a/nixpkgs/pkgs/development/tools/pry/Gemfile.lock b/nixpkgs/pkgs/development/tools/pry/Gemfile.lock
new file mode 100644
index 000000000000..87f7e81fbe3a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/pry/Gemfile.lock
@@ -0,0 +1,17 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    coderay (1.1.3)
+    method_source (1.0.0)
+    pry (0.13.1)
+      coderay (~> 1.1)
+      method_source (~> 1.0)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  pry
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/development/tools/pry/default.nix b/nixpkgs/pkgs/development/tools/pry/default.nix
new file mode 100644
index 000000000000..c39af508591f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/pry/default.nix
@@ -0,0 +1,17 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "pry";
+  gemdir = ./.;
+  exes = [ "pry" ];
+
+  passthru.updateScript = bundlerUpdateScript "pry";
+
+  meta = with lib; {
+    description = "A Ruby runtime developer console and IRB alternative";
+    homepage    = "https://pryrepl.org";
+    license     = licenses.mit;
+    maintainers = [ maintainers.tckmn ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/pry/gemset.nix b/nixpkgs/pkgs/development/tools/pry/gemset.nix
new file mode 100644
index 000000000000..c3f42889e1ff
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/pry/gemset.nix
@@ -0,0 +1,33 @@
+{
+  coderay = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jvxqxzply1lwp7ysn94zjhh57vc14mcshw1ygw14ib8lhc00lyw";
+      type = "gem";
+    };
+    version = "1.1.3";
+  };
+  method_source = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pnyh44qycnf9mzi1j6fywd5fkskv3x7nmsqrrws0rjn5dd4ayfp";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  pry = {
+    dependencies = ["coderay" "method_source"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0iyw4q4an2wmk8v5rn2ghfy2jaz9vmw2nk8415nnpx2s866934qk";
+      type = "gem";
+    };
+    version = "0.13.1";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/pscale/default.nix b/nixpkgs/pkgs/development/tools/pscale/default.nix
new file mode 100644
index 000000000000..98b6e7e0c3bf
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/pscale/default.nix
@@ -0,0 +1,49 @@
+{ buildGoModule
+, fetchFromGitHub
+, installShellFiles
+, lib
+, pscale
+, testers
+}:
+
+buildGoModule rec {
+  pname = "pscale";
+  version = "0.182.0";
+
+  src = fetchFromGitHub {
+    owner = "planetscale";
+    repo = "cli";
+    rev = "v${version}";
+    sha256 = "sha256-zqwdTtNbPm9D0zfVI8zd3hFM6zLQVxXyxNOyEW1gSHY=";
+  };
+
+  vendorHash = "sha256-93Eu38tDxV4pT4HtmssFckYwdnkOaW2IY6PsqT9W73c=";
+
+  ldflags = [
+    "-s" "-w"
+    "-X main.version=v${version}"
+    "-X main.commit=v${version}"
+    "-X main.date=unknown"
+  ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    installShellCompletion --cmd pscale \
+      --bash <($out/bin/pscale completion bash) \
+      --fish <($out/bin/pscale completion fish) \
+      --zsh <($out/bin/pscale completion zsh)
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = pscale;
+  };
+
+  meta = with lib; {
+    description = "The CLI for PlanetScale Database";
+    changelog = "https://github.com/planetscale/cli/releases/tag/v${version}";
+    homepage = "https://www.planetscale.com/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ pimeys kashw2 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/pulumictl/default.nix b/nixpkgs/pkgs/development/tools/pulumictl/default.nix
new file mode 100644
index 000000000000..8a18b4424201
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/pulumictl/default.nix
@@ -0,0 +1,28 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "pulumictl";
+  version = "0.0.46";
+
+  src = fetchFromGitHub {
+    owner = "pulumi";
+    repo = "pulumictl";
+    rev = "v${version}";
+    sha256 = "sha256-7A6dx/5091FIQ2AB6C+Z2CjhTBx2e6iB21Du2u9EiHY=";
+  };
+
+  vendorHash = "sha256-Wktr3TXSIIzbkiT3Gk5i4K58gahnxySi6ht30li+Z0o=";
+
+  ldflags = [
+    "-s" "-w" "-X=github.com/pulumi/pulumictl/pkg/version.Version=${src.rev}"
+  ];
+
+  subPackages = [ "cmd/pulumictl" ];
+
+  meta = with lib; {
+    description = "Swiss Army Knife for Pulumi Development";
+    homepage = "https://github.com/pulumi/pulumictl";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ vincentbernat ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/pup/default.nix b/nixpkgs/pkgs/development/tools/pup/default.nix
new file mode 100644
index 000000000000..d7ca815babd4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/pup/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "pup";
+  version = "unstable-2022-03-06";
+
+  src = fetchFromGitHub {
+    owner = "ericchiang";
+    repo = "pup";
+    rev = "5a57cf111366c7c08999a34b2afd7ba36d58a96d";
+    hash = "sha256-Ledg3xPbu71L5qUY033bru/lw03jws3s4YlAarIuqaA=";
+  };
+
+  vendorHash = "sha256-/MDSWIuSYNxKbTslqIooI2qKA8Pye0yJF2dY8g8qbWI=";
+
+  meta = with lib; {
+    description = "Parsing HTML at the command line";
+    homepage = "https://github.com/ericchiang/pup";
+    license = licenses.mit;
+    maintainers = with maintainers; [ yana ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/puppet/puppet-lint/Gemfile b/nixpkgs/pkgs/development/tools/puppet/puppet-lint/Gemfile
new file mode 100644
index 000000000000..105049819129
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/puppet/puppet-lint/Gemfile
@@ -0,0 +1,5 @@
+# frozen_string_literal: true
+
+source "https://rubygems.org"
+
+gem "puppet-lint"
diff --git a/nixpkgs/pkgs/development/tools/puppet/puppet-lint/Gemfile.lock b/nixpkgs/pkgs/development/tools/puppet/puppet-lint/Gemfile.lock
new file mode 100644
index 000000000000..7569b5e2d13c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/puppet/puppet-lint/Gemfile.lock
@@ -0,0 +1,13 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    puppet-lint (2.5.2)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  puppet-lint
+
+BUNDLED WITH
+   2.2.24
diff --git a/nixpkgs/pkgs/development/tools/puppet/puppet-lint/default.nix b/nixpkgs/pkgs/development/tools/puppet/puppet-lint/default.nix
new file mode 100644
index 000000000000..2940605b1b08
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/puppet/puppet-lint/default.nix
@@ -0,0 +1,7 @@
+{ bundlerApp }:
+
+bundlerApp {
+  pname = "puppet-lint";
+  gemdir = ./.;
+  exes = [ "puppet-lint" ];
+}
diff --git a/nixpkgs/pkgs/development/tools/puppet/puppet-lint/gemset.nix b/nixpkgs/pkgs/development/tools/puppet/puppet-lint/gemset.nix
new file mode 100644
index 000000000000..e3911e63536a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/puppet/puppet-lint/gemset.nix
@@ -0,0 +1,12 @@
+{
+  puppet-lint = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1rcj3cb6lf90g6vvhh3c9p8yn7pgibglf9k5878bzd6pn5ag0h9v";
+      type = "gem";
+    };
+    version = "2.5.2";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/pur/default.nix b/nixpkgs/pkgs/development/tools/pur/default.nix
new file mode 100644
index 000000000000..9f8527b34765
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/pur/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, python3
+, fetchFromGitHub
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "pur";
+  version = "7.3.1";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "alanhamlett";
+    repo = "pip-update-requirements";
+    rev = "refs/tags/${version}";
+    hash = "sha256-W6otdj1C3Nn3DUvwp9MPqMo2y4ITqgYrqlW/uxIj2YA=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    click
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [
+    "pur"
+  ];
+
+  meta = with lib; {
+    description = "Python library for update and track the requirements";
+    homepage = "https://github.com/alanhamlett/pip-update-requirements";
+    changelog = "https://github.com/alanhamlett/pip-update-requirements/blob/${version}/HISTORY.rst";
+    license = with licenses; [ bsd2 ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/purescript/spago/default.nix b/nixpkgs/pkgs/development/tools/purescript/spago/default.nix
new file mode 100644
index 000000000000..82d3be2fd469
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/purescript/spago/default.nix
@@ -0,0 +1,61 @@
+{ haskell
+, lib
+
+# The following are only needed for the passthru.tests:
+, cacert
+, git
+, nodejs
+, purescript
+, runCommand
+}:
+
+let
+  spago =
+    lib.pipe
+      haskell.packages.ghc90.spago
+      [ haskell.lib.compose.justStaticExecutables
+        (haskell.lib.compose.overrideCabal (oldAttrs: {
+          changelog = "https://github.com/purescript/spago/releases/tag/${oldAttrs.version}";
+        }))
+      ];
+in
+
+spago.overrideAttrs (oldAttrs: {
+  passthru = (oldAttrs.passthru or {}) // {
+    updateScript = ./update.sh;
+
+    # These tests can be run with the following command.  The tests access the
+    # network, so they cannot be run in the nix sandbox.  sudo is needed in
+    # order to change the sandbox option.
+    #
+    # $ sudo nix-build -A spago.passthru.tests --option sandbox relaxed
+    #
+    tests =
+      runCommand
+        "spago-tests"
+        {
+          __noChroot = true;
+          nativeBuildInputs = [
+            cacert
+            git
+            nodejs
+            purescript
+            spago
+          ];
+        }
+        ''
+          # spago expects HOME to be set because it creates a cache file under
+          # home.
+          HOME=$(pwd)
+
+          spago --verbose init
+          spago --verbose build
+          spago --verbose test
+
+          touch $out
+        '';
+  };
+  meta = (oldAttrs.meta or {}) // {
+    mainProgram = "spago";
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/purescript/spago/spago.nix b/nixpkgs/pkgs/development/tools/purescript/spago/spago.nix
new file mode 100644
index 000000000000..e3636e16f58c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/purescript/spago/spago.nix
@@ -0,0 +1,46 @@
+# This has been automatically generated by the script
+# ./update.sh.  This should not be changed by hand.
+{ mkDerivation, aeson, aeson-pretty, ansi-terminal, async-pool
+, base, bower-json, bytestring, containers, cryptonite, dhall
+, directory, either, extra, fetchgit, file-embed, filepath, foldl
+, fsnotify, generic-lens, Glob, hspec, hspec-discover
+, hspec-megaparsec, http-client, http-conduit, http-types
+, lens-family-core, lib, megaparsec, mtl, network-uri, open-browser
+, optparse-applicative, prettyprinter, process, QuickCheck, retry
+, rio, rio-orphans, safe, semver-range, stm, stringsearch, tar
+, template-haskell, temporary, text, time, transformers, turtle
+, unliftio, unordered-containers, utf8-string, versions, with-utf8
+, zlib
+}:
+mkDerivation {
+  pname = "spago";
+  version = "0.20.9";
+  src = fetchgit {
+    url = "https://github.com/purescript/spago.git";
+    sha256 = "00vdqg7vaw3d9zwh47886lw9fhhlwjagzhaj3aqz4xm92pjavhih";
+    rev = "d16d4914200783fbd820ba89dbdf67270454faf5";
+    fetchSubmodules = true;
+  };
+  isLibrary = true;
+  isExecutable = true;
+  libraryHaskellDepends = [
+    aeson aeson-pretty ansi-terminal async-pool base bower-json
+    bytestring containers cryptonite dhall directory either file-embed
+    filepath foldl fsnotify generic-lens Glob http-client http-conduit
+    http-types lens-family-core megaparsec mtl network-uri open-browser
+    optparse-applicative prettyprinter process retry rio rio-orphans
+    safe semver-range stm stringsearch tar template-haskell temporary
+    text time transformers turtle unliftio unordered-containers
+    utf8-string versions with-utf8 zlib
+  ];
+  executableHaskellDepends = [
+    ansi-terminal base text turtle with-utf8
+  ];
+  testHaskellDepends = [
+    base containers directory extra hspec hspec-megaparsec megaparsec
+    process QuickCheck temporary text turtle versions
+  ];
+  testToolDepends = [ hspec-discover ];
+  homepage = "https://github.com/purescript/spago#readme";
+  license = lib.licenses.bsd3;
+}
diff --git a/nixpkgs/pkgs/development/tools/purescript/spago/update.sh b/nixpkgs/pkgs/development/tools/purescript/spago/update.sh
new file mode 100755
index 000000000000..b97b0fe94a9c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/purescript/spago/update.sh
@@ -0,0 +1,39 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p cabal2nix curl jq haskellPackages.cabal2nix-unstable -I nixpkgs=.
+#
+# This script will update the spago derivation to the latest version using
+# cabal2nix.
+#
+# Note that you should always try building spago after updating it here, since
+# some of the overrides in pkgs/development/haskell/configuration-nix.nix may
+# need to be updated/changed.
+
+set -eo pipefail
+
+# This is the directory of this update.sh script.
+script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
+
+# Spago derivation created with cabal2nix.
+spago_derivation_file="${script_dir}/spago.nix"
+
+# This is the current revision of spago in Nixpkgs.
+old_version="$(sed -En 's/.*\bversion = "(.*?)".*/\1/p' "$spago_derivation_file")"
+
+# This is the latest release version of spago on GitHub.
+new_version=$(curl --silent "https://api.github.com/repos/purescript/spago/releases" | jq '.[0].tag_name' --raw-output)
+
+echo "Updating spago from old version $old_version to new version $new_version."
+echo "Running cabal2nix and outputting to ${spago_derivation_file}..."
+
+echo "# This has been automatically generated by the script" > "$spago_derivation_file"
+echo "# ./update.sh.  This should not be changed by hand." >> "$spago_derivation_file"
+
+cabal2nix --revision "$new_version" "https://github.com/purescript/spago.git" >> "$spago_derivation_file"
+
+# TODO: This should ideally also automatically update the docsSearchVersion
+# from pkgs/development/haskell/configuration-nix.nix.
+
+echo
+echo "Finished.  Make sure you run the following commands to confirm Spago builds correctly:"
+echo ' - `nix build -L -f ./. spago`'
+echo ' - `sudo nix build -L -f ./. spago.passthru.tests --option sandbox relaxed`'
diff --git a/nixpkgs/pkgs/development/tools/pxview/default.nix b/nixpkgs/pkgs/development/tools/pxview/default.nix
new file mode 100644
index 000000000000..84bf11c44830
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/pxview/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchurl, pkg-config, perl, perlPackages, pxlib }:
+
+stdenv.mkDerivation rec {
+  pname = "pxview";
+  version = "0.2.5";
+  src = fetchurl {
+    url = "mirror://sourceforge/pxlib/${pname}_${version}.orig.tar.gz";
+    sha256 = "1kpdqs6lvnyj02v9fbz1s427yqhgrxp7zw63rzfgiwd4iqp75139";
+  };
+
+  buildInputs = [ pxlib perl ] ++ (with perlPackages; [ libxml_perl ]);
+  nativeBuildInputs = [ pkg-config ];
+
+  configureFlags = [ "--with-pxlib=${pxlib.out}" ];
+
+  # https://sourceforge.net/p/pxlib/bugs/12/
+  LDFLAGS = "-lm";
+  hardeningDisable = [ "format" ];
+
+  meta = with lib; {
+    description = "Program to convert Paradox databases";
+    homepage = "https://pxlib.sourceforge.net/pxview/";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.winpat ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/py-spy/default.nix b/nixpkgs/pkgs/development/tools/py-spy/default.nix
new file mode 100644
index 000000000000..3b907c201089
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/py-spy/default.nix
@@ -0,0 +1,58 @@
+{ lib
+, stdenv
+, darwin
+, fetchFromGitHub
+, libunwind
+, python3
+, rustPlatform
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "py-spy";
+  version = "0.3.14";
+
+  src = fetchFromGitHub {
+    owner = "benfred";
+    repo = "py-spy";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-NciyzKiDKIMeuHhTjzmHIc3dYW4AniuCNjZugm4hMss=";
+  };
+
+  cargoHash = "sha256-nm+44YWSJOOg9a9d8b3APXW50ThV3iA2C/QsJMttscE=";
+
+  # error: linker `arm-linux-gnueabihf-gcc` not found
+  postPatch = ''
+    rm .cargo/config
+  '';
+
+  nativeBuildInputs = [
+    rustPlatform.bindgenHook
+  ];
+
+  nativeCheckInputs = [
+    python3
+  ];
+
+  buildInputs = lib.optionals (stdenv.isDarwin && stdenv.isx86_64) [
+    # Pull a header that contains a definition of proc_pid_rusage().
+    darwin.apple_sdk_11_0.Libsystem
+  ];
+
+  env.NIX_CFLAGS_COMPILE = "-L${libunwind}/lib";
+
+  checkFlags = [
+    # thread 'python_data_access::tests::test_copy_string' panicked at 'called `Result::unwrap()` on an `Err`
+    "--skip=python_data_access::tests::test_copy_string"
+  ] ++ lib.optionals (stdenv.hostPlatform.system == "x86_64-linux") [
+    # panicked at 'called `Result::unwrap()` on an `Err` value: failed to get os threadid
+    "--skip=test_thread_reuse"
+  ];
+
+  meta = with lib; {
+    description = "Sampling profiler for Python programs";
+    homepage = "https://github.com/benfred/py-spy";
+    changelog = "https://github.com/benfred/py-spy/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ lnl7 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/pyenv/default.nix b/nixpkgs/pkgs/development/tools/pyenv/default.nix
new file mode 100644
index 000000000000..c033769c8520
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/pyenv/default.nix
@@ -0,0 +1,51 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, installShellFiles
+}:
+
+stdenv.mkDerivation rec {
+  pname = "pyenv";
+  version = "2.3.35";
+
+  src = fetchFromGitHub {
+    owner = "pyenv";
+    repo = "pyenv";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-tNTHRSzYCelByEt8bN7BhUBGQCAJfZVjWIYTr0VhbO4=";
+  };
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  configureScript = "src/configure";
+
+  makeFlags = ["-C" "src"];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p "$out"
+    cp -R bin "$out/bin"
+    cp -R libexec "$out/libexec"
+    cp -R plugins "$out/plugins"
+
+    runHook postInstall
+  '';
+
+  postInstall = ''
+    installManPage man/man1/pyenv.1
+    installShellCompletion completions/pyenv.{bash,fish,zsh}
+  '';
+
+  meta = with lib; {
+    description = "Simple Python version management";
+    homepage = "https://github.com/pyenv/pyenv";
+    changelog = "https://github.com/pyenv/pyenv/blob/${src.rev}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ tjni ];
+    platforms = platforms.all;
+    mainProgram = "pyenv";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/pylint-exit/default.nix b/nixpkgs/pkgs/development/tools/pylint-exit/default.nix
new file mode 100644
index 000000000000..6bd5591b57e9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/pylint-exit/default.nix
@@ -0,0 +1,36 @@
+{ lib, fetchFromGitHub, python3Packages }:
+
+with python3Packages; buildPythonApplication rec {
+  pname = "pylint-exit";
+  version = "1.2.0";
+
+  src = fetchFromGitHub {
+    owner = "jongracecox";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0hwfny48g394visa3xd15425fsw596r3lhkfhswpjrdk2mnk3cny";
+  };
+
+  # Converting the shebang manually as it is not picked up by patchShebangs
+  postPatch = ''
+    substituteInPlace pylint_exit.py \
+      --replace "#!/usr/local/bin/python" "#!${python.interpreter}"
+  '';
+
+  # See https://github.com/jongracecox/pylint-exit/pull/7
+  buildInputs = [ m2r ];
+
+  # setup.py reads its version from the TRAVIS_TAG environment variable
+  TRAVIS_TAG = version;
+
+  checkPhase = ''
+    ${python.interpreter} -m doctest pylint_exit.py
+  '';
+
+  meta = with lib; {
+    description = "Utility to handle pylint exit codes in an OS-friendly way";
+    license = licenses.mit;
+    homepage = "https://github.com/jongracecox/pylint-exit";
+    maintainers = [ maintainers.fabiangd ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/pypi-mirror/default.nix b/nixpkgs/pkgs/development/tools/pypi-mirror/default.nix
new file mode 100644
index 000000000000..f2a629042fd6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/pypi-mirror/default.nix
@@ -0,0 +1,24 @@
+{ fetchFromGitHub
+, lib
+, python3
+}:
+python3.pkgs.buildPythonApplication rec {
+  pname = "pypi-mirror";
+  version = "5.2.0";
+
+  src = fetchFromGitHub {
+    owner = "montag451";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    sha256 = "sha256-bvnOieNs8pCDKuCSJx88vRxFPcOGWUj/i3mNS6E/nok=";
+  };
+
+  pythonImportsCheck = [ "pypi_mirror" ];
+
+  meta = with lib; {
+    description = "A script to create a partial PyPI mirror";
+    homepage = "https://github.com/montag451/pypi-mirror";
+    license = licenses.mit;
+    maintainers = with maintainers; [ kamadorueda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/qc/default.nix b/nixpkgs/pkgs/development/tools/qc/default.nix
new file mode 100644
index 000000000000..786ab73758a8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/qc/default.nix
@@ -0,0 +1,43 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles }:
+
+buildGoModule rec {
+  pname = "qc";
+  version = "0.5.1";
+
+  src = fetchFromGitHub {
+    owner = "qownnotes";
+    repo = "qc";
+    rev = "v${version}";
+    hash = "sha256-SrvcRF2yRGGPTk835ykG+NH9WPoc/bXO5tSj43Q7T3g=";
+  };
+
+  vendorHash = "sha256-7t5rQliLm6pMUHhtev/kNrQ7AOvmA/rR93SwNQhov6o=";
+
+  ldflags = [
+    "-s" "-w" "-X=github.com/qownnotes/qc/cmd.version=${version}"
+  ];
+
+  # There are no automated tests
+  doCheck = false;
+
+  subPackages = [ "." ];
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  postInstall = ''
+    export HOME=$(mktemp -d)
+    installShellCompletion --cmd qc \
+      --bash <($out/bin/qc completion bash) \
+      --fish <($out/bin/qc completion fish) \
+      --zsh <($out/bin/qc completion zsh)
+  '';
+
+  meta = with lib; {
+    description = "QOwnNotes command-line snippet manager";
+    homepage = "https://github.com/qownnotes/qc";
+    license = licenses.mit;
+    maintainers = with maintainers; [ pbek totoroot ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/qtcreator/default.nix b/nixpkgs/pkgs/development/tools/qtcreator/default.nix
new file mode 100644
index 000000000000..f87bb3d2b1ed
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/qtcreator/default.nix
@@ -0,0 +1,104 @@
+{ stdenv
+, lib
+, fetchurl
+, cmake
+, pkg-config
+, ninja
+, python3
+, qtbase
+, qt5compat
+, qtdeclarative
+, qtdoc
+, qtquick3d
+, qtquicktimeline
+, qtserialport
+, qtsvg
+, qttools
+, qtwebengine
+, qtwayland
+, qtshadertools
+, wrapQtAppsHook
+, yaml-cpp
+, litehtml
+, gumbo
+, llvmPackages
+, rustc-demangle
+, elfutils
+, perf
+}:
+
+stdenv.mkDerivation rec {
+  pname = "qtcreator";
+  version = "12.0.1";
+
+  src = fetchurl {
+    url = "https://download.qt.io/official_releases/${pname}/${lib.versions.majorMinor version}/${version}/qt-creator-opensource-src-${version}.tar.xz";
+    hash = "sha256-ZvuSws7QkoKeMyHFoJEeLemDCdAxDnq5SaOaUCOOA/M=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    (qttools.override { withClang = true; })
+    wrapQtAppsHook
+    python3
+    ninja
+  ];
+
+  buildInputs = [
+    qtbase
+    qtdoc
+    qtsvg
+    qtquick3d
+    qtwebengine
+    qtwayland
+    qtserialport
+    qtshadertools
+    qt5compat
+    qtdeclarative
+    qtquicktimeline
+    yaml-cpp
+    litehtml
+    gumbo
+    llvmPackages.libclang
+    llvmPackages.llvm
+    rustc-demangle
+    elfutils
+  ];
+
+  cmakeFlags = [
+    # workaround for missing CMAKE_INSTALL_DATAROOTDIR
+    # in pkgs/development/tools/build-managers/cmake/setup-hook.sh
+    "-DCMAKE_INSTALL_DATAROOTDIR=${placeholder "out"}/share"
+    # qtdeclarative in nixpkgs does not provide qmlsc
+    # fix can't find Qt6QmlCompilerPlusPrivate
+    "-DQT_NO_FIND_QMLSC=TRUE"
+    "-DWITH_DOCS=ON"
+    "-DBUILD_DEVELOPER_DOCS=ON"
+    "-DBUILD_QBS=OFF"
+    "-DQTC_CLANG_BUILDMODE_MATCH=ON"
+    "-DCLANGTOOLING_LINK_CLANG_DYLIB=ON"
+  ];
+
+  qtWrapperArgs = [
+    "--set-default PERFPROFILER_PARSER_FILEPATH ${lib.getBin perf}/bin"
+  ];
+
+  postInstall = ''
+    substituteInPlace $out/share/applications/org.qt-project.qtcreator.desktop \
+      --replace "Exec=qtcreator" "Exec=$out/bin/qtcreator"
+  '';
+
+  meta = with lib; {
+    description = "Cross-platform IDE tailored to the needs of Qt developers";
+    longDescription = ''
+      Qt Creator is a cross-platform IDE (integrated development environment)
+      tailored to the needs of Qt developers. It includes features such as an
+      advanced code editor, a visual debugger and a GUI designer.
+    '';
+    homepage = "https://wiki.qt.io/Qt_Creator";
+    license = licenses.gpl3Only; # annotated with The Qt Company GPL Exception 1.0
+    maintainers = [ maintainers.rewine ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/quick-lint-js/default.nix b/nixpkgs/pkgs/development/tools/quick-lint-js/default.nix
new file mode 100644
index 000000000000..794e00f0908b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/quick-lint-js/default.nix
@@ -0,0 +1,61 @@
+{ buildPackages, cmake, fetchFromGitHub, lib, ninja, stdenv, testers, quick-lint-js }:
+
+let
+  version = "3.0.0";
+
+  src = fetchFromGitHub {
+    owner = "quick-lint";
+    repo = "quick-lint-js";
+    rev = version;
+    hash = "sha256-7apzP37GK5ZbCxcWfjK1ID6sYa24uoS1GUH3CBDmcRA=";
+  };
+
+  quick-lint-js-build-tools = buildPackages.stdenv.mkDerivation {
+    pname = "quick-lint-js-build-tools";
+    inherit version src;
+
+    nativeBuildInputs = [ cmake ninja ];
+    doCheck = false;
+
+    cmakeFlags = [
+      "-DQUICK_LINT_JS_ENABLE_BUILD_TOOLS=ON"
+      # Temporary workaround for https://github.com/NixOS/nixpkgs/pull/108496#issuecomment-1192083379
+      "-DCMAKE_SKIP_BUILD_RPATH=ON"
+    ];
+    ninjaFlags = "quick-lint-js-build-tools";
+
+    installPhase = ''
+      runHook preInstall
+      cmake --install . --component build-tools
+      runHook postInstall
+    '';
+  };
+in
+stdenv.mkDerivation rec {
+  pname = "quick-lint-js";
+  inherit version src;
+
+  nativeBuildInputs = [ cmake ninja ];
+  doCheck = true;
+
+  cmakeFlags = [
+    "-DQUICK_LINT_JS_USE_BUILD_TOOLS=${quick-lint-js-build-tools}/bin"
+    # Temporary workaround for https://github.com/NixOS/nixpkgs/pull/108496#issuecomment-1192083379
+    "-DCMAKE_SKIP_BUILD_RPATH=ON"
+  ];
+
+  passthru.tests = {
+    version = testers.testVersion { package = quick-lint-js; };
+  };
+
+  meta = with lib; {
+    description = "Find bugs in Javascript programs";
+    homepage = "https://quick-lint-js.com";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ ratsclub ];
+    platforms = platforms.all;
+  };
+
+  # Expose quick-lint-js-build-tools to nix repl as quick-lint-js.build-tools.
+  passthru.build-tools = quick-lint-js-build-tools;
+}
diff --git a/nixpkgs/pkgs/development/tools/quicktemplate/default.nix b/nixpkgs/pkgs/development/tools/quicktemplate/default.nix
new file mode 100644
index 000000000000..a339c8e28961
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/quicktemplate/default.nix
@@ -0,0 +1,23 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "quicktemplate";
+  version = "1.7.0";
+
+  src = fetchFromGitHub {
+    owner = "valyala";
+    repo = "quicktemplate";
+    rev = "v${version}";
+    sha256 = "0xzsvhpllmzmyfg8sj1dpp02826j1plmyrdvqbwryzhf2ci33nqr";
+  };
+
+  vendorHash = null;
+
+  meta = with lib; {
+    homepage = "https://github.com/valyala/quicktemplate";
+    description = "Fast, powerful, yet easy to use template engine for Go";
+    license = licenses.mit;
+    maintainers = with maintainers; [ Madouura ];
+    mainProgram = "qtc";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/quilt/default.nix b/nixpkgs/pkgs/development/tools/quilt/default.nix
new file mode 100644
index 000000000000..fec73b264819
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/quilt/default.nix
@@ -0,0 +1,65 @@
+{ lib
+, stdenv
+, fetchurl
+, makeWrapper
+, bash
+, coreutils
+, diffstat
+, diffutils
+, findutils
+, gawk
+, gnugrep
+, gnused
+, patch
+, perl
+, unixtools
+}:
+
+stdenv.mkDerivation rec {
+
+  pname = "quilt";
+  version = "0.67";
+
+  src = fetchurl {
+    url = "mirror://savannah/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "sha256-O+O+CYfnKmw2Rni7gn4+H8wQMitWvF8CtXZpj1UBPMI=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  buildInputs = [
+    bash
+    coreutils
+    diffstat
+    diffutils
+    findutils
+    gawk
+    gnugrep
+    gnused
+    patch
+    perl
+    unixtools.column
+    unixtools.getopt
+  ];
+
+  postInstall = ''
+    wrapProgram $out/bin/quilt --prefix PATH : ${lib.makeBinPath buildInputs}
+  '';
+
+  meta = with lib; {
+    homepage = "https://savannah.nongnu.org/projects/quilt";
+    description = "Easily manage large numbers of patches";
+
+    longDescription = ''
+      Quilt allows you to easily manage large numbers of
+      patches by keeping track of the changes each patch
+      makes. Patches can be applied, un-applied, refreshed,
+      and more.
+    '';
+
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ smancill ];
+    platforms = platforms.all;
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/tools/railway/default.nix b/nixpkgs/pkgs/development/tools/railway/default.nix
new file mode 100644
index 000000000000..b3119d83a003
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/railway/default.nix
@@ -0,0 +1,32 @@
+{ lib, rustPlatform, fetchFromGitHub, pkg-config, openssl, stdenv, CoreServices
+, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "railway";
+  version = "3.5.2";
+
+  src = fetchFromGitHub {
+    owner = "railwayapp";
+    repo = "cli";
+    rev = "v${version}";
+    hash = "sha256-QlynZgmDd7m7m17J5lUTmejkKdQlfjiqcXg4ZMFp0vc=";
+  };
+
+  cargoHash = "sha256-TOuxJL2UtMA9mZLHZVQDD6lyL9VWy/HBNfezhOGbSG8=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ openssl ]
+    ++ lib.optionals stdenv.isDarwin [ CoreServices Security ];
+
+  OPENSSL_NO_VENDOR = 1;
+
+  meta = with lib; {
+    mainProgram = "railway";
+    description = "Railway.app CLI";
+    homepage = "https://github.com/railwayapp/cli";
+    changelog = "https://github.com/railwayapp/cli/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ Crafter techknowlogick ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rain/default.nix b/nixpkgs/pkgs/development/tools/rain/default.nix
new file mode 100644
index 000000000000..a07f09a060c7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rain/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, testers
+, rain
+}:
+
+buildGoModule rec {
+  pname = "rain";
+  version = "1.7.5";
+
+  src = fetchFromGitHub {
+    owner = "aws-cloudformation";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-UAh84LM7QbIdxuPGN+lsbjVLd+hk8NXqwDxcRv5FAdY=";
+  };
+
+  vendorHash = "sha256-kd820Qe/0gN34VnX9Ge4BLeI3yySunJNjOVJXBe/M58=";
+
+  subPackages = [ "cmd/rain" ];
+
+  ldflags = [ "-s" "-w" ];
+
+  passthru.tests.version = testers.testVersion {
+    package = rain;
+    command = "rain --version";
+    version = "v${version}";
+  };
+
+  meta = with lib; {
+    description = "A development workflow tool for working with AWS CloudFormation";
+    homepage = "https://github.com/aws-cloudformation/rain";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ jiegec ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rakkess/default.nix b/nixpkgs/pkgs/development/tools/rakkess/default.nix
new file mode 100644
index 000000000000..83ee3c9ec115
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rakkess/default.nix
@@ -0,0 +1,32 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "rakkess";
+  version = "0.5.1";
+
+  src = fetchFromGitHub {
+    owner = "corneliusweig";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-igovWWk8GfNmOS/NbZWfv9kox6QLNIbM09jdvA/lL3A=";
+  };
+  vendorHash = "sha256-lVxJ4wFBhHc8JVpkmqphLYPE9Z8Cr6o+aAHvC1naqyE=";
+
+  ldflags = [ "-s" "-w" "-X github.com/corneliusweig/rakkess/internal/version.version=v${version}" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/corneliusweig/rakkess";
+    changelog = "https://github.com/corneliusweig/rakkess/releases/tag/v${version}";
+    description = "Review Access - kubectl plugin to show an access matrix for k8s server resources";
+    longDescription = ''
+      Have you ever wondered what access rights you have on a provided
+      kubernetes cluster? For single resources you can use
+      `kubectl auth can-i list deployments`, but maybe you are looking for a
+      complete overview? This is what rakkess is for. It lists access rights for
+      the current user and all server resources, similar to
+      `kubectl auth can-i --list`.
+    '';
+    license = licenses.asl20;
+    maintainers = with maintainers; [ jk ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rars/default.nix b/nixpkgs/pkgs/development/tools/rars/default.nix
new file mode 100644
index 000000000000..8d51fc95cf4f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rars/default.nix
@@ -0,0 +1,33 @@
+{ lib, fetchurl, stdenvNoCC, makeWrapper, jre }:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "rars";
+  version = "1.6";
+
+  src = fetchurl {
+    url = "https://github.com/TheThirdOne/rars/releases/download/v${version}/rars1_6.jar";
+    hash = "sha256-eA9zDrRXsbpgnpaKzMLIt32PksPZ2/MMx/2zz7FOjCQ=";
+  };
+
+  dontUnpack = true;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    runHook preInstall
+    export JAR=$out/share/java/${pname}/${pname}.jar
+    install -D $src $JAR
+    makeWrapper ${jre}/bin/java $out/bin/${pname} \
+      --add-flags "-jar $JAR"
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "RISC-V Assembler and Runtime Simulator";
+    homepage = "https://github.com/TheThirdOne/rars";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.mit;
+    maintainers = with maintainers; [ athas ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rbspy/default.nix b/nixpkgs/pkgs/development/tools/rbspy/default.nix
new file mode 100644
index 000000000000..d30c75ea244e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rbspy/default.nix
@@ -0,0 +1,62 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+, ruby
+, which
+, nix-update-script
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rbspy";
+  version = "0.19.0";
+
+  src = fetchFromGitHub {
+    owner = "rbspy";
+    repo = "rbspy";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-OO0EX+r7W8HxPjbER+84m+nagPBM6GlCdB30VQV58mQ=";
+  };
+
+  cargoHash = "sha256-yywh/O4odm+VmM0k/Ft0DEihq6r+xehrpjbYryvVStw=";
+
+  # error: linker `aarch64-linux-gnu-gcc` not found
+  postPatch = ''
+    rm .cargo/config
+  '';
+
+  doCheck = true;
+
+  # The current implementation of rbspy fails to detect the version of ruby
+  # from nixpkgs during tests.
+  preCheck = ''
+    substituteInPlace src/core/process.rs \
+      --replace /usr/bin/which '${which}/bin/which'
+    substituteInPlace src/sampler/mod.rs \
+      --replace /usr/bin/which '${which}/bin/which'
+  '';
+
+  checkFlags = [
+    "--skip=test_get_trace"
+    "--skip=test_get_trace_when_process_has_exited"
+    "--skip=test_sample_single_process"
+    "--skip=test_sample_single_process_with_time_limit"
+    "--skip=test_sample_subprocesses"
+  ];
+
+  nativeBuildInputs = [
+    ruby
+    which
+  ] ++ lib.optional stdenv.isDarwin rustPlatform.bindgenHook;
+
+  passthru.updateScript = nix-update-script { };
+
+  meta = with lib; {
+    homepage = "https://rbspy.github.io/";
+    description = "A Sampling CPU Profiler for Ruby";
+    changelog = "https://github.com/rbspy/rbspy/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ viraptor ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rcodesign/default.nix b/nixpkgs/pkgs/development/tools/rcodesign/default.nix
new file mode 100644
index 000000000000..34227dfa705e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rcodesign/default.nix
@@ -0,0 +1,49 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rcodesign";
+  version = "0.22.0";
+
+  src = fetchFromGitHub {
+    owner = "indygreg";
+    repo = "apple-platform-rs";
+    rev = "apple-codesign/${version}";
+    hash = "sha256-ndbDBGtTOfHHUquKrETe4a+hB5Za9samlnXwVGVvWy4=";
+  };
+
+  cargoHash = "sha256-cpQBdxTw/ge4VtzjdL2a2xgSeCT22fMIjuKu5UEedhI=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk_11_0.frameworks.Security
+  ];
+
+  cargoBuildFlags = [
+    # Only build the binary we want
+    "--bin"
+    "rcodesign"
+  ];
+
+  checkFlags = [
+    # Does network IO
+    "--skip=ticket_lookup::test::lookup_ticket"
+  ];
+
+  meta = with lib; {
+    description = "A cross-platform CLI interface to interact with Apple code signing.";
+    longDescription = ''
+      rcodesign provides various commands to interact with Apple signing,
+      including signing and notarizing binaries, generating signing
+      certificates, and verifying existing signed binaries.
+
+      For more information, refer to the [documentation](https://gregoryszorc.com/docs/apple-codesign/stable/apple_codesign_rcodesign.html).
+    '';
+    homepage = "https://github.com/indygreg/apple-platform-rs";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ euank ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rdbtools/default.nix b/nixpkgs/pkgs/development/tools/rdbtools/default.nix
new file mode 100644
index 000000000000..40cbce35ba3f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rdbtools/default.nix
@@ -0,0 +1,25 @@
+{ lib, python, fetchPypi }:
+
+with python.pkgs;
+
+buildPythonApplication rec {
+  pname = "rdbtools";
+  version = "0.1.15";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "689e57e42f43bdc73ea4e893d9676819980d17968696826b69fbd951f59772de";
+  };
+
+  propagatedBuildInputs = [ redis python-lzf ];
+
+  # No tests in published package
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Parse Redis dump.rdb files, Analyze Memory, and Export Data to JSON";
+    homepage = "https://github.com/sripathikrishnan/redis-rdb-tools";
+    license = licenses.mit;
+    maintainers = with maintainers; [ offline ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rdocker/default.nix b/nixpkgs/pkgs/development/tools/rdocker/default.nix
new file mode 100644
index 000000000000..098d7a593148
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rdocker/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub, makeWrapper, openssh }:
+
+stdenv.mkDerivation {
+  pname = "rdocker";
+  version = "unstable-2018-07-17";
+
+  src = fetchFromGitHub {
+    owner = "dvddarias";
+    repo = "rdocker";
+    rev = "949377de0154ade2d28c6d4c4ec33b65ea813b5a";
+    sha256 = "1mwg9zh144q4fqk9016v2d347vzch8sxlixaxrz0ci9dxvs6ibd4";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    install -Dm755 rdocker.sh $out/bin/rdocker
+  '';
+
+  postInstall = ''
+    wrapProgram $out/bin/rdocker \
+      --prefix PATH : ${lib.makeBinPath [ openssh ]}
+  '';
+
+  meta = with lib; {
+    description = "Securely control a remote docker daemon CLI using ssh forwarding, no SSL setup needed";
+    homepage = "https://github.com/dvddarias/rdocker";
+    maintainers = [ lib.maintainers.pneumaticat ];
+    license = licenses.mit;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/react-native-debugger/default.nix b/nixpkgs/pkgs/development/tools/react-native-debugger/default.nix
new file mode 100644
index 000000000000..b3cece960186
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/react-native-debugger/default.nix
@@ -0,0 +1,116 @@
+{ lib
+, stdenv
+, fetchurl
+, unzip
+, cairo
+, xorg
+, gdk-pixbuf
+, fontconfig
+, pango
+, gnome
+, atk
+, at-spi2-atk
+, at-spi2-core
+, gtk3
+, glib
+, freetype
+, dbus
+, nss
+, nspr
+, alsa-lib
+, cups
+, expat
+, udev
+, makeDesktopItem
+, libdrm
+, libxkbcommon
+, mesa
+, makeWrapper
+}:
+
+let
+  rpath = lib.makeLibraryPath [
+    cairo
+    stdenv.cc.cc
+    gdk-pixbuf
+    fontconfig
+    pango
+    atk
+    gtk3
+    glib
+    freetype
+    dbus
+    nss
+    nspr
+    alsa-lib
+    cups
+    expat
+    udev
+    at-spi2-atk
+    at-spi2-core
+    libdrm
+    libxkbcommon
+    mesa
+
+    xorg.libX11
+    xorg.libXcursor
+    xorg.libXtst
+    xorg.libxcb
+    xorg.libXext
+    xorg.libXi
+    xorg.libXdamage
+    xorg.libXrandr
+    xorg.libXcomposite
+    xorg.libXfixes
+    xorg.libXrender
+    xorg.libXScrnSaver
+  ];
+in
+stdenv.mkDerivation rec {
+  pname = "react-native-debugger";
+  version = "0.14.0";
+  src = fetchurl {
+    url = "https://github.com/jhen0409/react-native-debugger/releases/download/v${version}/rn-debugger-linux-x64.zip";
+    sha256 = "sha256-RioBe0MAR47M84aavFaTJikGsJtcZDak8Tkg3WtX2l0=";
+  };
+
+  nativeBuildInputs = [ makeWrapper unzip ];
+  buildCommand = ''
+    shopt -s extglob
+    mkdir -p $out
+    unzip $src -d $out
+
+    mkdir $out/{lib,bin,share}
+    mv $out/{libEGL,libGLESv2,libvk_swiftshader,libffmpeg}.so $out/lib
+    mv $out/!(lib|share|bin) $out/share
+
+    patchelf \
+      --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) \
+      --set-rpath ${rpath}:$out/lib \
+      $out/share/react-native-debugger
+
+    wrapProgram $out/share/react-native-debugger \
+      --add-flags --no-sandbox
+
+    ln -s $out/share/react-native-debugger $out/bin/react-native-debugger
+
+    install -Dm644 "${desktopItem}/share/applications/"* \
+      -t $out/share/applications/
+  '';
+
+  desktopItem = makeDesktopItem {
+    name = "rndebugger";
+    exec = "react-native-debugger";
+    desktopName = "React Native Debugger";
+    genericName = "React Native Debugger";
+    categories = [ "Development" "Debugger" ];
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/jhen0409/react-native-debugger";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.mit;
+    description = "The standalone app based on official debugger of React Native, and includes React Inspector / Redux DevTools";
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/react-static/default.nix b/nixpkgs/pkgs/development/tools/react-static/default.nix
new file mode 100644
index 000000000000..d4552f68761a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/react-static/default.nix
@@ -0,0 +1,55 @@
+{ lib
+, mkYarnPackage
+, fetchFromGitHub
+, fetchYarnDeps
+}:
+
+mkYarnPackage rec {
+  pname = "react-static";
+  version = "7.6.2";
+
+  src = fetchFromGitHub {
+    owner = "react-static";
+    repo = "react-static";
+    rev = "v${version}";
+    hash = "sha256-dlYmD0vgEqWxYf7E0VYstZMAuNDGvQP7xDgHo/wmlUs=";
+  };
+
+  packageJSON = ./package.json;
+
+  offlineCache = fetchYarnDeps {
+    yarnLock = "${src}/yarn.lock";
+    hash = "sha256-SNnJPUzv+l2HXfA6NKYpJvn/DCX3a42JQ3N0+XYKbd8=";
+  };
+
+  buildPhase = ''
+    runHook preBuild
+
+    yarn --cwd deps/react-static/packages/react-static --offline build
+
+    runHook postBuild
+  '';
+
+  doDist = false;
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p "$out/lib/node_modules"
+    mv deps/react-static/packages/react-static "$out/lib/node_modules"
+    mv node_modules "$out/lib/node_modules/react-static"
+
+    ln -s "$out/lib/node_modules/react-static/bin" "$out"
+
+    runHook postInstall
+  '';
+
+  meta = {
+    changelog = "https://github.com/react-static/react-static/blob/${src.rev}/CHANGELOG.md";
+    description = "A progressive static site generator for React";
+    homepage = "https://github.com/react-static/react-static";
+    license = lib.licenses.mit;
+    mainProgram = "react-static";
+    maintainers = with lib.maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/react-static/package.json b/nixpkgs/pkgs/development/tools/react-static/package.json
new file mode 100644
index 000000000000..70b873277fd2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/react-static/package.json
@@ -0,0 +1,154 @@
+{
+  "name": "react-static",
+  "description": "A progressive static site generator for React",
+  "version": "7.6.2",
+  "license": "MIT",
+  "repository": "https://github.com/react-static/react-static",
+  "main": "lib/index.js",
+  "types": "src/index.d.ts",
+  "engines": {
+    "node": ">=8.9.0"
+  },
+  "bin": {
+    "react-static": "./bin/react-static"
+  },
+  "scripts": {
+    "prebuild": "rimraf lib",
+    "build": "cross-env REACT_STATIC_INTERNAL=true babel src --out-dir lib --ignore \"**/__tests__/*\" --ignore \"**/__mocks__/*\"  --source-maps inline",
+    "watch": "yarn build --watch",
+    "watch:link": "onchange './lib/**/*' -- yalc push --changed",
+    "start": "yarn watch",
+    "test": "yarn format && yarn lint && yarn unitTest",
+    "lint": "eslint src",
+    "format": "prettier README.md {src,templates/*/src}/**/*.js --write",
+    "unitTest": "cross-env NODE_ENV=test yarn jest ./src",
+    "unitTestWatch": "cross-env NODE_ENV=test yarn jest src --watch",
+    "preversion": "yarn build && yarn test",
+    "publishLink": "echo '{{event}} to {{changed}}' && yalc publish"
+  },
+  "peerDependencies": {
+    "react": "^16.9.0",
+    "react-dom": "^16.9.0",
+    "react-hot-loader": "^4.12.11"
+  },
+  "dependencies": {
+    "@babel/cli": "^7.5.5",
+    "@babel/core": "^7.5.5",
+    "@babel/plugin-proposal-class-properties": "^7.5.5",
+    "@babel/plugin-proposal-export-default-from": "^7.5.2",
+    "@babel/plugin-proposal-optional-chaining": "^7.2.0",
+    "@babel/plugin-syntax-dynamic-import": "^7.2.0",
+    "@babel/plugin-transform-destructuring": "^7.5.0",
+    "@babel/plugin-transform-modules-commonjs": "^7.5.0",
+    "@babel/plugin-transform-runtime": "^7.5.5",
+    "@babel/preset-env": "^7.5.5",
+    "@babel/preset-react": "^7.0.0",
+    "@babel/preset-stage-0": "^7.0.0",
+    "@babel/register": "^7.5.5",
+    "@babel/runtime": "^7.5.5",
+    "@reach/router": "^1.3.1",
+    "autoprefixer": "^9.7.4",
+    "axios": "^0.21.1",
+    "babel-core": "7.0.0-bridge.0",
+    "babel-loader": "^8.0.6",
+    "babel-plugin-macros": "^2.6.1",
+    "babel-plugin-transform-react-remove-prop-types": "^0.4.24",
+    "babel-plugin-universal-import": "^4.0.0",
+    "case-sensitive-paths-webpack-plugin": "^2.2.0",
+    "chalk": "^2.4.2",
+    "chokidar": "^3.0.2",
+    "circular-dependency-plugin": "^5.2.0",
+    "cors": "^2.8.5",
+    "css-loader": "^2.1.1",
+    "download-git-repo": "^2.0.0",
+    "extract-css-chunks-webpack-plugin": "^4.6.0",
+    "file-loader": "3.0.1",
+    "fs-extra": "^7.0.1",
+    "git-promise": "^1.0.0",
+    "glob": "^7.1.4",
+    "gunzip-maybe": "^1.4.1",
+    "html-webpack-plugin": "^3.2.0",
+    "inquirer": "^6.5.1",
+    "inquirer-autocomplete-prompt": "^1.0.1",
+    "intersection-observer": "^0.7.0",
+    "jsesc": "^2.5.2",
+    "match-sorter": "^3.1.1",
+    "minimist": "^1.2.0",
+    "mutation-observer": "^1.0.3",
+    "optimize-css-assets-webpack-plugin": "^5.0.3",
+    "portfinder": "^1.0.21",
+    "postcss-flexbugs-fixes": "^4.1.0",
+    "postcss-loader": "^3.0.0",
+    "pretty-error": "^2.1.1",
+    "progress": "^2.0.3",
+    "prop-types": "^15.7.2",
+    "raf": "^3.4.1",
+    "raw-loader": "^3.1.0",
+    "react-helmet": "^6.1.0",
+    "react-universal-component": "^4.0.0",
+    "resolve-from": "^5.0.0",
+    "serve": "^11.1.0",
+    "shorthash": "^0.0.2",
+    "slash": "^2.0.0",
+    "socket.io": "^2.2.0",
+    "socket.io-client": "^2.2.0",
+    "style-loader": "0.23.1",
+    "swimmer": "^1.4.0",
+    "tar-fs": "^2.0.0",
+    "terser-webpack-plugin": "^1.4.1",
+    "upath": "^1.1.2",
+    "url-loader": "^2.1.0",
+    "webpack": "^4.39.2",
+    "webpack-bundle-analyzer": "^3.4.1",
+    "webpack-dev-server": "^3.8.0",
+    "webpack-flush-chunks": "^2.0.3",
+    "webpack-node-externals": "^1.7.2"
+  },
+  "devDependencies": {
+    "@types/react": "^16.9.1",
+    "@types/react-helmet": "^6.1.0",
+    "babel-jest": "^24.8.0",
+    "cors": "^2.8.5",
+    "cross-env": "^5.2.0",
+    "enzyme": "^3.10.0",
+    "enzyme-adapter-react-16": "^1.14.0",
+    "enzyme-to-json": "^3.4.0",
+    "eslint": "^6.1.0",
+    "eslint-config-prettier": "^6.0.0",
+    "eslint-config-react-tools": "^1.1.7",
+    "eslint-plugin-babel": "^5.3.0",
+    "eslint-plugin-import": "^2.18.2",
+    "eslint-plugin-jsx-a11y": "^6.2.3",
+    "eslint-plugin-react": "^7.14.3",
+    "express": "^4.17.1",
+    "husky": "^3.0.3",
+    "jest": "^24.8.0",
+    "lerna": "^3.16.4",
+    "onchange": "^6.0.0",
+    "prettier": "1.18.2",
+    "react": "^16.9.0",
+    "react-dev-utils": "^9.0.3",
+    "react-dom": "^16.9.0",
+    "react-hot-loader": "^4.12.11",
+    "rimraf": "^2.7.0",
+    "webpack-hot-middleware": "^2.25.0"
+  },
+  "jest": {
+    "verbose": true,
+    "moduleDirectories": [
+      "node_modules",
+      "src"
+    ],
+    "testRegex": "(/__tests__/.*\\.(test))\\.jsx?$",
+    "moduleNameMapper": {
+      "static.config.js$": "<rootDir>/src/static/__mocks__/static.config.js.mock.js"
+    },
+    "setupFiles": [
+      "<rootDir>/setupTests.js"
+    ],
+    "snapshotSerializers": [
+      "enzyme-to-json/serializer"
+    ]
+  },
+  "gitHead": "875004e6e75d36043382b8ec8bba27a766c1a83a"
+}
diff --git a/nixpkgs/pkgs/development/tools/rebazel/default.nix b/nixpkgs/pkgs/development/tools/rebazel/default.nix
new file mode 100644
index 000000000000..c28701f96a21
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rebazel/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, rustPlatform, fetchFromGitHub, CoreServices }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rebazel";
+  version = "0.1.4";
+
+  src = fetchFromGitHub {
+    owner = "meetup";
+    repo = "rebazel";
+    rev = "v${version}";
+    hash = "sha256-v84ZXhtJpejQmP61NmP06+qrtMu/0yb7UyD7U12xlME=";
+  };
+
+  cargoSha256 = "sha256-cBAm8LyNKEVJkhZJ+QZU5XtQutb1oNvad8xH70Bi2LM=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [ CoreServices ];
+
+  meta = with lib; {
+    description = "tool for expediting bazel build workflows";
+    homepage = "https://github.com/meetup/rebazel";
+    license = licenses.mit;
+    maintainers = with maintainers; [ zimbatm ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/redis-dump/.bundle/config b/nixpkgs/pkgs/development/tools/redis-dump/.bundle/config
new file mode 100644
index 000000000000..b81abe028c3c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/redis-dump/.bundle/config
@@ -0,0 +1,3 @@
+---
+BUNDLE_PATH: vendor
+BUNDLE_DISABLE_SHARED_GEMS: '1'
diff --git a/nixpkgs/pkgs/development/tools/redis-dump/Gemfile b/nixpkgs/pkgs/development/tools/redis-dump/Gemfile
new file mode 100644
index 000000000000..f78cb0873c08
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/redis-dump/Gemfile
@@ -0,0 +1,3 @@
+source 'https://rubygems.org'
+
+gem 'redis-dump'
diff --git a/nixpkgs/pkgs/development/tools/redis-dump/Gemfile.lock b/nixpkgs/pkgs/development/tools/redis-dump/Gemfile.lock
new file mode 100644
index 000000000000..f789ae87d8d2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/redis-dump/Gemfile.lock
@@ -0,0 +1,21 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    drydock (0.6.9)
+    redis (4.1.0)
+    redis-dump (0.4.0)
+      drydock (>= 0.6.9)
+      redis (>= 4.0)
+      uri-redis (>= 0.4.0)
+      yajl-ruby (>= 0.1)
+    uri-redis (0.4.2)
+    yajl-ruby (1.4.1)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  redis-dump
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/development/tools/redis-dump/default.nix b/nixpkgs/pkgs/development/tools/redis-dump/default.nix
new file mode 100644
index 000000000000..2d4acd724d39
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/redis-dump/default.nix
@@ -0,0 +1,17 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "redis-dump";
+  gemdir = ./.;
+  exes = [ "redis-dump" "redis-load" ];
+
+  passthru.updateScript = bundlerUpdateScript "redis-dump";
+
+  meta = with lib; {
+    description = "Backup and restore your Redis data to and from JSON";
+    homepage    = "http://delanotes.com/redis-dump/";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ offline manveru nicknovitski ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/redis-dump/gemset.nix b/nixpkgs/pkgs/development/tools/redis-dump/gemset.nix
new file mode 100644
index 000000000000..74e6d4e1b324
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/redis-dump/gemset.nix
@@ -0,0 +1,53 @@
+{
+  drydock = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0grf3361mh93lczljmnwafl7gbcp9kk1bjpfwx4ykpd43fzdbfyj";
+      type = "gem";
+    };
+    version = "0.6.9";
+  };
+  redis = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0rk6mmy3y2jd34llrf591ribl1p54ghkw7m96wrbamy8fwva5zqv";
+      type = "gem";
+    };
+    version = "4.1.0";
+  };
+  redis-dump = {
+    dependencies = ["drydock" "redis" "uri-redis" "yajl-ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1gvip73kgm8xvyjmjkz4b986wni9blsmrnpvp5jrsxjz3g0sqzwg";
+      type = "gem";
+    };
+    version = "0.4.0";
+  };
+  uri-redis = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13n8ak41rikkbmml054pir4i1xbgjpmf3dbqihc2kcrgmz3dg81a";
+      type = "gem";
+    };
+    version = "0.4.2";
+  };
+  yajl-ruby = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "16v0w5749qjp13xhjgr2gcsvjv6mf35br7iqwycix1n2h7kfcckf";
+      type = "gem";
+    };
+    version = "1.4.1";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/redisinsight/default.nix b/nixpkgs/pkgs/development/tools/redisinsight/default.nix
new file mode 100644
index 000000000000..5c4609e248d8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/redisinsight/default.nix
@@ -0,0 +1,154 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, makeWrapper
+, makeDesktopItem
+, fixup_yarn_lock
+, yarn
+, nodejs_18
+, python3
+, fetchYarnDeps
+, electron
+, desktopToDarwinBundle
+, nest-cli
+, libsass
+, buildPackages
+, pkg-config
+, sqlite
+, xdg-utils
+}:
+let
+  nodejs = nodejs_18;
+in
+stdenv.mkDerivation (finalAttrs: {
+  pname = "redisinsight-electron";
+  version = "2.32";
+
+  src = fetchFromGitHub {
+    owner = "RedisInsight";
+    repo = "RedisInsight";
+    rev = "${finalAttrs.version}";
+    hash = "sha256-esaH10AyEooym/62F5LJL7oP5UmD6T2UX8g/9QniL9s=";
+  };
+
+  offlineCache = fetchYarnDeps {
+    yarnLock = finalAttrs.src + "/yarn.lock";
+    sha256 = "NHKttywAaWAYkciGzYCnm1speHrWsv1t+dxL1DZgM7o=";
+  };
+
+  feOfflineCache = fetchYarnDeps {
+    yarnLock = finalAttrs.src + "/redisinsight/yarn.lock";
+    sha256 = "1S1KNUOtmywQ0eyqVS2oRlhpjcL9eps8CR7AtC9ujSU=";
+  };
+
+  apiOfflineCache = fetchYarnDeps {
+    yarnLock = finalAttrs.src + "/redisinsight/api/yarn.lock";
+    sha256 = "P99+1Dhdg/vznC2KepPrVGNlrofJFydXkZVxgwprIx4=";
+  };
+
+  nativeBuildInputs = [ yarn fixup_yarn_lock nodejs makeWrapper python3 nest-cli libsass pkg-config ]
+    ++ lib.optionals stdenv.isDarwin [ desktopToDarwinBundle ];
+
+  buildInputs = [ sqlite xdg-utils ];
+
+  configurePhase = ''
+    runHook preConfigure
+
+    export HOME=$(mktemp -d)
+    yarn config --offline set yarn-offline-mirror $offlineCache
+    fixup_yarn_lock yarn.lock
+    yarn install --offline --frozen-lockfile --ignore-platform --ignore-scripts --no-progress --non-interactive
+
+    yarn config --offline set yarn-offline-mirror $feOfflineCache
+    fixup_yarn_lock redisinsight/yarn.lock
+    yarn --offline --cwd redisinsight/ --frozen-lockfile --ignore-platform --ignore-scripts --no-progress --non-interactive
+
+    yarn config --offline set yarn-offline-mirror $apiOfflineCache
+    fixup_yarn_lock redisinsight/api/yarn.lock
+    yarn --offline --cwd redisinsight/api/ --frozen-lockfile --ignore-platform --ignore-scripts --no-progress --non-interactive
+
+    patchShebangs node_modules/
+    patchShebangs redisinsight/node_modules/
+    patchShebangs redisinsight/api/node_modules/
+
+    mkdir -p "$HOME/.node-gyp/${nodejs.version}"
+    echo 9 >"$HOME/.node-gyp/${nodejs.version}/installVersion"
+    ln -sfv "${nodejs}/include" "$HOME/.node-gyp/${nodejs.version}"
+    export npm_config_nodedir=${nodejs}
+
+    pushd redisinsight
+    # Build the sqlite3 package.
+    npm_config_node_gyp="${buildPackages.nodejs}/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" npm rebuild --verbose --sqlite=${sqlite.dev} sqlite3
+    popd
+
+    substituteInPlace redisinsight/api/config/default.ts \
+      --replace "process['resourcesPath']" "\"$out/share/redisinsight\"" \
+
+    runHook postConfigure
+  '';
+
+  buildPhase = ''
+    runHook preBuild
+    yarn config --offline set yarn-offline-mirror $offlineCache
+
+    pushd node_modules/node-sass
+    LIBSASS_EXT=auto yarn run build --offline
+    popd
+
+    yarn --offline build:prod
+
+    yarn --offline electron-builder \
+      --dir ${if stdenv.isDarwin then "--macos" else "--linux"} ${if stdenv.hostPlatform.isAarch64 then "--arm64" else "--x64"} \
+      -c.electronDist=${electron}/libexec/electron \
+      -c.electronVersion=${electron.version}
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    # resources
+    mkdir -p "$out/share/redisinsight"
+    mkdir -p "$out/share/redisinsight/static/resources/plugins"
+    mkdir -p "$out/share/redisinsight/default"
+
+    cp -r release/${if stdenv.isDarwin then "darwin-" else "linux-"}${lib.optionalString stdenv.hostPlatform.isAarch64 "arm64-"}unpacked/resources/{app.asar,app.asar.unpacked} $out/share/redisinsight/
+    cp -r resources/ $out/share/redisinsight
+
+    # icons
+    for icon in "$out/resources/icons/*.png"; do
+      mkdir -p "$out/share/icons/hicolor/$(basename $icon .png)/apps"
+      ln -s "$icon" "$out/share/icons/hicolor/$(basename $icon .png)/apps/redisinsight.png"
+    done
+
+    ln -s "${finalAttrs.desktopItem}/share/applications" "$out/share/applications"
+
+    makeWrapper '${electron}/bin/electron' "$out/bin/redisinsight" \
+      --add-flags "$out/share/redisinsight/app.asar" \
+      --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations}}" \
+      --chdir "$out/share/redisinsight" \
+      --argv0 "$out/share/redisinsight/app.asar"
+
+    runHook postInstall
+  '';
+
+  desktopItem = makeDesktopItem {
+    name = "redisinsight";
+    exec = "redisinsight %u";
+    icon = "redisinsight";
+    desktopName = "RedisInsight";
+    genericName = "RedisInsight Redis Client";
+    comment = finalAttrs.meta.description;
+    categories = [ "Development" ];
+    startupWMClass = "redisinsight";
+  };
+
+  meta = with lib; {
+    description = "RedisInsight Redis client powered by Electron";
+    homepage = "https://github.com/RedisInsight/RedisInsight";
+    license = licenses.sspl;
+    maintainers = with maintainers; [ gmemstr ];
+    platforms = [ "x86_64-linux" ];
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/redoc-cli/default.nix b/nixpkgs/pkgs/development/tools/redoc-cli/default.nix
new file mode 100644
index 000000000000..de30e43d5eaf
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/redoc-cli/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, buildNpmPackage
+, fetchFromGitHub
+}:
+
+buildNpmPackage rec {
+  pname = "redoc-cli";
+  version = "0.13.21";
+
+  src = fetchFromGitHub {
+    owner = "Redocly";
+    repo = "redoc";
+    rev = "d3ac16f4774ae5b5f698b4e8f4c1d3f5a009d361";
+    hash = "sha256-LmNb+m1Ng/53SPUqrr/AmxNMiWsrMGCKow0DW/9t3Do=";
+  };
+
+  sourceRoot = "${src.name}/cli";
+
+  npmDepsHash = "sha256-XL4D7+hb0zOxAr/aRo2UOg4UOip3oewbffsnkFddmWw=";
+
+  postPatch = ''
+    ln -s npm-shrinkwrap.json package-lock.json
+  '';
+
+  dontNpmBuild = true;
+
+  meta = {
+    description = "OpenAPI/Swagger-generated API Reference Documentation";
+    homepage = "https://github.com/Redocly/redoc/tree/redoc-cli/cli";
+    license = lib.licenses.mit;
+    mainProgram = "redoc-cli";
+    maintainers = with lib.maintainers; [ veehaitch ];
+    # https://github.com/NixOS/nixpkgs/issues/272217
+    broken = true;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/refinery-cli/default.nix b/nixpkgs/pkgs/development/tools/refinery-cli/default.nix
new file mode 100644
index 000000000000..140efe5bfd1b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/refinery-cli/default.nix
@@ -0,0 +1,27 @@
+{ fetchCrate, lib, stdenv, openssl, pkg-config, rustPlatform, darwin }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "refinery-cli";
+  version = "0.8.12";
+
+  src = fetchCrate {
+    pname = "refinery_cli";
+    inherit version;
+    sha256 = "sha256-ftti/+Zl9/8CsrlEI5gZQF0M33vzl5aK3X/EfCujtY4=";
+  };
+
+  cargoHash = "sha256-KlZTgg/Y4cXy5DR8iT4olVTF0kq1g5AQm3Sjpmrl6lk=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ openssl ]
+    ++ lib.optionals stdenv.isDarwin [ darwin.apple_sdk.frameworks.SystemConfiguration ];
+
+  meta = with lib; {
+    description = "Run migrations for the Refinery ORM for Rust via the CLI";
+    homepage = "https://github.com/rust-db/refinery";
+    changelog = "https://github.com/rust-db/refinery/blob/${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ lucperkins ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/reflex/default.nix b/nixpkgs/pkgs/development/tools/reflex/default.nix
new file mode 100644
index 000000000000..406740e784f0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/reflex/default.nix
@@ -0,0 +1,24 @@
+{ lib, fetchFromGitHub, buildGoModule }:
+
+buildGoModule rec {
+  pname = "reflex";
+  version = "0.3.1";
+
+  src = fetchFromGitHub {
+    owner = "cespare";
+    repo = "reflex";
+    rev = "v${version}";
+    sha256 = "sha256-/2qVm2xpSFVspA16rkiIw/qckxzXQp/1EGOl0f9KljY=";
+  };
+
+  vendorHash = "sha256-JCtVYDHbhH2i7tGNK1jvgHCjU6gMMkNhQ2ZnlTeqtmA=";
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "A small tool to watch a directory and rerun a command when certain files change";
+    homepage = "https://github.com/cespare/reflex";
+    license = licenses.mit;
+    maintainers = with maintainers; [ nicknovitski ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/refmt/default.nix b/nixpkgs/pkgs/development/tools/refmt/default.nix
new file mode 100644
index 000000000000..efcb03a49b8f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/refmt/default.nix
@@ -0,0 +1,22 @@
+{ lib, fetchFromGitHub, buildGoModule }:
+
+buildGoModule rec {
+  pname = "refmt";
+  version = "1.6.1";
+
+  src = fetchFromGitHub {
+    owner = "rjeczalik";
+    repo = "refmt";
+    rev = "v${version}";
+    sha256 = "sha256-HiAWSR2S+3OcIgwdQ0ltW37lcG+OHkDRDUF07rfNcJY=";
+  };
+
+  vendorHash = "sha256-MiYUDEF9W0VAiOX6uE8doXtGAekIrA1cfA8A2a7xd2I=";
+
+  meta = with lib; {
+    description = "Reformat HCL <-> JSON <-> YAML";
+    homepage = "https://github.com/rjeczalik/refmt";
+    license = licenses.agpl3Only;
+    maintainers = with lib.maintainers; [ deemp ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/reftools/default.nix b/nixpkgs/pkgs/development/tools/reftools/default.nix
new file mode 100644
index 000000000000..151f1accccf2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/reftools/default.nix
@@ -0,0 +1,29 @@
+{ buildGoModule
+, lib
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "reftools";
+  version = "unstable-2021-02-13";
+
+  src = fetchFromGitHub {
+    owner = "davidrjenni";
+    repo = "reftools";
+    rev = "40322ffdc2e46fd7920d1f8250051bbd2f3bd34d";
+    sha256 = "sha256-fHWtUoVK3G0Kn69O6/D0blM6Q/u4LuLinT6sxF18nFo=";
+  };
+
+  vendorHash = null;
+
+  doCheck = false;
+
+  excludedPackages = "cmd/fillswitch/test-fixtures";
+
+  meta = with lib; {
+    description = "Refactoring tools for Go";
+    homepage = "https://github.com/davidrjenni/reftools";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ kalbasit ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/refurb/default.nix b/nixpkgs/pkgs/development/tools/refurb/default.nix
new file mode 100644
index 000000000000..17c32d78d288
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/refurb/default.nix
@@ -0,0 +1,63 @@
+{ lib
+, fetchFromGitHub
+, python3Packages
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "refurb";
+  version = "1.28.0";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "dosisod";
+    repo = "refurb";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-b7Id2Oyjw3NZno56IMDIq7fn5u9+jn42nuae8ix90fM=";
+  };
+
+  postPatch = ''
+    # remove --cov* options provided to pytest
+    sed -i '/^addopts = "--cov/d' pyproject.toml
+  '';
+
+  nativeBuildInputs = with python3Packages; [
+    poetry-core
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    mypy
+    mypy-extensions
+    tomli
+    typing-extensions
+  ];
+
+  nativeCheckInputs = with python3Packages; [
+    attrs
+    click
+    colorama
+    iniconfig
+    mccabe
+    packaging
+    pathspec
+    platformdirs
+    pluggy
+    py
+    pyparsing
+    pytestCheckHook
+  ];
+
+  disabledTests = [
+    "test_checks" # broken because new mypy release added new checks
+  ];
+
+  pythonImportsCheck = [
+    "refurb"
+  ];
+
+  meta = with lib; {
+    description = "A tool for refurbishing and modernizing Python codebases";
+    homepage = "https://github.com/dosisod/refurb";
+    license = with licenses; [ gpl3Only ];
+    maintainers = with maintainers; [ knl ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/regclient/default.nix b/nixpkgs/pkgs/development/tools/regclient/default.nix
new file mode 100644
index 000000000000..bb8d79b6c44f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/regclient/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, lib, buildGoModule, fetchFromGitHub }:
+
+let bins = [ "regbot" "regctl" "regsync" ]; in
+
+buildGoModule rec {
+  pname = "regclient";
+  version = "0.5.7";
+  tag = "v${version}";
+
+  src = fetchFromGitHub {
+    owner = "regclient";
+    repo = "regclient";
+    rev = tag;
+    sha256 = "sha256-GT8SJg24uneEbV8WY8Wl2w3lxqLJ7pFCa+654ksBfG4=";
+  };
+  vendorHash = "sha256-cxydurN45ovb4XngG4L/K6L+QMfsaRBZhfLYzKohFNY=";
+
+  outputs = [ "out" ] ++ bins;
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X main.VCSTag=${tag}"
+  ];
+
+  postInstall =
+    lib.concatStringsSep "\n" (
+      map (bin: ''
+        mkdir -p ''$${bin}/bin &&
+        mv $out/bin/${bin} ''$${bin}/bin/ &&
+        ln -s ''$${bin}/bin/${bin} $out/bin/
+      '') bins
+    );
+
+  meta = with lib; {
+    description = "Docker and OCI Registry Client in Go and tooling using those libraries";
+    homepage = "https://github.com/regclient/regclient";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/reindeer/default.nix b/nixpkgs/pkgs/development/tools/reindeer/default.nix
new file mode 100644
index 000000000000..8124d5d12ccf
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/reindeer/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, openssl
+, stdenv
+, libiconv
+, darwin
+, nix-update-script
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "reindeer";
+  version = "unstable-2024-02-03";
+
+  src = fetchFromGitHub {
+    owner = "facebookincubator";
+    repo = pname;
+    rev = "8dd5629ef78d359fd8d3527157b0375762f22b1e";
+    sha256 = "sha256-9WmhP8CyjwohlltfmUn5m29CmBucIH+XrfVjIJX7dS8=";
+  };
+
+  cargoSha256 = "sha256-W9YA9OZu71/bSx3EwMeueVQSTExeep+UKGYCD8c4yhc=";
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs =
+    [ openssl ] ++ lib.optionals stdenv.isDarwin [
+      libiconv
+      darwin.apple_sdk.frameworks.Security
+      darwin.apple_sdk.frameworks.CoreServices
+    ];
+
+  passthru.updateScript = nix-update-script {
+    extraArgs = [ "--version" "branch" ];
+  };
+
+  meta = with lib; {
+    description = "Reindeer is a tool which takes Rust Cargo dependencies and generates Buck build rules";
+    homepage = "https://github.com/facebookincubator/reindeer";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ nickgerace ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/development/tools/relic/default.nix b/nixpkgs/pkgs/development/tools/relic/default.nix
new file mode 100644
index 000000000000..4029dfe028a7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/relic/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, testers
+, relic
+}:
+
+buildGoModule rec {
+  pname = "relic";
+  version = "7.6.2";
+
+  src = fetchFromGitHub {
+    owner = "sassoftware";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-T76+Ftky1rSIqEoKE3RLsf6g2gguVJgYFflWmyEhdEk=";
+  };
+
+  vendorHash = "sha256-5mgqIw3BV88rEF3ALD3pLhm658yUUFf44hQFSw085cU=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=main.version=${version}"
+    "-X=main.commit=${src.rev}"
+  ];
+
+  passthru.tests = {
+    version = testers.testVersion {
+      package = relic;
+    };
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/sassoftware/relic";
+    description = "A service and a tool for adding digital signatures to operating system packages for Linux and Windows";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ strager ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/remodel/default.nix b/nixpkgs/pkgs/development/tools/remodel/default.nix
new file mode 100644
index 000000000000..75c5ff2df3da
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/remodel/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, pkg-config
+, openssl
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "remodel";
+  version = "0.11.0";
+
+  src = fetchFromGitHub {
+    owner = "rojo-rbx";
+    repo = "remodel";
+    rev = "v${version}";
+    sha256 = "sha256-tZ6ptGeNBULJaoFomMFN294wY8YUu1SrJh4UfOL/MnI=";
+  };
+
+  cargoSha256 = "sha256-YCYs+MMTxnJEKhzjddBp7lnSYPrpf3G+ktr1ez/ZKkg=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [
+    Security
+  ];
+
+  meta = with lib; {
+    description = "Roblox file manipulation tool";
+    longDescription = ''
+      Remodel is a command line tool for manipulating Roblox files and the instances contained within them.
+    '';
+    homepage = "https://github.com/rojo-rbx/remodel";
+    downloadPage = "https://github.com/rojo-rbx/remodel/releases/tag/v${version}";
+    changelog = "https://github.com/rojo-rbx/remodel/raw/v${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ wackbyte ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/renderdoc/default.nix b/nixpkgs/pkgs/development/tools/renderdoc/default.nix
new file mode 100644
index 000000000000..89cbb39a786b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/renderdoc/default.nix
@@ -0,0 +1,100 @@
+{ lib
+, fetchFromGitHub
+, nix-update-script
+, cmake
+, pkg-config
+, mkDerivation
+, qtbase
+, qtx11extras
+, qtsvg
+, makeWrapper
+, vulkan-loader
+, libglvnd
+, xorg
+, python3
+, python3Packages
+, bison
+, pcre
+, automake
+, autoconf
+, addOpenGLRunpath
+, waylandSupport ? false
+, wayland
+}:
+let
+  custom_swig = fetchFromGitHub {
+    owner = "baldurk";
+    repo = "swig";
+    rev = "renderdoc-modified-7";
+    sha256 = "15r2m5kcs0id64pa2fsw58qll3jyh71jzc04wy20pgsh2326zis6";
+  };
+  cmakeBool = b: if b then "ON" else "OFF";
+in
+mkDerivation rec {
+  pname = "renderdoc";
+  version = "1.30";
+
+  src = fetchFromGitHub {
+    owner = "baldurk";
+    repo = "renderdoc";
+    rev = "v${version}";
+    sha256 = "sha256-PeFazWlG95lCksyIJOKeHVD7YdDjR0XuPZntkpgQc4A=";
+  };
+
+  buildInputs = [
+    qtbase qtsvg xorg.libpthreadstubs xorg.libXdmcp qtx11extras vulkan-loader python3
+  ] ++ (with python3Packages; [
+    pyside2 pyside2-tools shiboken2
+  ])
+  ++ lib.optional waylandSupport wayland;
+
+  nativeBuildInputs = [ cmake makeWrapper pkg-config bison pcre automake autoconf addOpenGLRunpath ];
+
+  postUnpack = ''
+    cp -r ${custom_swig} swig
+    chmod -R +w swig
+    patchShebangs swig/autogen.sh
+  '';
+
+  cmakeFlags = [
+    "-DBUILD_VERSION_HASH=${src.rev}"
+    "-DBUILD_VERSION_DIST_NAME=NixOS"
+    "-DBUILD_VERSION_DIST_VER=${version}"
+    "-DBUILD_VERSION_DIST_CONTACT=https://github.com/NixOS/nixpkgs/tree/master/pkgs/applications/graphics/renderdoc"
+    "-DBUILD_VERSION_STABLE=ON"
+    "-DENABLE_WAYLAND=${cmakeBool waylandSupport}"
+  ];
+
+  # TODO: define these in the above array via placeholders, once those are widely supported
+  preConfigure = ''
+    cmakeFlags+=" -DVULKAN_LAYER_FOLDER=$out/share/vulkan/implicit_layer.d/"
+    cmakeFlags+=" -DRENDERDOC_SWIG_PACKAGE=$PWD/../swig"
+  '';
+
+  dontWrapQtApps = true;
+  preFixup = ''
+    wrapQtApp $out/bin/qrenderdoc --suffix LD_LIBRARY_PATH : "$out/lib:${vulkan-loader}/lib:${libglvnd}/lib"
+    wrapProgram $out/bin/renderdoccmd --suffix LD_LIBRARY_PATH : "$out/lib:${vulkan-loader}/lib:${libglvnd}/lib"
+  '';
+
+  # The only documentation for this so far is in pkgs/build-support/add-opengl-runpath/setup-hook.sh
+  postFixup = ''
+    addOpenGLRunpath $out/lib/librenderdoc.so
+  '';
+
+  passthru.updateScript = nix-update-script { };
+
+  meta = with lib; {
+    description = "A single-frame graphics debugger";
+    homepage = "https://renderdoc.org/";
+    license = licenses.mit;
+    longDescription = ''
+      RenderDoc is a free MIT licensed stand-alone graphics debugger that
+      allows quick and easy single-frame capture and detailed introspection
+      of any application using Vulkan, D3D11, OpenGL or D3D12 across
+      Windows 7 - 10, Linux or Android.
+    '';
+    maintainers = [ ];
+    platforms = [ "i686-linux" "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/renderizer/default.nix b/nixpkgs/pkgs/development/tools/renderizer/default.nix
new file mode 100644
index 000000000000..7a1540f13800
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/renderizer/default.nix
@@ -0,0 +1,26 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "renderizer";
+  version = "2.0.13";
+
+  src = fetchFromGitHub {
+    owner = "gomatic";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-jl98LuEsGN40L9IfybJhLnbzoYP/XpwFVQnjrlmDL9A=";
+  };
+
+  ldflags = [
+    "-s" "-w" "-X main.version=${version}" "-X main.commitHash=${src.rev}" "-X main.date=19700101T000000"
+  ];
+
+  vendorHash = null;
+
+  meta = with lib; {
+    description = "CLI to render Go template text files";
+    inherit (src.meta) homepage;
+    license = licenses.gpl3;
+    maintainers = [];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/reno/default.nix b/nixpkgs/pkgs/development/tools/reno/default.nix
new file mode 100644
index 000000000000..c895deb4f34f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/reno/default.nix
@@ -0,0 +1,59 @@
+{ lib
+, git
+, gnupg1
+, python3Packages
+, fetchPypi
+}:
+
+with python3Packages; buildPythonApplication rec {
+  pname = "reno";
+  version = "3.1.0";
+
+  # Must be built from python sdist because of versioning quirks
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "2510e3aae4874674187f88f22f854e6b0ea1881b77039808a68ac1a5e8ee69b6";
+  };
+
+  propagatedBuildInputs = [
+    dulwich
+    pbr
+    pyyaml
+    setuptools  # required for finding pkg_resources at runtime
+  ];
+
+  nativeCheckInputs = [
+    # Python packages
+    pytestCheckHook
+    docutils
+    fixtures
+    sphinx
+    testtools
+    testscenarios
+
+    # Required programs to run all tests
+    git
+    gnupg1
+  ];
+
+  # remove b/c doesn't list all dependencies, and requires a few packages not in nixpkgs
+  postPatch = ''
+    rm test-requirements.txt
+  '';
+
+  disabledTests = [
+    "test_build_cache_db" # expects to be run from a git repository
+  ];
+
+  # verify executable
+  postCheck = ''
+    $out/bin/reno -h
+  '';
+
+  meta = with lib; {
+    description = "Release Notes Manager";
+    homepage = "https://docs.openstack.org/reno/latest";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ drewrisinger guillaumekoenig ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rep/default.nix b/nixpkgs/pkgs/development/tools/rep/default.nix
new file mode 100644
index 000000000000..0b1294abd1ef
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rep/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromGitHub, asciidoc-full }:
+
+stdenv.mkDerivation rec {
+  pname = "rep";
+  version = "0.2.2";
+
+  src = fetchFromGitHub {
+    owner = "eraserhd";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "pqmISVm3rYGxRuwKieVpRwXE8ufWnBHEA6h2hrob51s=";
+  };
+
+  nativeBuildInputs = [
+    asciidoc-full
+  ];
+
+  postPatch = ''
+    substituteInPlace rc/rep.kak --replace '$(rep' '$('"$out/bin/rep"
+  '';
+  makeFlags = [ "prefix=$(out)" ];
+
+  meta = with lib; {
+    description = "Single-shot nREPL client";
+    homepage = "https://github.com/eraserhd/rep";
+    license = licenses.epl10;
+    platforms = platforms.all;
+    maintainers = [ maintainers.eraserhd ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/replay-io/default.nix b/nixpkgs/pkgs/development/tools/replay-io/default.nix
new file mode 100644
index 000000000000..aafee56e2bd0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/replay-io/default.nix
@@ -0,0 +1,146 @@
+{ stdenv, lib, fetchurl, fetchFromGitHub, autoPatchelfHook, makeWrapper, libcxx
+, libX11, libXt, libXdamage, glib, gtk3, dbus-glib, openssl, nodejs, zlib
+, fetchzip }:
+let metadata = lib.importJSON ./meta.json;
+in rec {
+  replay-recordreplay = stdenv.mkDerivation rec {
+    pname = "replay-recordreplay";
+    version = builtins.head (builtins.match ".*/linux-recordreplay-(.*).tgz"
+      metadata.recordreplay.url);
+    nativeBuildInputs = [ autoPatchelfHook ];
+    buildInputs = [ stdenv.cc.cc.lib openssl zlib ];
+
+    src = (fetchzip metadata.recordreplay);
+    dontBuild = true;
+    installPhase = ''
+      runHook preInstall
+      cp linux-recordreplay.so $out
+      runHook postInstall
+    '';
+    postFixup = ''
+      patchelf --set-rpath "$(patchelf --print-rpath $out):${
+        lib.makeLibraryPath [ openssl ]
+      }" $out
+    '';
+    meta = with lib; {
+      description = "RecordReplay internal recording library";
+      homepage = "https://www.replay.io/";
+      license = lib.licenses.unfree;
+      maintainers = with maintainers; [ phryneas ];
+      platforms = [ "x86_64-linux" ];
+    };
+  };
+
+  replay-io = stdenv.mkDerivation rec {
+    pname = "replay-io";
+    version = builtins.head
+      (builtins.match ".*/linux-gecko-(.*).tar.bz2" metadata.replay.url);
+    srcs = fetchurl metadata.replay;
+    nativeBuildInputs = [ autoPatchelfHook makeWrapper ];
+    buildInputs = [ dbus-glib glib gtk3 libX11 libXdamage libXt ];
+    installPhase = ''
+      runHook preInstall
+      mkdir -p $out/opt/replay-io
+      cp -r * $out/opt/replay-io
+      mkdir $out/bin
+      makeWrapper $out/opt/replay-io/replay \
+        $out/bin/replay-io \
+        --set "RECORD_REPLAY_DRIVER" "${replay-recordreplay}"
+      runHook postInstall
+    '';
+
+    passthru.updateScript = ./update.sh;
+
+    meta = with lib; {
+      description = "The Time Travel Debugger for Web Development";
+      longDescription = ''
+        Replay allows you to record and replay web applications with familiar browser dev tools.
+        You can access the browser DevTools at any point of the recording, adding new logger
+        statements and inspecting the status of the DOM, variables and the current call stack.
+        Your recordings can be shared with other users for collaborative debugging.
+      '';
+      homepage = "https://www.replay.io/";
+      downloadPage = "https://www.replay.io/";
+      mainProgram = "replay-io";
+      license = lib.licenses.mpl20;
+      maintainers = with maintainers; [ phryneas ];
+      platforms = [ "x86_64-linux" ];
+    };
+  };
+
+  replay-node = stdenv.mkDerivation rec {
+    pname = "replay-node";
+    version = builtins.head
+      (builtins.match ".*/linux-node-(.*)" metadata.replay-node.url);
+    nativeBuildInputs = [ autoPatchelfHook makeWrapper ];
+    buildInputs = [ stdenv.cc.cc.lib ];
+
+    src = (fetchurl metadata.replay-node);
+    dontUnpack = true;
+    dontBuild = true;
+    installPhase = ''
+      runHook preInstall
+      mkdir -p $out/bin $out/opt/replay-node
+      cp $src $out/opt/replay-node/node-unwrapped
+      chmod +x $out/opt/replay-node/node-unwrapped
+
+      makeWrapper $out/opt/replay-node/node-unwrapped \
+        $out/opt/replay-node/node \
+        --set "RECORD_REPLAY_DRIVER" "${replay-recordreplay}"
+
+      ln -s $out/opt/replay-node/node $out/bin/replay-node
+      runHook postInstall
+    '';
+
+    meta = with lib; {
+      description = "Event-driven I/O framework for the V8 JavaScript engine, patched for replay";
+      homepage = "https://github.com/RecordReplay/node";
+      license = licenses.mit;
+      maintainers = with maintainers; [ phryneas ];
+      platforms = platforms.linux;
+      mainProgram = "replay-node";
+    };
+  };
+
+  replay-node-cli = stdenv.mkDerivation {
+    pname = "replay-node-cli";
+    version = "0.1.7-" + builtins.head
+      (builtins.match ".*/linux-node-(.*)" metadata.replay-node.url);
+    src = fetchFromGitHub {
+      owner = "RecordReplay";
+      repo = "replay-node-cli";
+      rev = "5269c8b8e7c5c7a9618a68f883d19c11a68be837";
+      sha256 = "04d22q3dvs9vxpb9ps64pdxq9ziwgvnzdgsn6p9p0lzjagh0f5n0";
+    };
+
+    nativeBuildInputs = [ makeWrapper ];
+    buildInputs = [ stdenv.cc.cc.lib nodejs ];
+    dontBuild = true;
+    installPhase = ''
+      runHook preInstall
+      mkdir -p $out/opt/replay-node-cli
+      cp -r * $out/opt/replay-node-cli
+      makeWrapper $out/opt/replay-node-cli/bin/replay-node \
+        $out/bin/replay-node \
+        --prefix "PATH" ":" "${nodejs}/bin" \
+        --set "RECORD_REPLAY_NODE_DIRECTORY" "${replay-node}/opt/replay-node"
+      runHook postInstall
+    '';
+
+    meta = with lib; {
+      description = "The Time Travel Debugger for Web Development - Node Command Line";
+      longDescription = ''
+        The Replay Node Command Line allows you to record node applications and debug them
+        with familiar browser dev tools.
+        You can access the browser DevTools at any point of the recording, adding new logger
+        statements and inspecting the status of variables and the current call stack.
+        Your recordings can be shared with other users for collaborative debugging.
+      '';
+      homepage = "https://www.replay.io/";
+      mainProgram = "replay-node";
+      license = lib.licenses.bsd3;
+      maintainers = with maintainers; [ phryneas ];
+      platforms = [ "x86_64-linux" ];
+    };
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/replay-io/meta.json b/nixpkgs/pkgs/development/tools/replay-io/meta.json
new file mode 100644
index 000000000000..e983390b109b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/replay-io/meta.json
@@ -0,0 +1,15 @@
+{
+  "replay": {
+     "url": "https://static.replay.io/downloads/linux-gecko-20220722-71c783507536-b7eae18423ef.tar.bz2",
+     "sha256": "0d3zbiid849nljhpfffi45qy2frghs33s28r86q8xrnli1d0cg83"
+  },
+  "recordreplay": {
+     "url": "https://static.replay.io/downloads/linux-recordreplay-b7eae18423ef.tgz",
+     "sha256": "1nvhka6ryiw8hac2fkg6va1narb0d7jiqqhxgs1dzblian3kw5j3",
+     "stripRoot": false
+  },
+  "replay-node": {
+      "url": "https://static.replay.io/downloads/linux-node-20220726-bac6d66b5ca1-5b966f2f136c",
+      "sha256": "1563bypnh60wd3k4s5xkla10cymyvnzcl4cfnkpyyrv5920qqc19"
+  }
+}
diff --git a/nixpkgs/pkgs/development/tools/replay-io/update.sh b/nixpkgs/pkgs/development/tools/replay-io/update.sh
new file mode 100755
index 000000000000..49f68d6677ed
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/replay-io/update.sh
@@ -0,0 +1,32 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p curl jq gnused
+
+set -euo pipefail
+
+# e.g. linux-gecko-20220331-59d0a686993f-ffd8d6280276
+BUILD_ID=$(curl https://static.replay.io/downloads/linux-replay.json | jq .buildId -r)
+REVISION=$(echo $BUILD_ID | sed 's/^.*-//')
+NODE_BUILD_ID=$(curl https://static.replay.io/downloads/linux-replay-node.json | jq .buildId -r)
+
+REPLAY_DL=https://static.replay.io/downloads/${BUILD_ID}.tar.bz2
+LIB_DL=https://static.replay.io/downloads/linux-recordreplay-${REVISION}.tgz
+NODE_DL=https://static.replay.io/downloads/${NODE_BUILD_ID}
+
+
+cat >"${BASH_SOURCE%/*}/meta.json" <<EOF
+{
+  "replay": {
+     "url": "${REPLAY_DL}",
+     "sha256": "$(nix-prefetch-url --type sha256 "${REPLAY_DL}")"
+  },
+  "recordreplay": {
+     "url": "${LIB_DL}",
+     "sha256": "$(nix-prefetch-url --type sha256 --unpack "${LIB_DL}")",
+     "stripRoot": false
+  },
+  "replay-node": {
+      "url": "${NODE_DL}",
+      "sha256": "$(nix-prefetch-url --type sha256 "${NODE_DL}")"
+  }
+}
+EOF
diff --git a/nixpkgs/pkgs/development/tools/repository-managers/nexus/default.nix b/nixpkgs/pkgs/development/tools/repository-managers/nexus/default.nix
new file mode 100644
index 000000000000..39776ec53288
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/repository-managers/nexus/default.nix
@@ -0,0 +1,50 @@
+{ lib, stdenv, fetchurl, makeWrapper, jre_headless, gawk }:
+
+stdenv.mkDerivation rec {
+  pname = "nexus";
+  version = "3.52.0-01";
+
+  src = fetchurl {
+    url = "https://download.sonatype.com/nexus/3/nexus-${version}-unix.tar.gz";
+    hash = "sha256-+Hdmuy7WBtUIjEBZyLgE3a3+L/lANHiy1VRBJ2s686U=";
+  };
+
+  preferLocalBuild = true;
+
+  sourceRoot = "${pname}-${version}";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  patches = [ ./nexus-bin.patch ./nexus-vm-opts.patch ];
+
+  postPatch = ''
+    substituteInPlace bin/nexus.vmoptions \
+      --replace ../sonatype-work /var/lib/sonatype-work \
+      --replace etc/karaf $out/etc/karaf \
+      --replace =. =$out
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out
+    cp -rfv * .install4j $out
+    rm -fv $out/bin/nexus.bat
+
+    wrapProgram $out/bin/nexus \
+      --set JAVA_HOME ${jre_headless} \
+      --set ALTERNATIVE_NAME "nexus" \
+      --prefix PATH "${lib.makeBinPath [ gawk ]}"
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Repository manager for binary software components";
+    homepage = "https://www.sonatype.com/products/sonatype-nexus-oss";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.epl10;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ aespinosa ironpinguin zaninime ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/repository-managers/nexus/nexus-bin.patch b/nixpkgs/pkgs/development/tools/repository-managers/nexus/nexus-bin.patch
new file mode 100644
index 000000000000..14bcc973aae7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/repository-managers/nexus/nexus-bin.patch
@@ -0,0 +1,48 @@
+diff --git a/bin/nexus b/bin/nexus
+index d06cb44..37c606e 100755
+--- a/bin/nexus
++++ b/bin/nexus
+@@ -88,7 +88,7 @@ create_db_entry() {
+   fi
+   db_new_file=${db_file}_new
+   if [ -f "$db_file" ]; then
+-    awk '$2 != "'"$test_dir"'" {print $0}' $db_file > $db_new_file
++    awk '$2 != "'"$test_dir"'" {print $scriptname}' $db_file > $db_new_file
+     rm "$db_file"
+     mv "$db_new_file" "$db_file"
+   fi
+@@ -246,7 +246,7 @@ read_vmoptions() {
+ 
+ unpack_file() {
+   if [ -f "$1" ]; then
+-    jar_file=`echo "$1" | awk '{ print substr($0,1,length-5) }'`
++    jar_file=`echo "$1" | awk '{ print substr($scriptname,1,length-5) }'`
+     bin/unpack200 -r "$1" "$jar_file"
+ 
+     if [ $? -ne 0 ]; then
+@@ -377,9 +377,14 @@ fi
+ 
+ old_pwd=`pwd`
+ 
+-progname=`basename "$0"`
+-linkdir=`dirname "$0"`
++scriptname=$0
+ 
++if [ ! -z "$ALTERNATIVE_NAME" ]; then
++  scriptname=`dirname "$0"`"/"$ALTERNATIVE_NAME
++fi
++
++progname=`basename "$scriptname"`
++linkdir=`dirname "$scriptname"`
+ cd "$linkdir"
+ prg="$progname"
+ 
+@@ -590,7 +595,7 @@ return_code=$?
+ 
+     ;;
+     *)
+-        echo "Usage: $0 {start|stop|run|run-redirect|status|restart|force-reload}"
++        echo "Usage: $scriptname {start|stop|run|run-redirect|status|restart|force-reload}"
+         exit 1
+     ;;
+ esac
diff --git a/nixpkgs/pkgs/development/tools/repository-managers/nexus/nexus-vm-opts.patch b/nixpkgs/pkgs/development/tools/repository-managers/nexus/nexus-vm-opts.patch
new file mode 100644
index 000000000000..744b4b96a56b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/repository-managers/nexus/nexus-vm-opts.patch
@@ -0,0 +1,14 @@
+diff --git a/bin/nexus b/bin/nexus
+index e7ed3fb..8db766b 100755
+--- a/bin/nexus
++++ b/bin/nexus
+@@ -440,7 +440,8 @@ add_class_path "$app_home/lib/boot/org.apache.karaf.diagnostic.boot-4.0.9.jar"
+ add_class_path "$app_home/lib/boot/org.apache.karaf.jaas.boot-4.0.9.jar"
+ 
+ vmoptions_val=""
+-read_vmoptions "$prg_dir/$progname.vmoptions"
++VM_OPTS=${VM_OPTS_FILE:-"$prg_dir/$progname.vmoptions"}
++read_vmoptions "$VM_OPTS"
+ INSTALL4J_ADD_VM_PARAMS="$INSTALL4J_ADD_VM_PARAMS $vmoptions_val"
+ 
+ 
diff --git a/nixpkgs/pkgs/development/tools/reshape/default.nix b/nixpkgs/pkgs/development/tools/reshape/default.nix
new file mode 100644
index 000000000000..d0bf9110c14e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/reshape/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, rustPlatform
+, fetchCrate
+, postgresqlTestHook
+, postgresql
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "reshape";
+  version = "0.7.0";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-wv2gKyXCEH+tnZkUUAisMbuseth3dsFiJujH8VO1ii4=";
+  };
+
+  cargoHash = "sha256-VTJ3FNhVLgxo/VVBhk1yF9UUktLXcbrEkYwoyoWFhXA=";
+
+  nativeCheckInputs = [
+    postgresqlTestHook
+    postgresql
+  ];
+
+  dontUseCargoParallelTests = true;
+
+  postgresqlTestSetupPost = ''
+    export POSTGRES_CONNECTION_STRING="user=$PGUSER dbname=$PGDATABASE host=$PGHOST"
+  '';
+
+  postgresqlTestUserOptions = "LOGIN SUPERUSER";
+
+  meta = with lib; {
+    description = "An easy-to-use, zero-downtime schema migration tool for Postgres";
+    homepage = "https://github.com/fabianlindfors/reshape";
+    changelog = "https://github.com/fabianlindfors/reshape/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ilyakooo0 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/resolve-march-native/default.nix b/nixpkgs/pkgs/development/tools/resolve-march-native/default.nix
new file mode 100644
index 000000000000..ae15c490f186
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/resolve-march-native/default.nix
@@ -0,0 +1,30 @@
+{ python3Packages
+, fetchFromGitHub
+, gcc
+, lib
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "resolve-march-native";
+  version = "5.0.2";
+
+  src = fetchFromGitHub {
+    owner = "hartwork";
+    repo = pname;
+    rev = "refs/tags/${version}";
+    hash = "sha256-fkiEWZvg/h8Gn0TL3Ov8aq2cAG5VncUTrVcUTRNOx+Y=";
+  };
+
+  # NB: The tool uses gcc at runtime to resolve the -march=native flags
+  propagatedBuildInputs = [ gcc ];
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "Tool to determine what GCC flags -march=native would resolve into";
+    homepage = "https://github.com/hartwork/resolve-march-native";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ lovesegfault ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/revive/default.nix b/nixpkgs/pkgs/development/tools/revive/default.nix
new file mode 100644
index 000000000000..359d16ac187c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/revive/default.nix
@@ -0,0 +1,53 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+buildGoModule rec {
+  pname = "revive";
+  version = "1.3.6";
+
+  src = fetchFromGitHub {
+    owner = "mgechev";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-0s90Q07D/a0n/SVgMOnjje9pSCWJOzRx5jH+t9th4rs=";
+    # populate values that require us to use git. By doing this in postFetch we
+    # can delete .git afterwards and maintain better reproducibility of the src.
+    leaveDotGit = true;
+    postFetch = ''
+      date -u -d "@$(git -C $out log -1 --pretty=%ct)" "+%Y-%m-%d %H:%M UTC" > $out/DATE
+      git -C $out rev-parse HEAD > $out/COMMIT
+      rm -rf $out/.git
+    '';
+  };
+  vendorHash = "sha256-rFFgh/BWEejqrhCzCeGWa2AfiNd8dYDvCKvcpXk42nY=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/mgechev/revive/cli.version=${version}"
+    "-X github.com/mgechev/revive/cli.builtBy=nix"
+  ];
+
+  # ldflags based on metadata from git and source
+  preBuild = ''
+    ldflags+=" -X github.com/mgechev/revive/cli.commit=$(cat COMMIT)"
+    ldflags+=" -X 'github.com/mgechev/revive/cli.date=$(cat DATE)'"
+  '';
+
+  # The following tests fail when built by nix:
+  #
+  # $ nix log /nix/store/build-revive.1.3.6.drv | grep FAIL
+  #
+  # --- FAIL: TestAll (0.01s)
+  # --- FAIL: TestTimeEqual (0.00s)
+  # --- FAIL: TestTimeNaming (0.00s)
+  # --- FAIL: TestUnhandledError (0.00s)
+  # --- FAIL: TestUnhandledErrorWithBlacklist (0.00s)
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Fast, configurable, extensible, flexible, and beautiful linter for Go";
+    homepage = "https://revive.run";
+    license = licenses.mit;
+    maintainers = with maintainers; [ maaslalani ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rgp/default.nix b/nixpkgs/pkgs/development/tools/rgp/default.nix
new file mode 100644
index 000000000000..bfbccdf9d48f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rgp/default.nix
@@ -0,0 +1,77 @@
+{ lib
+, stdenv
+, makeWrapper
+, fetchurl
+, autoPatchelfHook
+, dbus
+, fontconfig
+, freetype
+, glib
+, libGLU
+, libglvnd
+, libX11
+, libxcb
+, libXi
+, ncurses
+, qtbase
+, qtdeclarative
+, zlib
+}:
+
+let
+  buildNum = "2023-05-22-1083";
+in
+stdenv.mkDerivation {
+  pname = "rgp";
+  version = "1.15.1";
+
+  src = fetchurl {
+    url = "https://gpuopen.com/download/radeon-developer-tool-suite/RadeonDeveloperToolSuite-${buildNum}.tgz";
+    hash = "sha256-WSSiNiiIVw1wwt9vxgyirBDe+SPzH87LU1GlSdUhZB8=";
+  };
+
+  nativeBuildInputs = [ makeWrapper autoPatchelfHook ];
+
+  buildInputs = [
+    dbus
+    fontconfig
+    freetype
+    glib
+    libGLU
+    libglvnd
+    libX11
+    libxcb
+    libXi
+    ncurses
+    qtbase
+    qtdeclarative
+    zlib
+  ];
+
+  dontWrapQtApps = true;
+
+  installPhase = ''
+    mkdir -p $out/opt/rgp $out/bin
+    cp -r . $out/opt/rgp/
+
+    chmod +x $out/opt/rgp/scripts/*
+    patchShebangs $out/opt/rgp/scripts
+
+    for prog in RadeonDeveloperPanel RadeonDeveloperService RadeonDeveloperServiceCLI RadeonGPUAnalyzer RadeonGPUProfiler RadeonMemoryVisualizer RadeonRaytracingAnalyzer rga rtda; do
+      # makeWrapper is needed so that executables are started from the opt
+      # directory, where qt.conf and other tools are
+      makeWrapper \
+        $out/opt/rgp/$prog \
+        $out/bin/$prog
+    done
+  '';
+
+  meta = with lib; {
+    description = "A tool from AMD that allows for deep inspection of GPU workloads";
+    homepage = "https://gpuopen.com/rgp/";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ Flakebi ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/richgo/default.nix b/nixpkgs/pkgs/development/tools/richgo/default.nix
new file mode 100644
index 000000000000..cef70f62ab68
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/richgo/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "richgo";
+  version = "0.3.12";
+
+  src = fetchFromGitHub {
+    owner = "kyoh86";
+    repo = "richgo";
+    rev = "v${version}";
+    sha256 = "sha256-pOB1exuwGwSxStodKhLLwh1xBvLjopUn0k+sEARdA9g=";
+  };
+
+  vendorHash = "sha256-jIzBN5T5+eTFCYOdS5hj3yTGOfU8NTrFmnIu+dDjVeU=";
+
+  meta = with lib; {
+    description = "Enrich `go test` outputs with text decorations";
+    homepage = "https://github.com/kyoh86/richgo";
+    license = licenses.mit;
+    maintainers = with maintainers; [ rvolosatovs ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/riot-redis/default.nix b/nixpkgs/pkgs/development/tools/riot-redis/default.nix
new file mode 100644
index 000000000000..55ac4e8399f8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/riot-redis/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, stdenv
+, fetchzip
+, jre_headless
+, makeWrapper
+}:
+
+stdenv.mkDerivation rec {
+  pname = "riot-redis";
+  version = "2.19.0";
+
+  src = fetchzip {
+    url = "https://github.com/redis-developer/riot/releases/download/v${version}/riot-redis-${version}.zip";
+    sha256 = "sha256-q2ZqFVdjg5HSH4kiwoC1W+a8VgHNxBgNeMaw5n97isc=";
+  };
+
+  buildInputs = [ jre_headless ];
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    cp bin/riot-redis $out/bin
+    cp -R lib $out
+    chmod +x $out/bin/*
+
+    wrapProgram $out/bin/riot-redis \
+      --set JAVA_HOME "${jre_headless}"
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/redis-developer/riot";
+    description = "Get data in and out of Redis";
+    license = licenses.asl20;
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    maintainers = with maintainers; [ wesnel ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rojo/default.nix b/nixpkgs/pkgs/development/tools/rojo/default.nix
new file mode 100644
index 000000000000..1eaeed08316a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rojo/default.nix
@@ -0,0 +1,55 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, pkg-config
+, openssl
+, darwin
+}:
+
+let
+  inherit (darwin.apple_sdk.frameworks) CoreServices SystemConfiguration;
+in
+rustPlatform.buildRustPackage rec {
+  pname = "rojo";
+  version = "7.4.0";
+
+  src = fetchFromGitHub {
+    owner = "rojo-rbx";
+    repo = "rojo";
+    rev = "v${version}";
+    sha256 = "sha256-Eh1G0jX9KXVlMZLl8whxULywadblWml232qvcq4JLJ4=";
+    fetchSubmodules = true;
+  };
+
+  cargoSha256 = "sha256-aKfgylY9aspL1JpdYa6hOy/6lQoqO54OhZWqSlMPZ8o=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [
+    CoreServices
+    SystemConfiguration
+  ];
+
+  # reqwest's native-tls-vendored feature flag uses vendored openssl. this disables that
+  OPENSSL_NO_VENDOR = "1";
+
+  # tests flaky on darwin on hydra
+  doCheck = !stdenv.isDarwin;
+
+  meta = with lib; {
+    description = "Project management tool for Roblox";
+    longDescription = ''
+      Rojo is a tool designed to enable Roblox developers to use professional-grade software engineering tools.
+    '';
+    homepage = "https://rojo.space";
+    downloadPage = "https://github.com/rojo-rbx/rojo/releases/tag/v${version}";
+    changelog = "https://github.com/rojo-rbx/rojo/raw/v${version}/CHANGELOG.md";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ wackbyte ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ronn/Gemfile b/nixpkgs/pkgs/development/tools/ronn/Gemfile
new file mode 100644
index 000000000000..0643ca6ddfdf
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ronn/Gemfile
@@ -0,0 +1,3 @@
+source "https://rubygems.org"
+
+gem "ronn-ng"
diff --git a/nixpkgs/pkgs/development/tools/ronn/Gemfile.lock b/nixpkgs/pkgs/development/tools/ronn/Gemfile.lock
new file mode 100644
index 000000000000..c0366bb17338
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ronn/Gemfile.lock
@@ -0,0 +1,28 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    kramdown (2.4.0)
+      rexml
+    kramdown-parser-gfm (1.1.0)
+      kramdown (~> 2.0)
+    mini_portile2 (2.8.5)
+    mustache (1.1.1)
+    nokogiri (1.16.0)
+      mini_portile2 (~> 2.8.2)
+      racc (~> 1.4)
+    racc (1.7.3)
+    rexml (3.2.6)
+    ronn-ng (0.10.1)
+      kramdown (~> 2, >= 2.1)
+      kramdown-parser-gfm (~> 1, >= 1.0.1)
+      mustache (~> 1)
+      nokogiri (~> 1, >= 1.14.3)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  ronn-ng
+
+BUNDLED WITH
+   2.5.3
diff --git a/nixpkgs/pkgs/development/tools/ronn/default.nix b/nixpkgs/pkgs/development/tools/ronn/default.nix
new file mode 100644
index 000000000000..c3f0d2631848
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ronn/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, lib, bundlerEnv, bundlerUpdateScript, makeWrapper, groff, callPackage }:
+
+stdenv.mkDerivation rec {
+  pname = "ronn";
+  version = env.gems.ronn-ng.version;
+
+  env = bundlerEnv {
+    name = "ronn-gems";
+    gemdir = ./.;
+  };
+
+  dontUnpack = true;
+
+  nativeBuildInputs = [
+    makeWrapper
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    makeWrapper ${env}/bin/ronn $out/bin/ronn \
+      --set PATH ${groff}/bin
+
+    runHook postInstall
+  '';
+
+  passthru.updateScript = bundlerUpdateScript "ronn";
+
+  passthru.tests.reproducible-html-manpage = callPackage ./test-reproducible-html.nix { };
+
+  meta = with lib; {
+    description = "markdown-based tool for building manpages";
+    homepage = "https://github.com/apjanke/ronn-ng";
+    license = licenses.mit;
+    maintainers = with maintainers; [ zimbatm nicknovitski ];
+    platforms = env.ruby.meta.platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ronn/gemset.nix b/nixpkgs/pkgs/development/tools/ronn/gemset.nix
new file mode 100644
index 000000000000..0a65000304be
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ronn/gemset.nix
@@ -0,0 +1,86 @@
+{
+  kramdown = {
+    dependencies = ["rexml"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ic14hdcqxn821dvzki99zhmcy130yhv5fqfffkcf87asv5mnbmn";
+      type = "gem";
+    };
+    version = "2.4.0";
+  };
+  kramdown-parser-gfm = {
+    dependencies = ["kramdown"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0a8pb3v951f4x7h968rqfsa19c8arz21zw1vaj42jza22rap8fgv";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  mini_portile2 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1kl9c3kdchjabrihdqfmcplk3lq4cw1rr9f378y6q22qwy5dndvs";
+      type = "gem";
+    };
+    version = "2.8.5";
+  };
+  mustache = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1l0p4wx15mi3wnamfv92ipkia4nsx8qi132c6g51jfdma3fiz2ch";
+      type = "gem";
+    };
+    version = "1.1.1";
+  };
+  nokogiri = {
+    dependencies = ["mini_portile2" "racc"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1l8b0i24h4irivyhwy9xmkjbggw86cxkzkiqdqg0jpcp9qc8h4rl";
+      type = "gem";
+    };
+    version = "1.16.0";
+  };
+  racc = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "01b9662zd2x9bp4rdjfid07h09zxj7kvn7f5fghbqhzc625ap1dp";
+      type = "gem";
+    };
+    version = "1.7.3";
+  };
+  rexml = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "05i8518ay14kjbma550mv0jm8a6di8yp5phzrd8rj44z9qnrlrp0";
+      type = "gem";
+    };
+    version = "3.2.6";
+  };
+  ronn-ng = {
+    dependencies = ["kramdown" "kramdown-parser-gfm" "mustache" "nokogiri"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1h2y2v3wkl5c710wfanqwxlxi74l1ssva8yrzsg8iypvq22h3ssf";
+      type = "gem";
+    };
+    version = "0.10.1";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ronn/test-reproducible-html.nix b/nixpkgs/pkgs/development/tools/ronn/test-reproducible-html.nix
new file mode 100644
index 000000000000..6bc9d6cdbf9f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ronn/test-reproducible-html.nix
@@ -0,0 +1,30 @@
+{ runCommand
+, diffutils
+, ronn
+}:
+runCommand "ronn-test-reproducible-html" { } ''
+  set -euo pipefail
+
+  cat > aprog.1.ronn << EOF
+  aprog
+  =====
+
+  ## AUTHORS
+
+  Vincent Haupert <veehaitch@users.noreply.github.com>
+  EOF
+
+  # We have to repeat the manpage generation a few times to be confident
+  # it is in fact reproducible.
+  for i in {1..20}; do
+    ${ronn}/bin/ronn --html --pipe aprog.1.ronn > aprog.1.html-1
+    ${ronn}/bin/ronn --html --pipe aprog.1.ronn > aprog.1.html-2
+
+    ${diffutils}/bin/diff -q aprog.1.html-1 aprog.1.html-2 \
+      || (printf 'The HTML manpage is not reproducible (round %d)' "$i" && exit 1)
+  done
+
+  echo 'The HTML manpage appears reproducible'
+
+  mkdir $out
+''
diff --git a/nixpkgs/pkgs/development/tools/roswell/0001-get-image-from-environment.patch b/nixpkgs/pkgs/development/tools/roswell/0001-get-image-from-environment.patch
new file mode 100644
index 000000000000..5eeaf514db95
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/roswell/0001-get-image-from-environment.patch
@@ -0,0 +1,25 @@
+From 40c81f684ec2014ea63a712329f61c52aebe4dba Mon Sep 17 00:00:00 2001
+From: Valentin Boettcher <hiro@protagon.space>
+Date: Wed, 4 Aug 2021 17:25:12 +0200
+Subject: [PATCH] get image from environment
+
+---
+ src/cmd-run-sbcl.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/cmd-run-sbcl.c b/src/cmd-run-sbcl.c
+index a83b56c..dc472bb 100644
+--- a/src/cmd-run-sbcl.c
++++ b/src/cmd-run-sbcl.c
+@@ -12,7 +12,7 @@ char** cmd_run_sbcl(int argc,char** argv,struct sub_command* cmd) {
+   char* impl_path=impldir(arch,os,impl,version);
+   char* help=get_opt("help",0);
+   char* script=get_opt("script",0);
+-  char* image=get_opt("image",0);
++  char* image=get_opt("image",1);
+   char* program=get_opt("program",0);
+   char* dynamic_space_size=get_opt("dynamic-space-size",1);
+   char* control_stack_size=get_opt("control-stack-size",1);
+-- 
+2.32.0
+
diff --git a/nixpkgs/pkgs/development/tools/roswell/default.nix b/nixpkgs/pkgs/development/tools/roswell/default.nix
new file mode 100644
index 000000000000..0ec1dc8fe574
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/roswell/default.nix
@@ -0,0 +1,62 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, curl
+, autoconf
+, automake
+, makeWrapper
+, sbcl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "roswell";
+  version = "23.10.14.114";
+
+  src = fetchFromGitHub {
+    owner = "roswell";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-70BSwRKj1WPvWxQzWPrs8ECkcVosAUaX5cK7FaDUhRc=";
+  };
+
+  patches = [
+    # Load the name of the image from the environment variable so that
+    # it can be consistently overwritten. Using the command line
+    # argument in the wrapper did not work.
+    ./0001-get-image-from-environment.patch
+  ];
+
+  preConfigure = ''
+    sh bootstrap
+  '';
+
+  configureFlags = [ "--prefix=${placeholder "out"}" ];
+
+  postInstall = ''
+    wrapProgram $out/bin/ros \
+      --set image `basename $out` \
+      --add-flags 'lisp=sbcl-bin/system sbcl-bin.version=system -L sbcl-bin' \
+      --prefix PATH : ${lib.makeBinPath [ sbcl ]} --argv0 ros
+  '';
+
+  nativeBuildInputs = [
+    autoconf
+    automake
+    makeWrapper
+  ];
+
+  buildInputs = [
+    sbcl
+    curl
+  ];
+
+  meta = with lib; {
+    description = "Lisp implementation installer/manager and launcher";
+    license = licenses.mit;
+    maintainers = with maintainers; [ hiro98 ];
+    platforms = platforms.unix;
+    homepage = "https://github.com/roswell/roswell";
+    changelog = "https://github.com/roswell/roswell/blob/v${version}/ChangeLog";
+    mainProgram = "ros";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rover/default.nix b/nixpkgs/pkgs/development/tools/rover/default.nix
new file mode 100644
index 000000000000..90b3d91413f7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rover/default.nix
@@ -0,0 +1,54 @@
+{ lib
+, fetchFromGitHub
+, perl
+, rustPlatform
+, darwin
+, stdenv
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rover";
+  version = "0.22.0";
+
+  src = fetchFromGitHub {
+    owner = "apollographql";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-+BsD7SRinU57Alg71N3tdL9iFGGdomVA7SrBE6G1f4E=";
+  };
+
+  cargoSha256 = "sha256-SDvOxvfv8FNUebfwSFnBc6ormK2xpXPjmACwtllHfQE=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+    darwin.apple_sdk.frameworks.CoreServices
+    darwin.apple_sdk.frameworks.SystemConfiguration
+  ];
+
+  nativeBuildInputs = [
+    perl
+  ];
+
+  # This test checks whether the plugins specified in the plugins json file are
+  # valid by making a network call to the repo that houses their binaries; but, the
+  # build env can't make network calls (impurity)
+  cargoTestFlags = [
+    "-- --skip=latest_plugins_are_valid_versions"
+  ];
+
+  passthru.updateScript = ./update.sh;
+
+  # Some tests try to write configuration data to a location in the user's home
+  # directory. Since this would be /homeless-shelter during the build, point at
+  # a writeable location instead.
+  preCheck = ''
+    export APOLLO_CONFIG_HOME="$PWD"
+  '';
+
+  meta = with lib; {
+    description = "A CLI for interacting with ApolloGraphQL's developer tooling, including managing self-hosted and GraphOS graphs.";
+    homepage = "https://www.apollographql.com/docs/rover";
+    license = licenses.mit;
+    maintainers = [ maintainers.ivanbrennan maintainers.aaronarinder ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rover/update.sh b/nixpkgs/pkgs/development/tools/rover/update.sh
new file mode 100755
index 000000000000..3914c9acb540
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rover/update.sh
@@ -0,0 +1,51 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p curl gnugrep gnused jq nix-prefetch
+
+set -eu -o pipefail
+
+dirname=$(realpath "$(dirname "$0")")
+nixpkgs=$(realpath "${dirname}/../../../..")
+
+old_rover_version=$(nix eval --raw -f "$nixpkgs" rover.version)
+rover_url=https://api.github.com/repos/apollographql/rover/releases/latest
+rover_tag=$(curl "$rover_url" | jq --raw-output ".tag_name")
+rover_version="$(expr "$rover_tag" : 'v\(.*\)')"
+
+if [[ "$old_rover_version" == "$rover_version" ]]; then
+    echo "rover is up-to-date: ${old_rover_version}"
+    exit 0
+fi
+
+echo "Fetching rover"
+rover_tar_url="https://github.com/apollographql/rover/archive/refs/tags/${rover_tag}.tar.gz"
+{
+    read rover_hash
+    read repo
+} < <(nix-prefetch-url "$rover_tar_url" --unpack --type sha256 --print-path)
+
+# Convert hash to SRI representation
+rover_sri_hash=$(nix hash to-sri --type sha256 "$rover_hash")
+
+# Update rover version.
+sed --in-place \
+    "s|version = \"[0-9.]*\"|version = \"$rover_version\"|" \
+    "$dirname/default.nix"
+
+# Update rover hash.
+sed --in-place \
+    "s|sha256 = \"[a-zA-Z0-9\/+-=]*\"|sha256 = \"$rover_sri_hash\"|" \
+    "$dirname/default.nix"
+
+# Clear cargoSha256.
+sed --in-place \
+    "s|cargoSha256 = \".*\"|cargoSha256 = \"sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\"|" \
+    "$dirname/default.nix"
+
+# Update cargoSha256
+echo "Computing cargoSha256"
+cargoSha256=$(
+    nix-prefetch "{ sha256 }: (import $nixpkgs {}).rover.cargoDeps.overrideAttrs (_: { outputHash = sha256; })"
+)
+sed --in-place \
+    "s|cargoSha256 = \".*\"|cargoSha256 = \"$cargoSha256\"|" \
+    "$dirname/default.nix"
diff --git a/nixpkgs/pkgs/development/tools/rq/default.nix b/nixpkgs/pkgs/development/tools/rq/default.nix
new file mode 100644
index 000000000000..17a85c0145e8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rq/default.nix
@@ -0,0 +1,35 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rq";
+  version = "1.0.4";
+
+  src = fetchFromGitHub {
+    owner = "dflemstr";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-QyYTbMXikLSe3eYJRUALQJxUJjA6VlvaLMwGrxIKfZI=";
+  };
+
+  cargoSha256 = "sha256-WAgWc9rAQBjrsaHP6s3Djpg3iYmfRVC9J9yq0T/zMqA=";
+
+  postPatch = ''
+    # Remove #[deny(warnings)] which is equivalent to -Werror in C.
+    # Prevents build failures when upgrading rustc, which may give more warnings.
+    substituteInPlace src/lib.rs \
+      --replace "#![deny(warnings)]" ""
+
+    # build script tries to get version information from git
+    # this fixes the --version output
+    rm build.rs
+  '';
+
+  VERGEN_SEMVER = version;
+
+  meta = with lib; {
+    description = "A tool for doing record analysis and transformation";
+    homepage = "https://github.com/dflemstr/rq";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ aristid Br1ght0ne figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rslint/default.nix b/nixpkgs/pkgs/development/tools/rslint/default.nix
new file mode 100644
index 000000000000..1dd66050d2d7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rslint/default.nix
@@ -0,0 +1,27 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rslint";
+  version = "0.3.2";
+
+  src = fetchFromGitHub {
+    owner = "rslint";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-3DEwi+bhqwP8aMpZYl07GZbe7IecraB3m54lZ5LViVc=";
+  };
+
+  cargoSha256 = "sha256-bqF5v52uxbvmVmphXAmcWlCI6nbQzZemCxlTcqhRDTY=";
+
+  cargoBuildFlags = [
+    "-p" "rslint_cli"
+    "-p" "rslint_lsp"
+  ];
+
+  meta = with lib; {
+    description = "A fast, customizable, and easy to use JavaScript and TypeScript linter";
+    homepage = "https://rslint.org";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rstfmt/default.nix b/nixpkgs/pkgs/development/tools/rstfmt/default.nix
new file mode 100644
index 000000000000..e09b18a138d1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rstfmt/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, python3
+, fetchFromGitHub
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "rstfmt";
+  version = "0.0.13";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "dzhu";
+    repo = "rstfmt";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-SJRA14CfoT8XMt3hMB7cLdmuLwsJnBSwhKkD1pJvQCI=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    black
+    docutils
+    sphinx
+  ];
+
+  # Project has no unittest just sample files
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "rstfmt"
+  ];
+
+  meta = with lib; {
+    description = "A formatter for reStructuredText";
+    homepage = "https://github.com/dzhu/rstfmt";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rtags/default.nix b/nixpkgs/pkgs/development/tools/rtags/default.nix
new file mode 100644
index 000000000000..7ee983ef6f9b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rtags/default.nix
@@ -0,0 +1,43 @@
+{ stdenv, lib, fetchFromGitHub, fetchpatch, cmake, llvmPackages, openssl, apple_sdk, emacs, pkg-config }:
+
+stdenv.mkDerivation rec {
+  pname = "rtags";
+  version = "2.38";
+  nativeBuildInputs = [ cmake pkg-config llvmPackages.llvm.dev ];
+  buildInputs = [ llvmPackages.llvm llvmPackages.libclang openssl emacs ]
+    ++ lib.optionals stdenv.cc.isGNU [ llvmPackages.clang-unwrapped ]
+    ++ lib.optionals stdenv.isDarwin [ apple_sdk.libs.xpc apple_sdk.frameworks.CoreServices ];
+
+  src = fetchFromGitHub {
+    owner = "andersbakken";
+    repo = "rtags";
+    rev = "v${version}";
+    sha256 = "sha256-EJ5pC53S36Uu7lM6KuLvLN6MAyrQW/Yk5kPqZNS5m8c=";
+    fetchSubmodules = true;
+    # unicode file names lead to different checksums on HFS+ vs. other
+    # filesystems because of unicode normalisation
+    postFetch = ''
+      rm $out/src/rct/tests/testfile_*.txt
+    '';
+  };
+
+  # This should be fixed with the next verison bump
+  # https://github.com/Andersbakken/rtags/issues/1411
+  patches = [(fetchpatch {
+    name = "define-obsolete-function-alias.patch";
+    url = "https://github.com/Andersbakken/rtags/commit/63f18acb21e664fd92fbc19465f0b5df085b5e93.patch";
+    sha256 = "sha256-dmEPtnk8Pylmf5479ovHKItRZ+tJuOWuYOQbWB/si/Y=";
+  })];
+
+  preConfigure = ''
+    export LIBCLANG_CXXFLAGS="-isystem ${llvmPackages.clang.cc}/include $(llvm-config --cxxflags) -fexceptions" \
+           LIBCLANG_LIBDIR="${llvmPackages.clang.cc}/lib"
+  '';
+
+  meta = {
+    description = "C/C++ client-server indexer based on clang";
+    homepage = "https://github.com/andersbakken/rtags";
+    license = lib.licenses.gpl3;
+    platforms = with lib.platforms; x86_64 ++ aarch64;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rubyfmt/0002-remove-dependency-on-git.patch b/nixpkgs/pkgs/development/tools/rubyfmt/0002-remove-dependency-on-git.patch
new file mode 100644
index 000000000000..d7e3b90ab79f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rubyfmt/0002-remove-dependency-on-git.patch
@@ -0,0 +1,62 @@
+From 3bbc396c4ddc8a5e26f7776155bb366c8d47c440 Mon Sep 17 00:00:00 2001
+From: Bob van der Linden <bobvanderlinden@gmail.com>
+Date: Thu, 9 Feb 2023 16:55:00 +0100
+Subject: [PATCH 2/2] remove dependency on git
+
+---
+ librubyfmt/build.rs | 35 +++--------------------------------
+ 1 file changed, 3 insertions(+), 32 deletions(-)
+
+diff --git a/librubyfmt/build.rs b/librubyfmt/build.rs
+index ef94c09..4668785 100644
+--- a/librubyfmt/build.rs
++++ b/librubyfmt/build.rs
+@@ -26,27 +26,9 @@ fn main() -> Output {
+     let path = std::env::current_dir()?;
+     let ruby_checkout_path = path.join("ruby_checkout");
+ 
+-    let old_checkout_sha = if ruby_checkout_path.join(ripper).exists() {
+-        Some(get_ruby_checkout_sha())
+-    } else {
+-        None
+-    };
+-
+-    let _ = Command::new("git")
+-        .args(&["submodule", "update", "--init"])
+-        .status();
+-
+-    let new_checkout_sha = get_ruby_checkout_sha();
+-
+-    // Only rerun this build if the ruby_checkout has changed
+-    match old_checkout_sha {
+-        Some(old_sha) if old_sha == new_checkout_sha => {}
+-        _ => {
+-            make_configure(&ruby_checkout_path)?;
+-            run_configure(&ruby_checkout_path)?;
+-            build_ruby(&ruby_checkout_path)?;
+-        }
+-    }
++    make_configure(&ruby_checkout_path)?;
++    run_configure(&ruby_checkout_path)?;
++    build_ruby(&ruby_checkout_path)?;
+ 
+     cc::Build::new()
+         .file("src/rubyfmt.c")
+@@ -152,14 +134,3 @@ fn check_process_success(command: &str, code: ExitStatus) -> Output {
+     }
+ }
+ 
+-fn get_ruby_checkout_sha() -> String {
+-    String::from_utf8(
+-        Command::new("git")
+-            .args(&["rev-parse", "HEAD"])
+-            .current_dir("./ruby_checkout")
+-            .output()
+-            .expect("git rev-parse shouldn't fail")
+-            .stdout,
+-    )
+-    .expect("output should be valid utf8")
+-}
+-- 
+2.39.1
+
diff --git a/nixpkgs/pkgs/development/tools/rubyfmt/default.nix b/nixpkgs/pkgs/development/tools/rubyfmt/default.nix
new file mode 100644
index 000000000000..15457e80aad9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rubyfmt/default.nix
@@ -0,0 +1,83 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+, autoconf
+, automake
+, bison
+, ruby
+, zlib
+, readline
+, libiconv
+, libobjc
+, libunwind
+, libxcrypt
+, libyaml
+, Foundation
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rubyfmt";
+  version = "0.10.0";
+
+  src = fetchFromGitHub {
+    owner = "fables-tales";
+    repo = "rubyfmt";
+    rev = "v${version}";
+    hash = "sha256-IIHPU6iwFwQ5cOAtOULpMSjexFtTelSd/LGLuazdmUo=";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [
+    autoconf
+    automake
+    bison
+    ruby
+  ];
+
+  buildInputs = [
+    zlib
+    libxcrypt
+    libyaml
+  ] ++ lib.optionals stdenv.isDarwin [
+    readline
+    libiconv
+    libobjc
+    libunwind
+    Foundation
+    Security
+  ];
+
+  preConfigure = ''
+    pushd librubyfmt/ruby_checkout
+    autoreconf --install --force --verbose
+    ./configure
+    popd
+  '';
+
+  cargoPatches = [
+    # Avoid checking whether ruby gitsubmodule is up-to-date.
+    ./0002-remove-dependency-on-git.patch
+  ];
+
+  cargoHash = "sha256-QZ26GmsKyENkzdCGg2peie/aJhEt7KQAF/lwsibonDk=";
+
+  env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.isDarwin "-fdeclspec";
+
+  preFixup = ''
+    mv $out/bin/rubyfmt{-main,}
+  '';
+
+  meta = with lib; {
+    description = "A Ruby autoformatter";
+    homepage = "https://github.com/fables-tales/rubyfmt";
+    license = licenses.mit;
+    maintainers = with maintainers; [ bobvanderlinden ];
+    # = note: Undefined symbols for architecture x86_64:
+    #       "_utimensat", referenced from:
+    #           _utime_internal in librubyfmt-3c969812b3b27083.rlib(file.o)
+    broken = stdenv.isDarwin && stdenv.isx86_64;
+    mainProgram = "rubyfmt";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rucksack/default.nix b/nixpkgs/pkgs/development/tools/rucksack/default.nix
new file mode 100644
index 000000000000..1aad7a5c8da1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rucksack/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub, liblaxjson, cmake, freeimage }:
+
+stdenv.mkDerivation rec {
+  version = "3.1.0";
+  pname = "rucksack";
+
+  src = fetchFromGitHub {
+    owner = "andrewrk";
+    repo = "rucksack";
+    rev = version;
+    sha256 = "0bcm20hqxqnq1j0zghb9i7z9frri6bbf7rmrv5g8dd626sq07vyv";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ liblaxjson freeimage ];
+
+  meta = with lib; {
+    description = "Texture packer and resource bundler";
+    platforms = [ "i686-linux" "x86_64-linux" ]; # fails on Darwin and AArch64
+    homepage = "https://github.com/andrewrk/rucksack";
+    license = licenses.mit;
+    maintainers = [ maintainers.andrewrk ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ruff/default.nix b/nixpkgs/pkgs/development/tools/ruff/default.nix
new file mode 100644
index 000000000000..999c8e54baaf
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ruff/default.nix
@@ -0,0 +1,76 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, fetchpatch
+, installShellFiles
+, stdenv
+, darwin
+, rust-jemalloc-sys
+, ruff-lsp
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "ruff";
+  version = "0.2.1";
+
+  src = fetchFromGitHub {
+    owner = "astral-sh";
+    repo = "ruff";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-VcDDGi6fPGZ75+J7aOSr7S6Gt5bpr0vM2Sk/Utlmf4k=";
+  };
+
+  patches = [
+    # TODO: remove at next release
+    (fetchpatch {
+      name = "filter-out-test-rules-in-ruleselector-json-schema";
+      url = "https://github.com/astral-sh/ruff/commit/49c5e715f9c85aa8d0412b2ec9b1dd6f7ae24c5c.patch";
+      hash = "sha256-s0Nv5uW3TKfKgro3V3E8Q0c8uOTgOKZQx9CxXge4YWE=";
+    })
+  ];
+
+  # The following specific substitution is not working as the current directory is `/build/source` and thus has no mention of `ruff` in it.
+  # https://github.com/astral-sh/ruff/blob/866bea60a5de3c59d2537b0f3a634ae0ac9afd94/crates/ruff/tests/show_settings.rs#L12
+  # -> Just patch it so that it expects the actual current directory and not `"[BASEPATH]"`.
+  postPatch = ''
+    substituteInPlace crates/ruff/tests/snapshots/show_settings__display_default_settings.snap \
+      --replace '"[BASEPATH]"' '"'$PWD'"'
+  '';
+
+  cargoHash = "sha256-B7AiDNWEN4i/Lz9yczlRNXczQph52SMa3pcxK2AtO2A=";
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  buildInputs = [
+    rust-jemalloc-sys
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.CoreServices
+  ];
+
+  # tests expect no colors
+  preCheck = ''
+    export NO_COLOR=1
+  '';
+
+  postInstall = ''
+    installShellCompletion --cmd ruff \
+      --bash <($out/bin/ruff generate-shell-completion bash) \
+      --fish <($out/bin/ruff generate-shell-completion fish) \
+      --zsh <($out/bin/ruff generate-shell-completion zsh)
+  '';
+
+  passthru.tests = {
+    inherit ruff-lsp;
+  };
+
+  meta = with lib; {
+    description = "An extremely fast Python linter";
+    homepage = "https://github.com/astral-sh/ruff";
+    changelog = "https://github.com/astral-sh/ruff/releases/tag/v${version}";
+    license = licenses.mit;
+    mainProgram = "ruff";
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rufo/Gemfile b/nixpkgs/pkgs/development/tools/rufo/Gemfile
new file mode 100644
index 000000000000..5db4a68b13ca
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rufo/Gemfile
@@ -0,0 +1,3 @@
+source 'https://rubygems.org'
+
+gem 'rufo'
diff --git a/nixpkgs/pkgs/development/tools/rufo/Gemfile.lock b/nixpkgs/pkgs/development/tools/rufo/Gemfile.lock
new file mode 100644
index 000000000000..57951b5236e8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rufo/Gemfile.lock
@@ -0,0 +1,13 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    rufo (0.17.0)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  rufo
+
+BUNDLED WITH
+   2.5.3
diff --git a/nixpkgs/pkgs/development/tools/rufo/default.nix b/nixpkgs/pkgs/development/tools/rufo/default.nix
new file mode 100644
index 000000000000..f198ce36d91b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rufo/default.nix
@@ -0,0 +1,17 @@
+{ bundlerApp, bundlerUpdateScript, lib }:
+
+bundlerApp {
+  pname = "rufo";
+  gemdir = ./.;
+  exes = [ "rufo" ];
+
+  passthru.updateScript = bundlerUpdateScript "rufo";
+
+  meta = with lib; {
+    description = "Ruby formatter";
+    homepage = "https://github.com/ruby-formatter/rufo";
+    license = licenses.mit;
+    maintainers = with maintainers; [ andersk ];
+    mainProgram = "rufo";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rufo/gemset.nix b/nixpkgs/pkgs/development/tools/rufo/gemset.nix
new file mode 100644
index 000000000000..36b2d87637a9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rufo/gemset.nix
@@ -0,0 +1,12 @@
+{
+  rufo = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1rqq6mf7fvwvc9m3d5w5ysch3h7z4ml1vvdvy26064fb6lrnn5ai";
+      type = "gem";
+    };
+    version = "0.17.0";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/run/default.nix b/nixpkgs/pkgs/development/tools/run/default.nix
new file mode 100644
index 000000000000..ea7b8880636e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/run/default.nix
@@ -0,0 +1,23 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+buildGoModule rec {
+  pname = "run";
+  version = "0.11.2";
+
+  src = fetchFromGitHub {
+    owner = "TekWizely";
+    repo = "run";
+    rev = "v${version}";
+    sha256 = "sha256-an5AuRJJEM18IssdLLZC/zzPpsVCCtawRQXK/AfzMN0=";
+  };
+
+  vendorHash = "sha256-BAyhuE9hGGDfDGmXQ7dseUvHlK5vC87uLT78lHSvLeg=";
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Easily manage and invoke small scripts and wrappers";
+    homepage    = "https://github.com/TekWizely/run";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ rawkode Br1ght0ne ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rund/default.nix b/nixpkgs/pkgs/development/tools/rund/default.nix
new file mode 100644
index 000000000000..186e044318e0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rund/default.nix
@@ -0,0 +1,49 @@
+{stdenv, lib, fetchFromGitHub, ldc ? null, dcompiler ? ldc }:
+
+assert dcompiler != null;
+
+stdenv.mkDerivation rec {
+  pname = "rund";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "dragon-lang";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "10x6f1nn294r5qnpacrpcbp348dndz5fv4nz6ih55c61ckpkvgcf";
+  };
+
+  buildInputs = [ dcompiler ];
+  buildPhase = ''
+    for candidate in dmd ldmd2 gdmd; do
+      echo Checking for DCompiler $candidate ...
+      dc=$(type -P $candidate || echo "")
+      if [ ! "$dc" == "" ]; then
+        break
+      fi
+    done
+    if [ "$dc" == "" ]; then
+      exit "Error: could not find a D compiler"
+    fi
+    echo Using DCompiler $candidate
+    $dc -I=$src/src -i -run $src/make.d build --out $NIX_BUILD_TOP
+  '';
+
+  doCheck = true;
+  checkPhase = ''
+    $NIX_BUILD_TOP/rund make.d test
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mv $NIX_BUILD_TOP/rund $out/bin
+  '';
+
+  meta = with lib; {
+    description = "A compiler-wrapper that runs and caches D programs";
+    homepage = "https://github.com/dragon-lang/rund";
+    license = lib.licenses.boost;
+    maintainers = with maintainers; [ jonathanmarler ];
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust-code-analysis/default.nix b/nixpkgs/pkgs/development/tools/rust-code-analysis/default.nix
new file mode 100644
index 000000000000..eaf87a1908f9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust-code-analysis/default.nix
@@ -0,0 +1,30 @@
+{ lib, rustPlatform, fetchCrate, stdenv }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rust-code-analysis";
+  version = "0.0.25";
+
+  src = fetchCrate {
+    pname = "rust-code-analysis-cli";
+    inherit version;
+    hash = "sha256-/Irmtsy1PdRWQ7dTAHLZJ9M0J7oi2IiJyW6HeTIDOCs=";
+  };
+
+  cargoHash = "sha256-axrtFZQOm1/UUBq1CDFkaZCks1mWoLWmfajDfsqSBmY=";
+
+  # Work around https://github.com/NixOS/nixpkgs/issues/166205.
+  env = lib.optionalAttrs stdenv.cc.isClang {
+    NIX_LDFLAGS = "-l${stdenv.cc.libcxx.cxxabi.libName}";
+  };
+
+  meta = with lib; {
+    description = "Analyze and collect metrics on source code";
+    homepage = "https://github.com/mozilla/rust-code-analysis";
+    license = with licenses; [
+      mit # grammars
+      mpl20 # code
+    ];
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "rust-code-analysis-cli";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/bindgen/default.nix b/nixpkgs/pkgs/development/tools/rust/bindgen/default.nix
new file mode 100644
index 000000000000..462eb6022c5a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/bindgen/default.nix
@@ -0,0 +1,47 @@
+{ rust-bindgen-unwrapped, zlib, bash, runCommand, runCommandCC }:
+let
+  clang = rust-bindgen-unwrapped.clang;
+  self = runCommand "rust-bindgen-${rust-bindgen-unwrapped.version}"
+    {
+      #for substituteAll
+      inherit bash;
+      unwrapped = rust-bindgen-unwrapped;
+      libclang = clang.cc.lib;
+      meta = rust-bindgen-unwrapped.meta // {
+        longDescription = rust-bindgen-unwrapped.meta.longDescription + ''
+          This version of bindgen is wrapped with the required compiler flags
+          required to find the c and c++ standard library, as well as the libraries
+          specified in the buildInputs of your derivation.
+        '';
+      };
+      passthru.tests = {
+        simple-c = runCommandCC "simple-c-bindgen-tests" { } ''
+          echo '#include <stdlib.h>' > a.c
+          ${self}/bin/bindgen a.c --allowlist-function atoi | tee output
+          grep atoi output
+          touch $out
+        '';
+        simple-cpp = runCommandCC "simple-cpp-bindgen-tests" { } ''
+          echo '#include <cmath>' > a.cpp
+          ${self}/bin/bindgen a.cpp --allowlist-function erf -- -xc++ | tee output
+          grep erf output
+          touch $out
+        '';
+        with-lib = runCommandCC "zlib-bindgen-tests" { buildInputs = [ zlib ]; } ''
+          echo '#include <zlib.h>' > a.c
+          ${self}/bin/bindgen a.c --allowlist-function compress | tee output
+          grep compress output
+          touch $out
+        '';
+      };
+    }
+    # if you modify the logic to find the right clang flags, also modify rustPlatform.bindgenHook
+    ''
+    mkdir -p $out/bin
+    export cincludes="$(< ${clang}/nix-support/cc-cflags) $(< ${clang}/nix-support/libc-cflags)"
+    export cxxincludes="$(< ${clang}/nix-support/libcxx-cxxflags)"
+    substituteAll ${./wrapper.sh} $out/bin/bindgen
+    chmod +x $out/bin/bindgen
+  '';
+in
+self
diff --git a/nixpkgs/pkgs/development/tools/rust/bindgen/unwrapped.nix b/nixpkgs/pkgs/development/tools/rust/bindgen/unwrapped.nix
new file mode 100644
index 000000000000..859d82618063
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/bindgen/unwrapped.nix
@@ -0,0 +1,50 @@
+{ lib, fetchCrate, rustPlatform, clang, rustfmt
+, runtimeShell
+, bash
+}:
+let
+  # bindgen hardcodes rustfmt outputs that use nightly features
+  rustfmt-nightly = rustfmt.override { asNightly = true; };
+in rustPlatform.buildRustPackage rec {
+  pname = "rust-bindgen-unwrapped";
+  version = "0.69.2";
+
+  src = fetchCrate {
+    pname = "bindgen-cli";
+    inherit version;
+    sha256 = "sha256-ytbaXCVNXXBtJet5CBkCNUoISxdFXt/kgb4VVZisUXE=";
+  };
+
+  cargoHash = "sha256-pnoCq25CrZIAQNkDsokIVVyUYLlg7WY6th17IgeW9x8=";
+
+  buildInputs = [ clang.cc.lib ];
+
+  preConfigure = ''
+    export LIBCLANG_PATH="${clang.cc.lib}/lib"
+  '';
+
+  doCheck = true;
+  nativeCheckInputs = [ clang ];
+
+  RUSTFMT = "${rustfmt-nightly}/bin/rustfmt";
+
+  preCheck = ''
+    # for the ci folder, notably
+    patchShebangs .
+  '';
+
+  passthru = { inherit clang; };
+
+  meta = with lib; {
+    description = "Automatically generates Rust FFI bindings to C (and some C++) libraries";
+    longDescription = ''
+      Bindgen takes a c or c++ header file and turns them into
+      rust ffi declarations.
+    '';
+    homepage = "https://github.com/rust-lang/rust-bindgen";
+    license = with licenses; [ bsd3 ];
+    maintainers = with maintainers; [ johntitor ralith ];
+    mainProgram = "bindgen";
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/bindgen/wrapper.sh b/nixpkgs/pkgs/development/tools/rust/bindgen/wrapper.sh
new file mode 100755
index 000000000000..b7110385c26d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/bindgen/wrapper.sh
@@ -0,0 +1,36 @@
+#!@bash@/bin/bash
+sep='--'   # whether to add -- before new options
+cxx=0      # whether cxx was explicitly requested
+lastWasx=0 # whether the last argument passed was -x
+for e in "$@"; do
+  if [[ "$e" == "--" ]]; then
+    sep=
+  fi;
+  if [[ "$sep" == "" ]]; then
+    # we look for -x c++ after -- only
+    if [[ "$e" == "-x" ]]; then
+      lastWasx=1
+    fi;
+    if [[ $lastWasx -eq 1 && "$e" == "c++" ]]; then
+      lastWasx=0
+      cxx=1
+    fi;
+    if [[ "$e" == "-xc++" || "$e" == -std=c++* ]]; then
+      cxx=1
+    fi;
+  fi;
+done;
+cxxflags=
+if [[ $cxx -eq 1 ]]; then
+  cxxflags="@cxxincludes@"
+fi;
+if [[ -n "$NIX_DEBUG" ]]; then
+  set -x;
+fi;
+export LIBCLANG_PATH="@libclang@/lib"
+# shellcheck disable=SC2086
+# cxxflags and NIX_CFLAGS_COMPILE should be word-split
+exec -a "$0" @unwrapped@/bin/bindgen "$@" $sep $cxxflags @cincludes@ $NIX_CFLAGS_COMPILE
+# note that we add the flags after $@ which is incorrect. This is only for the sake
+# of simplicity.
+
diff --git a/nixpkgs/pkgs/development/tools/rust/bootimage/default.nix b/nixpkgs/pkgs/development/tools/rust/bootimage/default.nix
new file mode 100644
index 000000000000..9da7aeaa8cc3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/bootimage/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "bootimage";
+  version = "0.10.3";
+
+  src = fetchFromGitHub {
+    owner = "rust-osdev";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "12p18mk3l473is3ydv3zmn6s7ck8wgjwavllimcpja3yjilxm3zg";
+  };
+
+  cargoSha256 = "03jximwqgjq7359c5mxbyfja2d04y57h34f87aby8jy0lz99jy2x";
+
+  meta = with lib; {
+    description = "Creates a bootable disk image from a Rust OS kernel.";
+    homepage = "https://github.com/rust-osdev/bootimage";
+    license = with licenses; [ asl20 mit ];
+    maintainers = with maintainers; [ dbeckwith ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-about/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-about/default.nix
new file mode 100644
index 000000000000..65e429c220d7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-about/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, zstd
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-about";
+  version = "0.6.0";
+
+  src = fetchFromGitHub {
+    owner = "EmbarkStudios";
+    repo = "cargo-about";
+    rev = version;
+    sha256 = "sha256-srJ5NyO+kySFCcqyF0i99Zvh2XsNAyFvTUcks/kt0qs=";
+  };
+
+  cargoHash = "sha256-eO4dBXVBjuN68cTvw8LzzJEedu5+dizOMu4QFEOzKK8=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ zstd ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  env = {
+    ZSTD_SYS_USE_PKG_CONFIG = true;
+  };
+
+  meta = with lib; {
+    description = "Cargo plugin to generate list of all licenses for a crate";
+    homepage = "https://github.com/EmbarkStudios/cargo-about";
+    changelog = "https://github.com/EmbarkStudios/cargo-about/blob/${version}/CHANGELOG.md";
+    license = with licenses; [ mit /* or */ asl20 ];
+    maintainers = with maintainers; [ evanjs figsoda matthiasbeyer ];
+    mainProgram = "cargo-about";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-all-features/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-all-features/default.nix
new file mode 100644
index 000000000000..b4ba6b52afad
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-all-features/default.nix
@@ -0,0 +1,23 @@
+{ lib
+, rustPlatform
+, fetchCrate
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-all-features";
+  version = "1.10.0";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-/w3Xd7PXUNtqzRYmUqJtth+GDuXSnsk1NiYCTYsHuAQ=";
+  };
+
+  cargoHash = "sha256-d69jj2FGptjndJG1tq3Fb/8F3kuFXN5otsYGhXYhhZg=";
+
+  meta = with lib; {
+    description = "A Cargo subcommand to build and test all feature flag combinations";
+    homepage = "https://github.com/frewsxcv/cargo-all-features";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ figsoda matthiasbeyer ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-apk/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-apk/default.nix
new file mode 100644
index 000000000000..6bb05552e079
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-apk/default.nix
@@ -0,0 +1,24 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchCrate
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-apk";
+  version = "0.9.6";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-1vCrM+0SNefd7FrRXnSjLhM3/MSVJfcL4k1qAstX+/A=";
+  };
+
+  cargoSha256 = "sha256-rGn3MKbqIRWayarsgedIOhuTTl8lyRsRxn7BN5Id97w=";
+
+  meta = with lib; {
+    description = "Tool for creating Android packages";
+    homepage = "https://github.com/rust-windowing/android-ndk-rs";
+    license = with licenses;[ mit asl20 ];
+    maintainers = with maintainers; [ nickcao ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-asm/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-asm/default.nix
new file mode 100644
index 000000000000..68d5a256bbf4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-asm/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-asm";
+  version = "2019-12-24";
+
+  src = fetchFromGitHub {
+    owner = "gnzlbg";
+    repo = "cargo-asm";
+    rev = "577f890ebd4a09c8265710261e976fe7bfce8668";
+    sha256 = "1f6kzsmxgdms9lq5z9ynnmxymk9k2lzlp3caa52wqjvdw1grw0rb";
+  };
+
+  cargoSha256 = "1c22aal3i7zbyxr2c41fimfx13fwp9anmhh641951yd7cqb8xij2";
+
+  buildInputs = lib.optional stdenv.isDarwin Security;
+
+  # Test checks against machine code output, which fails with some
+  # LLVM/compiler versions.
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Display the assembly or LLVM-IR generated for Rust source code";
+    homepage = "https://github.com/gnzlbg/cargo-asm";
+    license = licenses.mit;
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-audit/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-audit/default.nix
new file mode 100644
index 000000000000..0ef6f59b89c8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-audit/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, rustPlatform
+, fetchCrate
+, pkg-config
+, libgit2_1_5
+, openssl
+, zlib
+, stdenv
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-audit";
+  version = "0.18.3";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-8KLH6aPZhHtxC4hbMaebv1JiVkZH8p5QqnUXkJrmr4w=";
+  };
+
+  cargoHash = "sha256-8MOZvhREm4ch2flstx7J25j8mvwV3uGez5f1xkZ+S7I=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    libgit2_1_5
+    openssl
+    zlib
+  ] ++ lib.optionals stdenv.isDarwin [
+    Security
+  ];
+
+  buildFeatures = [ "fix" ];
+
+  # The tests require network access which is not available in sandboxed Nix builds.
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Audit Cargo.lock files for crates with security vulnerabilities";
+    homepage = "https://rustsec.org";
+    changelog = "https://github.com/rustsec/rustsec/blob/cargo-audit/v${version}/cargo-audit/CHANGELOG.md";
+    license = with licenses; [ mit /* or */ asl20 ];
+    maintainers = with maintainers; [ basvandijk figsoda jk ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-bazel/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-bazel/default.nix
new file mode 100644
index 000000000000..26409d25002b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-bazel/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, stdenv
+, fetchCrate
+, rustPlatform
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-bazel";
+  version = "0.8.0";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "FS1WFlK0YNq1QCi3S3f5tMN+Bdcfx2dxhDKRLXLcios=";
+  };
+
+  cargoSha256 = "+PVNB/apG5AR236Ikqt+JTz20zxc0HUi7z6BU6xq/Fw=";
+
+  buildInputs = lib.optional stdenv.isDarwin Security;
+
+  # `test_data` is explicitly excluded from the package published to crates.io, so tests cannot be run
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Part of the `crate_universe` collection of tools which use Cargo to generate build targets for Bazel";
+    homepage = "https://github.com/bazelbuild/rules_rust";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ rickvanprim ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-benchcmp/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-benchcmp/default.nix
new file mode 100644
index 000000000000..d46a57355d73
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-benchcmp/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, substituteAll
+, stdenv
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-benchcmp";
+  version = "0.4.4";
+
+  src = fetchFromGitHub {
+    owner = "BurntSushi";
+    repo = "cargo-benchcmp";
+    rev = version;
+    hash = "sha256-pg3/VUC1DQ7GbSQDfVZ0WNisXvzXy0O0pr2ik2ar2h0=";
+  };
+
+  cargoHash = "sha256-vxy9Ym3Twx034I1E5fWNnbP1ttfLolMbO1IgRiPfhRw=";
+
+  patches = [
+    # patch the binary path so tests can find the binary when `--target` is present
+    (substituteAll {
+      src = ./fix-test-binary-path.patch;
+      shortTarget = stdenv.hostPlatform.rust.rustcTarget;
+    })
+  ];
+
+  checkFlags = [
+    # thread 'different_input_colored' panicked at 'assertion failed: `(left == right)`
+    "--skip=different_input_colored"
+  ];
+
+  meta = with lib; {
+    description = "A small utility to compare Rust micro-benchmarks";
+    homepage = "https://github.com/BurntSushi/cargo-benchcmp";
+    license = with licenses; [ mit unlicense ];
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-benchcmp/fix-test-binary-path.patch b/nixpkgs/pkgs/development/tools/rust/cargo-benchcmp/fix-test-binary-path.patch
new file mode 100644
index 000000000000..f4643e670ce6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-benchcmp/fix-test-binary-path.patch
@@ -0,0 +1,30 @@
+--- a/tests/integration.rs
++++ b/tests/integration.rs
+@@ -16,20 +16,13 @@ impl CommandUnderTest {
+     fn new() -> CommandUnderTest {
+         // To find the directory where the built binary is, we walk up the directory tree of the test binary until the
+         // parent is "target/".
+-        let mut binary_path = env::current_exe().expect("need current binary path to find binary to test");
+-        loop {
+-            {
+-                let parent = binary_path.parent();
+-                if parent.is_none() {
+-                    panic!("Failed to locate binary path from original path: {:?}", env::current_exe());
+-                }
+-                let parent = parent.unwrap();
+-                if parent.is_dir() && parent.file_name().unwrap() == "target" {
+-                    break;
+-                }
+-            }
+-            binary_path.pop();
+-        }
++        let mut binary_path = PathBuf::from(
++            env::current_dir()
++                .unwrap()
++                .join("target")
++                .join("@shortTarget@")
++                .join(env!("cargoBuildType")),
++        );
+ 
+         binary_path.push(
+             if cfg!(target_os = "windows") {
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-binstall/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-binstall/default.nix
new file mode 100644
index 000000000000..da6cbe70f51f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-binstall/default.nix
@@ -0,0 +1,64 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, bzip2
+, xz
+, zstd
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-binstall";
+  version = "1.6.2";
+
+  src = fetchFromGitHub {
+    owner = "cargo-bins";
+    repo = "cargo-binstall";
+    rev = "v${version}";
+    hash = "sha256-pUxCiVOFrn6ytzxYvaaWe6uBrSwXOSoKh3DyGNUl3rM=";
+  };
+
+  cargoHash = "sha256-uoDH440vmupcz1jYyz8i3dVuPt+/W0H9mBZgriAPC0w=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    bzip2
+    xz
+    zstd
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.SystemConfiguration
+  ];
+
+  buildNoDefaultFeatures = true;
+  buildFeatures = [
+    "fancy-no-backtrace"
+    "git"
+    "pkg-config"
+    "rustls"
+    "trust-dns"
+    "zstd-thin"
+  ];
+
+  cargoBuildFlags = [ "-p" "cargo-binstall" ];
+  cargoTestFlags = [ "-p" "cargo-binstall" ];
+
+  checkFlags = [
+    # requires internet access
+    "--skip=download::test::test_and_extract"
+    "--skip=gh_api_client::test::test_gh_api_client_cargo_binstall_no_such_release"
+    "--skip=gh_api_client::test::test_gh_api_client_cargo_binstall_v0_20_1"
+  ];
+
+  meta = with lib; {
+    description = "A tool for installing rust binaries as an alternative to building from source";
+    homepage = "https://github.com/cargo-bins/cargo-binstall";
+    changelog = "https://github.com/cargo-bins/cargo-binstall/releases/tag/v${version}";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-binutils/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-binutils/default.nix
new file mode 100644
index 000000000000..ddb5e3c199bf
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-binutils/default.nix
@@ -0,0 +1,24 @@
+{ lib, rustPlatform, fetchCrate }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-binutils";
+  version = "0.3.6";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-tRh3+X6QCdkkJE1O60ZRkDBRbznGZ1aB1AOmcz0EINI=";
+  };
+
+  cargoSha256 = "sha256-lZJcsCg7e5ZmClnzKFjm/roXBIyhkPTzS7R6BTmcNIk=";
+
+  meta = with lib; {
+    description = "Cargo subcommands to invoke the LLVM tools shipped with the Rust toolchain";
+    longDescription = ''
+      In order for this to work, you either need to run `rustup component add llvm-tools-preview` or install the `llvm-tools-preview` component using your Nix library (e.g. fenix or rust-overlay)
+    '';
+    homepage = "https://github.com/rust-embedded/cargo-binutils";
+    changelog = "https://github.com/rust-embedded/cargo-binutils/blob/v${version}/CHANGELOG.md";
+    license = with licenses; [ asl20 mit ];
+    maintainers = with maintainers; [ stupremee matthiasbeyer ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-bisect-rustc/0001-dynamically-patchelf-binaries.patch b/nixpkgs/pkgs/development/tools/rust/cargo-bisect-rustc/0001-dynamically-patchelf-binaries.patch
new file mode 100644
index 000000000000..3df226835ab9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-bisect-rustc/0001-dynamically-patchelf-binaries.patch
@@ -0,0 +1,56 @@
+diff --git a/src/toolchains.rs b/src/toolchains.rs
+index 53a7ddb..795a711 100644
+--- a/src/toolchains.rs
++++ b/src/toolchains.rs
+@@ -206,6 +206,8 @@ impl Toolchain {
+             })?;
+         }
+ 
++        nix_patchelf(tmpdir.path().to_path_buf())
++            .expect("failed to patch toolchain for NixOS");
+         fs::rename(tmpdir.into_path(), dest).map_err(InstallError::Move)
+     }
+ 
+@@ -533,3 +535,42 @@ fn download_tarball(
+         res => res,
+     }
+ }
++
++fn nix_patchelf(mut toolchain_path: PathBuf) -> io::Result<()> {
++    toolchain_path.push("bin");
++
++    for entry in toolchain_path.read_dir()? {
++        let entry = entry?;
++        if !entry.file_type()?.is_file() {
++            continue;
++        }
++
++        eprintln!("info: you seem to be running NixOS. Attempting to patch {}",
++                  entry.path().to_str().unwrap());
++        let _ = ::std::process::Command::new("@patchelf@/bin/patchelf")
++            .arg("--set-interpreter")
++            .arg("@dynamicLinker@")
++            .arg(entry.path())
++            .output();
++    }
++
++    toolchain_path.pop();
++    toolchain_path.push("lib");
++
++    for entry in toolchain_path.read_dir()? {
++        let entry = entry?;
++        if !entry.file_type()?.is_file() {
++            continue;
++        }
++
++        eprintln!("info: you seem to be running NixOS. Attempting to patch {}",
++                  entry.path().to_str().unwrap());
++        let _ = ::std::process::Command::new("@patchelf@/bin/patchelf")
++            .arg("--set-rpath")
++            .arg("@libPath@")
++            .arg(entry.path())
++            .output();
++    }
++
++    Ok(())
++}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-bisect-rustc/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-bisect-rustc/default.nix
new file mode 100644
index 000000000000..da57b85e083e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-bisect-rustc/default.nix
@@ -0,0 +1,62 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, rustPlatform
+, pkg-config
+, openssl
+, runCommand
+, patchelf
+, zlib
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-bisect-rustc";
+  version = "0.6.8";
+
+  src = fetchFromGitHub {
+    owner = "rust-lang";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-7HiM1oRuLSfRaum66duag/w8ncFdxRLF0yeSGlIey0Y=";
+  };
+
+  patches =
+    let
+      patchelfPatch = runCommand "0001-dynamically-patchelf-binaries.patch"
+        {
+          CC = stdenv.cc;
+          patchelf = patchelf;
+          libPath = "$ORIGIN/../lib:${lib.makeLibraryPath [ zlib ]}";
+        }
+        ''
+          export dynamicLinker=$(cat $CC/nix-support/dynamic-linker)
+          substitute ${./0001-dynamically-patchelf-binaries.patch} $out \
+            --subst-var patchelf \
+            --subst-var dynamicLinker \
+            --subst-var libPath
+        '';
+    in
+    lib.optionals stdenv.isLinux [ patchelfPatch ];
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [
+    Security
+  ];
+
+  cargoHash = "sha256-CgEs0cejquFRY3VN6CgbE23Gipg+LEuWp/jSIkITrjw=";
+
+  checkFlags = [
+    "--skip test_github"  # requires internet
+  ];
+
+  meta = with lib; {
+    description = "Bisects rustc, either nightlies or CI artifacts";
+    homepage = "https://github.com/rust-lang/cargo-bisect-rustc";
+    license = with licenses; [ asl20 mit ];
+    maintainers = with maintainers; [ davidtwco ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-bitbake/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-bitbake/default.nix
new file mode 100644
index 000000000000..2d26cf97da4d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-bitbake/default.nix
@@ -0,0 +1,26 @@
+{ lib, pkg-config, rustPlatform, fetchFromGitHub, openssl }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-bitbake";
+  version = "0.3.16";
+
+  src = fetchFromGitHub {
+    owner = "meta-rust";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-+ovC4nZwHzf9hjfv2LcnTztM2m++tpC3mUSS/I0l6Ck=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ openssl ];
+
+  cargoSha256 = "sha256-LYdQ0FLfCopY8kPTCmiW0Qyx6sHA4nlb+hK9hXezGLg=";
+
+  meta = with lib; {
+    description = "Cargo extension that can generate BitBake recipes utilizing the classes from meta-rust";
+    homepage = "https://github.com/meta-rust/cargo-bitbake";
+    license = with licenses; [ mit asl20 ];
+    maintainers = with maintainers; [ rvarago ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-bloat/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-bloat/default.nix
new file mode 100644
index 000000000000..03f8922ba632
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-bloat/default.nix
@@ -0,0 +1,24 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-bloat";
+  version = "0.11.1";
+
+  src = fetchFromGitHub {
+    owner = "RazrFalcon";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-lCA7C1G2xu65jn3/wzj6prWSrjQz3EqqJyMlPR/HRFs=";
+  };
+
+  cargoSha256 = "sha256-fOenXn5gagFss9DRDXXsGxQlDqVXZ5LZcdM4WsXAyUU=";
+
+  meta = with lib; {
+    description = "A tool and Cargo subcommand that helps you find out what takes most of the space in your executable";
+    homepage = "https://github.com/RazrFalcon/cargo-bloat";
+    license = licenses.mit;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ xrelkd matthiasbeyer ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-bolero/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-bolero/default.nix
new file mode 100644
index 000000000000..15a3a28183a0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-bolero/default.nix
@@ -0,0 +1,22 @@
+{ lib, rustPlatform, fetchCrate, libbfd, libopcodes, libunwind }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-bolero";
+  version = "0.9.0";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-BuqbM55P/st+4XUSCwrqILUUCfwvSlxhKQFO+IZLa8U=";
+  };
+
+  cargoSha256 = "sha256-+TxMOKoId13meXqmr1QjDZMNqBnPEDQF1VSPheq8Ji0=";
+
+  buildInputs = [ libbfd libopcodes libunwind ];
+
+  meta = with lib; {
+    description = "Fuzzing and property testing front-end framework for Rust";
+    homepage = "https://github.com/camshaft/bolero";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ ekleog ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-bundle-licenses/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-bundle-licenses/default.nix
new file mode 100644
index 000000000000..0274f80e01b8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-bundle-licenses/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-bundle-licenses";
+  version = "1.3.0";
+
+  src = fetchFromGitHub {
+    owner = "sstadick";
+    repo = "cargo-bundle-licenses";
+    rev = "v${version}";
+    hash = "sha256-pWQU0IMahbFJR7oRUqnz73cB8yRbTpkh5NASmUKg0E0=";
+  };
+
+  cargoHash = "sha256-eUY3dyyWbqSqFqafdZ2AdI7vsH60vCRNk2cAGJw0ROk=";
+
+  meta = with lib; {
+    description = "Generate a THIRDPARTY file with all licenses in a cargo project";
+    homepage = "https://github.com/sstadick/cargo-bundle-licenses";
+    changelog = "https://github.com/sstadick/cargo-bundle-licenses/blob/${src.rev}/CHANGELOG.md";
+    license = with licenses; [ mit asl20 ];
+    maintainers = with maintainers; [ figsoda matthiasbeyer ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-bundle/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-bundle/default.nix
new file mode 100644
index 000000000000..73924d1c599a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-bundle/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, stdenv
+, darwin
+, libxkbcommon
+, wayland
+}:
+
+rustPlatform.buildRustPackage {
+  pname = "cargo-bundle";
+  # the latest stable release fails to build on darwin
+  version = "unstable-2023-08-18";
+
+  src = fetchFromGitHub {
+    owner = "burtonageo";
+    repo = "cargo-bundle";
+    rev = "c9f7a182d233f0dc4ad84e10b1ffa0d44522ea43";
+    hash = "sha256-n+c83pmCvFdNRAlcadmcZvYj+IRqUYeE8CJVWWYbWDQ=";
+  };
+
+  cargoHash = "sha256-Ea658jHomktmzXtU5wmd0bRX+i5n46hCvexYxYbjjUc=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.AppKit
+  ] ++ lib.optionals stdenv.isLinux [
+    libxkbcommon
+    wayland
+  ];
+
+  meta = with lib; {
+    description = "Wrap rust executables in OS-specific app bundles";
+    homepage = "https://github.com/burtonageo/cargo-bundle";
+    license = with licenses; [ asl20 mit ];
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-c/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-c/default.nix
new file mode 100644
index 000000000000..7ea4f6067bec
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-c/default.nix
@@ -0,0 +1,60 @@
+{ lib
+, rustPlatform
+, fetchCrate
+, pkg-config
+, curl
+, openssl
+, stdenv
+, CoreFoundation
+, libiconv
+, Security
+, rav1e
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-c";
+  version = "0.9.24";
+
+  src = fetchCrate {
+    inherit pname;
+    # this version may need to be updated along with package version
+    version = "${version}+cargo-0.73.0";
+    hash = "sha256-eNaK+SRrHz/DXkCcJP040R6bdhyFmjxkwHbXVFlHub8=";
+  };
+
+  cargoHash = "sha256-Us50BbdNSJAx7JTKkvA4tjbGNueCJsAwGEelc1sP5pc=";
+
+  nativeBuildInputs = [ pkg-config (lib.getDev curl) ];
+  buildInputs = [ openssl curl ] ++ lib.optionals stdenv.isDarwin [
+    CoreFoundation
+    libiconv
+    Security
+  ];
+
+  # Ensure that we are avoiding build of the curl vendored in curl-sys
+  doInstallCheck = stdenv.hostPlatform.libc == "glibc";
+  installCheckPhase = ''
+    runHook preInstallCheck
+
+    ldd "$out/bin/cargo-cbuild" | grep libcurl.so
+
+    runHook postInstallCheck
+  '';
+
+  passthru.tests = {
+    inherit rav1e;
+  };
+
+  meta = with lib; {
+    description = "A cargo subcommand to build and install C-ABI compatible dynamic and static libraries";
+    longDescription = ''
+      Cargo C-ABI helpers. A cargo applet that produces and installs a correct
+      pkg-config file, a static library and a dynamic library, and a C header
+      to be used by any C (and C-compatible) software.
+    '';
+    homepage = "https://github.com/lu-zero/cargo-c";
+    changelog = "https://github.com/lu-zero/cargo-c/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-cache/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-cache/default.nix
new file mode 100644
index 000000000000..8e37c1489dfd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-cache/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, libiconv, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-cache";
+  version = "0.8.3";
+
+  src = fetchFromGitHub {
+    owner = "matthiaskrgr";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-q9tYKXK8RqiqbDZ/lTxUI1Dm/h28/yZR8rTQuq+roZs=";
+  };
+
+  cargoSha256 = "sha256-275QREIcncgBk4ah/CivSz5N2m6s/XPCfp6JGChpr38=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [ libiconv Security ];
+
+  checkFlagsArray = [ "offline_tests" ];
+
+  meta = with lib; {
+    description = "Manage cargo cache (\${CARGO_HOME}, ~/.cargo/), print sizes of dirs and remove dirs selectively";
+    homepage = "https://github.com/matthiaskrgr/cargo-cache";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ Br1ght0ne matthiasbeyer ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-careful/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-careful/default.nix
new file mode 100644
index 000000000000..7d147241b46e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-careful/default.nix
@@ -0,0 +1,25 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-careful";
+  version = "0.4.1";
+
+  src = fetchFromGitHub {
+    owner = "RalfJung";
+    repo = "cargo-careful";
+    rev = "v${version}";
+    hash = "sha256-oiwR6NgHHu9B1L6dSK6KZfgcSdwBPEzUZONwPHr0a4k=";
+  };
+
+  cargoHash = "sha256-sVIAY9eYlpyS/PU6kLInc4hMeD3qcewoMbTH+wTIBuI=";
+
+  meta = with lib; {
+    description = "A tool to execute Rust code carefully, with extra checking along the way";
+    homepage = "https://github.com/RalfJung/cargo-careful";
+    license = with licenses; [ asl20 mit ];
+    maintainers = with maintainers; [ figsoda matthiasbeyer ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-chef/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-chef/default.nix
new file mode 100644
index 000000000000..986c70a16fb2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-chef/default.nix
@@ -0,0 +1,20 @@
+{ lib, rustPlatform, fetchCrate }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-chef";
+  version = "0.1.63";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-AkkLK1WQFOevKAv+jGd4ofDMmM8l0oJOV9liYJETtIk=";
+  };
+
+  cargoHash = "sha256-iqAi+V3AZ+OhR/c9FJSUa8Fon16rpD0B2o5zsGown9U=";
+
+  meta = with lib; {
+    description = "A cargo-subcommand to speed up Rust Docker builds using Docker layer caching";
+    homepage = "https://github.com/LukeMathWalker/cargo-chef";
+    license = licenses.mit;
+    maintainers = with maintainers; [ kkharji ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-clone/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-clone/default.nix
new file mode 100644
index 000000000000..6a8f432ecab7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-clone/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, openssl
+, stdenv
+, Security
+, SystemConfiguration
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-clone";
+  version = "1.2.1";
+
+  src = fetchFromGitHub {
+    owner = "janlikar";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-al+C3p9jzPbykflt3WN+SibHm/AN4BdTxuTGmFiGGrE=";
+  };
+
+  cargoHash = "sha256-sQVjK6i+wXwOfQMvnatl6PQ1S+91I58YEtRjzjSNNo8=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ openssl ] ++ lib.optionals stdenv.isDarwin [
+    Security
+    SystemConfiguration
+  ];
+
+  # requires internet access
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A cargo subcommand to fetch the source code of a Rust crate";
+    homepage = "https://github.com/janlikar/cargo-clone";
+    changelog = "https://github.com/janlikar/cargo-clone/blob/v${version}/CHANGELOG.md";
+    license = with licenses; [ asl20 mit ];
+    maintainers = with maintainers; [ figsoda matthiasbeyer ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-codspeed/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-codspeed/default.nix
new file mode 100644
index 000000000000..849aa5a8ca59
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-codspeed/default.nix
@@ -0,0 +1,51 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, curl
+, pkg-config
+, libgit2_1_5
+, openssl
+, zlib
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-codspeed";
+  version = "2.3.3";
+
+  src = fetchFromGitHub {
+    owner = "CodSpeedHQ";
+    repo = "codspeed-rust";
+    rev = "v${version}";
+    hash = "sha256-8wbJFvAXicchxI8FTthCiuYCZ2WA4nMUJTUD4WKG5FI=";
+  };
+
+  cargoHash = "sha256-HkFROhjx4bh9QMUlCT1xj3s7aUQxn0ef3FCXoEsYCnY=";
+
+  nativeBuildInputs = [
+    curl
+    pkg-config
+  ];
+
+  buildInputs = [
+    curl
+    libgit2_1_5
+    openssl
+    zlib
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  cargoBuildFlags = [ "-p=cargo-codspeed" ];
+  cargoTestFlags = cargoBuildFlags;
+
+  meta = with lib; {
+    description = "Cargo extension to build & run your codspeed benchmarks";
+    homepage = "https://github.com/CodSpeedHQ/codspeed-rust";
+    changelog = "https://github.com/CodSpeedHQ/codspeed-rust/releases/tag/${src.rev}";
+    license = with licenses; [ mit asl20 ];
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "cargo-codspeed";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-component/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-component/default.nix
new file mode 100644
index 000000000000..1f15ce1d560f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-component/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, openssl
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-component";
+  version = "0.7.1";
+
+  src = fetchFromGitHub {
+    owner = "bytecodealliance";
+    repo = "cargo-component";
+    rev = "v${version}";
+    hash = "sha256-FmaJUdi3hJEd0Fo4tgzne47aP8U/SK+S0UDVEG/P6e8=";
+  };
+
+  cargoHash = "sha256-8Shw3YSHBFHkw57ZVNjJo/eg2fXvyTVKM9kPX17pfkM=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.SystemConfiguration
+  ];
+
+  # requires the wasm32-wasi target
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A Cargo subcommand for creating WebAssembly components based on the component model proposal";
+    homepage = "https://github.com/bytecodealliance/cargo-component";
+    changelog = "https://github.com/bytecodealliance/cargo-component/releases/tag/${src.rev}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "cargo-component";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-cranky/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-cranky/default.nix
new file mode 100644
index 000000000000..1af60f183fdc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-cranky/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-cranky";
+  version = "0.3.0";
+
+  src = fetchFromGitHub {
+    owner = "ericseppanen";
+    repo = "cargo-cranky";
+    rev = "v${version}";
+    hash = "sha256-3ARl3z+2nz05UaKf8ChN6mvPY2qMjUNxGnGJ1P0xkas=";
+  };
+
+  cargoHash = "sha256-jmyrtaJTdZlffC7i5k7z9BEsHAs1rPTCs2/jgq1Jt6Y=";
+
+  meta = with lib; {
+    description = "An easy to configure wrapper for Rust's clippy";
+    homepage = "https://github.com/ericseppanen/cargo-cranky";
+    changelog = "https://github.com/ericseppanen/cargo-cranky/releases/tag/${src.rev}";
+    license = with licenses; [ asl20 mit ];
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-crev/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-crev/default.nix
new file mode 100644
index 000000000000..26606ecd5ee7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-crev/default.nix
@@ -0,0 +1,46 @@
+{ lib, stdenv
+, fetchFromGitHub
+, rustPlatform
+, perl
+, pkg-config
+, SystemConfiguration
+, Security
+, CoreFoundation
+, curl
+, libiconv
+, openssl
+, git
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-crev";
+  version = "0.25.6";
+
+  src = fetchFromGitHub {
+    owner = "crev-dev";
+    repo = "cargo-crev";
+    rev = "v${version}";
+    sha256 = "sha256-kMbbUXiU549JwblLzcP4X5rs6Qu8vaLKB5rnZSpKHKQ=";
+  };
+
+  cargoHash = "sha256-gUHy8yXTiQd3/7IyVmiq0QqXKF4ZVhF+riryEj/w2NI=";
+
+  preCheck = ''
+    export HOME=$(mktemp -d)
+    git config --global user.name "Nixpkgs Test"
+    git config --global user.email "nobody@example.com"
+  '';
+
+  nativeBuildInputs = [ perl pkg-config ];
+
+  buildInputs = [ openssl ] ++ lib.optionals stdenv.isDarwin [ SystemConfiguration Security CoreFoundation libiconv curl ];
+
+  nativeCheckInputs = [ git ];
+
+  meta = with lib; {
+    description = "A cryptographically verifiable code review system for the cargo (Rust) package manager";
+    homepage = "https://github.com/crev-dev/cargo-crev";
+    license = with licenses; [ asl20 mit mpl20 ];
+    maintainers = with maintainers; [ b4dm4n matthiasbeyer ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-criterion/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-criterion/default.nix
new file mode 100644
index 000000000000..cc9f5ae255cc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-criterion/default.nix
@@ -0,0 +1,22 @@
+{ lib, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-criterion";
+  version = "1.1.0";
+
+  src = fetchFromGitHub {
+    owner = "bheisler";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-RPix9DM6E32PhObvV3xPGrnXrrVHn3auxLUhysP8GM0=";
+  };
+
+  cargoSha256 = "sha256-L/ILHKWlcYTkbEi2qDu7tf/3NHfTl6GhW0s+fUlsW08=";
+
+  meta = with lib; {
+    description = "Cargo extension for running Criterion.rs benchmarks";
+    homepage = "https://github.com/bheisler/cargo-criterion";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ humancalico matthiasbeyer ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-cross/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-cross/default.nix
new file mode 100644
index 000000000000..d94c15890bb1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-cross/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, nix-update-script
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-cross";
+  version = "0.2.5";
+
+  src = fetchFromGitHub {
+    owner = "cross-rs";
+    repo = "cross";
+    rev = "refs/tags/v${version}";
+    sha256 = "sha256-TFPIQno30Vm5m2nZ2b3d0WPu/98UqANLhw3IZiE5a38=";
+  };
+
+  cargoSha256 = "sha256-x+DrKo79R8TAeLVuvIIguQs3gdAHiAQ9dUU2/eZRZ0c=";
+
+  checkFlags = [
+    "--skip=docker::shared::tests::directories::test_host"
+  ];
+
+  passthru = {
+    updateScript = nix-update-script { };
+  };
+
+  meta = with lib; {
+    description = "Zero setup cross compilation and cross testing";
+    homepage = "https://github.com/cross-rs/cross";
+    changelog = "https://github.com/cross-rs/cross/blob/v${version}/CHANGELOG.md";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ otavio ];
+    mainProgram = "cross";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-cyclonedx/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-cyclonedx/default.nix
new file mode 100644
index 000000000000..acfd450f209a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-cyclonedx/default.nix
@@ -0,0 +1,51 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, openssl
+, Security
+, SystemConfiguration
+, CoreFoundation
+, curl
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-cyclonedx";
+  version = "0.4.1";
+
+  src = fetchFromGitHub {
+    owner = "CycloneDX";
+    repo = "cyclonedx-rust-cargo";
+    rev = "${pname}-${version}";
+    hash = "sha256-JrusJsMjaWAsWAssU+q87BCH2ouLfthIw47ypwBkR9o=";
+  };
+
+  cargoHash = "sha256-QzEojbwBF7s3C+LlFWle0+8DVtyEljuqAcMAyRJqFcs=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [
+    Security
+    SystemConfiguration
+    CoreFoundation
+    curl
+  ];
+
+  meta = with lib; {
+    description = "Creates CycloneDX Software Bill of Materials (SBOM) from Rust (Cargo) projects";
+    longDescription = ''
+      The CycloneDX module for Rust (Cargo) creates a valid CycloneDX Software
+      Bill-of-Material (SBOM) containing an aggregate of all project
+      dependencies. CycloneDX is a lightweight SBOM specification that is
+      easily created, human and machine readable, and simple to parse.
+    '';
+    homepage = "https://github.com/CycloneDX/cyclonedx-rust-cargo";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ nikstur ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-deadlinks/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-deadlinks/default.nix
new file mode 100644
index 000000000000..ead5705c59ae
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-deadlinks/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, rustPlatform, fetchFromGitHub, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-deadlinks";
+  version = "0.8.1";
+
+  src = fetchFromGitHub {
+    owner = "deadlinks";
+    repo = pname;
+    rev = version;
+    sha256 = "0s5q9aghncsk9834azn5cgnn5ms3zzyjan2rq06kaqcgzhld4cjh";
+  };
+
+  cargoSha256 = "00g06zf0m1wry0mhf098pw99kbb99d8a17985pb90yf1w74rdkh6";
+
+  checkFlags = [
+    # uses internet
+    "--skip non_existent_http_link --skip working_http_check"
+  ] ++ lib.optional (stdenv.hostPlatform.system != "x86_64-linux")
+    # assumes the target is x86_64-unknown-linux-gnu
+    "--skip simple_project::it_checks_okay_project_correctly";
+
+  buildInputs = lib.optional stdenv.isDarwin Security;
+
+  meta = with lib; {
+    description = "Cargo subcommand to check rust documentation for broken links";
+    homepage = "https://github.com/deadlinks/cargo-deadlinks";
+    changelog = "https://github.com/deadlinks/cargo-deadlinks/blob/${version}/CHANGELOG.md";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ newam matthiasbeyer ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-deb/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-deb/default.nix
new file mode 100644
index 000000000000..99838b98e924
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-deb/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, makeWrapper
+, dpkg
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-deb";
+  version = "2.0.5";
+
+  src = fetchFromGitHub {
+    owner = "kornelski";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-s/VM3MF3X+2x/0CktzbOPdo8zQMUS5z92hRGfn5P6/w=";
+  };
+
+  cargoHash = "sha256-4FGnX+Uj3SYs0OBJZQrNF4fvKm8XIMdiSBOPYxF45yU=";
+
+  nativeBuildInputs = [
+    makeWrapper
+  ];
+
+  # This is an FHS specific assert depending on glibc location
+  checkFlags = [
+    "--skip=dependencies::resolve_test"
+    "--skip=run_cargo_deb_command_on_example_dir_with_separate_debug_symbols"
+  ];
+
+  postInstall = ''
+    wrapProgram $out/bin/cargo-deb \
+      --prefix PATH : ${lib.makeBinPath [ dpkg ]}
+  '';
+
+  meta = with lib; {
+    description = "A cargo subcommand that generates Debian packages from information in Cargo.toml";
+    homepage = "https://github.com/kornelski/cargo-deb";
+    license = licenses.mit;
+    maintainers = with maintainers; [ Br1ght0ne matthiasbeyer ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-deny/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-deny/default.nix
new file mode 100644
index 000000000000..ac17d62fe9e2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-deny/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, zstd
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-deny";
+  version = "0.14.11";
+
+  src = fetchFromGitHub {
+    owner = "EmbarkStudios";
+    repo = "cargo-deny";
+    rev = version;
+    hash = "sha256-xK6Q1p5SlpFGQ1ZtSHGFBwwL2z1LMcdM/jaC5RWglts=";
+  };
+
+  cargoHash = "sha256-6HSdbyBBnvcbJzXBvtuqbauVqLoSuAzo73S+4vioo8I=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    zstd
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+    darwin.apple_sdk.frameworks.SystemConfiguration
+  ];
+
+  env = {
+    ZSTD_SYS_USE_PKG_CONFIG = true;
+  };
+
+  # tests require internet access
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Cargo plugin to generate list of all licenses for a crate";
+    homepage = "https://github.com/EmbarkStudios/cargo-deny";
+    changelog = "https://github.com/EmbarkStudios/cargo-deny/blob/${version}/CHANGELOG.md";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ figsoda matthiasbeyer jk ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-depgraph/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-depgraph/default.nix
new file mode 100644
index 000000000000..1e7c63574c99
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-depgraph/default.nix
@@ -0,0 +1,23 @@
+{ lib, rustPlatform, fetchFromSourcehut }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-depgraph";
+  version = "1.5.0";
+
+  src = fetchFromSourcehut {
+    owner = "~jplatte";
+    repo = "cargo-depgraph";
+    rev = "v${version}";
+    hash = "sha256-q9a7O6lSsQz9nJ82uG1oNyNyNebzXEanVWh3xkypqqM=";
+  };
+
+  cargoHash = "sha256-gmSNYxyizaVvz38R0nTdUp9nP/f4hxgHO9hVV3RFP6U=";
+
+  meta = with lib; {
+    description = "Create dependency graphs for cargo projects using `cargo metadata` and graphviz";
+    homepage = "https://sr.ht/~jplatte/cargo-depgraph";
+    changelog = "https://git.sr.ht/~jplatte/cargo-depgraph/tree/${src.rev}/item/CHANGELOG.md";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ figsoda matthiasbeyer ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-dephell/Cargo.lock b/nixpkgs/pkgs/development/tools/rust/cargo-dephell/Cargo.lock
new file mode 100644
index 000000000000..832a4a283791
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-dephell/Cargo.lock
@@ -0,0 +1,2548 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "aho-corasick"
+version = "0.7.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67fc08ce920c31afb70f013dcce1bfc3a3195de6a228474e45e1f145b36f8d04"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "android_system_properties"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "ansi_term"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
+dependencies = [
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.71"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8"
+
+[[package]]
+name = "arrayvec"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b"
+
+[[package]]
+name = "askama"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d298738b6e47e1034e560e5afe63aa488fea34e25ec11b855a76f0d7b8e73134"
+dependencies = [
+ "askama_derive",
+ "askama_escape",
+ "askama_shared",
+]
+
+[[package]]
+name = "askama_derive"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca2925c4c290382f9d2fa3d1c1b6a63fa1427099721ecca4749b154cc9c25522"
+dependencies = [
+ "askama_shared",
+ "proc-macro2",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "askama_escape"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "619743e34b5ba4e9703bba34deac3427c72507c7159f5fd030aea8cac0cfe341"
+
+[[package]]
+name = "askama_shared"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d6083ccb191711e9c2b80b22ee24a8381a18524444914c746d4239e21d1afaf"
+dependencies = [
+ "askama_escape",
+ "humansize",
+ "nom",
+ "num-traits",
+ "percent-encoding",
+ "proc-macro2",
+ "quote",
+ "serde",
+ "syn 1.0.109",
+ "toml",
+]
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi 0.1.19",
+ "libc",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "base64"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bitmaps"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "031043d04099746d8db04daf1fa424b2bc8bd69d92b25962dcde24da39ab64a2"
+dependencies = [
+ "typenum",
+]
+
+[[package]]
+name = "bitvec"
+version = "0.19.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "55f93d0ef3363c364d5976646a38f04cf67cfe1d4c8d160cdea02cab2c116b33"
+dependencies = [
+ "funty",
+ "radium",
+ "tap",
+ "wyz",
+]
+
+[[package]]
+name = "bstr"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3d4260bcc2e8fc9df1eac4919a720effeb63a3f0952f5bf4944adfa18897f09"
+dependencies = [
+ "memchr",
+ "serde",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.12.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c6ed94e98ecff0c12dd1b04c15ec0d7d9458ca8fe806cea6f12954efe74c63b"
+
+[[package]]
+name = "bytes"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e4cec68f03f32e44924783795810fa50a7035d8c8ebe78580ad7e6c703fba38"
+
+[[package]]
+name = "bytes"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be"
+
+[[package]]
+name = "bytesize"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38fcc2979eff34a4b84e1cf9a1e3da42a7d44b3b690a40cdcb23e3d556cfb2e5"
+
+[[package]]
+name = "camino"
+version = "1.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c530edf18f37068ac2d977409ed5cd50d53d73bc653c7647b48eb78976ac9ae2"
+
+[[package]]
+name = "cargo"
+version = "0.51.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb7d89cbdcbeada632f64aa9f692e265852b0eb6ccdf3b1814716cc62101eeb6"
+dependencies = [
+ "anyhow",
+ "atty",
+ "bytesize",
+ "cargo-platform",
+ "clap",
+ "core-foundation",
+ "crates-io",
+ "crossbeam-utils",
+ "crypto-hash",
+ "curl",
+ "curl-sys",
+ "env_logger",
+ "filetime",
+ "flate2",
+ "fwdansi",
+ "git2",
+ "git2-curl",
+ "glob",
+ "hex 0.4.3",
+ "home",
+ "humantime",
+ "ignore",
+ "im-rc",
+ "jobserver",
+ "lazy_static",
+ "lazycell",
+ "libc",
+ "libgit2-sys",
+ "log",
+ "memchr",
+ "miow 0.3.7",
+ "num_cpus",
+ "opener",
+ "percent-encoding",
+ "rustc-workspace-hack",
+ "rustfix",
+ "same-file",
+ "semver 0.10.0",
+ "serde",
+ "serde_ignored",
+ "serde_json",
+ "shell-escape",
+ "strip-ansi-escapes",
+ "tar",
+ "tempfile",
+ "termcolor",
+ "toml",
+ "unicode-width",
+ "unicode-xid",
+ "url",
+ "walkdir",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "cargo-dephell"
+version = "0.5.1"
+dependencies = [
+ "askama",
+ "base64",
+ "camino",
+ "cargo",
+ "cargo_metadata",
+ "chrono",
+ "clap",
+ "glob",
+ "guppy",
+ "ignore",
+ "loc",
+ "regex",
+ "reqwest",
+ "serde",
+ "serde_json",
+ "tempdir",
+]
+
+[[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.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7714a157da7991e23d90686b9524b9e12e0407a108647f52e9328f4b3d51ac7f"
+dependencies = [
+ "cargo-platform",
+ "semver 0.11.0",
+ "semver-parser 0.10.2",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "cc"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
+dependencies = [
+ "jobserver",
+]
+
+[[package]]
+name = "cfg-expr"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30aa9e2ffbb838c6b451db14f3cd8e63ed622bf859f9956bc93845a10fafc26a"
+dependencies = [
+ "smallvec 1.10.0",
+]
+
+[[package]]
+name = "cfg-if"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
+
+[[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.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4e3c5919066adf22df73762e50cffcde3a758f2a848b113b586d1f86728b673b"
+dependencies = [
+ "iana-time-zone",
+ "js-sys",
+ "num-integer",
+ "num-traits",
+ "time",
+ "wasm-bindgen",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "clap"
+version = "2.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c"
+dependencies = [
+ "ansi_term",
+ "atty",
+ "bitflags",
+ "strsim",
+ "textwrap",
+ "unicode-width",
+ "vec_map",
+]
+
+[[package]]
+name = "commoncrypto"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d056a8586ba25a1e4d61cb090900e495952c7886786fc55f909ab2f819b69007"
+dependencies = [
+ "commoncrypto-sys",
+]
+
+[[package]]
+name = "commoncrypto-sys"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fed34f46747aa73dfaa578069fd8279d2818ade2b55f38f22a9401c7f4083e2"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "core-foundation"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
+
+[[package]]
+name = "crates-io"
+version = "0.31.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09f977948a46e9edf93eb3dc2d7a8dd4ce3105d36de63300befed37cdf051d4a"
+dependencies = [
+ "anyhow",
+ "curl",
+ "percent-encoding",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "url",
+]
+
+[[package]]
+name = "crc32fast"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "crypto-hash"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a77162240fd97248d19a564a565eb563a3f592b386e4136fb300909e67dddca"
+dependencies = [
+ "commoncrypto",
+ "hex 0.3.2",
+ "openssl",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "curl"
+version = "0.4.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "509bd11746c7ac09ebd19f0b17782eae80aadee26237658a6b4808afb5c11a22"
+dependencies = [
+ "curl-sys",
+ "libc",
+ "openssl-probe",
+ "openssl-sys",
+ "schannel",
+ "socket2 0.4.9",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "curl-sys"
+version = "0.4.61+curl-8.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14d05c10f541ae6f3bc5b3d923c20001f47db7d5f0b2bc6ad16490133842db79"
+dependencies = [
+ "cc",
+ "libc",
+ "libnghttp2-sys",
+ "libz-sys",
+ "openssl-sys",
+ "pkg-config",
+ "vcpkg",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "deque"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a694dae478589798d752c7125542f8a5ae8b6e59476172baf2eed67357bdfa27"
+
+[[package]]
+name = "edit-distance"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbbaaaf38131deb9ca518a274a45bfdb8771f139517b073b16c2d3d32ae5037b"
+
+[[package]]
+name = "either"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91"
+
+[[package]]
+name = "encoding_rs"
+version = "0.8.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "env_logger"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a19187fea3ac7e84da7dacf48de0c45d63c6a76f9490dae389aead16c243fce3"
+dependencies = [
+ "atty",
+ "humantime",
+ "log",
+ "regex",
+ "termcolor",
+]
+
+[[package]]
+name = "errno"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "errno-dragonfly"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "fastrand"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "filetime"
+version = "0.2.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5cbc844cecaee9d4443931972e1289c8ff485cb4cc2767cb03ca139ed6885153"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "redox_syscall 0.2.16",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "fixedbitset"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37ab347416e802de484e4d03c7316c48f1ecb56574dfd4a46a80f173ce1de04d"
+
+[[package]]
+name = "flate2"
+version = "1.0.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743"
+dependencies = [
+ "crc32fast",
+ "libz-sys",
+ "miniz_oxide",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "foreign-types"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+dependencies = [
+ "foreign-types-shared",
+]
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "fuchsia-cprng"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba"
+
+[[package]]
+name = "fuchsia-zircon"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82"
+dependencies = [
+ "bitflags",
+ "fuchsia-zircon-sys",
+]
+
+[[package]]
+name = "fuchsia-zircon-sys"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7"
+
+[[package]]
+name = "funty"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fed34cd105917e91daa4da6b3728c47b068749d6a62c59811f06ed2ac71d9da7"
+
+[[package]]
+name = "futures-channel"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2"
+dependencies = [
+ "futures-core",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c"
+
+[[package]]
+name = "futures-io"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964"
+
+[[package]]
+name = "futures-sink"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e"
+
+[[package]]
+name = "futures-task"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65"
+
+[[package]]
+name = "futures-util"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533"
+dependencies = [
+ "futures-core",
+ "futures-io",
+ "futures-task",
+ "memchr",
+ "pin-project-lite 0.2.9",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "fwdansi"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08c1f5787fe85505d1f7777268db5103d80a7a374d2316a7ce262e57baf8f208"
+dependencies = [
+ "memchr",
+ "termcolor",
+]
+
+[[package]]
+name = "git2"
+version = "0.13.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f29229cc1b24c0e6062f6e742aa3e256492a5323365e5ed3413599f8a5eff7d6"
+dependencies = [
+ "bitflags",
+ "libc",
+ "libgit2-sys",
+ "log",
+ "openssl-probe",
+ "openssl-sys",
+ "url",
+]
+
+[[package]]
+name = "git2-curl"
+version = "0.14.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "883539cb0ea94bab3f8371a98cd8e937bbe9ee7c044499184aa4c17deb643a50"
+dependencies = [
+ "curl",
+ "git2",
+ "log",
+ "url",
+]
+
+[[package]]
+name = "glob"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
+
+[[package]]
+name = "globset"
+version = "0.4.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "029d74589adefde59de1a0c4f4732695c32805624aec7b68d91503d4dba79afc"
+dependencies = [
+ "aho-corasick 0.7.20",
+ "bstr",
+ "fnv",
+ "log",
+ "regex",
+]
+
+[[package]]
+name = "guppy"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec4cbddce827d660864974dc3dc62a1c810e813d17e518cc5830716b977cd110"
+dependencies = [
+ "camino",
+ "cargo_metadata",
+ "fixedbitset",
+ "indexmap",
+ "itertools",
+ "nested",
+ "once_cell",
+ "pathdiff",
+ "petgraph",
+ "semver 0.11.0",
+ "serde",
+ "serde_json",
+ "supercow",
+ "target-spec",
+]
+
+[[package]]
+name = "h2"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e4728fd124914ad25e99e3d15a9361a879f6620f63cb56bbb08f95abb97a535"
+dependencies = [
+ "bytes 0.5.6",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "http",
+ "indexmap",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tracing",
+ "tracing-futures",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286"
+
+[[package]]
+name = "hex"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "805026a5d0141ffc30abb3be3173848ad46a1b1664fe632428479619a3644d77"
+
+[[package]]
+name = "hex"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
+
+[[package]]
+name = "home"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb"
+dependencies = [
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "http"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482"
+dependencies = [
+ "bytes 1.4.0",
+ "fnv",
+ "itoa 1.0.6",
+]
+
+[[package]]
+name = "http-body"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "13d5ff830006f7646652e057693569bfe0d51760c0085a071769d142a205111b"
+dependencies = [
+ "bytes 0.5.6",
+ "http",
+]
+
+[[package]]
+name = "httparse"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
+
+[[package]]
+name = "httpdate"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "494b4d60369511e7dea41cf646832512a94e542f68bb9c49e54518e0f468eb47"
+
+[[package]]
+name = "humansize"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "02296996cb8796d7c6e3bc2d9211b7802812d36999a51bb754123ead7d37d026"
+
+[[package]]
+name = "humantime"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
+
+[[package]]
+name = "hyper"
+version = "0.13.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a6f157065790a3ed2f88679250419b5cdd96e714a0d65f7797fd337186e96bb"
+dependencies = [
+ "bytes 0.5.6",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "httparse",
+ "httpdate",
+ "itoa 0.4.8",
+ "pin-project",
+ "socket2 0.3.19",
+ "tokio",
+ "tower-service",
+ "tracing",
+ "want",
+]
+
+[[package]]
+name = "hyper-tls"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d979acc56dcb5b8dddba3917601745e877576475aa046df3226eabdecef78eed"
+dependencies = [
+ "bytes 0.5.6",
+ "hyper",
+ "native-tls",
+ "tokio",
+ "tokio-tls",
+]
+
+[[package]]
+name = "iana-time-zone"
+version = "0.1.56"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0722cd7114b7de04316e7ea5456a0bbb20e4adb46fd27a3697adb812cff0f37c"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys",
+ "iana-time-zone-haiku",
+ "js-sys",
+ "wasm-bindgen",
+ "windows",
+]
+
+[[package]]
+name = "iana-time-zone-haiku"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "idna"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "ignore"
+version = "0.4.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dbe7873dab538a9a44ad79ede1faf5f30d49f9a5c883ddbab48bce81b64b7492"
+dependencies = [
+ "globset",
+ "lazy_static",
+ "log",
+ "memchr",
+ "regex",
+ "same-file",
+ "thread_local",
+ "walkdir",
+ "winapi-util",
+]
+
+[[package]]
+name = "im-rc"
+version = "15.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af1955a75fa080c677d3972822ec4bad316169ab1cfc6c257a942c2265dbe5fe"
+dependencies = [
+ "bitmaps",
+ "rand_core 0.6.4",
+ "rand_xoshiro",
+ "sized-chunks",
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
+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 1.0.0",
+]
+
+[[package]]
+name = "io-lifetimes"
+version = "1.0.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220"
+dependencies = [
+ "hermit-abi 0.3.1",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "iovec"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "ipnet"
+version = "2.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12b6ee2129af8d4fb011108c73d99a1b83a85977f23b82460c0ae2e25bb4b57f"
+
+[[package]]
+name = "itertools"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itoa"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4"
+
+[[package]]
+name = "itoa"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6"
+
+[[package]]
+name = "jobserver"
+version = "0.1.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "js-sys"
+version = "0.3.62"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68c16e1bfd491478ab155fd8b4896b86f9ede344949b641e61501e07c2b8b4d5"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "kernel32-sys"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
+dependencies = [
+ "winapi 0.2.8",
+ "winapi-build",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "lazycell"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
+
+[[package]]
+name = "lexical-core"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6607c62aa161d23d17a9072cc5da0be67cdfc89d3afb1e8d9c842bebc2525ffe"
+dependencies = [
+ "arrayvec",
+ "bitflags",
+ "cfg-if 1.0.0",
+ "ryu",
+ "static_assertions",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.144"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b00cc1c228a6782d0f076e7b232802e0c5689d41bb5df366f2a6b6621cfdfe1"
+
+[[package]]
+name = "libgit2-sys"
+version = "0.12.26+1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19e1c899248e606fbfe68dcb31d8b0176ebab833b103824af31bddf4b7457494"
+dependencies = [
+ "cc",
+ "libc",
+ "libssh2-sys",
+ "libz-sys",
+ "openssl-sys",
+ "pkg-config",
+]
+
+[[package]]
+name = "libnghttp2-sys"
+version = "0.1.7+1.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57ed28aba195b38d5ff02b9170cbff627e336a20925e43b4945390401c5dc93f"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "libssh2-sys"
+version = "0.2.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b094a36eb4b8b8c8a7b4b8ae43b2944502be3e59cd87687595cf6b0a71b3f4ca"
+dependencies = [
+ "cc",
+ "libc",
+ "libz-sys",
+ "openssl-sys",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "libz-sys"
+version = "1.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56ee889ecc9568871456d42f603d6a0ce59ff328d291063a45cbdf0036baf6db"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ece97ea872ece730aed82664c424eb4c8291e1ff2480247ccf7409044bc6479f"
+
+[[package]]
+name = "loc"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19667875e98831e0135a1eb4e7ddc775b09dd317809e34e0d0fc8172443c85e3"
+dependencies = [
+ "clap",
+ "deque",
+ "edit-distance",
+ "ignore",
+ "memchr",
+ "num_cpus",
+ "regex",
+ "smallvec 0.6.14",
+]
+
+[[package]]
+name = "log"
+version = "0.4.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "maybe-uninit"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00"
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "mime"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
+
+[[package]]
+name = "mime_guess"
+version = "2.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef"
+dependencies = [
+ "mime",
+ "unicase",
+]
+
+[[package]]
+name = "miniz_oxide"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "mio"
+version = "0.6.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4afd66f5b91bf2a3bc13fad0e21caedac168ca4c707504e75585648ae80e4cc4"
+dependencies = [
+ "cfg-if 0.1.10",
+ "fuchsia-zircon",
+ "fuchsia-zircon-sys",
+ "iovec",
+ "kernel32-sys",
+ "libc",
+ "log",
+ "miow 0.2.2",
+ "net2",
+ "slab",
+ "winapi 0.2.8",
+]
+
+[[package]]
+name = "miow"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ebd808424166322d4a38da87083bfddd3ac4c131334ed55856112eb06d46944d"
+dependencies = [
+ "kernel32-sys",
+ "net2",
+ "winapi 0.2.8",
+ "ws2_32-sys",
+]
+
+[[package]]
+name = "miow"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21"
+dependencies = [
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "native-tls"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e"
+dependencies = [
+ "lazy_static",
+ "libc",
+ "log",
+ "openssl",
+ "openssl-probe",
+ "openssl-sys",
+ "schannel",
+ "security-framework",
+ "security-framework-sys",
+ "tempfile",
+]
+
+[[package]]
+name = "nested"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca2b420f638f07fe83056b55ea190bb815f609ec5a35e7017884a10f78839c9e"
+
+[[package]]
+name = "net2"
+version = "0.2.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "74d0df99cfcd2530b2e694f6e17e7f37b8e26bb23983ac530c0c97408837c631"
+dependencies = [
+ "cfg-if 0.1.10",
+ "libc",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "nom"
+version = "6.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7413f999671bd4745a7b624bd370a569fb6bc574b23c83a3c5ed2e453f3d5e2"
+dependencies = [
+ "bitvec",
+ "funty",
+ "lexical-core",
+ "memchr",
+ "version_check",
+]
+
+[[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-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.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b"
+dependencies = [
+ "hermit-abi 0.2.6",
+ "libc",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.17.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3"
+
+[[package]]
+name = "opener"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "13117407ca9d0caf3a0e74f97b490a7e64c0ae3aa90a8b7085544d0c37b6f3ae"
+dependencies = [
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "openssl"
+version = "0.10.52"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "01b8574602df80f7b85fdfc5392fa884a4e3b3f4f35402c070ab34c3d3f78d56"
+dependencies = [
+ "bitflags",
+ "cfg-if 1.0.0",
+ "foreign-types",
+ "libc",
+ "once_cell",
+ "openssl-macros",
+ "openssl-sys",
+]
+
+[[package]]
+name = "openssl-macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "openssl-probe"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
+
+[[package]]
+name = "openssl-sys"
+version = "0.9.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e17f59264b2809d77ae94f0e1ebabc434773f370d6ca667bd223ea10e06cc7e"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[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.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e"
+
+[[package]]
+name = "pest"
+version = "2.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e68e84bfb01f0507134eac1e9b410a12ba379d064eab48c50ba4ce329a527b70"
+dependencies = [
+ "thiserror",
+ "ucd-trie",
+]
+
+[[package]]
+name = "petgraph"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "467d164a6de56270bd7c4d070df81d07beace25012d5103ced4e9ff08d6afdb7"
+dependencies = [
+ "fixedbitset",
+ "indexmap",
+]
+
+[[package]]
+name = "pin-project"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc"
+dependencies = [
+ "pin-project-internal",
+]
+
+[[package]]
+name = "pin-project-internal"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "257b64915a082f7811703966789728173279bdebb956b143dbcd23f6f970a777"
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.56"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f4f29d145265ec1c483c7c654450edde0bfe043d3938d6972630663356d9500"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "radium"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "941ba9d78d8e2f7ce474c015eea4d9c6d25b6a3327f9832ee29a4de27f91bbb8"
+
+[[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",
+ "rdrand",
+ "winapi 0.3.9",
+]
+
+[[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",
+]
+
+[[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.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+
+[[package]]
+name = "rand_xoshiro"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f97cdb2a36ed4183de61b2f824cc45c9f1037f28afe0a322e9fff4c108b5aaa"
+dependencies = [
+ "rand_core 0.6.4",
+]
+
+[[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",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "regex"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af83e617f331cc6ae2da5443c602dfa5af81e517212d9d611a5b3ba1777b5370"
+dependencies = [
+ "aho-corasick 1.0.1",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a5996294f19bd3aae0453a862ad728f60e6600695733dd5df01da90c54363a3c"
+
+[[package]]
+name = "remove_dir_all"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7"
+dependencies = [
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "reqwest"
+version = "0.10.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0718f81a8e14c4dbb3b34cf23dc6aaf9ab8a0dfec160c534b3dbca1aaa21f47c"
+dependencies = [
+ "base64",
+ "bytes 0.5.6",
+ "encoding_rs",
+ "futures-core",
+ "futures-util",
+ "http",
+ "http-body",
+ "hyper",
+ "hyper-tls",
+ "ipnet",
+ "js-sys",
+ "lazy_static",
+ "log",
+ "mime",
+ "mime_guess",
+ "native-tls",
+ "percent-encoding",
+ "pin-project-lite 0.2.9",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "tokio",
+ "tokio-tls",
+ "url",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+ "winreg",
+]
+
+[[package]]
+name = "rustc-workspace-hack"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc71d2faa173b74b232dedc235e3ee1696581bb132fc116fa3626d6151a1a8fb"
+
+[[package]]
+name = "rustfix"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2c50b74badcddeb8f7652fa8323ce440b95286f8e4b64ebfd871c609672704e"
+dependencies = [
+ "anyhow",
+ "log",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "rustix"
+version = "0.37.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acf8729d8542766f1b2cf77eb034d52f40d375bb8b615d0b147089946e16613d"
+dependencies = [
+ "bitflags",
+ "errno",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041"
+
+[[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 = "schannel"
+version = "0.1.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3"
+dependencies = [
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "security-framework"
+version = "2.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a332be01508d814fed64bf28f798a146d73792121129962fdf335bb3c49a4254"
+dependencies = [
+ "bitflags",
+ "core-foundation",
+ "core-foundation-sys",
+ "libc",
+ "security-framework-sys",
+]
+
+[[package]]
+name = "security-framework-sys"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31c9bb296072e961fcbd8853511dd39c2d8be2deb1e17c6860b1d30732b323b4"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "semver"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "394cec28fa623e00903caf7ba4fa6fb9a0e260280bb8cdbbba029611108a0190"
+dependencies = [
+ "semver-parser 0.7.0",
+ "serde",
+]
+
+[[package]]
+name = "semver"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6"
+dependencies = [
+ "semver-parser 0.10.2",
+ "serde",
+]
+
+[[package]]
+name = "semver-parser"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
+
+[[package]]
+name = "semver-parser"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7"
+dependencies = [
+ "pest",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.163"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2113ab51b87a539ae008b5c6c02dc020ffa39afd2d83cffcb3f4eb2722cebec2"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.163"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c805777e3930c8883389c602315a24224bcc738b63905ef87cd1420353ea93e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "serde_ignored"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94eb4a4087ba8bdf14a9208ac44fddbf55c01a6195f7edfc511ddaff6cae45a6"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.96"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1"
+dependencies = [
+ "itoa 1.0.6",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_urlencoded"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
+dependencies = [
+ "form_urlencoded",
+ "itoa 1.0.6",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "shell-escape"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "45bb67a18fa91266cc7807181f62f9178a6873bfad7dc788c42e6430db40184f"
+
+[[package]]
+name = "sized-chunks"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16d69225bde7a69b235da73377861095455d298f2b970996eec25ddbb42b3d1e"
+dependencies = [
+ "bitmaps",
+ "typenum",
+]
+
+[[package]]
+name = "slab"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "smallvec"
+version = "0.6.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b97fcaeba89edba30f044a10c6a3cc39df9c3f17d7cd829dd1446cab35f890e0"
+dependencies = [
+ "maybe-uninit",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
+
+[[package]]
+name = "socket2"
+version = "0.3.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "122e570113d28d773067fab24266b66753f6ea915758651696b6e35e49f88d6e"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "socket2"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662"
+dependencies = [
+ "libc",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "static_assertions"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+
+[[package]]
+name = "strip-ansi-escapes"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "011cbb39cf7c1f62871aea3cc46e5817b0937b49e9447370c93cacbe93a766d8"
+dependencies = [
+ "vte",
+]
+
+[[package]]
+name = "strsim"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
+
+[[package]]
+name = "supercow"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "171758edb47aa306a78dfa4ab9aeb5167405bd4e3dc2b64e88f6a84bbe98bd63"
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a34fcf3e8b60f57e6a14301a2e916d323af98b0ea63c599441eec8558660c822"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "tap"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369"
+
+[[package]]
+name = "tar"
+version = "0.4.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b55807c0344e1e6c04d7c965f5289c39a8d94ae23ed5c0b57aabac549f871c6"
+dependencies = [
+ "filetime",
+ "libc",
+]
+
+[[package]]
+name = "target-spec"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac395241acf0f3d224dd2b07b334994adf6f37c904d1826867332ab8c6ddedbf"
+dependencies = [
+ "cfg-expr",
+]
+
+[[package]]
+name = "tempdir"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "15f2b5fb00ccdf689e0149d1b1b3c03fead81c2b37735d812fa8bddbbf41b6d8"
+dependencies = [
+ "rand",
+ "remove_dir_all",
+]
+
+[[package]]
+name = "tempfile"
+version = "3.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998"
+dependencies = [
+ "cfg-if 1.0.0",
+ "fastrand",
+ "redox_syscall 0.3.5",
+ "rustix",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "thread_local"
+version = "1.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152"
+dependencies = [
+ "cfg-if 1.0.0",
+ "once_cell",
+]
+
+[[package]]
+name = "time"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a"
+dependencies = [
+ "libc",
+ "wasi",
+ "winapi 0.3.9",
+]
+
+[[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.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+[[package]]
+name = "tokio"
+version = "0.2.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6703a273949a90131b290be1fe7b039d0fc884aa1935860dfcbe056f28cd8092"
+dependencies = [
+ "bytes 0.5.6",
+ "fnv",
+ "futures-core",
+ "iovec",
+ "lazy_static",
+ "memchr",
+ "mio",
+ "num_cpus",
+ "pin-project-lite 0.1.12",
+ "slab",
+]
+
+[[package]]
+name = "tokio-tls"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a70f4fcd7b3b24fb194f837560168208f669ca8cb70d0c4b862944452396343"
+dependencies = [
+ "native-tls",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be8242891f2b6cbef26a2d7e8605133c2c554cd35b3e4948ea892d6d68436499"
+dependencies = [
+ "bytes 0.5.6",
+ "futures-core",
+ "futures-sink",
+ "log",
+ "pin-project-lite 0.1.12",
+ "tokio",
+]
+
+[[package]]
+name = "toml"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "tower-service"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
+
+[[package]]
+name = "tracing"
+version = "0.1.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
+dependencies = [
+ "cfg-if 1.0.0",
+ "log",
+ "pin-project-lite 0.2.9",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "tracing-futures"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2"
+dependencies = [
+ "pin-project",
+ "tracing",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
+
+[[package]]
+name = "typenum"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba"
+
+[[package]]
+name = "ucd-trie"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e79c4d996edb816c91e4308506774452e55e95c3c9de07b6729e17e15a5ef81"
+
+[[package]]
+name = "unicase"
+version = "2.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6"
+dependencies = [
+ "version_check",
+]
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-width"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c"
+
+[[package]]
+name = "url"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "percent-encoding",
+]
+
+[[package]]
+name = "utf8parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
+
+[[package]]
+name = "vcpkg"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+
+[[package]]
+name = "vec_map"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "vte"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6cbce692ab4ca2f1f3047fcf732430249c0e971bfdd2b234cf2c47ad93af5983"
+dependencies = [
+ "arrayvec",
+ "utf8parse",
+ "vte_generate_state_changes",
+]
+
+[[package]]
+name = "vte_generate_state_changes"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d257817081c7dffcdbab24b9e62d2def62e2ff7d00b1c20062551e6cccc145ff"
+dependencies = [
+ "proc-macro2",
+ "quote",
+]
+
+[[package]]
+name = "walkdir"
+version = "2.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698"
+dependencies = [
+ "same-file",
+ "winapi-util",
+]
+
+[[package]]
+name = "want"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0"
+dependencies = [
+ "log",
+ "try-lock",
+]
+
+[[package]]
+name = "wasi"
+version = "0.10.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.85"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b6cb788c4e39112fbe1822277ef6fb3c55cd86b95cb3d3c4c1c9597e4ac74b4"
+dependencies = [
+ "cfg-if 1.0.0",
+ "serde",
+ "serde_json",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.85"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35e522ed4105a9d626d885b35d62501b30d9666283a5c8be12c14a8bdafe7822"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.15",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.35"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "083abe15c5d88556b77bdf7aef403625be9e327ad37c62c4e4129af740168163"
+dependencies = [
+ "cfg-if 1.0.0",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.85"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "358a79a0cb89d21db8120cbfb91392335913e4890665b1a7981d9e956903b434"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.85"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4783ce29f09b9d93134d41297aded3a712b7b979e9c6f28c32cb88c973a94869"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.15",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.85"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a901d592cafaa4d711bc324edfaff879ac700b19c3dfd60058d2b445be2691eb"
+
+[[package]]
+name = "web-sys"
+version = "0.3.62"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16b5f940c7edfdc6d12126d98c9ef4d1b3d470011c47c76a6581df47ad9ba721"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "winapi"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
+
+[[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-build"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
+
+[[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 0.3.9",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f"
+dependencies = [
+ "windows-targets 0.48.0",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
+dependencies = [
+ "windows-targets 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets 0.48.0",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5"
+dependencies = [
+ "windows_aarch64_gnullvm 0.48.0",
+ "windows_aarch64_msvc 0.48.0",
+ "windows_i686_gnu 0.48.0",
+ "windows_i686_msvc 0.48.0",
+ "windows_x86_64_gnu 0.48.0",
+ "windows_x86_64_gnullvm 0.48.0",
+ "windows_x86_64_msvc 0.48.0",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
+
+[[package]]
+name = "winreg"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0120db82e8a1e0b9fb3345a539c478767c0048d842860994d96113d5b667bd69"
+dependencies = [
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "ws2_32-sys"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e"
+dependencies = [
+ "winapi 0.2.8",
+ "winapi-build",
+]
+
+[[package]]
+name = "wyz"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85e60b0d1b5f99db2556934e21937020776a5d31520bf169e851ac44e6420214"
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-dephell/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-dephell/default.nix
new file mode 100644
index 000000000000..63a8cabccefa
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-dephell/default.nix
@@ -0,0 +1,52 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, stdenv
+, curl
+, openssl
+, darwin
+, libgit2_1_3_0
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-dephell";
+  version = "0.5.1";
+
+  src = fetchFromGitHub {
+    owner = "mimoo";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-NOjkKttA+mwPCpl4uiRIYD58DlMomVFpwnM9KGfWd+w=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+  ] ++ lib.optionals stdenv.isDarwin [
+    curl
+  ];
+
+  buildInputs = [
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [
+    curl
+    darwin.apple_sdk.frameworks.Security
+    libgit2_1_3_0
+  ];
+
+  # update Cargo.lock to work with openssl 3
+  postPatch = ''
+    ln -sf ${./Cargo.lock} Cargo.lock
+  '';
+
+  meta = with lib; {
+    description = "A tool to analyze the third-party dependencies imported by a rust crate or rust workspace";
+    homepage = "https://github.com/mimoo/cargo-dephell";
+    license = with licenses; [ mit /* or */ asl20 ];
+    maintainers = with maintainers; [ figsoda matthiasbeyer ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-deps/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-deps/default.nix
new file mode 100644
index 000000000000..0cbba27cf15f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-deps/default.nix
@@ -0,0 +1,20 @@
+{ lib, fetchCrate, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-deps";
+  version = "1.5.1";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-qnSHG4AhBrleYKZ4SJ4AwHdJyiidj8NTeSSphBRo7gg=";
+  };
+
+  cargoHash = "sha256-dpCbFA9AZmIFPx69tw0CqHF+lVw7uhUlwAeVX1+lIK8=";
+
+  meta = with lib; {
+    description = "Cargo subcommand for building dependency graphs of Rust projects";
+    homepage = "https://github.com/m-cat/cargo-deps";
+    license = licenses.mit;
+    maintainers = with maintainers; [ arcnmx matthiasbeyer ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-diet/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-diet/default.nix
new file mode 100644
index 000000000000..60aadca13d00
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-diet/default.nix
@@ -0,0 +1,23 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-diet";
+  version = "1.2.7";
+
+  src = fetchFromGitHub {
+    owner = "the-lean-crate";
+    repo = "cargo-diet";
+    rev = "v${version}";
+    hash = "sha256-SuJ1H/2YfSVVigdgLUd9veMClI7ZT7xkkyQ4PfXoQdQ=";
+  };
+
+  cargoHash = "sha256-MASftcn3WmB3M6bvmtnK3nlroE8nq9zdkleSEgzA5lk=";
+
+  meta = with lib; {
+    description = "Help computing optimal include directives for your Cargo.toml manifest";
+    homepage = "https://github.com/the-lean-crate/cargo-diet";
+    changelog = "https://github.com/the-lean-crate/cargo-diet/blob/v${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda matthiasbeyer ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-dist/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-dist/default.nix
new file mode 100644
index 000000000000..5063a4baf40f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-dist/default.nix
@@ -0,0 +1,63 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, nix-update-script
+, pkg-config
+, bzip2
+, xz
+, zstd
+, stdenv
+, darwin
+, git
+, rustup
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-dist";
+  version = "0.8.2";
+
+  src = fetchFromGitHub {
+    owner = "axodotdev";
+    repo = "cargo-dist";
+    rev = "v${version}";
+    hash = "sha256-Y4jXAZgJj0d1fUFuM94umlj/JsawWs3KxEQAucsT24s=";
+  };
+
+  cargoHash = "sha256-Jza9U5vL45rvDPLb4/iELneKgy1OTCMBM1JxfuxZigQ=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    bzip2
+    xz
+    zstd
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.SystemConfiguration
+  ];
+
+  nativeCheckInputs = [
+    git
+    rustup
+  ];
+
+  env = {
+    ZSTD_SYS_USE_PKG_CONFIG = true;
+  };
+
+  # remove tests that require internet access
+  postPatch = ''
+    rm cargo-dist/tests/integration-tests.rs
+  '';
+
+  passthru.updateScript = nix-update-script { };
+
+  meta = with lib; {
+    description = "A tool for building final distributable artifacts and uploading them to an archive";
+    homepage = "https://github.com/axodotdev/cargo-dist";
+    changelog = "https://github.com/axodotdev/cargo-dist/blob/${src.rev}/CHANGELOG.md";
+    license = with licenses; [ asl20 mit ];
+    maintainers = with maintainers; [ figsoda matthiasbeyer mistydemeo ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-docset/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-docset/default.nix
new file mode 100644
index 000000000000..95fa48e4aba9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-docset/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, fetchFromGitHub
+, gitUpdater
+, rustPlatform
+, sqlite
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-docset";
+  version = "0.3.1";
+
+  src = fetchFromGitHub {
+    owner = "Robzz";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-o2CSQiU9fEoS3eRmwphtYGZTwn3mstRm2Tlvval83+U=";
+  };
+
+  cargoHash = "sha256-YHrSvfHfQ7kbVeCOgggYf3E7gHq+RhVKZrzP8LqX5I0=";
+
+  buildInputs = [ sqlite ];
+
+  passthru.updateScript = gitUpdater {
+    rev-prefix = "v";
+  };
+
+  meta = with lib; {
+    description = "Cargo subcommand to generate a Dash/Zeal docset for your Rust packages";
+    homepage = "https://github.com/Robzz/cargo-docset";
+    changelog = "https://github.com/Robzz/cargo-docset/blob/${version}/CHANGELOG.md";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ colinsane matthiasbeyer ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-duplicates/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-duplicates/default.nix
new file mode 100644
index 000000000000..781764d3c313
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-duplicates/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, curl
+, pkg-config
+, libgit2
+, openssl
+, zlib
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-duplicates";
+  version = "0.5.1";
+
+  src = fetchFromGitHub {
+    owner = "Keruspe";
+    repo = "cargo-duplicates";
+    rev = "v${version}";
+    hash = "sha256-e0cegK4obUVIJyx5XKF+xicvkRvQwuObwB8tprrJnrw=";
+  };
+
+  cargoHash = "sha256-i1IyHCa/w4DOGlPWjDE4IbVm3s/40DIwjwUGIMTYH4Y=";
+
+  nativeBuildInputs = [
+    curl
+    pkg-config
+  ];
+
+  buildInputs = [
+    curl
+    libgit2
+    openssl
+    zlib
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  meta = with lib; {
+    description = "A cargo subcommand for displaying when different versions of a same dependency are pulled in";
+    homepage = "https://github.com/Keruspe/cargo-duplicates";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda matthiasbeyer ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-edit/Cargo.lock b/nixpkgs/pkgs/development/tools/rust/cargo-edit/Cargo.lock
new file mode 100644
index 000000000000..de3cfdf9786e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-edit/Cargo.lock
@@ -0,0 +1,2381 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "aho-corasick"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6748e8def348ed4d14996fa801f4122cd763fff530258cdc03f64b25f89d3a5a"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "anstream"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ca84f3628370c59db74ee214b3263d58f9aadd9b4fe7e711fd87dc452b7f163"
+dependencies = [
+ "anstyle",
+ "anstyle-parse",
+ "anstyle-query",
+ "anstyle-wincon 1.0.2",
+ "colorchoice",
+ "is-terminal",
+ "utf8parse",
+]
+
+[[package]]
+name = "anstream"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1f58811cfac344940f1a400b6e6231ce35171f614f26439e80f8c1465c5cc0c"
+dependencies = [
+ "anstyle",
+ "anstyle-parse",
+ "anstyle-query",
+ "anstyle-wincon 2.1.0",
+ "colorchoice",
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b84bf0a05bbb2a83e5eb6fa36bb6e87baa08193c35ff52bbf6b38d8af2890e46"
+
+[[package]]
+name = "anstyle-parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "938874ff5980b03a87c5524b3ae5b59cf99b1d6bc836848df7bc5ada9643c333"
+dependencies = [
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle-query"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b"
+dependencies = [
+ "windows-sys",
+]
+
+[[package]]
+name = "anstyle-wincon"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c677ab05e09154296dd37acecd46420c17b9713e8366facafa8fc0885167cf4c"
+dependencies = [
+ "anstyle",
+ "windows-sys",
+]
+
+[[package]]
+name = "anstyle-wincon"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "58f54d10c6dfa51283a066ceab3ec1ab78d13fae00aa49243a45e4571fb79dfd"
+dependencies = [
+ "anstyle",
+ "windows-sys",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.75"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6"
+
+[[package]]
+name = "assert_cmd"
+version = "2.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88903cb14723e4d4003335bb7f8a14f27691649105346a0f0957466c096adfe6"
+dependencies = [
+ "anstream 0.3.2",
+ "anstyle",
+ "bstr",
+ "doc-comment",
+ "predicates",
+ "predicates-core",
+ "predicates-tree",
+ "wait-timeout",
+]
+
+[[package]]
+name = "assert_fs"
+version = "1.0.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f070617a68e5c2ed5d06ee8dd620ee18fb72b99f6c094bed34cf8ab07c875b48"
+dependencies = [
+ "anstream 0.3.2",
+ "anstyle",
+ "doc-comment",
+ "globwalk",
+ "predicates",
+ "predicates-core",
+ "predicates-tree",
+ "tempfile",
+]
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi 0.1.19",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "base16ct"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf"
+
+[[package]]
+name = "base64"
+version = "0.21.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "414dcefbc63d77c526a76b3afcf6fbb9b5e2791c19c3aa2297733208750c6e53"
+
+[[package]]
+name = "base64ct"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bitflags"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635"
+
+[[package]]
+name = "block-buffer"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "bstr"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6798148dccfbff0fae41c7574d2fa8f1ef3492fba0face179de5d8d447d67b05"
+dependencies = [
+ "memchr",
+ "regex-automata",
+ "serde",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1"
+
+[[package]]
+name = "byteorder"
+version = "1.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
+
+[[package]]
+name = "camino"
+version = "1.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c59e92b5a388f549b863a7bea62612c09f24c8393560709a54558a9abdfb3b9c"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "cargo-edit"
+version = "0.12.2"
+dependencies = [
+ "anyhow",
+ "assert_cmd",
+ "assert_fs",
+ "cargo-test-macro",
+ "cargo-test-support",
+ "cargo_metadata",
+ "clap",
+ "clap-cargo",
+ "concolor-control",
+ "crates-index",
+ "dunce",
+ "env_proxy",
+ "git2",
+ "hex",
+ "home",
+ "indexmap 1.9.3",
+ "native-tls",
+ "pathdiff",
+ "predicates",
+ "regex",
+ "semver",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "snapbox",
+ "subprocess",
+ "termcolor",
+ "toml",
+ "toml_edit",
+ "trycmd",
+ "ureq",
+ "url",
+]
+
+[[package]]
+name = "cargo-platform"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2cfa25e60aea747ec7e1124f238816749faa93759c6ff5b31f1ccdda137f4479"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "cargo-test-macro"
+version = "0.1.0"
+source = "git+https://github.com/rust-lang/cargo#2a6f7f6efe118ed9b82dfff4591fac70b4bca790"
+
+[[package]]
+name = "cargo-test-support"
+version = "0.1.0"
+source = "git+https://github.com/rust-lang/cargo#2a6f7f6efe118ed9b82dfff4591fac70b4bca790"
+dependencies = [
+ "anyhow",
+ "cargo-test-macro",
+ "cargo-util",
+ "crates-io",
+ "filetime",
+ "flate2",
+ "git2",
+ "glob",
+ "itertools",
+ "lazy_static",
+ "pasetors",
+ "serde",
+ "serde_json",
+ "snapbox",
+ "tar",
+ "termcolor",
+ "time",
+ "toml",
+ "url",
+ "windows-sys",
+]
+
+[[package]]
+name = "cargo-util"
+version = "0.2.7"
+source = "git+https://github.com/rust-lang/cargo#2a6f7f6efe118ed9b82dfff4591fac70b4bca790"
+dependencies = [
+ "anyhow",
+ "core-foundation",
+ "filetime",
+ "hex",
+ "jobserver",
+ "libc",
+ "miow",
+ "same-file",
+ "sha2",
+ "shell-escape",
+ "tempfile",
+ "tracing",
+ "walkdir",
+ "windows-sys",
+]
+
+[[package]]
+name = "cargo_metadata"
+version = "0.15.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eee4243f1f26fc7a42710e7439c149e2b10b05472f88090acce52632f231a73a"
+dependencies = [
+ "camino",
+ "cargo-platform",
+ "semver",
+ "serde",
+ "serde_json",
+ "thiserror",
+]
+
+[[package]]
+name = "cc"
+version = "1.0.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
+dependencies = [
+ "jobserver",
+ "libc",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "clap"
+version = "4.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a13b88d2c62ff462f88e4a121f17a82c1af05693a2f192b5c38d14de73c19f6"
+dependencies = [
+ "clap_builder",
+ "clap_derive",
+]
+
+[[package]]
+name = "clap-cargo"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "383f21342a464d4af96e9a4cad22a0b4f2880d4a5b3bbf5c9654dd1d9a224ee4"
+dependencies = [
+ "anstyle",
+ "clap",
+]
+
+[[package]]
+name = "clap_builder"
+version = "4.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2bb9faaa7c2ef94b2743a21f5a29e6f0010dff4caa69ac8e9d6cf8b6fa74da08"
+dependencies = [
+ "anstream 0.5.0",
+ "anstyle",
+ "clap_lex",
+ "strsim",
+ "terminal_size",
+]
+
+[[package]]
+name = "clap_derive"
+version = "4.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0862016ff20d69b84ef8247369fabf5c008a7417002411897d40ee1f4532b873"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd7cc57abe963c6d3b9d8be5b06ba7c8957a930305ca90304f24ef040aa6f961"
+
+[[package]]
+name = "colorchoice"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
+
+[[package]]
+name = "concolor-control"
+version = "0.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7104119c2f80d887239879d0c50e033cd40eac9a3f3561e0684ba7d5d654f4da"
+dependencies = [
+ "atty",
+ "bitflags 1.3.2",
+ "concolor-query",
+]
+
+[[package]]
+name = "concolor-query"
+version = "0.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad159cc964ac8f9d407cbc0aa44b02436c054b541f2b4b5f06972e1efdc54bc7"
+
+[[package]]
+name = "const-oid"
+version = "0.9.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28c122c3980598d243d63d9a704629a2d748d101f278052ff068be5a4423ab6f"
+
+[[package]]
+name = "content_inspector"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7bda66e858c683005a53a9a60c69a4aca7eeaa45d124526e389f7aec8e62f38"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "core-foundation"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crates-index"
+version = "0.19.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3cab38e209d6ba8bd5b0d41c784ec63a5a9ea3adf866b820d377588960f1ded"
+dependencies = [
+ "git2",
+ "hex",
+ "home",
+ "memchr",
+ "rayon",
+ "rustc-hash",
+ "semver",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "smol_str",
+ "toml",
+]
+
+[[package]]
+name = "crates-io"
+version = "0.39.0"
+source = "git+https://github.com/rust-lang/cargo#2a6f7f6efe118ed9b82dfff4591fac70b4bca790"
+dependencies = [
+ "curl",
+ "percent-encoding",
+ "serde",
+ "serde_json",
+ "thiserror",
+ "url",
+]
+
+[[package]]
+name = "crc32fast"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200"
+dependencies = [
+ "cfg-if",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
+dependencies = [
+ "cfg-if",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7"
+dependencies = [
+ "autocfg",
+ "cfg-if",
+ "crossbeam-utils",
+ "memoffset",
+ "scopeguard",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "crypto-bigint"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf4c2f4e1afd912bc40bfd6fed5d9dc1f288e0ba01bfcc835cc5bc3eb13efe15"
+dependencies = [
+ "generic-array",
+ "rand_core",
+ "subtle",
+ "zeroize",
+]
+
+[[package]]
+name = "crypto-common"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+dependencies = [
+ "generic-array",
+ "typenum",
+]
+
+[[package]]
+name = "ct-codecs"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3b7eb4404b8195a9abb6356f4ac07d8ba267045c8d6d220ac4dc992e6cc75df"
+
+[[package]]
+name = "curl"
+version = "0.4.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "509bd11746c7ac09ebd19f0b17782eae80aadee26237658a6b4808afb5c11a22"
+dependencies = [
+ "curl-sys",
+ "libc",
+ "openssl-probe",
+ "openssl-sys",
+ "schannel",
+ "socket2",
+ "winapi",
+]
+
+[[package]]
+name = "curl-sys"
+version = "0.4.65+curl-8.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "961ba061c9ef2fe34bbd12b807152d96f0badd2bebe7b90ce6c8c8b7572a0986"
+dependencies = [
+ "cc",
+ "libc",
+ "libz-sys",
+ "openssl-sys",
+ "pkg-config",
+ "vcpkg",
+ "winapi",
+]
+
+[[package]]
+name = "der"
+version = "0.7.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fffa369a668c8af7dbf8b5e56c9f744fbd399949ed171606040001947de40b1c"
+dependencies = [
+ "const-oid",
+ "pem-rfc7468",
+ "zeroize",
+]
+
+[[package]]
+name = "deranged"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2696e8a945f658fd14dc3b87242e6b80cd0f36ff04ea560fa39082368847946"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "difflib"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8"
+
+[[package]]
+name = "digest"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
+dependencies = [
+ "block-buffer",
+ "const-oid",
+ "crypto-common",
+ "subtle",
+]
+
+[[package]]
+name = "doc-comment"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10"
+
+[[package]]
+name = "dunce"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b"
+
+[[package]]
+name = "ecdsa"
+version = "0.16.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4b1e0c257a9e9f25f90ff76d7a68360ed497ee519c8e428d1825ef0000799d4"
+dependencies = [
+ "der",
+ "digest",
+ "elliptic-curve",
+ "rfc6979",
+ "signature",
+ "spki",
+]
+
+[[package]]
+name = "ed25519-compact"
+version = "2.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a3d382e8464107391c8706b4c14b087808ecb909f6c15c34114bc42e53a9e4c"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "either"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
+
+[[package]]
+name = "elliptic-curve"
+version = "0.13.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "968405c8fdc9b3bf4df0a6638858cc0b52462836ab6b1c87377785dd09cf1c0b"
+dependencies = [
+ "base16ct",
+ "crypto-bigint",
+ "digest",
+ "ff",
+ "generic-array",
+ "group",
+ "hkdf",
+ "pem-rfc7468",
+ "pkcs8",
+ "rand_core",
+ "sec1",
+ "subtle",
+ "zeroize",
+]
+
+[[package]]
+name = "env_proxy"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a5019be18538406a43b5419a5501461f0c8b49ea7dfda0cfc32f4e51fc44be1"
+dependencies = [
+ "log",
+ "url",
+]
+
+[[package]]
+name = "equivalent"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
+
+[[package]]
+name = "errno"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b30f669a7961ef1631673d2766cc92f52d64f7ef354d4fe0ddfd30ed52f0f4f"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "windows-sys",
+]
+
+[[package]]
+name = "errno-dragonfly"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "fastrand"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6999dc1837253364c2ebb0704ba97994bd874e8f195d665c50b7548f6ea92764"
+
+[[package]]
+name = "ff"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449"
+dependencies = [
+ "rand_core",
+ "subtle",
+]
+
+[[package]]
+name = "fiat-crypto"
+version = "0.1.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e825f6987101665dea6ec934c09ec6d721de7bc1bf92248e1d5810c8cd636b77"
+
+[[package]]
+name = "filetime"
+version = "0.2.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4029edd3e734da6fe05b6cd7bd2960760a616bd2ddd0d59a0124746d6272af0"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall",
+ "windows-sys",
+]
+
+[[package]]
+name = "flate2"
+version = "1.0.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c6c98ee8095e9d1dcbf2fcc6d95acccb90d1c81db1e44725c6a984b1dbdfb010"
+dependencies = [
+ "crc32fast",
+ "libz-sys",
+ "miniz_oxide",
+]
+
+[[package]]
+name = "float-cmp"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "foreign-types"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+dependencies = [
+ "foreign-types-shared",
+]
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+dependencies = [
+ "typenum",
+ "version_check",
+ "zeroize",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "libc",
+ "wasi",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "git2"
+version = "0.17.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b989d6a7ca95a362cf2cfc5ad688b3a467be1f87e480b8dad07fee8c79b0044"
+dependencies = [
+ "bitflags 1.3.2",
+ "libc",
+ "libgit2-sys",
+ "log",
+ "openssl-probe",
+ "openssl-sys",
+ "url",
+]
+
+[[package]]
+name = "glob"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
+
+[[package]]
+name = "globset"
+version = "0.4.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "759c97c1e17c55525b57192c06a267cda0ac5210b222d6b82189a2338fa1c13d"
+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 1.3.2",
+ "ignore",
+ "walkdir",
+]
+
+[[package]]
+name = "group"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63"
+dependencies = [
+ "ff",
+ "rand_core",
+ "subtle",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+
+[[package]]
+name = "hashbrown"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a"
+
+[[package]]
+name = "heck"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b"
+
+[[package]]
+name = "hex"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "hkdf"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "791a029f6b9fc27657f6f188ec6e5e43f6911f6f878e0dc5501396e09809d437"
+dependencies = [
+ "hmac",
+]
+
+[[package]]
+name = "hmac"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
+dependencies = [
+ "digest",
+]
+
+[[package]]
+name = "home"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb"
+dependencies = [
+ "windows-sys",
+]
+
+[[package]]
+name = "humantime"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
+
+[[package]]
+name = "humantime-serde"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57a3db5ea5923d99402c94e9feb261dc5ee9b4efa158b0315f788cf549cc200c"
+dependencies = [
+ "humantime",
+ "serde",
+]
+
+[[package]]
+name = "idna"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "ignore"
+version = "0.4.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dbe7873dab538a9a44ad79ede1faf5f30d49f9a5c883ddbab48bce81b64b7492"
+dependencies = [
+ "globset",
+ "lazy_static",
+ "log",
+ "memchr",
+ "regex",
+ "same-file",
+ "thread_local",
+ "walkdir",
+ "winapi-util",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
+dependencies = [
+ "autocfg",
+ "hashbrown 0.12.3",
+]
+
+[[package]]
+name = "indexmap"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d"
+dependencies = [
+ "equivalent",
+ "hashbrown 0.14.0",
+]
+
+[[package]]
+name = "io-lifetimes"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2"
+dependencies = [
+ "hermit-abi 0.3.2",
+ "libc",
+ "windows-sys",
+]
+
+[[package]]
+name = "is-terminal"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b"
+dependencies = [
+ "hermit-abi 0.3.2",
+ "rustix 0.38.9",
+ "windows-sys",
+]
+
+[[package]]
+name = "itertools"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
+
+[[package]]
+name = "jobserver"
+version = "0.1.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "js-sys"
+version = "0.3.64"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[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.147"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3"
+
+[[package]]
+name = "libgit2-sys"
+version = "0.15.2+1.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a80df2e11fb4a61f4ba2ab42dbe7f74468da143f1a75c74e11dee7c813f694fa"
+dependencies = [
+ "cc",
+ "libc",
+ "libssh2-sys",
+ "libz-sys",
+ "openssl-sys",
+ "pkg-config",
+]
+
+[[package]]
+name = "libssh2-sys"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dc8a030b787e2119a731f1951d6a773e2280c660f8ec4b0f5e1505a386e71ee"
+dependencies = [
+ "cc",
+ "libc",
+ "libz-sys",
+ "openssl-sys",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "libz-sys"
+version = "1.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d97137b25e321a73eef1418d1d5d2eda4d77e12813f8e6dead84bc52c5870a7b"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57bcfdad1b858c2db7c38303a6d2ad4dfaf5eb53dfeb0910128b2c26d6158503"
+
+[[package]]
+name = "log"
+version = "0.4.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "memoffset"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "miniz_oxide"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "miow"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "359f76430b20a79f9e20e115b3428614e654f04fab314482fc0fda0ebd3c6044"
+dependencies = [
+ "windows-sys",
+]
+
+[[package]]
+name = "native-tls"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e"
+dependencies = [
+ "lazy_static",
+ "libc",
+ "log",
+ "openssl",
+ "openssl-probe",
+ "openssl-sys",
+ "schannel",
+ "security-framework",
+ "security-framework-sys",
+ "tempfile",
+]
+
+[[package]]
+name = "normalize-line-endings"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be"
+
+[[package]]
+name = "num-traits"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
+dependencies = [
+ "hermit-abi 0.3.2",
+ "libc",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
+
+[[package]]
+name = "openssl"
+version = "0.10.56"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "729b745ad4a5575dd06a3e1af1414bd330ee561c01b3899eb584baeaa8def17e"
+dependencies = [
+ "bitflags 1.3.2",
+ "cfg-if",
+ "foreign-types",
+ "libc",
+ "once_cell",
+ "openssl-macros",
+ "openssl-sys",
+]
+
+[[package]]
+name = "openssl-macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "openssl-probe"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
+
+[[package]]
+name = "openssl-src"
+version = "111.27.0+1.1.1v"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "06e8f197c82d7511c5b014030c9b1efeda40d7d5f99d23b4ceed3524a5e63f02"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "openssl-sys"
+version = "0.9.91"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "866b5f16f90776b9bb8dc1e1802ac6f0513de3a7a7465867bfbc563dc737faac"
+dependencies = [
+ "cc",
+ "libc",
+ "openssl-src",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "orion"
+version = "0.17.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b11468cc6afd61a126fe3f91cc4cc8a0dbe7917d0a4b5e8357ba91cc47444462"
+dependencies = [
+ "fiat-crypto",
+ "subtle",
+ "zeroize",
+]
+
+[[package]]
+name = "os_pipe"
+version = "1.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ae859aa07428ca9a929b936690f8b12dc5f11dd8c6992a18ca93919f28bc177"
+dependencies = [
+ "libc",
+ "windows-sys",
+]
+
+[[package]]
+name = "p384"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70786f51bcc69f6a4c0360e063a4cac5419ef7c5cd5b3c99ad70f3be5ba79209"
+dependencies = [
+ "ecdsa",
+ "elliptic-curve",
+ "primeorder",
+ "sha2",
+]
+
+[[package]]
+name = "pasetors"
+version = "0.6.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba765699a309908d55950919a3445e9491453e89b2587b1b2abe4143a48894c0"
+dependencies = [
+ "ct-codecs",
+ "ed25519-compact",
+ "getrandom",
+ "orion",
+ "p384",
+ "rand_core",
+ "regex",
+ "serde",
+ "serde_json",
+ "sha2",
+ "subtle",
+ "time",
+ "zeroize",
+]
+
+[[package]]
+name = "pathdiff"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd"
+
+[[package]]
+name = "pem-rfc7468"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412"
+dependencies = [
+ "base64ct",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94"
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58"
+
+[[package]]
+name = "pkcs8"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7"
+dependencies = [
+ "der",
+ "spki",
+]
+
+[[package]]
+name = "pkg-config"
+version = "0.3.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
+
+[[package]]
+name = "predicates"
+version = "3.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09963355b9f467184c04017ced4a2ba2d75cbcb4e7462690d388233253d4b1a9"
+dependencies = [
+ "anstyle",
+ "difflib",
+ "float-cmp",
+ "itertools",
+ "normalize-line-endings",
+ "predicates-core",
+ "regex",
+]
+
+[[package]]
+name = "predicates-core"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b794032607612e7abeb4db69adb4e33590fa6cf1149e95fd7cb00e634b92f174"
+
+[[package]]
+name = "predicates-tree"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "368ba315fb8c5052ab692e68a0eefec6ec57b23a36959c14496f0b0df2c0cecf"
+dependencies = [
+ "predicates-core",
+ "termtree",
+]
+
+[[package]]
+name = "primeorder"
+version = "0.13.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c2fcef82c0ec6eefcc179b978446c399b3cdf73c392c35604e399eee6df1ee3"
+dependencies = [
+ "elliptic-curve",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.66"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "rayon"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b"
+dependencies = [
+ "either",
+ "rayon-core",
+]
+
+[[package]]
+name = "rayon-core"
+version = "1.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d"
+dependencies = [
+ "crossbeam-channel",
+ "crossbeam-deque",
+ "crossbeam-utils",
+ "num_cpus",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "regex"
+version = "1.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12de2eff854e5fa4b1295edd650e227e9d8fb0c9e90b12e7f36d6a6811791a29"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-automata",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49530408a136e16e5b486e883fbb6ba058e8e4e8ae6621a77b048b314336e629"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da"
+
+[[package]]
+name = "rfc6979"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2"
+dependencies = [
+ "hmac",
+ "subtle",
+]
+
+[[package]]
+name = "ring"
+version = "0.16.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc"
+dependencies = [
+ "cc",
+ "libc",
+ "once_cell",
+ "spin",
+ "untrusted",
+ "web-sys",
+ "winapi",
+]
+
+[[package]]
+name = "rustc-hash"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
+
+[[package]]
+name = "rustix"
+version = "0.37.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d69718bf81c6127a49dc64e44a742e8bb9213c0ff8869a22c308f84c1d4ab06"
+dependencies = [
+ "bitflags 1.3.2",
+ "errno",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys 0.3.8",
+ "windows-sys",
+]
+
+[[package]]
+name = "rustix"
+version = "0.38.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9bfe0f2582b4931a45d1fa608f8a8722e8b3c7ac54dd6d5f3b3212791fedef49"
+dependencies = [
+ "bitflags 2.4.0",
+ "errno",
+ "libc",
+ "linux-raw-sys 0.4.5",
+ "windows-sys",
+]
+
+[[package]]
+name = "rustls"
+version = "0.21.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d1feddffcfcc0b33f5c6ce9a29e341e4cd59c3f78e7ee45f4a40c038b1d6cbb"
+dependencies = [
+ "log",
+ "ring",
+ "rustls-webpki 0.101.4",
+ "sct",
+]
+
+[[package]]
+name = "rustls-webpki"
+version = "0.100.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e98ff011474fa39949b7e5c0428f9b4937eda7da7848bbb947786b7be0b27dab"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "rustls-webpki"
+version = "0.101.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d93931baf2d282fff8d3a532bbfd7653f734643161b87e3e01e59a04439bf0d"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741"
+
+[[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 = "schannel"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88"
+dependencies = [
+ "windows-sys",
+]
+
+[[package]]
+name = "scopeguard"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+
+[[package]]
+name = "sct"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "sec1"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc"
+dependencies = [
+ "base16ct",
+ "der",
+ "generic-array",
+ "pkcs8",
+ "subtle",
+ "zeroize",
+]
+
+[[package]]
+name = "security-framework"
+version = "2.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de"
+dependencies = [
+ "bitflags 1.3.2",
+ "core-foundation",
+ "core-foundation-sys",
+ "libc",
+ "security-framework-sys",
+]
+
+[[package]]
+name = "security-framework-sys"
+version = "2.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "semver"
+version = "1.0.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0293b4b29daaf487284529cc2f5675b8e57c61f70167ba415a463651fd6a918"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.188"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf9e0fcba69a370eed61bcf2b728575f726b50b55cba78064753d708ddc7549e"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.188"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.105"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "693151e1ac27563d6dbcec9dee9fbd5da8539b20fa14ad3752b2e6d363ace360"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_spanned"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96426c9936fd7a0124915f9185ea1d20aa9445cc9821142f0a73bc9207a2e186"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "sha2"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "shell-escape"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "45bb67a18fa91266cc7807181f62f9178a6873bfad7dc788c42e6430db40184f"
+
+[[package]]
+name = "shlex"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3"
+
+[[package]]
+name = "signature"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e1788eed21689f9cf370582dfc467ef36ed9c707f073528ddafa8d83e3b8500"
+dependencies = [
+ "digest",
+ "rand_core",
+]
+
+[[package]]
+name = "similar"
+version = "2.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "420acb44afdae038210c99e69aae24109f32f15500aa708e81d46c9f29d55fcf"
+
+[[package]]
+name = "smol_str"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "74212e6bbe9a4352329b2f68ba3130c15a3f26fe88ff22dbdc6cdd58fa85e99c"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "snapbox"
+version = "0.4.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad90eb3a2e3a8031d636d45bd4832751aefd58a291b553f7305a2bacae21aff3"
+dependencies = [
+ "anstream 0.5.0",
+ "anstyle",
+ "content_inspector",
+ "dunce",
+ "filetime",
+ "libc",
+ "normalize-line-endings",
+ "os_pipe",
+ "similar",
+ "snapbox-macros",
+ "tempfile",
+ "wait-timeout",
+ "walkdir",
+ "windows-sys",
+]
+
+[[package]]
+name = "snapbox-macros"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95f4ffd811b87da98d0e48285134b7847954bd76e843bb794a893b47ca3ee325"
+dependencies = [
+ "anstream 0.5.0",
+]
+
+[[package]]
+name = "socket2"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "socks"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0c3dbbd9ae980613c6dd8e28a9407b50509d3803b57624d5dfe8315218cd58b"
+dependencies = [
+ "byteorder",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "spin"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
+
+[[package]]
+name = "spki"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d1e996ef02c474957d681f1b05213dfb0abab947b446a62d37770b23500184a"
+dependencies = [
+ "base64ct",
+ "der",
+]
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "subprocess"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c2e86926081dda636c546d8c5e641661049d7562a68f5488be4a1f7f66f6086"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "subtle"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc"
+
+[[package]]
+name = "syn"
+version = "2.0.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c324c494eba9d92503e6f1ef2e6df781e78f6a7705a0202d9801b198807d518a"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "tar"
+version = "0.4.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b16afcea1f22891c49a00c751c7b63b2233284064f11a200fc624137c51e2ddb"
+dependencies = [
+ "filetime",
+ "libc",
+]
+
+[[package]]
+name = "tempfile"
+version = "3.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb94d2f3cc536af71caac6b6fcebf65860b347e7ce0cc9ebe8f70d3e521054ef"
+dependencies = [
+ "cfg-if",
+ "fastrand",
+ "redox_syscall",
+ "rustix 0.38.9",
+ "windows-sys",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "terminal_size"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e6bf6f19e9f8ed8d4048dc22981458ebcf406d67e94cd422e5ecd73d63b3237"
+dependencies = [
+ "rustix 0.37.23",
+ "windows-sys",
+]
+
+[[package]]
+name = "termtree"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76"
+
+[[package]]
+name = "thiserror"
+version = "1.0.47"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97a802ec30afc17eee47b2855fc72e0c4cd62be9b4efe6591edde0ec5bd68d8f"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.47"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6bb623b56e39ab7dcd4b1b98bb6c8f8d907ed255b18de254088016b27a8ee19b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "thread_local"
+version = "1.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+]
+
+[[package]]
+name = "time"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17f6bb557fd245c28e6411aa56b6403c689ad95061f50e4be16c274e70a17e48"
+dependencies = [
+ "deranged",
+ "itoa",
+ "serde",
+ "time-core",
+ "time-macros",
+]
+
+[[package]]
+name = "time-core"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb"
+
+[[package]]
+name = "time-macros"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a942f44339478ef67935ab2bbaec2fb0322496cf3cbe84b261e06ac3814c572"
+dependencies = [
+ "time-core",
+]
+
+[[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.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+[[package]]
+name = "toml"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c17e963a819c331dcacd7ab957d80bc2b9a9c1e71c804826d2f283dd65306542"
+dependencies = [
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "toml_edit",
+]
+
+[[package]]
+name = "toml_datetime"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.19.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8123f27e969974a3dfba720fdb560be359f57b44302d280ba72e76a74480e8a"
+dependencies = [
+ "indexmap 2.0.0",
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "winnow",
+]
+
+[[package]]
+name = "tracing"
+version = "0.1.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
+dependencies = [
+ "cfg-if",
+ "pin-project-lite",
+ "tracing-attributes",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-attributes"
+version = "0.1.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "trycmd"
+version = "0.14.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc6a42f89ccf3c6ee115608a68e256c172734d525a4ac36d4a17a6d4a8108149"
+dependencies = [
+ "glob",
+ "humantime",
+ "humantime-serde",
+ "rayon",
+ "serde",
+ "shlex",
+ "snapbox",
+ "toml_edit",
+]
+
+[[package]]
+name = "typenum"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba"
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "untrusted"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
+
+[[package]]
+name = "ureq"
+version = "2.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b11c96ac7ee530603dcdf68ed1557050f374ce55a5a07193ebf8cbc9f8927e9"
+dependencies = [
+ "base64",
+ "log",
+ "native-tls",
+ "once_cell",
+ "rustls",
+ "rustls-webpki 0.100.2",
+ "serde",
+ "serde_json",
+ "socks",
+ "url",
+ "webpki-roots",
+]
+
+[[package]]
+name = "url"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50bff7831e19200a85b17131d085c25d7811bc4e186efdaf54bbd132994a88cb"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "percent-encoding",
+]
+
+[[package]]
+name = "utf8parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
+
+[[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 = "wait-timeout"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "walkdir"
+version = "2.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698"
+dependencies = [
+ "same-file",
+ "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 = "wasm-bindgen"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1"
+
+[[package]]
+name = "web-sys"
+version = "0.3.64"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "webpki-roots"
+version = "0.23.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b03058f88386e5ff5310d9111d53f48b17d732b401aeb83a8d5190f2ac459338"
+dependencies = [
+ "rustls-webpki 0.100.2",
+]
+
+[[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"
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
+
+[[package]]
+name = "winnow"
+version = "0.5.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7c2e3184b9c4e92ad5167ca73039d0c42476302ab603e2fec4487511f38ccefc"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "zeroize"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9"
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-edit/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-edit/default.nix
new file mode 100644
index 000000000000..26d8bc1aa172
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-edit/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, openssl
+, zlib
+, stdenv
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-edit";
+  version = "0.12.2";
+
+  src = fetchFromGitHub {
+    owner = "killercup";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-tMYuhUb1e/wTMZGwrAa3bz3INAld/ZtQzJqpeG0w/G8=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "cargo-test-macro-0.1.0" = "sha256-yE8BJMTRBT3P29t5ygMCybs0CYDcFLVlxi1L0LkBV9Q=";
+    };
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ openssl zlib ] ++ lib.optionals stdenv.isDarwin [
+    Security
+  ];
+
+  doCheck = false; # integration tests depend on changing cargo config
+
+  meta = with lib; {
+    description = "A utility for managing cargo dependencies from the command line";
+    homepage = "https://github.com/killercup/cargo-edit";
+    changelog = "https://github.com/killercup/cargo-edit/blob/v${version}/CHANGELOG.md";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ Br1ght0ne figsoda gerschtli jb55 killercup ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-espmonitor/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-espmonitor/default.nix
new file mode 100644
index 000000000000..55f4df99c6e4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-espmonitor/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+, pkg-config
+, systemd
+,
+}:
+rustPlatform.buildRustPackage rec {
+  pname = "espmonitor";
+  version = "0.10.0";
+
+  src = fetchFromGitHub {
+    owner = "esp-rs";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "hWFdim84L2FfG6p9sEf+G5Uq4yhp5kv1ZMdk4sMHa+4=";
+  };
+
+  cargoSha256 = "d0tN6NZiAd+RkRy941fIaVEw/moz6tkpL0rN8TZew3g=";
+
+  meta = with lib; {
+    description = "Cargo tool for monitoring ESP32/ESP8266 execution";
+    homepage = "https://github.com/esp-rs/espmonitor";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ xanderio ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-expand/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-expand/default.nix
new file mode 100644
index 000000000000..a51b972921da
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-expand/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-expand";
+  version = "1.0.79";
+
+  src = fetchFromGitHub {
+    owner = "dtolnay";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-P0pwQSKkQI/hIaCxU9a3BMdFaBtY4GtB38vqDOvdbaU=";
+  };
+
+  cargoHash = "sha256-G0JNTZZMe4V1o/7KqhlubNczSemIPvrPeH5KQ1oNYWY=";
+
+  meta = with lib; {
+    description = "A utility and Cargo subcommand designed to let people expand macros in their Rust source code";
+    homepage = "https://github.com/dtolnay/cargo-expand";
+    changelog = "https://github.com/dtolnay/cargo-expand/releases/tag/${version}";
+    license = with licenses; [ mit asl20 ];
+    maintainers = with maintainers; [ figsoda xrelkd ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-feature/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-feature/default.nix
new file mode 100644
index 000000000000..855fb65fdfb7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-feature/default.nix
@@ -0,0 +1,26 @@
+{ lib, rustPlatform, fetchFromGitHub, stdenv, libiconv }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-feature";
+  version = "0.7.0";
+
+  src = fetchFromGitHub {
+    owner = "Riey";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-UPpqkz/PwoMaJan9itfldjyTmZmiMb6PzCyu9Vtjj1s=";
+  };
+
+  cargoSha256 = "sha256-8qrpW/gU7BvxN3nSbFWhbgu5bwsdzYZTS3w3kcwsGbU=";
+
+  buildInputs = lib.optional stdenv.isDarwin libiconv;
+
+  meta = with lib; {
+    description = "Cargo plugin to manage dependency features";
+    homepage = "https://github.com/Riey/cargo-feature";
+    license = licenses.mit;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ riey matthiasbeyer ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-flamegraph/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-flamegraph/default.nix
new file mode 100644
index 000000000000..1e90dedcccde
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-flamegraph/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, makeWrapper, perf, nix-update-script
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-flamegraph";
+  version = "0.6.5";
+
+  src = fetchFromGitHub {
+    owner = "flamegraph-rs";
+    repo = "flamegraph";
+    rev = "v${version}";
+    sha256 = "sha256-VrC3c3a1G8mn9U6txeynsaWOL4HQQk2IOiQqS52iPGo=";
+  };
+
+  cargoSha256 = "sha256-KwpveTiViY+C4A+fE5yeGuT9PXbDyi+YsOc75mX2KdU=";
+
+  nativeBuildInputs = lib.optionals stdenv.isLinux [ makeWrapper ];
+  buildInputs = lib.optionals stdenv.isDarwin [
+    Security
+  ];
+
+  postFixup = lib.optionalString stdenv.isLinux ''
+    wrapProgram $out/bin/cargo-flamegraph \
+      --set-default PERF ${perf}/bin/perf
+    wrapProgram $out/bin/flamegraph \
+      --set-default PERF ${perf}/bin/perf
+  '';
+
+  passthru.updateScript = nix-update-script { };
+
+  meta = with lib; {
+    description = "Easy flamegraphs for Rust projects and everything else, without Perl or pipes <3";
+    homepage = "https://github.com/flamegraph-rs/flamegraph";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ killercup matthiasbeyer ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-fund/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-fund/default.nix
new file mode 100644
index 000000000000..54a04f29a012
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-fund/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, rustPlatform, Security, curl, openssl, libiconv }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-fund";
+  version = "0.2.3";
+
+  src = fetchFromGitHub {
+    owner = "acfoltzer";
+    repo = pname;
+    rev = version;
+    hash = "sha256-8mnCwWwReNH9s/gbxIhe7XdJRIA6BSUKm5jzykU5qMU=";
+  };
+
+  cargoHash = "sha256-J4AylYE4RTRPTUz5Hek7D34q9HjlFnrc/z/ax0i6lPQ=";
+
+  # The tests need a GitHub API token.
+  doCheck = false;
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ openssl ] ++ lib.optionals stdenv.isDarwin [ Security libiconv curl ];
+
+  meta = with lib; {
+    description = "Discover funding links for your project's dependencies";
+    homepage = "https://github.com/acfoltzer/cargo-fund";
+    license = with licenses; [ mit /* or */ asl20 ];
+    maintainers = with maintainers; [ johntitor ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-fuzz/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-fuzz/default.nix
new file mode 100644
index 000000000000..12fae7b15c38
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-fuzz/default.nix
@@ -0,0 +1,26 @@
+{ lib, fetchFromGitHub, rustPlatform, stdenv, libiconv }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-fuzz";
+  version = "0.11.4";
+
+  src = fetchFromGitHub {
+    owner = "rust-fuzz";
+    repo = "cargo-fuzz";
+    rev = version;
+    hash = "sha256-+k1kHiHRQER/8JTOeQdxcbsfMvS6eC74Wkd9IlLldok=";
+  };
+
+  cargoHash = "sha256-N3niTnSSIfOVOGhcHHgTbLnpYNmM4bow7qX539P+kHQ=";
+
+  buildInputs = lib.optional stdenv.isDarwin libiconv;
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Command line helpers for fuzzing";
+    homepage = "https://github.com/rust-fuzz/cargo-fuzz";
+    license = with licenses; [ mit asl20 ];
+    maintainers = with maintainers; [ ekleog matthiasbeyer ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-geiger/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-geiger/default.nix
new file mode 100644
index 000000000000..5c48aeeb3829
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-geiger/default.nix
@@ -0,0 +1,59 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, rustPlatform
+, pkg-config
+, openssl
+  # darwin dependencies
+, darwin
+, libiconv
+, curl
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-geiger";
+  version = "0.11.6";
+
+  src = fetchFromGitHub {
+    owner = "rust-secure-code";
+    repo = pname;
+    rev = "${pname}-${version}";
+    sha256 = "sha256-rGZJyCWGk2RUr52ICp4dVER3JMBrnLdOMusRm/GG2PE=";
+  };
+  cargoHash = "sha256-B6Ka35y2fJEDVd891P60TNppr5HGFnzVjLhhfoFCYUA=";
+
+  buildInputs = [ openssl ]
+    ++ lib.optionals stdenv.isDarwin (with darwin.apple_sdk.frameworks; [ CoreFoundation Security libiconv curl ]);
+  nativeBuildInputs = [ pkg-config ]
+    # curl-sys wants to run curl-config on darwin
+    ++ lib.optionals stdenv.isDarwin [ curl.dev ];
+
+  # skip tests with networking or other failures
+  checkFlags = [
+    "--skip serialize_test2_quick_report"
+    "--skip serialize_test3_quick_report"
+    "--skip serialize_test6_quick_report"
+    "--skip serialize_test2_report"
+    "--skip serialize_test3_report"
+    "--skip serialize_test6_report"
+    # multiple test cases that time-out or cause memory leaks
+    "--skip test_package"
+    "--skip test_package_update_readme::case_2"
+    "--skip test_package_update_readme::case_3"
+    "--skip test_package_update_readme::case_5"
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/rust-secure-code/cargo-geiger";
+    changelog = "https://github.com/rust-secure-code/cargo-geiger/blob/${pname}-${version}/CHANGELOG.md";
+    description = "Detects usage of unsafe Rust in a Rust crate and its dependencies";
+    longDescription = ''
+      A cargo plugin that detects the usage of unsafe Rust in a Rust crate and
+      its dependencies. It provides information to aid auditing and guide
+      dependency selection but it can not help you decide when and why unsafe
+      code is appropriate.
+    '';
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ evanjs jk matthiasbeyer ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-generate/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-generate/default.nix
new file mode 100644
index 000000000000..869a0c8bbbc3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-generate/default.nix
@@ -0,0 +1,58 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, libgit2_1_6
+, openssl
+, stdenv
+, darwin
+, git
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-generate";
+  version = "0.19.0";
+
+  src = fetchFromGitHub {
+    owner = "cargo-generate";
+    repo = "cargo-generate";
+    rev = "v${version}";
+    sha256 = "sha256-OT2cjNYcEKk6Thnlq7SZvK2RJ6M1Zn62GrqpKbtrUdM=";
+  };
+
+  cargoHash = "sha256-DAJsW3uKrSyIju7K13dMQFNOwE9WDuBuPx8imdPAxqk=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ libgit2_1_6 openssl ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  nativeCheckInputs = [ git ];
+
+  # disable vendored libgit2 and openssl
+  buildNoDefaultFeatures = true;
+
+  preCheck = ''
+    export HOME=$(mktemp -d) USER=nixbld
+    git config --global user.name Nixbld
+    git config --global user.email nixbld@localhost.localnet
+  '';
+
+  # Exclude some tests that don't work in sandbox:
+  # - favorites_default_to_git_if_not_defined: requires network access to github.com
+  # - should_canonicalize: the test assumes that it will be called from the /Users/<project_dir>/ folder on darwin variant.
+  checkFlags = [
+    "--skip=favorites::favorites_default_to_git_if_not_defined"
+  ] ++ lib.optionals stdenv.isDarwin [
+    "--skip=git::utils::should_canonicalize"
+  ];
+
+  meta = with lib; {
+    description = "A tool to generaet a new Rust project by leveraging a pre-existing git repository as a template";
+    homepage = "https://github.com/cargo-generate/cargo-generate";
+    changelog = "https://github.com/cargo-generate/cargo-generate/blob/v${version}/CHANGELOG.md";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ figsoda turbomack matthiasbeyer ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-graph/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-graph/default.nix
new file mode 100644
index 000000000000..81416af36cfc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-graph/default.nix
@@ -0,0 +1,22 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-graph";
+  version = "0.2.0-d895af1";
+
+  src = fetchFromGitHub {
+    owner = "kbknapp";
+    repo = "cargo-graph";
+    # The last release (v0.2.0) is from 2015. Since then there have been some
+    # bug fixes committed that would be good to have.
+    rev = "d895af1b7840c7ae8eddaf4e990bfa594c22ba01";
+    sha256 = "0myg26cssmbakz53dl61lswsbaqnjqlbc30c2571pq8f7gvz2qv5";
+  };
+
+  cargoSha256 = "0wyvly7aq4njlxnmgpfgbh08fxgqh85kw7d938pm6qxmj27zn4p2";
+
+  meta = with lib; {
+    description = "A cargo subcommand for creating GraphViz DOT files and dependency graphs";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ basvandijk matthiasbeyer ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-guppy/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-guppy/default.nix
new file mode 100644
index 000000000000..e62a0a9925fd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-guppy/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, openssl
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-guppy";
+  version = "unstable-2023-10-04";
+
+  src = fetchFromGitHub {
+    owner = "guppy-rs";
+    repo = "guppy";
+    rev = "837d0ae762b9ae79cc8ca5d629842e5ca34293b4";
+    sha256 = "sha256-LWU1yAD/f9w5m522vcKP9D2JusGkwzvfGSGstvFGUpk=";
+  };
+
+  cargoSha256 = "sha256-IyU5fJSFzef8P5v8ILufGcTP3+5Gm0PH4Cox2G5saHw=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ openssl ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  cargoBuildFlags = [ "-p" "cargo-guppy" ];
+  cargoTestFlags = [ "-p" "cargo-guppy" ];
+
+  meta = with lib; {
+    description = "A command-line frontend for guppy";
+    homepage = "https://github.com/guppy-rs/guppy/tree/main/cargo-guppy";
+    license = with licenses; [ mit /* or */ asl20 ];
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-hack/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-hack/default.nix
new file mode 100644
index 000000000000..4cc982f9433d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-hack/default.nix
@@ -0,0 +1,24 @@
+{ lib, rustPlatform, fetchCrate }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-hack";
+  version = "0.6.18";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-SHLYS7XRzOC6sTUjaJI5S+a230sV69a9m7cTW5gQkXQ=";
+  };
+
+  cargoHash = "sha256-vqgrffgMQWzmjIjGswObLPc63hjqXTOwJ3YrA/KyCck=";
+
+  # some necessary files are absent in the crate version
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Cargo subcommand to provide various options useful for testing and continuous integration";
+    homepage = "https://github.com/taiki-e/cargo-hack";
+    changelog = "https://github.com/taiki-e/cargo-hack/blob/v${version}/CHANGELOG.md";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-hakari/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-hakari/default.nix
new file mode 100644
index 000000000000..e58bf32863a8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-hakari/default.nix
@@ -0,0 +1,31 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-hakari";
+  version = "0.9.28";
+
+  src = fetchFromGitHub {
+    owner = "guppy-rs";
+    repo = "guppy";
+    rev = "cargo-hakari-${version}";
+    sha256 = "sha256-mTemccM/C9M2kso9PNpd0UGEZJd/tBd1PjCpbDFFtNo=";
+  };
+
+  cargoHash = "sha256-UaSW9PZMUhqjvRM0/URHaOfofG5Ap3bvKgAHa+H+MFw=";
+
+  cargoBuildFlags = [ "-p" "cargo-hakari" ];
+  cargoTestFlags = [ "-p" "cargo-hakari" ];
+
+  meta = with lib; {
+    description = "Manage workspace-hack packages to speed up builds in large workspaces.";
+    longDescription = ''
+      cargo hakari is a command-line application to manage workspace-hack crates.
+      Use it to speed up local cargo build and cargo check commands by 15-95%,
+      and cumulatively by 20-25% or more.
+    '';
+    homepage = "https://crates.io/crates/cargo-hakari";
+    changelog = "https://github.com/guppy-rs/guppy/blob/cargo-hakari-${version}/tools/cargo-hakari/CHANGELOG.md";
+    license = with licenses; [ mit asl20 ];
+    maintainers = with maintainers; [ figsoda macalinao ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-hf2/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-hf2/default.nix
new file mode 100644
index 000000000000..92a0a5458175
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-hf2/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, rustPlatform
+, fetchCrate
+, pkg-config
+, libusb1
+, stdenv
+, AppKit
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-hf2";
+  version = "0.3.3";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-0o3j7YfgNNnfbrv9Gppo24DqYlDCxhtsJHIhAV214DU=";
+  };
+
+  cargoSha256 = "sha256-zBxvpQfB9xw8+Rc1H1EaK/gQZtQ+uSs4YJwhm2o0vhI=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ libusb1 ] ++ lib.optionals stdenv.isDarwin [ AppKit ];
+
+  meta = with lib; {
+    description = "Cargo Subcommand for Microsoft HID Flashing Library for UF2 Bootloaders ";
+    homepage = "https://lib.rs/crates/cargo-hf2";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ astrobeastie ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-info/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-info/default.nix
new file mode 100644
index 000000000000..9e05699e6c43
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-info/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, rustPlatform
+, fetchFromGitLab
+, pkg-config
+, openssl
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-info";
+  version = "0.7.6";
+
+  src = fetchFromGitLab {
+    owner = "imp";
+    repo = "cargo-info";
+    rev = version;
+    hash = "sha256-02Zkp7Vc1M5iZsG4iJL30S73T2HHg3lqrPJ9mW3FOuk=";
+  };
+
+  cargoHash = "sha256-zp7qklME28HNGomAcQgrEi7W6zQ1QCJc4FjxtnKySUE=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  meta = with lib; {
+    description = "Cargo subcommand to show crates info from crates.io";
+    homepage = "https://gitlab.com/imp/cargo-info";
+    changelog = "https://gitlab.com/imp/cargo-info/-/blob/${src.rev}/CHANGELOG.md";
+    license = with licenses; [ mit asl20 ];
+    maintainers = with maintainers; [ figsoda matthiasbeyer ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-inspect/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-inspect/default.nix
new file mode 100644
index 000000000000..4a9f642b700f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-inspect/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, lib, rustPlatform, fetchFromGitHub, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-inspect";
+  version = "0.10.3";
+
+  src = fetchFromGitHub {
+    owner = "mre";
+    repo = pname;
+    rev = version;
+    sha256 = "026vc8d0jkc1d7dlp3ldmwks7svpvqzl0k5niri8a12cl5w5b9hj";
+  };
+
+  buildInputs = lib.optionals stdenv.isDarwin [ Security ];
+
+  cargoSha256 = "069i8ydrp1pssnjq7d6mydwr7xh2cmcpzpf8bzd6nfjr6xx1pipr";
+
+  meta = with lib; {
+    description = "See what Rust is doing behind the curtains";
+    homepage = "https://github.com/mre/cargo-inspect";
+    license = with licenses; [ mit asl20 ];
+    maintainers = with maintainers; [ minijackson matthiasbeyer ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-insta/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-insta/default.nix
new file mode 100644
index 000000000000..36f13c7fc890
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-insta/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-insta";
+  version = "1.33.0";
+
+  src = fetchFromGitHub {
+    owner = "mitsuhiko";
+    repo = "insta";
+    rev = "refs/tags/${version}";
+    hash = "sha256-w/dxIQ7KRrn86PwiE/g5L9Gn8KszPF9u/zlwE/FYDu4=";
+  };
+
+  sourceRoot = "${src.name}/cargo-insta";
+
+  cargoHash = "sha256-mEtmZ+wFo1WI1IMNYsVqSVScFDLdiXBbghH7c0l/3NQ=";
+
+  meta = with lib; {
+    description = "A Cargo subcommand for snapshot testing";
+    homepage = "https://github.com/mitsuhiko/insta";
+    changelog = "https://github.com/mitsuhiko/insta/blob/${version}/CHANGELOG.md";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ figsoda oxalica matthiasbeyer ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-kcov/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-kcov/default.nix
new file mode 100644
index 000000000000..1b7c3b0eead9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-kcov/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, makeWrapper
+, kcov
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-kcov";
+  version = "0.5.2";
+
+  src = fetchFromGitHub {
+    owner = "kennytm";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0hqplgj3i8js42v2kj44khk543a93sk3n6wlfpv3c84pdqlm29br";
+  };
+
+  cargoSha256 = "0m5gfyjzzwd8wkbb388vmd785dy334x0migq3ssi7dlah9zx62bj";
+  doCheck = false;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postInstall = ''
+    wrapProgram $out/bin/cargo-kcov \
+        --prefix PATH : ${lib.makeBinPath [ kcov ]}
+  '';
+
+  meta = with lib; {
+    description = "Cargo subcommand to run kcov to get coverage report on Linux";
+    homepage = "https://github.com/kennytm/cargo-kcov";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ saschagrunert matthiasbeyer ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-lambda/Cargo.lock b/nixpkgs/pkgs/development/tools/rust/cargo-lambda/Cargo.lock
new file mode 100644
index 000000000000..163cc12df3af
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-lambda/Cargo.lock
@@ -0,0 +1,5588 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "addr2line"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb"
+dependencies = [
+ "gimli",
+]
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "aes"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac1f845298e95f983ff1944b728ae08b8cebab80d684f0a832ed0fc74dfa27e2"
+dependencies = [
+ "cfg-if",
+ "cipher",
+ "cpufeatures",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "android-tzdata"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
+
+[[package]]
+name = "android_system_properties"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "anstream"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2ab91ebe16eb252986481c5b62f6098f3b698a45e34b5b98200cf20dd2484a44"
+dependencies = [
+ "anstyle",
+ "anstyle-parse",
+ "anstyle-query",
+ "anstyle-wincon",
+ "colorchoice",
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87"
+
+[[package]]
+name = "anstyle-parse"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "317b9a89c1868f5ea6ff1d9539a69f45dffc21ce321ac1fd1160dfa48c8e2140"
+dependencies = [
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle-query"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b"
+dependencies = [
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "anstyle-wincon"
+version = "3.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0699d10d2f4d628a98ee7b57b289abbc98ff3bad977cb3152709d4bf2330628"
+dependencies = [
+ "anstyle",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.75"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6"
+
+[[package]]
+name = "anymap2"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d301b3b94cb4b2f23d7917810addbbaff90738e0ca2be692bd027e70d7e0330c"
+
+[[package]]
+name = "ascii-canvas"
+version = "3.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8824ecca2e851cec16968d54a01dd372ef8f95b244fb84b84e70128be347c3c6"
+dependencies = [
+ "term",
+]
+
+[[package]]
+name = "async-priority-channel"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c21678992e1b21bebfe2bc53ab5f5f68c106eddab31b24e0bb06e9b715a86640"
+dependencies = [
+ "event-listener",
+]
+
+[[package]]
+name = "async-recursion"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fd55a5ba1179988837d24ab4c7cc8ed6efdeff578ede0416b4225a5fca35bd0"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "async-trait"
+version = "0.1.74"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a66537f1bb974b254c98ed142ff995236e81b9d0fe4db0575f46612cb15eb0f9"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "atomic"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8d818003e740b63afc82337e3160717f4f63078720a810b7b903e70a5d1d2994"
+dependencies = [
+ "bytemuck",
+]
+
+[[package]]
+name = "atomic-take"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8ab6b55fe97976e46f91ddbed8d147d966475dc29b2032757ba47e02376fbc3"
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "aws-config"
+version = "0.57.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7489a72550db3712fe3a0a92068f832d6270ff82f518b84a800af131f99570d7"
+dependencies = [
+ "aws-credential-types",
+ "aws-http",
+ "aws-runtime",
+ "aws-sdk-sso",
+ "aws-sdk-ssooidc",
+ "aws-sdk-sts",
+ "aws-smithy-async",
+ "aws-smithy-http",
+ "aws-smithy-json",
+ "aws-smithy-runtime",
+ "aws-smithy-runtime-api",
+ "aws-smithy-types",
+ "aws-types",
+ "bytes",
+ "fastrand",
+ "hex",
+ "http",
+ "hyper",
+ "ring",
+ "time",
+ "tokio",
+ "tracing",
+ "zeroize",
+]
+
+[[package]]
+name = "aws-credential-types"
+version = "0.57.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80009846d61a0a4f9070d789cf0e64db284cba6984fae3871050d044e6569cd2"
+dependencies = [
+ "aws-smithy-async",
+ "aws-smithy-runtime-api",
+ "aws-smithy-types",
+ "zeroize",
+]
+
+[[package]]
+name = "aws-http"
+version = "0.57.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e65730b741a5f6422fd338bf6f76b7956b090affeaa045e78fca8c4186e0fd5"
+dependencies = [
+ "aws-smithy-http",
+ "aws-smithy-runtime-api",
+ "aws-smithy-types",
+ "aws-types",
+ "bytes",
+ "http",
+ "http-body",
+ "pin-project-lite",
+ "tracing",
+]
+
+[[package]]
+name = "aws-runtime"
+version = "0.57.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d2414b96071ae840b97c0cc1d44b248d5607d648593cdf474f3fb5465572898"
+dependencies = [
+ "aws-credential-types",
+ "aws-http",
+ "aws-sigv4",
+ "aws-smithy-async",
+ "aws-smithy-eventstream",
+ "aws-smithy-http",
+ "aws-smithy-runtime-api",
+ "aws-smithy-types",
+ "aws-types",
+ "fastrand",
+ "http",
+ "percent-encoding",
+ "tracing",
+ "uuid",
+]
+
+[[package]]
+name = "aws-sdk-iam"
+version = "0.35.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a299158323ebc6029b250e7ffd567810c1bd9777dbd5f7a65969a67e03786722"
+dependencies = [
+ "aws-credential-types",
+ "aws-http",
+ "aws-runtime",
+ "aws-smithy-async",
+ "aws-smithy-http",
+ "aws-smithy-json",
+ "aws-smithy-query",
+ "aws-smithy-runtime",
+ "aws-smithy-runtime-api",
+ "aws-smithy-types",
+ "aws-smithy-xml",
+ "aws-types",
+ "http",
+ "regex",
+ "tracing",
+]
+
+[[package]]
+name = "aws-sdk-lambda"
+version = "0.35.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6acf16c06e9a488fe6788b69ffc836327f031a5fabf109b5ac3960080ffda0fe"
+dependencies = [
+ "aws-credential-types",
+ "aws-http",
+ "aws-runtime",
+ "aws-smithy-async",
+ "aws-smithy-http",
+ "aws-smithy-json",
+ "aws-smithy-runtime",
+ "aws-smithy-runtime-api",
+ "aws-smithy-types",
+ "aws-types",
+ "bytes",
+ "http",
+ "regex",
+ "tracing",
+]
+
+[[package]]
+name = "aws-sdk-s3"
+version = "0.35.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "84022763485483ea17d417f9832d5da198bc36829b59f086c0d35ecd2ce59991"
+dependencies = [
+ "aws-credential-types",
+ "aws-http",
+ "aws-runtime",
+ "aws-sigv4",
+ "aws-smithy-async",
+ "aws-smithy-checksums",
+ "aws-smithy-eventstream",
+ "aws-smithy-http",
+ "aws-smithy-json",
+ "aws-smithy-runtime",
+ "aws-smithy-runtime-api",
+ "aws-smithy-types",
+ "aws-smithy-xml",
+ "aws-types",
+ "bytes",
+ "http",
+ "http-body",
+ "once_cell",
+ "percent-encoding",
+ "regex",
+ "tracing",
+ "url",
+]
+
+[[package]]
+name = "aws-sdk-sso"
+version = "0.35.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "341a5b00567d0f350025501c8fd36e1ca8055744a2d17e351f0b254f84eba48a"
+dependencies = [
+ "aws-credential-types",
+ "aws-http",
+ "aws-runtime",
+ "aws-smithy-async",
+ "aws-smithy-http",
+ "aws-smithy-json",
+ "aws-smithy-runtime",
+ "aws-smithy-runtime-api",
+ "aws-smithy-types",
+ "aws-types",
+ "bytes",
+ "http",
+ "regex",
+ "tracing",
+]
+
+[[package]]
+name = "aws-sdk-ssooidc"
+version = "0.35.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dbd4bffbd26f66269933bcd26123f2d6860769c0f769b6d3fc10eda025d287d8"
+dependencies = [
+ "aws-credential-types",
+ "aws-http",
+ "aws-runtime",
+ "aws-smithy-async",
+ "aws-smithy-http",
+ "aws-smithy-json",
+ "aws-smithy-runtime",
+ "aws-smithy-runtime-api",
+ "aws-smithy-types",
+ "aws-types",
+ "bytes",
+ "http",
+ "regex",
+ "tracing",
+]
+
+[[package]]
+name = "aws-sdk-sts"
+version = "0.35.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "51b1a8ae5c7098502a3e6d4130dbee1e1d3fcb8dc5d65cecab39e01d595f90f6"
+dependencies = [
+ "aws-credential-types",
+ "aws-http",
+ "aws-runtime",
+ "aws-smithy-async",
+ "aws-smithy-http",
+ "aws-smithy-json",
+ "aws-smithy-query",
+ "aws-smithy-runtime",
+ "aws-smithy-runtime-api",
+ "aws-smithy-types",
+ "aws-smithy-xml",
+ "aws-types",
+ "http",
+ "regex",
+ "tracing",
+]
+
+[[package]]
+name = "aws-sigv4"
+version = "0.57.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3347c738e0a8449020877d319cda56da74d6e8aba9fff210720fac66cae3c7f4"
+dependencies = [
+ "aws-credential-types",
+ "aws-smithy-eventstream",
+ "aws-smithy-http",
+ "aws-smithy-runtime-api",
+ "bytes",
+ "form_urlencoded",
+ "hex",
+ "hmac",
+ "http",
+ "num-bigint",
+ "once_cell",
+ "p256",
+ "percent-encoding",
+ "regex",
+ "ring",
+ "sha2",
+ "time",
+ "tracing",
+ "zeroize",
+]
+
+[[package]]
+name = "aws-smithy-async"
+version = "0.57.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4b65a284265d3eec6cc9f1daef2d0cc3b78684b712cb6c7f1d0f665456b7604"
+dependencies = [
+ "futures-util",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "aws-smithy-checksums"
+version = "0.57.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d40f1d5a222ba11ac7d6b20f3668ae282970e50615fa5ee1dd8ac8180c0c1803"
+dependencies = [
+ "aws-smithy-http",
+ "aws-smithy-types",
+ "bytes",
+ "crc32c",
+ "crc32fast",
+ "hex",
+ "http",
+ "http-body",
+ "md-5",
+ "pin-project-lite",
+ "sha1",
+ "sha2",
+ "tracing",
+]
+
+[[package]]
+name = "aws-smithy-eventstream"
+version = "0.57.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b16e7ecebc2b083a1b138868a46a343204a6097f343c4830a8b22b3a0d30013e"
+dependencies = [
+ "aws-smithy-types",
+ "bytes",
+ "crc32fast",
+]
+
+[[package]]
+name = "aws-smithy-http"
+version = "0.57.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "715aeb61fb743848d5d398ce6fb1259f5eba5e13dceec5d5064cada1a181d38d"
+dependencies = [
+ "aws-smithy-eventstream",
+ "aws-smithy-runtime-api",
+ "aws-smithy-types",
+ "bytes",
+ "bytes-utils",
+ "futures-core",
+ "http",
+ "http-body",
+ "once_cell",
+ "percent-encoding",
+ "pin-project-lite",
+ "pin-utils",
+ "tracing",
+]
+
+[[package]]
+name = "aws-smithy-json"
+version = "0.57.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de21d368dcd5cab17033406ea6e7351b091164b208381de837510bd7558c0f30"
+dependencies = [
+ "aws-smithy-types",
+]
+
+[[package]]
+name = "aws-smithy-query"
+version = "0.57.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e5ace389c7e4def130bff7275647481c8d49b867909ca61d5dc9a809b3632f3"
+dependencies = [
+ "aws-smithy-types",
+ "urlencoding",
+]
+
+[[package]]
+name = "aws-smithy-runtime"
+version = "0.57.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb4395310662d10f1847324af5fe43e621922cba03b1aa6d26c21096e18a4e79"
+dependencies = [
+ "aws-smithy-async",
+ "aws-smithy-http",
+ "aws-smithy-runtime-api",
+ "aws-smithy-types",
+ "bytes",
+ "fastrand",
+ "http",
+ "http-body",
+ "hyper",
+ "hyper-rustls",
+ "once_cell",
+ "pin-project-lite",
+ "pin-utils",
+ "rustls",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "aws-smithy-runtime-api"
+version = "0.57.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30e27594c06f5b36e97d18ef26ed693f1d4c7167b9bbb544b3a9bb653f9f7035"
+dependencies = [
+ "aws-smithy-async",
+ "aws-smithy-types",
+ "bytes",
+ "http",
+ "pin-project-lite",
+ "tokio",
+ "tracing",
+ "zeroize",
+]
+
+[[package]]
+name = "aws-smithy-types"
+version = "0.57.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d36f1723ed61e82094498e7283510fe21484b73c215c33874c81a84411b5bdc"
+dependencies = [
+ "base64-simd",
+ "bytes",
+ "bytes-utils",
+ "futures-core",
+ "http",
+ "http-body",
+ "itoa",
+ "num-integer",
+ "pin-project-lite",
+ "pin-utils",
+ "ryu",
+ "serde",
+ "time",
+ "tokio",
+ "tokio-util",
+]
+
+[[package]]
+name = "aws-smithy-xml"
+version = "0.57.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68225c8d3e3e6c565a3cf764aa82440837ef15c33d1dd7205e15715444e4b4ad"
+dependencies = [
+ "xmlparser",
+]
+
+[[package]]
+name = "aws-types"
+version = "0.57.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acdc27aac60f715bab25f5d758ba5651b80aae791c48e9871ffe298683f00a2b"
+dependencies = [
+ "aws-credential-types",
+ "aws-smithy-async",
+ "aws-smithy-runtime-api",
+ "aws-smithy-types",
+ "http",
+ "rustc_version",
+ "tracing",
+]
+
+[[package]]
+name = "aws_lambda_events"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "55d7e5deac5e49330042b4e174dafe84ebf71685bfcd94f285bac7aa31e0aeb1"
+dependencies = [
+ "base64 0.13.1",
+ "bytes",
+ "chrono",
+ "http",
+ "http-body",
+ "http-serde",
+ "query_map",
+ "serde",
+ "serde_derive",
+ "serde_json",
+]
+
+[[package]]
+name = "axum"
+version = "0.5.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acee9fd5073ab6b045a275b3e709c163dd36c90685219cb21804a147b58dba43"
+dependencies = [
+ "async-trait",
+ "axum-core",
+ "bitflags 1.3.2",
+ "bytes",
+ "futures-util",
+ "http",
+ "http-body",
+ "hyper",
+ "itoa",
+ "matchit",
+ "memchr",
+ "mime",
+ "percent-encoding",
+ "pin-project-lite",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "sync_wrapper",
+ "tokio",
+ "tower",
+ "tower-http",
+ "tower-layer",
+ "tower-service",
+]
+
+[[package]]
+name = "axum-core"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37e5939e02c56fecd5c017c37df4238c0a839fa76b7f97acdd7efb804fd181cc"
+dependencies = [
+ "async-trait",
+ "bytes",
+ "futures-util",
+ "http",
+ "http-body",
+ "mime",
+ "tower-layer",
+ "tower-service",
+]
+
+[[package]]
+name = "backtrace"
+version = "0.3.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837"
+dependencies = [
+ "addr2line",
+ "cc",
+ "cfg-if",
+ "libc",
+ "miniz_oxide",
+ "object 0.32.1",
+ "rustc-demangle",
+]
+
+[[package]]
+name = "backtrace-ext"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "537beee3be4a18fb023b570f80e3ae28003db9167a751266b259926e25539d50"
+dependencies = [
+ "backtrace",
+]
+
+[[package]]
+name = "base16ct"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce"
+
+[[package]]
+name = "base16ct"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf"
+
+[[package]]
+name = "base64"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
+
+[[package]]
+name = "base64"
+version = "0.21.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9"
+
+[[package]]
+name = "base64-simd"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "339abbe78e73178762e23bea9dfd08e697eb3f3301cd4be981c0f78ba5859195"
+dependencies = [
+ "outref",
+ "vsimd",
+]
+
+[[package]]
+name = "base64ct"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b"
+
+[[package]]
+name = "beef"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a8241f3ebb85c056b509d4327ad0358fbbba6ffb340bf388f26350aeda225b1"
+
+[[package]]
+name = "bit-set"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1"
+dependencies = [
+ "bit-vec",
+]
+
+[[package]]
+name = "bit-vec"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bitflags"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07"
+
+[[package]]
+name = "block-buffer"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "bstr"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c79ad7fb2dd38f3dabd76b09c6a5a20c038fc0213ef1e9afd30eb777f120f019"
+dependencies = [
+ "memchr",
+ "regex-automata 0.4.3",
+ "serde",
+]
+
+[[package]]
+name = "btoi"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9dd6407f73a9b8b6162d8a2ef999fe6afd7cc15902ebf42c5cd296addf17e0ad"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "build-data"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aed3884e2cab7c973c8fd2d150314b6a932df7fdc830edcaf1e8e7c4ae9db3c0"
+dependencies = [
+ "chrono",
+ "safe-lock",
+ "safe-regex",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec"
+
+[[package]]
+name = "bytemuck"
+version = "1.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6"
+dependencies = [
+ "bytemuck_derive",
+]
+
+[[package]]
+name = "bytemuck_derive"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "965ab7eb5f8f97d2a083c799f3a1b994fc397b2fe2da5d1da1626ce15a39f2b1"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "byteorder"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
+
+[[package]]
+name = "bytes"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "bytes-utils"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e47d3a8076e283f3acd27400535992edb3ba4b5bb72f8891ad8fbe7932a7d4b9"
+dependencies = [
+ "bytes",
+ "either",
+]
+
+[[package]]
+name = "bzip2"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bdb116a6ef3f6c3698828873ad02c3014b3c85cadb88496095628e3ef1e347f8"
+dependencies = [
+ "bzip2-sys",
+ "libc",
+]
+
+[[package]]
+name = "bzip2-sys"
+version = "0.1.11+1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "camino"
+version = "1.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c59e92b5a388f549b863a7bea62612c09f24c8393560709a54558a9abdfb3b9c"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "cargo-lambda"
+version = "1.0.1"
+dependencies = [
+ "build-data",
+ "cargo-lambda-build",
+ "cargo-lambda-deploy",
+ "cargo-lambda-invoke",
+ "cargo-lambda-new",
+ "cargo-lambda-watch",
+ "cargo-test-macro",
+ "cargo-test-support",
+ "clap",
+ "clap-cargo",
+ "dunce",
+ "miette 5.10.0",
+ "snapbox",
+ "strum",
+ "strum_macros",
+ "tokio",
+ "tracing",
+ "tracing-subscriber",
+ "uuid",
+ "zip",
+]
+
+[[package]]
+name = "cargo-lambda-build"
+version = "1.0.1"
+dependencies = [
+ "cargo-lambda-interactive",
+ "cargo-lambda-metadata",
+ "cargo-options",
+ "cargo-zigbuild",
+ "clap",
+ "home",
+ "miette 5.10.0",
+ "object 0.28.4",
+ "rustc_version",
+ "serde",
+ "serde_json",
+ "sha2",
+ "strum",
+ "strum_macros",
+ "thiserror",
+ "tokio",
+ "toml 0.7.8",
+ "tracing",
+ "walkdir",
+ "which",
+ "zip",
+]
+
+[[package]]
+name = "cargo-lambda-deploy"
+version = "1.0.1"
+dependencies = [
+ "aws-sdk-iam",
+ "aws-sdk-s3",
+ "aws-sdk-sts",
+ "aws-smithy-types",
+ "cargo-lambda-build",
+ "cargo-lambda-interactive",
+ "cargo-lambda-metadata",
+ "cargo-lambda-remote",
+ "clap",
+ "miette 5.10.0",
+ "serde",
+ "serde_json",
+ "strum",
+ "strum_macros",
+ "tokio",
+ "tracing",
+ "uuid",
+]
+
+[[package]]
+name = "cargo-lambda-interactive"
+version = "1.0.1"
+dependencies = [
+ "indicatif",
+ "inquire",
+ "is-terminal",
+ "miette 5.10.0",
+ "tokio",
+]
+
+[[package]]
+name = "cargo-lambda-invoke"
+version = "1.0.1"
+dependencies = [
+ "base64 0.21.5",
+ "cargo-lambda-remote",
+ "clap",
+ "dirs 4.0.0",
+ "miette 5.10.0",
+ "reqwest",
+ "serde",
+ "serde_json",
+ "strum",
+ "strum_macros",
+ "thiserror",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "cargo-lambda-metadata"
+version = "1.0.1"
+dependencies = [
+ "aws-sdk-lambda",
+ "cargo_metadata 0.15.4",
+ "clap",
+ "env-file-reader",
+ "miette 4.7.1",
+ "remove_dir_all",
+ "serde",
+ "serde_json",
+ "strum",
+ "strum_macros",
+ "thiserror",
+ "toml 0.8.8",
+ "tracing",
+ "urlencoding",
+]
+
+[[package]]
+name = "cargo-lambda-new"
+version = "1.0.1"
+dependencies = [
+ "cargo-lambda-interactive",
+ "cargo-lambda-metadata",
+ "clap",
+ "dunce",
+ "liquid",
+ "miette 5.10.0",
+ "regex",
+ "reqwest",
+ "strum",
+ "strum_macros",
+ "tempfile",
+ "thiserror",
+ "tracing",
+ "walkdir",
+ "zip",
+]
+
+[[package]]
+name = "cargo-lambda-remote"
+version = "1.0.1"
+dependencies = [
+ "aws-config",
+ "aws-credential-types",
+ "aws-sdk-lambda",
+ "aws-types",
+ "clap",
+ "tokio",
+]
+
+[[package]]
+name = "cargo-lambda-watch"
+version = "1.0.1"
+dependencies = [
+ "aws_lambda_events",
+ "axum",
+ "base64 0.21.5",
+ "cargo-lambda-invoke",
+ "cargo-lambda-metadata",
+ "chrono",
+ "clap",
+ "dunce",
+ "http-api-problem",
+ "http-serde",
+ "hyper",
+ "ignore-files",
+ "miette 5.10.0",
+ "opentelemetry",
+ "opentelemetry-aws",
+ "query_map",
+ "reqwest",
+ "serde",
+ "serde_json",
+ "tempfile",
+ "thiserror",
+ "tokio",
+ "tokio-graceful-shutdown",
+ "tower-http",
+ "tracing",
+ "tracing-opentelemetry",
+ "tracing-subscriber",
+ "uuid",
+ "watchexec",
+ "watchexec-filterer-ignore",
+]
+
+[[package]]
+name = "cargo-options"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b8e8daa6b2b84aa7cccd57317d9a9b36d969d75bb95923471f4eabbd36f2955"
+dependencies = [
+ "clap",
+]
+
+[[package]]
+name = "cargo-platform"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12024c4645c97566567129c204f65d5815a8c9aecf30fcbe682b2fe034996d36"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "cargo-test-macro"
+version = "0.1.0"
+source = "git+https://github.com/rust-lang/cargo#6354bb3d813335731838fd7dce2010d040cc2545"
+
+[[package]]
+name = "cargo-test-support"
+version = "0.1.0"
+source = "git+https://github.com/rust-lang/cargo#6354bb3d813335731838fd7dce2010d040cc2545"
+dependencies = [
+ "anstream",
+ "anstyle",
+ "anyhow",
+ "cargo-test-macro",
+ "cargo-util",
+ "crates-io",
+ "filetime",
+ "flate2",
+ "git2",
+ "glob",
+ "itertools 0.11.0",
+ "pasetors",
+ "serde",
+ "serde_json",
+ "snapbox",
+ "tar",
+ "time",
+ "toml 0.8.8",
+ "url",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "cargo-util"
+version = "0.2.8"
+source = "git+https://github.com/rust-lang/cargo#6354bb3d813335731838fd7dce2010d040cc2545"
+dependencies = [
+ "anyhow",
+ "core-foundation",
+ "filetime",
+ "hex",
+ "jobserver",
+ "libc",
+ "miow",
+ "same-file",
+ "sha2",
+ "shell-escape",
+ "tempfile",
+ "tracing",
+ "walkdir",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "cargo-zigbuild"
+version = "0.17.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5166694ea85c72f887293af72a665d7ac5a537649e607773bf834cb6303b1da"
+dependencies = [
+ "anyhow",
+ "cargo-options",
+ "cargo_metadata 0.18.1",
+ "clap",
+ "dirs 5.0.1",
+ "fat-macho",
+ "fs-err",
+ "path-slash",
+ "rustc_version",
+ "semver",
+ "serde",
+ "serde_json",
+ "shlex",
+ "target-lexicon",
+ "which",
+]
+
+[[package]]
+name = "cargo_metadata"
+version = "0.15.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eee4243f1f26fc7a42710e7439c149e2b10b05472f88090acce52632f231a73a"
+dependencies = [
+ "camino",
+ "cargo-platform",
+ "semver",
+ "serde",
+ "serde_json",
+ "thiserror",
+]
+
+[[package]]
+name = "cargo_metadata"
+version = "0.18.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037"
+dependencies = [
+ "camino",
+ "cargo-platform",
+ "semver",
+ "serde",
+ "serde_json",
+ "thiserror",
+]
+
+[[package]]
+name = "cc"
+version = "1.0.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
+dependencies = [
+ "jobserver",
+ "libc",
+]
+
+[[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.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38"
+dependencies = [
+ "android-tzdata",
+ "iana-time-zone",
+ "js-sys",
+ "num-traits",
+ "serde",
+ "wasm-bindgen",
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "cipher"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad"
+dependencies = [
+ "crypto-common",
+ "inout",
+]
+
+[[package]]
+name = "clap"
+version = "4.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac495e00dcec98c83465d5ad66c5c4fabd652fd6686e7c6269b117e729a6f17b"
+dependencies = [
+ "clap_builder",
+ "clap_derive",
+]
+
+[[package]]
+name = "clap-cargo"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "383f21342a464d4af96e9a4cad22a0b4f2880d4a5b3bbf5c9654dd1d9a224ee4"
+dependencies = [
+ "anstyle",
+ "clap",
+]
+
+[[package]]
+name = "clap_builder"
+version = "4.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c77ed9a32a62e6ca27175d00d29d05ca32e396ea1eb5fb01d8256b669cec7663"
+dependencies = [
+ "anstream",
+ "anstyle",
+ "clap_lex",
+ "strsim",
+ "terminal_size 0.3.0",
+]
+
+[[package]]
+name = "clap_derive"
+version = "4.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1"
+
+[[package]]
+name = "clearscreen"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72f3f22f1a586604e62efd23f78218f3ccdecf7a33c4500db2d37d85a24fe994"
+dependencies = [
+ "nix",
+ "terminfo",
+ "thiserror",
+ "which",
+ "winapi",
+]
+
+[[package]]
+name = "colorchoice"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
+
+[[package]]
+name = "command-group"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5080df6b0f0ecb76cab30808f00d937ba725cebe266a3da8cd89dff92f2a9916"
+dependencies = [
+ "async-trait",
+ "nix",
+ "tokio",
+ "winapi",
+]
+
+[[package]]
+name = "console"
+version = "0.15.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c926e00cc70edefdc64d3a5ff31cc65bb97a3460097762bd23afb4d8145fccf8"
+dependencies = [
+ "encode_unicode",
+ "lazy_static",
+ "libc",
+ "unicode-width",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "const-oid"
+version = "0.9.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28c122c3980598d243d63d9a704629a2d748d101f278052ff068be5a4423ab6f"
+
+[[package]]
+name = "constant_time_eq"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc"
+
+[[package]]
+name = "content_inspector"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7bda66e858c683005a53a9a60c69a4aca7eeaa45d124526e389f7aec8e62f38"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "core-foundation"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce420fe07aecd3e67c5f910618fe65e94158f6dcc0adf44e00d69ce2bdfe0fd0"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crates-io"
+version = "0.39.1"
+source = "git+https://github.com/rust-lang/cargo#6354bb3d813335731838fd7dce2010d040cc2545"
+dependencies = [
+ "curl",
+ "percent-encoding",
+ "serde",
+ "serde_json",
+ "thiserror",
+ "url",
+]
+
+[[package]]
+name = "crc32c"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8f48d60e5b4d2c53d5c2b1d8a58c849a70ae5e5509b08a48d047e3b65714a74"
+dependencies = [
+ "rustc_version",
+]
+
+[[package]]
+name = "crc32fast"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200"
+dependencies = [
+ "cfg-if",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
+dependencies = [
+ "cfg-if",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7"
+dependencies = [
+ "autocfg",
+ "cfg-if",
+ "crossbeam-utils",
+ "memoffset 0.9.0",
+ "scopeguard",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "crossterm"
+version = "0.25.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e64e6c0fbe2c17357405f7c758c1ef960fce08bdfb2c03d88d2a18d7e09c4b67"
+dependencies = [
+ "bitflags 1.3.2",
+ "crossterm_winapi",
+ "libc",
+ "mio",
+ "parking_lot",
+ "signal-hook",
+ "signal-hook-mio",
+ "winapi",
+]
+
+[[package]]
+name = "crossterm_winapi"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "crunchy"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7"
+
+[[package]]
+name = "crypto-bigint"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef"
+dependencies = [
+ "generic-array",
+ "rand_core",
+ "subtle",
+ "zeroize",
+]
+
+[[package]]
+name = "crypto-bigint"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "740fe28e594155f10cfc383984cbefd529d7396050557148f79cb0f621204124"
+dependencies = [
+ "generic-array",
+ "rand_core",
+ "subtle",
+ "zeroize",
+]
+
+[[package]]
+name = "crypto-common"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+dependencies = [
+ "generic-array",
+ "typenum",
+]
+
+[[package]]
+name = "ct-codecs"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3b7eb4404b8195a9abb6356f4ac07d8ba267045c8d6d220ac4dc992e6cc75df"
+
+[[package]]
+name = "curl"
+version = "0.4.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "509bd11746c7ac09ebd19f0b17782eae80aadee26237658a6b4808afb5c11a22"
+dependencies = [
+ "curl-sys",
+ "libc",
+ "openssl-probe",
+ "openssl-sys",
+ "schannel",
+ "socket2 0.4.10",
+ "winapi",
+]
+
+[[package]]
+name = "curl-sys"
+version = "0.4.68+curl-8.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4a0d18d88360e374b16b2273c832b5e57258ffc1d4aa4f96b108e0738d5752f"
+dependencies = [
+ "cc",
+ "libc",
+ "libz-sys",
+ "openssl-sys",
+ "pkg-config",
+ "vcpkg",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "der"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1a467a65c5e759bce6e65eaf91cc29f466cdc57cb65777bd646872a8a1fd4de"
+dependencies = [
+ "const-oid",
+ "zeroize",
+]
+
+[[package]]
+name = "der"
+version = "0.7.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fffa369a668c8af7dbf8b5e56c9f744fbd399949ed171606040001947de40b1c"
+dependencies = [
+ "const-oid",
+ "pem-rfc7468",
+ "zeroize",
+]
+
+[[package]]
+name = "deranged"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f32d04922c60427da6f9fef14d042d9edddef64cb9d4ce0d64d0685fbeb1fd3"
+dependencies = [
+ "powerfmt",
+ "serde",
+]
+
+[[package]]
+name = "diff"
+version = "0.1.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8"
+
+[[package]]
+name = "digest"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
+dependencies = [
+ "block-buffer",
+ "const-oid",
+ "crypto-common",
+ "subtle",
+]
+
+[[package]]
+name = "dirs"
+version = "4.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059"
+dependencies = [
+ "dirs-sys 0.3.7",
+]
+
+[[package]]
+name = "dirs"
+version = "5.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225"
+dependencies = [
+ "dirs-sys 0.4.1",
+]
+
+[[package]]
+name = "dirs-next"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1"
+dependencies = [
+ "cfg-if",
+ "dirs-sys-next",
+]
+
+[[package]]
+name = "dirs-sys"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6"
+dependencies = [
+ "libc",
+ "redox_users",
+ "winapi",
+]
+
+[[package]]
+name = "dirs-sys"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c"
+dependencies = [
+ "libc",
+ "option-ext",
+ "redox_users",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "dirs-sys-next"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d"
+dependencies = [
+ "libc",
+ "redox_users",
+ "winapi",
+]
+
+[[package]]
+name = "doc-comment"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10"
+
+[[package]]
+name = "dunce"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b"
+
+[[package]]
+name = "dyn-clone"
+version = "1.0.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23d2f3407d9a573d666de4b5bdf10569d73ca9478087346697dcbae6244bfbcd"
+
+[[package]]
+name = "ecdsa"
+version = "0.14.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "413301934810f597c1d19ca71c8710e99a3f1ba28a0d2ebc01551a2daeea3c5c"
+dependencies = [
+ "der 0.6.1",
+ "elliptic-curve 0.12.3",
+ "rfc6979 0.3.1",
+ "signature 1.6.4",
+]
+
+[[package]]
+name = "ecdsa"
+version = "0.16.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4b1e0c257a9e9f25f90ff76d7a68360ed497ee519c8e428d1825ef0000799d4"
+dependencies = [
+ "der 0.7.8",
+ "digest",
+ "elliptic-curve 0.13.6",
+ "rfc6979 0.4.0",
+ "signature 2.1.0",
+ "spki 0.7.2",
+]
+
+[[package]]
+name = "ed25519-compact"
+version = "2.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a3d382e8464107391c8706b4c14b087808ecb909f6c15c34114bc42e53a9e4c"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "either"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
+
+[[package]]
+name = "elliptic-curve"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7bb888ab5300a19b8e5bceef25ac745ad065f3c9f7efc6de1b91958110891d3"
+dependencies = [
+ "base16ct 0.1.1",
+ "crypto-bigint 0.4.9",
+ "der 0.6.1",
+ "digest",
+ "ff 0.12.1",
+ "generic-array",
+ "group 0.12.1",
+ "pkcs8 0.9.0",
+ "rand_core",
+ "sec1 0.3.0",
+ "subtle",
+ "zeroize",
+]
+
+[[package]]
+name = "elliptic-curve"
+version = "0.13.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d97ca172ae9dc9f9b779a6e3a65d308f2af74e5b8c921299075bdb4a0370e914"
+dependencies = [
+ "base16ct 0.2.0",
+ "crypto-bigint 0.5.3",
+ "digest",
+ "ff 0.13.0",
+ "generic-array",
+ "group 0.13.0",
+ "hkdf",
+ "pem-rfc7468",
+ "pkcs8 0.10.2",
+ "rand_core",
+ "sec1 0.7.3",
+ "subtle",
+ "zeroize",
+]
+
+[[package]]
+name = "ena"
+version = "0.14.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c533630cf40e9caa44bd91aadc88a75d75a4c3a12b4cfde353cbed41daa1e1f1"
+dependencies = [
+ "log",
+]
+
+[[package]]
+name = "encode_unicode"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
+
+[[package]]
+name = "encoding_rs"
+version = "0.8.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "env-file-reader"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0a86dcbc0fd1a07f5c318a2215338f0c870336851e8b566ebef1576eddb3728"
+dependencies = [
+ "lalrpop",
+ "lalrpop-util",
+ "logos",
+]
+
+[[package]]
+name = "equivalent"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
+
+[[package]]
+name = "errno"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3e13f66a2f95e32a39eaa81f6b95d42878ca0e1db0c7543723dfe12557e860"
+dependencies = [
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "event-listener"
+version = "2.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0"
+
+[[package]]
+name = "fastrand"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5"
+
+[[package]]
+name = "fat-macho"
+version = "0.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "63fa117c7dcabeb8c83d5c229764cfa46518545d2dba5a9a08912014711f997b"
+dependencies = [
+ "goblin",
+]
+
+[[package]]
+name = "ff"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160"
+dependencies = [
+ "rand_core",
+ "subtle",
+]
+
+[[package]]
+name = "ff"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449"
+dependencies = [
+ "rand_core",
+ "subtle",
+]
+
+[[package]]
+name = "fiat-crypto"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a481586acf778f1b1455424c343f71124b048ffa5f4fc3f8f6ae9dc432dcb3c7"
+
+[[package]]
+name = "filetime"
+version = "0.2.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4029edd3e734da6fe05b6cd7bd2960760a616bd2ddd0d59a0124746d6272af0"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall 0.3.5",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "fixedbitset"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80"
+
+[[package]]
+name = "flate2"
+version = "1.0.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e"
+dependencies = [
+ "crc32fast",
+ "libz-sys",
+ "miniz_oxide",
+]
+
+[[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.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "fs-err"
+version = "2.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0845fa252299212f0389d64ba26f34fa32cfe41588355f21ed507c59a0f64541"
+
+[[package]]
+name = "fsevent-sys"
+version = "4.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76ee7a02da4d231650c7cea31349b889be2f45ddb3ef3032d2ec8185f6313fd2"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "futures"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da0290714b38af9b4a7b094b8a37086d1b4e61f2df9122c3cad2577669145335"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-io",
+ "futures-sink",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff4dd66668b557604244583e3e1e1eada8c5c2e96a6d0d6653ede395b78bbacb"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c"
+
+[[package]]
+name = "futures-executor"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f4fb8693db0cf099eadcca0efe2a5a22e4550f98ed16aba6c48700da29597bc"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-io"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa"
+
+[[package]]
+name = "futures-macro"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53b153fd91e4b0147f4aced87be237c98248656bb01050b96bf3ee89220a8ddb"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e36d3378ee38c2a36ad710c5d30c2911d752cb941c00c72dbabfb786a7970817"
+
+[[package]]
+name = "futures-task"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2"
+
+[[package]]
+name = "futures-util"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-macro",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+dependencies = [
+ "typenum",
+ "version_check",
+ "zeroize",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "libc",
+ "wasi",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "gimli"
+version = "0.28.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0"
+
+[[package]]
+name = "git2"
+version = "0.18.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fbf97ba92db08df386e10c8ede66a2a0369bd277090afd8710e19e38de9ec0cd"
+dependencies = [
+ "bitflags 2.4.1",
+ "libc",
+ "libgit2-sys",
+ "log",
+ "openssl-probe",
+ "openssl-sys",
+ "url",
+]
+
+[[package]]
+name = "gix-actor"
+version = "0.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc22b0cdc52237667c301dd7cdc6ead8f8f73c9f824e9942c8ebd6b764f6c0bf"
+dependencies = [
+ "bstr",
+ "btoi",
+ "gix-date",
+ "itoa",
+ "nom",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-config"
+version = "0.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6aa7d7dd60256b7a0c0506a1d708ec92767c2662ee57b3301b538eaa3e064f8a"
+dependencies = [
+ "bstr",
+ "gix-config-value",
+ "gix-features 0.28.1",
+ "gix-glob",
+ "gix-path",
+ "gix-ref",
+ "gix-sec",
+ "memchr",
+ "nom",
+ "once_cell",
+ "smallvec",
+ "thiserror",
+ "unicode-bom",
+]
+
+[[package]]
+name = "gix-config-value"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d09154c0c8677e4da0ec35e896f56ee3e338e741b9599fae06075edd83a4081c"
+dependencies = [
+ "bitflags 1.3.2",
+ "bstr",
+ "gix-path",
+ "libc",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-date"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b96271912ce39822501616f177dea7218784e6c63be90d5f36322ff3a722aae2"
+dependencies = [
+ "bstr",
+ "itoa",
+ "thiserror",
+ "time",
+]
+
+[[package]]
+name = "gix-features"
+version = "0.28.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b76f9a80f6dd7be66442ae86e1f534effad9546676a392acc95e269d0c21c22"
+dependencies = [
+ "gix-hash 0.10.4",
+ "libc",
+ "sha1_smol",
+ "walkdir",
+]
+
+[[package]]
+name = "gix-features"
+version = "0.29.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf69b0f5c701cc3ae22d3204b671907668f6437ca88862d355eaf9bc47a4f897"
+dependencies = [
+ "gix-hash 0.11.4",
+ "libc",
+]
+
+[[package]]
+name = "gix-fs"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b37a1832f691fdc09910bd267f9a2e413737c1f9ec68c6e31f9e802616278a9"
+dependencies = [
+ "gix-features 0.29.0",
+]
+
+[[package]]
+name = "gix-glob"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93e43efd776bc543f46f0fd0ca3d920c37af71a764a16f2aebd89765e9ff2993"
+dependencies = [
+ "bitflags 1.3.2",
+ "bstr",
+]
+
+[[package]]
+name = "gix-hash"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a258595457bc192d1f1c59d0d168a1e34e2be9b97a614e14995416185de41a7"
+dependencies = [
+ "hex",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-hash"
+version = "0.11.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b422ff2ad9a0628baaad6da468cf05385bf3f5ab495ad5a33cce99b9f41092f"
+dependencies = [
+ "hex",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-lock"
+version = "5.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c693d7f05730fa74a7c467150adc7cea393518410c65f0672f80226b8111555"
+dependencies = [
+ "gix-tempfile",
+ "gix-utils",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-object"
+version = "0.28.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8df068db9180ee935fbb70504848369e270bdcb576b05c0faa8b9fd3b86fc017"
+dependencies = [
+ "bstr",
+ "btoi",
+ "gix-actor",
+ "gix-features 0.28.1",
+ "gix-hash 0.10.4",
+ "gix-validate",
+ "hex",
+ "itoa",
+ "nom",
+ "smallvec",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-path"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "32370dce200bb951df013e03dff35b4233fc7a89458642b047629b91734a7e19"
+dependencies = [
+ "bstr",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-ref"
+version = "0.27.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e4e909396ed3b176823991ccc391c276ae2a015e54edaafa3566d35123cfac9d"
+dependencies = [
+ "gix-actor",
+ "gix-features 0.28.1",
+ "gix-hash 0.10.4",
+ "gix-lock",
+ "gix-object",
+ "gix-path",
+ "gix-tempfile",
+ "gix-validate",
+ "memmap2",
+ "nom",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-sec"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e8ffa5bf0772f9b01de501c035b6b084cf9b8bb07dec41e3afc6a17336a65f47"
+dependencies = [
+ "bitflags 1.3.2",
+ "dirs 4.0.0",
+ "gix-path",
+ "libc",
+ "windows",
+]
+
+[[package]]
+name = "gix-tempfile"
+version = "5.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d71a0d32f34e71e86586124225caefd78dabc605d0486de580d717653addf182"
+dependencies = [
+ "gix-fs",
+ "libc",
+ "once_cell",
+ "parking_lot",
+ "tempfile",
+]
+
+[[package]]
+name = "gix-utils"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b85d89dc728613e26e0ed952a19583744e7f5240fcd4aa30d6c824ffd8b52f0f"
+dependencies = [
+ "fastrand",
+]
+
+[[package]]
+name = "gix-validate"
+version = "0.7.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba9b3737b2cef3dcd014633485f0034b0f1a931ee54aeb7d8f87f177f3c89040"
+dependencies = [
+ "bstr",
+ "thiserror",
+]
+
+[[package]]
+name = "glob"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
+
+[[package]]
+name = "globset"
+version = "0.4.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "759c97c1e17c55525b57192c06a267cda0ac5210b222d6b82189a2338fa1c13d"
+dependencies = [
+ "aho-corasick",
+ "bstr",
+ "fnv",
+ "log",
+ "regex",
+]
+
+[[package]]
+name = "goblin"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f27c1b4369c2cd341b5de549380158b105a04c331be5db9110eef7b6d2742134"
+dependencies = [
+ "log",
+ "plain",
+ "scroll",
+]
+
+[[package]]
+name = "group"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7"
+dependencies = [
+ "ff 0.12.1",
+ "rand_core",
+ "subtle",
+]
+
+[[package]]
+name = "group"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63"
+dependencies = [
+ "ff 0.13.0",
+ "rand_core",
+ "subtle",
+]
+
+[[package]]
+name = "h2"
+version = "0.3.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91fc23aa11be92976ef4729127f1a74adf36d8436f7816b185d18df956790833"
+dependencies = [
+ "bytes",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "http",
+ "indexmap 1.9.3",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tracing",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+
+[[package]]
+name = "hashbrown"
+version = "0.14.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f93e7192158dbcda357bdec5fb5788eebf8bbac027f3f33e719d29135ae84156"
+
+[[package]]
+name = "heck"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7"
+
+[[package]]
+name = "hex"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
+
+[[package]]
+name = "hkdf"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "791a029f6b9fc27657f6f188ec6e5e43f6911f6f878e0dc5501396e09809d437"
+dependencies = [
+ "hmac",
+]
+
+[[package]]
+name = "hmac"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
+dependencies = [
+ "digest",
+]
+
+[[package]]
+name = "home"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb"
+dependencies = [
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "http"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482"
+dependencies = [
+ "bytes",
+ "fnv",
+ "itoa",
+]
+
+[[package]]
+name = "http-api-problem"
+version = "0.51.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d43e8970113f6e4a9138e6cd57b20de3ed99585cab427eb99d27a440827dbe2"
+dependencies = [
+ "http",
+ "hyper",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "http-body"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
+dependencies = [
+ "bytes",
+ "http",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "http-range-header"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "add0ab9360ddbd88cfeb3bd9574a1d85cfdfa14db10b3e21d3700dbc4328758f"
+
+[[package]]
+name = "http-serde"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f560b665ad9f1572cfcaf034f7fb84338a7ce945216d64a90fd81f046a3caee"
+dependencies = [
+ "http",
+ "serde",
+]
+
+[[package]]
+name = "httparse"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
+
+[[package]]
+name = "httpdate"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
+
+[[package]]
+name = "hyper"
+version = "0.14.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468"
+dependencies = [
+ "bytes",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "httparse",
+ "httpdate",
+ "itoa",
+ "pin-project-lite",
+ "socket2 0.4.10",
+ "tokio",
+ "tower-service",
+ "tracing",
+ "want",
+]
+
+[[package]]
+name = "hyper-rustls"
+version = "0.24.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590"
+dependencies = [
+ "futures-util",
+ "http",
+ "hyper",
+ "log",
+ "rustls",
+ "rustls-native-certs",
+ "tokio",
+ "tokio-rustls",
+]
+
+[[package]]
+name = "iana-time-zone"
+version = "0.1.58"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8326b86b6cff230b97d0d312a6c40a60726df3332e721f72a1b035f451663b20"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys",
+ "iana-time-zone-haiku",
+ "js-sys",
+ "wasm-bindgen",
+ "windows-core",
+]
+
+[[package]]
+name = "iana-time-zone-haiku"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "idna"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "ignore"
+version = "0.4.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dbe7873dab538a9a44ad79ede1faf5f30d49f9a5c883ddbab48bce81b64b7492"
+dependencies = [
+ "globset",
+ "lazy_static",
+ "log",
+ "memchr",
+ "regex",
+ "same-file",
+ "thread_local",
+ "walkdir",
+ "winapi-util",
+]
+
+[[package]]
+name = "ignore-files"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd03122ad769f36d57fdedd1e60bded885a8d277a38b0d1b5ea0e11ef642f593"
+dependencies = [
+ "futures",
+ "gix-config",
+ "ignore",
+ "miette 5.10.0",
+ "project-origins",
+ "thiserror",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
+dependencies = [
+ "autocfg",
+ "hashbrown 0.12.3",
+]
+
+[[package]]
+name = "indexmap"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f"
+dependencies = [
+ "equivalent",
+ "hashbrown 0.14.2",
+]
+
+[[package]]
+name = "indicatif"
+version = "0.17.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb28741c9db9a713d93deb3bb9515c20788cef5815265bee4980e87bde7e0f25"
+dependencies = [
+ "console",
+ "instant",
+ "number_prefix",
+ "portable-atomic",
+ "unicode-width",
+]
+
+[[package]]
+name = "inotify"
+version = "0.9.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8069d3ec154eb856955c1c0fbffefbf5f3c40a104ec912d4797314c1801abff"
+dependencies = [
+ "bitflags 1.3.2",
+ "inotify-sys",
+ "libc",
+]
+
+[[package]]
+name = "inotify-sys"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "inout"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "inquire"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3a94f0659efe59329832ba0452d3ec753145fc1fb12a8e1d60de4ccf99f5364"
+dependencies = [
+ "bitflags 1.3.2",
+ "crossterm",
+ "dyn-clone",
+ "lazy_static",
+ "newline-converter",
+ "thiserror",
+ "unicode-segmentation",
+ "unicode-width",
+]
+
+[[package]]
+name = "instant"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "ipnet"
+version = "2.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3"
+
+[[package]]
+name = "is-terminal"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b"
+dependencies = [
+ "hermit-abi",
+ "rustix",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "is_ci"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "616cde7c720bb2bb5824a224687d8f77bfd38922027f01d825cd7453be5099fb"
+
+[[package]]
+name = "itertools"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itertools"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
+
+[[package]]
+name = "jobserver"
+version = "0.1.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c37f63953c4c63420ed5fd3d6d398c719489b9f872b9fa683262f8edd363c7d"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "js-sys"
+version = "0.3.65"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54c0c35952f67de54bb584e9fd912b3023117cbafc0a77d8f3dee1fb5f572fe8"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "kqueue"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7447f1ca1b7b563588a205fe93dea8df60fd981423a768bc1c0ded35ed147d0c"
+dependencies = [
+ "kqueue-sys",
+ "libc",
+]
+
+[[package]]
+name = "kqueue-sys"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed9625ffda8729b85e45cf04090035ac368927b8cebc34898e7c120f52e4838b"
+dependencies = [
+ "bitflags 1.3.2",
+ "libc",
+]
+
+[[package]]
+name = "kstring"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec3066350882a1cd6d950d055997f379ac37fd39f81cd4d8ed186032eb3c5747"
+dependencies = [
+ "serde",
+ "static_assertions",
+]
+
+[[package]]
+name = "lalrpop"
+version = "0.19.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0a1cbf952127589f2851ab2046af368fd20645491bb4b376f04b7f94d7a9837b"
+dependencies = [
+ "ascii-canvas",
+ "bit-set",
+ "diff",
+ "ena",
+ "is-terminal",
+ "itertools 0.10.5",
+ "lalrpop-util",
+ "petgraph",
+ "regex",
+ "regex-syntax 0.6.29",
+ "string_cache",
+ "term",
+ "tiny-keccak",
+ "unicode-xid",
+]
+
+[[package]]
+name = "lalrpop-util"
+version = "0.19.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3c48237b9604c5a4702de6b824e02006c3214327564636aef27c1028a8fa0ed"
+dependencies = [
+ "regex",
+]
+
+[[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.149"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a08173bc88b7955d1b3145aa561539096c421ac8debde8cbc3612ec635fee29b"
+
+[[package]]
+name = "libgit2-sys"
+version = "0.16.1+1.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2a2bb3680b094add03bb3732ec520ece34da31a8cd2d633d1389d0f0fb60d0c"
+dependencies = [
+ "cc",
+ "libc",
+ "libssh2-sys",
+ "libz-sys",
+ "openssl-sys",
+ "pkg-config",
+]
+
+[[package]]
+name = "libssh2-sys"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dc8a030b787e2119a731f1951d6a773e2280c660f8ec4b0f5e1505a386e71ee"
+dependencies = [
+ "cc",
+ "libc",
+ "libz-sys",
+ "openssl-sys",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "libz-sys"
+version = "1.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d97137b25e321a73eef1418d1d5d2eda4d77e12813f8e6dead84bc52c5870a7b"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.4.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da2479e8c062e40bf0066ffa0bc823de0a9368974af99c9f6df941d2c231e03f"
+
+[[package]]
+name = "liquid"
+version = "0.26.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "69f68ae1011499ae2ef879f631891f21c78e309755f4a5e483c4a8f12e10b609"
+dependencies = [
+ "doc-comment",
+ "liquid-core",
+ "liquid-derive",
+ "liquid-lib",
+ "serde",
+]
+
+[[package]]
+name = "liquid-core"
+version = "0.26.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "79e0724dfcaad5cfb7965ea0f178ca0870b8d7315178f4a7179f5696f7f04d5f"
+dependencies = [
+ "anymap2",
+ "itertools 0.10.5",
+ "kstring",
+ "liquid-derive",
+ "num-traits",
+ "pest",
+ "pest_derive",
+ "regex",
+ "serde",
+ "time",
+]
+
+[[package]]
+name = "liquid-derive"
+version = "0.26.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc2fb41a9bb4257a3803154bdf7e2df7d45197d1941c9b1a90ad815231630721"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "liquid-lib"
+version = "0.26.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2a17e273a6fb1fb6268f7a5867ddfd0bd4683c7e19b51084f3d567fad4348c0"
+dependencies = [
+ "itertools 0.10.5",
+ "liquid-core",
+ "once_cell",
+ "percent-encoding",
+ "regex",
+ "time",
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "lock_api"
+version = "0.4.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45"
+dependencies = [
+ "autocfg",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
+
+[[package]]
+name = "logos"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf8b031682c67a8e3d5446840f9573eb7fe26efe7ec8d195c9ac4c0647c502f1"
+dependencies = [
+ "logos-derive",
+]
+
+[[package]]
+name = "logos-derive"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1d849148dbaf9661a6151d1ca82b13bb4c4c128146a88d05253b38d4e2f496c"
+dependencies = [
+ "beef",
+ "fnv",
+ "proc-macro2",
+ "quote",
+ "regex-syntax 0.6.29",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "matchers"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558"
+dependencies = [
+ "regex-automata 0.1.10",
+]
+
+[[package]]
+name = "matchit"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73cbba799671b762df5a175adf59ce145165747bb891505c43d09aefbbf38beb"
+
+[[package]]
+name = "md-5"
+version = "0.10.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf"
+dependencies = [
+ "cfg-if",
+ "digest",
+]
+
+[[package]]
+name = "memchr"
+version = "2.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167"
+
+[[package]]
+name = "memmap2"
+version = "0.5.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "memoffset"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "memoffset"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "miette"
+version = "4.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1c90329e44f9208b55f45711f9558cec15d7ef8295cc65ecd6d4188ae8edc58c"
+dependencies = [
+ "miette-derive 4.7.1",
+ "once_cell",
+ "thiserror",
+ "unicode-width",
+]
+
+[[package]]
+name = "miette"
+version = "5.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59bb584eaeeab6bd0226ccf3509a69d7936d148cf3d036ad350abe35e8c6856e"
+dependencies = [
+ "backtrace",
+ "backtrace-ext",
+ "is-terminal",
+ "miette-derive 5.10.0",
+ "once_cell",
+ "owo-colors",
+ "supports-color",
+ "supports-hyperlinks",
+ "supports-unicode",
+ "terminal_size 0.1.17",
+ "textwrap",
+ "thiserror",
+ "unicode-width",
+]
+
+[[package]]
+name = "miette-derive"
+version = "4.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b5bc45b761bcf1b5e6e6c4128cd93b84c218721a8d9b894aa0aff4ed180174c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "miette-derive"
+version = "5.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49e7bc1560b95a3c4a25d03de42fe76ca718ab92d1a22a55b9b4cf67b3ae635c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "mime"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
+
+[[package]]
+name = "minimal-lexical"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "mio"
+version = "0.8.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3dce281c5e46beae905d4de1870d8b1509a9142b62eedf18b443b011ca8343d0"
+dependencies = [
+ "libc",
+ "log",
+ "wasi",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "miow"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "359f76430b20a79f9e20e115b3428614e654f04fab314482fc0fda0ebd3c6044"
+dependencies = [
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "new_debug_unreachable"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54"
+
+[[package]]
+name = "newline-converter"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f71d09d5c87634207f894c6b31b6a2b2c64ea3bdcf71bd5599fdbbe1600c00f"
+dependencies = [
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "nix"
+version = "0.26.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b"
+dependencies = [
+ "bitflags 1.3.2",
+ "cfg-if",
+ "libc",
+ "memoffset 0.7.1",
+ "pin-utils",
+]
+
+[[package]]
+name = "nom"
+version = "7.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
+dependencies = [
+ "memchr",
+ "minimal-lexical",
+]
+
+[[package]]
+name = "normalize-line-endings"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be"
+
+[[package]]
+name = "normalize-path"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f5438dd2b2ff4c6df6e1ce22d825ed2fa93ee2922235cc45186991717f0a892d"
+
+[[package]]
+name = "notify"
+version = "5.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "729f63e1ca555a43fe3efa4f3efdf4801c479da85b432242a7b726f353c88486"
+dependencies = [
+ "bitflags 1.3.2",
+ "crossbeam-channel",
+ "filetime",
+ "fsevent-sys",
+ "inotify",
+ "kqueue",
+ "libc",
+ "mio",
+ "walkdir",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "nu-ansi-term"
+version = "0.46.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84"
+dependencies = [
+ "overload",
+ "winapi",
+]
+
+[[package]]
+name = "num-bigint"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[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-traits"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
+dependencies = [
+ "hermit-abi",
+ "libc",
+]
+
+[[package]]
+name = "num_threads"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "number_prefix"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3"
+
+[[package]]
+name = "object"
+version = "0.28.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e42c982f2d955fac81dd7e1d0e1426a7d702acd9c98d19ab01083a6a0328c424"
+dependencies = [
+ "flate2",
+ "memchr",
+]
+
+[[package]]
+name = "object"
+version = "0.32.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
+
+[[package]]
+name = "openssl-probe"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
+
+[[package]]
+name = "openssl-sys"
+version = "0.9.94"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2f55da20b29f956fb01f0add8683eb26ee13ebe3ebd935e49898717c6b4b2830"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "opentelemetry"
+version = "0.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6105e89802af13fdf48c49d7646d3b533a70e536d818aae7e78ba0433d01acb8"
+dependencies = [
+ "async-trait",
+ "crossbeam-channel",
+ "futures-channel",
+ "futures-executor",
+ "futures-util",
+ "js-sys",
+ "lazy_static",
+ "percent-encoding",
+ "pin-project",
+ "rand",
+ "thiserror",
+]
+
+[[package]]
+name = "opentelemetry-aws"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72f80ed72cb487ccee5de9e6342e7240ce233a506071e0d07fd535981688342e"
+dependencies = [
+ "lazy_static",
+ "opentelemetry",
+]
+
+[[package]]
+name = "option-ext"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d"
+
+[[package]]
+name = "orion"
+version = "0.17.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7abdb10181903c8c4b016ba45d6d6d5af1a1e2a461aa4763a83b87f5df4695e5"
+dependencies = [
+ "fiat-crypto",
+ "subtle",
+ "zeroize",
+]
+
+[[package]]
+name = "os_pipe"
+version = "1.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ae859aa07428ca9a929b936690f8b12dc5f11dd8c6992a18ca93919f28bc177"
+dependencies = [
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "outref"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4030760ffd992bef45b0ae3f10ce1aba99e33464c90d14dd7c039884963ddc7a"
+
+[[package]]
+name = "overload"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
+
+[[package]]
+name = "owo-colors"
+version = "3.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f"
+
+[[package]]
+name = "p256"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "51f44edd08f51e2ade572f141051021c5af22677e42b7dd28a88155151c33594"
+dependencies = [
+ "ecdsa 0.14.8",
+ "elliptic-curve 0.12.3",
+ "sha2",
+]
+
+[[package]]
+name = "p384"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70786f51bcc69f6a4c0360e063a4cac5419ef7c5cd5b3c99ad70f3be5ba79209"
+dependencies = [
+ "ecdsa 0.16.8",
+ "elliptic-curve 0.13.6",
+ "primeorder",
+ "sha2",
+]
+
+[[package]]
+name = "parking_lot"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+dependencies = [
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall 0.4.1",
+ "smallvec",
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "pasetors"
+version = "0.6.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba765699a309908d55950919a3445e9491453e89b2587b1b2abe4143a48894c0"
+dependencies = [
+ "ct-codecs",
+ "ed25519-compact",
+ "getrandom",
+ "orion",
+ "p384",
+ "rand_core",
+ "regex",
+ "serde",
+ "serde_json",
+ "sha2",
+ "subtle",
+ "time",
+ "zeroize",
+]
+
+[[package]]
+name = "password-hash"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7676374caaee8a325c9e7a2ae557f216c5563a171d6997b0ef8a65af35147700"
+dependencies = [
+ "base64ct",
+ "rand_core",
+ "subtle",
+]
+
+[[package]]
+name = "path-slash"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e91099d4268b0e11973f036e885d652fb0b21fedcf69738c627f94db6a44f42"
+
+[[package]]
+name = "pbkdf2"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917"
+dependencies = [
+ "digest",
+ "hmac",
+ "password-hash",
+ "sha2",
+]
+
+[[package]]
+name = "pem-rfc7468"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412"
+dependencies = [
+ "base64ct",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94"
+
+[[package]]
+name = "pest"
+version = "2.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae9cee2a55a544be8b89dc6848072af97a20f2422603c10865be2a42b580fff5"
+dependencies = [
+ "memchr",
+ "thiserror",
+ "ucd-trie",
+]
+
+[[package]]
+name = "pest_derive"
+version = "2.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81d78524685f5ef2a3b3bd1cafbc9fcabb036253d9b1463e726a91cd16e2dfc2"
+dependencies = [
+ "pest",
+ "pest_generator",
+]
+
+[[package]]
+name = "pest_generator"
+version = "2.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68bd1206e71118b5356dae5ddc61c8b11e28b09ef6a31acbd15ea48a28e0c227"
+dependencies = [
+ "pest",
+ "pest_meta",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "pest_meta"
+version = "2.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7c747191d4ad9e4a4ab9c8798f1e82a39affe7ef9648390b7e5548d18e099de6"
+dependencies = [
+ "once_cell",
+ "pest",
+ "sha2",
+]
+
+[[package]]
+name = "petgraph"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9"
+dependencies = [
+ "fixedbitset",
+ "indexmap 2.1.0",
+]
+
+[[package]]
+name = "phf"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc"
+dependencies = [
+ "phf_shared 0.11.2",
+]
+
+[[package]]
+name = "phf_codegen"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e8d39688d359e6b34654d328e262234662d16cc0f60ec8dcbe5e718709342a5a"
+dependencies = [
+ "phf_generator",
+ "phf_shared 0.11.2",
+]
+
+[[package]]
+name = "phf_generator"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0"
+dependencies = [
+ "phf_shared 0.11.2",
+ "rand",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096"
+dependencies = [
+ "siphasher",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b"
+dependencies = [
+ "siphasher",
+]
+
+[[package]]
+name = "pin-project"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422"
+dependencies = [
+ "pin-project-internal",
+]
+
+[[package]]
+name = "pin-project-internal"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "pkcs8"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9eca2c590a5f85da82668fa685c09ce2888b9430e83299debf1f34b65fd4a4ba"
+dependencies = [
+ "der 0.6.1",
+ "spki 0.6.0",
+]
+
+[[package]]
+name = "pkcs8"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7"
+dependencies = [
+ "der 0.7.8",
+ "spki 0.7.2",
+]
+
+[[package]]
+name = "pkg-config"
+version = "0.3.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
+
+[[package]]
+name = "plain"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6"
+
+[[package]]
+name = "portable-atomic"
+version = "1.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3bccab0e7fd7cc19f820a1c8c91720af652d0c88dc9664dd72aef2614f04af3b"
+
+[[package]]
+name = "powerfmt"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+
+[[package]]
+name = "precomputed-hash"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
+
+[[package]]
+name = "primeorder"
+version = "0.13.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c7dbe9ed3b56368bd99483eb32fe9c17fdd3730aebadc906918ce78d54c7eeb4"
+dependencies = [
+ "elliptic-curve 0.13.6",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "project-origins"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "629e0d57f265ca8238345cb616eea8847b8ecb86b5d97d155be2c8963a314379"
+dependencies = [
+ "futures",
+ "tokio",
+ "tokio-stream",
+]
+
+[[package]]
+name = "query_map"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fe3212d819cbdcce67f786cdaf3fe0c2e9d09a6dcd9c9367a1bd344135b8c809"
+dependencies = [
+ "form_urlencoded",
+ "serde",
+ "serde_derive",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
+dependencies = [
+ "proc-macro2",
+]
+
+[[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",
+]
+
+[[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",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "rayon"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1"
+dependencies = [
+ "either",
+ "rayon-core",
+]
+
+[[package]]
+name = "rayon-core"
+version = "1.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed"
+dependencies = [
+ "crossbeam-deque",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "redox_users"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b"
+dependencies = [
+ "getrandom",
+ "redox_syscall 0.2.16",
+ "thiserror",
+]
+
+[[package]]
+name = "regex"
+version = "1.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-automata 0.4.3",
+ "regex-syntax 0.8.2",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
+dependencies = [
+ "regex-syntax 0.6.29",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax 0.8.2",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
+
+[[package]]
+name = "regex-syntax"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
+
+[[package]]
+name = "remove_dir_all"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "882f368737489ea543bc5c340e6f3d34a28c39980bd9a979e47322b26f60ac40"
+dependencies = [
+ "libc",
+ "log",
+ "num_cpus",
+ "rayon",
+ "winapi",
+]
+
+[[package]]
+name = "reqwest"
+version = "0.11.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "046cd98826c46c2ac8ddecae268eb5c2e58628688a5fc7a2643704a73faba95b"
+dependencies = [
+ "base64 0.21.5",
+ "bytes",
+ "encoding_rs",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "hyper",
+ "hyper-rustls",
+ "ipnet",
+ "js-sys",
+ "log",
+ "mime",
+ "once_cell",
+ "percent-encoding",
+ "pin-project-lite",
+ "rustls",
+ "rustls-pemfile",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "system-configuration",
+ "tokio",
+ "tokio-rustls",
+ "tower-service",
+ "url",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+ "webpki-roots",
+ "winreg",
+]
+
+[[package]]
+name = "rfc6979"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7743f17af12fa0b03b803ba12cd6a8d9483a587e89c69445e3909655c0b9fabb"
+dependencies = [
+ "crypto-bigint 0.4.9",
+ "hmac",
+ "zeroize",
+]
+
+[[package]]
+name = "rfc6979"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2"
+dependencies = [
+ "hmac",
+ "subtle",
+]
+
+[[package]]
+name = "ring"
+version = "0.17.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb0205304757e5d899b9c2e448b867ffd03ae7f988002e47cd24954391394d0b"
+dependencies = [
+ "cc",
+ "getrandom",
+ "libc",
+ "spin",
+ "untrusted",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
+
+[[package]]
+name = "rustc_version"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
+dependencies = [
+ "semver",
+]
+
+[[package]]
+name = "rustix"
+version = "0.38.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b426b0506e5d50a7d8dafcf2e81471400deb602392c7dd110815afb4eaf02a3"
+dependencies = [
+ "bitflags 2.4.1",
+ "errno",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "rustls"
+version = "0.21.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "446e14c5cda4f3f30fe71863c34ec70f5ac79d6087097ad0bb433e1be5edf04c"
+dependencies = [
+ "log",
+ "ring",
+ "rustls-webpki",
+ "sct",
+]
+
+[[package]]
+name = "rustls-native-certs"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00"
+dependencies = [
+ "openssl-probe",
+ "rustls-pemfile",
+ "schannel",
+ "security-framework",
+]
+
+[[package]]
+name = "rustls-pemfile"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2"
+dependencies = [
+ "base64 0.21.5",
+]
+
+[[package]]
+name = "rustls-webpki"
+version = "0.101.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "rustversion"
+version = "1.0.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4"
+
+[[package]]
+name = "ryu"
+version = "1.0.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741"
+
+[[package]]
+name = "safe-lock"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "077d73db7973cccf63eb4aff1e5a34dc2459baa867512088269ea5f2f4253c90"
+
+[[package]]
+name = "safe-proc-macro2"
+version = "1.0.67"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fd85be67db87168aa3c13fd0da99f48f2ab005dccad5af5626138dc1df20eb6"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "safe-quote"
+version = "1.0.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77e530f7831f3feafcd5f1aae406ac205dd998436b4007c8e80f03eca78a88f7"
+dependencies = [
+ "safe-proc-macro2",
+]
+
+[[package]]
+name = "safe-regex"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a15289bf322e0673d52756a18194167f2378ec1a15fe884af6e2d2cb934822b0"
+dependencies = [
+ "safe-regex-macro",
+]
+
+[[package]]
+name = "safe-regex-compiler"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fba76fae590a2aa665279deb1f57b5098cbace01a0c5e60e262fcf55f7c51542"
+dependencies = [
+ "safe-proc-macro2",
+ "safe-quote",
+]
+
+[[package]]
+name = "safe-regex-macro"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96c2e96b5c03f158d1b16ba79af515137795f4ad4e8de3f790518aae91f1d127"
+dependencies = [
+ "safe-proc-macro2",
+ "safe-regex-compiler",
+]
+
+[[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 = "schannel"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88"
+dependencies = [
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "scopeguard"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+
+[[package]]
+name = "scroll"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04c565b551bafbef4157586fa379538366e4385d42082f255bfd96e4fe8519da"
+dependencies = [
+ "scroll_derive",
+]
+
+[[package]]
+name = "scroll_derive"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1db149f81d46d2deba7cd3c50772474707729550221e69588478ebf9ada425ae"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "sct"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "sec1"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928"
+dependencies = [
+ "base16ct 0.1.1",
+ "der 0.6.1",
+ "generic-array",
+ "pkcs8 0.9.0",
+ "subtle",
+ "zeroize",
+]
+
+[[package]]
+name = "sec1"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc"
+dependencies = [
+ "base16ct 0.2.0",
+ "der 0.7.8",
+ "generic-array",
+ "pkcs8 0.10.2",
+ "subtle",
+ "zeroize",
+]
+
+[[package]]
+name = "security-framework"
+version = "2.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de"
+dependencies = [
+ "bitflags 1.3.2",
+ "core-foundation",
+ "core-foundation-sys",
+ "libc",
+ "security-framework-sys",
+]
+
+[[package]]
+name = "security-framework-sys"
+version = "2.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "semver"
+version = "1.0.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.190"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91d3c334ca1ee894a2c6f6ad698fe8c435b76d504b13d436f0685d648d6d96f7"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.190"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67c5609f394e5c2bd7fc51efda478004ea80ef42fee983d5c67a65e34f32c0e3"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.108"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_spanned"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12022b835073e5b11e90a14f86838ceb1c8fb0325b72416845c487ac0fa95e80"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde_urlencoded"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
+dependencies = [
+ "form_urlencoded",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "sha1"
+version = "0.10.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "sha1_smol"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012"
+
+[[package]]
+name = "sha2"
+version = "0.10.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "sharded-slab"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6"
+dependencies = [
+ "lazy_static",
+]
+
+[[package]]
+name = "shell-escape"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "45bb67a18fa91266cc7807181f62f9178a6873bfad7dc788c42e6430db40184f"
+
+[[package]]
+name = "shlex"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a7cee0529a6d40f580e7a5e6c495c8fbfe21b7b52795ed4bb5e62cdf92bc6380"
+
+[[package]]
+name = "signal-hook"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801"
+dependencies = [
+ "libc",
+ "signal-hook-registry",
+]
+
+[[package]]
+name = "signal-hook-mio"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "29ad2e15f37ec9a6cc544097b78a1ec90001e9f71b81338ca39f430adaca99af"
+dependencies = [
+ "libc",
+ "mio",
+ "signal-hook",
+]
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "signature"
+version = "1.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c"
+dependencies = [
+ "digest",
+ "rand_core",
+]
+
+[[package]]
+name = "signature"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e1788eed21689f9cf370582dfc467ef36ed9c707f073528ddafa8d83e3b8500"
+dependencies = [
+ "digest",
+ "rand_core",
+]
+
+[[package]]
+name = "similar"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2aeaf503862c419d66959f5d7ca015337d864e9c49485d771b732e2a20453597"
+
+[[package]]
+name = "siphasher"
+version = "0.3.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d"
+
+[[package]]
+name = "slab"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "942b4a808e05215192e39f4ab80813e599068285906cc91aa64f923db842bd5a"
+
+[[package]]
+name = "smawk"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7c388c1b5e93756d0c740965c41e8822f866621d41acbdf6336a6a168f8840c"
+
+[[package]]
+name = "snapbox"
+version = "0.4.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b377c0b6e4715c116473d8e40d51e3fa5b0a2297ca9b2a931ba800667b259ed"
+dependencies = [
+ "anstream",
+ "anstyle",
+ "backtrace",
+ "content_inspector",
+ "dunce",
+ "filetime",
+ "libc",
+ "normalize-line-endings",
+ "os_pipe",
+ "similar",
+ "snapbox-macros",
+ "tempfile",
+ "wait-timeout",
+ "walkdir",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "snapbox-macros"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed1559baff8a696add3322b9be3e940d433e7bb4e38d79017205fd37ff28b28e"
+dependencies = [
+ "anstream",
+]
+
+[[package]]
+name = "socket2"
+version = "0.4.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "socket2"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9"
+dependencies = [
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "spin"
+version = "0.9.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
+
+[[package]]
+name = "spki"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67cf02bbac7a337dc36e4f5a693db6c21e7863f45070f7064577eb4367a3212b"
+dependencies = [
+ "base64ct",
+ "der 0.6.1",
+]
+
+[[package]]
+name = "spki"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d1e996ef02c474957d681f1b05213dfb0abab947b446a62d37770b23500184a"
+dependencies = [
+ "base64ct",
+ "der 0.7.8",
+]
+
+[[package]]
+name = "static_assertions"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+
+[[package]]
+name = "string_cache"
+version = "0.8.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b"
+dependencies = [
+ "new_debug_unreachable",
+ "once_cell",
+ "parking_lot",
+ "phf_shared 0.10.0",
+ "precomputed-hash",
+]
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "strum"
+version = "0.24.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f"
+
+[[package]]
+name = "strum_macros"
+version = "0.24.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "rustversion",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "subtle"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc"
+
+[[package]]
+name = "supports-color"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6398cde53adc3c4557306a96ce67b302968513830a77a95b2b17305d9719a89"
+dependencies = [
+ "is-terminal",
+ "is_ci",
+]
+
+[[package]]
+name = "supports-hyperlinks"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f84231692eb0d4d41e4cdd0cabfdd2e6cd9e255e65f80c9aa7c98dd502b4233d"
+dependencies = [
+ "is-terminal",
+]
+
+[[package]]
+name = "supports-unicode"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b6c2cb240ab5dd21ed4906895ee23fe5a48acdbd15a3ce388e7b62a9b66baf7"
+dependencies = [
+ "is-terminal",
+]
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e96b79aaa137db8f61e26363a0c9b47d8b4ec75da28b7d1d614c2303e232408b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "sync_wrapper"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160"
+
+[[package]]
+name = "system-configuration"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7"
+dependencies = [
+ "bitflags 1.3.2",
+ "core-foundation",
+ "system-configuration-sys",
+]
+
+[[package]]
+name = "system-configuration-sys"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "tar"
+version = "0.4.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b16afcea1f22891c49a00c751c7b63b2233284064f11a200fc624137c51e2ddb"
+dependencies = [
+ "filetime",
+ "libc",
+]
+
+[[package]]
+name = "target-lexicon"
+version = "0.12.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14c39fd04924ca3a864207c66fc2cd7d22d7c016007f9ce846cbb9326331930a"
+
+[[package]]
+name = "tempfile"
+version = "3.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5"
+dependencies = [
+ "cfg-if",
+ "fastrand",
+ "redox_syscall 0.4.1",
+ "rustix",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "term"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c59df8ac95d96ff9bede18eb7300b0fda5e5d8d90960e76f8e14ae765eedbf1f"
+dependencies = [
+ "dirs-next",
+ "rustversion",
+ "winapi",
+]
+
+[[package]]
+name = "terminal_size"
+version = "0.1.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "633c1a546cee861a1a6d0dc69ebeca693bf4296661ba7852b9d21d159e0506df"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "terminal_size"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21bebf2b7c9e0a515f6e0f8c51dc0f8e4696391e6f1ff30379559f8365fb0df7"
+dependencies = [
+ "rustix",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "terminfo"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "666cd3a6681775d22b200409aad3b089c5b99fb11ecdd8a204d9d62f8148498f"
+dependencies = [
+ "dirs 4.0.0",
+ "fnv",
+ "nom",
+ "phf",
+ "phf_codegen",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.15.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7b3e525a49ec206798b40326a44121291b530c963cfb01018f63e135bac543d"
+dependencies = [
+ "smawk",
+ "unicode-linebreak",
+ "unicode-width",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.50"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.50"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "thread_local"
+version = "1.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+]
+
+[[package]]
+name = "time"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4a34ab300f2dee6e562c10a046fc05e358b29f9bf92277f30c3c8d82275f6f5"
+dependencies = [
+ "deranged",
+ "itoa",
+ "libc",
+ "num_threads",
+ "powerfmt",
+ "serde",
+ "time-core",
+ "time-macros",
+]
+
+[[package]]
+name = "time-core"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3"
+
+[[package]]
+name = "time-macros"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ad70d68dba9e1f8aceda7aa6711965dfec1cac869f311a51bd08b3a2ccbce20"
+dependencies = [
+ "time-core",
+]
+
+[[package]]
+name = "tiny-keccak"
+version = "2.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237"
+dependencies = [
+ "crunchy",
+]
+
+[[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.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+[[package]]
+name = "tokio"
+version = "1.33.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4f38200e3ef7995e5ef13baec2f432a6da0aa9ac495b2c0e8f3b7eec2c92d653"
+dependencies = [
+ "backtrace",
+ "bytes",
+ "libc",
+ "mio",
+ "num_cpus",
+ "pin-project-lite",
+ "signal-hook-registry",
+ "socket2 0.5.5",
+ "tokio-macros",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "tokio-graceful-shutdown"
+version = "0.14.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "351221b8de5317abac3a0cb5d79287ed8cca598959f596e2eb4d25637fe03bd3"
+dependencies = [
+ "async-trait",
+ "atomic",
+ "bytemuck",
+ "miette 5.10.0",
+ "pin-project-lite",
+ "thiserror",
+ "tokio",
+ "tokio-util",
+ "tracing",
+]
+
+[[package]]
+name = "tokio-macros"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "tokio-rustls"
+version = "0.24.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081"
+dependencies = [
+ "rustls",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-stream"
+version = "0.1.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842"
+dependencies = [
+ "futures-core",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.7.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-sink",
+ "pin-project-lite",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "toml"
+version = "0.7.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257"
+dependencies = [
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "toml_edit 0.19.15",
+]
+
+[[package]]
+name = "toml"
+version = "0.8.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1a195ec8c9da26928f773888e0742ca3ca1040c6cd859c919c9f59c1954ab35"
+dependencies = [
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "toml_edit 0.21.0",
+]
+
+[[package]]
+name = "toml_datetime"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.19.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421"
+dependencies = [
+ "indexmap 2.1.0",
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "winnow",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d34d383cd00a163b4a5b85053df514d45bc330f6de7737edfe0a93311d1eaa03"
+dependencies = [
+ "indexmap 2.1.0",
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "winnow",
+]
+
+[[package]]
+name = "tower"
+version = "0.4.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c"
+dependencies = [
+ "futures-core",
+ "futures-util",
+ "pin-project",
+ "pin-project-lite",
+ "tokio",
+ "tower-layer",
+ "tower-service",
+ "tracing",
+]
+
+[[package]]
+name = "tower-http"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f873044bf02dd1e8239e9c1293ea39dad76dc594ec16185d0a1bf31d8dc8d858"
+dependencies = [
+ "bitflags 1.3.2",
+ "bytes",
+ "futures-core",
+ "futures-util",
+ "http",
+ "http-body",
+ "http-range-header",
+ "pin-project-lite",
+ "tower",
+ "tower-layer",
+ "tower-service",
+ "tracing",
+ "uuid",
+]
+
+[[package]]
+name = "tower-layer"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0"
+
+[[package]]
+name = "tower-service"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
+
+[[package]]
+name = "tracing"
+version = "0.1.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef"
+dependencies = [
+ "log",
+ "pin-project-lite",
+ "tracing-attributes",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-attributes"
+version = "0.1.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54"
+dependencies = [
+ "once_cell",
+ "valuable",
+]
+
+[[package]]
+name = "tracing-log"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f751112709b4e791d8ce53e32c4ed2d353565a795ce84da2285393f41557bdf2"
+dependencies = [
+ "log",
+ "once_cell",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-log"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3"
+dependencies = [
+ "log",
+ "once_cell",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-opentelemetry"
+version = "0.17.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fbbe89715c1dbbb790059e2565353978564924ee85017b5fff365c872ff6721f"
+dependencies = [
+ "once_cell",
+ "opentelemetry",
+ "tracing",
+ "tracing-core",
+ "tracing-log 0.1.4",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "tracing-subscriber"
+version = "0.3.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b"
+dependencies = [
+ "matchers",
+ "nu-ansi-term",
+ "once_cell",
+ "regex",
+ "sharded-slab",
+ "smallvec",
+ "thread_local",
+ "tracing",
+ "tracing-core",
+ "tracing-log 0.2.0",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
+
+[[package]]
+name = "typenum"
+version = "1.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
+
+[[package]]
+name = "ucd-trie"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9"
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
+
+[[package]]
+name = "unicode-bom"
+version = "1.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "63ec69f541d875b783ca40184d655f2927c95f0bffd486faa83cd3ac3529ec32"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
+
+[[package]]
+name = "unicode-linebreak"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85"
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c"
+
+[[package]]
+name = "untrusted"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1"
+
+[[package]]
+name = "url"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "percent-encoding",
+]
+
+[[package]]
+name = "urlencoding"
+version = "2.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da"
+
+[[package]]
+name = "utf8parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
+
+[[package]]
+name = "uuid"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88ad59a7560b41a70d191093a945f0b87bc1deeda46fb237479708a1d6b6cdfc"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "valuable"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
+
+[[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 = "vsimd"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c3082ca00d5a5ef149bb8b555a72ae84c9c59f7250f013ac822ac2e49b19c64"
+
+[[package]]
+name = "wait-timeout"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "walkdir"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee"
+dependencies = [
+ "same-file",
+ "winapi-util",
+]
+
+[[package]]
+name = "want"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e"
+dependencies = [
+ "try-lock",
+]
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.88"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7daec296f25a1bae309c0cd5c29c4b260e510e6d813c286b19eaadf409d40fce"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.88"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e397f4664c0e4e428e8313a469aaa58310d302159845980fd23b0f22a847f217"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9afec9963e3d0994cac82455b2b3502b81a7f40f9a0d32181f7528d9f4b43e02"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.88"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5961017b3b08ad5f3fe39f1e79877f8ee7c23c5e5fd5eb80de95abc41f1f16b2"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.88"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c5353b8dab669f5e10f5bd76df26a9360c748f054f862ff5f3f8aae0c7fb3907"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.88"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d046c5d029ba91a1ed14da14dca44b68bf2f124cfbaf741c54151fdb3e0750b"
+
+[[package]]
+name = "watchexec"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8b97d05a9305a9aa6a7bedef64cd012ebc9b6f1f5ed0368fb48f0fe58f96988"
+dependencies = [
+ "async-priority-channel",
+ "async-recursion",
+ "atomic-take",
+ "clearscreen",
+ "command-group",
+ "futures",
+ "ignore-files",
+ "miette 5.10.0",
+ "nix",
+ "normalize-path",
+ "notify",
+ "once_cell",
+ "project-origins",
+ "thiserror",
+ "tokio",
+ "tracing",
+ "watchexec-events",
+ "watchexec-signals",
+]
+
+[[package]]
+name = "watchexec-events"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "01603bbe02fd75918f010dadad456d47eda14fb8fdcab276b0b4b8362f142ae3"
+dependencies = [
+ "nix",
+ "notify",
+ "watchexec-signals",
+]
+
+[[package]]
+name = "watchexec-filterer-ignore"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b77dba02357d16307c4c53d252a59d08cece5e274314956e0aa0160ff721b08"
+dependencies = [
+ "ignore",
+ "ignore-files",
+ "tracing",
+ "watchexec",
+ "watchexec-signals",
+]
+
+[[package]]
+name = "watchexec-signals"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc2a5df96c388901c94ca04055fcd51d4196ca3e971c5e805bd4a4b61dd6a7e5"
+dependencies = [
+ "miette 5.10.0",
+ "nix",
+ "thiserror",
+]
+
+[[package]]
+name = "web-sys"
+version = "0.3.65"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5db499c5f66323272151db0e666cd34f78617522fb0c1604d31a27c50c206a85"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "webpki-roots"
+version = "0.25.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14247bb57be4f377dfb94c72830b8ce8fc6beac03cf4bf7b9732eadd414123fc"
+
+[[package]]
+name = "which"
+version = "4.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7"
+dependencies = [
+ "either",
+ "home",
+ "once_cell",
+ "rustix",
+]
+
+[[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.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596"
+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"
+
+[[package]]
+name = "windows"
+version = "0.43.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04662ed0e3e5630dfa9b26e4cb823b817f1a9addda855d973a9458c236556244"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-core"
+version = "0.51.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64"
+dependencies = [
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
+dependencies = [
+ "windows-targets 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
+dependencies = [
+ "windows_aarch64_gnullvm 0.48.5",
+ "windows_aarch64_msvc 0.48.5",
+ "windows_i686_gnu 0.48.5",
+ "windows_i686_msvc 0.48.5",
+ "windows_x86_64_gnu 0.48.5",
+ "windows_x86_64_gnullvm 0.48.5",
+ "windows_x86_64_msvc 0.48.5",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
+
+[[package]]
+name = "winnow"
+version = "0.5.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "176b6138793677221d420fd2f0aeeced263f197688b36484660da767bca2fa32"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "winreg"
+version = "0.50.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1"
+dependencies = [
+ "cfg-if",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "xmlparser"
+version = "0.13.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "66fee0b777b0f5ac1c69bb06d361268faafa61cd4682ae064a171c16c433e9e4"
+
+[[package]]
+name = "zeroize"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9"
+
+[[package]]
+name = "zip"
+version = "0.6.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "760394e246e4c28189f19d488c058bf16f564016aefac5d32bb1f3b51d5e9261"
+dependencies = [
+ "aes",
+ "byteorder",
+ "bzip2",
+ "constant_time_eq",
+ "crc32fast",
+ "crossbeam-utils",
+ "flate2",
+ "hmac",
+ "pbkdf2",
+ "sha1",
+ "time",
+ "zstd",
+]
+
+[[package]]
+name = "zstd"
+version = "0.11.2+zstd.1.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4"
+dependencies = [
+ "zstd-safe",
+]
+
+[[package]]
+name = "zstd-safe"
+version = "5.0.2+zstd.1.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db"
+dependencies = [
+ "libc",
+ "zstd-sys",
+]
+
+[[package]]
+name = "zstd-sys"
+version = "2.0.9+zstd.1.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e16efa8a874a0481a574084d34cc26fdb3b99627480f785888deb6386506656"
+dependencies = [
+ "cc",
+ "pkg-config",
+]
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-lambda/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-lambda/default.nix
new file mode 100644
index 000000000000..c93679d63d05
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-lambda/default.nix
@@ -0,0 +1,76 @@
+{ lib
+, cacert
+, curl
+, rustPlatform
+, fetchFromGitHub
+, makeWrapper
+, pkg-config
+, openssl
+, stdenv
+, CoreServices
+, Security
+, zig
+, nix-update-script
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-lambda";
+  version = "1.0.1";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-KSJn8DRvm/ZLikCT8Tp9lb/ej0KSlZqRROs1yLNDa6c=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "cargo-test-macro-0.1.0" = "sha256-s3PM5SHGwZRr1cKt3LTL9fSAhzZ6CaZmDMVUgnOr6R0=";
+    };
+  };
+
+  nativeCheckInputs = [cacert];
+
+  nativeBuildInputs = [ makeWrapper pkg-config ];
+
+  buildInputs = [ openssl ] ++ lib.optionals stdenv.isDarwin [ curl CoreServices Security ];
+
+  checkFlags = [
+    # Disabled because they access the network.
+    "--skip=test_build_basic_extension"
+    "--skip=test_build_basic_function"
+    "--skip=test_build_basic_zip_extension"
+    "--skip=test_build_basic_zip_function"
+    "--skip=test_build_event_type_function"
+    "--skip=test_build_http_feature_function"
+    "--skip=test_build_http_function"
+    "--skip=test_build_internal_zip_extension"
+    "--skip=test_build_logs_extension"
+    "--skip=test_build_telemetry_extension"
+    "--skip=test_download_example"
+    "--skip=test_init_subcommand"
+    "--skip=test_init_subcommand_without_override"
+  ];
+
+  # remove date from version output to make reproducible
+  postPatch = ''
+    rm crates/cargo-lambda-cli/build.rs
+  '';
+
+  postInstall = ''
+    wrapProgram $out/bin/cargo-lambda --prefix PATH : ${lib.makeBinPath [ zig ]}
+  '';
+
+  CARGO_LAMBDA_BUILD_INFO = "(nixpkgs)";
+
+  passthru.updateScript = nix-update-script { };
+
+  meta = with lib; {
+    description = "A Cargo subcommand to help you work with AWS Lambda";
+    homepage = "https://cargo-lambda.info";
+    license = licenses.mit;
+    maintainers = with maintainers; [ taylor1791 calavera ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-leptos/Cargo.lock b/nixpkgs/pkgs/development/tools/rust/cargo-leptos/Cargo.lock
new file mode 100644
index 000000000000..9795d382d8b3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-leptos/Cargo.lock
@@ -0,0 +1,3480 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "addr2line"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb"
+dependencies = [
+ "gimli 0.28.1",
+]
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "adler32"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234"
+
+[[package]]
+name = "ahash"
+version = "0.7.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a824f2aa7e75a0c98c5a504fceb80649e9c35265d44525b5f94de4771a395cd"
+dependencies = [
+ "getrandom",
+ "once_cell",
+ "version_check",
+]
+
+[[package]]
+name = "ahash"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91429305e9f0a25f6205c5b8e0d2db09e0708a7a6df0f42212bb56c32c8ac97a"
+dependencies = [
+ "cfg-if 1.0.0",
+ "getrandom",
+ "once_cell",
+ "serde",
+ "version_check",
+ "zerocopy",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "alloc-no-stdlib"
+version = "2.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3"
+
+[[package]]
+name = "alloc-stdlib"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece"
+dependencies = [
+ "alloc-no-stdlib",
+]
+
+[[package]]
+name = "android-tzdata"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
+
+[[package]]
+name = "android_system_properties"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "ansi_term"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
+dependencies = [
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "anstream"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2ab91ebe16eb252986481c5b62f6098f3b698a45e34b5b98200cf20dd2484a44"
+dependencies = [
+ "anstyle",
+ "anstyle-parse",
+ "anstyle-query",
+ "anstyle-wincon",
+ "colorchoice",
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87"
+
+[[package]]
+name = "anstyle-parse"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "317b9a89c1868f5ea6ff1d9539a69f45dffc21ce321ac1fd1160dfa48c8e2140"
+dependencies = [
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle-query"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b"
+dependencies = [
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "anstyle-wincon"
+version = "3.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0699d10d2f4d628a98ee7b57b289abbc98ff3bad977cb3152709d4bf2330628"
+dependencies = [
+ "anstyle",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.75"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6"
+
+[[package]]
+name = "async-trait"
+version = "0.1.74"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a66537f1bb974b254c98ed142ff995236e81b9d0fe4db0575f46612cb15eb0f9"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "axum"
+version = "0.6.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b829e4e32b91e643de6eafe82b1d90675f5874230191a4ffbc1b336dec4d6bf"
+dependencies = [
+ "async-trait",
+ "axum-core",
+ "base64 0.21.5",
+ "bitflags 1.3.2",
+ "bytes",
+ "futures-util",
+ "http",
+ "http-body",
+ "hyper",
+ "itoa",
+ "matchit",
+ "memchr",
+ "mime",
+ "percent-encoding",
+ "pin-project-lite",
+ "rustversion",
+ "serde",
+ "serde_json",
+ "serde_path_to_error",
+ "serde_urlencoded",
+ "sha1",
+ "sync_wrapper",
+ "tokio",
+ "tokio-tungstenite",
+ "tower",
+ "tower-layer",
+ "tower-service",
+]
+
+[[package]]
+name = "axum-core"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c"
+dependencies = [
+ "async-trait",
+ "bytes",
+ "futures-util",
+ "http",
+ "http-body",
+ "mime",
+ "rustversion",
+ "tower-layer",
+ "tower-service",
+]
+
+[[package]]
+name = "backtrace"
+version = "0.3.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837"
+dependencies = [
+ "addr2line",
+ "cc",
+ "cfg-if 1.0.0",
+ "libc",
+ "miniz_oxide",
+ "object",
+ "rustc-demangle",
+]
+
+[[package]]
+name = "base64"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "489d6c0ed21b11d038c31b6ceccca973e65d73ba3bd8ecb9a2babf5546164643"
+dependencies = [
+ "byteorder",
+ "safemem",
+]
+
+[[package]]
+name = "base64"
+version = "0.21.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9"
+
+[[package]]
+name = "base64-simd"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "781dd20c3aff0bd194fe7d2a977dd92f21c173891f3a03b677359e5fa457e5d5"
+dependencies = [
+ "simd-abstraction",
+]
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bitflags"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07"
+
+[[package]]
+name = "bitvec"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c"
+dependencies = [
+ "funty",
+ "radium",
+ "tap",
+ "wyz",
+]
+
+[[package]]
+name = "block-buffer"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "brotli"
+version = "3.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "516074a47ef4bce09577a3b379392300159ce5b1ba2e501ff1c819950066100f"
+dependencies = [
+ "alloc-no-stdlib",
+ "alloc-stdlib",
+ "brotli-decompressor",
+]
+
+[[package]]
+name = "brotli-decompressor"
+version = "2.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4e2e4afe60d7dd600fdd3de8d0f08c2b7ec039712e3b6137ff98b7004e82de4f"
+dependencies = [
+ "alloc-no-stdlib",
+ "alloc-stdlib",
+]
+
+[[package]]
+name = "browserslist-rs"
+version = "0.12.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9bda9b4595376bf255f68dafb5dcc5b0e2842b38dc2a7b52c4e0bfe9fd1c651"
+dependencies = [
+ "ahash 0.8.6",
+ "anyhow",
+ "chrono",
+ "either",
+ "getrandom",
+ "itertools 0.10.5",
+ "js-sys",
+ "nom",
+ "once_cell",
+ "quote",
+ "serde",
+ "serde-wasm-bindgen",
+ "serde_json",
+ "string_cache",
+ "string_cache_codegen",
+ "thiserror",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec"
+
+[[package]]
+name = "bytecheck"
+version = "0.6.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b6372023ac861f6e6dc89c8344a8f398fb42aaba2b5dbc649ca0c0e9dbcb627"
+dependencies = [
+ "bytecheck_derive",
+ "ptr_meta",
+ "simdutf8",
+]
+
+[[package]]
+name = "bytecheck_derive"
+version = "0.6.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a7ec4c6f261935ad534c0c22dbef2201b45918860eb1c574b972bd213a76af61"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "byteorder"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
+
+[[package]]
+name = "bytes"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223"
+
+[[package]]
+name = "camino"
+version = "1.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c59e92b5a388f549b863a7bea62612c09f24c8393560709a54558a9abdfb3b9c"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "cargo-leptos"
+version = "0.2.5"
+dependencies = [
+ "ansi_term",
+ "anyhow",
+ "async-trait",
+ "axum",
+ "brotli",
+ "bytes",
+ "camino",
+ "cargo_metadata",
+ "clap",
+ "derive_more",
+ "dirs",
+ "dotenvy",
+ "dunce",
+ "flate2",
+ "flexi_logger",
+ "insta",
+ "itertools 0.11.0",
+ "lazy_static",
+ "leptos_hot_reload",
+ "libflate",
+ "lightningcss",
+ "log",
+ "notify",
+ "pathdiff",
+ "reqwest",
+ "seahash",
+ "semver",
+ "serde",
+ "serde_json",
+ "tar",
+ "temp-dir",
+ "tokio",
+ "wasm-bindgen-cli-support",
+ "which",
+ "zip",
+]
+
+[[package]]
+name = "cargo-platform"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e34637b3140142bdf929fb439e8aa4ebad7651ebf7b1080b3930aa16ac1459ff"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "cargo_metadata"
+version = "0.18.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037"
+dependencies = [
+ "camino",
+ "cargo-platform",
+ "derive_builder",
+ "semver",
+ "serde",
+ "serde_json",
+ "thiserror",
+]
+
+[[package]]
+name = "cc"
+version = "1.0.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "cfg-if"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
+
+[[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.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38"
+dependencies = [
+ "android-tzdata",
+ "iana-time-zone",
+ "js-sys",
+ "num-traits",
+ "wasm-bindgen",
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "clap"
+version = "4.4.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41fffed7514f420abec6d183b1d3acfd9099c79c3a10a06ade4f8203f1411272"
+dependencies = [
+ "clap_builder",
+ "clap_derive",
+]
+
+[[package]]
+name = "clap_builder"
+version = "4.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "63361bae7eef3771745f02d8d892bec2fee5f6e34af316ba556e7f97a7069ff1"
+dependencies = [
+ "anstream",
+ "anstyle",
+ "clap_lex",
+ "strsim",
+]
+
+[[package]]
+name = "clap_derive"
+version = "4.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442"
+dependencies = [
+ "heck 0.4.1",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1"
+
+[[package]]
+name = "colorchoice"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
+
+[[package]]
+name = "console"
+version = "0.15.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c926e00cc70edefdc64d3a5ff31cc65bb97a3460097762bd23afb4d8145fccf8"
+dependencies = [
+ "encode_unicode",
+ "lazy_static",
+ "libc",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "const-str"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21077772762a1002bb421c3af42ac1725fa56066bfc53d9a55bb79905df2aaf3"
+dependencies = [
+ "const-str-proc-macro",
+]
+
+[[package]]
+name = "const-str-proc-macro"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e1e0fdd2e5d3041e530e1b21158aeeef8b5d0e306bc5c1e3d6cf0930d10e25a"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "convert_case"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e"
+
+[[package]]
+name = "core-foundation"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
+
+[[package]]
+name = "core2"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b49ba7ef1ad6107f8824dbe97de947cbaac53c44e7f9756a1fba0d37c1eec505"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce420fe07aecd3e67c5f910618fe65e94158f6dcc0adf44e00d69ce2bdfe0fd0"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crc32fast"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
+dependencies = [
+ "cfg-if 1.0.0",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7"
+dependencies = [
+ "autocfg",
+ "cfg-if 1.0.0",
+ "crossbeam-utils",
+ "memoffset",
+ "scopeguard",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "crypto-common"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+dependencies = [
+ "generic-array",
+ "typenum",
+]
+
+[[package]]
+name = "cssparser"
+version = "0.33.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9be934d936a0fbed5bcdc01042b770de1398bf79d0e192f49fa7faea0e99281e"
+dependencies = [
+ "cssparser-macros",
+ "dtoa-short",
+ "itoa",
+ "phf 0.11.2",
+ "smallvec",
+]
+
+[[package]]
+name = "cssparser-color"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "556c099a61d85989d7af52b692e35a8d68a57e7df8c6d07563dc0778b3960c9f"
+dependencies = [
+ "cssparser",
+]
+
+[[package]]
+name = "cssparser-macros"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331"
+dependencies = [
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "darling"
+version = "0.14.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850"
+dependencies = [
+ "darling_core",
+ "darling_macro",
+]
+
+[[package]]
+name = "darling_core"
+version = "0.14.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0"
+dependencies = [
+ "fnv",
+ "ident_case",
+ "proc-macro2",
+ "quote",
+ "strsim",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "darling_macro"
+version = "0.14.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e"
+dependencies = [
+ "darling_core",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "dary_heap"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7762d17f1241643615821a8455a0b2c3e803784b058693d990b11f2dce25a0ca"
+
+[[package]]
+name = "dashmap"
+version = "5.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856"
+dependencies = [
+ "cfg-if 1.0.0",
+ "hashbrown 0.14.3",
+ "lock_api",
+ "once_cell",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "data-encoding"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e962a19be5cfc3f3bf6dd8f61eb50107f356ad6270fbb3ed41476571db78be5"
+
+[[package]]
+name = "data-url"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a30bfce702bcfa94e906ef82421f2c0e61c076ad76030c16ee5d2e9a32fe193"
+dependencies = [
+ "matches",
+]
+
+[[package]]
+name = "derive_builder"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8d67778784b508018359cbc8696edb3db78160bab2c2a28ba7f56ef6932997f8"
+dependencies = [
+ "derive_builder_macro",
+]
+
+[[package]]
+name = "derive_builder_core"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c11bdc11a0c47bc7d37d582b5285da6849c96681023680b906673c5707af7b0f"
+dependencies = [
+ "darling",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "derive_builder_macro"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ebcda35c7a396850a55ffeac740804b40ffec779b98fffbb1738f4033f0ee79e"
+dependencies = [
+ "derive_builder_core",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "derive_more"
+version = "0.99.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321"
+dependencies = [
+ "convert_case",
+ "proc-macro2",
+ "quote",
+ "rustc_version",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "digest"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
+dependencies = [
+ "block-buffer",
+ "crypto-common",
+]
+
+[[package]]
+name = "dirs"
+version = "5.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225"
+dependencies = [
+ "dirs-sys",
+]
+
+[[package]]
+name = "dirs-sys"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c"
+dependencies = [
+ "libc",
+ "option-ext",
+ "redox_users",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "dotenvy"
+version = "0.15.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b"
+
+[[package]]
+name = "dtoa"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dcbb2bf8e87535c23f7a8a321e364ce21462d0ff10cb6407820e8e96dfff6653"
+
+[[package]]
+name = "dtoa-short"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dbaceec3c6e4211c79e7b1800fb9680527106beb2f9c51904a3210c03a448c74"
+dependencies = [
+ "dtoa",
+]
+
+[[package]]
+name = "dunce"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b"
+
+[[package]]
+name = "either"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
+
+[[package]]
+name = "encode_unicode"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
+
+[[package]]
+name = "encoding_rs"
+version = "0.8.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "equivalent"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
+
+[[package]]
+name = "errno"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245"
+dependencies = [
+ "libc",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "fallible-iterator"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7"
+
+[[package]]
+name = "fastrand"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5"
+
+[[package]]
+name = "filetime"
+version = "0.2.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4029edd3e734da6fe05b6cd7bd2960760a616bd2ddd0d59a0124746d6272af0"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "redox_syscall 0.3.5",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "flate2"
+version = "1.0.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide",
+]
+
+[[package]]
+name = "flexi_logger"
+version = "0.27.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2ac35b454b60e1836602173e2eb7ef531173388c0212e02ec7f9fac086159ee5"
+dependencies = [
+ "chrono",
+ "glob",
+ "is-terminal",
+ "lazy_static",
+ "log",
+ "nu-ansi-term",
+ "regex",
+ "thiserror",
+]
+
+[[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.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "fsevent"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ab7d1bd1bd33cc98b0889831b72da23c0aa4df9cec7e0702f46ecea04b35db6"
+dependencies = [
+ "bitflags 1.3.2",
+ "fsevent-sys",
+]
+
+[[package]]
+name = "fsevent-sys"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f41b048a94555da0f42f1d632e2e19510084fb8e303b0daa2816e733fb3644a0"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "fuchsia-zircon"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82"
+dependencies = [
+ "bitflags 1.3.2",
+ "fuchsia-zircon-sys",
+]
+
+[[package]]
+name = "fuchsia-zircon-sys"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7"
+
+[[package]]
+name = "funty"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c"
+
+[[package]]
+name = "futures-channel"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff4dd66668b557604244583e3e1e1eada8c5c2e96a6d0d6653ede395b78bbacb"
+dependencies = [
+ "futures-core",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c"
+
+[[package]]
+name = "futures-io"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa"
+
+[[package]]
+name = "futures-sink"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e36d3378ee38c2a36ad710c5d30c2911d752cb941c00c72dbabfb786a7970817"
+
+[[package]]
+name = "futures-task"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2"
+
+[[package]]
+name = "futures-util"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104"
+dependencies = [
+ "futures-core",
+ "futures-io",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "fxhash"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c"
+dependencies = [
+ "byteorder",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f"
+dependencies = [
+ "cfg-if 1.0.0",
+ "js-sys",
+ "libc",
+ "wasi",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "gimli"
+version = "0.26.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "22030e2c5a68ec659fde1e949a745124b48e6fa8b045b7ed5bd1fe4ccc5c4e5d"
+dependencies = [
+ "fallible-iterator",
+ "indexmap 1.9.3",
+ "stable_deref_trait",
+]
+
+[[package]]
+name = "gimli"
+version = "0.28.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253"
+
+[[package]]
+name = "glob"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
+
+[[package]]
+name = "h2"
+version = "0.3.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d6250322ef6e60f93f9a2162799302cd6f68f79f6e5d85c8c16f14d1d958178"
+dependencies = [
+ "bytes",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "http",
+ "indexmap 2.1.0",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tracing",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+dependencies = [
+ "ahash 0.7.7",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.13.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e"
+dependencies = [
+ "ahash 0.8.6",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.14.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604"
+
+[[package]]
+name = "heck"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
+dependencies = [
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "heck"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7"
+
+[[package]]
+name = "home"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb"
+dependencies = [
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "http"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb"
+dependencies = [
+ "bytes",
+ "fnv",
+ "itoa",
+]
+
+[[package]]
+name = "http-body"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
+dependencies = [
+ "bytes",
+ "http",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "httparse"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
+
+[[package]]
+name = "httpdate"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
+
+[[package]]
+name = "hyper"
+version = "0.14.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468"
+dependencies = [
+ "bytes",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "httparse",
+ "httpdate",
+ "itoa",
+ "pin-project-lite",
+ "socket2 0.4.10",
+ "tokio",
+ "tower-service",
+ "tracing",
+ "want",
+]
+
+[[package]]
+name = "hyper-rustls"
+version = "0.24.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590"
+dependencies = [
+ "futures-util",
+ "http",
+ "hyper",
+ "rustls",
+ "tokio",
+ "tokio-rustls",
+]
+
+[[package]]
+name = "iana-time-zone"
+version = "0.1.58"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8326b86b6cff230b97d0d312a6c40a60726df3332e721f72a1b035f451663b20"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys",
+ "iana-time-zone-haiku",
+ "js-sys",
+ "wasm-bindgen",
+ "windows-core",
+]
+
+[[package]]
+name = "iana-time-zone-haiku"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "id-arena"
+version = "2.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25a2bc672d1148e28034f176e01fffebb08b35768468cc954630da77a1449005"
+
+[[package]]
+name = "ident_case"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
+
+[[package]]
+name = "idna"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
+dependencies = [
+ "autocfg",
+ "hashbrown 0.12.3",
+]
+
+[[package]]
+name = "indexmap"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f"
+dependencies = [
+ "equivalent",
+ "hashbrown 0.14.3",
+]
+
+[[package]]
+name = "inotify"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4816c66d2c8ae673df83366c18341538f234a26d65a9ecea5c348b453ac1d02f"
+dependencies = [
+ "bitflags 1.3.2",
+ "inotify-sys",
+ "libc",
+]
+
+[[package]]
+name = "inotify-sys"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "insta"
+version = "1.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d64600be34b2fcfc267740a243fa7744441bb4947a619ac4e5bb6507f35fbfc"
+dependencies = [
+ "console",
+ "lazy_static",
+ "linked-hash-map",
+ "serde",
+ "similar",
+ "yaml-rust",
+]
+
+[[package]]
+name = "iovec"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "ipnet"
+version = "2.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3"
+
+[[package]]
+name = "is-terminal"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b"
+dependencies = [
+ "hermit-abi",
+ "rustix",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "itertools"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itertools"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
+
+[[package]]
+name = "js-sys"
+version = "0.3.66"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cee9c64da59eae3b50095c18d3e74f8b73c0b86d2792824ff01bbce68ba229ca"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "kernel32-sys"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
+dependencies = [
+ "winapi 0.2.8",
+ "winapi-build",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "lazycell"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
+
+[[package]]
+name = "leb128"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67"
+
+[[package]]
+name = "leptos_hot_reload"
+version = "0.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ea60376eb80a24b3ab082612d62211e3ea0fc4dee132f7ff34d5fa5a5108cd2"
+dependencies = [
+ "anyhow",
+ "camino",
+ "indexmap 2.1.0",
+ "parking_lot",
+ "proc-macro2",
+ "quote",
+ "rstml",
+ "serde",
+ "syn 2.0.39",
+ "walkdir",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.150"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c"
+
+[[package]]
+name = "libflate"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f7d5654ae1795afc7ff76f4365c2c8791b0feb18e8996a96adad8ffd7c3b2bf"
+dependencies = [
+ "adler32",
+ "core2",
+ "crc32fast",
+ "dary_heap",
+ "libflate_lz77",
+]
+
+[[package]]
+name = "libflate_lz77"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be5f52fb8c451576ec6b79d3f4deb327398bc05bbdbd99021a6e77a4c855d524"
+dependencies = [
+ "core2",
+ "hashbrown 0.13.2",
+ "rle-decode-fast",
+]
+
+[[package]]
+name = "libredox"
+version = "0.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8"
+dependencies = [
+ "bitflags 2.4.1",
+ "libc",
+ "redox_syscall 0.4.1",
+]
+
+[[package]]
+name = "lightningcss"
+version = "1.0.0-alpha.51"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "99d6ad516c08b24c246b339159dc2ee2144c012e8ebdf4db4bddefb8734b2b69"
+dependencies = [
+ "ahash 0.7.7",
+ "bitflags 2.4.1",
+ "browserslist-rs",
+ "const-str",
+ "cssparser",
+ "cssparser-color",
+ "dashmap",
+ "data-encoding",
+ "itertools 0.10.5",
+ "lazy_static",
+ "parcel_selectors",
+ "parcel_sourcemap",
+ "paste",
+ "pathdiff",
+ "rayon",
+ "serde",
+ "smallvec",
+]
+
+[[package]]
+name = "linked-hash-map"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.4.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "969488b55f8ac402214f3f5fd243ebb7206cf82de60d3172994707a4bcc2b829"
+
+[[package]]
+name = "lock_api"
+version = "0.4.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45"
+dependencies = [
+ "autocfg",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
+
+[[package]]
+name = "matches"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5"
+
+[[package]]
+name = "matchit"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94"
+
+[[package]]
+name = "memchr"
+version = "2.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167"
+
+[[package]]
+name = "memoffset"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "mime"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
+
+[[package]]
+name = "minimal-lexical"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "mio"
+version = "0.6.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4afd66f5b91bf2a3bc13fad0e21caedac168ca4c707504e75585648ae80e4cc4"
+dependencies = [
+ "cfg-if 0.1.10",
+ "fuchsia-zircon",
+ "fuchsia-zircon-sys",
+ "iovec",
+ "kernel32-sys",
+ "libc",
+ "log",
+ "miow",
+ "net2",
+ "slab",
+ "winapi 0.2.8",
+]
+
+[[package]]
+name = "mio"
+version = "0.8.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3dce281c5e46beae905d4de1870d8b1509a9142b62eedf18b443b011ca8343d0"
+dependencies = [
+ "libc",
+ "wasi",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "mio-extras"
+version = "2.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "52403fe290012ce777c4626790c8951324a2b9e3316b3143779c72b029742f19"
+dependencies = [
+ "lazycell",
+ "log",
+ "mio 0.6.23",
+ "slab",
+]
+
+[[package]]
+name = "miow"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ebd808424166322d4a38da87083bfddd3ac4c131334ed55856112eb06d46944d"
+dependencies = [
+ "kernel32-sys",
+ "net2",
+ "winapi 0.2.8",
+ "ws2_32-sys",
+]
+
+[[package]]
+name = "net2"
+version = "0.2.39"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b13b648036a2339d06de780866fbdfda0dde886de7b3af2ddeba8b14f4ee34ac"
+dependencies = [
+ "cfg-if 0.1.10",
+ "libc",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "new_debug_unreachable"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54"
+
+[[package]]
+name = "nom"
+version = "7.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
+dependencies = [
+ "memchr",
+ "minimal-lexical",
+]
+
+[[package]]
+name = "notify"
+version = "4.0.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae03c8c853dba7bfd23e571ff0cff7bc9dceb40a4cd684cd1681824183f45257"
+dependencies = [
+ "bitflags 1.3.2",
+ "filetime",
+ "fsevent",
+ "fsevent-sys",
+ "inotify",
+ "libc",
+ "mio 0.6.23",
+ "mio-extras",
+ "walkdir",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "nu-ansi-term"
+version = "0.49.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c073d3c1930d0751774acf49e66653acecb416c3a54c6ec095a9b11caddb5a68"
+dependencies = [
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
+dependencies = [
+ "hermit-abi",
+ "libc",
+]
+
+[[package]]
+name = "object"
+version = "0.32.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
+
+[[package]]
+name = "option-ext"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d"
+
+[[package]]
+name = "outref"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f222829ae9293e33a9f5e9f440c6760a3d450a64affe1846486b140db81c1f4"
+
+[[package]]
+name = "parcel_selectors"
+version = "0.26.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05d74befe2d076330d9a58bf9ca2da424568724ab278adf15fb5718253133887"
+dependencies = [
+ "bitflags 2.4.1",
+ "cssparser",
+ "fxhash",
+ "log",
+ "phf 0.10.1",
+ "phf_codegen",
+ "precomputed-hash",
+ "smallvec",
+]
+
+[[package]]
+name = "parcel_sourcemap"
+version = "2.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "485b74d7218068b2b7c0e3ff12fbc61ae11d57cb5d8224f525bd304c6be05bbb"
+dependencies = [
+ "base64-simd",
+ "data-url",
+ "rkyv",
+ "serde",
+ "serde_json",
+ "vlq",
+]
+
+[[package]]
+name = "parking_lot"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+dependencies = [
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "redox_syscall 0.4.1",
+ "smallvec",
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "paste"
+version = "1.0.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c"
+
+[[package]]
+name = "pathdiff"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd"
+dependencies = [
+ "camino",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
+
+[[package]]
+name = "phf"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259"
+dependencies = [
+ "phf_shared 0.10.0",
+]
+
+[[package]]
+name = "phf"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc"
+dependencies = [
+ "phf_macros",
+ "phf_shared 0.11.2",
+]
+
+[[package]]
+name = "phf_codegen"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fb1c3a8bc4dd4e5cfce29b44ffc14bedd2ee294559a294e2a4d4c9e9a6a13cd"
+dependencies = [
+ "phf_generator 0.10.0",
+ "phf_shared 0.10.0",
+]
+
+[[package]]
+name = "phf_generator"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6"
+dependencies = [
+ "phf_shared 0.10.0",
+ "rand",
+]
+
+[[package]]
+name = "phf_generator"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0"
+dependencies = [
+ "phf_shared 0.11.2",
+ "rand",
+]
+
+[[package]]
+name = "phf_macros"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b"
+dependencies = [
+ "phf_generator 0.11.2",
+ "phf_shared 0.11.2",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096"
+dependencies = [
+ "siphasher",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b"
+dependencies = [
+ "siphasher",
+]
+
+[[package]]
+name = "pin-project"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422"
+dependencies = [
+ "pin-project-internal",
+]
+
+[[package]]
+name = "pin-project-internal"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+
+[[package]]
+name = "precomputed-hash"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
+
+[[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",
+ "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.70"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39278fbbf5fb4f646ce651690877f89d1c5811a3d4acb27700c1cb3cdb78fd3b"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "proc-macro2-diagnostics"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+ "version_check",
+ "yansi",
+]
+
+[[package]]
+name = "ptr_meta"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0738ccf7ea06b608c10564b31debd4f5bc5e197fc8bfe088f68ae5ce81e7a4f1"
+dependencies = [
+ "ptr_meta_derive",
+]
+
+[[package]]
+name = "ptr_meta_derive"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "radium"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09"
+
+[[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",
+]
+
+[[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",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "rayon"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1"
+dependencies = [
+ "either",
+ "rayon-core",
+]
+
+[[package]]
+name = "rayon-core"
+version = "1.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed"
+dependencies = [
+ "crossbeam-deque",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "redox_users"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4"
+dependencies = [
+ "getrandom",
+ "libredox",
+ "thiserror",
+]
+
+[[package]]
+name = "regex"
+version = "1.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-automata",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
+
+[[package]]
+name = "rend"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2571463863a6bd50c32f94402933f03457a3fbaf697a707c5be741e459f08fd"
+dependencies = [
+ "bytecheck",
+]
+
+[[package]]
+name = "reqwest"
+version = "0.11.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "046cd98826c46c2ac8ddecae268eb5c2e58628688a5fc7a2643704a73faba95b"
+dependencies = [
+ "base64 0.21.5",
+ "bytes",
+ "encoding_rs",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "hyper",
+ "hyper-rustls",
+ "ipnet",
+ "js-sys",
+ "log",
+ "mime",
+ "once_cell",
+ "percent-encoding",
+ "pin-project-lite",
+ "rustls",
+ "rustls-pemfile",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "system-configuration",
+ "tokio",
+ "tokio-rustls",
+ "tower-service",
+ "url",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+ "webpki-roots",
+ "winreg",
+]
+
+[[package]]
+name = "ring"
+version = "0.17.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "684d5e6e18f669ccebf64a92236bb7db9a34f07be010e3627368182027180866"
+dependencies = [
+ "cc",
+ "getrandom",
+ "libc",
+ "spin",
+ "untrusted",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "rkyv"
+version = "0.7.42"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0200c8230b013893c0b2d6213d6ec64ed2b9be2e0e016682b7224ff82cff5c58"
+dependencies = [
+ "bitvec",
+ "bytecheck",
+ "hashbrown 0.12.3",
+ "ptr_meta",
+ "rend",
+ "rkyv_derive",
+ "seahash",
+ "tinyvec",
+ "uuid",
+]
+
+[[package]]
+name = "rkyv_derive"
+version = "0.7.42"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2e06b915b5c230a17d7a736d1e2e63ee753c256a8614ef3f5147b13a4f5541d"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "rle-decode-fast"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3582f63211428f83597b51b2ddb88e2a91a9d52d12831f9d08f5e624e8977422"
+
+[[package]]
+name = "rstml"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fe542870b8f59dd45ad11d382e5339c9a1047cde059be136a7016095bbdefa77"
+dependencies = [
+ "proc-macro2",
+ "proc-macro2-diagnostics",
+ "quote",
+ "syn 2.0.39",
+ "syn_derive",
+ "thiserror",
+]
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
+
+[[package]]
+name = "rustc_version"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
+dependencies = [
+ "semver",
+]
+
+[[package]]
+name = "rustix"
+version = "0.38.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc99bc2d4f1fed22595588a013687477aedf3cdcfb26558c559edb67b4d9b22e"
+dependencies = [
+ "bitflags 2.4.1",
+ "errno",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "rustls"
+version = "0.21.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "629648aced5775d558af50b2b4c7b02983a04b312126d45eeead26e7caa498b9"
+dependencies = [
+ "log",
+ "ring",
+ "rustls-webpki",
+ "sct",
+]
+
+[[package]]
+name = "rustls-pemfile"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c"
+dependencies = [
+ "base64 0.21.5",
+]
+
+[[package]]
+name = "rustls-webpki"
+version = "0.101.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "rustversion"
+version = "1.0.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4"
+
+[[package]]
+name = "ryu"
+version = "1.0.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741"
+
+[[package]]
+name = "safemem"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072"
+
+[[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 = "scopeguard"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+
+[[package]]
+name = "sct"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "seahash"
+version = "4.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b"
+
+[[package]]
+name = "semver"
+version = "1.0.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.193"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde-wasm-bindgen"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3b4c031cd0d9014307d82b8abf653c0290fbdaeb4c02d00c63cf52f728628bf"
+dependencies = [
+ "js-sys",
+ "serde",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.193"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.108"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_path_to_error"
+version = "0.1.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4beec8bce849d58d06238cb50db2e1c417cfeafa4c63f692b15c82b7c80f8335"
+dependencies = [
+ "itoa",
+ "serde",
+]
+
+[[package]]
+name = "serde_urlencoded"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
+dependencies = [
+ "form_urlencoded",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "sha1"
+version = "0.10.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba"
+dependencies = [
+ "cfg-if 1.0.0",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "simd-abstraction"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9cadb29c57caadc51ff8346233b5cec1d240b68ce55cf1afc764818791876987"
+dependencies = [
+ "outref",
+]
+
+[[package]]
+name = "simdutf8"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f27f6278552951f1f2b8cf9da965d10969b2efdea95a6ec47987ab46edfe263a"
+
+[[package]]
+name = "similar"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2aeaf503862c419d66959f5d7ca015337d864e9c49485d771b732e2a20453597"
+
+[[package]]
+name = "siphasher"
+version = "0.3.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d"
+
+[[package]]
+name = "slab"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970"
+
+[[package]]
+name = "socket2"
+version = "0.4.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d"
+dependencies = [
+ "libc",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "socket2"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9"
+dependencies = [
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "spin"
+version = "0.9.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
+
+[[package]]
+name = "stable_deref_trait"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
+
+[[package]]
+name = "string_cache"
+version = "0.8.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b"
+dependencies = [
+ "new_debug_unreachable",
+ "once_cell",
+ "parking_lot",
+ "phf_shared 0.10.0",
+ "precomputed-hash",
+ "serde",
+]
+
+[[package]]
+name = "string_cache_codegen"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6bb30289b722be4ff74a408c3cc27edeaad656e06cb1fe8fa9231fa59c728988"
+dependencies = [
+ "phf_generator 0.10.0",
+ "phf_shared 0.10.0",
+ "proc-macro2",
+ "quote",
+]
+
+[[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.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.39"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn_derive"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1329189c02ff984e9736652b1631330da25eaa6bc639089ed4915d25446cbe7b"
+dependencies = [
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "sync_wrapper"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160"
+
+[[package]]
+name = "system-configuration"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7"
+dependencies = [
+ "bitflags 1.3.2",
+ "core-foundation",
+ "system-configuration-sys",
+]
+
+[[package]]
+name = "system-configuration-sys"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "tap"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369"
+
+[[package]]
+name = "tar"
+version = "0.4.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b16afcea1f22891c49a00c751c7b63b2233284064f11a200fc624137c51e2ddb"
+dependencies = [
+ "filetime",
+ "libc",
+ "xattr",
+]
+
+[[package]]
+name = "temp-dir"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af547b166dd1ea4b472165569fc456cfb6818116f854690b0ff205e636523dab"
+
+[[package]]
+name = "tempfile"
+version = "3.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5"
+dependencies = [
+ "cfg-if 1.0.0",
+ "fastrand",
+ "redox_syscall 0.4.1",
+ "rustix",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.50"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.50"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[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.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+[[package]]
+name = "tokio"
+version = "1.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d0c014766411e834f7af5b8f4cf46257aab4036ca95e9d2c144a10f59ad6f5b9"
+dependencies = [
+ "backtrace",
+ "bytes",
+ "libc",
+ "mio 0.8.9",
+ "num_cpus",
+ "parking_lot",
+ "pin-project-lite",
+ "signal-hook-registry",
+ "socket2 0.5.5",
+ "tokio-macros",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "tokio-macros"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "tokio-rustls"
+version = "0.24.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081"
+dependencies = [
+ "rustls",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-tungstenite"
+version = "0.20.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "212d5dcb2a1ce06d81107c3d0ffa3121fe974b73f068c8282cb1c32328113b6c"
+dependencies = [
+ "futures-util",
+ "log",
+ "tokio",
+ "tungstenite",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.7.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-sink",
+ "pin-project-lite",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "tower"
+version = "0.4.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c"
+dependencies = [
+ "futures-core",
+ "futures-util",
+ "pin-project",
+ "pin-project-lite",
+ "tokio",
+ "tower-layer",
+ "tower-service",
+ "tracing",
+]
+
+[[package]]
+name = "tower-layer"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0"
+
+[[package]]
+name = "tower-service"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
+
+[[package]]
+name = "tracing"
+version = "0.1.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef"
+dependencies = [
+ "log",
+ "pin-project-lite",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
+
+[[package]]
+name = "tungstenite"
+version = "0.20.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e3dac10fd62eaf6617d3a904ae222845979aec67c615d1c842b4002c7666fb9"
+dependencies = [
+ "byteorder",
+ "bytes",
+ "data-encoding",
+ "http",
+ "httparse",
+ "log",
+ "rand",
+ "sha1",
+ "thiserror",
+ "url",
+ "utf-8",
+]
+
+[[package]]
+name = "typenum"
+version = "1.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
+
+[[package]]
+name = "untrusted"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1"
+
+[[package]]
+name = "url"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "percent-encoding",
+]
+
+[[package]]
+name = "utf-8"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9"
+
+[[package]]
+name = "utf8parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
+
+[[package]]
+name = "uuid"
+version = "1.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e395fcf16a7a3d8127ec99782007af141946b4795001f876d54fb0d55978560"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "vlq"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "65dd7eed29412da847b0f78bcec0ac98588165988a8cfe41d4ea1d429f8ccfff"
+
+[[package]]
+name = "walkdir"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee"
+dependencies = [
+ "same-file",
+ "winapi-util",
+]
+
+[[package]]
+name = "walrus"
+version = "0.20.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c03529cd0c4400a2449f640d2f27cd1b48c3065226d15e26d98e4429ab0adb7"
+dependencies = [
+ "anyhow",
+ "gimli 0.26.2",
+ "id-arena",
+ "leb128",
+ "log",
+ "walrus-macro",
+ "wasm-encoder",
+ "wasmparser",
+]
+
+[[package]]
+name = "walrus-macro"
+version = "0.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0a6e5bd22c71e77d60140b0bd5be56155a37e5bd14e24f5f87298040d0cc40d7"
+dependencies = [
+ "heck 0.3.3",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "want"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e"
+dependencies = [
+ "try-lock",
+]
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.89"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ed0d4f68a3015cc185aff4db9506a015f4b96f95303897bfa23f846db54064e"
+dependencies = [
+ "cfg-if 1.0.0",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.89"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b56f625e64f3a1084ded111c4d5f477df9f8c92df113852fa5a374dbda78826"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-cli-support"
+version = "0.2.89"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf8226e223e2dfbe8f921b7f20b82d1b5d86a6b143e9d6286cca8edd16695583"
+dependencies = [
+ "anyhow",
+ "base64 0.9.3",
+ "log",
+ "rustc-demangle",
+ "serde_json",
+ "tempfile",
+ "unicode-ident",
+ "walrus",
+ "wasm-bindgen-externref-xform",
+ "wasm-bindgen-multi-value-xform",
+ "wasm-bindgen-shared",
+ "wasm-bindgen-threads-xform",
+ "wasm-bindgen-wasm-conventions",
+ "wasm-bindgen-wasm-interpreter",
+]
+
+[[package]]
+name = "wasm-bindgen-externref-xform"
+version = "0.2.89"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8a719be856d8b0802c7195ca26ee6eb02cb9639a12b80be32db960ce9640cb8"
+dependencies = [
+ "anyhow",
+ "walrus",
+]
+
+[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.39"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac36a15a220124ac510204aec1c3e5db8a22ab06fd6706d881dc6149f8ed9a12"
+dependencies = [
+ "cfg-if 1.0.0",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.89"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0162dbf37223cd2afce98f3d0785506dcb8d266223983e4b5b525859e6e182b2"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.89"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0eb82fcb7930ae6219a7ecfd55b217f5f0893484b7a13022ebb2b2bf20b5283"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-multi-value-xform"
+version = "0.2.89"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a12766255d4b9026700376cc81894eeb62903e4414cbc94675f6f9babd9cfb76"
+dependencies = [
+ "anyhow",
+ "walrus",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.89"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ab9b36309365056cd639da3134bf87fa8f3d86008abf99e612384a6eecd459f"
+
+[[package]]
+name = "wasm-bindgen-threads-xform"
+version = "0.2.89"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "13c2b14c5b9c2c7aa9dd1eb7161857de9783f40e98582e7f41f2d7c04ffdc155"
+dependencies = [
+ "anyhow",
+ "walrus",
+ "wasm-bindgen-wasm-conventions",
+]
+
+[[package]]
+name = "wasm-bindgen-wasm-conventions"
+version = "0.2.89"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aaedf88769cb23c6fd2e3bfed65bcbff6c5d92c8336afbd80d2dfcc8eb5cf047"
+dependencies = [
+ "anyhow",
+ "walrus",
+]
+
+[[package]]
+name = "wasm-bindgen-wasm-interpreter"
+version = "0.2.89"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8a79039df1e0822e6d66508ec86052993deac201e26060f62abcd85e1daf951"
+dependencies = [
+ "anyhow",
+ "log",
+ "walrus",
+ "wasm-bindgen-wasm-conventions",
+]
+
+[[package]]
+name = "wasm-encoder"
+version = "0.29.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "18c41dbd92eaebf3612a39be316540b8377c871cb9bde6b064af962984912881"
+dependencies = [
+ "leb128",
+]
+
+[[package]]
+name = "wasmparser"
+version = "0.80.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "449167e2832691a1bff24cde28d2804e90e09586a448c8e76984792c44334a6b"
+
+[[package]]
+name = "web-sys"
+version = "0.3.66"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50c24a44ec86bb68fbecd1b3efed7e85ea5621b39b35ef2766b66cd984f8010f"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "webpki-roots"
+version = "0.25.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1778a42e8b3b90bff8d0f5032bf22250792889a5cdc752aa0020c84abe3aaf10"
+
+[[package]]
+name = "which"
+version = "4.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7"
+dependencies = [
+ "either",
+ "home",
+ "once_cell",
+ "rustix",
+]
+
+[[package]]
+name = "winapi"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
+
+[[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-build"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
+
+[[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.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596"
+dependencies = [
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows-core"
+version = "0.51.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64"
+dependencies = [
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
+dependencies = [
+ "windows-targets 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
+dependencies = [
+ "windows-targets 0.52.0",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
+dependencies = [
+ "windows_aarch64_gnullvm 0.48.5",
+ "windows_aarch64_msvc 0.48.5",
+ "windows_i686_gnu 0.48.5",
+ "windows_i686_msvc 0.48.5",
+ "windows_x86_64_gnu 0.48.5",
+ "windows_x86_64_gnullvm 0.48.5",
+ "windows_x86_64_msvc 0.48.5",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd"
+dependencies = [
+ "windows_aarch64_gnullvm 0.52.0",
+ "windows_aarch64_msvc 0.52.0",
+ "windows_i686_gnu 0.52.0",
+ "windows_i686_msvc 0.52.0",
+ "windows_x86_64_gnu 0.52.0",
+ "windows_x86_64_gnullvm 0.52.0",
+ "windows_x86_64_msvc 0.52.0",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04"
+
+[[package]]
+name = "winreg"
+version = "0.50.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1"
+dependencies = [
+ "cfg-if 1.0.0",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "ws2_32-sys"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e"
+dependencies = [
+ "winapi 0.2.8",
+ "winapi-build",
+]
+
+[[package]]
+name = "wyz"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed"
+dependencies = [
+ "tap",
+]
+
+[[package]]
+name = "xattr"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4686009f71ff3e5c4dbcf1a282d0a44db3f021ba69350cd42086b3e5f1c6985"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "yaml-rust"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85"
+dependencies = [
+ "linked-hash-map",
+]
+
+[[package]]
+name = "yansi"
+version = "1.0.0-rc.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1367295b8f788d371ce2dbc842c7b709c73ee1364d30351dd300ec2203b12377"
+
+[[package]]
+name = "zerocopy"
+version = "0.7.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e97e415490559a91254a2979b4829267a57d2fcd741a98eee8b722fb57289aa0"
+dependencies = [
+ "zerocopy-derive",
+]
+
+[[package]]
+name = "zerocopy-derive"
+version = "0.7.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd7e48ccf166952882ca8bd778a43502c64f33bf94c12ebe2a7f08e5a0f6689f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "zip"
+version = "0.6.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "760394e246e4c28189f19d488c058bf16f564016aefac5d32bb1f3b51d5e9261"
+dependencies = [
+ "byteorder",
+ "crc32fast",
+ "crossbeam-utils",
+ "flate2",
+]
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-leptos/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-leptos/default.nix
new file mode 100644
index 000000000000..fa670ee51e9c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-leptos/default.nix
@@ -0,0 +1,48 @@
+{ darwin
+, fetchFromGitHub
+, lib
+, pkg-config
+, rustPlatform
+, stdenv
+}:
+let
+  inherit (darwin.apple_sdk.frameworks)
+    CoreServices
+    SystemConfiguration
+    Security;
+  inherit (lib) optionals;
+  inherit (stdenv) isDarwin;
+in
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-leptos";
+  version = "0.2.5";
+
+  src = fetchFromGitHub {
+    owner = "leptos-rs";
+    repo = pname;
+    rev = version;
+    hash = "sha256-veRhTruM+Nw2rerzXC/kpi2Jr8mMMBLqOM2YBCpFePU=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+  };
+
+  buildInputs = optionals isDarwin [
+    SystemConfiguration
+    Security
+    CoreServices
+  ];
+
+  # https://github.com/leptos-rs/cargo-leptos#dependencies
+  buildFeatures = [ "no_downloads" ]; # cargo-leptos will try to install missing dependencies on its own otherwise
+  doCheck = false; # Check phase tries to query crates.io
+
+  meta = with lib; {
+    description = "A build tool for the Leptos web framework";
+    homepage = "https://github.com/leptos-rs/cargo-leptos";
+    changelog = "https://github.com/leptos-rs/cargo-leptos/releases/tag/${version}";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ benwis ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-license/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-license/default.nix
new file mode 100644
index 000000000000..27798f4ca85e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-license/default.nix
@@ -0,0 +1,20 @@
+{ lib, rustPlatform, fetchCrate }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-license";
+  version = "0.6.1";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-qwyWj0vPWQOZYib2ZZutX25a4wwnG1kFAiRCWqGyVms=";
+  };
+
+  cargoHash = "sha256-ifw/n7eejUWUqhieDLojuO3xgosn28NnjAKkq/ZSLEI=";
+
+  meta = with lib; {
+    description = "Cargo subcommand to see license of dependencies";
+    homepage = "https://github.com/onur/cargo-license";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ basvandijk figsoda matthiasbeyer ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-limit/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-limit/default.nix
new file mode 100644
index 000000000000..f52f76a3de5e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-limit/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, nix-update-script
+, stdenv
+, libiconv
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-limit";
+  version = "0.0.10";
+
+  src = fetchFromGitHub {
+    owner = "alopatindev";
+    repo = "cargo-limit";
+    rev = version;
+    sha256 = "sha256-joWDB9fhCsYVZFZdr+Gfm4JaRlm5kj+CHp34Sx5iQYk=";
+  };
+
+  cargoSha256 = "sha256-dwqbG0UFeUQHa0K98ebHfjbcQuQOhK2s6ZxAT6r0cik=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [ libiconv ];
+
+  passthru = {
+    updateScript = nix-update-script { };
+  };
+
+  meta = with lib; {
+    description = "Cargo subcommand \"limit\": reduces the noise of compiler messages";
+    homepage = "https://github.com/alopatindev/cargo-limit";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ otavio matthiasbeyer ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-llvm-cov/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-llvm-cov/default.nix
new file mode 100644
index 000000000000..be81bb5ea788
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-llvm-cov/default.nix
@@ -0,0 +1,100 @@
+# If the tests are broken, it's probably for one of two reasons:
+#
+# 1. The version of llvm used doesn't match the expectations of rustc and/or
+#    cargo-llvm-cov. This is relatively unlikely because we pull llvm out of
+#    rustc's attrset, so it *should* be the right version as long as this is the
+#    case.
+# 2. Nixpkgs has changed its rust infrastructure in a way that causes
+#    cargo-llvm-cov to misbehave under test. It's likely that even though the
+#    tests are failing, cargo-llvm-cov will still function properly in actual
+#    use. This has happened before, and is described [here][0] (along with a
+#    feature request that would fix this instance of the problem).
+#
+# For previous test-troubleshooting discussion, see [here][1].
+#
+# [0]: https://github.com/taiki-e/cargo-llvm-cov/issues/242
+# [1]: https://github.com/NixOS/nixpkgs/pull/197478
+
+{ stdenv
+, lib
+, fetchurl
+, fetchFromGitHub
+, rustPlatform
+, rustc
+, git
+}:
+
+let
+  pname = "cargo-llvm-cov";
+  version = "0.6.2";
+
+  owner = "taiki-e";
+  homepage = "https://github.com/${owner}/${pname}";
+
+  llvm = rustc.llvmPackages.llvm;
+
+  # Download `Cargo.lock` from crates.io so we don't clutter up Nixpkgs
+  cargoLock = fetchurl {
+    name = "Cargo.lock";
+    url = "https://crates.io/api/v1/crates/${pname}/${version}/download";
+    sha256 = "sha256-iML16yjSJsyDsr9F3gyp4XTu5Z9petSUQ0jXotU5tmw=";
+    downloadToTemp = true;
+    postFetch = ''
+      tar xzf $downloadedFile ${pname}-${version}/Cargo.lock
+      mv ${pname}-${version}/Cargo.lock $out
+    '';
+  };
+in
+
+rustPlatform.buildRustPackage {
+  inherit pname version;
+
+  # Use `fetchFromGitHub` instead of `fetchCrate` because the latter does not
+  # pull in fixtures needed for the test suite
+  src = fetchFromGitHub {
+    inherit owner;
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-1VfWs8f4i3YjH69A7X3/1WPxSIwPRF5osQ/1eqOUB8U=";
+    leaveDotGit = true;
+  };
+
+  # Upstream doesn't include the lockfile so we need to add it back
+  postUnpack = ''
+    cp ${cargoLock} source/Cargo.lock
+  '';
+
+  cargoSha256 = "sha256-9pOfhGnktEgyTbfK4roFU7t3qcgx2yRp17hJVKsvNqw=";
+
+  # `cargo-llvm-cov` reads these environment variables to find these binaries,
+  # which are needed to run the tests
+  LLVM_COV = "${llvm}/bin/llvm-cov";
+  LLVM_PROFDATA = "${llvm}/bin/llvm-profdata";
+
+  nativeCheckInputs = [
+    git
+  ];
+
+  preCheck = ''
+    # `cargo-llvm-cov`'s tests rely on `git ls-files` so the staging area needs
+    # to not have everything staged as deleted, which is how `leaveDotGit` in
+    # `fetchFromGitHub` leaves the staging area for reproducibility reasons.
+    git restore --staged .
+  '';
+
+  meta = {
+    inherit homepage;
+    changelog = homepage + "/blob/v${version}/CHANGELOG.md";
+    description = "Cargo subcommand to easily use LLVM source-based code coverage";
+    longDescription = ''
+      In order for this to work, you either need to run `rustup component add llvm-
+      tools-preview` or install the `llvm-tools-preview` component using your Nix
+      library (e.g. fenix or rust-overlay)
+    '';
+    license = with lib.licenses; [ asl20 /* or */ mit ];
+    maintainers = with lib.maintainers; [ wucke13 matthiasbeyer CobaltCause ];
+
+    # The profiler runtime is (currently) disabled on non-Linux platforms
+    broken = !(stdenv.isLinux && !stdenv.targetPlatform.isRedox);
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-llvm-lines/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-llvm-lines/default.nix
new file mode 100644
index 000000000000..083494fb0b37
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-llvm-lines/default.nix
@@ -0,0 +1,23 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-llvm-lines";
+  version = "0.4.36";
+
+  src = fetchFromGitHub {
+    owner = "dtolnay";
+    repo = pname;
+    rev = version;
+    hash = "sha256-kj5dsZWf1dp6NG9AIj5GdRoXIb6J3bSXnJNNEVAKnaM=";
+  };
+
+  cargoHash = "sha256-iZtT1ywFIgPhBnW4losd1J+WHUtzgW47657vGi6mI7I=";
+
+  meta = with lib; {
+    description = "Count the number of lines of LLVM IR across all instantiations of a generic function";
+    homepage = "https://github.com/dtolnay/cargo-llvm-lines";
+    changelog = "https://github.com/dtolnay/cargo-llvm-lines/releases/tag/${src.rev}";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ figsoda matthiasbeyer ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-local-registry/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-local-registry/default.nix
new file mode 100644
index 000000000000..6d7addf4117c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-local-registry/default.nix
@@ -0,0 +1,57 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, curl
+, pkg-config
+, libgit2
+, openssl
+, zlib
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-local-registry";
+  version = "0.2.6";
+
+  src = fetchFromGitHub {
+    owner = "dhovart";
+    repo = "cargo-local-registry";
+    rev = version;
+    hash = "sha256-2tSO82XRCUekEBrd9wDzxeg2r2C+F9wgz3ffYFG7+q8=";
+  };
+
+  cargoHash = "sha256-vxdQLfr4G73MpPrrcbcQRZGbTHJztUP3FwShj6zFhEY=";
+
+  nativeBuildInputs = [
+    curl
+    pkg-config
+  ];
+
+  buildInputs = [
+    curl
+    libgit2
+    openssl
+    zlib
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+  ] ++ lib.optionals (stdenv.isDarwin && stdenv.isx86_64) [
+    darwin.apple_sdk.frameworks.CoreFoundation
+  ];
+
+  # tests require internet access
+  doCheck = false;
+
+  # Cargo.lock is outdated
+  preConfigure = ''
+    cargo metadata --offline
+  '';
+
+  meta = with lib; {
+    description = "A cargo subcommand to manage local registries";
+    homepage = "https://github.com/dhovart/cargo-local-registry";
+    changelog = "https://github.com/dhovart/cargo-local-registry/releases/tag/${src.rev}";
+    license = with licenses; [ asl20 mit ];
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-lock/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-lock/default.nix
new file mode 100644
index 000000000000..af5f5eae1719
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-lock/default.nix
@@ -0,0 +1,23 @@
+{ lib, rustPlatform, fetchCrate }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-lock";
+  version = "9.0.0";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-SMxM66qo3Xmst+SVXu4LYZ0Zzn15wqVVNqqHzAkip/s=";
+  };
+
+  cargoHash = "sha256-wUp4zBY64MvD4anGlVsJrI3pyfwVSQGnn6YuweTeYNk=";
+
+  buildFeatures = [ "cli" ];
+
+  meta = with lib; {
+    description = "Self-contained Cargo.lock parser with graph analysis";
+    homepage = "https://github.com/rustsec/rustsec/tree/main/cargo-lock";
+    changelog = "https://github.com/rustsec/rustsec/blob/cargo-lock/v${version}/cargo-lock/CHANGELOG.md";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ figsoda matthiasbeyer ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-machete/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-machete/default.nix
new file mode 100644
index 000000000000..75d83e7be5af
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-machete/default.nix
@@ -0,0 +1,29 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-machete";
+  version = "0.6.0";
+
+  src = fetchFromGitHub {
+    owner = "bnjbvr";
+    repo = "cargo-machete";
+    rev = "v${version}";
+    hash = "sha256-LDhC/vwhyY4KD1RArCxl+nZl5IVj0zAjxlRLwWpnTvI=";
+  };
+
+  cargoHash = "sha256-vygAznYd/mtArSkLjoIpIxS4RiE3drRfKwNhD1w7KoY=";
+
+  # tests require internet access
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A Cargo tool that detects unused dependencies in Rust projects";
+    homepage = "https://github.com/bnjbvr/cargo-machete";
+    changelog = "https://github.com/bnjbvr/cargo-machete/blob/${src.rev}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda matthiasbeyer ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-make/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-make/default.nix
new file mode 100644
index 000000000000..1971c81f4609
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-make/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, bzip2
+, openssl
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-make";
+  version = "0.37.9";
+
+  src = fetchFromGitHub {
+    owner = "sagiegurari";
+    repo = "cargo-make";
+    rev = version;
+    hash = "sha256-pfLK9QGDS4KPIdXq/LI++/r1OxqmgF0qqVJNDSVrZFI=";
+  };
+
+  cargoHash = "sha256-x8cx64B+skusk0LDRQT/1g57NBQMchy2HvvryoY0R/I=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [
+    bzip2
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.SystemConfiguration
+  ];
+
+  # Some tests fail because they need network access.
+  # However, Travis ensures a proper build.
+  # See also:
+  #   https://travis-ci.org/sagiegurari/cargo-make
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A Rust task runner and build tool";
+    homepage = "https://github.com/sagiegurari/cargo-make";
+    changelog = "https://github.com/sagiegurari/cargo-make/blob/${version}/CHANGELOG.md";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ figsoda xrelkd ];
+    mainProgram = "cargo-make";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-mobile2/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-mobile2/default.nix
new file mode 100644
index 000000000000..b6265429525f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-mobile2/default.nix
@@ -0,0 +1,54 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, openssl
+, git
+, darwin
+, makeWrapper
+}:
+
+let
+  inherit (darwin.apple_sdk.frameworks) CoreServices;
+  pname = "cargo-mobile2";
+  version = "0.9.1";
+in
+rustPlatform.buildRustPackage {
+  inherit pname version;
+  src = fetchFromGitHub {
+    owner = "tauri-apps";
+    repo = pname;
+    rev = "cargo-mobile2-v${version}";
+    hash = "sha256-gyTA85eLVvDQKWo7D2zO6zFC8910AyNasXGjR1qkI6c=";
+  };
+
+  # Manually specify the sourceRoot since this crate depends on other crates in the workspace. Relevant info at
+  # https://discourse.nixos.org/t/difficulty-using-buildrustpackage-with-a-src-containing-multiple-cargo-workspaces/10202
+  # sourceRoot = "${src.name}/tooling/cli";
+
+  cargoHash = "sha256-Zcs+Sm2+xd7OSPXv+QDd7Jh8YvlmVrhWotjVNMqyE60=";
+
+  preBuild = ''
+    mkdir -p $out/share/
+    # during the install process tauri-mobile puts templates and commit information in CARGO_HOME
+    export CARGO_HOME=$out/share/
+  '';
+
+  buildInputs = [ openssl ] ++ lib.optionals stdenv.isDarwin [ CoreServices ];
+  nativeBuildInputs = [ pkg-config git makeWrapper ];
+
+  preFixup = ''
+    for bin in $out/bin/cargo-*; do
+      wrapProgram $bin \
+        --set CARGO_HOME "$out/share"
+    done
+  '';
+
+  meta = with lib; {
+    description = "Rust on mobile made easy! ";
+    homepage = "https://tauri.app/";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ happysalada ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-modules/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-modules/default.nix
new file mode 100644
index 000000000000..122bbe2a0e90
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-modules/default.nix
@@ -0,0 +1,27 @@
+{ lib, rustPlatform, fetchFromGitHub, stdenv, darwin }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-modules";
+  version = "0.11.2";
+
+  src = fetchFromGitHub {
+    owner = "regexident";
+    repo = pname;
+    rev = version;
+    hash = "sha256-dfeY9YylHF1QHNv7yTNYxUBxzcb276H80WL6JgXR/KY=";
+  };
+
+  cargoHash = "sha256-elzLO2YNDsD9FjCW0+2pUWgcJzOvzK+lyZBxrjVXoA8=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.CoreServices
+  ];
+
+  meta = with lib; {
+    description = "A cargo plugin for showing a tree-like overview of a crate's modules";
+    homepage = "https://github.com/regexident/cargo-modules";
+    changelog = "https://github.com/regexident/cargo-modules/blob/${version}/CHANGELOG.md";
+    license = with licenses; [ mpl20 ];
+    maintainers = with maintainers; [ figsoda rvarago matthiasbeyer ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-mommy/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-mommy/default.nix
new file mode 100644
index 000000000000..22bfe3ac1f20
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-mommy/default.nix
@@ -0,0 +1,20 @@
+{ lib, rustPlatform, fetchCrate }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-mommy";
+  version = "0.3.1";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-2WR6xUYL/bLgZlI4ADbPAtdLq0y4MoVP8Loxdu/58Wc=";
+  };
+
+  cargoHash = "sha256-iQt6eTCcpzhFnrDkUmT4x7JX+Z7fWdW5ovbB/9Ui7Sw=";
+
+  meta = with lib; {
+    description = "Cargo wrapper that encourages you after running commands";
+    homepage = "https://github.com/Gankra/cargo-mommy";
+    license = with licenses; [ mit asl20 ];
+    maintainers = with maintainers; [ GoldsteinE ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-msrv/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-msrv/default.nix
new file mode 100644
index 000000000000..f1b9e8eb0ec0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-msrv/default.nix
@@ -0,0 +1,54 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, rustup
+, openssl
+, stdenv
+, libiconv
+, Security
+, makeWrapper
+, gitUpdater
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-msrv";
+  version = "0.15.1";
+
+  src = fetchFromGitHub {
+    owner = "foresterre";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-rmWPkxxrpVamYHII0xkZq62ubL3/jrcqXUvFH9VuNtg=";
+  };
+
+  cargoSha256 = "sha256-/Bspy94uIP/e4uJY8qo+UPK1tnPjglxiMWeYWx2qoHk=";
+
+  passthru = {
+    updateScript = gitUpdater {
+      rev-prefix = "v";
+      ignoredVersions = ".(rc|beta).*";
+    };
+  };
+
+  # Integration tests fail
+  doCheck = false;
+
+  buildInputs = if stdenv.isDarwin
+    then [ libiconv Security ]
+    else [ openssl ];
+
+  nativeBuildInputs = [ pkg-config makeWrapper ];
+
+  # Depends at run-time on having rustup in PATH
+  postInstall = ''
+    wrapProgram $out/bin/cargo-msrv --prefix PATH : ${lib.makeBinPath [ rustup ]};
+  '';
+
+  meta = with lib; {
+    description = "Cargo subcommand \"msrv\": assists with finding your minimum supported Rust version (MSRV)";
+    homepage = "https://github.com/foresterre/cargo-msrv";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ otavio matthiasbeyer ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-mutants/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-mutants/default.nix
new file mode 100644
index 000000000000..7418240ac045
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-mutants/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-mutants";
+  version = "24.2.0";
+
+  src = fetchFromGitHub {
+    owner = "sourcefrog";
+    repo = "cargo-mutants";
+    rev = "v${version}";
+    hash = "sha256-cjU/RvfRgeFYwATEVQLmqxxy5qnQtY4R5Hd7jG772Ik=";
+  };
+
+  cargoHash = "sha256-0DFMiR4QelTfbTLxU7ceuUgYowO8eRhPemndEWq5xQQ=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.SystemConfiguration
+  ];
+
+  # too many tests require internet access
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A mutation testing tool for Rust";
+    homepage = "https://github.com/sourcefrog/cargo-mutants";
+    changelog = "https://github.com/sourcefrog/cargo-mutants/releases/tag/${src.rev}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-ndk/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-ndk/default.nix
new file mode 100644
index 000000000000..4b1bccb1596e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-ndk/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+, CoreGraphics
+, Foundation
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-ndk";
+  version = "3.4.0";
+
+  src = fetchFromGitHub {
+    owner = "bbqsrc";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-PdRiiGRYdbnViK34PnYoLFteipoK2arw79IVOQnJKNE=";
+  };
+
+  cargoHash = "sha256-6rQwyogm62xx9JmDWfRtCpF1Rqjtt5SDYUdtZBfryuw=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    CoreGraphics
+    Foundation
+  ];
+
+  meta = with lib; {
+    description = "Cargo extension for building Android NDK projects";
+    homepage = "https://github.com/bbqsrc/cargo-ndk";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ mglolenstine ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-nextest/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-nextest/default.nix
new file mode 100644
index 000000000000..a9418f51c5fe
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-nextest/default.nix
@@ -0,0 +1,37 @@
+{ lib, rustPlatform, fetchFromGitHub, stdenv, darwin }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-nextest";
+  version = "0.9.67";
+
+  src = fetchFromGitHub {
+    owner = "nextest-rs";
+    repo = "nextest";
+    rev = "cargo-nextest-${version}";
+    hash = "sha256-M2WkgECTAKux+sq+1rYt2rg/LP4ctMMprY3MsBO5cn4=";
+  };
+
+  cargoHash = "sha256-hJAsmT8T3YGSWjishSQeVMFty6HmdNewRR9nr66fRN0=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.SystemConfiguration
+  ];
+
+  cargoBuildFlags = [ "-p" "cargo-nextest" ];
+  cargoTestFlags = [ "-p" "cargo-nextest" ];
+
+  # TODO: investigate some more why these tests fail in nix
+  checkFlags = [
+    "--skip=tests_integration::test_list"
+    "--skip=tests_integration::test_relocated_run"
+    "--skip=tests_integration::test_run"
+  ];
+
+  meta = with lib; {
+    description = "Next-generation test runner for Rust projects";
+    homepage = "https://github.com/nextest-rs/nextest";
+    changelog = "https://nexte.st/CHANGELOG.html";
+    license = with licenses; [ mit asl20 ];
+    maintainers = with maintainers; [ ekleog figsoda matthiasbeyer ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-outdated/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-outdated/default.nix
new file mode 100644
index 000000000000..2f3c6ae76c79
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-outdated/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, rustPlatform
+, fetchCrate
+, pkg-config
+, openssl
+, stdenv
+, curl
+, CoreFoundation
+, CoreServices
+, Security
+, SystemConfiguration
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-outdated";
+  version = "0.14.0";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-rbfCrq9AwjrynNSklR1un3BUGv0kblwIxy72lTjEDVc=";
+  };
+
+  cargoHash = "sha256-kBolewLzKGq3rmSeWlLMDqKb4QQfWf3J6DnXTB0SV54=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ openssl ] ++ lib.optionals stdenv.isDarwin [
+    curl
+    CoreFoundation
+    CoreServices
+    Security
+    SystemConfiguration
+  ];
+
+  meta = with lib; {
+    description = "A cargo subcommand for displaying when Rust dependencies are out of date";
+    homepage = "https://github.com/kbknapp/cargo-outdated";
+    changelog = "https://github.com/kbknapp/cargo-outdated/blob/v${version}/CHANGELOG.md";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ ivan matthiasbeyer ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-pgrx/buildPgrxExtension.nix b/nixpkgs/pkgs/development/tools/rust/cargo-pgrx/buildPgrxExtension.nix
new file mode 100644
index 000000000000..6aae84d3463b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-pgrx/buildPgrxExtension.nix
@@ -0,0 +1,160 @@
+# preBuildAndTest and some small other bits
+# taken from https://github.com/tcdi/pgrx/blob/v0.9.4/nix/extension.nix
+# (but now heavily modified)
+# which uses MIT License with the following license file
+#
+# MIT License
+#
+# Portions Copyright 2019-2021 ZomboDB, LLC.
+# Portions Copyright 2021-2022 Technology Concepts & Design, Inc. <support@tcdi.com>.
+# All rights reserved.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in all
+# copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
+{ lib
+, cargo-pgrx
+, pkg-config
+, rustPlatform
+, stdenv
+, Security
+, writeShellScriptBin
+}:
+
+# The idea behind: Use it mostly like rustPlatform.buildRustPackage and so
+# we hand most of the arguments down.
+#
+# Additional arguments are:
+#   - `postgresql` postgresql package of the version of postgresql this extension should be build for.
+#                  Needs to be the build platform variant.
+#   - `useFakeRustfmt` Whether to use a noop fake command as rustfmt. cargo-pgrx tries to call rustfmt.
+#                      If the generated rust bindings aren't needed to use the extension, its a
+#                      unnecessary and heavy dependency. If you set this to true, you also
+#                      have to add `rustfmt` to `nativeBuildInputs`.
+
+{ buildAndTestSubdir ? null
+, buildType ? "release"
+, buildFeatures ? [ ]
+, cargoBuildFlags ? [ ]
+, postgresql
+# cargo-pgrx calls rustfmt on generated bindings, this is not strictly necessary, so we avoid the
+# dependency here. Set to false and provide rustfmt in nativeBuildInputs, if you need it, e.g.
+# if you include the generated code in the output via postInstall.
+, useFakeRustfmt ? true
+, ...
+} @ args:
+let
+  rustfmtInNativeBuildInputs = lib.lists.any (dep: lib.getName dep == "rustfmt") (args.nativeBuildInputs or []);
+in
+
+assert lib.asserts.assertMsg ((args.installPhase or "") == "")
+  "buildPgrxExtensions overwrites the installPhase, so providing one does nothing";
+assert lib.asserts.assertMsg ((args.buildPhase or "") == "")
+  "buildPgrxExtensions overwrites the buildPhase, so providing one does nothing";
+assert lib.asserts.assertMsg (useFakeRustfmt -> !rustfmtInNativeBuildInputs)
+  "The parameter useFakeRustfmt is set to true, but rustfmt is included in nativeBuildInputs. Either set useFakeRustfmt to false or remove rustfmt from nativeBuildInputs.";
+assert lib.asserts.assertMsg (!useFakeRustfmt -> rustfmtInNativeBuildInputs)
+  "The parameter useFakeRustfmt is set to false, but rustfmt is not included in nativeBuildInputs. Either set useFakeRustfmt to true or add rustfmt from nativeBuildInputs.";
+
+let
+  fakeRustfmt = writeShellScriptBin "rustfmt" ''
+    exit 0
+    '';
+  maybeDebugFlag = lib.optionalString (buildType != "release") "--debug";
+  maybeEnterBuildAndTestSubdir = lib.optionalString (buildAndTestSubdir != null) ''
+    export CARGO_TARGET_DIR="$(pwd)/target"
+    pushd "${buildAndTestSubdir}"
+  '';
+  maybeLeaveBuildAndTestSubdir = lib.optionalString (buildAndTestSubdir != null) "popd";
+
+  pgrxPostgresMajor = lib.versions.major postgresql.version;
+  preBuildAndTest = ''
+    export PGRX_HOME=$(mktemp -d)
+    export PGDATA="$PGRX_HOME/data-${pgrxPostgresMajor}/"
+    cargo-pgrx pgrx init "--pg${pgrxPostgresMajor}" ${postgresql}/bin/pg_config
+    echo "unix_socket_directories = '$(mktemp -d)'" > "$PGDATA/postgresql.conf"
+
+    # This is primarily for Mac or other Nix systems that don't use the nixbld user.
+    export USER="$(whoami)"
+    pg_ctl start
+    createuser -h localhost --superuser --createdb "$USER" || true
+    pg_ctl stop
+  '';
+
+  argsForBuildRustPackage = builtins.removeAttrs args [ "postgresql" "useFakeRustfmt" ];
+
+  # so we don't accidentally `(rustPlatform.buildRustPackage argsForBuildRustPackage) // { ... }` because
+  # we forgot parentheses
+  finalArgs = argsForBuildRustPackage // {
+    buildInputs = (args.buildInputs or [ ]) ++ lib.optionals stdenv.isDarwin [ Security ];
+
+    nativeBuildInputs = (args.nativeBuildInputs or [ ]) ++ [
+      cargo-pgrx
+      postgresql
+      pkg-config
+      rustPlatform.bindgenHook
+    ] ++ lib.optionals useFakeRustfmt [ fakeRustfmt ];
+
+    buildPhase = ''
+      runHook preBuild
+
+      echo "Executing cargo-pgrx buildPhase"
+      ${preBuildAndTest}
+      ${maybeEnterBuildAndTestSubdir}
+
+      NIX_PGLIBDIR="${postgresql}/lib" \
+      PGRX_BUILD_FLAGS="--frozen -j $NIX_BUILD_CORES ${builtins.concatStringsSep " " cargoBuildFlags}" \
+      cargo-pgrx pgrx package \
+        --pg-config ${postgresql}/bin/pg_config \
+        ${maybeDebugFlag} \
+        --features "${builtins.concatStringsSep " " buildFeatures}" \
+        --out-dir "$out"
+
+      ${maybeLeaveBuildAndTestSubdir}
+
+      runHook postBuild
+    '';
+
+    preCheck = preBuildAndTest + args.preCheck or "";
+
+    installPhase = ''
+      runHook preInstall
+
+      echo "Executing buildPgrxExtension install"
+
+      ${maybeEnterBuildAndTestSubdir}
+
+      cargo-pgrx pgrx stop all
+
+      mv $out/${postgresql}/* $out
+      rm -rf $out/nix
+
+      ${maybeLeaveBuildAndTestSubdir}
+
+      runHook postInstall
+    '';
+
+    PGRX_PG_SYS_SKIP_BINDING_REWRITE = "1";
+    CARGO_BUILD_INCREMENTAL = "false";
+    RUST_BACKTRACE = "full";
+
+    checkNoDefaultFeatures = true;
+    checkFeatures = (args.checkFeatures or [ ]) ++ [ "pg_test pg${pgrxPostgresMajor}" ];
+  };
+in
+rustPlatform.buildRustPackage finalArgs
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-pgrx/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-pgrx/default.nix
new file mode 100644
index 000000000000..a0d2657702a5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-pgrx/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchCrate, rustPlatform, pkg-config, openssl, Security }:
+
+let
+  pname = "cargo-pgrx";
+  version = "0.11.2";
+in
+rustPlatform.buildRustPackage rec {
+  inherit version pname;
+
+  src = fetchCrate {
+    inherit version pname;
+    hash = "sha256-8NlpMDFaltTIA8G4JioYm8LaPJ2RGKH5o6sd6lBHmmM=";
+  };
+
+  cargoHash = "sha256-qTb3JV3u42EilaK2jP9oa5D09mkuHyRbGGRs9Rg4TzI=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ openssl ]
+    ++ lib.optionals stdenv.isDarwin [ Security ];
+
+  preCheck = ''
+    export PGRX_HOME=$(mktemp -d)
+  '';
+
+  checkFlags = [
+    # requires pgrx to be properly initialized with cargo pgrx init
+    "--skip=command::schema::tests::test_parse_managed_postmasters"
+  ];
+
+  meta = with lib; {
+    description = "Build Postgres Extensions with Rust!";
+    homepage = "https://github.com/tcdi/pgrx";
+    changelog = "https://github.com/tcdi/pgrx/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ happysalada ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-pgx/0_6_1.nix b/nixpkgs/pkgs/development/tools/rust/cargo-pgx/0_6_1.nix
new file mode 100644
index 000000000000..004b6ed27543
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-pgx/0_6_1.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchCrate, rustPlatform, pkg-config, openssl, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-pgx";
+  version = "0.6.1";
+
+  src = fetchCrate {
+    inherit version pname;
+    sha256 = "sha256-O4eHVbJBudybsPab+zr2eXnfheREMqLAHAKm2GDbfrs=";
+  };
+
+  cargoSha256 = "sha256-MucGrA3qXgJOcT2LMNmoNOhQi8QA3LuqgZEHKycLCCo=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ openssl ]
+    ++ lib.optionals stdenv.isDarwin [ Security ];
+
+  meta = with lib; {
+    description = "Cargo subcommand for ‘pgx’ to make Postgres extension development easy";
+    homepage = "https://github.com/tcdi/pgx/tree/v${version}/cargo-pgx";
+    license = licenses.mit;
+    maintainers = with maintainers; [ typetetris ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-pgx/0_7_1.nix b/nixpkgs/pkgs/development/tools/rust/cargo-pgx/0_7_1.nix
new file mode 100644
index 000000000000..408244f638be
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-pgx/0_7_1.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchCrate, rustPlatform, pkg-config, openssl, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-pgx";
+  version = "0.7.1";
+
+  src = fetchCrate {
+    inherit version pname;
+    sha256 = "sha256-t/gdlrBeP6KFkBFJiZUa8KKVJVYMf6753vQGKJdytss=";
+  };
+
+  cargoSha256 = "sha256-muce9wT4LAJmfNLWWEShARnpZgglXe/KrfxlitmGgXk=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ openssl ]
+    ++ lib.optionals stdenv.isDarwin [ Security ];
+
+  meta = with lib; {
+    description = "Cargo subcommand for ‘pgx’ to make Postgres extension development easy";
+    homepage = "https://github.com/tcdi/pgx/tree/v${version}/cargo-pgx";
+    license = licenses.mit;
+    maintainers = with maintainers; [ typetetris ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-pgx/0_7_4.nix b/nixpkgs/pkgs/development/tools/rust/cargo-pgx/0_7_4.nix
new file mode 100644
index 000000000000..e54a3c6a877e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-pgx/0_7_4.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchCrate, rustPlatform, pkg-config, openssl, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-pgx";
+  version = "0.7.4";
+
+  src = fetchCrate {
+    inherit version pname;
+    sha256 = "sha256-uyMWfxI+A8mws8oZFm2pmvr7hJgSNIb328SrVtIDGdA=";
+  };
+
+  cargoSha256 = "sha256-RgpL/hJdfrtLDANs5U53m5a6aEEAhZ9SFOIM7V8xABM=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ openssl ]
+    ++ lib.optionals stdenv.isDarwin [ Security ];
+
+  meta = with lib; {
+    description = "Cargo subcommand for ‘pgx’ to make Postgres extension development easy";
+    homepage = "https://github.com/tcdi/pgx/tree/v${version}/cargo-pgx";
+    license = licenses.mit;
+    maintainers = with maintainers; [ typetetris ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-pgx/buildPgxExtension.nix b/nixpkgs/pkgs/development/tools/rust/cargo-pgx/buildPgxExtension.nix
new file mode 100644
index 000000000000..4b4f7f9d7486
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-pgx/buildPgxExtension.nix
@@ -0,0 +1,160 @@
+# preBuildAndTest and some small other bits
+# taken from https://github.com/tcdi/pgx/blob/v0.4.5/nix/extension.nix
+# (but now heavily modified)
+# which uses MIT License with the following license file
+#
+# MIT License
+#
+# Portions Copyright 2019-2021 ZomboDB, LLC.
+# Portions Copyright 2021-2022 Technology Concepts & Design, Inc. <support@tcdi.com>.
+# All rights reserved.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in all
+# copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
+{ lib
+, cargo-pgx
+, pkg-config
+, rustPlatform
+, stdenv
+, Security
+, writeShellScriptBin
+}:
+
+# The idea behind: Use it mostly like rustPlatform.buildRustPackage and so
+# we hand most of the arguments down.
+#
+# Additional arguments are:
+#   - `postgresql` postgresql package of the version of postgresql this extension should be build for.
+#                  Needs to be the build platform variant.
+#   - `useFakeRustfmt` Whether to use a noop fake command as rustfmt. cargo-pgx tries to call rustfmt.
+#                      If the generated rust bindings aren't needed to use the extension, its a
+#                      unnecessary and heavy dependency. If you set this to true, you also
+#                      have to add `rustfmt` to `nativeBuildInputs`.
+
+{ buildAndTestSubdir ? null
+, buildType ? "release"
+, buildFeatures ? [ ]
+, cargoBuildFlags ? [ ]
+, postgresql
+# cargo-pgx calls rustfmt on generated bindings, this is not strictly necessary, so we avoid the
+# dependency here. Set to false and provide rustfmt in nativeBuildInputs, if you need it, e.g.
+# if you include the generated code in the output via postInstall.
+, useFakeRustfmt ? true
+, ...
+} @ args:
+let
+  rustfmtInNativeBuildInputs = lib.lists.any (dep: lib.getName dep == "rustfmt") (args.nativeBuildInputs or []);
+in
+
+assert lib.asserts.assertMsg ((args.installPhase or "") == "")
+  "buildPgxExtensions overwrites the installPhase, so providing one does nothing";
+assert lib.asserts.assertMsg ((args.buildPhase or "") == "")
+  "buildPgxExtensions overwrites the buildPhase, so providing one does nothing";
+assert lib.asserts.assertMsg (useFakeRustfmt -> !rustfmtInNativeBuildInputs)
+  "The parameter useFakeRustfmt is set to true, but rustfmt is included in nativeBuildInputs. Either set useFakeRustfmt to false or remove rustfmt from nativeBuildInputs.";
+assert lib.asserts.assertMsg (!useFakeRustfmt -> rustfmtInNativeBuildInputs)
+  "The parameter useFakeRustfmt is set to false, but rustfmt is not included in nativeBuildInputs. Either set useFakeRustfmt to true or add rustfmt from nativeBuildInputs.";
+
+let
+  fakeRustfmt = writeShellScriptBin "rustfmt" ''
+    exit 0
+    '';
+  maybeDebugFlag = lib.optionalString (buildType != "release") "--debug";
+  maybeEnterBuildAndTestSubdir = lib.optionalString (buildAndTestSubdir != null) ''
+    export CARGO_TARGET_DIR="$(pwd)/target"
+    pushd "${buildAndTestSubdir}"
+  '';
+  maybeLeaveBuildAndTestSubdir = lib.optionalString (buildAndTestSubdir != null) "popd";
+
+  pgxPostgresMajor = lib.versions.major postgresql.version;
+  preBuildAndTest = ''
+    export PGX_HOME=$(mktemp -d)
+    export PGDATA="$PGX_HOME/data-${pgxPostgresMajor}/"
+    cargo-pgx pgx init "--pg${pgxPostgresMajor}" ${postgresql}/bin/pg_config
+    echo "unix_socket_directories = '$(mktemp -d)'" > "$PGDATA/postgresql.conf"
+
+    # This is primarily for Mac or other Nix systems that don't use the nixbld user.
+    export USER="$(whoami)"
+    pg_ctl start
+    createuser -h localhost --superuser --createdb "$USER" || true
+    pg_ctl stop
+  '';
+
+  argsForBuildRustPackage = builtins.removeAttrs args [ "postgresql" "useFakeRustfmt" ];
+
+  # so we don't accidentally `(rustPlatform.buildRustPackage argsForBuildRustPackage) // { ... }` because
+  # we forgot parentheses
+  finalArgs = argsForBuildRustPackage // {
+    buildInputs = (args.buildInputs or [ ]) ++ lib.optionals stdenv.isDarwin [ Security ];
+
+    nativeBuildInputs = (args.nativeBuildInputs or [ ]) ++ [
+      cargo-pgx
+      postgresql
+      pkg-config
+      rustPlatform.bindgenHook
+    ] ++ lib.optionals useFakeRustfmt [ fakeRustfmt ];
+
+    buildPhase = ''
+      runHook preBuild
+
+      echo "Executing cargo-pgx buildPhase"
+      ${preBuildAndTest}
+      ${maybeEnterBuildAndTestSubdir}
+
+      NIX_PGLIBDIR="${postgresql}/lib" \
+      PGX_BUILD_FLAGS="--frozen -j $NIX_BUILD_CORES ${builtins.concatStringsSep " " cargoBuildFlags}" \
+      cargo-pgx pgx package \
+        --pg-config ${postgresql}/bin/pg_config \
+        ${maybeDebugFlag} \
+        --features "${builtins.concatStringsSep " " buildFeatures}" \
+        --out-dir "$out"
+
+      ${maybeLeaveBuildAndTestSubdir}
+
+      runHook postBuild
+    '';
+
+    preCheck = preBuildAndTest + args.preCheck or "";
+
+    installPhase = ''
+      runHook preInstall
+
+      echo "Executing buildPgxExtension install"
+
+      ${maybeEnterBuildAndTestSubdir}
+
+      cargo-pgx pgx stop all
+
+      mv $out/${postgresql}/* $out
+      rm -rf $out/nix
+
+      ${maybeLeaveBuildAndTestSubdir}
+
+      runHook postInstall
+    '';
+
+    PGX_PG_SYS_SKIP_BINDING_REWRITE = "1";
+    CARGO_BUILD_INCREMENTAL = "false";
+    RUST_BACKTRACE = "full";
+
+    checkNoDefaultFeatures = true;
+    checkFeatures = (args.checkFeatures or [ ]) ++ [ "pg_test pg${pgxPostgresMajor}" ];
+  };
+in
+rustPlatform.buildRustPackage finalArgs
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-play/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-play/default.nix
new file mode 100644
index 000000000000..441b906ab343
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-play/default.nix
@@ -0,0 +1,28 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-play";
+  version = "0.5.1";
+
+  src = fetchFromGitHub {
+    owner = "fanzeyi";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-Z5zcLQYfQeGybsnt2U+4Z+peRHxNPbDriPMKWhJ+PeA=";
+  };
+
+  cargoSha256 = "sha256-I+keVi0fxUVttMHOGJQWVfIpHEQu/9aTbERa3qiHmnQ=";
+
+  # these tests require internet access
+  checkFlags = [
+    "--skip=dtoa_test"
+    "--skip=infer_override"
+  ];
+
+  meta = with lib; {
+    description = "Run your rust code without setting up cargo";
+    homepage = "https://github.com/fanzeyi/cargo-play";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-profiler/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-profiler/default.nix
new file mode 100644
index 000000000000..88a04885a740
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-profiler/default.nix
@@ -0,0 +1,33 @@
+{ fetchFromGitHub
+, lib
+, rustPlatform }:
+
+let
+  # Constants
+  pname = "cargo-profiler";
+  owner = "svenstaro";
+
+  # Version-specific variables
+  version = "0.2.0";
+  rev = "0a8ab772fd5c0f1579e4847c5d05aa443ffa2bc8";
+  sha256 = "sha256-ZRAbvSMrPtgaWy9RwlykQ3iiPxHCMh/tS5p67/4XqqA=";
+  cargoSha256 = "sha256-qt3S6ZcLEP9ZQoP5+kSQdmBlxdMgGUqLszdU7JkFNVI=";
+
+  inherit (rustPlatform) buildRustPackage;
+in buildRustPackage rec {
+  inherit pname version;
+
+  src = fetchFromGitHub {
+    inherit owner rev sha256;
+    repo = pname;
+  };
+
+  inherit cargoSha256;
+
+  meta = with lib; {
+    description = "Cargo subcommand for profiling Rust binaries";
+    homepage = "https://github.com/svenstaro/cargo-profiler";
+    license = licenses.mit;
+    maintainers = with maintainers; [ lucperkins ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-public-api/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-public-api/default.nix
new file mode 100644
index 000000000000..2b5a83f8d0c1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-public-api/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, rustPlatform
+, fetchCrate
+, pkg-config
+, curl
+, openssl
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-public-api";
+  version = "0.33.1";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-poS8s4rfktNKQ0co8G4RLXUJAeUAGcS8YIvb4W0IFNo=";
+  };
+
+  cargoHash = "sha256-+tmLUxDxI/W2g7cdQD/Ph5wBpW3QbZzH2M/oRXLzsgU=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ curl openssl ]
+    ++ lib.optionals stdenv.isDarwin [ darwin.apple_sdk.frameworks.Security ];
+
+  # Tests fail
+  doCheck = false;
+
+  meta = with lib; {
+    description = "List and diff the public API of Rust library crates between releases and commits. Detect breaking API changes and semver violations";
+    homepage = "https://github.com/Enselic/cargo-public-api";
+    changelog = "https://github.com/Enselic/cargo-public-api/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ matthiasbeyer ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-raze/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-raze/default.nix
new file mode 100644
index 000000000000..b87d9d4570b6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-raze/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, pkg-config
+, curl
+, libgit2
+, openssl
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-raze";
+  version = "0.16.0";
+
+  src = fetchFromGitHub {
+    owner = "google";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-ip0WuBn1b7uN/pAhOl5tfmToK73ZSHK7rucdtufsbCQ=";
+  };
+  sourceRoot = "${src.name}/impl";
+
+  cargoHash = "sha256-hNZgQwhm4UPqmANplZGxG0DYHa31tu06nmqYaCA7Vdg=";
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [
+    libgit2
+    openssl
+    curl
+  ]
+  ++ lib.optional stdenv.isDarwin Security;
+
+  preCheck = lib.optionalString stdenv.isDarwin ''
+    # Darwin issue: Os { code: 24, kind: Uncategorized, message: "Too many open files" }
+    # https://github.com/google/cargo-raze/issues/544
+    ulimit -n 1024
+  '';
+
+  __darwinAllowLocalNetworking = true;
+
+  meta = with lib; {
+    description = "Generate Bazel BUILD files from Cargo dependencies";
+    homepage = "https://github.com/google/cargo-raze";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ elasticdog ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-readme/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-readme/default.nix
new file mode 100644
index 000000000000..15c5ad514524
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-readme/default.nix
@@ -0,0 +1,27 @@
+{ lib, rustPlatform, fetchFromGitHub, fetchpatch }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-readme";
+  version = "3.3.1";
+
+  src = fetchFromGitHub {
+    owner = "webern";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-FFWHADATEfvZvxGwdkj+eTVoq7pnPuoUAhMGTokUkMs=";
+  };
+
+  cargoSha256 = "sha256-OEArMqOiT+PZ+zMRt9h0EzeP7ikFuOYR8mFGtm+xCkQ=";
+
+  # disable doc tests
+  cargoTestFlags = [
+    "--bins" "--lib"
+  ];
+
+  meta = with lib; {
+    description = "Generate README.md from docstrings";
+    homepage = "https://github.com/livioribeiro/cargo-readme";
+    license = with licenses; [ mit asl20 ];
+    maintainers = with maintainers; [ baloo matthiasbeyer ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-release/Cargo.lock b/nixpkgs/pkgs/development/tools/rust/cargo-release/Cargo.lock
new file mode 100644
index 000000000000..6e75ae6d73c4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-release/Cargo.lock
@@ -0,0 +1,2819 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "addr2line"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb"
+dependencies = [
+ "gimli",
+]
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "aho-corasick"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c378d78423fdad8089616f827526ee33c19f2fddbd5de1629152c9593ba4783"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "anstream"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2ab91ebe16eb252986481c5b62f6098f3b698a45e34b5b98200cf20dd2484a44"
+dependencies = [
+ "anstyle",
+ "anstyle-parse",
+ "anstyle-query",
+ "anstyle-wincon",
+ "colorchoice",
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b84bf0a05bbb2a83e5eb6fa36bb6e87baa08193c35ff52bbf6b38d8af2890e46"
+
+[[package]]
+name = "anstyle-parse"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e765fd216e48e067936442276d1d57399e37bce53c264d6fefbe298080cb57ee"
+dependencies = [
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle-query"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b"
+dependencies = [
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "anstyle-wincon"
+version = "3.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0699d10d2f4d628a98ee7b57b289abbc98ff3bad977cb3152709d4bf2330628"
+dependencies = [
+ "anstyle",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.75"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6"
+
+[[package]]
+name = "assert_fs"
+version = "1.0.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f070617a68e5c2ed5d06ee8dd620ee18fb72b99f6c094bed34cf8ab07c875b48"
+dependencies = [
+ "anstyle",
+ "doc-comment",
+ "globwalk",
+ "predicates",
+ "predicates-core",
+ "predicates-tree",
+ "tempfile",
+]
+
+[[package]]
+name = "async-compression"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f658e2baef915ba0f26f1f7c42bfb8e12f532a01f449a090ded75ae7a07e9ba2"
+dependencies = [
+ "flate2",
+ "futures-core",
+ "memchr",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi 0.1.19",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "backtrace"
+version = "0.3.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837"
+dependencies = [
+ "addr2line",
+ "cc",
+ "cfg-if",
+ "libc",
+ "miniz_oxide",
+ "object",
+ "rustc-demangle",
+]
+
+[[package]]
+name = "base16ct"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf"
+
+[[package]]
+name = "base64"
+version = "0.21.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9"
+
+[[package]]
+name = "base64ct"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bitflags"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635"
+
+[[package]]
+name = "block-buffer"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "bstr"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c79ad7fb2dd38f3dabd76b09c6a5a20c038fc0213ef1e9afd30eb777f120f019"
+dependencies = [
+ "memchr",
+ "regex-automata",
+ "serde",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1"
+
+[[package]]
+name = "bytes"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223"
+
+[[package]]
+name = "camino"
+version = "1.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c530edf18f37068ac2d977409ed5cd50d53d73bc653c7647b48eb78976ac9ae2"
+dependencies = [
+ "serde",
+]
+
+[[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-release"
+version = "0.25.0"
+dependencies = [
+ "anyhow",
+ "assert_fs",
+ "bstr",
+ "cargo-test-macro",
+ "cargo-test-support",
+ "cargo_metadata",
+ "clap",
+ "clap-cargo",
+ "concolor-control",
+ "difflib",
+ "dirs-next",
+ "dunce",
+ "env_logger",
+ "git-conventional",
+ "git2",
+ "globset",
+ "ignore",
+ "indexmap 1.9.3",
+ "itertools 0.11.0",
+ "log",
+ "maplit",
+ "once_cell",
+ "predicates",
+ "quick-error",
+ "regex",
+ "reqwest",
+ "semver",
+ "serde",
+ "snapbox",
+ "tame-index",
+ "termcolor",
+ "time",
+ "toml 0.8.6",
+ "toml_edit 0.20.7",
+ "trycmd",
+]
+
+[[package]]
+name = "cargo-test-macro"
+version = "0.1.0"
+source = "git+https://github.com/rust-lang/cargo#809b720f05494388cbd54e3a9e7dedd8b3fc13e3"
+
+[[package]]
+name = "cargo-test-support"
+version = "0.1.0"
+source = "git+https://github.com/rust-lang/cargo#809b720f05494388cbd54e3a9e7dedd8b3fc13e3"
+dependencies = [
+ "anyhow",
+ "cargo-test-macro",
+ "cargo-util",
+ "crates-io",
+ "filetime",
+ "flate2",
+ "git2",
+ "glob",
+ "itertools 0.10.5",
+ "lazy_static",
+ "pasetors",
+ "serde",
+ "serde_json",
+ "snapbox",
+ "tar",
+ "termcolor",
+ "time",
+ "toml 0.7.6",
+ "url",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "cargo-util"
+version = "0.2.4"
+source = "git+https://github.com/rust-lang/cargo#809b720f05494388cbd54e3a9e7dedd8b3fc13e3"
+dependencies = [
+ "anyhow",
+ "core-foundation",
+ "filetime",
+ "hex",
+ "jobserver",
+ "libc",
+ "log",
+ "miow",
+ "same-file",
+ "sha2",
+ "shell-escape",
+ "tempfile",
+ "walkdir",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "cargo_metadata"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb9ac64500cc83ce4b9f8dafa78186aa008c8dea77a09b94cd307fd0cd5022a8"
+dependencies = [
+ "camino",
+ "cargo-platform",
+ "semver",
+ "serde",
+ "serde_json",
+ "thiserror",
+]
+
+[[package]]
+name = "cc"
+version = "1.0.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
+dependencies = [
+ "jobserver",
+ "libc",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "clap"
+version = "4.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac495e00dcec98c83465d5ad66c5c4fabd652fd6686e7c6269b117e729a6f17b"
+dependencies = [
+ "clap_builder",
+ "clap_derive",
+]
+
+[[package]]
+name = "clap-cargo"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38ae55615695e768a76899c8411b4ebacfbe525e964f94fd24f0007b10b45cd3"
+dependencies = [
+ "anstyle",
+ "cargo_metadata",
+ "clap",
+]
+
+[[package]]
+name = "clap_builder"
+version = "4.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c77ed9a32a62e6ca27175d00d29d05ca32e396ea1eb5fb01d8256b669cec7663"
+dependencies = [
+ "anstream",
+ "anstyle",
+ "clap_lex",
+ "strsim",
+ "terminal_size",
+]
+
+[[package]]
+name = "clap_derive"
+version = "4.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1"
+
+[[package]]
+name = "colorchoice"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
+
+[[package]]
+name = "concolor-control"
+version = "0.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7104119c2f80d887239879d0c50e033cd40eac9a3f3561e0684ba7d5d654f4da"
+dependencies = [
+ "atty",
+ "bitflags 1.3.2",
+ "concolor-query",
+]
+
+[[package]]
+name = "concolor-query"
+version = "0.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad159cc964ac8f9d407cbc0aa44b02436c054b541f2b4b5f06972e1efdc54bc7"
+
+[[package]]
+name = "const-oid"
+version = "0.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "520fbf3c07483f94e3e3ca9d0cfd913d7718ef2483d2cfd91c0d9e91474ab913"
+
+[[package]]
+name = "content_inspector"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7bda66e858c683005a53a9a60c69a4aca7eeaa45d124526e389f7aec8e62f38"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "core-foundation"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3e4c1eaa2012c47becbbad2ab175484c2a84d1185b566fb2cc5b8707343dfe58"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crates-io"
+version = "0.36.1"
+source = "git+https://github.com/rust-lang/cargo#809b720f05494388cbd54e3a9e7dedd8b3fc13e3"
+dependencies = [
+ "anyhow",
+ "curl",
+ "percent-encoding",
+ "serde",
+ "serde_json",
+ "url",
+]
+
+[[package]]
+name = "crc32fast"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200"
+dependencies = [
+ "cfg-if",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
+dependencies = [
+ "cfg-if",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46bd5f3f85273295a9d14aedfb86f6aadbff6d8f5295c4a9edb08e819dcf5695"
+dependencies = [
+ "autocfg",
+ "cfg-if",
+ "crossbeam-utils",
+ "memoffset",
+ "scopeguard",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "crypto-bigint"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf4c2f4e1afd912bc40bfd6fed5d9dc1f288e0ba01bfcc835cc5bc3eb13efe15"
+dependencies = [
+ "generic-array",
+ "rand_core",
+ "subtle",
+ "zeroize",
+]
+
+[[package]]
+name = "crypto-common"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+dependencies = [
+ "generic-array",
+ "typenum",
+]
+
+[[package]]
+name = "ct-codecs"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3b7eb4404b8195a9abb6356f4ac07d8ba267045c8d6d220ac4dc992e6cc75df"
+
+[[package]]
+name = "curl"
+version = "0.4.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "509bd11746c7ac09ebd19f0b17782eae80aadee26237658a6b4808afb5c11a22"
+dependencies = [
+ "curl-sys",
+ "libc",
+ "openssl-probe",
+ "openssl-sys",
+ "schannel",
+ "socket2 0.4.9",
+ "winapi",
+]
+
+[[package]]
+name = "curl-sys"
+version = "0.4.63+curl-8.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aeb0fef7046022a1e2ad67a004978f0e3cacb9e3123dc62ce768f92197b771dc"
+dependencies = [
+ "cc",
+ "libc",
+ "libz-sys",
+ "openssl-sys",
+ "pkg-config",
+ "vcpkg",
+ "winapi",
+]
+
+[[package]]
+name = "der"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56acb310e15652100da43d130af8d97b509e95af61aab1c5a7939ef24337ee17"
+dependencies = [
+ "const-oid",
+ "pem-rfc7468",
+ "zeroize",
+]
+
+[[package]]
+name = "difflib"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8"
+
+[[package]]
+name = "digest"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
+dependencies = [
+ "block-buffer",
+ "const-oid",
+ "crypto-common",
+ "subtle",
+]
+
+[[package]]
+name = "dirs-next"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1"
+dependencies = [
+ "cfg-if",
+ "dirs-sys-next",
+]
+
+[[package]]
+name = "dirs-sys-next"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d"
+dependencies = [
+ "libc",
+ "redox_users",
+ "winapi",
+]
+
+[[package]]
+name = "doc-comment"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10"
+
+[[package]]
+name = "dunce"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b"
+
+[[package]]
+name = "ecdsa"
+version = "0.16.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0997c976637b606099b9985693efa3581e84e41f5c11ba5255f88711058ad428"
+dependencies = [
+ "der",
+ "digest",
+ "elliptic-curve",
+ "rfc6979",
+ "signature",
+ "spki",
+]
+
+[[package]]
+name = "ed25519-compact"
+version = "2.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a3d382e8464107391c8706b4c14b087808ecb909f6c15c34114bc42e53a9e4c"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "either"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91"
+
+[[package]]
+name = "elliptic-curve"
+version = "0.13.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "968405c8fdc9b3bf4df0a6638858cc0b52462836ab6b1c87377785dd09cf1c0b"
+dependencies = [
+ "base16ct",
+ "crypto-bigint",
+ "digest",
+ "ff",
+ "generic-array",
+ "group",
+ "hkdf",
+ "pem-rfc7468",
+ "pkcs8",
+ "rand_core",
+ "sec1",
+ "subtle",
+ "zeroize",
+]
+
+[[package]]
+name = "encoding_rs"
+version = "0.8.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "env_logger"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0"
+dependencies = [
+ "humantime",
+ "is-terminal",
+ "log",
+ "regex",
+ "termcolor",
+]
+
+[[package]]
+name = "equivalent"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
+
+[[package]]
+name = "errno"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "errno-dragonfly"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "fastrand"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "ff"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449"
+dependencies = [
+ "rand_core",
+ "subtle",
+]
+
+[[package]]
+name = "fiat-crypto"
+version = "0.1.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e825f6987101665dea6ec934c09ec6d721de7bc1bf92248e1d5810c8cd636b77"
+
+[[package]]
+name = "filetime"
+version = "0.2.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5cbc844cecaee9d4443931972e1289c8ff485cb4cc2767cb03ca139ed6885153"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall 0.2.16",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "flate2"
+version = "1.0.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743"
+dependencies = [
+ "crc32fast",
+ "libz-sys",
+ "miniz_oxide",
+]
+
+[[package]]
+name = "float-cmp"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4"
+dependencies = [
+ "num-traits",
+]
+
+[[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.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff4dd66668b557604244583e3e1e1eada8c5c2e96a6d0d6653ede395b78bbacb"
+dependencies = [
+ "futures-core",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c"
+
+[[package]]
+name = "futures-io"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa"
+
+[[package]]
+name = "futures-sink"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e36d3378ee38c2a36ad710c5d30c2911d752cb941c00c72dbabfb786a7970817"
+
+[[package]]
+name = "futures-task"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2"
+
+[[package]]
+name = "futures-util"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104"
+dependencies = [
+ "futures-core",
+ "futures-io",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+dependencies = [
+ "typenum",
+ "version_check",
+ "zeroize",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "libc",
+ "wasi",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "gimli"
+version = "0.28.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0"
+
+[[package]]
+name = "git-conventional"
+version = "0.12.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b3db1aca6f1a2607dd99beed5d99df831ac73eae5994ff301dae712928e2dac"
+dependencies = [
+ "doc-comment",
+ "unicase",
+ "winnow",
+]
+
+[[package]]
+name = "git2"
+version = "0.17.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b989d6a7ca95a362cf2cfc5ad688b3a467be1f87e480b8dad07fee8c79b0044"
+dependencies = [
+ "bitflags 1.3.2",
+ "libc",
+ "libgit2-sys",
+ "log",
+ "openssl-probe",
+ "openssl-sys",
+ "url",
+]
+
+[[package]]
+name = "glob"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
+
+[[package]]
+name = "globset"
+version = "0.4.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "759c97c1e17c55525b57192c06a267cda0ac5210b222d6b82189a2338fa1c13d"
+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 1.3.2",
+ "ignore",
+ "walkdir",
+]
+
+[[package]]
+name = "group"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63"
+dependencies = [
+ "ff",
+ "rand_core",
+ "subtle",
+]
+
+[[package]]
+name = "h2"
+version = "0.3.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91fc23aa11be92976ef4729127f1a74adf36d8436f7816b185d18df956790833"
+dependencies = [
+ "bytes",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "http",
+ "indexmap 1.9.3",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tracing",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+
+[[package]]
+name = "hashbrown"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a"
+
+[[package]]
+name = "heck"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286"
+
+[[package]]
+name = "hex"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
+
+[[package]]
+name = "hkdf"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "791a029f6b9fc27657f6f188ec6e5e43f6911f6f878e0dc5501396e09809d437"
+dependencies = [
+ "hmac",
+]
+
+[[package]]
+name = "hmac"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
+dependencies = [
+ "digest",
+]
+
+[[package]]
+name = "home"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb"
+dependencies = [
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "http"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482"
+dependencies = [
+ "bytes",
+ "fnv",
+ "itoa",
+]
+
+[[package]]
+name = "http-body"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
+dependencies = [
+ "bytes",
+ "http",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "httparse"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
+
+[[package]]
+name = "httpdate"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
+
+[[package]]
+name = "humantime"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
+
+[[package]]
+name = "humantime-serde"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57a3db5ea5923d99402c94e9feb261dc5ee9b4efa158b0315f788cf549cc200c"
+dependencies = [
+ "humantime",
+ "serde",
+]
+
+[[package]]
+name = "hyper"
+version = "0.14.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468"
+dependencies = [
+ "bytes",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "httparse",
+ "httpdate",
+ "itoa",
+ "pin-project-lite",
+ "socket2 0.4.9",
+ "tokio",
+ "tower-service",
+ "tracing",
+ "want",
+]
+
+[[package]]
+name = "hyper-rustls"
+version = "0.24.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590"
+dependencies = [
+ "futures-util",
+ "http",
+ "hyper",
+ "rustls",
+ "tokio",
+ "tokio-rustls",
+]
+
+[[package]]
+name = "idna"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "ignore"
+version = "0.4.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dbe7873dab538a9a44ad79ede1faf5f30d49f9a5c883ddbab48bce81b64b7492"
+dependencies = [
+ "globset",
+ "lazy_static",
+ "log",
+ "memchr",
+ "regex",
+ "same-file",
+ "thread_local",
+ "walkdir",
+ "winapi-util",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
+dependencies = [
+ "autocfg",
+ "hashbrown 0.12.3",
+]
+
+[[package]]
+name = "indexmap"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d"
+dependencies = [
+ "equivalent",
+ "hashbrown 0.14.0",
+]
+
+[[package]]
+name = "instant"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "io-lifetimes"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2"
+dependencies = [
+ "hermit-abi 0.3.1",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "ipnet"
+version = "2.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3"
+
+[[package]]
+name = "is-terminal"
+version = "0.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "adcf93614601c8129ddf72e2d5633df827ba6551541c6d8c59520a371475be1f"
+dependencies = [
+ "hermit-abi 0.3.1",
+ "io-lifetimes",
+ "rustix 0.37.19",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "itertools"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itertools"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6"
+
+[[package]]
+name = "jobserver"
+version = "0.1.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "js-sys"
+version = "0.3.63"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2f37a4a5928311ac501dee68b3c7613a1037d0edb30c8e5427bd832d55d1b790"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[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.148"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9cdc71e17332e86d2e1d38c1f99edcb6288ee11b815fb1a4b049eaa2114d369b"
+
+[[package]]
+name = "libgit2-sys"
+version = "0.15.2+1.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a80df2e11fb4a61f4ba2ab42dbe7f74468da143f1a75c74e11dee7c813f694fa"
+dependencies = [
+ "cc",
+ "libc",
+ "libssh2-sys",
+ "libz-sys",
+ "openssl-sys",
+ "pkg-config",
+]
+
+[[package]]
+name = "libssh2-sys"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dc8a030b787e2119a731f1951d6a773e2280c660f8ec4b0f5e1505a386e71ee"
+dependencies = [
+ "cc",
+ "libc",
+ "libz-sys",
+ "openssl-sys",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "libz-sys"
+version = "1.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56ee889ecc9568871456d42f603d6a0ce59ff328d291063a45cbdf0036baf6db"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3852614a3bd9ca9804678ba6be5e3b8ce76dfc902cae004e3e0c44051b6e88db"
+
+[[package]]
+name = "log"
+version = "0.4.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "518ef76f2f87365916b142844c16d8fefd85039bc5699050210a7778ee1cd1de"
+
+[[package]]
+name = "maplit"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d"
+
+[[package]]
+name = "memchr"
+version = "2.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5486aed0026218e61b8a01d5fbd5a0a134649abb71a0e53b7bc088529dced86e"
+
+[[package]]
+name = "memoffset"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "mime"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "mio"
+version = "0.8.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2"
+dependencies = [
+ "libc",
+ "wasi",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "miow"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "52ffbca2f655e33c08be35d87278e5b18b89550a37dbd598c20db92f6a471123"
+dependencies = [
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "normalize-line-endings"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be"
+
+[[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.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b"
+dependencies = [
+ "hermit-abi 0.2.6",
+ "libc",
+]
+
+[[package]]
+name = "object"
+version = "0.32.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
+
+[[package]]
+name = "openssl-probe"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
+
+[[package]]
+name = "openssl-src"
+version = "111.26.0+1.1.1u"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "efc62c9f12b22b8f5208c23a7200a442b2e5999f8bdf80233852122b5a4f6f37"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "openssl-sys"
+version = "0.9.88"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c2ce0f250f34a308dcfdbb351f511359857d4ed2134ba715a4eadd46e1ffd617"
+dependencies = [
+ "cc",
+ "libc",
+ "openssl-src",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "orion"
+version = "0.17.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cbe74a766292f94f7e69db5a7bf010eadd944f24186c463fe578a7e637582066"
+dependencies = [
+ "fiat-crypto",
+ "subtle",
+ "zeroize",
+]
+
+[[package]]
+name = "os_pipe"
+version = "1.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ae859aa07428ca9a929b936690f8b12dc5f11dd8c6992a18ca93919f28bc177"
+dependencies = [
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "p384"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70786f51bcc69f6a4c0360e063a4cac5419ef7c5cd5b3c99ad70f3be5ba79209"
+dependencies = [
+ "ecdsa",
+ "elliptic-curve",
+ "primeorder",
+ "sha2",
+]
+
+[[package]]
+name = "pasetors"
+version = "0.6.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "824bf633b85dc1dece2eb07161627ba5d90a951597cd5dbf8d85f4d82b7aea69"
+dependencies = [
+ "ct-codecs",
+ "ed25519-compact",
+ "getrandom",
+ "orion",
+ "p384",
+ "rand_core",
+ "regex",
+ "serde",
+ "serde_json",
+ "sha2",
+ "subtle",
+ "time",
+ "zeroize",
+]
+
+[[package]]
+name = "pem-rfc7468"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412"
+dependencies = [
+ "base64ct",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e"
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "pkcs8"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7"
+dependencies = [
+ "der",
+ "spki",
+]
+
+[[package]]
+name = "pkg-config"
+version = "0.3.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
+
+[[package]]
+name = "predicates"
+version = "3.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09963355b9f467184c04017ced4a2ba2d75cbcb4e7462690d388233253d4b1a9"
+dependencies = [
+ "anstyle",
+ "difflib",
+ "float-cmp",
+ "itertools 0.10.5",
+ "normalize-line-endings",
+ "predicates-core",
+ "regex",
+]
+
+[[package]]
+name = "predicates-core"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b794032607612e7abeb4db69adb4e33590fa6cf1149e95fd7cb00e634b92f174"
+
+[[package]]
+name = "predicates-tree"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "368ba315fb8c5052ab692e68a0eefec6ec57b23a36959c14496f0b0df2c0cecf"
+dependencies = [
+ "predicates-core",
+ "termtree",
+]
+
+[[package]]
+name = "primeorder"
+version = "0.13.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c2fcef82c0ec6eefcc179b978446c399b3cdf73c392c35604e399eee6df1ee3"
+dependencies = [
+ "elliptic-curve",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.67"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d433d9f1a3e8c1263d9456598b16fec66f4acc9a74dacffd35c7bb09b3a1328"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quick-error"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3"
+
+[[package]]
+name = "quote"
+version = "1.0.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b9ab9c7eadfd8df19006f1cf1a4aed13540ed5cbc047010ece5826e10825488"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "rayon"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b"
+dependencies = [
+ "either",
+ "rayon-core",
+]
+
+[[package]]
+name = "rayon-core"
+version = "1.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d"
+dependencies = [
+ "crossbeam-channel",
+ "crossbeam-deque",
+ "crossbeam-utils",
+ "num_cpus",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "redox_users"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b"
+dependencies = [
+ "getrandom",
+ "redox_syscall 0.2.16",
+ "thiserror",
+]
+
+[[package]]
+name = "regex"
+version = "1.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-automata",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
+
+[[package]]
+name = "reqwest"
+version = "0.11.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "046cd98826c46c2ac8ddecae268eb5c2e58628688a5fc7a2643704a73faba95b"
+dependencies = [
+ "async-compression",
+ "base64",
+ "bytes",
+ "encoding_rs",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "hyper",
+ "hyper-rustls",
+ "ipnet",
+ "js-sys",
+ "log",
+ "mime",
+ "once_cell",
+ "percent-encoding",
+ "pin-project-lite",
+ "rustls",
+ "rustls-pemfile",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "system-configuration",
+ "tokio",
+ "tokio-rustls",
+ "tokio-util",
+ "tower-service",
+ "url",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+ "webpki-roots",
+ "winreg",
+]
+
+[[package]]
+name = "rfc6979"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2"
+dependencies = [
+ "hmac",
+ "subtle",
+]
+
+[[package]]
+name = "ring"
+version = "0.17.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb0205304757e5d899b9c2e448b867ffd03ae7f988002e47cd24954391394d0b"
+dependencies = [
+ "cc",
+ "getrandom",
+ "libc",
+ "spin",
+ "untrusted",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
+
+[[package]]
+name = "rustix"
+version = "0.37.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acf8729d8542766f1b2cf77eb034d52f40d375bb8b615d0b147089946e16613d"
+dependencies = [
+ "bitflags 1.3.2",
+ "errno",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys 0.3.8",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "rustix"
+version = "0.38.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2f9da0cbd88f9f09e7814e388301c8414c51c62aa6ce1e4b5c551d49d96e531"
+dependencies = [
+ "bitflags 2.4.0",
+ "errno",
+ "libc",
+ "linux-raw-sys 0.4.8",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "rustls"
+version = "0.21.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "446e14c5cda4f3f30fe71863c34ec70f5ac79d6087097ad0bb433e1be5edf04c"
+dependencies = [
+ "log",
+ "ring",
+ "rustls-webpki",
+ "sct",
+]
+
+[[package]]
+name = "rustls-pemfile"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2"
+dependencies = [
+ "base64",
+]
+
+[[package]]
+name = "rustls-webpki"
+version = "0.101.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041"
+
+[[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 = "schannel"
+version = "0.1.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3"
+dependencies = [
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "scopeguard"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+
+[[package]]
+name = "sct"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "sec1"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0aec48e813d6b90b15f0b8948af3c63483992dee44c03e9930b3eebdabe046e"
+dependencies = [
+ "base16ct",
+ "der",
+ "generic-array",
+ "pkcs8",
+ "subtle",
+ "zeroize",
+]
+
+[[package]]
+name = "semver"
+version = "1.0.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.163"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2113ab51b87a539ae008b5c6c02dc020ffa39afd2d83cffcb3f4eb2722cebec2"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.163"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c805777e3930c8883389c602315a24224bcc738b63905ef87cd1420353ea93e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.96"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_spanned"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12022b835073e5b11e90a14f86838ceb1c8fb0325b72416845c487ac0fa95e80"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde_urlencoded"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
+dependencies = [
+ "form_urlencoded",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "sha2"
+version = "0.10.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "shell-escape"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "45bb67a18fa91266cc7807181f62f9178a6873bfad7dc788c42e6430db40184f"
+
+[[package]]
+name = "shlex"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3"
+
+[[package]]
+name = "signature"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e1788eed21689f9cf370582dfc467ef36ed9c707f073528ddafa8d83e3b8500"
+dependencies = [
+ "digest",
+ "rand_core",
+]
+
+[[package]]
+name = "similar"
+version = "2.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "420acb44afdae038210c99e69aae24109f32f15500aa708e81d46c9f29d55fcf"
+
+[[package]]
+name = "slab"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "smol_str"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "74212e6bbe9a4352329b2f68ba3130c15a3f26fe88ff22dbdc6cdd58fa85e99c"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "snapbox"
+version = "0.4.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b377c0b6e4715c116473d8e40d51e3fa5b0a2297ca9b2a931ba800667b259ed"
+dependencies = [
+ "anstream",
+ "anstyle",
+ "content_inspector",
+ "dunce",
+ "filetime",
+ "libc",
+ "normalize-line-endings",
+ "os_pipe",
+ "similar",
+ "snapbox-macros",
+ "tempfile",
+ "wait-timeout",
+ "walkdir",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "snapbox-macros"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed1559baff8a696add3322b9be3e940d433e7bb4e38d79017205fd37ff28b28e"
+dependencies = [
+ "anstream",
+]
+
+[[package]]
+name = "socket2"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "socket2"
+version = "0.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4031e820eb552adee9295814c0ced9e5cf38ddf1e8b7d566d6de8e2538ea989e"
+dependencies = [
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "spin"
+version = "0.9.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
+
+[[package]]
+name = "spki"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d1e996ef02c474957d681f1b05213dfb0abab947b446a62d37770b23500184a"
+dependencies = [
+ "base64ct",
+ "der",
+]
+
+[[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 = "subtle"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc"
+
+[[package]]
+name = "syn"
+version = "2.0.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "32d41677bcbe24c20c52e7c70b0d8db04134c5d1066bf98662e2871ad200ea3e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "system-configuration"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7"
+dependencies = [
+ "bitflags 1.3.2",
+ "core-foundation",
+ "system-configuration-sys",
+]
+
+[[package]]
+name = "system-configuration-sys"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "tame-index"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "239b73acdc37c857aae3832bdc739b937b038e5e8b148191a79545a2beb5af74"
+dependencies = [
+ "camino",
+ "home",
+ "http",
+ "memchr",
+ "reqwest",
+ "semver",
+ "serde",
+ "serde_json",
+ "smol_str",
+ "thiserror",
+ "toml 0.7.6",
+ "twox-hash",
+]
+
+[[package]]
+name = "tar"
+version = "0.4.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b55807c0344e1e6c04d7c965f5289c39a8d94ae23ed5c0b57aabac549f871c6"
+dependencies = [
+ "filetime",
+ "libc",
+]
+
+[[package]]
+name = "tempfile"
+version = "3.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998"
+dependencies = [
+ "cfg-if",
+ "fastrand",
+ "redox_syscall 0.3.5",
+ "rustix 0.37.19",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6093bad37da69aab9d123a8091e4be0aa4a03e4d601ec641c327398315f62b64"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "terminal_size"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21bebf2b7c9e0a515f6e0f8c51dc0f8e4696391e6f1ff30379559f8365fb0df7"
+dependencies = [
+ "rustix 0.38.15",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "termtree"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76"
+
+[[package]]
+name = "thiserror"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "thread_local"
+version = "1.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+]
+
+[[package]]
+name = "time"
+version = "0.3.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f3403384eaacbca9923fa06940178ac13e4edb725486d70e8e15881d0c836cc"
+dependencies = [
+ "itoa",
+ "serde",
+ "time-core",
+ "time-macros",
+]
+
+[[package]]
+name = "time-core"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb"
+
+[[package]]
+name = "time-macros"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "372950940a5f07bf38dbe211d7283c9e6d7327df53794992d293e534c733d09b"
+dependencies = [
+ "time-core",
+]
+
+[[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.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+[[package]]
+name = "tokio"
+version = "1.33.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4f38200e3ef7995e5ef13baec2f432a6da0aa9ac495b2c0e8f3b7eec2c92d653"
+dependencies = [
+ "backtrace",
+ "bytes",
+ "libc",
+ "mio",
+ "num_cpus",
+ "pin-project-lite",
+ "socket2 0.5.4",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "tokio-rustls"
+version = "0.24.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081"
+dependencies = [
+ "rustls",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.7.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-sink",
+ "pin-project-lite",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "toml"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c17e963a819c331dcacd7ab957d80bc2b9a9c1e71c804826d2f283dd65306542"
+dependencies = [
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "toml_edit 0.19.14",
+]
+
+[[package]]
+name = "toml"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ff9e3abce27ee2c9a37f9ad37238c1bdd4e789c84ba37df76aa4d528f5072cc"
+dependencies = [
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "toml_edit 0.20.7",
+]
+
+[[package]]
+name = "toml_datetime"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.19.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8123f27e969974a3dfba720fdb560be359f57b44302d280ba72e76a74480e8a"
+dependencies = [
+ "indexmap 2.0.0",
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "winnow",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.20.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81"
+dependencies = [
+ "indexmap 2.0.0",
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "winnow",
+]
+
+[[package]]
+name = "tower-service"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
+
+[[package]]
+name = "tracing"
+version = "0.1.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef"
+dependencies = [
+ "pin-project-lite",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
+
+[[package]]
+name = "trycmd"
+version = "0.14.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed009372a42fb103e6f8767b9222925485e03cca032b700d203e2c5b67bee4fb"
+dependencies = [
+ "glob",
+ "humantime",
+ "humantime-serde",
+ "rayon",
+ "serde",
+ "shlex",
+ "snapbox",
+ "toml_edit 0.20.7",
+]
+
+[[package]]
+name = "twox-hash"
+version = "1.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675"
+dependencies = [
+ "cfg-if",
+ "static_assertions",
+]
+
+[[package]]
+name = "typenum"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba"
+
+[[package]]
+name = "unicase"
+version = "2.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6"
+dependencies = [
+ "version_check",
+]
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b15811caf2415fb889178633e7724bad2509101cde276048e013b9def5e51fa0"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "untrusted"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1"
+
+[[package]]
+name = "url"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "percent-encoding",
+]
+
+[[package]]
+name = "utf8parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
+
+[[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 = "wait-timeout"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "walkdir"
+version = "2.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698"
+dependencies = [
+ "same-file",
+ "winapi-util",
+]
+
+[[package]]
+name = "want"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e"
+dependencies = [
+ "try-lock",
+]
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5bba0e8cb82ba49ff4e229459ff22a191bbe9a1cb3a341610c9c33efc27ddf73"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19b04bc93f9d6bdee709f6bd2118f57dd6679cf1176a1af464fca3ab0d66d8fb"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.36"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d1985d03709c53167ce907ff394f5316aa22cb4e12761295c5dc57dacb6297e"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14d6b024f1a526bb0234f52840389927257beb670610081360e5a03c5df9c258"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e128beba882dd1eb6200e1dc92ae6c5dbaa4311aa7bb211ca035779e5efc39f8"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed9d5b4305409d1fc9482fee2d7f9bcbf24b3972bf59817ef757e23982242a93"
+
+[[package]]
+name = "web-sys"
+version = "0.3.63"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3bdd9ef4e984da1187bf8110c5cf5b845fbc87a23602cdf912386a76fcd3a7c2"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "webpki-roots"
+version = "0.25.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14247bb57be4f377dfb94c72830b8ce8fc6beac03cf4bf7b9732eadd414123fc"
+
+[[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"
+
+[[package]]
+name = "windows-sys"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
+dependencies = [
+ "windows-targets 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets 0.48.0",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5"
+dependencies = [
+ "windows_aarch64_gnullvm 0.48.0",
+ "windows_aarch64_msvc 0.48.0",
+ "windows_i686_gnu 0.48.0",
+ "windows_i686_msvc 0.48.0",
+ "windows_x86_64_gnu 0.48.0",
+ "windows_x86_64_gnullvm 0.48.0",
+ "windows_x86_64_msvc 0.48.0",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
+
+[[package]]
+name = "winnow"
+version = "0.5.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7c2e3184b9c4e92ad5167ca73039d0c42476302ab603e2fec4487511f38ccefc"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "winreg"
+version = "0.50.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1"
+dependencies = [
+ "cfg-if",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "zeroize"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9"
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-release/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-release/default.nix
new file mode 100644
index 000000000000..8e9c84797d94
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-release/default.nix
@@ -0,0 +1,57 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, libgit2
+, openssl
+, stdenv
+, curl
+, darwin
+, git
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-release";
+  version = "0.25.0";
+
+  src = fetchFromGitHub {
+    owner = "crate-ci";
+    repo = "cargo-release";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-UJdGbuQfvlZHjCKyHCXPDJ5AdUWJCRUS/vNeTKAwyYI=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "cargo-test-macro-0.1.0" = "sha256-jXWdCc3wxcF02uL2OyMepJ+DmINAHRYtAUH6L16bCjI=";
+    };
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    libgit2
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [
+    curl
+    darwin.apple_sdk.frameworks.SystemConfiguration
+  ];
+
+  nativeCheckInputs = [
+    git
+  ];
+
+  # disable vendored-libgit2 and vendored-openssl
+  buildNoDefaultFeatures = true;
+
+  meta = with lib; {
+    description = ''Cargo subcommand "release": everything about releasing a rust crate'';
+    homepage = "https://github.com/crate-ci/cargo-release";
+    changelog = "https://github.com/crate-ci/cargo-release/blob/v${version}/CHANGELOG.md";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ figsoda gerschtli ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-risczero/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-risczero/default.nix
new file mode 100644
index 000000000000..1bb68d7bbd98
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-risczero/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, stdenv
+, fetchCrate
+, rustPlatform
+, pkg-config
+, openssl
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-risczero";
+  version = "0.17.0";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-UXCZ4l45zcyn2AnfDW6dNdEnXCWL2waNwDTbermgS6M=";
+  };
+
+  cargoHash = "sha256-KkV+ZQAPegbeZKj3ixDSFQEyKwkKeMYceSc27xGtQms=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  # The tests require network access which is not available in sandboxed Nix builds.
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Cargo extension to help create, manage, and test RISC Zero projects.";
+    homepage = "https://risczero.com";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ cameronfyfe ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-rr/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-rr/default.nix
new file mode 100644
index 000000000000..84ec62adf87c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-rr/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, nix-update-script
+, makeWrapper
+, rr
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-rr";
+  version = "0.3.0";
+
+  src = fetchFromGitHub {
+    owner = "danielzfranklin";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-t8pRqeOdaRVG0titQhxezT2aDjljSs//MnRTTsJ73Yo=";
+  };
+
+  cargoSha256 = "sha256-P4r4XRolORdSGAsNg5RutZ2VVRR8rAfiBZNm+vIH3aM=";
+
+  passthru = {
+    updateScript = nix-update-script { };
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postInstall = ''
+    wrapProgram $out/bin/cargo-rr --prefix PATH : ${lib.makeBinPath [ rr ]}
+  '';
+
+  meta = with lib; {
+    description = "Cargo subcommand \"rr\": a light wrapper around rr, the time-travelling debugger";
+    homepage = "https://github.com/danielzfranklin/cargo-rr";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ otavio matthiasbeyer ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-run-bin/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-run-bin/default.nix
new file mode 100644
index 000000000000..d19cf8e9333e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-run-bin/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, rustPlatform
+, fetchCrate
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-run-bin";
+  version = "1.7.2";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-VhDCOTabj/HHc6bYdAUOErvxXOzyY3+e7GccZcb1cSQ=";
+  };
+
+  cargoHash = "sha256-riWWxv3FsBrgzVUWGtKvV4WjhgsXImLpiS9EJ40kCn8=";
+
+  # multiple impurities in tests
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Build, cache, and run binaries scoped in Cargo.toml rather than installing globally. This acts similarly to npm run and gomodrun, and allows your teams to always be running the same tooling versions";
+    homepage = "https://github.com/dustinblackman/cargo-run-bin";
+    changelog = "https://github.com/dustinblackman/cargo-run-bin/blob/v${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ mightyiam matthiasbeyer ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-semver-checks/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-semver-checks/default.nix
new file mode 100644
index 000000000000..1d940aac1e27
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-semver-checks/default.nix
@@ -0,0 +1,60 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, cmake
+, zlib
+, stdenv
+, darwin
+, git
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-semver-checks";
+  version = "0.28.0";
+
+  src = fetchFromGitHub {
+    owner = "obi1kenobi";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-5QXTbsNp36jYrcSDmCXT5Nmhhr9TaWpF3QqaCKv5TTg=";
+  };
+
+  cargoHash = "sha256-uRgSNVleGzD75q16hd/AOl23DT1btWGuNgZ2IprGa7k=";
+
+  nativeBuildInputs = [
+    cmake
+  ];
+
+  buildInputs = [
+    zlib
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.SystemConfiguration
+  ];
+
+  nativeCheckInputs = [
+    git
+  ];
+
+  checkFlags = [
+    # requires nightly version of cargo-rustdoc
+    "--skip=both_passing_manifest_path_and_directory_works"
+    "--skip=verify_binary_contains_lints"
+
+    # requires internet access
+    "--skip=detects_target_dependencies"
+  ];
+
+  preCheck = ''
+    patchShebangs scripts/regenerate_test_rustdocs.sh
+    git init
+    scripts/regenerate_test_rustdocs.sh
+  '';
+
+  meta = with lib; {
+    description = "A tool to scan your Rust crate for semver violations";
+    homepage = "https://github.com/obi1kenobi/cargo-semver-checks";
+    changelog = "https://github.com/obi1kenobi/cargo-semver-checks/releases/tag/v${version}";
+    license = with licenses; [ mit /* or */ asl20 ];
+    maintainers = with maintainers; [ figsoda matthiasbeyer ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-show-asm/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-show-asm/default.nix
new file mode 100644
index 000000000000..61bc24903c49
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-show-asm/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, rustPlatform
+, fetchCrate
+, installShellFiles
+, stdenv
+, nix-update-script
+, callPackage
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-show-asm";
+  version = "0.2.30";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-Xb7+3HSAa8mSNHufcVwshdS9XuofvFnAgaSvT6ZFj0I=";
+  };
+
+  cargoHash = "sha256-SUL5SPpnx6TqoyEguEdCvkNizbZbFjcacn+xe4P1rFk=";
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  postInstall = ''
+    installShellCompletion --cmd cargo-asm \
+      --bash <($out/bin/cargo-asm --bpaf-complete-style-bash) \
+      --fish <($out/bin/cargo-asm --bpaf-complete-style-fish) \
+      --zsh  <($out/bin/cargo-asm --bpaf-complete-style-zsh)
+  '';
+
+  passthru = {
+    updateScript = nix-update-script { };
+    tests = lib.optionalAttrs stdenv.hostPlatform.isx86_64 {
+      test-basic-x86_64 = callPackage ./test-basic-x86_64.nix { };
+    };
+  };
+
+  meta = with lib; {
+    description = "Cargo subcommand showing the assembly, LLVM-IR and MIR generated for Rust code";
+    homepage = "https://github.com/pacak/cargo-show-asm";
+    changelog = "https://github.com/pacak/cargo-show-asm/blob/${version}/Changelog.md";
+    license = with licenses; [ asl20 mit ];
+    maintainers = with maintainers; [ figsoda oxalica matthiasbeyer ];
+    mainProgram = "cargo-asm";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-show-asm/test-basic-x86_64.nix b/nixpkgs/pkgs/development/tools/rust/cargo-show-asm/test-basic-x86_64.nix
new file mode 100644
index 000000000000..ca1738f02185
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-show-asm/test-basic-x86_64.nix
@@ -0,0 +1,18 @@
+{ runCommand, cargo, rustc, cargo-show-asm }:
+runCommand "test-basic" {
+  nativeBuildInputs = [ cargo rustc cargo-show-asm ];
+} ''
+  mkdir -p src
+  cat >Cargo.toml <<EOF
+[package]
+name = "add"
+version = "0.0.0"
+EOF
+  cat >src/lib.rs <<EOF
+#[inline(never)] pub fn add(a: u32, b: u32) -> u32 { a + b }
+EOF
+
+  [[ "$(cargo asm add::add | tee /dev/stderr)" == *"lea eax, "* ]]
+  [[ "$(cargo asm --mir add | tee /dev/stderr)" == *"= Add("* ]]
+  touch $out
+''
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-shuttle/Cargo.lock b/nixpkgs/pkgs/development/tools/rust/cargo-shuttle/Cargo.lock
new file mode 100644
index 000000000000..79e9d4526ce7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-shuttle/Cargo.lock
@@ -0,0 +1,8624 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "addr2line"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb"
+dependencies = [
+ "gimli",
+]
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "ahash"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91429305e9f0a25f6205c5b8e0d2db09e0708a7a6df0f42212bb56c32c8ac97a"
+dependencies = [
+ "cfg-if 1.0.0",
+ "getrandom 0.2.11",
+ "once_cell",
+ "version_check",
+ "zerocopy",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "allocator-api2"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5"
+
+[[package]]
+name = "ambient-authority"
+version = "0.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e9d4ee0d472d1cd2e28c97dfa124b3d8d992e10eb0a035f33f5d12e3a177ba3b"
+
+[[package]]
+name = "android-tzdata"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
+
+[[package]]
+name = "android_system_properties"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "anstream"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2ab91ebe16eb252986481c5b62f6098f3b698a45e34b5b98200cf20dd2484a44"
+dependencies = [
+ "anstyle",
+ "anstyle-parse",
+ "anstyle-query",
+ "anstyle-wincon",
+ "colorchoice",
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87"
+
+[[package]]
+name = "anstyle-parse"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "317b9a89c1868f5ea6ff1d9539a69f45dffc21ce321ac1fd1160dfa48c8e2140"
+dependencies = [
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle-query"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b"
+dependencies = [
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "anstyle-wincon"
+version = "3.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0699d10d2f4d628a98ee7b57b289abbc98ff3bad977cb3152709d4bf2330628"
+dependencies = [
+ "anstyle",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.75"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6"
+
+[[package]]
+name = "arbitrary"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d5a26814d8dcb93b0e5a0ff3c6d80a8843bafb21b39e8e18a6f05471870e110"
+
+[[package]]
+name = "arc-swap"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6"
+
+[[package]]
+name = "arrayref"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545"
+
+[[package]]
+name = "arrayvec"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b"
+
+[[package]]
+name = "arrayvec"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711"
+
+[[package]]
+name = "asn1-rs"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f6fd5ddaf0351dff5b8da21b2fb4ff8e08ddd02857f0bf69c47639106c0fff0"
+dependencies = [
+ "asn1-rs-derive",
+ "asn1-rs-impl",
+ "displaydoc",
+ "nom",
+ "num-traits",
+ "rusticata-macros",
+ "thiserror",
+ "time",
+]
+
+[[package]]
+name = "asn1-rs-derive"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "726535892e8eae7e70657b4c8ea93d26b8553afb1ce617caee529ef96d7dee6c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "synstructure",
+]
+
+[[package]]
+name = "asn1-rs-impl"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2777730b2039ac0f95f093556e61b6d26cebed5393ca6f152717777cec3a42ed"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "assert_cmd"
+version = "2.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88903cb14723e4d4003335bb7f8a14f27691649105346a0f0957466c096adfe6"
+dependencies = [
+ "anstyle",
+ "bstr",
+ "doc-comment",
+ "predicates",
+ "predicates-core",
+ "predicates-tree",
+ "wait-timeout",
+]
+
+[[package]]
+name = "async-channel"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35"
+dependencies = [
+ "concurrent-queue",
+ "event-listener",
+ "futures-core",
+]
+
+[[package]]
+name = "async-lock"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b"
+dependencies = [
+ "event-listener",
+]
+
+[[package]]
+name = "async-session"
+version = "3.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07da4ce523b4e2ebaaf330746761df23a465b951a83d84bbce4233dabedae630"
+dependencies = [
+ "anyhow",
+ "async-lock",
+ "async-trait",
+ "base64 0.13.1",
+ "bincode",
+ "blake3",
+ "chrono",
+ "hmac 0.11.0",
+ "log",
+ "rand 0.8.5",
+ "serde",
+ "serde_json",
+ "sha2 0.9.9",
+]
+
+[[package]]
+name = "async-stream"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51"
+dependencies = [
+ "async-stream-impl",
+ "futures-core",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "async-stream-impl"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "async-stripe"
+version = "0.25.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1b39347f478f57a40cbaf82cbaebb4a350acc757cda30fc7ff88707a11d1d81"
+dependencies = [
+ "futures-util",
+ "http-types",
+ "hyper",
+ "hyper-rustls",
+ "serde",
+ "serde_json",
+ "serde_path_to_error",
+ "serde_qs 0.10.1",
+ "smart-default",
+ "smol_str",
+ "thiserror",
+ "tokio",
+]
+
+[[package]]
+name = "async-trait"
+version = "0.1.74"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a66537f1bb974b254c98ed142ff995236e81b9d0fe4db0575f46612cb15eb0f9"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "atoi"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "aws-config"
+version = "0.56.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc6b3804dca60326e07205179847f17a4fce45af3a1106939177ad41ac08a6de"
+dependencies = [
+ "aws-credential-types",
+ "aws-http",
+ "aws-sdk-sso",
+ "aws-sdk-sts",
+ "aws-smithy-async",
+ "aws-smithy-client",
+ "aws-smithy-http",
+ "aws-smithy-http-tower",
+ "aws-smithy-json",
+ "aws-smithy-types",
+ "aws-types",
+ "bytes",
+ "fastrand 2.0.1",
+ "hex",
+ "http",
+ "hyper",
+ "ring 0.16.20",
+ "time",
+ "tokio",
+ "tower",
+ "tracing",
+ "zeroize",
+]
+
+[[package]]
+name = "aws-credential-types"
+version = "0.56.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70a66ac8ef5fa9cf01c2d999f39d16812e90ec1467bd382cbbb74ba23ea86201"
+dependencies = [
+ "aws-smithy-async",
+ "aws-smithy-types",
+ "fastrand 2.0.1",
+ "tokio",
+ "tracing",
+ "zeroize",
+]
+
+[[package]]
+name = "aws-http"
+version = "0.56.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3e626370f9ba806ae4c439e49675fd871f5767b093075cdf4fef16cac42ba900"
+dependencies = [
+ "aws-credential-types",
+ "aws-smithy-http",
+ "aws-smithy-types",
+ "aws-types",
+ "bytes",
+ "http",
+ "http-body",
+ "lazy_static",
+ "percent-encoding",
+ "pin-project-lite",
+ "tracing",
+]
+
+[[package]]
+name = "aws-runtime"
+version = "0.56.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07ac5cf0ff19c1bca0cea7932e11b239d1025a45696a4f44f72ea86e2b8bdd07"
+dependencies = [
+ "aws-credential-types",
+ "aws-http",
+ "aws-sigv4",
+ "aws-smithy-async",
+ "aws-smithy-http",
+ "aws-smithy-runtime-api",
+ "aws-smithy-types",
+ "aws-types",
+ "fastrand 2.0.1",
+ "http",
+ "percent-encoding",
+ "tracing",
+ "uuid",
+]
+
+[[package]]
+name = "aws-sdk-rds"
+version = "0.33.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "45177b4af2c0a04d6b19891f70062609aed49389943882e1fa96f691c6370960"
+dependencies = [
+ "aws-credential-types",
+ "aws-http",
+ "aws-runtime",
+ "aws-smithy-async",
+ "aws-smithy-client",
+ "aws-smithy-http",
+ "aws-smithy-json",
+ "aws-smithy-query",
+ "aws-smithy-runtime",
+ "aws-smithy-runtime-api",
+ "aws-smithy-types",
+ "aws-smithy-xml",
+ "aws-types",
+ "http",
+ "regex",
+ "tokio-stream",
+ "tracing",
+]
+
+[[package]]
+name = "aws-sdk-sso"
+version = "0.30.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "903f888ff190e64f6f5c83fb0f8d54f9c20481f1dc26359bb8896f5d99908949"
+dependencies = [
+ "aws-credential-types",
+ "aws-http",
+ "aws-runtime",
+ "aws-smithy-async",
+ "aws-smithy-client",
+ "aws-smithy-http",
+ "aws-smithy-json",
+ "aws-smithy-runtime",
+ "aws-smithy-runtime-api",
+ "aws-smithy-types",
+ "aws-types",
+ "bytes",
+ "http",
+ "regex",
+ "tokio-stream",
+ "tracing",
+]
+
+[[package]]
+name = "aws-sdk-sts"
+version = "0.30.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a47ad6bf01afc00423d781d464220bf69fb6a674ad6629cbbcb06d88cdc2be82"
+dependencies = [
+ "aws-credential-types",
+ "aws-http",
+ "aws-runtime",
+ "aws-smithy-async",
+ "aws-smithy-client",
+ "aws-smithy-http",
+ "aws-smithy-json",
+ "aws-smithy-query",
+ "aws-smithy-runtime",
+ "aws-smithy-runtime-api",
+ "aws-smithy-types",
+ "aws-smithy-xml",
+ "aws-types",
+ "http",
+ "regex",
+ "tracing",
+]
+
+[[package]]
+name = "aws-sigv4"
+version = "0.56.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7b28f4910bb956b7ab320b62e98096402354eca976c587d1eeccd523d9bac03"
+dependencies = [
+ "aws-smithy-http",
+ "form_urlencoded",
+ "hex",
+ "hmac 0.12.1",
+ "http",
+ "once_cell",
+ "percent-encoding",
+ "regex",
+ "sha2 0.10.8",
+ "time",
+ "tracing",
+]
+
+[[package]]
+name = "aws-smithy-async"
+version = "0.56.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2cdb73f85528b9d19c23a496034ac53703955a59323d581c06aa27b4e4e247af"
+dependencies = [
+ "futures-util",
+ "pin-project-lite",
+ "tokio",
+ "tokio-stream",
+]
+
+[[package]]
+name = "aws-smithy-client"
+version = "0.56.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c27b2756264c82f830a91cb4d2d485b2d19ad5bea476d9a966e03d27f27ba59a"
+dependencies = [
+ "aws-smithy-async",
+ "aws-smithy-http",
+ "aws-smithy-http-tower",
+ "aws-smithy-types",
+ "bytes",
+ "fastrand 2.0.1",
+ "http",
+ "http-body",
+ "hyper",
+ "hyper-rustls",
+ "lazy_static",
+ "pin-project-lite",
+ "rustls",
+ "tokio",
+ "tower",
+ "tracing",
+]
+
+[[package]]
+name = "aws-smithy-http"
+version = "0.56.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54cdcf365d8eee60686885f750a34c190e513677db58bbc466c44c588abf4199"
+dependencies = [
+ "aws-smithy-types",
+ "bytes",
+ "bytes-utils",
+ "futures-core",
+ "http",
+ "http-body",
+ "hyper",
+ "once_cell",
+ "percent-encoding",
+ "pin-project-lite",
+ "pin-utils",
+ "tokio",
+ "tokio-util",
+ "tracing",
+]
+
+[[package]]
+name = "aws-smithy-http-tower"
+version = "0.56.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "822de399d0ce62829a69dfa8c5cd08efdbe61a7426b953e2268f8b8b52a607bd"
+dependencies = [
+ "aws-smithy-http",
+ "aws-smithy-types",
+ "bytes",
+ "http",
+ "http-body",
+ "pin-project-lite",
+ "tower",
+ "tracing",
+]
+
+[[package]]
+name = "aws-smithy-json"
+version = "0.56.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fb1e7ab8fa7ad10c193af7ae56d2420989e9f4758bf03601a342573333ea34f"
+dependencies = [
+ "aws-smithy-types",
+]
+
+[[package]]
+name = "aws-smithy-query"
+version = "0.56.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28556a3902091c1f768a34f6c998028921bdab8d47d92586f363f14a4a32d047"
+dependencies = [
+ "aws-smithy-types",
+ "urlencoding",
+]
+
+[[package]]
+name = "aws-smithy-runtime"
+version = "0.56.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "745e096b3553e7e0f40622aa04971ce52765af82bebdeeac53aa6fc82fe801e6"
+dependencies = [
+ "aws-smithy-async",
+ "aws-smithy-client",
+ "aws-smithy-http",
+ "aws-smithy-runtime-api",
+ "aws-smithy-types",
+ "bytes",
+ "fastrand 2.0.1",
+ "http",
+ "http-body",
+ "once_cell",
+ "pin-project-lite",
+ "pin-utils",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "aws-smithy-runtime-api"
+version = "0.56.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93d0ae0c9cfd57944e9711ea610b48a963fb174a53aabacc08c5794a594b1d02"
+dependencies = [
+ "aws-smithy-async",
+ "aws-smithy-http",
+ "aws-smithy-types",
+ "bytes",
+ "http",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "aws-smithy-types"
+version = "0.56.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d90dbc8da2f6be461fa3c1906b20af8f79d14968fe47f2b7d29d086f62a51728"
+dependencies = [
+ "base64-simd",
+ "itoa",
+ "num-integer",
+ "ryu",
+ "serde",
+ "time",
+]
+
+[[package]]
+name = "aws-smithy-xml"
+version = "0.56.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e01d2dedcdd8023043716cfeeb3c6c59f2d447fce365d8e194838891794b23b6"
+dependencies = [
+ "xmlparser",
+]
+
+[[package]]
+name = "aws-types"
+version = "0.56.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85aa0451bf8af1bf22a4f028d5d28054507a14be43cb8ac0597a8471fba9edfe"
+dependencies = [
+ "aws-credential-types",
+ "aws-smithy-async",
+ "aws-smithy-client",
+ "aws-smithy-http",
+ "aws-smithy-types",
+ "http",
+ "rustc_version 0.4.0",
+ "tracing",
+]
+
+[[package]]
+name = "axum"
+version = "0.6.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b829e4e32b91e643de6eafe82b1d90675f5874230191a4ffbc1b336dec4d6bf"
+dependencies = [
+ "async-trait",
+ "axum-core",
+ "base64 0.21.5",
+ "bitflags 1.3.2",
+ "bytes",
+ "futures-util",
+ "headers",
+ "http",
+ "http-body",
+ "hyper",
+ "itoa",
+ "matchit",
+ "memchr",
+ "mime",
+ "percent-encoding",
+ "pin-project-lite",
+ "rustversion",
+ "serde",
+ "serde_json",
+ "serde_path_to_error",
+ "serde_urlencoded",
+ "sha1",
+ "sync_wrapper",
+ "tokio",
+ "tokio-tungstenite",
+ "tower",
+ "tower-layer",
+ "tower-service",
+]
+
+[[package]]
+name = "axum-core"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c"
+dependencies = [
+ "async-trait",
+ "bytes",
+ "futures-util",
+ "http",
+ "http-body",
+ "mime",
+ "rustversion",
+ "tower-layer",
+ "tower-service",
+]
+
+[[package]]
+name = "axum-extra"
+version = "0.7.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a93e433be9382c737320af3924f7d5fc6f89c155cf2bf88949d8f5126fab283f"
+dependencies = [
+ "axum",
+ "axum-core",
+ "bytes",
+ "cookie",
+ "futures-util",
+ "http",
+ "http-body",
+ "mime",
+ "pin-project-lite",
+ "serde",
+ "tokio",
+ "tower",
+ "tower-layer",
+ "tower-service",
+]
+
+[[package]]
+name = "axum-server"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "447f28c85900215cc1bea282f32d4a2f22d55c5a300afdfbc661c8d6a632e063"
+dependencies = [
+ "arc-swap",
+ "bytes",
+ "futures-util",
+ "http",
+ "http-body",
+ "hyper",
+ "pin-project-lite",
+ "rustls",
+ "rustls-pemfile",
+ "tokio",
+ "tokio-rustls",
+ "tower-service",
+]
+
+[[package]]
+name = "axum-sessions"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "714cad544cd87d8da821cda715bb9aaa5d4d1adbdb64c549b18138e3cbf93c44"
+dependencies = [
+ "async-session",
+ "axum",
+ "axum-extra",
+ "futures",
+ "http-body",
+ "tokio",
+ "tower",
+ "tracing",
+]
+
+[[package]]
+name = "backtrace"
+version = "0.3.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837"
+dependencies = [
+ "addr2line",
+ "cc",
+ "cfg-if 1.0.0",
+ "libc",
+ "miniz_oxide",
+ "object",
+ "rustc-demangle",
+]
+
+[[package]]
+name = "base64"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
+
+[[package]]
+name = "base64"
+version = "0.21.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9"
+
+[[package]]
+name = "base64-simd"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "339abbe78e73178762e23bea9dfd08e697eb3f3301cd4be981c0f78ba5859195"
+dependencies = [
+ "outref",
+ "vsimd",
+]
+
+[[package]]
+name = "base64ct"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b"
+
+[[package]]
+name = "basic-toml"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2f2139706359229bfa8f19142ac1155b4b80beafb7a60471ac5dd109d4a19778"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "bincode"
+version = "1.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "bit-set"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1"
+dependencies = [
+ "bit-vec",
+]
+
+[[package]]
+name = "bit-vec"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bitflags"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "bitvec"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c"
+dependencies = [
+ "funty",
+ "radium",
+ "tap",
+ "wyz",
+]
+
+[[package]]
+name = "blake3"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b64485778c4f16a6a5a9d335e80d449ac6c70cdd6a06d2af18a6f6f775a125b3"
+dependencies = [
+ "arrayref",
+ "arrayvec 0.5.2",
+ "cc",
+ "cfg-if 0.1.10",
+ "constant_time_eq",
+ "crypto-mac 0.8.0",
+ "digest 0.9.0",
+]
+
+[[package]]
+name = "block-buffer"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "block-buffer"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "bollard"
+version = "0.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f03db470b3c0213c47e978da93200259a1eb4dae2e5512cba9955e2b540a6fc6"
+dependencies = [
+ "base64 0.21.5",
+ "bollard-stubs",
+ "bytes",
+ "futures-core",
+ "futures-util",
+ "hex",
+ "http",
+ "hyper",
+ "hyperlocal",
+ "log",
+ "pin-project-lite",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "serde_repr",
+ "serde_urlencoded",
+ "thiserror",
+ "tokio",
+ "tokio-util",
+ "url",
+ "winapi",
+]
+
+[[package]]
+name = "bollard-stubs"
+version = "1.43.0-rc.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b58071e8fd9ec1e930efd28e3a90c1251015872a2ce49f81f36421b86466932e"
+dependencies = [
+ "serde",
+ "serde_repr",
+ "serde_with 3.4.0",
+]
+
+[[package]]
+name = "bson"
+version = "2.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "58da0ae1e701ea752cc46c1bb9f39d5ecefc7395c3ecd526261a566d4f16e0c2"
+dependencies = [
+ "ahash",
+ "base64 0.13.1",
+ "bitvec",
+ "hex",
+ "indexmap 1.9.3",
+ "js-sys",
+ "once_cell",
+ "rand 0.8.5",
+ "serde",
+ "serde_bytes",
+ "serde_json",
+ "time",
+ "uuid",
+]
+
+[[package]]
+name = "bstr"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "542f33a8835a0884b006a0c3df3dadd99c0c3f296ed26c2fdc8028e01ad6230c"
+dependencies = [
+ "memchr",
+ "regex-automata 0.4.3",
+ "serde",
+]
+
+[[package]]
+name = "btoi"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9dd6407f73a9b8b6162d8a2ef999fe6afd7cc15902ebf42c5cd296addf17e0ad"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec"
+
+[[package]]
+name = "byteorder"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
+
+[[package]]
+name = "bytes"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223"
+
+[[package]]
+name = "bytes-utils"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7dafe3a8757b027e2be6e4e5601ed563c55989fcf1546e933c66c8eb3a058d35"
+dependencies = [
+ "bytes",
+ "either",
+]
+
+[[package]]
+name = "camino"
+version = "1.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c59e92b5a388f549b863a7bea62612c09f24c8393560709a54558a9abdfb3b9c"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "cap-fs-ext"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b779b2d0a001c125b4584ad586268fb4b92d957bff8d26d7fe0dd78283faa814"
+dependencies = [
+ "cap-primitives",
+ "cap-std",
+ "io-lifetimes",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "cap-net-ext"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ffc30dee200c20b4dcb80572226f42658e1d9c4b668656d7cc59c33d50e396e"
+dependencies = [
+ "cap-primitives",
+ "cap-std",
+ "rustix",
+ "smallvec",
+]
+
+[[package]]
+name = "cap-primitives"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2bf30c373a3bee22c292b1b6a7a26736a38376840f1af3d2d806455edf8c3899"
+dependencies = [
+ "ambient-authority",
+ "fs-set-times",
+ "io-extras",
+ "io-lifetimes",
+ "ipnet",
+ "maybe-owned",
+ "rustix",
+ "windows-sys 0.48.0",
+ "winx",
+]
+
+[[package]]
+name = "cap-rand"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "577de6cff7c2a47d6b13efe5dd28bf116bd7f8f7db164ea95b7cc2640711f522"
+dependencies = [
+ "ambient-authority",
+ "rand 0.8.5",
+]
+
+[[package]]
+name = "cap-std"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "84bade423fa6403efeebeafe568fdb230e8c590a275fba2ba978dd112efcf6e9"
+dependencies = [
+ "cap-primitives",
+ "io-extras",
+ "io-lifetimes",
+ "rustix",
+]
+
+[[package]]
+name = "cap-time-ext"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8f52b3c8f4abfe3252fd0a071f3004aaa3b18936ec97bdbd8763ce03aff6247"
+dependencies = [
+ "cap-primitives",
+ "once_cell",
+ "rustix",
+ "winx",
+]
+
+[[package]]
+name = "cargo-lock"
+version = "9.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e11c675378efb449ed3ce8de78d75d0d80542fc98487c26aba28eb3b82feac72"
+dependencies = [
+ "semver 1.0.20",
+ "serde",
+ "toml 0.7.8",
+ "url",
+]
+
+[[package]]
+name = "cargo-platform"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e34637b3140142bdf929fb439e8aa4ebad7651ebf7b1080b3930aa16ac1459ff"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "cargo-shuttle"
+version = "0.34.1"
+dependencies = [
+ "anyhow",
+ "assert_cmd",
+ "async-trait",
+ "bollard",
+ "cargo_metadata 0.18.1",
+ "chrono",
+ "clap",
+ "clap_complete",
+ "crossterm 0.27.0",
+ "dialoguer",
+ "dirs 5.0.1",
+ "dunce",
+ "flate2",
+ "futures",
+ "git2",
+ "gix",
+ "globset",
+ "headers",
+ "home",
+ "ignore",
+ "indicatif",
+ "indoc",
+ "percent-encoding",
+ "portpicker",
+ "regex",
+ "reqwest",
+ "reqwest-middleware",
+ "reqwest-retry",
+ "rexpect",
+ "rmp-serde",
+ "semver 1.0.20",
+ "serde",
+ "serde_json",
+ "shuttle-common",
+ "shuttle-common-tests",
+ "shuttle-proto",
+ "shuttle-service",
+ "strum 0.25.0",
+ "tar",
+ "tempfile",
+ "tokio",
+ "tokio-tungstenite",
+ "tokiotest-httpserver",
+ "toml 0.8.8",
+ "toml_edit 0.20.7",
+ "tonic 0.10.2",
+ "tracing",
+ "tracing-subscriber",
+ "url",
+ "uuid",
+ "walkdir",
+ "webbrowser",
+]
+
+[[package]]
+name = "cargo_metadata"
+version = "0.15.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eee4243f1f26fc7a42710e7439c149e2b10b05472f88090acce52632f231a73a"
+dependencies = [
+ "camino",
+ "cargo-platform",
+ "semver 1.0.20",
+ "serde",
+ "serde_json",
+ "thiserror",
+]
+
+[[package]]
+name = "cargo_metadata"
+version = "0.18.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037"
+dependencies = [
+ "camino",
+ "cargo-platform",
+ "semver 1.0.20",
+ "serde",
+ "serde_json",
+ "thiserror",
+]
+
+[[package]]
+name = "cc"
+version = "1.0.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
+dependencies = [
+ "jobserver",
+ "libc",
+]
+
+[[package]]
+name = "cesu8"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c"
+
+[[package]]
+name = "cfg-expr"
+version = "0.15.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "03915af431787e6ffdcc74c645077518c6b6e01f80b761e0fbbfa288536311b3"
+dependencies = [
+ "smallvec",
+ "target-lexicon",
+]
+
+[[package]]
+name = "cfg-if"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
+
+[[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.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38"
+dependencies = [
+ "android-tzdata",
+ "iana-time-zone",
+ "num-traits",
+ "serde",
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "clap"
+version = "4.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2275f18819641850fa26c89acc84d465c1bf91ce57bc2748b28c420473352f64"
+dependencies = [
+ "clap_builder",
+ "clap_derive",
+]
+
+[[package]]
+name = "clap_builder"
+version = "4.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07cdf1b148b25c1e1f7a42225e30a0d99a615cd4637eae7365548dd4529b95bc"
+dependencies = [
+ "anstream",
+ "anstyle",
+ "clap_lex",
+ "strsim",
+]
+
+[[package]]
+name = "clap_complete"
+version = "4.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bffe91f06a11b4b9420f62103854e90867812cd5d01557f853c5ee8e791b12ae"
+dependencies = [
+ "clap",
+]
+
+[[package]]
+name = "clap_derive"
+version = "4.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1"
+
+[[package]]
+name = "clru"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8191fa7302e03607ff0e237d4246cc043ff5b3cb9409d995172ba3bea16b807"
+
+[[package]]
+name = "colorchoice"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
+
+[[package]]
+name = "colored"
+version = "2.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2674ec482fbc38012cf31e6c42ba0177b431a0cb6f15fe40efa5aab1bda516f6"
+dependencies = [
+ "is-terminal",
+ "lazy_static",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "combine"
+version = "4.6.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4"
+dependencies = [
+ "bytes",
+ "memchr",
+]
+
+[[package]]
+name = "comfy-table"
+version = "6.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e959d788268e3bf9d35ace83e81b124190378e4c91c9067524675e33394b8ba"
+dependencies = [
+ "crossterm 0.26.1",
+ "strum 0.24.1",
+ "strum_macros 0.24.3",
+ "unicode-width",
+]
+
+[[package]]
+name = "comma"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "55b672471b4e9f9e95499ea597ff64941a309b2cdbffcc46f2cc5e2d971fd335"
+
+[[package]]
+name = "concurrent-queue"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f057a694a54f12365049b0958a1685bb52d567f5593b355fbf685838e873d400"
+dependencies = [
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "console"
+version = "0.15.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c926e00cc70edefdc64d3a5ff31cc65bb97a3460097762bd23afb4d8145fccf8"
+dependencies = [
+ "encode_unicode",
+ "lazy_static",
+ "libc",
+ "unicode-width",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "const-oid"
+version = "0.9.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28c122c3980598d243d63d9a704629a2d748d101f278052ff068be5a4423ab6f"
+
+[[package]]
+name = "constant_time_eq"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc"
+
+[[package]]
+name = "convert_case"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e"
+
+[[package]]
+name = "cookie"
+version = "0.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7efb37c3e1ccb1ff97164ad95ac1606e8ccd35b3fa0a7d99a304c7f4a428cc24"
+dependencies = [
+ "base64 0.21.5",
+ "hmac 0.12.1",
+ "percent-encoding",
+ "rand 0.8.5",
+ "sha2 0.10.8",
+ "subtle",
+ "time",
+ "version_check",
+]
+
+[[package]]
+name = "core-foundation"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
+
+[[package]]
+name = "cpp_demangle"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eeaa953eaad386a53111e47172c2fedba671e5684c8dd601a5f474f4f118710f"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce420fe07aecd3e67c5f910618fe65e94158f6dcc0adf44e00d69ce2bdfe0fd0"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "cranelift-bforest"
+version = "0.100.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "751cbf89e513f283c0641eb7f95dc72fda5051dd95ca203d1dc45e26bc89dba8"
+dependencies = [
+ "cranelift-entity",
+]
+
+[[package]]
+name = "cranelift-codegen"
+version = "0.100.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "210730edc05121e915201cc36595e1f00062094669fa07ac362340e3627b3dc5"
+dependencies = [
+ "bumpalo",
+ "cranelift-bforest",
+ "cranelift-codegen-meta",
+ "cranelift-codegen-shared",
+ "cranelift-control",
+ "cranelift-entity",
+ "cranelift-isle",
+ "gimli",
+ "hashbrown 0.14.2",
+ "log",
+ "regalloc2",
+ "smallvec",
+ "target-lexicon",
+]
+
+[[package]]
+name = "cranelift-codegen-meta"
+version = "0.100.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5dc7fdf210c53db047f3eaf49b3a89efee0cc3d9a2ce0c0f0236933273d0c53"
+dependencies = [
+ "cranelift-codegen-shared",
+]
+
+[[package]]
+name = "cranelift-codegen-shared"
+version = "0.100.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f46875cc87d963119d78fe5c19852757dc6eea3cb9622c0df69c26b242cd44b4"
+
+[[package]]
+name = "cranelift-control"
+version = "0.100.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "375dca8f58d8a801a85e11730c1529c5c4a9c3593dfb12118391ac437b037155"
+dependencies = [
+ "arbitrary",
+]
+
+[[package]]
+name = "cranelift-entity"
+version = "0.100.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc619b86fe3c72f43fc417c9fd67a04ec0c98296e5940922d9fd9e6eedf72521"
+dependencies = [
+ "serde",
+ "serde_derive",
+]
+
+[[package]]
+name = "cranelift-frontend"
+version = "0.100.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7eb607fd19ae264da18f9f2532e7302b826f7fbf77bf88365fc075f2e3419436"
+dependencies = [
+ "cranelift-codegen",
+ "log",
+ "smallvec",
+ "target-lexicon",
+]
+
+[[package]]
+name = "cranelift-isle"
+version = "0.100.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9fe806a6470dddfdf79e878af6a96afb1235a09fe3e21f9e0c2f18d402820432"
+
+[[package]]
+name = "cranelift-native"
+version = "0.100.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fac7f1722660b10af1f7229c0048f716bfd8bd344549b0e06e3eb6417ec3fe5b"
+dependencies = [
+ "cranelift-codegen",
+ "libc",
+ "target-lexicon",
+]
+
+[[package]]
+name = "cranelift-wasm"
+version = "0.100.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1b65810be56b619c3c55debade92798d999f34bf0670370c578afab5d905f06"
+dependencies = [
+ "cranelift-codegen",
+ "cranelift-entity",
+ "cranelift-frontend",
+ "itertools 0.10.5",
+ "log",
+ "smallvec",
+ "wasmparser 0.112.0",
+ "wasmtime-types",
+]
+
+[[package]]
+name = "crc"
+version = "3.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "86ec7a15cbe22e59248fc7eadb1907dab5ba09372595da4d73dd805ed4417dfe"
+dependencies = [
+ "crc-catalog",
+]
+
+[[package]]
+name = "crc-catalog"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5"
+
+[[package]]
+name = "crc32fast"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200"
+dependencies = [
+ "cfg-if 1.0.0",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
+dependencies = [
+ "cfg-if 1.0.0",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7"
+dependencies = [
+ "autocfg",
+ "cfg-if 1.0.0",
+ "crossbeam-utils",
+ "memoffset 0.9.0",
+ "scopeguard",
+]
+
+[[package]]
+name = "crossbeam-queue"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d1cfb3ea8a53f37c40dea2c7bedcbd88bdfae54f5e2175d6ecaff1c988353add"
+dependencies = [
+ "cfg-if 1.0.0",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "crossterm"
+version = "0.26.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a84cda67535339806297f1b331d6dd6320470d2a0fe65381e79ee9e156dd3d13"
+dependencies = [
+ "bitflags 1.3.2",
+ "crossterm_winapi",
+ "libc",
+ "mio",
+ "parking_lot 0.12.1",
+ "signal-hook",
+ "signal-hook-mio",
+ "winapi",
+]
+
+[[package]]
+name = "crossterm"
+version = "0.27.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f476fe445d41c9e991fd07515a6f463074b782242ccf4a5b7b1d1012e70824df"
+dependencies = [
+ "bitflags 2.4.1",
+ "crossterm_winapi",
+ "libc",
+ "mio",
+ "parking_lot 0.12.1",
+ "signal-hook",
+ "signal-hook-mio",
+ "winapi",
+]
+
+[[package]]
+name = "crossterm_winapi"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "crypto-common"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+dependencies = [
+ "generic-array",
+ "typenum",
+]
+
+[[package]]
+name = "crypto-mac"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab"
+dependencies = [
+ "generic-array",
+ "subtle",
+]
+
+[[package]]
+name = "crypto-mac"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714"
+dependencies = [
+ "generic-array",
+ "subtle",
+]
+
+[[package]]
+name = "ctor"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37e366bff8cd32dd8754b0991fb66b279dc48f598c3a18914852a6673deef583"
+dependencies = [
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "darling"
+version = "0.13.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c"
+dependencies = [
+ "darling_core",
+ "darling_macro",
+]
+
+[[package]]
+name = "darling_core"
+version = "0.13.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610"
+dependencies = [
+ "fnv",
+ "ident_case",
+ "proc-macro2",
+ "quote",
+ "strsim",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "darling_macro"
+version = "0.13.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835"
+dependencies = [
+ "darling_core",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "data-encoding"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308"
+
+[[package]]
+name = "debugid"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef552e6f588e446098f6ba40d89ac146c8c7b64aade83c051ee00bb5d2bc18d"
+dependencies = [
+ "uuid",
+]
+
+[[package]]
+name = "der"
+version = "0.7.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fffa369a668c8af7dbf8b5e56c9f744fbd399949ed171606040001947de40b1c"
+dependencies = [
+ "const-oid",
+ "pem-rfc7468",
+ "zeroize",
+]
+
+[[package]]
+name = "der-parser"
+version = "8.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dbd676fbbab537128ef0278adb5576cf363cff6aa22a7b24effe97347cfab61e"
+dependencies = [
+ "asn1-rs",
+ "displaydoc",
+ "nom",
+ "num-bigint",
+ "num-traits",
+ "rusticata-macros",
+]
+
+[[package]]
+name = "deranged"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f32d04922c60427da6f9fef14d042d9edddef64cb9d4ce0d64d0685fbeb1fd3"
+dependencies = [
+ "powerfmt",
+ "serde",
+]
+
+[[package]]
+name = "derivative"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "derive_more"
+version = "0.99.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321"
+dependencies = [
+ "convert_case",
+ "proc-macro2",
+ "quote",
+ "rustc_version 0.4.0",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "dialoguer"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "658bce805d770f407bc62102fca7c2c64ceef2fbcb2b8bd19d2765ce093980de"
+dependencies = [
+ "console",
+ "fuzzy-matcher",
+ "shell-words",
+ "tempfile",
+ "thiserror",
+ "zeroize",
+]
+
+[[package]]
+name = "diff"
+version = "0.1.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8"
+
+[[package]]
+name = "difflib"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8"
+
+[[package]]
+name = "digest"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "digest"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
+dependencies = [
+ "block-buffer 0.10.4",
+ "const-oid",
+ "crypto-common",
+ "subtle",
+]
+
+[[package]]
+name = "directories-next"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "339ee130d97a610ea5a5872d2bbb130fdf68884ff09d3028b81bec8a1ac23bbc"
+dependencies = [
+ "cfg-if 1.0.0",
+ "dirs-sys-next",
+]
+
+[[package]]
+name = "dirs"
+version = "4.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059"
+dependencies = [
+ "dirs-sys 0.3.7",
+]
+
+[[package]]
+name = "dirs"
+version = "5.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225"
+dependencies = [
+ "dirs-sys 0.4.1",
+]
+
+[[package]]
+name = "dirs-sys"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6"
+dependencies = [
+ "libc",
+ "redox_users",
+ "winapi",
+]
+
+[[package]]
+name = "dirs-sys"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c"
+dependencies = [
+ "libc",
+ "option-ext",
+ "redox_users",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "dirs-sys-next"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d"
+dependencies = [
+ "libc",
+ "redox_users",
+ "winapi",
+]
+
+[[package]]
+name = "displaydoc"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "doc-comment"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10"
+
+[[package]]
+name = "dotenvy"
+version = "0.15.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b"
+
+[[package]]
+name = "dunce"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b"
+
+[[package]]
+name = "either"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "encode_unicode"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
+
+[[package]]
+name = "encoding_rs"
+version = "0.8.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "enum-as-inner"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21cdad81446a7f7dc43f6a77409efeb9733d2fa65553efef6018ef257c959b73"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "enum-as-inner"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ffccbb6966c05b32ef8fbac435df276c4ae4d3dc55a8cd0eb9745e6c12f546a"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "equivalent"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
+
+[[package]]
+name = "errno"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f258a7194e7f7c2a7837a8913aeab7fd8c383457034fa20ce4dd3dcb813e8eb8"
+dependencies = [
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "etcetera"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "136d1b5283a1ab77bd9257427ffd09d8667ced0570b6f938942bc7568ed5b943"
+dependencies = [
+ "cfg-if 1.0.0",
+ "home",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "event-listener"
+version = "2.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0"
+
+[[package]]
+name = "fallible-iterator"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649"
+
+[[package]]
+name = "faster-hex"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "239f7bfb930f820ab16a9cd95afc26f88264cf6905c960b340a615384aa3338a"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "fastrand"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "fastrand"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5"
+
+[[package]]
+name = "fd-lock"
+version = "4.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b0377f1edc77dbd1118507bc7a66e4ab64d2b90c66f90726dc801e73a8c68f9"
+dependencies = [
+ "cfg-if 1.0.0",
+ "rustix",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "filetime"
+version = "0.2.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4029edd3e734da6fe05b6cd7bd2960760a616bd2ddd0d59a0124746d6272af0"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "redox_syscall 0.3.5",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "finl_unicode"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fcfdc7a0362c9f4444381a9e697c79d435fe65b52a37466fc2c1184cee9edc6"
+
+[[package]]
+name = "flate2"
+version = "1.0.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide",
+]
+
+[[package]]
+name = "flume"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+ "spin 0.9.8",
+]
+
+[[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.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "fqdn"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3d76ed310eb8c6f88ddde3e976d015f4f91761fe98d7d41e497db542318fca9"
+
+[[package]]
+name = "fs-set-times"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd738b84894214045e8414eaded76359b4a5773f0a0a56b16575110739cdcf39"
+dependencies = [
+ "io-lifetimes",
+ "rustix",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "funty"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c"
+
+[[package]]
+name = "futures"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da0290714b38af9b4a7b094b8a37086d1b4e61f2df9122c3cad2577669145335"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-io",
+ "futures-sink",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff4dd66668b557604244583e3e1e1eada8c5c2e96a6d0d6653ede395b78bbacb"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c"
+
+[[package]]
+name = "futures-executor"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f4fb8693db0cf099eadcca0efe2a5a22e4550f98ed16aba6c48700da29597bc"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-intrusive"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d930c203dd0b6ff06e0201a4a2fe9149b43c684fd4420555b26d21b1a02956f"
+dependencies = [
+ "futures-core",
+ "lock_api",
+ "parking_lot 0.12.1",
+]
+
+[[package]]
+name = "futures-io"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa"
+
+[[package]]
+name = "futures-lite"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce"
+dependencies = [
+ "fastrand 1.9.0",
+ "futures-core",
+ "futures-io",
+ "memchr",
+ "parking",
+ "pin-project-lite",
+ "waker-fn",
+]
+
+[[package]]
+name = "futures-macro"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53b153fd91e4b0147f4aced87be237c98248656bb01050b96bf3ee89220a8ddb"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e36d3378ee38c2a36ad710c5d30c2911d752cb941c00c72dbabfb786a7970817"
+
+[[package]]
+name = "futures-task"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2"
+
+[[package]]
+name = "futures-util"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-macro",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "fuzzy-matcher"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54614a3312934d066701a80f20f15fa3b56d67ac7722b39eea5b4c9dd1d66c94"
+dependencies = [
+ "thread_local",
+]
+
+[[package]]
+name = "fxhash"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c"
+dependencies = [
+ "byteorder",
+]
+
+[[package]]
+name = "fxprof-processed-profile"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "27d12c0aed7f1e24276a241aadc4cb8ea9f83000f34bc062b7cc2d51e3b0fabd"
+dependencies = [
+ "bitflags 2.4.1",
+ "debugid",
+ "fxhash",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.1.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "wasi 0.9.0+wasi-snapshot-preview1",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f"
+dependencies = [
+ "cfg-if 1.0.0",
+ "js-sys",
+ "libc",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "gimli"
+version = "0.28.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0"
+dependencies = [
+ "fallible-iterator",
+ "indexmap 2.1.0",
+ "stable_deref_trait",
+]
+
+[[package]]
+name = "git2"
+version = "0.18.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fbf97ba92db08df386e10c8ede66a2a0369bd277090afd8710e19e38de9ec0cd"
+dependencies = [
+ "bitflags 2.4.1",
+ "libc",
+ "libgit2-sys",
+ "log",
+ "url",
+]
+
+[[package]]
+name = "gix"
+version = "0.55.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "002667cd1ebb789313d0d0afe3d23b2821cf3b0e91605095f0e6d8751f0ceeea"
+dependencies = [
+ "gix-actor",
+ "gix-attributes",
+ "gix-commitgraph",
+ "gix-config",
+ "gix-credentials",
+ "gix-date",
+ "gix-diff",
+ "gix-discover",
+ "gix-features",
+ "gix-filter",
+ "gix-fs",
+ "gix-glob",
+ "gix-hash",
+ "gix-hashtable",
+ "gix-ignore",
+ "gix-index",
+ "gix-lock",
+ "gix-macros",
+ "gix-negotiate",
+ "gix-object",
+ "gix-odb",
+ "gix-pack",
+ "gix-path",
+ "gix-pathspec",
+ "gix-prompt",
+ "gix-protocol",
+ "gix-ref",
+ "gix-refspec",
+ "gix-revision",
+ "gix-revwalk",
+ "gix-sec",
+ "gix-submodule",
+ "gix-tempfile",
+ "gix-trace",
+ "gix-transport",
+ "gix-traverse",
+ "gix-url",
+ "gix-utils",
+ "gix-validate",
+ "gix-worktree",
+ "gix-worktree-state",
+ "once_cell",
+ "parking_lot 0.12.1",
+ "reqwest",
+ "smallvec",
+ "thiserror",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "gix-actor"
+version = "0.28.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "948a5f9e43559d16faf583694f1c742eb401ce24ce8e6f2238caedea7486433c"
+dependencies = [
+ "bstr",
+ "btoi",
+ "gix-date",
+ "itoa",
+ "thiserror",
+ "winnow",
+]
+
+[[package]]
+name = "gix-attributes"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dca120f0c6562d2d7cae467f2466e576d9f7f189beec2af2e026145107c729e2"
+dependencies = [
+ "bstr",
+ "gix-glob",
+ "gix-path",
+ "gix-quote",
+ "gix-trace",
+ "kstring",
+ "smallvec",
+ "thiserror",
+ "unicode-bom",
+]
+
+[[package]]
+name = "gix-bitmap"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ccab4bc576844ddb51b78d81b4a42d73e6229660fa614dfc3d3999c874d1959"
+dependencies = [
+ "thiserror",
+]
+
+[[package]]
+name = "gix-chunk"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b42ea64420f7994000130328f3c7a2038f639120518870436d31b8bde704493"
+dependencies = [
+ "thiserror",
+]
+
+[[package]]
+name = "gix-command"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c576cfbf577f72c097b5f88aedea502cd62952bdc1fb3adcab4531d5525a4c7"
+dependencies = [
+ "bstr",
+]
+
+[[package]]
+name = "gix-commitgraph"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e8bc78b1a6328fa6d8b3a53b6c73997af37fd6bfc1d6c49f149e63bda5cbb36"
+dependencies = [
+ "bstr",
+ "gix-chunk",
+ "gix-features",
+ "gix-hash",
+ "memmap2",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-config"
+version = "0.31.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5cae98c6b4c66c09379bc35274b172587d6b0ac369a416c39128ad8c6454f9bb"
+dependencies = [
+ "bstr",
+ "gix-config-value",
+ "gix-features",
+ "gix-glob",
+ "gix-path",
+ "gix-ref",
+ "gix-sec",
+ "memchr",
+ "once_cell",
+ "smallvec",
+ "thiserror",
+ "unicode-bom",
+ "winnow",
+]
+
+[[package]]
+name = "gix-config-value"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea7505b97f4d8e7933e29735a568ba2f86d8de466669d9f0e8321384f9972f47"
+dependencies = [
+ "bitflags 2.4.1",
+ "bstr",
+ "gix-path",
+ "libc",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-credentials"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1c5c5d74069b842a1861e581027ac6b7ad9ff66f5911c89b9f45484d7ebda6a4"
+dependencies = [
+ "bstr",
+ "gix-command",
+ "gix-config-value",
+ "gix-path",
+ "gix-prompt",
+ "gix-sec",
+ "gix-url",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-date"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc7df669639582dc7c02737642f76890b03b5544e141caba68a7d6b4eb551e0d"
+dependencies = [
+ "bstr",
+ "itoa",
+ "thiserror",
+ "time",
+]
+
+[[package]]
+name = "gix-diff"
+version = "0.37.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "931394f69fb8c9ed6afc0aae3487bd869e936339bcc13ed8884472af072e0554"
+dependencies = [
+ "gix-hash",
+ "gix-object",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-discover"
+version = "0.26.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a45d5cf0321178883e38705ab2b098f625d609a7d4c391b33ac952eff2c490f2"
+dependencies = [
+ "bstr",
+ "dunce",
+ "gix-hash",
+ "gix-path",
+ "gix-ref",
+ "gix-sec",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-features"
+version = "0.36.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "51f4365ba17c4f218d7fd9ec102b8d2d3cb0ca200a835e81151ace7778aec827"
+dependencies = [
+ "bytes",
+ "crc32fast",
+ "flate2",
+ "gix-hash",
+ "gix-trace",
+ "libc",
+ "once_cell",
+ "prodash",
+ "sha1_smol",
+ "thiserror",
+ "walkdir",
+]
+
+[[package]]
+name = "gix-filter"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92f674d3fdb6b1987b04521ec9a5b7be8650671f2c4bbd17c3c81e2a364242ff"
+dependencies = [
+ "bstr",
+ "encoding_rs",
+ "gix-attributes",
+ "gix-command",
+ "gix-hash",
+ "gix-object",
+ "gix-packetline-blocking",
+ "gix-path",
+ "gix-quote",
+ "gix-trace",
+ "smallvec",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-fs"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8cd171c0cae97cd0dc57e7b4601cb1ebf596450e263ef3c02be9107272c877bd"
+dependencies = [
+ "gix-features",
+]
+
+[[package]]
+name = "gix-glob"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fac08925dbc14d414bd02eb45ffb4cecd912d1fce3883f867bd0103c192d3e4"
+dependencies = [
+ "bitflags 2.4.1",
+ "bstr",
+ "gix-features",
+ "gix-path",
+]
+
+[[package]]
+name = "gix-hash"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1884c7b41ea0875217c1be9ce91322f90bde433e91d374d0e1276073a51ccc60"
+dependencies = [
+ "faster-hex",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-hashtable"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "409268480841ad008e81c17ca5a293393fbf9f2b6c2f85b8ab9de1f0c5176a16"
+dependencies = [
+ "gix-hash",
+ "hashbrown 0.14.2",
+ "parking_lot 0.12.1",
+]
+
+[[package]]
+name = "gix-ignore"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e73c07763a8005ae02cb5cf83040729cea9bb70c7cef68ec6c24159904c499a"
+dependencies = [
+ "bstr",
+ "gix-glob",
+ "gix-path",
+ "unicode-bom",
+]
+
+[[package]]
+name = "gix-index"
+version = "0.26.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c83a4fcc121b2f2e109088f677f89f85e7a8ebf39e8e6659c0ae54d4283b1650"
+dependencies = [
+ "bitflags 2.4.1",
+ "bstr",
+ "btoi",
+ "filetime",
+ "gix-bitmap",
+ "gix-features",
+ "gix-fs",
+ "gix-hash",
+ "gix-lock",
+ "gix-object",
+ "gix-traverse",
+ "itoa",
+ "memmap2",
+ "smallvec",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-lock"
+version = "11.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4feb1dcd304fe384ddc22edba9dd56a42b0800032de6537728cea2f033a4f37"
+dependencies = [
+ "gix-tempfile",
+ "gix-utils",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-macros"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d8acb5ee668d55f0f2d19a320a3f9ef67a6999ad483e11135abcc2464ed18b6"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "gix-negotiate"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a5cdcf491ecc9ce39dcc227216c540355fe0024ae7c38e94557752ca5ebb67f"
+dependencies = [
+ "bitflags 2.4.1",
+ "gix-commitgraph",
+ "gix-date",
+ "gix-hash",
+ "gix-object",
+ "gix-revwalk",
+ "smallvec",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-object"
+version = "0.38.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "740f2a44267f58770a1cb3a3d01d14e67b089c7136c48d4bddbb3cfd2bf86a51"
+dependencies = [
+ "bstr",
+ "btoi",
+ "gix-actor",
+ "gix-date",
+ "gix-features",
+ "gix-hash",
+ "gix-validate",
+ "itoa",
+ "smallvec",
+ "thiserror",
+ "winnow",
+]
+
+[[package]]
+name = "gix-odb"
+version = "0.54.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8630b56cb80d8fa684d383dad006a66401ee8314e12fbf0e566ddad8c115143b"
+dependencies = [
+ "arc-swap",
+ "gix-date",
+ "gix-features",
+ "gix-hash",
+ "gix-object",
+ "gix-pack",
+ "gix-path",
+ "gix-quote",
+ "parking_lot 0.12.1",
+ "tempfile",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-pack"
+version = "0.44.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1431ba2e30deff1405920693d54ab231c88d7c240dd6ccc936ee223d8f8697c3"
+dependencies = [
+ "clru",
+ "gix-chunk",
+ "gix-features",
+ "gix-hash",
+ "gix-hashtable",
+ "gix-object",
+ "gix-path",
+ "gix-tempfile",
+ "memmap2",
+ "parking_lot 0.12.1",
+ "smallvec",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-packetline"
+version = "0.16.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a8384b1e964151aff0d5632dd9b191059d07dff358b96bd940f1b452600d7ab"
+dependencies = [
+ "bstr",
+ "faster-hex",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-packetline-blocking"
+version = "0.16.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d8395f7501c84d6a1fe902035fdfd8cd86d89e2dd6be0200ec1a72fd3c92d39"
+dependencies = [
+ "bstr",
+ "faster-hex",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-path"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a1d370115171e3ae03c5c6d4f7d096f2981a40ddccb98dfd704c773530ba73b"
+dependencies = [
+ "bstr",
+ "gix-trace",
+ "home",
+ "once_cell",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-pathspec"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e9cc7194fdcf43b4a1ccfa13ffae1d79f83beb4becff7761d88dd99faeafe625"
+dependencies = [
+ "bitflags 2.4.1",
+ "bstr",
+ "gix-attributes",
+ "gix-config-value",
+ "gix-glob",
+ "gix-path",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-prompt"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c9a913769516f5e9d937afac206fb76428e3d7238e538845842887fda584678"
+dependencies = [
+ "gix-command",
+ "gix-config-value",
+ "parking_lot 0.12.1",
+ "rustix",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-protocol"
+version = "0.41.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "391e3feabdfa5f90dad6673ce59e3291ac28901b2ff248d86c5a7fbde0391e0e"
+dependencies = [
+ "bstr",
+ "btoi",
+ "gix-credentials",
+ "gix-date",
+ "gix-features",
+ "gix-hash",
+ "gix-transport",
+ "maybe-async",
+ "thiserror",
+ "winnow",
+]
+
+[[package]]
+name = "gix-quote"
+version = "0.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "475c86a97dd0127ba4465fbb239abac9ea10e68301470c9791a6dd5351cdc905"
+dependencies = [
+ "bstr",
+ "btoi",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-ref"
+version = "0.38.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ec2f6d07ac88d2fb8007ee3fa3e801856fb9d82e7366ec0ca332eb2c9d74a52"
+dependencies = [
+ "gix-actor",
+ "gix-date",
+ "gix-features",
+ "gix-fs",
+ "gix-hash",
+ "gix-lock",
+ "gix-object",
+ "gix-path",
+ "gix-tempfile",
+ "gix-validate",
+ "memmap2",
+ "thiserror",
+ "winnow",
+]
+
+[[package]]
+name = "gix-refspec"
+version = "0.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ccb0974cc41dbdb43a180c7f67aa481e1c1e160fcfa8f4a55291fd1126c1a6e7"
+dependencies = [
+ "bstr",
+ "gix-hash",
+ "gix-revision",
+ "gix-validate",
+ "smallvec",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-revision"
+version = "0.23.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2ca97ac73459a7f3766aa4a5638a6e37d56d4c7962bc1986fbaf4883d0772588"
+dependencies = [
+ "bstr",
+ "gix-date",
+ "gix-hash",
+ "gix-hashtable",
+ "gix-object",
+ "gix-revwalk",
+ "gix-trace",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-revwalk"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a16d8c892e4cd676d86f0265bf9d40cefd73d8d94f86b213b8b77d50e77efae0"
+dependencies = [
+ "gix-commitgraph",
+ "gix-date",
+ "gix-hash",
+ "gix-hashtable",
+ "gix-object",
+ "smallvec",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-sec"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92b9542ac025a8c02ed5d17b3fc031a111a384e859d0be3532ec4d58c40a0f28"
+dependencies = [
+ "bitflags 2.4.1",
+ "gix-path",
+ "libc",
+ "windows",
+]
+
+[[package]]
+name = "gix-submodule"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bba78c8d12aa24370178453ec3a472ff08dfaa657d116229f57f2c9cd469a1c2"
+dependencies = [
+ "bstr",
+ "gix-config",
+ "gix-path",
+ "gix-pathspec",
+ "gix-refspec",
+ "gix-url",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-tempfile"
+version = "11.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05cc2205cf10d99f70b96e04e16c55d4c7cf33efc151df1f793e29fd12a931f8"
+dependencies = [
+ "gix-fs",
+ "libc",
+ "once_cell",
+ "parking_lot 0.12.1",
+ "tempfile",
+]
+
+[[package]]
+name = "gix-trace"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96b6d623a1152c3facb79067d6e2ecdae48130030cf27d6eb21109f13bd7b836"
+
+[[package]]
+name = "gix-transport"
+version = "0.38.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2f209a93364e24f20319751bc11092272e2f3fe82bb72592b2822679cf5be752"
+dependencies = [
+ "base64 0.21.5",
+ "bstr",
+ "gix-command",
+ "gix-credentials",
+ "gix-features",
+ "gix-packetline",
+ "gix-quote",
+ "gix-sec",
+ "gix-url",
+ "reqwest",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-traverse"
+version = "0.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14d050ec7d4e1bb76abf0636cf4104fb915b70e54e3ced9a4427c999100ff38a"
+dependencies = [
+ "gix-commitgraph",
+ "gix-date",
+ "gix-hash",
+ "gix-hashtable",
+ "gix-object",
+ "gix-revwalk",
+ "smallvec",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-url"
+version = "0.25.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1b9ac8ed32ad45f9fc6c5f8c0be2ed911e544a5a19afd62d95d524ebaa95671"
+dependencies = [
+ "bstr",
+ "gix-features",
+ "gix-path",
+ "home",
+ "thiserror",
+ "url",
+]
+
+[[package]]
+name = "gix-utils"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b85d89dc728613e26e0ed952a19583744e7f5240fcd4aa30d6c824ffd8b52f0f"
+dependencies = [
+ "fastrand 2.0.1",
+]
+
+[[package]]
+name = "gix-validate"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e05cab2b03a45b866156e052aa38619f4ece4adcb2f79978bfc249bc3b21b8c5"
+dependencies = [
+ "bstr",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-worktree"
+version = "0.27.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ddaf79e721dba64fe726a42f297a3c8ed42e55cdc0d81ca68452f2def3c2d7fd"
+dependencies = [
+ "bstr",
+ "gix-attributes",
+ "gix-features",
+ "gix-fs",
+ "gix-glob",
+ "gix-hash",
+ "gix-ignore",
+ "gix-index",
+ "gix-object",
+ "gix-path",
+]
+
+[[package]]
+name = "gix-worktree-state"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34a2fcccdcaf3c71c00a03df31c9aa459d444cabbec4ed9ca1fa64e43406bed4"
+dependencies = [
+ "bstr",
+ "gix-features",
+ "gix-filter",
+ "gix-fs",
+ "gix-glob",
+ "gix-hash",
+ "gix-index",
+ "gix-object",
+ "gix-path",
+ "gix-worktree",
+ "io-close",
+ "thiserror",
+]
+
+[[package]]
+name = "glob"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
+
+[[package]]
+name = "globset"
+version = "0.4.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "759c97c1e17c55525b57192c06a267cda0ac5210b222d6b82189a2338fa1c13d"
+dependencies = [
+ "aho-corasick",
+ "bstr",
+ "fnv",
+ "log",
+ "regex",
+]
+
+[[package]]
+name = "guppy-workspace-hack"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92620684d99f750bae383ecb3be3748142d6095760afd5cbcf2261e9a279d780"
+
+[[package]]
+name = "h2"
+version = "0.3.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d6250322ef6e60f93f9a2162799302cd6f68f79f6e5d85c8c16f14d1d958178"
+dependencies = [
+ "bytes",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "http",
+ "indexmap 2.1.0",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tracing",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+
+[[package]]
+name = "hashbrown"
+version = "0.13.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e"
+dependencies = [
+ "ahash",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.14.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f93e7192158dbcda357bdec5fb5788eebf8bbac027f3f33e719d29135ae84156"
+dependencies = [
+ "ahash",
+ "allocator-api2",
+]
+
+[[package]]
+name = "hashlink"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7"
+dependencies = [
+ "hashbrown 0.14.2",
+]
+
+[[package]]
+name = "headers"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "06683b93020a07e3dbcf5f8c0f6d40080d725bea7936fc01ad345c01b97dc270"
+dependencies = [
+ "base64 0.21.5",
+ "bytes",
+ "headers-core",
+ "http",
+ "httpdate",
+ "mime",
+ "sha1",
+]
+
+[[package]]
+name = "headers-core"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7f66481bfee273957b1f20485a4ff3362987f85b2c236580d81b4eb7a326429"
+dependencies = [
+ "http",
+]
+
+[[package]]
+name = "heck"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+dependencies = [
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7"
+
+[[package]]
+name = "hex"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
+
+[[package]]
+name = "hkdf"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "791a029f6b9fc27657f6f188ec6e5e43f6911f6f878e0dc5501396e09809d437"
+dependencies = [
+ "hmac 0.12.1",
+]
+
+[[package]]
+name = "hmac"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b"
+dependencies = [
+ "crypto-mac 0.11.1",
+ "digest 0.9.0",
+]
+
+[[package]]
+name = "hmac"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
+dependencies = [
+ "digest 0.10.7",
+]
+
+[[package]]
+name = "home"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb"
+dependencies = [
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "hostname"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867"
+dependencies = [
+ "libc",
+ "match_cfg",
+ "winapi",
+]
+
+[[package]]
+name = "http"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb"
+dependencies = [
+ "bytes",
+ "fnv",
+ "itoa",
+]
+
+[[package]]
+name = "http-body"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
+dependencies = [
+ "bytes",
+ "http",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "http-range-header"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "add0ab9360ddbd88cfeb3bd9574a1d85cfdfa14db10b3e21d3700dbc4328758f"
+
+[[package]]
+name = "http-serde"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f560b665ad9f1572cfcaf034f7fb84338a7ce945216d64a90fd81f046a3caee"
+dependencies = [
+ "http",
+ "serde",
+]
+
+[[package]]
+name = "http-types"
+version = "2.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e9b187a72d63adbfba487f48095306ac823049cb504ee195541e91c7775f5ad"
+dependencies = [
+ "anyhow",
+ "async-channel",
+ "base64 0.13.1",
+ "futures-lite",
+ "http",
+ "infer",
+ "pin-project-lite",
+ "rand 0.7.3",
+ "serde",
+ "serde_json",
+ "serde_qs 0.8.5",
+ "serde_urlencoded",
+ "url",
+]
+
+[[package]]
+name = "httparse"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
+
+[[package]]
+name = "httpdate"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
+
+[[package]]
+name = "hyper"
+version = "0.14.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468"
+dependencies = [
+ "bytes",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "httparse",
+ "httpdate",
+ "itoa",
+ "pin-project-lite",
+ "socket2 0.4.10",
+ "tokio",
+ "tower-service",
+ "tracing",
+ "want",
+]
+
+[[package]]
+name = "hyper-reverse-proxy"
+version = "0.5.2-dev"
+source = "git+https://github.com/chesedo/hyper-reverse-proxy?branch=bug/host_header#5f82b7dffe940abf896fe47dadf6c8e87ddc670b"
+dependencies = [
+ "hyper",
+ "lazy_static",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "hyper-rustls"
+version = "0.24.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590"
+dependencies = [
+ "futures-util",
+ "http",
+ "hyper",
+ "log",
+ "rustls",
+ "rustls-native-certs",
+ "tokio",
+ "tokio-rustls",
+]
+
+[[package]]
+name = "hyper-timeout"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1"
+dependencies = [
+ "hyper",
+ "pin-project-lite",
+ "tokio",
+ "tokio-io-timeout",
+]
+
+[[package]]
+name = "hyperlocal"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fafdf7b2b2de7c9784f76e02c0935e65a8117ec3b768644379983ab333ac98c"
+dependencies = [
+ "futures-util",
+ "hex",
+ "hyper",
+ "pin-project",
+ "tokio",
+]
+
+[[package]]
+name = "iana-time-zone"
+version = "0.1.58"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8326b86b6cff230b97d0d312a6c40a60726df3332e721f72a1b035f451663b20"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys",
+ "iana-time-zone-haiku",
+ "js-sys",
+ "wasm-bindgen",
+ "windows-core",
+]
+
+[[package]]
+name = "iana-time-zone-haiku"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "id-arena"
+version = "2.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25a2bc672d1148e28034f176e01fffebb08b35768468cc954630da77a1449005"
+
+[[package]]
+name = "ident_case"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
+
+[[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 = "idna"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "ignore"
+version = "0.4.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dbe7873dab538a9a44ad79ede1faf5f30d49f9a5c883ddbab48bce81b64b7492"
+dependencies = [
+ "globset",
+ "lazy_static",
+ "log",
+ "memchr",
+ "regex",
+ "same-file",
+ "thread_local",
+ "walkdir",
+ "winapi-util",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
+dependencies = [
+ "autocfg",
+ "hashbrown 0.12.3",
+ "serde",
+]
+
+[[package]]
+name = "indexmap"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f"
+dependencies = [
+ "equivalent",
+ "hashbrown 0.14.2",
+ "serde",
+]
+
+[[package]]
+name = "indicatif"
+version = "0.17.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb28741c9db9a713d93deb3bb9515c20788cef5815265bee4980e87bde7e0f25"
+dependencies = [
+ "console",
+ "instant",
+ "number_prefix",
+ "portable-atomic",
+ "unicode-width",
+]
+
+[[package]]
+name = "indoc"
+version = "2.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e186cfbae8084e513daff4240b4797e342f988cecda4fb6c939150f96315fd8"
+
+[[package]]
+name = "infer"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64e9829a50b42bb782c1df523f78d332fe371b10c661e78b7a3c34b0198e9fac"
+
+[[package]]
+name = "instant"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+dependencies = [
+ "cfg-if 1.0.0",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "instant-acme"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3d50eb225913c1903c788287ddd0b16369771e5abc988756a5e5927390ba04f"
+dependencies = [
+ "base64 0.21.5",
+ "hyper",
+ "hyper-rustls",
+ "ring 0.16.20",
+ "serde",
+ "serde_json",
+ "thiserror",
+]
+
+[[package]]
+name = "io-close"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9cadcf447f06744f8ce713d2d6239bb5bde2c357a452397a9ed90c625da390bc"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "io-extras"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d3c230ee517ee76b1cc593b52939ff68deda3fae9e41eca426c6b4993df51c4"
+dependencies = [
+ "io-lifetimes",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "io-lifetimes"
+version = "2.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bffb4def18c48926ccac55c1223e02865ce1a821751a95920448662696e7472c"
+
+[[package]]
+name = "ipconfig"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f"
+dependencies = [
+ "socket2 0.5.5",
+ "widestring",
+ "windows-sys 0.48.0",
+ "winreg",
+]
+
+[[package]]
+name = "ipnet"
+version = "2.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3"
+
+[[package]]
+name = "is-terminal"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b"
+dependencies = [
+ "hermit-abi",
+ "rustix",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "itertools"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itertools"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
+
+[[package]]
+name = "ittapi"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25a5c0b993601cad796222ea076565c5d9f337d35592f8622c753724f06d7271"
+dependencies = [
+ "anyhow",
+ "ittapi-sys",
+ "log",
+]
+
+[[package]]
+name = "ittapi-sys"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb7b5e473765060536a660eed127f758cf1a810c73e49063264959c60d1727d9"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "jni"
+version = "0.21.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97"
+dependencies = [
+ "cesu8",
+ "cfg-if 1.0.0",
+ "combine",
+ "jni-sys",
+ "log",
+ "thiserror",
+ "walkdir",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "jni-sys"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130"
+
+[[package]]
+name = "jobserver"
+version = "0.1.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c37f63953c4c63420ed5fd3d6d398c719489b9f872b9fa683262f8edd363c7d"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "js-sys"
+version = "0.3.65"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54c0c35952f67de54bb584e9fd912b3023117cbafc0a77d8f3dee1fb5f572fe8"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "jsonwebtoken"
+version = "9.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "155c4d7e39ad04c172c5e3a99c434ea3b4a7ba7960b38ecd562b270b097cce09"
+dependencies = [
+ "base64 0.21.5",
+ "pem 3.0.2",
+ "ring 0.17.5",
+ "serde",
+ "serde_json",
+ "simple_asn1",
+]
+
+[[package]]
+name = "kstring"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec3066350882a1cd6d950d055997f379ac37fd39f81cd4d8ed186032eb3c5747"
+dependencies = [
+ "static_assertions",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+dependencies = [
+ "spin 0.5.2",
+]
+
+[[package]]
+name = "leb128"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67"
+
+[[package]]
+name = "libc"
+version = "0.2.150"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c"
+
+[[package]]
+name = "libgit2-sys"
+version = "0.16.1+1.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2a2bb3680b094add03bb3732ec520ece34da31a8cd2d633d1389d0f0fb60d0c"
+dependencies = [
+ "cc",
+ "libc",
+ "libz-sys",
+ "pkg-config",
+]
+
+[[package]]
+name = "libm"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058"
+
+[[package]]
+name = "libredox"
+version = "0.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8"
+dependencies = [
+ "bitflags 2.4.1",
+ "libc",
+ "redox_syscall 0.4.1",
+]
+
+[[package]]
+name = "libsqlite3-sys"
+version = "0.26.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "afc22eff61b133b115c6e8c74e818c628d6d5e7a502afea6f64dee076dd94326"
+dependencies = [
+ "cc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "libz-sys"
+version = "1.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d97137b25e321a73eef1418d1d5d2eda4d77e12813f8e6dead84bc52c5870a7b"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "linked-hash-map"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.4.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "969488b55f8ac402214f3f5fd243ebb7206cf82de60d3172994707a4bcc2b829"
+
+[[package]]
+name = "lock_api"
+version = "0.4.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45"
+dependencies = [
+ "autocfg",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
+
+[[package]]
+name = "lru-cache"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c"
+dependencies = [
+ "linked-hash-map",
+]
+
+[[package]]
+name = "mach"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "malloc_buf"
+version = "0.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "match_cfg"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4"
+
+[[package]]
+name = "matchers"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558"
+dependencies = [
+ "regex-automata 0.1.10",
+]
+
+[[package]]
+name = "matches"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5"
+
+[[package]]
+name = "matchit"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94"
+
+[[package]]
+name = "maybe-async"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f1b8c13cb1f814b634a96b2c725449fe7ed464a7b8781de8688be5ffbd3f305"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "maybe-owned"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4facc753ae494aeb6e3c22f839b158aebd4f9270f55cd3c79906c45476c47ab4"
+
+[[package]]
+name = "md-5"
+version = "0.10.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf"
+dependencies = [
+ "cfg-if 1.0.0",
+ "digest 0.10.7",
+]
+
+[[package]]
+name = "memchr"
+version = "2.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167"
+
+[[package]]
+name = "memfd"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2cffa4ad52c6f791f4f8b15f0c05f9824b2ced1160e88cc393d64fff9a8ac64"
+dependencies = [
+ "rustix",
+]
+
+[[package]]
+name = "memmap2"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f49388d20533534cd19360ad3d6a7dadc885944aa802ba3995040c5ec11288c6"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "memoffset"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "memoffset"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "mime"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
+
+[[package]]
+name = "mime_guess"
+version = "2.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef"
+dependencies = [
+ "mime",
+ "unicase",
+]
+
+[[package]]
+name = "minimal-lexical"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "mio"
+version = "0.8.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3dce281c5e46beae905d4de1870d8b1509a9142b62eedf18b443b011ca8343d0"
+dependencies = [
+ "libc",
+ "log",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "mongodb"
+version = "2.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7c926772050c3a3f87c837626bf6135c8ca688d91d31dd39a3da547fc2bc9fe"
+dependencies = [
+ "async-trait",
+ "base64 0.13.1",
+ "bitflags 1.3.2",
+ "bson",
+ "chrono",
+ "derivative",
+ "derive_more",
+ "futures-core",
+ "futures-executor",
+ "futures-io",
+ "futures-util",
+ "hex",
+ "hmac 0.12.1",
+ "lazy_static",
+ "md-5",
+ "pbkdf2",
+ "percent-encoding",
+ "rand 0.8.5",
+ "rustc_version_runtime",
+ "rustls",
+ "rustls-pemfile",
+ "serde",
+ "serde_bytes",
+ "serde_with 1.14.0",
+ "sha-1",
+ "sha2 0.10.8",
+ "socket2 0.4.10",
+ "stringprep",
+ "strsim",
+ "take_mut",
+ "thiserror",
+ "tokio",
+ "tokio-rustls",
+ "tokio-util",
+ "trust-dns-proto 0.21.2",
+ "trust-dns-resolver 0.21.2",
+ "typed-builder",
+ "uuid",
+ "webpki-roots 0.25.2",
+]
+
+[[package]]
+name = "nbuild-core"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e5ab1b0a3450a5031ae7d555bb0c71dd3b15bf8a2f2af79e00aec91f69a4a0e"
+dependencies = [
+ "cargo-lock",
+ "cargo_metadata 0.15.4",
+ "target-spec",
+ "thiserror",
+ "tracing",
+]
+
+[[package]]
+name = "ndk-context"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b"
+
+[[package]]
+name = "nix"
+version = "0.25.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f346ff70e7dbfd675fe90590b92d59ef2de15a8779ae305ebcbfd3f0caf59be4"
+dependencies = [
+ "autocfg",
+ "bitflags 1.3.2",
+ "cfg-if 1.0.0",
+ "libc",
+ "memoffset 0.6.5",
+ "pin-utils",
+]
+
+[[package]]
+name = "nom"
+version = "7.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
+dependencies = [
+ "memchr",
+ "minimal-lexical",
+]
+
+[[package]]
+name = "nu-ansi-term"
+version = "0.46.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84"
+dependencies = [
+ "overload",
+ "winapi",
+]
+
+[[package]]
+name = "num-bigint"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-bigint-dig"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151"
+dependencies = [
+ "byteorder",
+ "lazy_static",
+ "libm",
+ "num-integer",
+ "num-iter",
+ "num-traits",
+ "rand 0.8.5",
+ "smallvec",
+ "zeroize",
+]
+
+[[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-traits"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c"
+dependencies = [
+ "autocfg",
+ "libm",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
+dependencies = [
+ "hermit-abi",
+ "libc",
+]
+
+[[package]]
+name = "num_threads"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "number_prefix"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3"
+
+[[package]]
+name = "objc"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1"
+dependencies = [
+ "malloc_buf",
+]
+
+[[package]]
+name = "object"
+version = "0.32.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0"
+dependencies = [
+ "crc32fast",
+ "hashbrown 0.14.2",
+ "indexmap 2.1.0",
+ "memchr",
+]
+
+[[package]]
+name = "oid-registry"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9bedf36ffb6ba96c2eb7144ef6270557b52e54b20c0a8e1eb2ff99a6c6959bff"
+dependencies = [
+ "asn1-rs",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
+
+[[package]]
+name = "opaque-debug"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
+
+[[package]]
+name = "openssl-probe"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
+
+[[package]]
+name = "opentelemetry"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e32339a5dc40459130b3bd269e9892439f55b33e772d2a9d402a789baaf4e8a"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+ "indexmap 2.1.0",
+ "js-sys",
+ "once_cell",
+ "pin-project-lite",
+ "thiserror",
+ "urlencoding",
+]
+
+[[package]]
+name = "opentelemetry-http"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f51189ce8be654f9b5f7e70e49967ed894e84a06fc35c6c042e64ac1fc5399e"
+dependencies = [
+ "async-trait",
+ "bytes",
+ "http",
+ "opentelemetry",
+]
+
+[[package]]
+name = "opentelemetry-otlp"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f24cda83b20ed2433c68241f918d0f6fdec8b1d43b7a9590ab4420c5095ca930"
+dependencies = [
+ "async-trait",
+ "futures-core",
+ "http",
+ "opentelemetry",
+ "opentelemetry-proto",
+ "opentelemetry-semantic-conventions",
+ "opentelemetry_sdk",
+ "prost 0.11.9",
+ "thiserror",
+ "tokio",
+ "tonic 0.9.2",
+]
+
+[[package]]
+name = "opentelemetry-proto"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2e155ce5cc812ea3d1dffbd1539aed653de4bf4882d60e6e04dcf0901d674e1"
+dependencies = [
+ "opentelemetry",
+ "opentelemetry_sdk",
+ "prost 0.11.9",
+ "tonic 0.9.2",
+]
+
+[[package]]
+name = "opentelemetry-semantic-conventions"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f5774f1ef1f982ef2a447f6ee04ec383981a3ab99c8e77a1a7b30182e65bbc84"
+dependencies = [
+ "opentelemetry",
+]
+
+[[package]]
+name = "opentelemetry_sdk"
+version = "0.21.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "968ba3f2ca03e90e5187f5e4f46c791ef7f2c163ae87789c8ce5f5ca3b7b7de5"
+dependencies = [
+ "async-trait",
+ "crossbeam-channel",
+ "futures-channel",
+ "futures-executor",
+ "futures-util",
+ "glob",
+ "once_cell",
+ "opentelemetry",
+ "ordered-float",
+ "percent-encoding",
+ "rand 0.8.5",
+ "thiserror",
+ "tokio",
+ "tokio-stream",
+]
+
+[[package]]
+name = "option-ext"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d"
+
+[[package]]
+name = "ordered-float"
+version = "4.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "536900a8093134cf9ccf00a27deb3532421099e958d9dd431135d0c7543ca1e8"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "os_pipe"
+version = "1.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ae859aa07428ca9a929b936690f8b12dc5f11dd8c6992a18ca93919f28bc177"
+dependencies = [
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "outref"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4030760ffd992bef45b0ae3f10ce1aba99e33464c90d14dd7c039884963ddc7a"
+
+[[package]]
+name = "overload"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
+
+[[package]]
+name = "parking"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae"
+
+[[package]]
+name = "parking_lot"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99"
+dependencies = [
+ "instant",
+ "lock_api",
+ "parking_lot_core 0.8.6",
+]
+
+[[package]]
+name = "parking_lot"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+dependencies = [
+ "lock_api",
+ "parking_lot_core 0.9.9",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc"
+dependencies = [
+ "cfg-if 1.0.0",
+ "instant",
+ "libc",
+ "redox_syscall 0.2.16",
+ "smallvec",
+ "winapi",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "redox_syscall 0.4.1",
+ "smallvec",
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "paste"
+version = "1.0.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c"
+
+[[package]]
+name = "pbkdf2"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917"
+dependencies = [
+ "digest 0.10.7",
+]
+
+[[package]]
+name = "pem"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8835c273a76a90455d7344889b0964598e3316e2a79ede8e36f16bdcf2228b8"
+dependencies = [
+ "base64 0.13.1",
+]
+
+[[package]]
+name = "pem"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b13fe415cdf3c8e44518e18a7c95a13431d9bdf6d15367d82b23c377fdd441a"
+dependencies = [
+ "base64 0.21.5",
+ "serde",
+]
+
+[[package]]
+name = "pem"
+version = "3.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3163d2912b7c3b52d651a055f2c7eec9ba5cd22d26ef75b8dd3a59980b185923"
+dependencies = [
+ "base64 0.21.5",
+ "serde",
+]
+
+[[package]]
+name = "pem-rfc7468"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412"
+dependencies = [
+ "base64ct",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94"
+
+[[package]]
+name = "pin-project"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422"
+dependencies = [
+ "pin-project-internal",
+]
+
+[[package]]
+name = "pin-project-internal"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "pkcs1"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f"
+dependencies = [
+ "der",
+ "pkcs8",
+ "spki",
+]
+
+[[package]]
+name = "pkcs8"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7"
+dependencies = [
+ "der",
+ "spki",
+]
+
+[[package]]
+name = "pkg-config"
+version = "0.3.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
+
+[[package]]
+name = "portable-atomic"
+version = "1.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3bccab0e7fd7cc19f820a1c8c91720af652d0c88dc9664dd72aef2614f04af3b"
+
+[[package]]
+name = "portpicker"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be97d76faf1bfab666e1375477b23fde79eccf0276e9b63b92a39d676a889ba9"
+dependencies = [
+ "rand 0.8.5",
+]
+
+[[package]]
+name = "powerfmt"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+
+[[package]]
+name = "predicates"
+version = "3.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6dfc28575c2e3f19cb3c73b93af36460ae898d426eba6fc15b9bd2a5220758a0"
+dependencies = [
+ "anstyle",
+ "difflib",
+ "itertools 0.11.0",
+ "predicates-core",
+]
+
+[[package]]
+name = "predicates-core"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b794032607612e7abeb4db69adb4e33590fa6cf1149e95fd7cb00e634b92f174"
+
+[[package]]
+name = "predicates-tree"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "368ba315fb8c5052ab692e68a0eefec6ec57b23a36959c14496f0b0df2c0cecf"
+dependencies = [
+ "predicates-core",
+ "termtree",
+]
+
+[[package]]
+name = "pretty_assertions"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af7cee1a6c8a5b9208b3cb1061f10c0cb689087b3d8ce85fb9d2dd7a29b6ba66"
+dependencies = [
+ "diff",
+ "yansi",
+]
+
+[[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 1.0.109",
+ "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.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "prodash"
+version = "26.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "794b5bf8e2d19b53dcdcec3e4bba628e20f5b6062503ba89281fa7037dd7bbcf"
+
+[[package]]
+name = "proptest"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31b476131c3c86cb68032fdc5cb6d5a1045e3e42d96b69fa599fd77701e1f5bf"
+dependencies = [
+ "bit-set",
+ "bit-vec",
+ "bitflags 2.4.1",
+ "lazy_static",
+ "num-traits",
+ "rand 0.8.5",
+ "rand_chacha 0.3.1",
+ "rand_xorshift",
+ "regex-syntax 0.8.2",
+ "rusty-fork",
+ "tempfile",
+ "unarray",
+]
+
+[[package]]
+name = "prost"
+version = "0.11.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cd"
+dependencies = [
+ "bytes",
+ "prost-derive 0.11.9",
+]
+
+[[package]]
+name = "prost"
+version = "0.12.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a5a410fc7882af66deb8d01d01737353cf3ad6204c408177ba494291a626312"
+dependencies = [
+ "bytes",
+ "prost-derive 0.12.2",
+]
+
+[[package]]
+name = "prost-derive"
+version = "0.11.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4"
+dependencies = [
+ "anyhow",
+ "itertools 0.10.5",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "prost-derive"
+version = "0.12.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "065717a5dfaca4a83d2fe57db3487b311365200000551d7a364e715dbf4346bc"
+dependencies = [
+ "anyhow",
+ "itertools 0.11.0",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "prost-types"
+version = "0.12.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8339f32236f590281e2f6368276441394fcd1b2133b549cc895d0ae80f2f9a52"
+dependencies = [
+ "prost 0.12.2",
+]
+
+[[package]]
+name = "psm"
+version = "0.1.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5787f7cda34e3033a72192c018bc5883100330f362ef279a8cbccfce8bb4e874"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "pulldown-cmark"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77a1a2f1f0a7ecff9c31abbe177637be0e97a0aef46cf8738ece09327985d998"
+dependencies = [
+ "bitflags 1.3.2",
+ "memchr",
+ "unicase",
+]
+
+[[package]]
+name = "queues"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1475abae4f8ad4998590fe3acfe20104f0a5d48fc420c817cd2c09c3f56151f0"
+
+[[package]]
+name = "quick-error"
+version = "1.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0"
+
+[[package]]
+name = "quote"
+version = "1.0.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "radium"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09"
+
+[[package]]
+name = "rand"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
+dependencies = [
+ "getrandom 0.1.16",
+ "libc",
+ "rand_chacha 0.2.2",
+ "rand_core 0.5.1",
+ "rand_hc",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "libc",
+ "rand_chacha 0.3.1",
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402"
+dependencies = [
+ "ppv-lite86",
+ "rand_core 0.5.1",
+]
+
+[[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.4",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
+dependencies = [
+ "getrandom 0.1.16",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom 0.2.11",
+]
+
+[[package]]
+name = "rand_hc"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
+dependencies = [
+ "rand_core 0.5.1",
+]
+
+[[package]]
+name = "rand_xorshift"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d25bf25ec5ae4a3f1b92f929810509a2f53d7dca2f50b794ff57e3face536c8f"
+dependencies = [
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "raw-window-handle"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9"
+
+[[package]]
+name = "rayon"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1"
+dependencies = [
+ "either",
+ "rayon-core",
+]
+
+[[package]]
+name = "rayon-core"
+version = "1.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed"
+dependencies = [
+ "crossbeam-deque",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "rcgen"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "52c4f3084aa3bc7dfbba4eff4fab2a54db4324965d8872ab933565e6fbd83bc6"
+dependencies = [
+ "pem 3.0.2",
+ "ring 0.16.20",
+ "time",
+ "yasna",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "redox_users"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4"
+dependencies = [
+ "getrandom 0.2.11",
+ "libredox",
+ "thiserror",
+]
+
+[[package]]
+name = "regalloc2"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad156d539c879b7a24a363a2016d77961786e71f48f2e2fc8302a92abd2429a6"
+dependencies = [
+ "hashbrown 0.13.2",
+ "log",
+ "rustc-hash",
+ "slice-group-by",
+ "smallvec",
+]
+
+[[package]]
+name = "regex"
+version = "1.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-automata 0.4.3",
+ "regex-syntax 0.8.2",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
+dependencies = [
+ "regex-syntax 0.6.29",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax 0.8.2",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
+
+[[package]]
+name = "regex-syntax"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
+
+[[package]]
+name = "reqwest"
+version = "0.11.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "046cd98826c46c2ac8ddecae268eb5c2e58628688a5fc7a2643704a73faba95b"
+dependencies = [
+ "base64 0.21.5",
+ "bytes",
+ "encoding_rs",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "hyper",
+ "hyper-rustls",
+ "ipnet",
+ "js-sys",
+ "log",
+ "mime",
+ "mime_guess",
+ "once_cell",
+ "percent-encoding",
+ "pin-project-lite",
+ "rustls",
+ "rustls-pemfile",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "system-configuration",
+ "tokio",
+ "tokio-rustls",
+ "tower-service",
+ "trust-dns-resolver 0.23.2",
+ "url",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+ "webpki-roots 0.25.2",
+ "winreg",
+]
+
+[[package]]
+name = "reqwest-middleware"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88a3e86aa6053e59030e7ce2d2a3b258dd08fc2d337d52f73f6cb480f5858690"
+dependencies = [
+ "anyhow",
+ "async-trait",
+ "http",
+ "reqwest",
+ "serde",
+ "task-local-extensions",
+ "thiserror",
+]
+
+[[package]]
+name = "reqwest-retry"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9af20b65c2ee9746cc575acb6bd28a05ffc0d15e25c992a8f4462d8686aacb4f"
+dependencies = [
+ "anyhow",
+ "async-trait",
+ "chrono",
+ "futures",
+ "getrandom 0.2.11",
+ "http",
+ "hyper",
+ "parking_lot 0.11.2",
+ "reqwest",
+ "reqwest-middleware",
+ "retry-policies",
+ "task-local-extensions",
+ "tokio",
+ "tracing",
+ "wasm-timer",
+]
+
+[[package]]
+name = "resolv-conf"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "52e44394d2086d010551b14b53b1f24e31647570cd1deb0379e2c21b329aba00"
+dependencies = [
+ "hostname",
+ "quick-error",
+]
+
+[[package]]
+name = "retry-policies"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17dd00bff1d737c40dbcd47d4375281bf4c17933f9eef0a185fc7bacca23ecbd"
+dependencies = [
+ "anyhow",
+ "chrono",
+ "rand 0.8.5",
+]
+
+[[package]]
+name = "rexpect"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "01ff60778f96fb5a48adbe421d21bf6578ed58c0872d712e7e08593c195adff8"
+dependencies = [
+ "comma",
+ "nix",
+ "regex",
+ "tempfile",
+ "thiserror",
+]
+
+[[package]]
+name = "ring"
+version = "0.16.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc"
+dependencies = [
+ "cc",
+ "libc",
+ "once_cell",
+ "spin 0.5.2",
+ "untrusted 0.7.1",
+ "web-sys",
+ "winapi",
+]
+
+[[package]]
+name = "ring"
+version = "0.17.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb0205304757e5d899b9c2e448b867ffd03ae7f988002e47cd24954391394d0b"
+dependencies = [
+ "cc",
+ "getrandom 0.2.11",
+ "libc",
+ "spin 0.9.8",
+ "untrusted 0.9.0",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "rmp"
+version = "0.8.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f9860a6cc38ed1da53456442089b4dfa35e7cedaa326df63017af88385e6b20"
+dependencies = [
+ "byteorder",
+ "num-traits",
+ "paste",
+]
+
+[[package]]
+name = "rmp-serde"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bffea85eea980d8a74453e5d02a8d93028f3c34725de143085a844ebe953258a"
+dependencies = [
+ "byteorder",
+ "rmp",
+ "serde",
+]
+
+[[package]]
+name = "rsa"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "86ef35bf3e7fe15a53c4ab08a998e42271eab13eb0db224126bc7bc4c4bad96d"
+dependencies = [
+ "const-oid",
+ "digest 0.10.7",
+ "num-bigint-dig",
+ "num-integer",
+ "num-traits",
+ "pkcs1",
+ "pkcs8",
+ "rand_core 0.6.4",
+ "signature",
+ "spki",
+ "subtle",
+ "zeroize",
+]
+
+[[package]]
+name = "rust-embed"
+version = "8.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1e7d90385b59f0a6bf3d3b757f3ca4ece2048265d70db20a2016043d4509a40"
+dependencies = [
+ "rust-embed-impl",
+ "rust-embed-utils",
+ "walkdir",
+]
+
+[[package]]
+name = "rust-embed-impl"
+version = "8.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c3d8c6fd84090ae348e63a84336b112b5c3918b3bf0493a581f7bd8ee623c29"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "rust-embed-utils",
+ "shellexpand",
+ "syn 2.0.39",
+ "walkdir",
+]
+
+[[package]]
+name = "rust-embed-utils"
+version = "8.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "873feff8cb7bf86fdf0a71bb21c95159f4e4a37dd7a4bd1855a940909b583ada"
+dependencies = [
+ "sha2 0.10.8",
+ "walkdir",
+]
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
+
+[[package]]
+name = "rustc-hash"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
+
+[[package]]
+name = "rustc_version"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
+dependencies = [
+ "semver 0.9.0",
+]
+
+[[package]]
+name = "rustc_version"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
+dependencies = [
+ "semver 1.0.20",
+]
+
+[[package]]
+name = "rustc_version_runtime"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d31b7153270ebf48bf91c65ae5b0c00e749c4cfad505f66530ac74950249582f"
+dependencies = [
+ "rustc_version 0.2.3",
+ "semver 0.9.0",
+]
+
+[[package]]
+name = "rusticata-macros"
+version = "4.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "faf0c4a6ece9950b9abdb62b1cfcf2a68b3b67a10ba445b3bb85be2a293d0632"
+dependencies = [
+ "nom",
+]
+
+[[package]]
+name = "rustix"
+version = "0.38.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc99bc2d4f1fed22595588a013687477aedf3cdcfb26558c559edb67b4d9b22e"
+dependencies = [
+ "bitflags 2.4.1",
+ "errno",
+ "itoa",
+ "libc",
+ "linux-raw-sys",
+ "once_cell",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "rustls"
+version = "0.21.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "629648aced5775d558af50b2b4c7b02983a04b312126d45eeead26e7caa498b9"
+dependencies = [
+ "log",
+ "ring 0.17.5",
+ "rustls-webpki",
+ "sct",
+]
+
+[[package]]
+name = "rustls-native-certs"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00"
+dependencies = [
+ "openssl-probe",
+ "rustls-pemfile",
+ "schannel",
+ "security-framework",
+]
+
+[[package]]
+name = "rustls-pemfile"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c"
+dependencies = [
+ "base64 0.21.5",
+]
+
+[[package]]
+name = "rustls-webpki"
+version = "0.101.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765"
+dependencies = [
+ "ring 0.17.5",
+ "untrusted 0.9.0",
+]
+
+[[package]]
+name = "rustrict"
+version = "0.7.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cfe3300a40b60e76a856237ad1fe2210da1f40686705a2211688bb5742109a63"
+dependencies = [
+ "arrayvec 0.7.4",
+ "bitflags 1.3.2",
+ "doc-comment",
+ "finl_unicode",
+ "itertools 0.10.5",
+ "lazy_static",
+ "rustc-hash",
+ "strsim",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "rustversion"
+version = "1.0.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4"
+
+[[package]]
+name = "rusty-fork"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb3dcc6e454c328bb824492db107ab7c0ae8fcffe4ad210136ef014458c1bc4f"
+dependencies = [
+ "fnv",
+ "quick-error",
+ "tempfile",
+ "wait-timeout",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741"
+
+[[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 = "schannel"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88"
+dependencies = [
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "scopeguard"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+
+[[package]]
+name = "sct"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414"
+dependencies = [
+ "ring 0.17.5",
+ "untrusted 0.9.0",
+]
+
+[[package]]
+name = "security-framework"
+version = "2.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de"
+dependencies = [
+ "bitflags 1.3.2",
+ "core-foundation",
+ "core-foundation-sys",
+ "libc",
+ "security-framework-sys",
+]
+
+[[package]]
+name = "security-framework-sys"
+version = "2.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "semver"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
+dependencies = [
+ "semver-parser",
+]
+
+[[package]]
+name = "semver"
+version = "1.0.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "semver-parser"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
+
+[[package]]
+name = "serde"
+version = "1.0.192"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bca2a08484b285dcb282d0f67b26cadc0df8b19f8c12502c13d966bf9482f001"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_bytes"
+version = "0.11.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab33ec92f677585af6d88c65593ae2375adde54efdbf16d597f2cbc7a6d368ff"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.192"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6c7207fbec9faa48073f3e3074cbe553af6ea512d7c21ba46e434e70ea9fbc1"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.108"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b"
+dependencies = [
+ "indexmap 2.1.0",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_path_to_error"
+version = "0.1.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4beec8bce849d58d06238cb50db2e1c417cfeafa4c63f692b15c82b7c80f8335"
+dependencies = [
+ "itoa",
+ "serde",
+]
+
+[[package]]
+name = "serde_qs"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c7715380eec75f029a4ef7de39a9200e0a63823176b759d055b613f5a87df6a6"
+dependencies = [
+ "percent-encoding",
+ "serde",
+ "thiserror",
+]
+
+[[package]]
+name = "serde_qs"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8cac3f1e2ca2fe333923a1ae72caca910b98ed0630bb35ef6f8c8517d6e81afa"
+dependencies = [
+ "percent-encoding",
+ "serde",
+ "thiserror",
+]
+
+[[package]]
+name = "serde_repr"
+version = "0.1.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3081f5ffbb02284dda55132aa26daecedd7372a42417bbbab6f14ab7d6bb9145"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "serde_spanned"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12022b835073e5b11e90a14f86838ceb1c8fb0325b72416845c487ac0fa95e80"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde_urlencoded"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
+dependencies = [
+ "form_urlencoded",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_with"
+version = "1.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "678b5a069e50bf00ecd22d0cd8ddf7c236f68581b03db652061ed5eb13a312ff"
+dependencies = [
+ "serde",
+ "serde_with_macros",
+]
+
+[[package]]
+name = "serde_with"
+version = "3.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64cd236ccc1b7a29e7e2739f27c0b2dd199804abc4290e32f59f3b68d6405c23"
+dependencies = [
+ "base64 0.21.5",
+ "chrono",
+ "hex",
+ "indexmap 1.9.3",
+ "indexmap 2.1.0",
+ "serde",
+ "serde_json",
+ "time",
+]
+
+[[package]]
+name = "serde_with_macros"
+version = "1.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e182d6ec6f05393cc0e5ed1bf81ad6db3a8feedf8ee515ecdd369809bcce8082"
+dependencies = [
+ "darling",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "sha-1"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f5058ada175748e33390e40e872bd0fe59a19f265d0158daa551c5a88a76009c"
+dependencies = [
+ "cfg-if 1.0.0",
+ "cpufeatures",
+ "digest 0.10.7",
+]
+
+[[package]]
+name = "sha1"
+version = "0.10.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba"
+dependencies = [
+ "cfg-if 1.0.0",
+ "cpufeatures",
+ "digest 0.10.7",
+]
+
+[[package]]
+name = "sha1_smol"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012"
+
+[[package]]
+name = "sha2"
+version = "0.9.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800"
+dependencies = [
+ "block-buffer 0.9.0",
+ "cfg-if 1.0.0",
+ "cpufeatures",
+ "digest 0.9.0",
+ "opaque-debug",
+]
+
+[[package]]
+name = "sha2"
+version = "0.10.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8"
+dependencies = [
+ "cfg-if 1.0.0",
+ "cpufeatures",
+ "digest 0.10.7",
+]
+
+[[package]]
+name = "sharded-slab"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6"
+dependencies = [
+ "lazy_static",
+]
+
+[[package]]
+name = "shell-words"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde"
+
+[[package]]
+name = "shellexpand"
+version = "2.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ccc8076840c4da029af4f87e4e8daeb0fca6b87bbb02e10cb60b791450e11e4"
+dependencies = [
+ "dirs 4.0.0",
+]
+
+[[package]]
+name = "shuttle-admin"
+version = "0.34.1"
+dependencies = [
+ "anyhow",
+ "clap",
+ "dirs 5.0.1",
+ "reqwest",
+ "serde",
+ "serde_json",
+ "shuttle-common",
+ "tokio",
+ "toml 0.8.8",
+ "tracing",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "shuttle-auth"
+version = "0.34.1"
+dependencies = [
+ "anyhow",
+ "async-stripe",
+ "async-trait",
+ "axum",
+ "axum-extra",
+ "axum-sessions",
+ "base64 0.21.5",
+ "clap",
+ "http",
+ "hyper",
+ "jsonwebtoken",
+ "opentelemetry",
+ "pem 2.0.1",
+ "portpicker",
+ "rand 0.8.5",
+ "ring 0.17.5",
+ "serde",
+ "serde_json",
+ "shuttle-common",
+ "sqlx",
+ "strum 0.25.0",
+ "thiserror",
+ "tokio",
+ "tower",
+ "tracing",
+ "tracing-opentelemetry",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "shuttle-builder"
+version = "0.34.1"
+dependencies = [
+ "async-trait",
+ "clap",
+ "flate2",
+ "hex",
+ "nbuild-core",
+ "os_pipe",
+ "portpicker",
+ "pretty_assertions",
+ "shuttle-common",
+ "shuttle-common-tests",
+ "shuttle-proto",
+ "tar",
+ "tempfile",
+ "thiserror",
+ "tokio",
+ "toml 0.8.8",
+ "tonic 0.10.2",
+ "tracing",
+ "tracing-subscriber",
+ "ulid",
+]
+
+[[package]]
+name = "shuttle-codegen"
+version = "0.34.1"
+dependencies = [
+ "pretty_assertions",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "reqwest",
+ "serde",
+ "serde_json",
+ "shuttle-common-tests",
+ "syn 2.0.39",
+ "tokio",
+ "trybuild",
+]
+
+[[package]]
+name = "shuttle-common"
+version = "0.34.1"
+dependencies = [
+ "anyhow",
+ "async-trait",
+ "axum",
+ "base64 0.21.5",
+ "bytes",
+ "chrono",
+ "comfy-table",
+ "crossterm 0.27.0",
+ "headers",
+ "http",
+ "http-body",
+ "http-serde",
+ "hyper",
+ "jsonwebtoken",
+ "once_cell",
+ "opentelemetry",
+ "opentelemetry-http",
+ "opentelemetry-otlp",
+ "opentelemetry_sdk",
+ "pin-project",
+ "proptest",
+ "rand 0.8.5",
+ "reqwest",
+ "ring 0.17.5",
+ "rmp-serde",
+ "rustrict",
+ "semver 1.0.20",
+ "serde",
+ "serde_json",
+ "sqlx",
+ "strum 0.25.0",
+ "thiserror",
+ "tokio",
+ "tonic 0.10.2",
+ "tower",
+ "tower-http 0.4.4",
+ "tracing",
+ "tracing-fluent-assertions",
+ "tracing-opentelemetry",
+ "tracing-subscriber",
+ "ttl_cache",
+ "url",
+ "utoipa",
+ "uuid",
+ "zeroize",
+]
+
+[[package]]
+name = "shuttle-common-tests"
+version = "0.34.1"
+dependencies = [
+ "cargo-shuttle",
+ "hyper",
+ "portpicker",
+ "reqwest",
+ "shuttle-common",
+ "shuttle-proto",
+ "tokio",
+ "tokio-stream",
+ "tonic 0.10.2",
+ "tower",
+]
+
+[[package]]
+name = "shuttle-deployer"
+version = "0.34.1"
+dependencies = [
+ "anyhow",
+ "async-trait",
+ "axum",
+ "bytes",
+ "cargo_metadata 0.18.1",
+ "chrono",
+ "clap",
+ "ctor",
+ "flate2",
+ "fqdn",
+ "futures",
+ "hex",
+ "home",
+ "hyper",
+ "hyper-reverse-proxy",
+ "once_cell",
+ "opentelemetry",
+ "opentelemetry-http",
+ "portpicker",
+ "prost-types",
+ "rand 0.8.5",
+ "rmp-serde",
+ "serde",
+ "serde_json",
+ "shuttle-common",
+ "shuttle-common-tests",
+ "shuttle-proto",
+ "shuttle-service",
+ "sqlx",
+ "strum 0.25.0",
+ "tar",
+ "tempfile",
+ "thiserror",
+ "tokio",
+ "tokio-stream",
+ "toml 0.8.8",
+ "tonic 0.10.2",
+ "tower",
+ "tower-http 0.4.4",
+ "tracing",
+ "tracing-opentelemetry",
+ "tracing-subscriber",
+ "ulid",
+ "utoipa",
+ "utoipa-swagger-ui",
+ "uuid",
+]
+
+[[package]]
+name = "shuttle-gateway"
+version = "0.34.1"
+dependencies = [
+ "anyhow",
+ "async-trait",
+ "axum",
+ "axum-server",
+ "bollard",
+ "chrono",
+ "clap",
+ "colored",
+ "flate2",
+ "fqdn",
+ "futures",
+ "http",
+ "hyper",
+ "hyper-reverse-proxy",
+ "instant-acme",
+ "jsonwebtoken",
+ "lazy_static",
+ "num_cpus",
+ "once_cell",
+ "opentelemetry",
+ "opentelemetry-http",
+ "pem 1.1.1",
+ "pin-project",
+ "portpicker",
+ "rand 0.8.5",
+ "rcgen",
+ "reqwest",
+ "ring 0.17.5",
+ "rmp-serde",
+ "rustls",
+ "rustls-pemfile",
+ "serde",
+ "serde_json",
+ "shuttle-common",
+ "shuttle-common-tests",
+ "shuttle-orchestrator",
+ "shuttle-proto",
+ "snailquote",
+ "sqlx",
+ "strum 0.25.0",
+ "tar",
+ "tempfile",
+ "test-context",
+ "tokio",
+ "tonic 0.10.2",
+ "tower",
+ "tower-http 0.4.4",
+ "tower-sanitize-path",
+ "tracing",
+ "tracing-opentelemetry",
+ "tracing-subscriber",
+ "ttl_cache",
+ "ulid",
+ "utoipa",
+ "utoipa-swagger-ui",
+ "uuid",
+ "x509-parser",
+]
+
+[[package]]
+name = "shuttle-logger"
+version = "0.34.1"
+dependencies = [
+ "async-trait",
+ "chrono",
+ "clap",
+ "ctor",
+ "once_cell",
+ "portpicker",
+ "pretty_assertions",
+ "prost-types",
+ "serde_json",
+ "shuttle-common",
+ "shuttle-common-tests",
+ "shuttle-proto",
+ "sqlx",
+ "thiserror",
+ "tokio",
+ "tokio-stream",
+ "tonic 0.10.2",
+ "tracing",
+ "tracing-subscriber",
+ "uuid",
+]
+
+[[package]]
+name = "shuttle-orchestrator"
+version = "0.34.1"
+
+[[package]]
+name = "shuttle-proto"
+version = "0.34.1"
+dependencies = [
+ "anyhow",
+ "chrono",
+ "futures-core",
+ "prost 0.12.2",
+ "prost-types",
+ "serde_json",
+ "shuttle-common",
+ "tokio",
+ "tonic 0.10.2",
+ "tracing",
+]
+
+[[package]]
+name = "shuttle-provisioner"
+version = "0.34.1"
+dependencies = [
+ "aws-config",
+ "aws-sdk-rds",
+ "clap",
+ "ctor",
+ "fqdn",
+ "mongodb",
+ "once_cell",
+ "portpicker",
+ "prost 0.12.2",
+ "rand 0.8.5",
+ "serde_json",
+ "shuttle-common",
+ "shuttle-proto",
+ "sqlx",
+ "thiserror",
+ "tokio",
+ "tonic 0.10.2",
+ "tracing",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "shuttle-resource-recorder"
+version = "0.34.1"
+dependencies = [
+ "async-trait",
+ "chrono",
+ "clap",
+ "portpicker",
+ "pretty_assertions",
+ "prost-types",
+ "serde_json",
+ "shuttle-common",
+ "shuttle-common-tests",
+ "shuttle-proto",
+ "sqlx",
+ "strum 0.25.0",
+ "thiserror",
+ "tokio",
+ "tonic 0.10.2",
+ "tracing",
+ "tracing-subscriber",
+ "ulid",
+]
+
+[[package]]
+name = "shuttle-runtime"
+version = "0.34.1"
+dependencies = [
+ "anyhow",
+ "async-trait",
+ "cap-std",
+ "chrono",
+ "colored",
+ "futures",
+ "hyper",
+ "portpicker",
+ "prost-types",
+ "rmp-serde",
+ "serde",
+ "serde_json",
+ "shuttle-codegen",
+ "shuttle-common",
+ "shuttle-proto",
+ "shuttle-service",
+ "strfmt",
+ "thiserror",
+ "tokio",
+ "tokio-stream",
+ "tonic 0.10.2",
+ "tower",
+ "tracing-subscriber",
+ "uuid",
+ "wasi-common",
+ "wasmtime",
+ "wasmtime-wasi",
+]
+
+[[package]]
+name = "shuttle-service"
+version = "0.34.1"
+dependencies = [
+ "anyhow",
+ "async-trait",
+ "cargo_metadata 0.18.1",
+ "dunce",
+ "serde",
+ "shuttle-common",
+ "shuttle-proto",
+ "strfmt",
+ "thiserror",
+ "tokio",
+ "toml 0.8.8",
+ "tower",
+ "tracing",
+]
+
+[[package]]
+name = "signal-hook"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801"
+dependencies = [
+ "libc",
+ "signal-hook-registry",
+]
+
+[[package]]
+name = "signal-hook-mio"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "29ad2e15f37ec9a6cc544097b78a1ec90001e9f71b81338ca39f430adaca99af"
+dependencies = [
+ "libc",
+ "mio",
+ "signal-hook",
+]
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "signature"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de"
+dependencies = [
+ "digest 0.10.7",
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "simple_asn1"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "adc4e5204eb1910f40f9cfa375f6f05b68c3abac4b6fd879c8ff5e7ae8a0a085"
+dependencies = [
+ "num-bigint",
+ "num-traits",
+ "thiserror",
+ "time",
+]
+
+[[package]]
+name = "slab"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "slice-group-by"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "826167069c09b99d56f31e9ae5c99049e932a98c9dc2dac47645b08dbbf76ba7"
+
+[[package]]
+name = "smallvec"
+version = "1.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970"
+
+[[package]]
+name = "smart-default"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "133659a15339456eeeb07572eb02a91c91e9815e9cbc89566944d2c8d3efdbf6"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "smol_str"
+version = "0.1.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fad6c857cbab2627dcf01ec85a623ca4e7dcb5691cbaa3d7fb7653671f0d09c9"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "snailquote"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec62a949bda7f15800481a711909f946e1204f2460f89210eaf7f57730f88f86"
+dependencies = [
+ "thiserror",
+ "unicode_categories",
+]
+
+[[package]]
+name = "socket2"
+version = "0.4.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "socket2"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9"
+dependencies = [
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "spin"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
+
+[[package]]
+name = "spin"
+version = "0.9.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
+dependencies = [
+ "lock_api",
+]
+
+[[package]]
+name = "spki"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d1e996ef02c474957d681f1b05213dfb0abab947b446a62d37770b23500184a"
+dependencies = [
+ "base64ct",
+ "der",
+]
+
+[[package]]
+name = "sptr"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b9b39299b249ad65f3b7e96443bad61c02ca5cd3589f46cb6d610a0fd6c0d6a"
+
+[[package]]
+name = "sqlformat"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b7b278788e7be4d0d29c0f39497a0eef3fba6bbc8e70d8bf7fde46edeaa9e85"
+dependencies = [
+ "itertools 0.11.0",
+ "nom",
+ "unicode_categories",
+]
+
+[[package]]
+name = "sqlx"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e50c216e3624ec8e7ecd14c6a6a6370aad6ee5d8cfc3ab30b5162eeeef2ed33"
+dependencies = [
+ "sqlx-core",
+ "sqlx-macros",
+ "sqlx-mysql",
+ "sqlx-postgres",
+ "sqlx-sqlite",
+]
+
+[[package]]
+name = "sqlx-core"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8d6753e460c998bbd4cd8c6f0ed9a64346fcca0723d6e75e52fdc351c5d2169d"
+dependencies = [
+ "ahash",
+ "atoi",
+ "byteorder",
+ "bytes",
+ "chrono",
+ "crc",
+ "crossbeam-queue",
+ "dotenvy",
+ "either",
+ "event-listener",
+ "futures-channel",
+ "futures-core",
+ "futures-intrusive",
+ "futures-io",
+ "futures-util",
+ "hashlink",
+ "hex",
+ "indexmap 2.1.0",
+ "log",
+ "memchr",
+ "once_cell",
+ "paste",
+ "percent-encoding",
+ "rustls",
+ "rustls-pemfile",
+ "serde",
+ "serde_json",
+ "sha2 0.10.8",
+ "smallvec",
+ "sqlformat",
+ "thiserror",
+ "tokio",
+ "tokio-stream",
+ "tracing",
+ "url",
+ "uuid",
+ "webpki-roots 0.24.0",
+]
+
+[[package]]
+name = "sqlx-macros"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a793bb3ba331ec8359c1853bd39eed32cdd7baaf22c35ccf5c92a7e8d1189ec"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "sqlx-core",
+ "sqlx-macros-core",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "sqlx-macros-core"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0a4ee1e104e00dedb6aa5ffdd1343107b0a4702e862a84320ee7cc74782d96fc"
+dependencies = [
+ "dotenvy",
+ "either",
+ "heck",
+ "hex",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "serde",
+ "serde_json",
+ "sha2 0.10.8",
+ "sqlx-core",
+ "sqlx-mysql",
+ "sqlx-postgres",
+ "sqlx-sqlite",
+ "syn 1.0.109",
+ "tempfile",
+ "tokio",
+ "url",
+]
+
+[[package]]
+name = "sqlx-mysql"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "864b869fdf56263f4c95c45483191ea0af340f9f3e3e7b4d57a61c7c87a970db"
+dependencies = [
+ "atoi",
+ "base64 0.21.5",
+ "bitflags 2.4.1",
+ "byteorder",
+ "bytes",
+ "chrono",
+ "crc",
+ "digest 0.10.7",
+ "dotenvy",
+ "either",
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-util",
+ "generic-array",
+ "hex",
+ "hkdf",
+ "hmac 0.12.1",
+ "itoa",
+ "log",
+ "md-5",
+ "memchr",
+ "once_cell",
+ "percent-encoding",
+ "rand 0.8.5",
+ "rsa",
+ "serde",
+ "sha1",
+ "sha2 0.10.8",
+ "smallvec",
+ "sqlx-core",
+ "stringprep",
+ "thiserror",
+ "tracing",
+ "uuid",
+ "whoami",
+]
+
+[[package]]
+name = "sqlx-postgres"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eb7ae0e6a97fb3ba33b23ac2671a5ce6e3cabe003f451abd5a56e7951d975624"
+dependencies = [
+ "atoi",
+ "base64 0.21.5",
+ "bitflags 2.4.1",
+ "byteorder",
+ "chrono",
+ "crc",
+ "dotenvy",
+ "etcetera",
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-util",
+ "hex",
+ "hkdf",
+ "hmac 0.12.1",
+ "home",
+ "itoa",
+ "log",
+ "md-5",
+ "memchr",
+ "once_cell",
+ "rand 0.8.5",
+ "serde",
+ "serde_json",
+ "sha1",
+ "sha2 0.10.8",
+ "smallvec",
+ "sqlx-core",
+ "stringprep",
+ "thiserror",
+ "tracing",
+ "uuid",
+ "whoami",
+]
+
+[[package]]
+name = "sqlx-sqlite"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d59dc83cf45d89c555a577694534fcd1b55c545a816c816ce51f20bbe56a4f3f"
+dependencies = [
+ "atoi",
+ "chrono",
+ "flume",
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-intrusive",
+ "futures-util",
+ "libsqlite3-sys",
+ "log",
+ "percent-encoding",
+ "serde",
+ "sqlx-core",
+ "tracing",
+ "url",
+ "uuid",
+]
+
+[[package]]
+name = "stable_deref_trait"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
+
+[[package]]
+name = "static_assertions"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+
+[[package]]
+name = "strfmt"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a8348af2d9fc3258c8733b8d9d8db2e56f54b2363a4b5b81585c7875ed65e65"
+
+[[package]]
+name = "stringprep"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb41d74e231a107a1b4ee36bd1214b11285b77768d2e3824aedafa988fd36ee6"
+dependencies = [
+ "finl_unicode",
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "strum"
+version = "0.24.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f"
+
+[[package]]
+name = "strum"
+version = "0.25.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125"
+dependencies = [
+ "strum_macros 0.25.3",
+]
+
+[[package]]
+name = "strum_macros"
+version = "0.24.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "rustversion",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "strum_macros"
+version = "0.25.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23dc1fa9ac9c169a78ba62f0b841814b7abae11bdd047b9c58f893439e309ea0"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "rustversion",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "subtle"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601"
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.39"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "sync_wrapper"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160"
+
+[[package]]
+name = "synstructure"
+version = "0.12.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "unicode-xid",
+]
+
+[[package]]
+name = "system-configuration"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7"
+dependencies = [
+ "bitflags 1.3.2",
+ "core-foundation",
+ "system-configuration-sys",
+]
+
+[[package]]
+name = "system-configuration-sys"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "system-interface"
+version = "0.26.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "27ce32341b2c0b70c144bbf35627fdc1ef18c76ced5e5e7b3ee8b5ba6b2ab6a0"
+dependencies = [
+ "bitflags 2.4.1",
+ "cap-fs-ext",
+ "cap-std",
+ "fd-lock",
+ "io-lifetimes",
+ "rustix",
+ "windows-sys 0.48.0",
+ "winx",
+]
+
+[[package]]
+name = "take_mut"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f764005d11ee5f36500a149ace24e00e3da98b0158b3e2d53a7495660d3f4d60"
+
+[[package]]
+name = "tap"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369"
+
+[[package]]
+name = "tar"
+version = "0.4.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b16afcea1f22891c49a00c751c7b63b2233284064f11a200fc624137c51e2ddb"
+dependencies = [
+ "filetime",
+ "libc",
+ "xattr",
+]
+
+[[package]]
+name = "target-lexicon"
+version = "0.12.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14c39fd04924ca3a864207c66fc2cd7d22d7c016007f9ce846cbb9326331930a"
+
+[[package]]
+name = "target-spec"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0bf4306559bd50cb358e7af5692694d6f6fad95cf2c0bea2571dd419f5298e12"
+dependencies = [
+ "cfg-expr",
+ "guppy-workspace-hack",
+ "target-lexicon",
+]
+
+[[package]]
+name = "task-local-extensions"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba323866e5d033818e3240feeb9f7db2c4296674e4d9e16b97b7bf8f490434e8"
+dependencies = [
+ "pin-utils",
+]
+
+[[package]]
+name = "tempfile"
+version = "3.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5"
+dependencies = [
+ "cfg-if 1.0.0",
+ "fastrand 2.0.1",
+ "redox_syscall 0.4.1",
+ "rustix",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff1bc3d3f05aff0403e8ac0d92ced918ec05b666a43f83297ccef5bea8a3d449"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "termtree"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76"
+
+[[package]]
+name = "test-context"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "055831a02a4f5aa28fede67f2902014273eb8c21b958ac5ebbd59b71ef30dbc3"
+dependencies = [
+ "async-trait",
+ "futures",
+ "test-context-macros",
+]
+
+[[package]]
+name = "test-context-macros"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8901a55b0a7a06ebc4a674dcca925170da8e613fa3b163a1df804ed10afb154d"
+dependencies = [
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.50"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.50"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "thread_local"
+version = "1.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152"
+dependencies = [
+ "cfg-if 1.0.0",
+ "once_cell",
+]
+
+[[package]]
+name = "time"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4a34ab300f2dee6e562c10a046fc05e358b29f9bf92277f30c3c8d82275f6f5"
+dependencies = [
+ "deranged",
+ "itoa",
+ "libc",
+ "num_threads",
+ "powerfmt",
+ "serde",
+ "time-core",
+ "time-macros",
+]
+
+[[package]]
+name = "time-core"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3"
+
+[[package]]
+name = "time-macros"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ad70d68dba9e1f8aceda7aa6711965dfec1cac869f311a51bd08b3a2ccbce20"
+dependencies = [
+ "time-core",
+]
+
+[[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.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+[[package]]
+name = "tokio"
+version = "1.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d0c014766411e834f7af5b8f4cf46257aab4036ca95e9d2c144a10f59ad6f5b9"
+dependencies = [
+ "backtrace",
+ "bytes",
+ "libc",
+ "mio",
+ "num_cpus",
+ "parking_lot 0.12.1",
+ "pin-project-lite",
+ "signal-hook-registry",
+ "socket2 0.5.5",
+ "tokio-macros",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "tokio-io-timeout"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf"
+dependencies = [
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-macros"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "tokio-rustls"
+version = "0.24.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081"
+dependencies = [
+ "rustls",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-stream"
+version = "0.1.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842"
+dependencies = [
+ "futures-core",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-test"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e89b3cbabd3ae862100094ae433e1def582cf86451b4e9bf83aa7ac1d8a7d719"
+dependencies = [
+ "async-stream",
+ "bytes",
+ "futures-core",
+ "tokio",
+ "tokio-stream",
+]
+
+[[package]]
+name = "tokio-tungstenite"
+version = "0.20.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "212d5dcb2a1ce06d81107c3d0ffa3121fe974b73f068c8282cb1c32328113b6c"
+dependencies = [
+ "futures-util",
+ "log",
+ "rustls",
+ "tokio",
+ "tokio-rustls",
+ "tungstenite",
+ "webpki-roots 0.25.2",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.7.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-io",
+ "futures-sink",
+ "pin-project-lite",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "tokiotest-httpserver"
+version = "0.2.1"
+source = "git+https://github.com/shuttle-hq/tokiotest-httpserver?branch=feat/body#ca413a227397f0d0441b4454581ddd803acabdd7"
+dependencies = [
+ "async-trait",
+ "futures",
+ "hyper",
+ "lazy_static",
+ "queues",
+ "serde_json",
+ "test-context",
+ "tokio",
+ "tokio-test",
+ "tower-http 0.2.5",
+]
+
+[[package]]
+name = "toml"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml"
+version = "0.7.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257"
+dependencies = [
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "toml_edit 0.19.15",
+]
+
+[[package]]
+name = "toml"
+version = "0.8.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1a195ec8c9da26928f773888e0742ca3ca1040c6cd859c919c9f59c1954ab35"
+dependencies = [
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "toml_edit 0.21.0",
+]
+
+[[package]]
+name = "toml_datetime"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.19.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421"
+dependencies = [
+ "indexmap 2.1.0",
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "winnow",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.20.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81"
+dependencies = [
+ "indexmap 2.1.0",
+ "toml_datetime",
+ "winnow",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d34d383cd00a163b4a5b85053df514d45bc330f6de7737edfe0a93311d1eaa03"
+dependencies = [
+ "indexmap 2.1.0",
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "winnow",
+]
+
+[[package]]
+name = "tonic"
+version = "0.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3082666a3a6433f7f511c7192923fa1fe07c69332d3c6a2e6bb040b569199d5a"
+dependencies = [
+ "async-trait",
+ "axum",
+ "base64 0.21.5",
+ "bytes",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "hyper",
+ "hyper-timeout",
+ "percent-encoding",
+ "pin-project",
+ "prost 0.11.9",
+ "tokio",
+ "tokio-stream",
+ "tower",
+ "tower-layer",
+ "tower-service",
+ "tracing",
+]
+
+[[package]]
+name = "tonic"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d560933a0de61cf715926b9cac824d4c883c2c43142f787595e48280c40a1d0e"
+dependencies = [
+ "async-stream",
+ "async-trait",
+ "axum",
+ "base64 0.21.5",
+ "bytes",
+ "h2",
+ "http",
+ "http-body",
+ "hyper",
+ "hyper-timeout",
+ "percent-encoding",
+ "pin-project",
+ "prost 0.12.2",
+ "tokio",
+ "tokio-stream",
+ "tower",
+ "tower-layer",
+ "tower-service",
+ "tracing",
+]
+
+[[package]]
+name = "tower"
+version = "0.4.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c"
+dependencies = [
+ "futures-core",
+ "futures-util",
+ "indexmap 1.9.3",
+ "pin-project",
+ "pin-project-lite",
+ "rand 0.8.5",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tower-layer",
+ "tower-service",
+ "tracing",
+]
+
+[[package]]
+name = "tower-http"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aba3f3efabf7fb41fae8534fc20a817013dd1c12cb45441efb6c82e6556b4cd8"
+dependencies = [
+ "bitflags 1.3.2",
+ "bytes",
+ "futures-core",
+ "futures-util",
+ "http",
+ "http-body",
+ "http-range-header",
+ "pin-project-lite",
+ "tower-layer",
+ "tower-service",
+]
+
+[[package]]
+name = "tower-http"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61c5bb1d698276a2443e5ecfabc1008bf15a36c12e6a7176e7bf089ea9131140"
+dependencies = [
+ "base64 0.21.5",
+ "bitflags 2.4.1",
+ "bytes",
+ "futures-core",
+ "futures-util",
+ "http",
+ "http-body",
+ "http-range-header",
+ "mime",
+ "pin-project-lite",
+ "tower-layer",
+ "tower-service",
+ "tracing",
+]
+
+[[package]]
+name = "tower-layer"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0"
+
+[[package]]
+name = "tower-sanitize-path"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4f8277387194ad48739f3516a54ef4486927ba53b8d889871f3715fb8f99f5aa"
+dependencies = [
+ "http",
+ "tower-layer",
+ "tower-service",
+ "url-escape",
+]
+
+[[package]]
+name = "tower-service"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
+
+[[package]]
+name = "tracing"
+version = "0.1.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef"
+dependencies = [
+ "log",
+ "pin-project-lite",
+ "tracing-attributes",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-attributes"
+version = "0.1.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54"
+dependencies = [
+ "once_cell",
+ "valuable",
+]
+
+[[package]]
+name = "tracing-fluent-assertions"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12de1a8c6bcfee614305e836308b596bbac831137a04c61f7e5b0b0bf2cfeaf6"
+dependencies = [
+ "tracing",
+ "tracing-core",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "tracing-log"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3"
+dependencies = [
+ "log",
+ "once_cell",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-opentelemetry"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c67ac25c5407e7b961fafc6f7e9aa5958fd297aada2d20fa2ae1737357e55596"
+dependencies = [
+ "js-sys",
+ "once_cell",
+ "opentelemetry",
+ "opentelemetry_sdk",
+ "smallvec",
+ "tracing",
+ "tracing-core",
+ "tracing-log",
+ "tracing-subscriber",
+ "web-time",
+]
+
+[[package]]
+name = "tracing-subscriber"
+version = "0.3.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b"
+dependencies = [
+ "matchers",
+ "nu-ansi-term",
+ "once_cell",
+ "regex",
+ "sharded-slab",
+ "smallvec",
+ "thread_local",
+ "tracing",
+ "tracing-core",
+ "tracing-log",
+]
+
+[[package]]
+name = "trust-dns-proto"
+version = "0.21.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c31f240f59877c3d4bb3b3ea0ec5a6a0cff07323580ff8c7a605cd7d08b255d"
+dependencies = [
+ "async-trait",
+ "cfg-if 1.0.0",
+ "data-encoding",
+ "enum-as-inner 0.4.0",
+ "futures-channel",
+ "futures-io",
+ "futures-util",
+ "idna 0.2.3",
+ "ipnet",
+ "lazy_static",
+ "log",
+ "rand 0.8.5",
+ "smallvec",
+ "thiserror",
+ "tinyvec",
+ "tokio",
+ "url",
+]
+
+[[package]]
+name = "trust-dns-proto"
+version = "0.23.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3119112651c157f4488931a01e586aa459736e9d6046d3bd9105ffb69352d374"
+dependencies = [
+ "async-trait",
+ "cfg-if 1.0.0",
+ "data-encoding",
+ "enum-as-inner 0.6.0",
+ "futures-channel",
+ "futures-io",
+ "futures-util",
+ "idna 0.4.0",
+ "ipnet",
+ "once_cell",
+ "rand 0.8.5",
+ "smallvec",
+ "thiserror",
+ "tinyvec",
+ "tokio",
+ "tracing",
+ "url",
+]
+
+[[package]]
+name = "trust-dns-resolver"
+version = "0.21.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e4ba72c2ea84515690c9fcef4c6c660bb9df3036ed1051686de84605b74fd558"
+dependencies = [
+ "cfg-if 1.0.0",
+ "futures-util",
+ "ipconfig",
+ "lazy_static",
+ "log",
+ "lru-cache",
+ "parking_lot 0.12.1",
+ "resolv-conf",
+ "smallvec",
+ "thiserror",
+ "tokio",
+ "trust-dns-proto 0.21.2",
+]
+
+[[package]]
+name = "trust-dns-resolver"
+version = "0.23.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "10a3e6c3aff1718b3c73e395d1f35202ba2ffa847c6a62eea0db8fb4cfe30be6"
+dependencies = [
+ "cfg-if 1.0.0",
+ "futures-util",
+ "ipconfig",
+ "lru-cache",
+ "once_cell",
+ "parking_lot 0.12.1",
+ "rand 0.8.5",
+ "resolv-conf",
+ "smallvec",
+ "thiserror",
+ "tokio",
+ "tracing",
+ "trust-dns-proto 0.23.2",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
+
+[[package]]
+name = "trybuild"
+version = "1.0.85"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "196a58260a906cedb9bf6d8034b6379d0c11f552416960452f267402ceeddff1"
+dependencies = [
+ "basic-toml",
+ "glob",
+ "once_cell",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "termcolor",
+]
+
+[[package]]
+name = "ttl_cache"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4189890526f0168710b6ee65ceaedf1460c48a14318ceec933cb26baa492096a"
+dependencies = [
+ "linked-hash-map",
+]
+
+[[package]]
+name = "tungstenite"
+version = "0.20.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e3dac10fd62eaf6617d3a904ae222845979aec67c615d1c842b4002c7666fb9"
+dependencies = [
+ "byteorder",
+ "bytes",
+ "data-encoding",
+ "http",
+ "httparse",
+ "log",
+ "rand 0.8.5",
+ "rustls",
+ "sha1",
+ "thiserror",
+ "url",
+ "utf-8",
+]
+
+[[package]]
+name = "typed-builder"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89851716b67b937e393b3daa8423e67ddfc4bbbf1654bcf05488e95e0828db0c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "typenum"
+version = "1.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
+
+[[package]]
+name = "ulid"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e37c4b6cbcc59a8dcd09a6429fbc7890286bcbb79215cea7b38a3c4c0921d93"
+dependencies = [
+ "rand 0.8.5",
+ "serde",
+]
+
+[[package]]
+name = "unarray"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94"
+
+[[package]]
+name = "unicase"
+version = "2.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89"
+dependencies = [
+ "version_check",
+]
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
+
+[[package]]
+name = "unicode-bom"
+version = "2.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7eec5d1121208364f6793f7d2e222bf75a915c19557537745b195b253dd64217"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85"
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c"
+
+[[package]]
+name = "unicode_categories"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e"
+
+[[package]]
+name = "untrusted"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
+
+[[package]]
+name = "untrusted"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1"
+
+[[package]]
+name = "url"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5"
+dependencies = [
+ "form_urlencoded",
+ "idna 0.4.0",
+ "percent-encoding",
+ "serde",
+]
+
+[[package]]
+name = "url-escape"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44e0ce4d1246d075ca5abec4b41d33e87a6054d08e2366b63205665e950db218"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "urlencoding"
+version = "2.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da"
+
+[[package]]
+name = "utf-8"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9"
+
+[[package]]
+name = "utf8parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
+
+[[package]]
+name = "utoipa"
+version = "4.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ff05e3bac2c9428f57ade702667753ca3f5cf085e2011fe697de5bfd49aa72d"
+dependencies = [
+ "indexmap 2.1.0",
+ "serde",
+ "serde_json",
+ "utoipa-gen",
+]
+
+[[package]]
+name = "utoipa-gen"
+version = "4.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f0b6f4667edd64be0e820d6631a60433a269710b6ee89ac39525b872b76d61d"
+dependencies = [
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+ "uuid",
+]
+
+[[package]]
+name = "utoipa-swagger-ui"
+version = "4.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "154517adf0d0b6e22e8e1f385628f14fcaa3db43531dc74303d3edef89d6dfe5"
+dependencies = [
+ "axum",
+ "mime_guess",
+ "regex",
+ "rust-embed",
+ "serde",
+ "serde_json",
+ "utoipa",
+ "zip",
+]
+
+[[package]]
+name = "uuid"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88ad59a7560b41a70d191093a945f0b87bc1deeda46fb237479708a1d6b6cdfc"
+dependencies = [
+ "getrandom 0.2.11",
+ "serde",
+]
+
+[[package]]
+name = "valuable"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
+
+[[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 = "vsimd"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c3082ca00d5a5ef149bb8b555a72ae84c9c59f7250f013ac822ac2e49b19c64"
+
+[[package]]
+name = "wait-timeout"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "waker-fn"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3c4517f54858c779bbcbf228f4fca63d121bf85fbecb2dc578cdf4a39395690"
+
+[[package]]
+name = "walkdir"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee"
+dependencies = [
+ "same-file",
+ "winapi-util",
+]
+
+[[package]]
+name = "want"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e"
+dependencies = [
+ "try-lock",
+]
+
+[[package]]
+name = "wasi"
+version = "0.9.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasi-cap-std-sync"
+version = "13.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77c4db6155e71cfae4ed732d87c2583faf4bbdcb77372697eb77d636f46108ba"
+dependencies = [
+ "anyhow",
+ "async-trait",
+ "cap-fs-ext",
+ "cap-rand",
+ "cap-std",
+ "cap-time-ext",
+ "fs-set-times",
+ "io-extras",
+ "io-lifetimes",
+ "is-terminal",
+ "once_cell",
+ "rustix",
+ "system-interface",
+ "tracing",
+ "wasi-common",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "wasi-common"
+version = "13.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf3f291b2a567f266ac488715f1742f62b2ca633524708c62ead9c0f71b7d72c"
+dependencies = [
+ "anyhow",
+ "bitflags 2.4.1",
+ "cap-rand",
+ "cap-std",
+ "io-extras",
+ "log",
+ "rustix",
+ "thiserror",
+ "tracing",
+ "wasmtime",
+ "wiggle",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.88"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7daec296f25a1bae309c0cd5c29c4b260e510e6d813c286b19eaadf409d40fce"
+dependencies = [
+ "cfg-if 1.0.0",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.88"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e397f4664c0e4e428e8313a469aaa58310d302159845980fd23b0f22a847f217"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9afec9963e3d0994cac82455b2b3502b81a7f40f9a0d32181f7528d9f4b43e02"
+dependencies = [
+ "cfg-if 1.0.0",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.88"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5961017b3b08ad5f3fe39f1e79877f8ee7c23c5e5fd5eb80de95abc41f1f16b2"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.88"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c5353b8dab669f5e10f5bd76df26a9360c748f054f862ff5f3f8aae0c7fb3907"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.88"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d046c5d029ba91a1ed14da14dca44b68bf2f124cfbaf741c54151fdb3e0750b"
+
+[[package]]
+name = "wasm-encoder"
+version = "0.32.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ba64e81215916eaeb48fee292f29401d69235d62d8b8fd92a7b2844ec5ae5f7"
+dependencies = [
+ "leb128",
+]
+
+[[package]]
+name = "wasm-encoder"
+version = "0.37.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d135e8940b69dbee0f5b0a0be9c1cd6fa8b71d774904c13a3fcfc5dc265e43d"
+dependencies = [
+ "leb128",
+]
+
+[[package]]
+name = "wasm-timer"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be0ecb0db480561e9a7642b5d3e4187c128914e58aa84330b9493e3eb68c5e7f"
+dependencies = [
+ "futures",
+ "js-sys",
+ "parking_lot 0.11.2",
+ "pin-utils",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+]
+
+[[package]]
+name = "wasmparser"
+version = "0.112.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e986b010f47fcce49cf8ea5d5f9e5d2737832f12b53ae8ae785bbe895d0877bf"
+dependencies = [
+ "indexmap 2.1.0",
+ "semver 1.0.20",
+]
+
+[[package]]
+name = "wasmparser"
+version = "0.117.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b206de0c992af9f0b51ef2fb9455623e0a19eb68f172cd8ba9cd0e46637f5ab"
+dependencies = [
+ "hashbrown 0.14.2",
+ "indexmap 2.1.0",
+ "semver 1.0.20",
+]
+
+[[package]]
+name = "wasmprinter"
+version = "0.2.73"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a4fdb34710b461c868c3f79a10a48b404f23b46fd471ab02bcaa60fd96c5c4b"
+dependencies = [
+ "anyhow",
+ "wasmparser 0.117.0",
+]
+
+[[package]]
+name = "wasmtime"
+version = "13.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0263693caa1486bd4d26a5f18511948a706c9290689386b81b851ce088063ce"
+dependencies = [
+ "anyhow",
+ "async-trait",
+ "bincode",
+ "bumpalo",
+ "cfg-if 1.0.0",
+ "encoding_rs",
+ "fxprof-processed-profile",
+ "indexmap 2.1.0",
+ "libc",
+ "log",
+ "object",
+ "once_cell",
+ "paste",
+ "psm",
+ "rayon",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "target-lexicon",
+ "wasm-encoder 0.32.0",
+ "wasmparser 0.112.0",
+ "wasmtime-cache",
+ "wasmtime-component-macro",
+ "wasmtime-component-util",
+ "wasmtime-cranelift",
+ "wasmtime-environ",
+ "wasmtime-fiber",
+ "wasmtime-jit",
+ "wasmtime-runtime",
+ "wasmtime-winch",
+ "wat",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "wasmtime-asm-macros"
+version = "13.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4711e5969236ecfbe70c807804ff9ffb5206c1dbb5c55c5e8200d9f7e8e76adf"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "wasmtime-cache"
+version = "13.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b79f9f79188e5a26b6911b79d3171c06699d9a17ae07f6a265c51635b8d80c2"
+dependencies = [
+ "anyhow",
+ "base64 0.21.5",
+ "bincode",
+ "directories-next",
+ "log",
+ "rustix",
+ "serde",
+ "serde_derive",
+ "sha2 0.10.8",
+ "toml 0.5.11",
+ "windows-sys 0.48.0",
+ "zstd",
+]
+
+[[package]]
+name = "wasmtime-component-macro"
+version = "13.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed724d0f41c21bcf8754651a59d0423c530069ddca4cf3822768489ad313a812"
+dependencies = [
+ "anyhow",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+ "wasmtime-component-util",
+ "wasmtime-wit-bindgen",
+ "wit-parser",
+]
+
+[[package]]
+name = "wasmtime-component-util"
+version = "13.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e7d69464b94bd312a27d93d0b482cd74bedf01f030199ef0740d6300ebca1d3"
+
+[[package]]
+name = "wasmtime-cranelift"
+version = "13.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4e63f53c61ba05eb815f905c1738ad82c95333dd42ef5a8cc2aa3d7dfb2b08d7"
+dependencies = [
+ "anyhow",
+ "cfg-if 1.0.0",
+ "cranelift-codegen",
+ "cranelift-control",
+ "cranelift-entity",
+ "cranelift-frontend",
+ "cranelift-native",
+ "cranelift-wasm",
+ "gimli",
+ "log",
+ "object",
+ "target-lexicon",
+ "thiserror",
+ "wasmparser 0.112.0",
+ "wasmtime-cranelift-shared",
+ "wasmtime-environ",
+ "wasmtime-versioned-export-macros",
+]
+
+[[package]]
+name = "wasmtime-cranelift-shared"
+version = "13.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4f6b197d68612f7dc3a17aa9f9587533715ecb8b4755609ce9baf7fb92b74ddc"
+dependencies = [
+ "anyhow",
+ "cranelift-codegen",
+ "cranelift-control",
+ "cranelift-native",
+ "gimli",
+ "object",
+ "target-lexicon",
+ "wasmtime-environ",
+]
+
+[[package]]
+name = "wasmtime-environ"
+version = "13.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "18e2558c8b04fd27764d8601d46b8dc39555b79720a41e626bce210a80758932"
+dependencies = [
+ "anyhow",
+ "cranelift-entity",
+ "gimli",
+ "indexmap 2.1.0",
+ "log",
+ "object",
+ "serde",
+ "serde_derive",
+ "target-lexicon",
+ "thiserror",
+ "wasm-encoder 0.32.0",
+ "wasmparser 0.112.0",
+ "wasmprinter",
+ "wasmtime-component-util",
+ "wasmtime-types",
+]
+
+[[package]]
+name = "wasmtime-fiber"
+version = "13.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a615a2cf64a49c0dc659c7d850c6cd377b975e0abfdcf0888b282d274a82e730"
+dependencies = [
+ "cc",
+ "cfg-if 1.0.0",
+ "rustix",
+ "wasmtime-asm-macros",
+ "wasmtime-versioned-export-macros",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "wasmtime-jit"
+version = "13.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd775514b8034b85b0323bfdc60abb1c28d27dbf6e22aad083ed57dac95cf72e"
+dependencies = [
+ "addr2line",
+ "anyhow",
+ "bincode",
+ "cfg-if 1.0.0",
+ "cpp_demangle",
+ "gimli",
+ "ittapi",
+ "log",
+ "object",
+ "rustc-demangle",
+ "rustix",
+ "serde",
+ "serde_derive",
+ "target-lexicon",
+ "wasmtime-environ",
+ "wasmtime-jit-debug",
+ "wasmtime-jit-icache-coherence",
+ "wasmtime-runtime",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "wasmtime-jit-debug"
+version = "13.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c054e27c6ce2a6191edabe89e646da013044dd5369e1d203c89f977f9bd32937"
+dependencies = [
+ "object",
+ "once_cell",
+ "rustix",
+ "wasmtime-versioned-export-macros",
+]
+
+[[package]]
+name = "wasmtime-jit-icache-coherence"
+version = "13.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f323977cddf4a262d1b856366b665c5b4d01793c57b79fb42505b9fd9e61e5b"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "wasmtime-runtime"
+version = "13.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "29e26461bba043f73cb4183f4ce0d606c0eaac112475867b11e5ea36fe1cac8e"
+dependencies = [
+ "anyhow",
+ "cc",
+ "cfg-if 1.0.0",
+ "encoding_rs",
+ "indexmap 2.1.0",
+ "libc",
+ "log",
+ "mach",
+ "memfd",
+ "memoffset 0.9.0",
+ "paste",
+ "rand 0.8.5",
+ "rustix",
+ "sptr",
+ "wasm-encoder 0.32.0",
+ "wasmtime-asm-macros",
+ "wasmtime-environ",
+ "wasmtime-fiber",
+ "wasmtime-jit-debug",
+ "wasmtime-versioned-export-macros",
+ "wasmtime-wmemcheck",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "wasmtime-types"
+version = "13.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6fd7e9b29fee64eea5058cb5e7cb3480b52c2f1312d431d16ea8617ceebeb421"
+dependencies = [
+ "cranelift-entity",
+ "serde",
+ "serde_derive",
+ "thiserror",
+ "wasmparser 0.112.0",
+]
+
+[[package]]
+name = "wasmtime-versioned-export-macros"
+version = "13.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6362c557c36d8ad4aaab735f14ed9e4f78d6b40ec85a02a88fd859af87682e52"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "wasmtime-wasi"
+version = "13.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "52c9e79f73320d96cd7644b021502dffee09dd92300b073f3541ae44e9ae377c"
+dependencies = [
+ "anyhow",
+ "async-trait",
+ "bitflags 2.4.1",
+ "bytes",
+ "cap-fs-ext",
+ "cap-net-ext",
+ "cap-rand",
+ "cap-std",
+ "cap-time-ext",
+ "fs-set-times",
+ "futures",
+ "io-extras",
+ "io-lifetimes",
+ "is-terminal",
+ "libc",
+ "once_cell",
+ "rustix",
+ "system-interface",
+ "thiserror",
+ "tokio",
+ "tracing",
+ "wasi-cap-std-sync",
+ "wasi-common",
+ "wasmtime",
+ "wiggle",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "wasmtime-winch"
+version = "13.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa5fc7212424c04c01a20bfa66c4c518e8749dde6546f5e05815dcacbec80723"
+dependencies = [
+ "anyhow",
+ "cranelift-codegen",
+ "gimli",
+ "object",
+ "target-lexicon",
+ "wasmparser 0.112.0",
+ "wasmtime-cranelift-shared",
+ "wasmtime-environ",
+ "winch-codegen",
+]
+
+[[package]]
+name = "wasmtime-wit-bindgen"
+version = "13.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dcc03bd58f77a68dc6a0b2ba2f8e64b1f902b50389d21bbcc690ef2f3bb87198"
+dependencies = [
+ "anyhow",
+ "heck",
+ "indexmap 2.1.0",
+ "wit-parser",
+]
+
+[[package]]
+name = "wasmtime-wmemcheck"
+version = "13.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e485bf54eba675ca615f8f55788d3a8cd44e7bd09b8b4011edc22c2c41d859e"
+
+[[package]]
+name = "wast"
+version = "35.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2ef140f1b49946586078353a453a1d28ba90adfc54dde75710bc1931de204d68"
+dependencies = [
+ "leb128",
+]
+
+[[package]]
+name = "wast"
+version = "68.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7bf3081ac6bcb3a5b72a401693b3566feb529dc2b7e7b62ea544c8a30d0f4d05"
+dependencies = [
+ "leb128",
+ "memchr",
+ "unicode-width",
+ "wasm-encoder 0.37.0",
+]
+
+[[package]]
+name = "wat"
+version = "1.0.80"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6fabe07d22a837b3bd5662ba9e980d73de115c040923659a1801934c7ccebe49"
+dependencies = [
+ "wast 68.0.0",
+]
+
+[[package]]
+name = "web-sys"
+version = "0.3.65"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5db499c5f66323272151db0e666cd34f78617522fb0c1604d31a27c50c206a85"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "web-time"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57099a701fb3a8043f993e8228dc24229c7b942e2b009a1b962e54489ba1d3bf"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "webbrowser"
+version = "0.8.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "82b2391658b02c27719fc5a0a73d6e696285138e8b12fba9d4baa70451023c71"
+dependencies = [
+ "core-foundation",
+ "home",
+ "jni",
+ "log",
+ "ndk-context",
+ "objc",
+ "raw-window-handle",
+ "url",
+ "web-sys",
+]
+
+[[package]]
+name = "webpki-roots"
+version = "0.24.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b291546d5d9d1eab74f069c77749f2cb8504a12caa20f0f2de93ddbf6f411888"
+dependencies = [
+ "rustls-webpki",
+]
+
+[[package]]
+name = "webpki-roots"
+version = "0.25.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14247bb57be4f377dfb94c72830b8ce8fc6beac03cf4bf7b9732eadd414123fc"
+
+[[package]]
+name = "whoami"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "22fc3756b8a9133049b26c7f61ab35416c130e8c09b660f5b3958b446f52cc50"
+
+[[package]]
+name = "widestring"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "653f141f39ec16bba3c5abe400a0c60da7468261cc2cbf36805022876bc721a8"
+
+[[package]]
+name = "wiggle"
+version = "13.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e81ddbdc400b38d04241d740d0406ef343bd242c460f252fe59f29ad964ad24c"
+dependencies = [
+ "anyhow",
+ "async-trait",
+ "bitflags 2.4.1",
+ "thiserror",
+ "tracing",
+ "wasmtime",
+ "wiggle-macro",
+]
+
+[[package]]
+name = "wiggle-generate"
+version = "13.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7c993123d6db1a1908ef8352aabdf2e681a3dcdedc3656beb747e4db16d3cf08"
+dependencies = [
+ "anyhow",
+ "heck",
+ "proc-macro2",
+ "quote",
+ "shellexpand",
+ "syn 2.0.39",
+ "witx",
+]
+
+[[package]]
+name = "wiggle-macro"
+version = "13.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "476e3e09bc68e82624b70a322265515523754cb9e05fcacceabd216e276bc2ed"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+ "wiggle-generate",
+]
+
+[[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.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596"
+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"
+
+[[package]]
+name = "winch-codegen"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9b01ca6722f7421c9cdbe4c9b62342ce864d0a9e8736d56dac717a86b1a65ae"
+dependencies = [
+ "anyhow",
+ "cranelift-codegen",
+ "gimli",
+ "regalloc2",
+ "smallvec",
+ "target-lexicon",
+ "wasmparser 0.112.0",
+ "wasmtime-environ",
+]
+
+[[package]]
+name = "windows"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f"
+dependencies = [
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "windows-core"
+version = "0.51.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64"
+dependencies = [
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
+dependencies = [
+ "windows-targets 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
+dependencies = [
+ "windows_aarch64_gnullvm 0.48.5",
+ "windows_aarch64_msvc 0.48.5",
+ "windows_i686_gnu 0.48.5",
+ "windows_i686_msvc 0.48.5",
+ "windows_x86_64_gnu 0.48.5",
+ "windows_x86_64_gnullvm 0.48.5",
+ "windows_x86_64_msvc 0.48.5",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
+
+[[package]]
+name = "winnow"
+version = "0.5.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "829846f3e3db426d4cee4510841b71a8e58aa2a76b1132579487ae430ccd9c7b"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "winreg"
+version = "0.50.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1"
+dependencies = [
+ "cfg-if 1.0.0",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "winx"
+version = "0.36.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "357bb8e2932df531f83b052264b050b81ba0df90ee5a59b2d1d3949f344f81e5"
+dependencies = [
+ "bitflags 2.4.1",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "wit-parser"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a39edca9abb16309def3843af73b58d47d243fe33a9ceee572446bcc57556b9a"
+dependencies = [
+ "anyhow",
+ "id-arena",
+ "indexmap 2.1.0",
+ "log",
+ "pulldown-cmark",
+ "semver 1.0.20",
+ "serde",
+ "serde_json",
+ "unicode-xid",
+ "url",
+]
+
+[[package]]
+name = "witx"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e366f27a5cabcddb2706a78296a40b8fcc451e1a6aba2fc1d94b4a01bdaaef4b"
+dependencies = [
+ "anyhow",
+ "log",
+ "thiserror",
+ "wast 35.0.2",
+]
+
+[[package]]
+name = "wyz"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed"
+dependencies = [
+ "tap",
+]
+
+[[package]]
+name = "x509-parser"
+version = "0.15.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7069fba5b66b9193bd2c5d3d4ff12b839118f6bcbef5328efafafb5395cf63da"
+dependencies = [
+ "asn1-rs",
+ "data-encoding",
+ "der-parser",
+ "lazy_static",
+ "nom",
+ "oid-registry",
+ "rusticata-macros",
+ "thiserror",
+ "time",
+]
+
+[[package]]
+name = "xattr"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4686009f71ff3e5c4dbcf1a282d0a44db3f021ba69350cd42086b3e5f1c6985"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "xmlparser"
+version = "0.13.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "66fee0b777b0f5ac1c69bb06d361268faafa61cd4682ae064a171c16c433e9e4"
+
+[[package]]
+name = "yansi"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec"
+
+[[package]]
+name = "yasna"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e17bb3549cc1321ae1296b9cdc2698e2b6cb1992adfa19a8c72e5b7a738f44cd"
+dependencies = [
+ "time",
+]
+
+[[package]]
+name = "zerocopy"
+version = "0.7.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e97e415490559a91254a2979b4829267a57d2fcd741a98eee8b722fb57289aa0"
+dependencies = [
+ "zerocopy-derive",
+]
+
+[[package]]
+name = "zerocopy-derive"
+version = "0.7.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd7e48ccf166952882ca8bd778a43502c64f33bf94c12ebe2a7f08e5a0f6689f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "zeroize"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d"
+
+[[package]]
+name = "zip"
+version = "0.6.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "760394e246e4c28189f19d488c058bf16f564016aefac5d32bb1f3b51d5e9261"
+dependencies = [
+ "byteorder",
+ "crc32fast",
+ "crossbeam-utils",
+ "flate2",
+]
+
+[[package]]
+name = "zstd"
+version = "0.11.2+zstd.1.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4"
+dependencies = [
+ "zstd-safe",
+]
+
+[[package]]
+name = "zstd-safe"
+version = "5.0.2+zstd.1.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db"
+dependencies = [
+ "libc",
+ "zstd-sys",
+]
+
+[[package]]
+name = "zstd-sys"
+version = "2.0.9+zstd.1.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e16efa8a874a0481a574084d34cc26fdb3b99627480f785888deb6386506656"
+dependencies = [
+ "cc",
+ "pkg-config",
+]
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-shuttle/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-shuttle/default.nix
new file mode 100644
index 000000000000..9d0a0fc0ca08
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-shuttle/default.nix
@@ -0,0 +1,56 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, openssl
+, zlib
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-shuttle";
+  version = "0.34.1";
+
+  src = fetchFromGitHub {
+    owner = "shuttle-hq";
+    repo = "shuttle";
+    rev = "v${version}";
+    hash = "sha256-SAad1GS092a9LBzlnf1UMLGwKsNBOgWP0gjoW2M0SH4=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "hyper-reverse-proxy-0.5.2-dev" = "sha256-R1ZXGgWvwHWRHmKX823QLqM6ZJW+tzWUXigKkAyI5OE=";
+      "tokiotest-httpserver-0.2.1" = "sha256-IPUaglIDwCUoczCCnX+R1IBqtc0s8b8toKEL8zN3/i8=";
+    };
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    openssl
+    zlib
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.CoreServices
+    darwin.apple_sdk.frameworks.SystemConfiguration
+  ];
+
+  cargoBuildFlags = [ "-p" "cargo-shuttle" ];
+
+  cargoTestFlags = cargoBuildFlags ++ [
+    # other tests are failing for different reasons
+    "init::shuttle_init_tests::"
+  ];
+
+  meta = with lib; {
+    description = "A cargo command for the shuttle platform";
+    homepage = "https://shuttle.rs";
+    changelog = "https://github.com/shuttle-hq/shuttle/releases/tag/${src.rev}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-sort/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-sort/default.nix
new file mode 100644
index 000000000000..bb0d96bdd638
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-sort/default.nix
@@ -0,0 +1,23 @@
+{ fetchFromGitHub, lib, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-sort";
+  version = "1.0.9";
+
+  src = fetchFromGitHub {
+    owner = "devinr528";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-fqmyL4ZSz+nKfUIrcrfLRT9paEas5d00Y/kvEqyz2vw=";
+  };
+
+  cargoSha256 = "sha256-JON6cE1ZHeI+0vU9AJp0e1TIbiH3AWjHyn0jd9PNqQU=";
+
+  meta = with lib; {
+    description = "A tool to check that your Cargo.toml dependencies are sorted alphabetically";
+    homepage = "https://github.com/devinr528/cargo-sort";
+    changelog = "https://github.com/devinr528/cargo-sort/blob/v${version}/changelog.md";
+    license = with licenses; [ mit /* or */ asl20 ];
+    maintainers = with maintainers; [ figsoda matthiasbeyer ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-spellcheck/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-spellcheck/default.nix
new file mode 100644
index 000000000000..374517aeef2d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-spellcheck/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, stdenv
+, Security
+, SystemConfiguration
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-spellcheck";
+  version = "0.13.2";
+
+  src = fetchFromGitHub {
+    owner = "drahnr";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-PgV+sjCf4O24v0i9P7RJIcn28OWMUcPSwy+P5n8RwS4=";
+  };
+
+  cargoHash = "sha256-6dhM+FzuLtKtRp2mpE9nlpT+0PBcgGqvBa9vqs6Rs7s=";
+
+  nativeBuildInputs = [ rustPlatform.bindgenHook ];
+
+  buildInputs = lib.optionals stdenv.isDarwin [ Security SystemConfiguration ];
+
+  preCheck = "HOME=$(mktemp -d)";
+
+  checkFlags = [
+    "--skip checker::hunspell::tests::hunspell_binding_is_sane"
+  ];
+
+  meta = with lib; {
+    description = "Checks rust documentation for spelling and grammar mistakes";
+    homepage = "https://github.com/drahnr/cargo-spellcheck";
+    changelog = "https://github.com/drahnr/cargo-spellcheck/blob/v${version}/CHANGELOG.md";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ newam matthiasbeyer ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-supply-chain/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-supply-chain/default.nix
new file mode 100644
index 000000000000..bedbc17a22a6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-supply-chain/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-supply-chain";
+  version = "0.3.3";
+
+  src = fetchFromGitHub {
+    owner = "rust-secure-code";
+    repo = "cargo-supply-chain";
+    rev = "v${version}";
+    hash = "sha256-KjeYB9TFbuJ2KPaObeM0ADs5F8uJJ6/czMPQjBUgIk8=";
+  };
+
+  cargoHash = "sha256-Fx1C4X0dQqePqLa+X+4ZDrIMFKBQ6J50nBApYXcGbFM=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  meta = with lib; {
+    description = "Gather author, contributor and publisher data on crates in your dependency graph";
+    homepage = "https://github.com/rust-secure-code/cargo-supply-chain";
+    changelog = "https://github.com/rust-secure-code/cargo-supply-chain/blob/${src.rev}/CHANGELOG.md";
+    license = with licenses; [ asl20 mit zlib ]; # any of three
+    maintainers = with maintainers; [ figsoda matthiasbeyer ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-sweep/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-sweep/default.nix
new file mode 100644
index 000000000000..1c5564c72332
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-sweep/default.nix
@@ -0,0 +1,27 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-sweep";
+  version = "0.7.0";
+
+  src = fetchFromGitHub {
+    owner = "holmgr";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-L9tWTgW8PIjxeby+wa71NPp3kWMYH5D7PNtpk8Bmeyc=";
+  };
+
+  cargoSha256 = "sha256-aalB7gHLc3YIgSOg68wc2fyzXFGfHO5x5YdzhuRmyro=";
+
+  checkFlags = [
+    # Requires a rustup toolchain to be installed.
+    "--skip check_toolchain_listing_on_multiple_projects"
+  ];
+
+  meta = with lib; {
+    description = "A Cargo subcommand for cleaning up unused build files generated by Cargo";
+    homepage = "https://github.com/holmgr/cargo-sweep";
+    license = licenses.mit;
+    maintainers = with maintainers; [ xrelkd matthiasbeyer ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-sync-readme/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-sync-readme/default.nix
new file mode 100644
index 000000000000..a761e42c1540
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-sync-readme/default.nix
@@ -0,0 +1,23 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-sync-readme";
+  version = "1.1";
+
+  src = fetchFromGitHub {
+    owner = "phaazon";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-n9oIWblTTuXFFQFN6mpQiCH5N7yg5fAp8v9vpB5/DAo=";
+  };
+
+  cargoSha256 = "sha256-DsB2C2ELuvuVSvxG/xztmnY2qfX8+Y7udbXlpRQoL/c=";
+
+  meta = with lib; {
+    description = "A cargo plugin that generates a Markdown section in your README based on your Rust documentation";
+    homepage = "https://github.com/phaazon/cargo-sync-readme";
+    changelog = "https://github.com/phaazon/cargo-sync-readme/blob/${version}/CHANGELOG.md";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ b4dm4n matthiasbeyer ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-tally/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-tally/default.nix
new file mode 100644
index 000000000000..9a1adef89190
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-tally/default.nix
@@ -0,0 +1,27 @@
+{ lib, rustPlatform, fetchCrate, stdenv, darwin }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-tally";
+  version = "1.0.35";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-RtpOKngi8oTCnJFXSHHlBPpNoPcco06yyB2/+S5nG04=";
+  };
+
+  cargoHash = "sha256-CC4F7fsQsjNAVwslxVHG3scjqWvKfjlDve27LEGXSms=";
+
+  buildInputs = lib.optionals stdenv.isDarwin (with darwin.apple_sdk_11_0.frameworks; [
+    DiskArbitration
+    Foundation
+    IOKit
+  ]);
+
+  meta = with lib; {
+    description = "Graph the number of crates that depend on your crate over time";
+    homepage = "https://github.com/dtolnay/cargo-tally";
+    changelog = "https://github.com/dtolnay/cargo-tally/releases/tag/${version}";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ figsoda matthiasbeyer ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-tauri/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-tauri/default.nix
new file mode 100644
index 000000000000..73256d0f4b3a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-tauri/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+, openssl
+, pkg-config
+, glibc
+, libsoup
+, cairo
+, gtk3
+, webkitgtk
+, darwin
+}:
+
+let
+  inherit (darwin.apple_sdk.frameworks) CoreServices Security SystemConfiguration;
+in
+rustPlatform.buildRustPackage rec {
+  pname = "tauri";
+  version = "1.5.4";
+
+  src = fetchFromGitHub {
+    owner = "tauri-apps";
+    repo = pname;
+    rev = "tauri-v${version}";
+    hash = "sha256-1rhdvTjA53Zxx3qm/Im2uQBWbYU/HlPPUQ3txq0uLps=";
+  };
+
+  # Manually specify the sourceRoot since this crate depends on other crates in the workspace. Relevant info at
+  # https://discourse.nixos.org/t/difficulty-using-buildrustpackage-with-a-src-containing-multiple-cargo-workspaces/10202
+  sourceRoot = "${src.name}/tooling/cli";
+
+  cargoHash = "sha256-CHX4fesnqxoeplqXGFrn4RSfGdrkhKNANvXIwMkWXDs=";
+
+  buildInputs = [ openssl ] ++ lib.optionals stdenv.isLinux [ glibc libsoup cairo gtk3 webkitgtk ]
+    ++ lib.optionals stdenv.isDarwin [ CoreServices Security SystemConfiguration ];
+  nativeBuildInputs = [ pkg-config ];
+
+  meta = with lib; {
+    description = "Build smaller, faster, and more secure desktop applications with a web frontend";
+    homepage = "https://tauri.app/";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ dit7ya happysalada ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-temp/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-temp/default.nix
new file mode 100644
index 000000000000..9df84462efa7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-temp/default.nix
@@ -0,0 +1,23 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-temp";
+  version = "0.2.19";
+
+  src = fetchFromGitHub {
+    owner = "yozhgoor";
+    repo = "cargo-temp";
+    rev = "v${version}";
+    hash = "sha256-vLD7M+Pg0BHJq9zDPeJLY+v/Vri/XtV3pQu0+ZE84Ew=";
+  };
+
+  cargoHash = "sha256-NKT5AijwNm/BVhHGVAXq6sWBJYjSpq90TXHjlrihldo=";
+
+  meta = with lib; {
+    description = "A CLI tool that allow you to create a temporary new Rust project using cargo with already installed dependencies";
+    homepage = "https://github.com/yozhgoor/cargo-temp";
+    changelog = "https://github.com/yozhgoor/cargo-temp/releases/tag/${src.rev}";
+    license = with licenses; [ mit /* or */ asl20 ];
+    maintainers = with maintainers; [ figsoda matthiasbeyer ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-toml-lint/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-toml-lint/default.nix
new file mode 100644
index 000000000000..187dc636afbc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-toml-lint/default.nix
@@ -0,0 +1,24 @@
+{ lib
+, rustPlatform
+, fetchCrate
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-toml-lint";
+  version = "0.1.1";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-U3y9gnFvkqJmyFqRAUQorJQY0iRzAE9UUXzFmgZIyaM=";
+  };
+
+  cargoHash = "sha256-ujdekIucqes2Wya4jwTMLstb8JMptbAlqYhgMxfp2gg=";
+
+  meta = with lib; {
+    description = "A simple linter for Cargo.toml manifests";
+    homepage = "https://github.com/fuellabs/cargo-toml-lint";
+    changelog = "https://github.com/fuellabs/cargo-toml-lint/releases/tag/v${version}";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ mitchmindtree matthiasbeyer ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-udeps/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-udeps/default.nix
new file mode 100644
index 000000000000..e82d9b01ce1f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-udeps/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, rustPlatform, fetchFromGitHub, pkg-config, openssl, CoreServices, Security, libiconv, SystemConfiguration }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-udeps";
+  version = "0.1.45";
+
+  src = fetchFromGitHub {
+    owner = "est31";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-pfEvztV/DAPPOxm8An/PsBdoF8S/AK+/S+vllezYCeo=";
+  };
+
+  cargoHash = "sha256-SYlFENdnMeKxeDDHw73/edu1807rgrg8ncWTBsmgPtY=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  # TODO figure out how to use provided curl instead of compiling curl from curl-sys
+  buildInputs = [ openssl ]
+    ++ lib.optionals stdenv.isDarwin [ CoreServices Security libiconv SystemConfiguration ];
+
+  # Requires network access
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Find unused dependencies in Cargo.toml";
+    homepage = "https://github.com/est31/cargo-udeps";
+    license = licenses.mit;
+    maintainers = with maintainers; [ b4dm4n matthiasbeyer ];
+    mainProgram = "cargo-udeps";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-ui/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-ui/default.nix
new file mode 100644
index 000000000000..7af23346f0fb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-ui/default.nix
@@ -0,0 +1,58 @@
+{ lib
+, rustPlatform
+, fetchCrate
+, pkg-config
+, libgit2_1_5
+, openssl
+, stdenv
+, expat
+, fontconfig
+, libGL
+, xorg
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-ui";
+  version = "0.3.3";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-M/ljgtTHMSc7rY/a8CpKGNuOSdVDwRt6+tzPPHdpKOw=";
+  };
+
+  cargoHash = "sha256-u3YqXQZCfveSBjxdWb+GC0IA9bpruAYQdxX1zanT3fw=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    libgit2_1_5
+    openssl
+  ] ++ lib.optionals stdenv.isLinux [
+    expat
+    fontconfig
+    libGL
+    xorg.libX11
+    xorg.libXcursor
+    xorg.libXi
+    xorg.libXrandr
+    xorg.libxcb
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.AppKit
+  ];
+
+  postFixup = lib.optionalString stdenv.isLinux ''
+    patchelf $out/bin/cargo-ui \
+      --add-rpath ${lib.makeLibraryPath [ fontconfig libGL ]}
+  '';
+
+  meta = with lib; {
+    description = "A GUI for Cargo";
+    homepage = "https://github.com/slint-ui/cargo-ui";
+    changelog = "https://github.com/slint-ui/cargo-ui/blob/v${version}/CHANGELOG.md";
+    license = with licenses; [ mit asl20 gpl3Only ];
+    maintainers = with maintainers; [ figsoda matthiasbeyer ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-unused-features/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-unused-features/default.nix
new file mode 100644
index 000000000000..f6e3057ecffe
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-unused-features/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, rustPlatform
+, fetchCrate
+, curl
+, pkg-config
+, libgit2_1_5
+, openssl
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-unused-features";
+  version = "0.2.0";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-gdwIbbQDw/DgBV9zY2Rk/oWjPv1SS/+oFnocsMo2Axo=";
+  };
+
+  cargoHash = "sha256-K9I7Eg43BS2SKq5zZ3eZrMkmuHAx09OX240sH0eGs+k=";
+
+  nativeBuildInputs = [
+    curl.dev
+    pkg-config
+  ];
+
+  buildInputs = [
+    curl
+    libgit2_1_5
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.CoreFoundation
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  meta = with lib; {
+    description = "A tool to find potential unused enabled feature flags and prune them";
+    homepage = "https://github.com/timonpost/cargo-unused-features";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda matthiasbeyer ];
+    mainProgram = "unused-features";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-update/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-update/default.nix
new file mode 100644
index 000000000000..3b3418f38dc0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-update/default.nix
@@ -0,0 +1,65 @@
+{ lib
+, rustPlatform
+, fetchCrate
+, cmake
+, installShellFiles
+, pkg-config
+, ronn
+, stdenv
+, curl
+, libgit2_1_5
+, libssh2
+, openssl
+, zlib
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-update";
+  version = "13.3.0";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-owiMVeH7m4LoM8c4qjLyFx3v/+Flzt+C+O8qEuXazvc=";
+  };
+
+  cargoHash = "sha256-WtNH62DBo6WFOUcHnZxn0Jco4SUmhO0+1wXPRB2wxic=";
+
+  nativeBuildInputs = [
+    cmake
+    installShellFiles
+    pkg-config
+    ronn
+  ] ++ lib.optionals stdenv.isDarwin [
+    curl
+  ];
+
+  buildInputs = [
+    libgit2_1_5
+    libssh2
+    openssl
+    zlib
+  ] ++ lib.optionals stdenv.isDarwin [
+    curl
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  postBuild = ''
+    # Man pages contain non-ASCII, so explicitly set encoding to UTF-8.
+    HOME=$TMPDIR \
+    RUBYOPT="-E utf-8:utf-8" \
+      ronn -r --organization="cargo-update developers" man/*.md
+  '';
+
+  postInstall = ''
+    installManPage man/*.1
+  '';
+
+  meta = with lib; {
+    description = "A cargo subcommand for checking and applying updates to installed executables";
+    homepage = "https://github.com/nabijaczleweli/cargo-update";
+    changelog = "https://github.com/nabijaczleweli/cargo-update/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ gerschtli Br1ght0ne johntitor matthiasbeyer ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-valgrind/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-valgrind/default.nix
new file mode 100644
index 000000000000..aa6b38bf398b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-valgrind/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, nix-update-script
+, makeWrapper
+, valgrind
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-valgrind";
+  version = "2.1.1";
+
+  src = fetchFromGitHub {
+    owner = "jfrimmel";
+    repo = "cargo-valgrind";
+    rev = "v${version}";
+    sha256 = "sha256-l/1paghG/ARD0JfzNh0xj2UD5kW6FddM8Xrd/FCygYc=";
+  };
+
+  cargoSha256 = "sha256-9/kIIZDIsOhUvRT3TyXN5PGFUB+a8m2yXmzBbsPUK28=";
+
+  passthru = {
+    updateScript = nix-update-script { };
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postInstall = ''
+    wrapProgram $out/bin/cargo-valgrind --prefix PATH : ${lib.makeBinPath [ valgrind ]}
+  '';
+
+  checkFlags = [
+    "--skip examples_are_runnable"
+    "--skip tests_are_runnable"
+  ];
+
+  meta = with lib; {
+    description = ''Cargo subcommand "valgrind": runs valgrind and collects its output in a helpful manner'';
+    homepage = "https://github.com/jfrimmel/cargo-valgrind";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ otavio matthiasbeyer ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-vet/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-vet/default.nix
new file mode 100644
index 000000000000..817307c55a59
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-vet/default.nix
@@ -0,0 +1,29 @@
+{ lib, rustPlatform, fetchFromGitHub, stdenv, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-vet";
+  version = "0.8.0";
+
+  src = fetchFromGitHub {
+    owner = "mozilla";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-VnOqQ1dKgNZSHTzJrD7stoCzNGrSkYxcLDJAsrJUsEQ=";
+  };
+
+  cargoSha256 = "sha256-M8sZzgSEMIB6pPVaE+tC18MCbwYaYpHOnhrEvm9JTso=";
+
+  buildInputs = lib.optional stdenv.isDarwin Security;
+
+  # the test_project tests require internet access
+  checkFlags = [
+    "--skip=test_project"
+  ];
+
+  meta = with lib; {
+    description = "A tool to help projects ensure that third-party Rust dependencies have been audited by a trusted source";
+    homepage = "https://mozilla.github.io/cargo-vet";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ figsoda jk ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-wasi/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-wasi/default.nix
new file mode 100644
index 000000000000..7fcdf761ad2f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-wasi/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, rustPlatform
+, fetchCrate
+, pkg-config
+, stdenv
+, openssl
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-wasi";
+  version = "0.1.28";
+
+  src = fetchCrate {
+    inherit version;
+    pname = "cargo-wasi-src";
+    sha256 = "sha256-fmQ23BtcBUPNcgZgvNq85iqdY6WRUhqwAp4aIobqMIw=";
+  };
+
+  cargoHash = "sha256-yXtxznUp2gECq2CvRByiFzbTjYtWvTheDjGoynJWb+o=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = lib.optionals stdenv.isLinux [ openssl ]
+    ++ lib.optionals stdenv.isDarwin [ Security ];
+
+  # Checks need to be disabled here because the current test suite makes assumptions
+  # about the surrounding environment that aren't Nix friendly. See these lines for specifics:
+  # https://github.com/bytecodealliance/cargo-wasi/blob/0.1.28/tests/tests/support.rs#L13-L18
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A lightweight Cargo subcommand to build code for the wasm32-wasi target";
+    homepage = "https://bytecodealliance.github.io/cargo-wasi";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ lucperkins ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-watch/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-watch/default.nix
new file mode 100644
index 000000000000..fe748a7dbeb5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-watch/default.nix
@@ -0,0 +1,38 @@
+{ stdenv
+, lib
+, rustPlatform
+, fetchFromGitHub
+, Cocoa
+, Foundation
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-watch";
+  version = "8.5.2";
+
+  src = fetchFromGitHub {
+    owner = "watchexec";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-Vf6BFr8MphaUJoHMtksbbVQb+jha7jowhktQCVFxlxQ=";
+  };
+
+  cargoHash = "sha256-skUG1B6TCFEXeQSRwA6vWjXmNifk5bTR4+JESw7CZMo=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [ Foundation Cocoa ];
+
+  NIX_LDFLAGS = lib.optionals (stdenv.isDarwin && stdenv.isx86_64) [ "-framework" "AppKit" ];
+
+  # `test with_cargo` tries to call cargo-watch as a cargo subcommand
+  # (calling cargo-watch with command `cargo watch`)
+  preCheck = ''
+    export PATH="$(pwd)/target/${stdenv.hostPlatform.rust.rustcTarget}/release:$PATH"
+  '';
+
+  meta = with lib; {
+    description = "A Cargo subcommand for watching over Cargo project's source";
+    homepage = "https://github.com/watchexec/cargo-watch";
+    license = licenses.cc0;
+    maintainers = with maintainers; [ xrelkd ivan matthiasbeyer ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-web/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-web/default.nix
new file mode 100644
index 000000000000..2c35e951cda1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-web/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub, openssl, perl, pkg-config, rustPlatform
+, CoreServices, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-web";
+  version = "0.6.26";
+
+  src = fetchFromGitHub {
+    owner = "koute";
+    repo = pname;
+    rev = version;
+    sha256 = "1dl5brj5fnmxmwl130v36lvy4j64igdpdvjwmxw3jgg2c6r6b7cd";
+  };
+
+  cargoSha256 = "0q7yxvvngfvn4s889qzp1qnsw2c6qy2ryv9vz9cxhmqidx4dg4va";
+
+  nativeBuildInputs = [ openssl perl pkg-config ];
+  buildInputs = lib.optionals stdenv.isDarwin [ CoreServices Security ];
+
+  meta = with lib; {
+    description = "A Cargo subcommand for the client-side Web";
+    homepage = "https://github.com/koute/cargo-web";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ kevincox ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-whatfeatures/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-whatfeatures/default.nix
new file mode 100644
index 000000000000..b2a5993343ef
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-whatfeatures/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, pkg-config, openssl, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-whatfeatures";
+  version = "0.9.9";
+
+  src = fetchFromGitHub {
+    owner = "museun";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-YENzXU7sud3gsh32zh1EwGEgfvnIIa4FzHMwGKuI3JA=";
+  };
+
+  cargoSha256 = "sha256-mUBqygJBisZl3wJh/pXVLLq7P6EWz0Pd2j+iu2pz7Os=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ openssl ]
+    ++ lib.optionals stdenv.isDarwin [ Security ];
+
+  meta = with lib; {
+    description = "A simple cargo plugin to get a list of features for a specific crate";
+    homepage = "https://github.com/museun/cargo-whatfeatures";
+    license = with licenses; [ mit asl20 ];
+    maintainers = with maintainers; [ ivan-babrou matthiasbeyer ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-wipe/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-wipe/default.nix
new file mode 100644
index 000000000000..c14f842a7398
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-wipe/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, nix-update-script
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-wipe";
+  version = "0.3.3";
+
+  src = fetchFromGitHub {
+    owner = "mihai-dinculescu";
+    repo = "cargo-wipe";
+    rev = "v${version}";
+    sha256 = "sha256-xMYpZ6a8HdULblkfEqnqLjX8OVFJWx8MHDGNhuFzdTc=";
+  };
+
+  cargoSha256 = "sha256-/cne7uTGyxgTRONWMEE5dPbPDnCxf+ZnYzYXRAeHJyQ=";
+
+  passthru = {
+    updateScript = nix-update-script { };
+  };
+
+  meta = with lib; {
+    description = ''Cargo subcommand "wipe": recursively finds and optionally wipes all "target" or "node_modules" folders'';
+    homepage = "https://github.com/mihai-dinculescu/cargo-wipe";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ otavio ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-workspaces/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-workspaces/default.nix
new file mode 100644
index 000000000000..5cb3c4de96b1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-workspaces/default.nix
@@ -0,0 +1,55 @@
+{ lib
+, rustPlatform
+, fetchCrate
+, pkg-config
+, libgit2_1_6
+, libssh2
+, openssl
+, zlib
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-workspaces";
+  version = "0.3.1";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-1YFTBzFr11FUfwgdGJgyF1lWvrfQ6ZPIkYAG7vySfFA=";
+  };
+
+  cargoHash = "sha256-wL1DKZ1QhBKB4Gy2rbwe4y/hR4A/wiiVqGAIcM+Om8E=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    libgit2_1_6
+    libssh2
+    openssl
+    zlib
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+    darwin.apple_sdk.frameworks.SystemConfiguration
+  ];
+
+  env = {
+    LIBSSH2_SYS_USE_PKG_CONFIG = true;
+  };
+
+  meta = with lib; {
+    description = "A tool for managing cargo workspaces and their crates, inspired by lerna";
+    longDescription = ''
+      A tool that optimizes the workflow around cargo workspaces with
+      git and cargo by providing utilities to version, publish, execute
+      commands and more.
+    '';
+    homepage = "https://github.com/pksunkara/cargo-workspaces";
+    changelog = "https://github.com/pksunkara/cargo-workspaces/blob/v${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda macalinao matthiasbeyer ];
+    mainProgram = "cargo-workspaces";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-xbuild/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-xbuild/default.nix
new file mode 100644
index 000000000000..55911b7f8a62
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-xbuild/default.nix
@@ -0,0 +1,22 @@
+{ lib, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-xbuild";
+  version = "0.6.6";
+
+  src = fetchFromGitHub {
+    owner = "rust-osdev";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-29rCjmzxxIjR5nBN2J3xxP+r8NnPIJV90FkSQQEBbo4=";
+  };
+
+  cargoHash = "sha256-tyPhKWDSDNxQy+vpWNS5VP5D8TkUR7MJSAlG8wZsDy4=";
+
+  meta = with lib; {
+    description = "Automatically cross-compiles the sysroot crates core, compiler_builtins, and alloc";
+    homepage = "https://github.com/rust-osdev/cargo-xbuild";
+    license = with licenses; [ mit asl20 ];
+    maintainers = with maintainers; [ johntitor xrelkd ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-zigbuild/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-zigbuild/default.nix
new file mode 100644
index 000000000000..adc845c67ea7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-zigbuild/default.nix
@@ -0,0 +1,30 @@
+{ lib, rustPlatform, fetchFromGitHub, makeWrapper, zig }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-zigbuild";
+  version = "0.18.3";
+
+  src = fetchFromGitHub {
+    owner = "messense";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-wL6Rmw5hJI8cJDw2WO9CDOyeOuZv6QoFxrn81JrYBR4=";
+  };
+
+  cargoHash = "sha256-uCZYDh4+Pri77DzqZj12cav7o8eDY2+fgwIwVBdcbHg=";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postInstall = ''
+    wrapProgram $out/bin/cargo-zigbuild \
+      --prefix PATH : ${zig}/bin
+  '';
+
+  meta = with lib; {
+    description = "A tool to compile Cargo projects with zig as the linker";
+    homepage = "https://github.com/messense/cargo-zigbuild";
+    changelog = "https://github.com/messense/cargo-zigbuild/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo2junit/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo2junit/default.nix
new file mode 100644
index 000000000000..dd65d2422a3c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo2junit/default.nix
@@ -0,0 +1,20 @@
+{ fetchCrate, lib, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo2junit";
+  version = "0.1.13";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-R3a87nXCnGhdeyR7409hFR5Cj3TFUWqaLNOtlXPsvto=";
+  };
+
+  cargoHash = "sha256-u5Pd967qxjqFl9fV/KkClLDBwKql7p66WqbIVBvWKuM=";
+
+  meta = with lib; {
+    description = "Converts cargo's json output (from stdin) to JUnit XML (to stdout).";
+    homepage = "https://github.com/johnterickson/cargo2junit";
+    license = licenses.mit;
+    maintainers = with maintainers; [ alekseysidorov ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cauwugo/default.nix b/nixpkgs/pkgs/development/tools/rust/cauwugo/default.nix
new file mode 100644
index 000000000000..119e0f59841d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cauwugo/default.nix
@@ -0,0 +1,30 @@
+{ lib, rustPlatform, fetchCrate, installShellFiles }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cauwugo";
+  version = "0.1.0";
+
+  src = fetchCrate {
+    inherit version;
+    pname = "bpaf_cauwugo";
+    sha256 = "sha256-9gWUu2qbscKlbWZlRbOn+rrmizegkHxPnwnAmpaV1Ww=";
+  };
+
+  cargoSha256 = "sha256-dXlSBb3ey3dAiifrQ9Bbhscnm1QmcChiQbX1ic069V4=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    installShellCompletion --cmd cauwugo \
+      --bash <($out/bin/cauwugo --bpaf-complete-style-bash) \
+      --fish <($out/bin/cauwugo --bpaf-complete-style-fish) \
+      --zsh  <($out/bin/cauwugo --bpaf-complete-style-zsh)
+  '';
+
+  meta = with lib; {
+    description = "An alternative cargo frontend that implements dynamic shell completion for usual cargo commands";
+    homepage = "https://github.com/pacak/bpaf/tree/master/bpaf_cauwugo";
+    license = with licenses; [ mit /* or */ asl20 ];
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cbindgen/default.nix b/nixpkgs/pkgs/development/tools/rust/cbindgen/default.nix
new file mode 100644
index 000000000000..2d351adf5ad1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cbindgen/default.nix
@@ -0,0 +1,51 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, cmake
+, python3Packages
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rust-cbindgen";
+  version = "0.26.0";
+
+  src = fetchFromGitHub {
+    owner = "mozilla";
+    repo = "cbindgen";
+    rev = "v${version}";
+    hash = "sha256-gyNZAuxpeOjuC+Rh9jAyHSBQRRYUlYoIrBKuCFg3Hao=";
+  };
+
+  cargoSha256 = "sha256-pdTxhECAZzBx5C01Yx7y/OGwhhAdlEDpqLBdvQcb8bc=";
+
+  buildInputs = lib.optional stdenv.isDarwin Security;
+
+  nativeCheckInputs = [
+    cmake
+    python3Packages.cython
+  ];
+
+  checkFlags = [
+    # Disable tests that require rust unstable features
+    # https://github.com/eqrion/cbindgen/issues/338
+    "--skip test_expand"
+    "--skip test_bitfield"
+    "--skip lib_default_uses_debug_build"
+    "--skip lib_explicit_debug_build"
+    "--skip lib_explicit_release_build"
+  ] ++ lib.optionals stdenv.isDarwin [
+    # WORKAROUND: test_body fails when using clang
+    # https://github.com/eqrion/cbindgen/issues/628
+    "--skip test_body"
+  ];
+
+  meta = with lib; {
+    changelog = "https://github.com/mozilla/cbindgen/blob/v${version}/CHANGES";
+    description = "A project for generating C bindings from Rust code";
+    homepage = "https://github.com/mozilla/cbindgen";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ hexa ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/crate2nix/default.nix b/nixpkgs/pkgs/development/tools/rust/crate2nix/default.nix
new file mode 100644
index 000000000000..62084be4b5a8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/crate2nix/default.nix
@@ -0,0 +1,56 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, makeWrapper
+
+, cargo
+, nix
+, nix-prefetch-git
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "crate2nix";
+  version = "0.12.0";
+
+  src = fetchFromGitHub {
+    owner = "nix-community";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-A9AowkHIjsy1a4LuiPiVP88FMxyCWK41flZEZOUuwQM=";
+  };
+
+  sourceRoot = "${src.name}/crate2nix";
+
+  cargoHash = "sha256-85OIOhRdVDu5hZuBzanyqkH1gOuF5IQGubVrLAqt1ak=";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  # Tests use nix(1), which tries (and fails) to set up /nix/var inside the
+  # sandbox
+  doCheck = false;
+
+  postFixup = ''
+    wrapProgram $out/bin/crate2nix \
+        --suffix PATH ":" ${lib.makeBinPath [ cargo nix nix-prefetch-git ]}
+
+    rm -rf $out/lib $out/bin/crate2nix.d
+    mkdir -p \
+      $out/share/bash-completion/completions \
+      $out/share/zsh/vendor-completions
+    $out/bin/crate2nix completions -s 'bash' -o $out/share/bash-completion/completions
+    $out/bin/crate2nix completions -s 'zsh' -o $out/share/zsh/vendor-completions
+  '';
+
+  meta = with lib; {
+    description = "A Nix build file generator for Rust crates.";
+    longDescription = ''
+      Crate2nix generates Nix files from Cargo.toml/lock files
+      so that you can build every crate individually in a Nix sandbox.
+    '';
+    homepage = "https://github.com/nix-community/crate2nix";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ kolloch cole-h ];
+    platforms = platforms.all;
+  };
+}
+
diff --git a/nixpkgs/pkgs/development/tools/rust/critcmp/default.nix b/nixpkgs/pkgs/development/tools/rust/critcmp/default.nix
new file mode 100644
index 000000000000..dd735f1adc49
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/critcmp/default.nix
@@ -0,0 +1,25 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "critcmp";
+  version = "0.1.8";
+
+  src = fetchFromGitHub {
+    owner = "BurntSushi";
+    repo = "critcmp";
+    rev = version;
+    hash = "sha256-cf78R9siH0RFbx+vXTs71VblpsQokL6Uo32N3X4lV2I=";
+  };
+
+  cargoHash = "sha256-yzWa+/08tG8h+5V8XBc3k8GDivS6SHW6zVb+ug1sbE0=";
+
+  meta = with lib; {
+    description = "A command line tool for comparing benchmarks run by Criterion";
+    homepage = "https://github.com/BurntSushi/critcmp";
+    license = with licenses; [ mit unlicense ];
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/dioxus-cli/default.nix b/nixpkgs/pkgs/development/tools/rust/dioxus-cli/default.nix
new file mode 100644
index 000000000000..5243203f1926
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/dioxus-cli/default.nix
@@ -0,0 +1,60 @@
+{ lib
+, stdenv
+, fetchCrate
+, rustPlatform
+, pkg-config
+, cacert
+, openssl
+, darwin
+, testers
+, dioxus-cli
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "dioxus-cli";
+  version = "0.4.3";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-TWcuEobYH2xpuwB1S63HoP/WjH3zHXTnlXXvOcYIZG8=";
+  };
+
+  cargoHash = "sha256-ozbGK46uq3qXZifyTY7DDX1+vQuDJuSOJZw35vwcuxY=";
+
+  nativeBuildInputs = [ pkg-config cacert ];
+  buildInputs = [ openssl ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.CoreServices
+  ];
+
+  OPENSSL_NO_VENDOR = 1;
+
+  checkFlags = [
+    # requires network access
+    "--skip=server::web::proxy::test::add_proxy"
+    "--skip=server::web::proxy::test::add_proxy_trailing_slash"
+  ];
+
+  # Omitted: --doc
+  # Can be removed after 0.4.3 or when https://github.com/DioxusLabs/dioxus/pull/1706 is resolved
+  # Matches upstream package test CI https://github.com/DioxusLabs/dioxus/blob/544ca5559654c8490ce444c3cbd85c1bfb8479da/Makefile.toml#L94-L108
+  cargoTestFlags = [
+    "--lib"
+    "--bins"
+    "--tests"
+    "--examples"
+  ];
+
+  passthru.tests.version = testers.testVersion {
+    package = dioxus-cli;
+    command = "${meta.mainProgram} --version";
+    inherit version;
+  };
+
+  meta = with lib; {
+    homepage = "https://dioxuslabs.com";
+    description = "CLI tool for developing, testing, and publishing Dioxus apps";
+    license = with licenses; [ mit asl20 ];
+    maintainers = with maintainers; [ xanderio cathalmullan ];
+    mainProgram = "dx";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/duckscript/default.nix b/nixpkgs/pkgs/development/tools/rust/duckscript/default.nix
new file mode 100644
index 000000000000..3b8c27ddbb1a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/duckscript/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, stdenv
+, fetchurl
+, runCommand
+, fetchCrate
+, rustPlatform
+, Security
+, openssl
+, pkg-config
+, SystemConfiguration
+, libiconv
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "duckscript_cli";
+  version = "0.9.3";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-2ouEmI7BH9J+PEN7l3rE8nmd0Khe2Bjq1Bg9SgGnB4E=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ openssl ]
+    ++ lib.optionals stdenv.isDarwin [ Security SystemConfiguration libiconv ];
+
+  cargoHash = "sha256-bBqcHETEWooMgQeqPOZIK/77DdTtGq1JusBKoRj5K6w=";
+
+  meta = with lib; {
+    description = "Simple, extendable and embeddable scripting language.";
+    homepage = "https://github.com/sagiegurari/duckscript";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ mkg20001 ];
+    mainProgram = "duck";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/genemichaels/Cargo.lock b/nixpkgs/pkgs/development/tools/rust/genemichaels/Cargo.lock
new file mode 100644
index 000000000000..56b9df484a6d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/genemichaels/Cargo.lock
@@ -0,0 +1,553 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "anyhow"
+version = "1.0.68"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2cb2f989d18dd141ab8ae82f64d1a8cdd37e0840f73a406896cf5e99502fab61"
+
+[[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 = "cargo-manifest"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3ce38d2d1efbe0e7180766a872570bc07cd5430a42e713b01006d4afa89912fe"
+dependencies = [
+ "serde",
+ "toml",
+]
+
+[[package]]
+name = "cc"
+version = "1.0.78"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a20104e2335ce8a659d6dd92a51a767a0c062599c73b343fd152cb401e828c3d"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "clap"
+version = "4.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ec7a4128863c188deefe750ac1d1dfe66c236909f845af04beed823638dc1b2"
+dependencies = [
+ "bitflags",
+ "clap_derive",
+ "clap_lex",
+ "is-terminal",
+ "once_cell",
+ "strsim",
+ "termcolor",
+]
+
+[[package]]
+name = "clap_derive"
+version = "4.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "684a277d672e91966334af371f1a7b5833f9aa00b07c84e92fbce95e00208ce8"
+dependencies = [
+ "heck",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "783fe232adfca04f90f56201b26d79682d4cd2625e0bc7290b95123afe558ade"
+dependencies = [
+ "os_str_bytes",
+]
+
+[[package]]
+name = "convert_case"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e"
+
+[[package]]
+name = "derive_more"
+version = "0.99.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321"
+dependencies = [
+ "convert_case",
+ "proc-macro2",
+ "quote",
+ "rustc_version",
+ "syn",
+]
+
+[[package]]
+name = "errno"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "errno-dragonfly"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "genemichaels"
+version = "0.1.21"
+dependencies = [
+ "anyhow",
+ "cargo-manifest",
+ "clap",
+ "derive_more",
+ "markdown",
+ "proc-macro2",
+ "quote",
+ "structre",
+ "syn",
+ "threadpool",
+ "walkdir",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+
+[[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.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399"
+dependencies = [
+ "autocfg",
+ "hashbrown",
+]
+
+[[package]]
+name = "io-lifetimes"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7d6c6f8c91b4b9ed43484ad1a938e393caf35960fce7f82a040497207bd8e9e"
+dependencies = [
+ "libc",
+ "windows-sys",
+]
+
+[[package]]
+name = "is-terminal"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28dfb6c8100ccc63462345b67d1bbc3679177c75ee4bf59bf29c8b1d110b8189"
+dependencies = [
+ "hermit-abi",
+ "io-lifetimes",
+ "rustix",
+ "windows-sys",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.139"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4"
+
+[[package]]
+name = "litrs"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9275e0933cf8bb20f008924c0cb07a0692fe54d8064996520bf998de9eb79aa"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "log"
+version = "0.4.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "markdown"
+version = "1.0.0-alpha.5"
+source = "git+https://github.com/wooorm/markdown-rs?rev=af202d3f0ea24e0a957b02a6f9fb23c6c3b4afe7#af202d3f0ea24e0a957b02a6f9fb23c6c3b4afe7"
+dependencies = [
+ "log",
+ "unicode-id",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b"
+dependencies = [
+ "hermit-abi",
+ "libc",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f61fba1741ea2b3d6a1e3178721804bb716a68a6aeba1149b5d52e3d464ea66"
+
+[[package]]
+name = "os_str_bytes"
+version = "6.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b7820b9daea5457c9f21c69448905d723fbd21136ccf521748f23fd49e723ee"
+
+[[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.49"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57a8eca9f9c4ffde41714334dee777596264c7825420f521abc92b5b5deb63a5"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "regex"
+version = "1.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733"
+dependencies = [
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848"
+
+[[package]]
+name = "rustc_version"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
+dependencies = [
+ "semver",
+]
+
+[[package]]
+name = "rustix"
+version = "0.36.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4feacf7db682c6c329c4ede12649cd36ecab0f3be5b7d74e6a20304725db4549"
+dependencies = [
+ "bitflags",
+ "errno",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys",
+]
+
+[[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.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "58bc9567378fc7690d6b2addae4e60ac2eeea07becb2c64b9f218b53865cba2a"
+
+[[package]]
+name = "serde"
+version = "1.0.152"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.152"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "structre"
+version = "0.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f31eab0dcebb0d631c93629c0da9fdce1448123aa15e5e4c08fcd71d4f4fd5f4"
+dependencies = [
+ "anyhow",
+ "once_cell",
+ "regex",
+ "structre_proc_macros",
+]
+
+[[package]]
+name = "structre_proc_macros"
+version = "0.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "66e7698a9d57b3a475ce1d6cc37b1be9ee8ed188ec596603c863c06c9e06cf7e"
+dependencies = [
+ "litrs",
+ "proc-macro2",
+ "quote",
+ "regex-syntax",
+ "syn",
+]
+
+[[package]]
+name = "syn"
+version = "1.0.107"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "threadpool"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa"
+dependencies = [
+ "num_cpus",
+]
+
+[[package]]
+name = "toml"
+version = "0.5.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1333c76748e868a4d9d1017b5ab53171dfd095f70c712fdb4653a406547f598f"
+dependencies = [
+ "indexmap",
+ "serde",
+]
+
+[[package]]
+name = "unicode-id"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d70b6494226b36008c8366c288d77190b3fad2eb4c10533139c1c1f461127f1a"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc"
+
+[[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 = "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"
+
+[[package]]
+name = "windows-sys"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c9864e83243fdec7fc9c5444389dcbbfd258f745e7853198f365e3c4968a608"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c8b1b673ffc16c47a9ff48570a9d85e25d265735c503681332589af6253c6c7"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de3887528ad530ba7bdbb1faa8275ec7a1155a45ffa57c37993960277145d640"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf4d1122317eddd6ff351aa852118a2418ad4214e6613a50e0191f7004372605"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1040f221285e17ebccbc2591ffdc2d44ee1f9186324dd3e84e99ac68d699c45"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "628bfdf232daa22b0d64fdb62b09fcc36bb01f05a3939e20ab73aaf9470d0463"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd"
diff --git a/nixpkgs/pkgs/development/tools/rust/genemichaels/default.nix b/nixpkgs/pkgs/development/tools/rust/genemichaels/default.nix
new file mode 100644
index 000000000000..673519aeabc4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/genemichaels/default.nix
@@ -0,0 +1,22 @@
+{ lib, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "genemichaels";
+  version = "0.1.21";
+  src = fetchFromGitHub {
+    owner = "andrewbaxter";
+    repo = pname;
+    rev = "158bb8eb705b073d84562554c1a6a63eedd44c6b";
+    hash = "sha256-rAJYukxptasexZzwWgtGlUbHhyyI6OJvSzVxGLBO9vM=";
+  };
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes."markdown-1.0.0-alpha.5" = "sha256-pjIKzXvRKoMfFVIyIXdm+29vvUzCHiJ0rrZgr4K+Ih8=";
+  };
+  meta = {
+    description = "Even formats macros";
+    homepage = "https://github.com/andrewbaxter/genemichaels";
+    license = lib.licenses.isc;
+    maintainers = [ lib.maintainers.anselmschueler ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/gitlab-clippy/default.nix b/nixpkgs/pkgs/development/tools/rust/gitlab-clippy/default.nix
new file mode 100644
index 000000000000..2269f812f424
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/gitlab-clippy/default.nix
@@ -0,0 +1,31 @@
+{ stdenv
+, lib
+, fetchFromGitLab
+, rustPlatform
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "gitlab-clippy";
+  version = "1.0.3";
+
+  src = fetchFromGitLab {
+    owner = "dlalic";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-d7SmlAWIV4SngJhIvlud90ZUSF55FWIrzFpkfSXIy2Y=";
+  };
+  cargoSha256 = "sha256-ztPbI+ncMNMKnIxUksxgz8GHQpLZ7SVWdC4QJWh18Wk=";
+
+  # TODO re-add theses tests once they get fixed in upstream
+  checkFlags = [
+    "--skip cli::converts_error_from_pipe"
+    "--skip cli::converts_warnings_from_pipe"
+  ];
+
+  meta = {
+    homepage = "https://gitlab.com/dlalic/gitlab-clippy";
+    description = "Convert clippy warnings into GitLab Code Quality report";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ wucke13 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/humility/Cargo.lock b/nixpkgs/pkgs/development/tools/rust/humility/Cargo.lock
new file mode 100644
index 000000000000..8fd62d8cc564
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/humility/Cargo.lock
@@ -0,0 +1,4298 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "addr2line"
+version = "0.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97"
+dependencies = [
+ "gimli 0.27.2",
+]
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "aes"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8"
+dependencies = [
+ "cfg-if",
+ "cipher",
+ "cpufeatures",
+ "opaque-debug",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67fc08ce920c31afb70f013dcce1bfc3a3195de6a228474e45e1f145b36f8d04"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "android_system_properties"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "anstream"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e579a7752471abc2a8268df8b20005e3eadd975f585398f17efcfd8d4927371"
+dependencies = [
+ "anstyle",
+ "anstyle-parse",
+ "anstyle-query",
+ "anstyle-wincon",
+ "colorchoice",
+ "is-terminal",
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41ed9a86bf92ae6580e0a31281f65a1b1d867c0cc68d5346e2ae128dddfa6a7d"
+
+[[package]]
+name = "anstyle-parse"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e765fd216e48e067936442276d1d57399e37bce53c264d6fefbe298080cb57ee"
+dependencies = [
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle-query"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b"
+dependencies = [
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "anstyle-wincon"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bcd8291a340dd8ac70e18878bc4501dd7b4ff970cfa21c207d36ece51ea88fd"
+dependencies = [
+ "anstyle",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.70"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7de8ce5e0f9f8d88245311066a578d72b7af3e7088f32783804676302df237e4"
+dependencies = [
+ "backtrace",
+]
+
+[[package]]
+name = "arrayvec"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b"
+
+[[package]]
+name = "atomic-polyfill"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3ff7eb3f316534d83a8a2c3d1674ace8a5a71198eba31e2e2b597833f699b28"
+dependencies = [
+ "critical-section",
+]
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi 0.1.19",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "backtrace"
+version = "0.3.67"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "233d376d6d185f2a3093e58f283f60f880315b6c60075b01f36b3b85154564ca"
+dependencies = [
+ "addr2line",
+ "cc",
+ "cfg-if",
+ "libc",
+ "miniz_oxide",
+ "object 0.30.3",
+ "rustc-demangle",
+]
+
+[[package]]
+name = "base64"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
+
+[[package]]
+name = "base64ct"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b"
+
+[[package]]
+name = "bincode"
+version = "1.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "bitfield"
+version = "0.13.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46afbd2983a5d5a7bd740ccb198caf5b82f45c40c09c0eed36052d91cb92e719"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bitflags"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c70beb79cbb5ce9c4f8e20849978f34225931f665bb49efa6982875a4d5facb3"
+
+[[package]]
+name = "bitvec"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c"
+dependencies = [
+ "funty",
+ "radium",
+ "tap",
+ "wyz",
+]
+
+[[package]]
+name = "block-buffer"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535"
+
+[[package]]
+name = "byteorder"
+version = "1.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
+
+[[package]]
+name = "bytes"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be"
+
+[[package]]
+name = "bzip2"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bdb116a6ef3f6c3698828873ad02c3014b3c85cadb88496095628e3ef1e347f8"
+dependencies = [
+ "bzip2-sys",
+ "libc",
+]
+
+[[package]]
+name = "bzip2-sys"
+version = "0.1.11+1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "capstone"
+version = "0.10.0"
+source = "git+https://github.com/oxidecomputer/capstone-rs.git#77296e0e16411109f131b98d773e4c9ecc6bdcfe"
+dependencies = [
+ "capstone-sys",
+ "libc",
+]
+
+[[package]]
+name = "capstone-sys"
+version = "0.14.0"
+source = "git+https://github.com/oxidecomputer/capstone-rs.git#77296e0e16411109f131b98d773e4c9ecc6bdcfe"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[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.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7714a157da7991e23d90686b9524b9e12e0407a108647f52e9328f4b3d51ac7f"
+dependencies = [
+ "cargo-platform",
+ "semver 0.11.0",
+ "semver-parser",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "cassowary"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df8670b8c7b9dae1793364eafadf7239c40d669904660c5960d74cfd80b46a53"
+
+[[package]]
+name = "cc"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
+dependencies = [
+ "jobserver",
+]
+
+[[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.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4e3c5919066adf22df73762e50cffcde3a758f2a848b113b586d1f86728b673b"
+dependencies = [
+ "iana-time-zone",
+ "js-sys",
+ "num-integer",
+ "num-traits",
+ "time 0.1.45",
+ "wasm-bindgen",
+ "winapi",
+]
+
+[[package]]
+name = "cipher"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "clap"
+version = "3.2.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "71655c45cb9845d3270c9d6df84ebe72b4dad3c2ba3f7023ad47c144e4e473a5"
+dependencies = [
+ "atty",
+ "bitflags 1.3.2",
+ "clap_derive",
+ "clap_lex",
+ "indexmap",
+ "once_cell",
+ "strsim",
+ "termcolor",
+ "textwrap",
+]
+
+[[package]]
+name = "clap_derive"
+version = "3.2.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea0c8bce528c4be4da13ea6fead8965e95b6073585a2f05204bd8f4119f82a65"
+dependencies = [
+ "heck",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[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 = "codespan-reporting"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e"
+dependencies = [
+ "termcolor",
+ "unicode-width",
+]
+
+[[package]]
+name = "colorchoice"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
+
+[[package]]
+name = "colored"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b3616f750b84d8f0de8a58bda93e08e2a81ad3f523089b05f1dffecab48c6cbd"
+dependencies = [
+ "atty",
+ "lazy_static",
+ "winapi",
+]
+
+[[package]]
+name = "combine"
+version = "4.6.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4"
+dependencies = [
+ "bytes",
+ "memchr",
+]
+
+[[package]]
+name = "console"
+version = "0.15.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3d79fbe8970a77e3e34151cc13d3b3e248aa0faaecb9f6091fa07ebefe5ad60"
+dependencies = [
+ "encode_unicode",
+ "lazy_static",
+ "libc",
+ "unicode-width",
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "constant_time_eq"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc"
+
+[[package]]
+name = "content_inspector"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7bda66e858c683005a53a9a60c69a4aca7eeaa45d124526e389f7aec8e62f38"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "convert_case"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e"
+
+[[package]]
+name = "coolor"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af4d7a805ca0d92f8c61a31c809d4323fdaa939b0b440e544d21db7797c5aaad"
+dependencies = [
+ "crossterm 0.23.2",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3e4c1eaa2012c47becbbad2ab175484c2a84d1185b566fb2cc5b8707343dfe58"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crc"
+version = "3.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "86ec7a15cbe22e59248fc7eadb1907dab5ba09372595da4d73dd805ed4417dfe"
+dependencies = [
+ "crc-catalog",
+]
+
+[[package]]
+name = "crc-catalog"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9cace84e55f07e7301bae1c519df89cdad8cc3cd868413d3fdbdeca9ff3db484"
+
+[[package]]
+name = "crc32fast"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "critical-section"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6548a0ad5d2549e111e1f6a11a6c2e2d00ce6a3dafe22948d67c2b443f775e52"
+
+[[package]]
+name = "crossbeam"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2801af0d36612ae591caa9568261fddce32ce6e08a7275ea334a06a4ad021a2c"
+dependencies = [
+ "cfg-if",
+ "crossbeam-channel",
+ "crossbeam-deque",
+ "crossbeam-epoch",
+ "crossbeam-queue",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200"
+dependencies = [
+ "cfg-if",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
+dependencies = [
+ "cfg-if",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46bd5f3f85273295a9d14aedfb86f6aadbff6d8f5295c4a9edb08e819dcf5695"
+dependencies = [
+ "autocfg",
+ "cfg-if",
+ "crossbeam-utils",
+ "memoffset",
+ "scopeguard",
+]
+
+[[package]]
+name = "crossbeam-queue"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d1cfb3ea8a53f37c40dea2c7bedcbd88bdfae54f5e2175d6ecaff1c988353add"
+dependencies = [
+ "cfg-if",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "crossterm"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0ebde6a9dd5e331cd6c6f48253254d117642c31653baa475e394657c59c1f7d"
+dependencies = [
+ "bitflags 1.3.2",
+ "crossterm_winapi 0.8.0",
+ "libc",
+ "mio 0.7.14",
+ "parking_lot 0.11.2",
+ "signal-hook",
+ "signal-hook-mio",
+ "winapi",
+]
+
+[[package]]
+name = "crossterm"
+version = "0.23.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2102ea4f781910f8a5b98dd061f4c2023f479ce7bb1236330099ceb5a93cf17"
+dependencies = [
+ "bitflags 1.3.2",
+ "crossterm_winapi 0.9.0",
+ "libc",
+ "mio 0.8.6",
+ "parking_lot 0.12.1",
+ "signal-hook",
+ "signal-hook-mio",
+ "winapi",
+]
+
+[[package]]
+name = "crossterm"
+version = "0.24.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab9f7409c70a38a56216480fba371ee460207dd8926ccf5b4160591759559170"
+dependencies = [
+ "bitflags 1.3.2",
+ "crossterm_winapi 0.9.0",
+ "libc",
+ "mio 0.8.6",
+ "parking_lot 0.12.1",
+ "serde",
+ "signal-hook",
+ "signal-hook-mio",
+ "winapi",
+]
+
+[[package]]
+name = "crossterm_winapi"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a6966607622438301997d3dac0d2f6e9a90c68bb6bc1785ea98456ab93c0507"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "crossterm_winapi"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2ae1b35a484aa10e07fe0638d02301c5ad24de82d310ccbd2f3693da5f09bf1c"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "crypto-common"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+dependencies = [
+ "generic-array",
+ "typenum",
+]
+
+[[package]]
+name = "csv"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b015497079b9a9d69c02ad25de6c0a6edef051ea6360a327d0bd05802ef64ad"
+dependencies = [
+ "csv-core",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "csv-core"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b2466559f260f48ad25fe6317b3c8dac77b5bdb5763ac7d9d6103530663bc90"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "ctrlc"
+version = "3.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbcf33c2a618cbe41ee43ae6e9f2e48368cd9f9db2896f10167d8d762679f639"
+dependencies = [
+ "nix",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "cxx"
+version = "1.0.94"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f61f1b6389c3fe1c316bf8a4dccc90a38208354b330925bce1f74a6c4756eb93"
+dependencies = [
+ "cc",
+ "cxxbridge-flags",
+ "cxxbridge-macro",
+ "link-cplusplus",
+]
+
+[[package]]
+name = "cxx-build"
+version = "1.0.94"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12cee708e8962df2aeb38f594aae5d827c022b6460ac71a7a3e2c3c2aae5a07b"
+dependencies = [
+ "cc",
+ "codespan-reporting",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "scratch",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "cxxbridge-flags"
+version = "1.0.94"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7944172ae7e4068c533afbb984114a56c46e9ccddda550499caa222902c7f7bb"
+
+[[package]]
+name = "cxxbridge-macro"
+version = "1.0.94"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2345488264226bf682893e25de0769f3360aac9957980ec49361b083ddaa5bc5"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "darling"
+version = "0.13.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c"
+dependencies = [
+ "darling_core",
+ "darling_macro",
+]
+
+[[package]]
+name = "darling_core"
+version = "0.13.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610"
+dependencies = [
+ "fnv",
+ "ident_case",
+ "proc-macro2",
+ "quote",
+ "strsim",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "darling_macro"
+version = "0.13.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835"
+dependencies = [
+ "darling_core",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "digest"
+version = "0.10.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f"
+dependencies = [
+ "block-buffer",
+ "crypto-common",
+ "subtle",
+]
+
+[[package]]
+name = "dunce"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b"
+
+[[package]]
+name = "either"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91"
+
+[[package]]
+name = "encode_unicode"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
+
+[[package]]
+name = "enum-primitive-derive"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c375b9c5eadb68d0a6efee2999fef292f45854c3444c86f09d8ab086ba942b0e"
+dependencies = [
+ "num-traits",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "env_logger"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a12e6657c4c97ebab115a42dcee77225f7f482cdd841cf7088c657a42e9e00e7"
+dependencies = [
+ "atty",
+ "humantime",
+ "log",
+ "regex",
+ "termcolor",
+]
+
+[[package]]
+name = "errno"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "errno-dragonfly"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "fallible-iterator"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7"
+
+[[package]]
+name = "fastrand"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "fd-lock"
+version = "3.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39ae6b3d9530211fb3b12a95374b8b0823be812f53d09e18c5675c0146b09642"
+dependencies = [
+ "cfg-if",
+ "rustix",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "filetime"
+version = "0.2.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5cbc844cecaee9d4443931972e1289c8ff485cb4cc2767cb03ca139ed6885153"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall 0.2.16",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "flate2"
+version = "1.0.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "funty"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c"
+
+[[package]]
+name = "generic-array"
+version = "0.14.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+]
+
+[[package]]
+name = "gimli"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aaf91faf136cb47367fa430cd46e37a788775e7fa104f8b4bcb3861dc389b724"
+dependencies = [
+ "fallible-iterator",
+ "indexmap",
+ "stable_deref_trait",
+]
+
+[[package]]
+name = "gimli"
+version = "0.26.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "22030e2c5a68ec659fde1e949a745124b48e6fa8b045b7ed5bd1fe4ccc5c4e5d"
+dependencies = [
+ "fallible-iterator",
+ "stable_deref_trait",
+]
+
+[[package]]
+name = "gimli"
+version = "0.27.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad0a93d233ebf96623465aad4046a8d3aa4da22d4f4beba5388838c8a434bbb4"
+
+[[package]]
+name = "glob"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
+
+[[package]]
+name = "goblin"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d20fd25aa456527ce4f544271ae4fea65d2eda4a6561ea56f39fb3ee4f7e3884"
+dependencies = [
+ "log",
+ "plain",
+ "scroll",
+]
+
+[[package]]
+name = "hash32"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0c35f58762feb77d74ebe43bdbc3210f09be9fe6742234d573bacc26ed92b67"
+dependencies = [
+ "byteorder",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+
+[[package]]
+name = "heapless"
+version = "0.7.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db04bc24a18b9ea980628ecf00e6c0264f3c1426dac36c00cb49b6fbad8b0743"
+dependencies = [
+ "atomic-polyfill",
+ "hash32",
+ "rustc_version",
+ "serde",
+ "spin",
+ "stable_deref_trait",
+]
+
+[[package]]
+name = "heck"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286"
+
+[[package]]
+name = "hidapi"
+version = "1.4.1"
+source = "git+https://github.com/oxidecomputer/hidapi-rs?branch=oxide-stable#91237483222a42f68d16adcdfd42bc8e32adf666"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "hif"
+version = "0.3.1"
+source = "git+https://github.com/oxidecomputer/hif#34aace65cbf458129dcd8007715a94bc488b2931"
+dependencies = [
+ "pkg-version",
+ "postcard",
+ "serde",
+]
+
+[[package]]
+name = "hmac"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
+dependencies = [
+ "digest",
+]
+
+[[package]]
+name = "hubpack"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61a0b84aeae519f65e0ba3aa998327080993426024edbd5cc38dbaf5ec524303"
+dependencies = [
+ "hubpack_derive",
+ "serde",
+]
+
+[[package]]
+name = "hubpack_derive"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f928320aff16ee8818ef7309180f8b5897057fd79d9dcb8de3ed1ba6dcc125a"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "humantime"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
+
+[[package]]
+name = "humantime-serde"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57a3db5ea5923d99402c94e9feb261dc5ee9b4efa158b0315f788cf549cc200c"
+dependencies = [
+ "humantime",
+ "serde",
+]
+
+[[package]]
+name = "humility"
+version = "0.10.34"
+dependencies = [
+ "anyhow",
+ "bitfield",
+ "cargo_metadata",
+ "clap",
+ "colored",
+ "csv",
+ "env_logger",
+ "fallible-iterator",
+ "hif",
+ "humility-cli",
+ "humility-cmd",
+ "humility-cmd-apptable",
+ "humility-cmd-auxflash",
+ "humility-cmd-bankerase",
+ "humility-cmd-console-proxy",
+ "humility-cmd-dashboard",
+ "humility-cmd-debugmailbox",
+ "humility-cmd-diagnose",
+ "humility-cmd-doc",
+ "humility-cmd-dump",
+ "humility-cmd-etm",
+ "humility-cmd-exec",
+ "humility-cmd-extract",
+ "humility-cmd-flash",
+ "humility-cmd-gdb",
+ "humility-cmd-gpio",
+ "humility-cmd-hash",
+ "humility-cmd-hiffy",
+ "humility-cmd-host",
+ "humility-cmd-i2c",
+ "humility-cmd-ibc",
+ "humility-cmd-itm",
+ "humility-cmd-jefe",
+ "humility-cmd-lpc55gpio",
+ "humility-cmd-manifest",
+ "humility-cmd-map",
+ "humility-cmd-monorail",
+ "humility-cmd-net",
+ "humility-cmd-openocd",
+ "humility-cmd-pmbus",
+ "humility-cmd-power",
+ "humility-cmd-powershelf",
+ "humility-cmd-probe",
+ "humility-cmd-qspi",
+ "humility-cmd-readmem",
+ "humility-cmd-readvar",
+ "humility-cmd-rebootleby",
+ "humility-cmd-registers",
+ "humility-cmd-rencm",
+ "humility-cmd-rendmp",
+ "humility-cmd-reset",
+ "humility-cmd-ringbuf",
+ "humility-cmd-rpc",
+ "humility-cmd-sbrmi",
+ "humility-cmd-sensors",
+ "humility-cmd-spctrl",
+ "humility-cmd-spd",
+ "humility-cmd-spi",
+ "humility-cmd-stackmargin",
+ "humility-cmd-stmsecure",
+ "humility-cmd-tasks",
+ "humility-cmd-test",
+ "humility-cmd-tofino-eeprom",
+ "humility-cmd-update",
+ "humility-cmd-validate",
+ "humility-cmd-vpd",
+ "humility-cmd-writeword",
+ "humility-core",
+ "humility-cortex",
+ "indexmap",
+ "indicatif",
+ "jep106",
+ "log",
+ "multimap",
+ "num-derive",
+ "num-traits",
+ "parse_int",
+ "pmbus",
+ "reedline",
+ "scroll",
+ "serde",
+ "spd",
+ "toml 0.5.11",
+ "trycmd",
+]
+
+[[package]]
+name = "humility-arch-arm"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "capstone",
+ "num-derive",
+ "num-traits",
+]
+
+[[package]]
+name = "humility-cli"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "humility-core",
+ "indexmap",
+ "parse_int",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "humility-cmd"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "humility-cli",
+ "humility-core",
+ "humility-net-core",
+]
+
+[[package]]
+name = "humility-cmd-apptable"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "humility-cli",
+ "humility-cmd",
+ "humility-core",
+]
+
+[[package]]
+name = "humility-cmd-auxflash"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "colored",
+ "hif",
+ "humility-cli",
+ "humility-cmd",
+ "humility-core",
+ "humility-hiffy",
+ "humility-idol",
+ "idol",
+ "indicatif",
+ "log",
+ "parse_int",
+ "tlvc",
+]
+
+[[package]]
+name = "humility-cmd-bankerase"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "humility-cli",
+ "humility-cmd",
+ "humility-core",
+ "humility-cortex",
+ "ihex",
+ "parse_int",
+ "path-slash",
+ "tempfile",
+]
+
+[[package]]
+name = "humility-cmd-console-proxy"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "crossbeam-channel",
+ "humility-cli",
+ "humility-cmd",
+ "humility-core",
+ "humility-hiffy",
+ "humility-idol",
+ "parse_int",
+ "termios",
+]
+
+[[package]]
+name = "humility-cmd-dashboard"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "crossterm 0.20.0",
+ "hif",
+ "humility-cli",
+ "humility-cmd",
+ "humility-core",
+ "humility-hiffy",
+ "humility-idol",
+ "idol",
+ "parse_int",
+ "tui",
+]
+
+[[package]]
+name = "humility-cmd-debugmailbox"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "byteorder",
+ "clap",
+ "humility-cli",
+ "humility-cmd",
+ "humility-cortex",
+ "parse_int",
+ "probe-rs",
+]
+
+[[package]]
+name = "humility-cmd-diagnose"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "humility-cli",
+ "humility-cmd",
+ "humility-core",
+ "humility-doppel",
+ "humility-jefe",
+ "parse_int",
+]
+
+[[package]]
+name = "humility-cmd-doc"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "cargo_metadata",
+ "clap",
+ "humility-cli",
+ "humility-cmd",
+ "termimad 0.21.1",
+]
+
+[[package]]
+name = "humility-cmd-dump"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "goblin",
+ "hubpack",
+ "humility-arch-arm",
+ "humility-cli",
+ "humility-cmd",
+ "humility-core",
+ "humility-dump-agent",
+ "humpty",
+ "indexmap",
+ "indicatif",
+ "log",
+ "lzss",
+ "num-traits",
+ "parse_int",
+ "probe-rs",
+ "zerocopy",
+ "zip",
+]
+
+[[package]]
+name = "humility-cmd-etm"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "csv",
+ "humility-cli",
+ "humility-cmd",
+ "humility-core",
+ "humility-cortex",
+ "log",
+ "parse_int",
+]
+
+[[package]]
+name = "humility-cmd-exec"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "humility-cli",
+ "humility-cmd",
+ "humility-log",
+ "serde_json",
+ "splitty",
+]
+
+[[package]]
+name = "humility-cmd-extract"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "humility-cli",
+ "humility-cmd",
+ "humility-log",
+ "zip",
+]
+
+[[package]]
+name = "humility-cmd-flash"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "goblin",
+ "humility-cli",
+ "humility-cmd",
+ "humility-cmd-auxflash",
+ "humility-core",
+ "humility-cortex",
+ "ihex",
+ "num-traits",
+ "parse_int",
+ "path-slash",
+ "ron 0.7.1",
+ "srec",
+ "tempfile",
+]
+
+[[package]]
+name = "humility-cmd-gdb"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "ctrlc",
+ "humility-cli",
+ "humility-cmd",
+ "humility-cmd-openocd",
+ "tempfile",
+]
+
+[[package]]
+name = "humility-cmd-gpio"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "hif",
+ "humility-cli",
+ "humility-cmd",
+ "humility-hiffy",
+ "parse_int",
+]
+
+[[package]]
+name = "humility-cmd-hash"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "hif",
+ "humility-cli",
+ "humility-cmd",
+ "humility-core",
+ "humility-hiffy",
+ "indicatif",
+ "parse_int",
+ "sha2",
+]
+
+[[package]]
+name = "humility-cmd-hiffy"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "atty",
+ "clap",
+ "hif",
+ "humility-cli",
+ "humility-cmd",
+ "humility-core",
+ "humility-hiffy",
+ "humility-idol",
+ "idol",
+ "indexmap",
+ "parse_int",
+]
+
+[[package]]
+name = "humility-cmd-host"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "humility-cli",
+ "humility-cmd",
+ "humility-core",
+ "humility-log",
+ "zerocopy",
+]
+
+[[package]]
+name = "humility-cmd-i2c"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "hif",
+ "humility-cli",
+ "humility-cmd",
+ "humility-hiffy",
+ "humility-i2c",
+ "humility-log",
+ "indicatif",
+ "parse_int",
+]
+
+[[package]]
+name = "humility-cmd-ibc"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "colored",
+ "hif",
+ "humility-cli",
+ "humility-cmd",
+ "humility-core",
+ "humility-hiffy",
+ "humility-idol",
+ "idol",
+ "parse_int",
+ "pmbus",
+ "zerocopy",
+]
+
+[[package]]
+name = "humility-cmd-itm"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "csv",
+ "humility-cli",
+ "humility-cmd",
+ "humility-core",
+ "humility-cortex",
+ "parse_int",
+]
+
+[[package]]
+name = "humility-cmd-jefe"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "humility-cli",
+ "humility-cmd",
+ "humility-core",
+ "humility-jefe",
+ "parse_int",
+]
+
+[[package]]
+name = "humility-cmd-lpc55gpio"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "hif",
+ "humility-cli",
+ "humility-cmd",
+ "humility-hiffy",
+ "parse_int",
+]
+
+[[package]]
+name = "humility-cmd-manifest"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "humility-cli",
+ "humility-cmd",
+ "humility-core",
+ "serde_json",
+]
+
+[[package]]
+name = "humility-cmd-map"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "humility-cli",
+ "humility-cmd",
+ "humility-core",
+]
+
+[[package]]
+name = "humility-cmd-monorail"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "colored",
+ "hif",
+ "humility-cli",
+ "humility-cmd",
+ "humility-core",
+ "humility-hiffy",
+ "humility-idol",
+ "idol",
+ "log",
+ "parse_int",
+ "regex",
+ "vsc7448-info",
+ "vsc7448-types",
+]
+
+[[package]]
+name = "humility-cmd-net"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "colored",
+ "hif",
+ "humility-cli",
+ "humility-cmd",
+ "humility-core",
+ "humility-hiffy",
+ "humility-idol",
+ "parse_int",
+]
+
+[[package]]
+name = "humility-cmd-openocd"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "ctrlc",
+ "humility-cli",
+ "humility-cmd",
+ "regex",
+ "tempfile",
+]
+
+[[package]]
+name = "humility-cmd-pmbus"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "colored",
+ "hif",
+ "humility-cli",
+ "humility-cmd",
+ "humility-core",
+ "humility-hiffy",
+ "humility-i2c",
+ "humility-idol",
+ "humility-pmbus",
+ "indexmap",
+ "parse_int",
+ "pmbus",
+]
+
+[[package]]
+name = "humility-cmd-power"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "hif",
+ "humility-cli",
+ "humility-cmd",
+ "humility-core",
+ "humility-hiffy",
+ "humility-idol",
+ "idol",
+ "indexmap",
+ "log",
+ "parse_int",
+]
+
+[[package]]
+name = "humility-cmd-powershelf"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "hif",
+ "humility-cli",
+ "humility-cmd",
+ "humility-core",
+ "humility-hiffy",
+ "humility-idol",
+ "idol",
+ "indexmap",
+ "log",
+ "parse_int",
+ "pmbus",
+]
+
+[[package]]
+name = "humility-cmd-probe"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "humility-arch-arm",
+ "humility-cli",
+ "humility-cmd",
+ "humility-core",
+ "humility-cortex",
+ "num-traits",
+]
+
+[[package]]
+name = "humility-cmd-qspi"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "hif",
+ "humility-cli",
+ "humility-cmd",
+ "humility-core",
+ "humility-hiffy",
+ "humility-idol",
+ "indicatif",
+ "log",
+ "parse_int",
+ "sha2",
+]
+
+[[package]]
+name = "humility-cmd-readmem"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "humility-cli",
+ "humility-cmd",
+ "humility-core",
+ "humility-log",
+ "parse-size",
+ "parse_int",
+]
+
+[[package]]
+name = "humility-cmd-readvar"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "humility-cli",
+ "humility-cmd",
+ "humility-core",
+]
+
+[[package]]
+name = "humility-cmd-rebootleby"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "humility-arch-arm",
+ "humility-cli",
+ "humility-cmd",
+ "humility-core",
+ "humility-cortex",
+ "ihex",
+ "log",
+ "parse_int",
+ "path-slash",
+ "probe-rs",
+ "tempfile",
+ "zip",
+]
+
+[[package]]
+name = "humility-cmd-registers"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "humility-arch-arm",
+ "humility-cli",
+ "humility-cmd",
+ "humility-core",
+ "humility-cortex",
+ "humility-stack",
+ "num-traits",
+]
+
+[[package]]
+name = "humility-cmd-rencm"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "csv",
+ "hif",
+ "humility-cli",
+ "humility-cmd",
+ "humility-core",
+ "humility-hiffy",
+ "humility-i2c",
+ "idt8a3xxxx",
+ "itertools",
+ "parse_int",
+ "serde",
+ "serde-xml-rs",
+]
+
+[[package]]
+name = "humility-cmd-rendmp"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "colored",
+ "hif",
+ "humility-cli",
+ "humility-cmd",
+ "humility-cmd-spd",
+ "humility-core",
+ "humility-hiffy",
+ "humility-i2c",
+ "humility-idol",
+ "humility-pmbus",
+ "indicatif",
+ "num-derive",
+ "num-traits",
+ "parse_int",
+ "pmbus",
+ "zerocopy",
+]
+
+[[package]]
+name = "humility-cmd-repl"
+version = "0.1.0"
+
+[[package]]
+name = "humility-cmd-reset"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "humility-cli",
+ "humility-cmd",
+ "humility-core",
+]
+
+[[package]]
+name = "humility-cmd-ringbuf"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "humility-cli",
+ "humility-cmd",
+ "humility-core",
+ "humility-doppel",
+]
+
+[[package]]
+name = "humility-cmd-rpc"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "colored",
+ "hif",
+ "hubpack",
+ "humility-cli",
+ "humility-cmd",
+ "humility-cmd-hiffy",
+ "humility-core",
+ "humility-doppel",
+ "humility-hiffy",
+ "humility-idol",
+ "idol",
+ "indexmap",
+ "parse_int",
+ "serde",
+ "zerocopy",
+]
+
+[[package]]
+name = "humility-cmd-sbrmi"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "colored",
+ "hif",
+ "humility-cli",
+ "humility-cmd",
+ "humility-core",
+ "humility-hiffy",
+ "humility-idol",
+ "parse_int",
+ "raw-cpuid",
+ "termimad 0.21.1",
+ "zerocopy",
+]
+
+[[package]]
+name = "humility-cmd-sensors"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "hif",
+ "humility-cli",
+ "humility-cmd",
+ "humility-core",
+ "humility-hiffy",
+ "humility-idol",
+ "indexmap",
+ "itertools",
+ "parse_int",
+]
+
+[[package]]
+name = "humility-cmd-spctrl"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "hif",
+ "humility-cli",
+ "humility-cmd",
+ "humility-hiffy",
+ "parse_int",
+]
+
+[[package]]
+name = "humility-cmd-spd"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "hif",
+ "humility-cli",
+ "humility-cmd",
+ "humility-core",
+ "humility-hiffy",
+ "humility-i2c",
+ "humility-log",
+ "jep106",
+ "parse_int",
+ "spd",
+]
+
+[[package]]
+name = "humility-cmd-spi"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "hif",
+ "humility-cli",
+ "humility-cmd",
+ "humility-core",
+ "humility-hiffy",
+ "parse_int",
+]
+
+[[package]]
+name = "humility-cmd-stackmargin"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "humility-cli",
+ "humility-cmd",
+ "humility-core",
+]
+
+[[package]]
+name = "humility-cmd-stmsecure"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "humility-arch-arm",
+ "humility-cli",
+ "humility-cmd",
+ "humility-core",
+ "parse_int",
+]
+
+[[package]]
+name = "humility-cmd-tasks"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "humility-arch-arm",
+ "humility-cli",
+ "humility-cmd",
+ "humility-core",
+ "humility-doppel",
+ "humility-stack",
+ "log",
+ "num-traits",
+ "parse_int",
+]
+
+[[package]]
+name = "humility-cmd-test"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "colored",
+ "hif",
+ "humility-cli",
+ "humility-cmd",
+ "humility-cmd-tasks",
+ "humility-core",
+ "humility-cortex",
+ "humility-hiffy",
+ "parse_int",
+]
+
+[[package]]
+name = "humility-cmd-tofino-eeprom"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "humility-cli",
+ "humility-cmd",
+ "humility-core",
+ "humility-hiffy",
+ "humility-idol",
+ "indicatif",
+ "parse_int",
+]
+
+[[package]]
+name = "humility-cmd-update"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "humility-cli",
+ "humility-cmd",
+ "humility-hiffy",
+ "humility-idol",
+ "humility-log",
+ "indicatif",
+ "parse_int",
+]
+
+[[package]]
+name = "humility-cmd-validate"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "colored",
+ "hif",
+ "humility-cli",
+ "humility-cmd",
+ "humility-core",
+ "humility-hiffy",
+ "humility-i2c",
+ "humility-idol",
+ "idol",
+ "parse_int",
+]
+
+[[package]]
+name = "humility-cmd-vpd"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "hif",
+ "humility-cli",
+ "humility-cmd",
+ "humility-core",
+ "humility-hiffy",
+ "humility-idol",
+ "idol",
+ "indexmap",
+ "indicatif",
+ "parse_int",
+ "ron 0.7.1",
+ "serde",
+ "tlvc",
+ "tlvc-text",
+ "zerocopy",
+]
+
+[[package]]
+name = "humility-cmd-writeword"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "humility-cli",
+ "humility-cmd",
+ "humility-core",
+ "parse-size",
+ "parse_int",
+]
+
+[[package]]
+name = "humility-core"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "bitfield",
+ "capstone",
+ "clap",
+ "fallible-iterator",
+ "gimli 0.22.0",
+ "goblin",
+ "hubpack",
+ "humility-arch-arm",
+ "humility-log",
+ "humility_load_derive",
+ "humpty",
+ "idol",
+ "indexmap",
+ "indicatif",
+ "libc",
+ "log",
+ "multimap",
+ "num-derive",
+ "num-traits",
+ "parse_int",
+ "probe-rs",
+ "rayon",
+ "regex",
+ "ron 0.7.1",
+ "rusb",
+ "rustc-demangle",
+ "scroll",
+ "serde",
+ "serde_json",
+ "thiserror",
+ "toml 0.5.11",
+ "winapi",
+ "zerocopy",
+ "zip",
+]
+
+[[package]]
+name = "humility-cortex"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "bitfield",
+ "humility-core",
+ "jep106",
+ "log",
+ "multimap",
+ "num-derive",
+ "num-traits",
+ "paste",
+]
+
+[[package]]
+name = "humility-doppel"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "humility-core",
+ "zerocopy",
+]
+
+[[package]]
+name = "humility-dump-agent"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "hif",
+ "hubpack",
+ "humility-arch-arm",
+ "humility-core",
+ "humility-hiffy",
+ "humility-idol",
+ "humpty",
+ "indexmap",
+ "indicatif",
+ "lzss",
+ "num-traits",
+ "rand",
+ "zerocopy",
+]
+
+[[package]]
+name = "humility-hiffy"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "hif",
+ "humility-core",
+ "humility-doppel",
+ "humility-idol",
+ "idol",
+ "parse_int",
+ "postcard",
+ "zerocopy",
+]
+
+[[package]]
+name = "humility-i2c"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "humility-core",
+ "parse_int",
+]
+
+[[package]]
+name = "humility-idol"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "hubpack",
+ "humility-core",
+ "idol",
+ "indexmap",
+ "parse_int",
+ "serde",
+]
+
+[[package]]
+name = "humility-jefe"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "humility-core",
+]
+
+[[package]]
+name = "humility-log"
+version = "0.1.0"
+dependencies = [
+ "colored",
+ "log",
+]
+
+[[package]]
+name = "humility-net-core"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "humility-arch-arm",
+ "humility-core",
+ "humility-dump-agent",
+ "humpty",
+]
+
+[[package]]
+name = "humility-pmbus"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "humility-core",
+]
+
+[[package]]
+name = "humility-stack"
+version = "0.1.0"
+dependencies = [
+ "humility-arch-arm",
+ "humility-core",
+]
+
+[[package]]
+name = "humility_load_derive"
+version = "0.1.0"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "humpty"
+version = "0.1.3"
+source = "git+https://github.com/oxidecomputer/humpty#f6871f6d8844c3d2ee09c467f50b9f186652cb41"
+dependencies = [
+ "hubpack",
+ "lzss",
+ "serde",
+ "serde-big-array",
+ "static_assertions",
+ "zerocopy",
+]
+
+[[package]]
+name = "iana-time-zone"
+version = "0.1.56"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0722cd7114b7de04316e7ea5456a0bbb20e4adb46fd27a3697adb812cff0f37c"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys",
+ "iana-time-zone-haiku",
+ "js-sys",
+ "wasm-bindgen",
+ "windows",
+]
+
+[[package]]
+name = "iana-time-zone-haiku"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca"
+dependencies = [
+ "cxx",
+ "cxx-build",
+]
+
+[[package]]
+name = "ident_case"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
+
+[[package]]
+name = "idol"
+version = "0.3.0"
+source = "git+https://github.com/oxidecomputer/idolatry.git#f2396893e786d4bfa75212312908198b8d6a5310"
+dependencies = [
+ "indexmap",
+ "quote",
+ "ron 0.8.0",
+ "serde",
+ "toml 0.7.3",
+]
+
+[[package]]
+name = "idt8a3xxxx"
+version = "0.1.0"
+source = "git+https://github.com/oxidecomputer/idt8a3xxxx#68ca4e7c486c79f734fa1225383c50487bdccf23"
+dependencies = [
+ "anyhow",
+ "ron 0.6.6",
+ "serde",
+]
+
+[[package]]
+name = "ihex"
+version = "3.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "365a784774bb381e8c19edb91190a90d7f2625e057b55de2bc0f6b57bc779ff2"
+
+[[package]]
+name = "indexmap"
+version = "1.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
+dependencies = [
+ "autocfg",
+ "hashbrown",
+ "serde",
+]
+
+[[package]]
+name = "indicatif"
+version = "0.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7baab56125e25686df467fe470785512329883aab42696d661247aca2a2896e4"
+dependencies = [
+ "console",
+ "lazy_static",
+ "number_prefix",
+ "regex",
+]
+
+[[package]]
+name = "instant"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "io-lifetimes"
+version = "1.0.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220"
+dependencies = [
+ "hermit-abi 0.3.1",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "is-terminal"
+version = "0.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "adcf93614601c8129ddf72e2d5633df827ba6551541c6d8c59520a371475be1f"
+dependencies = [
+ "hermit-abi 0.3.1",
+ "io-lifetimes",
+ "rustix",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "itertools"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6"
+
+[[package]]
+name = "jaylink"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f58b72b6aa9d25083b8c19d292fe015a936185fa200d15e225e1524a18222e9"
+dependencies = [
+ "bitflags 1.3.2",
+ "byteorder",
+ "log",
+ "rusb",
+]
+
+[[package]]
+name = "jep106"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff93b33ae176e47fe588708ff6a4cccae22bd369b81c2d26d2179a8d41c0a0b0"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "jobserver"
+version = "0.1.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "js-sys"
+version = "0.3.61"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[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.142"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a987beff54b60ffa6d51982e1aa1146bc42f19bd26be28b0586f252fccf5317"
+
+[[package]]
+name = "libm"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "348108ab3fba42ec82ff6e9564fc4ca0247bdccdc68dd8af9764bbc79c3c8ffb"
+
+[[package]]
+name = "libusb1-sys"
+version = "0.5.0"
+source = "git+https://github.com/oxidecomputer/rusb?branch=probe-rs-0.12-libusb-v1.0.26#b97a32d2b36c3db5c67f58aca015039536416439"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "link-cplusplus"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "linked-hash-map"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b085a4f2cde5781fc4b1717f2e86c62f5cda49de7ba99a7c2eae02b61c9064c"
+
+[[package]]
+name = "lock_api"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df"
+dependencies = [
+ "autocfg",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "lzss"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39e2b9a6124e5200c13bb5c5d1124bf93b451bff69b651912810039e36ca97eb"
+dependencies = [
+ "void",
+]
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "memoffset"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "minimad"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fed1b13e2000bd8e238d97a97de6fc30224f89a08b0aa5aaa09ed1bd68ba2fa1"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "minimad"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38b136454924e4d020e55c4992e07c105b40d5c41b84662862f0e15bc0a2efef"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "miniz_oxide"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "mio"
+version = "0.7.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8067b404fe97c70829f082dec8bcf4f71225d7eaea1d8645349cb76fa06205cc"
+dependencies = [
+ "libc",
+ "log",
+ "miow",
+ "ntapi",
+ "winapi",
+]
+
+[[package]]
+name = "mio"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9"
+dependencies = [
+ "libc",
+ "log",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "miow"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "multimap"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "nix"
+version = "0.26.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfdda3d196821d6af13126e40375cdf7da646a96114af134d5f417a9a1dc8e1a"
+dependencies = [
+ "bitflags 1.3.2",
+ "cfg-if",
+ "libc",
+ "static_assertions",
+]
+
+[[package]]
+name = "normalize-line-endings"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be"
+
+[[package]]
+name = "ntapi"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c28774a7fd2fbb4f0babd8237ce554b73af68021b5f695a3cebd6c59bac0980f"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "nu-ansi-term"
+version = "0.46.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84"
+dependencies = [
+ "overload",
+ "winapi",
+]
+
+[[package]]
+name = "num-derive"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[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-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.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b"
+dependencies = [
+ "hermit-abi 0.2.6",
+ "libc",
+]
+
+[[package]]
+name = "number_prefix"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17b02fc0ff9a9e4b35b3342880f48e896ebf69f2967921fe8646bf5b7125956a"
+
+[[package]]
+name = "object"
+version = "0.27.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67ac1d3f9a1d3616fd9a60c8d74296f22406a238b6a72f5cc1e6f314df4ffbf9"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "object"
+version = "0.30.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea86265d3d3dcb6a27fc51bd29a4bf387fae9d2986b823079d4986af253eb439"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.17.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3"
+
+[[package]]
+name = "opaque-debug"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
+
+[[package]]
+name = "os_pipe"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a53dbb20faf34b16087a931834cba2d7a73cc74af2b7ef345a4c8324e2409a12"
+dependencies = [
+ "libc",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "os_str_bytes"
+version = "6.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ceedf44fb00f2d1984b0bc98102627ce622e083e49a5bacdb3e514fa4238e267"
+
+[[package]]
+name = "overload"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
+
+[[package]]
+name = "parking_lot"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99"
+dependencies = [
+ "instant",
+ "lock_api",
+ "parking_lot_core 0.8.6",
+]
+
+[[package]]
+name = "parking_lot"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+dependencies = [
+ "lock_api",
+ "parking_lot_core 0.9.7",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc"
+dependencies = [
+ "cfg-if",
+ "instant",
+ "libc",
+ "redox_syscall 0.2.16",
+ "smallvec",
+ "winapi",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall 0.2.16",
+ "smallvec",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "parse-size"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "944553dd59c802559559161f9816429058b869003836120e262e8caec061b7ae"
+
+[[package]]
+name = "parse_int"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "82db48cac18f0963b10ddad303fa88447b95bbe0e6dbe3385f98402b63d0cc48"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "password-hash"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7676374caaee8a325c9e7a2ae557f216c5563a171d6997b0ef8a65af35147700"
+dependencies = [
+ "base64ct",
+ "rand_core",
+ "subtle",
+]
+
+[[package]]
+name = "paste"
+version = "0.1.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "45ca20c77d80be666aef2b45486da86238fabe33e38306bd3118fe4af33fa880"
+dependencies = [
+ "paste-impl",
+ "proc-macro-hack",
+]
+
+[[package]]
+name = "paste-impl"
+version = "0.1.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d95a7db200b97ef370c8e6de0088252f7e0dfff7d047a28528e47456c0fc98b6"
+dependencies = [
+ "proc-macro-hack",
+]
+
+[[package]]
+name = "path-slash"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "498a099351efa4becc6a19c72aa9270598e8fd274ca47052e37455241c88b696"
+
+[[package]]
+name = "pbkdf2"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917"
+dependencies = [
+ "digest",
+ "hmac",
+ "password-hash",
+ "sha2",
+]
+
+[[package]]
+name = "pest"
+version = "2.5.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b1403e8401ad5dedea73c626b99758535b342502f8d1e361f4a2dd952749122"
+dependencies = [
+ "thiserror",
+ "ucd-trie",
+]
+
+[[package]]
+name = "pkg-config"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160"
+
+[[package]]
+name = "pkg-version"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e848f61ee4b2010345e65757e427a077213af1cee5d3e6a02e4a151dabca377"
+dependencies = [
+ "pkg-version-impl",
+ "proc-macro-hack",
+]
+
+[[package]]
+name = "pkg-version-impl"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1564bf5d476bf4a5eac420b88c500454c000dca79cef0a2e4304a1fe34361a3b"
+dependencies = [
+ "proc-macro-hack",
+]
+
+[[package]]
+name = "plain"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6"
+
+[[package]]
+name = "pmbus"
+version = "0.1.0"
+source = "git+https://github.com/oxidecomputer/pmbus#5af447d53a4bc863b7e0700cee23cbf89da39cd5"
+dependencies = [
+ "anyhow",
+ "convert_case",
+ "libm",
+ "num-derive",
+ "num-traits",
+ "ron 0.8.0",
+ "serde",
+ "serde_with",
+]
+
+[[package]]
+name = "postcard"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a25c0b0ae06fcffe600ad392aabfa535696c8973f2253d9ac83171924c58a858"
+dependencies = [
+ "heapless",
+ "postcard-cobs",
+ "serde",
+]
+
+[[package]]
+name = "postcard-cobs"
+version = "0.1.5-pre"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7c68cb38ed13fd7bc9dd5db8f165b7c8d9c1a315104083a2b10f11354c2af97f"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+
+[[package]]
+name = "probe-rs"
+version = "0.12.0"
+source = "git+https://github.com/oxidecomputer/probe-rs.git?branch=oxide-v0.12.0#078eafb444c4e03fa7d41c7273264d00564210ce"
+dependencies = [
+ "anyhow",
+ "base64",
+ "bincode",
+ "bitfield",
+ "bitvec",
+ "enum-primitive-derive",
+ "gimli 0.26.2",
+ "hidapi",
+ "ihex",
+ "jaylink",
+ "jep106",
+ "log",
+ "num-traits",
+ "object 0.27.1",
+ "once_cell",
+ "probe-rs-target",
+ "rusb",
+ "scroll",
+ "serde",
+ "serde_yaml",
+ "static_assertions",
+ "svg",
+ "thiserror",
+ "thousands",
+]
+
+[[package]]
+name = "probe-rs-target"
+version = "0.12.0"
+source = "git+https://github.com/oxidecomputer/probe-rs.git?branch=oxide-v0.12.0#078eafb444c4e03fa7d41c7273264d00564210ce"
+dependencies = [
+ "base64",
+ "jep106",
+ "serde",
+]
+
+[[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 1.0.109",
+ "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-macro-hack"
+version = "0.5.20+deprecated"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.56"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "radium"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09"
+
+[[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",
+]
+
+[[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",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "raw-cpuid"
+version = "11.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1782673f85471a9985c2210df529a11853c89567511fab7ebf14e10853cba849"
+dependencies = [
+ "bitflags 2.1.0",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "termimad 0.23.0",
+]
+
+[[package]]
+name = "rayon"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b"
+dependencies = [
+ "either",
+ "rayon-core",
+]
+
+[[package]]
+name = "rayon-core"
+version = "1.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d"
+dependencies = [
+ "crossbeam-channel",
+ "crossbeam-deque",
+ "crossbeam-utils",
+ "num_cpus",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "reedline"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5559b5ab4817b0da0c6fc6814edfae537209e01d955a2f3e7595606e3d039691"
+dependencies = [
+ "chrono",
+ "crossterm 0.24.0",
+ "fd-lock",
+ "itertools",
+ "nu-ansi-term",
+ "serde",
+ "strip-ansi-escapes",
+ "strum",
+ "strum_macros",
+ "thiserror",
+ "unicode-segmentation",
+ "unicode-width",
+]
+
+[[package]]
+name = "regex"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af83e617f331cc6ae2da5443c602dfa5af81e517212d9d611a5b3ba1777b5370"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a5996294f19bd3aae0453a862ad728f60e6600695733dd5df01da90c54363a3c"
+
+[[package]]
+name = "ron"
+version = "0.6.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "86018df177b1beef6c7c8ef949969c4f7cb9a9344181b92486b23c79995bdaa4"
+dependencies = [
+ "base64",
+ "bitflags 1.3.2",
+ "serde",
+]
+
+[[package]]
+name = "ron"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88073939a61e5b7680558e6be56b419e208420c2adb92be54921fa6b72283f1a"
+dependencies = [
+ "base64",
+ "bitflags 1.3.2",
+ "serde",
+]
+
+[[package]]
+name = "ron"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "300a51053b1cb55c80b7a9fde4120726ddf25ca241a1cbb926626f62fb136bff"
+dependencies = [
+ "base64",
+ "bitflags 1.3.2",
+ "serde",
+]
+
+[[package]]
+name = "rusb"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9a5084628cc5be77b1c750b3e5ee0cc519d2f2491b3f06b78b3aac3328b00ad"
+dependencies = [
+ "libc",
+ "libusb1-sys",
+]
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
+
+[[package]]
+name = "rustc_version"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
+dependencies = [
+ "semver 1.0.17",
+]
+
+[[package]]
+name = "rustix"
+version = "0.37.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f79bef90eb6d984c72722595b5b1348ab39275a5e5123faca6863bf07d75a4e0"
+dependencies = [
+ "bitflags 1.3.2",
+ "errno",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "rustversion"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06"
+
+[[package]]
+name = "ryu"
+version = "1.0.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041"
+
+[[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 = "scopeguard"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+
+[[package]]
+name = "scratch"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1792db035ce95be60c3f8853017b3999209281c24e2ba5bc8e59bf97a0c590c1"
+
+[[package]]
+name = "scroll"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fda28d4b4830b807a8b43f7b0e6b5df875311b3e7621d84577188c175b6ec1ec"
+dependencies = [
+ "scroll_derive",
+]
+
+[[package]]
+name = "scroll_derive"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aaaae8f38bb311444cfb7f1979af0bc9240d95795f75f9ceddf6a59b79ceffa0"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "semver"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6"
+dependencies = [
+ "semver-parser",
+ "serde",
+]
+
+[[package]]
+name = "semver"
+version = "1.0.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed"
+
+[[package]]
+name = "semver-parser"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7"
+dependencies = [
+ "pest",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.160"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb2f3770c8bce3bcda7e149193a069a0f4365bda1fa5cd88e03bca26afc1216c"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde-big-array"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "11fc7cc2c76d73e0f27ee52abbd64eec84d46f370c88371120433196934e4b7f"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde-xml-rs"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "65162e9059be2f6a3421ebbb4fef3e74b7d9e7c60c50a0e292c6239f19f1edfa"
+dependencies = [
+ "log",
+ "serde",
+ "thiserror",
+ "xml-rs",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.160"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "291a097c63d8497e00160b166a967a4a79c64f3facdd01cbd7502231688d77df"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.96"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_spanned"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0efd8caf556a6cebd3b285caf480045fcc1ac04f6bd786b09a6f11af30c4fcf4"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde_with"
+version = "1.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "678b5a069e50bf00ecd22d0cd8ddf7c236f68581b03db652061ed5eb13a312ff"
+dependencies = [
+ "serde",
+ "serde_with_macros",
+]
+
+[[package]]
+name = "serde_with_macros"
+version = "1.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e182d6ec6f05393cc0e5ed1bf81ad6db3a8feedf8ee515ecdd369809bcce8082"
+dependencies = [
+ "darling",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "serde_yaml"
+version = "0.8.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "578a7433b776b56a35785ed5ce9a7e777ac0598aac5a6dd1b4b18a307c7fc71b"
+dependencies = [
+ "indexmap",
+ "ryu",
+ "serde",
+ "yaml-rust",
+]
+
+[[package]]
+name = "sha1"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "sha2"
+version = "0.10.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "shlex"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3"
+
+[[package]]
+name = "signal-hook"
+version = "0.3.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "732768f1176d21d09e076c23a93123d40bba92d50c4058da34d45c8de8e682b9"
+dependencies = [
+ "libc",
+ "signal-hook-registry",
+]
+
+[[package]]
+name = "signal-hook-mio"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "29ad2e15f37ec9a6cc544097b78a1ec90001e9f71b81338ca39f430adaca99af"
+dependencies = [
+ "libc",
+ "mio 0.7.14",
+ "mio 0.8.6",
+ "signal-hook",
+]
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "similar"
+version = "2.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "420acb44afdae038210c99e69aae24109f32f15500aa708e81d46c9f29d55fcf"
+
+[[package]]
+name = "smallvec"
+version = "1.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
+
+[[package]]
+name = "snapbox"
+version = "0.4.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6bccd62078347f89a914e3004d94582e13824d4e3d8a816317862884c423835"
+dependencies = [
+ "anstream",
+ "anstyle",
+ "content_inspector",
+ "dunce",
+ "filetime",
+ "libc",
+ "normalize-line-endings",
+ "os_pipe",
+ "similar",
+ "snapbox-macros",
+ "tempfile",
+ "wait-timeout",
+ "walkdir",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "snapbox-macros"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eaaf09df9f0eeae82be96290918520214530e738a7fe5a351b0f24cf77c0ca31"
+dependencies = [
+ "anstream",
+]
+
+[[package]]
+name = "spd"
+version = "0.1.0"
+source = "git+https://github.com/oxidecomputer/spd#e37e79f6d7d4805b8a6a8c4d37699c4bd60222ea"
+dependencies = [
+ "num-derive",
+ "num-traits",
+]
+
+[[package]]
+name = "spin"
+version = "0.9.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
+dependencies = [
+ "lock_api",
+]
+
+[[package]]
+name = "splitty"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8190298e89d4080e9c025535f73cacec4d51ff4495819dd8fdf1ae374c75ee80"
+
+[[package]]
+name = "srec"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17c3a0538ec242e3cd333cdcdc8b720faa2fa0a9d7f444cf1ff63e7d3303adfb"
+
+[[package]]
+name = "stable_deref_trait"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
+
+[[package]]
+name = "static_assertions"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+
+[[package]]
+name = "strip-ansi-escapes"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "011cbb39cf7c1f62871aea3cc46e5817b0937b49e9447370c93cacbe93a766d8"
+dependencies = [
+ "vte",
+]
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "strum"
+version = "0.24.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f"
+
+[[package]]
+name = "strum_macros"
+version = "0.24.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "rustversion",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "subtle"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601"
+
+[[package]]
+name = "svg"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "02d815ad337e8449d2374d4248448645edfe74e699343dd5719139d93fa87112"
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a34fcf3e8b60f57e6a14301a2e916d323af98b0ea63c599441eec8558660c822"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "tap"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369"
+
+[[package]]
+name = "tempfile"
+version = "3.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998"
+dependencies = [
+ "cfg-if",
+ "fastrand",
+ "redox_syscall 0.3.5",
+ "rustix",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "termimad"
+version = "0.21.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8743d628f9b0eb33087c1e1c4915d91efca23ae69f7c81981489128a0e17d300"
+dependencies = [
+ "coolor",
+ "crossbeam",
+ "crossterm 0.23.2",
+ "minimad 0.10.0",
+ "thiserror",
+ "unicode-width",
+]
+
+[[package]]
+name = "termimad"
+version = "0.23.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "749b18b17745261a883ab334d931adffc8c5e07e71c73a861e77124557e7b41f"
+dependencies = [
+ "coolor",
+ "crossbeam",
+ "crossterm 0.23.2",
+ "minimad 0.12.0",
+ "thiserror",
+ "unicode-width",
+]
+
+[[package]]
+name = "termios"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "411c5bf740737c7918b8b1fe232dca4dc9f8e754b8ad5e20966814001ed0ac6b"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d"
+
+[[package]]
+name = "thiserror"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "thousands"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3bf63baf9f5039dadc247375c29eb13706706cfde997d0330d05aa63a77d8820"
+
+[[package]]
+name = "time"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a"
+dependencies = [
+ "libc",
+ "wasi 0.10.0+wasi-snapshot-preview1",
+ "winapi",
+]
+
+[[package]]
+name = "time"
+version = "0.3.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd0cbfecb4d19b5ea75bb31ad904eb5b9fa13f21079c3b92017ebdf4999a5890"
+dependencies = [
+ "serde",
+ "time-core",
+]
+
+[[package]]
+name = "time-core"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd"
+
+[[package]]
+name = "tlvc"
+version = "0.2.0"
+source = "git+https://github.com/oxidecomputer/tlvc#533f0bf26b0a8f32d287af4f2ea09320bc05c2cd"
+dependencies = [
+ "byteorder",
+ "crc",
+ "zerocopy",
+]
+
+[[package]]
+name = "tlvc-text"
+version = "0.1.0"
+source = "git+https://github.com/oxidecomputer/tlvc#533f0bf26b0a8f32d287af4f2ea09320bc05c2cd"
+dependencies = [
+ "ron 0.8.0",
+ "serde",
+ "tlvc",
+ "zerocopy",
+]
+
+[[package]]
+name = "toml"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b403acf6f2bb0859c93c7f0d967cb4a75a7ac552100f9322faf64dc047669b21"
+dependencies = [
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+]
+
+[[package]]
+name = "toml_datetime"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3ab8ed2edee10b50132aed5f331333428b011c99402b5a534154ed15746f9622"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.14.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5376256e44f2443f8896ac012507c19a012df0fe8758b55246ae51a2279db51f"
+dependencies = [
+ "combine",
+ "indexmap",
+ "itertools",
+ "serde",
+]
+
+[[package]]
+name = "trycmd"
+version = "0.13.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a5377b33cbe8bb69d97da63e2a2266065a642a47cc9bb3d783c28279d0029fea"
+dependencies = [
+ "glob",
+ "humantime",
+ "humantime-serde",
+ "rayon",
+ "serde",
+ "shlex",
+ "snapbox",
+ "toml_edit",
+]
+
+[[package]]
+name = "tui"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39c8ce4e27049eed97cfa363a5048b09d995e209994634a0efc26a14ab6c0c23"
+dependencies = [
+ "bitflags 1.3.2",
+ "cassowary",
+ "crossterm 0.20.0",
+ "unicode-segmentation",
+ "unicode-width",
+]
+
+[[package]]
+name = "typenum"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba"
+
+[[package]]
+name = "ucd-trie"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e79c4d996edb816c91e4308506774452e55e95c3c9de07b6729e17e15a5ef81"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4"
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+
+[[package]]
+name = "utf8parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
+
+[[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 = "void"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d"
+
+[[package]]
+name = "vsc7448-info"
+version = "0.1.0"
+source = "git+https://github.com/oxidecomputer/vsc7448.git#a9e71588498885e9a77282186f2bb576812f1af2"
+dependencies = [
+ "lazy_static",
+ "postcard",
+ "regex",
+ "serde",
+ "thiserror",
+ "vsc7448-types",
+]
+
+[[package]]
+name = "vsc7448-types"
+version = "0.1.0"
+source = "git+https://github.com/oxidecomputer/vsc7448.git#a9e71588498885e9a77282186f2bb576812f1af2"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "vte"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6cbce692ab4ca2f1f3047fcf732430249c0e971bfdd2b234cf2c47ad93af5983"
+dependencies = [
+ "arrayvec",
+ "utf8parse",
+ "vte_generate_state_changes",
+]
+
+[[package]]
+name = "vte_generate_state_changes"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d257817081c7dffcdbab24b9e62d2def62e2ff7d00b1c20062551e6cccc145ff"
+dependencies = [
+ "proc-macro2",
+ "quote",
+]
+
+[[package]]
+name = "wait-timeout"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "walkdir"
+version = "2.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698"
+dependencies = [
+ "same-file",
+ "winapi-util",
+]
+
+[[package]]
+name = "wasi"
+version = "0.10.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d"
+
+[[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"
+
+[[package]]
+name = "windows"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f"
+dependencies = [
+ "windows-targets 0.48.0",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
+dependencies = [
+ "windows-targets 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets 0.48.0",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5"
+dependencies = [
+ "windows_aarch64_gnullvm 0.48.0",
+ "windows_aarch64_msvc 0.48.0",
+ "windows_i686_gnu 0.48.0",
+ "windows_i686_msvc 0.48.0",
+ "windows_x86_64_gnu 0.48.0",
+ "windows_x86_64_gnullvm 0.48.0",
+ "windows_x86_64_msvc 0.48.0",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
+
+[[package]]
+name = "wyz"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed"
+dependencies = [
+ "tap",
+]
+
+[[package]]
+name = "xml-rs"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2d7d3948613f75c98fd9328cfdcc45acc4d360655289d0a7d4ec931392200a3"
+
+[[package]]
+name = "xtask"
+version = "1.0.0"
+dependencies = [
+ "anyhow",
+ "cargo_metadata",
+ "clap",
+]
+
+[[package]]
+name = "yaml-rust"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85"
+dependencies = [
+ "linked-hash-map",
+]
+
+[[package]]
+name = "zerocopy"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "332f188cc1bcf1fe1064b8c58d150f497e697f49774aa846f2dc949d9a25f236"
+dependencies = [
+ "byteorder",
+ "zerocopy-derive",
+]
+
+[[package]]
+name = "zerocopy-derive"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6505e6815af7de1746a08f69c69606bb45695a17149517680f3b2149713b19a3"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "zip"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0445d0fbc924bb93539b4316c11afb121ea39296f99a3c4c9edad09e3658cdef"
+dependencies = [
+ "aes",
+ "byteorder",
+ "bzip2",
+ "constant_time_eq",
+ "crc32fast",
+ "crossbeam-utils",
+ "flate2",
+ "hmac",
+ "pbkdf2",
+ "sha1",
+ "time 0.3.20",
+ "zstd",
+]
+
+[[package]]
+name = "zstd"
+version = "0.11.2+zstd.1.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4"
+dependencies = [
+ "zstd-safe",
+]
+
+[[package]]
+name = "zstd-safe"
+version = "5.0.2+zstd.1.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db"
+dependencies = [
+ "libc",
+ "zstd-sys",
+]
+
+[[package]]
+name = "zstd-sys"
+version = "2.0.8+zstd.1.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5556e6ee25d32df2586c098bbfa278803692a20d0ab9565e049480d52707ec8c"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+]
diff --git a/nixpkgs/pkgs/development/tools/rust/humility/default.nix b/nixpkgs/pkgs/development/tools/rust/humility/default.nix
new file mode 100644
index 000000000000..399d9dcf41b3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/humility/default.nix
@@ -0,0 +1,52 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+, libusb1
+, libftdi
+, cargo-readme
+, pkg-config
+, AppKit
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "humility";
+  version = "unstable-2023-11-08";
+
+  nativeBuildInputs = [ pkg-config cargo-readme ];
+  buildInputs = [ libusb1 libftdi ] ++ lib.optionals stdenv.isDarwin [
+    AppKit
+  ];
+
+  src = fetchFromGitHub {
+    owner = "oxidecomputer";
+    repo = pname;
+    rev = "67d932edde8b32c11e5d6356a54e97d65f7b9b2b";
+    sha256 = "sha256-3EVNlOAVfx/wUFn83VBKs1N5PanS4jVADUPlhCIok5M=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "capstone-0.10.0" = "sha256-x0p005W6u3QsTKRupj9HEg+dZB3xCXlKb9VCKv+LJ0U=";
+      "hidapi-1.4.1" = "sha256-2SBQu94ArGGwPU3wJYV0vwwVOXMCCq+jbeBHfKuE+pA=";
+      "hif-0.3.1" = "sha256-o3r1akaSARfqIzuP86SJc6/s0b2PIkaZENjYO3DPAUo=";
+      "humpty-0.1.3" = "sha256-efeb+RaAjQs9XU3KkfVo8mVK2dGyv+2xFKSVKS0vyTc=";
+      "idol-0.3.0" = "sha256-s6ZM/EyBE1eOySPah5GtT0/l7RIQKkeUPybMmqUpmt8=";
+      "idt8a3xxxx-0.1.0" = "sha256-S36fS9hYTIn57Tt9msRiM7OFfujJEf8ED+9R9p0zgK4=";
+      "libusb1-sys-0.5.0" = "sha256-7Bb1lpZvCb+OrKGYiD6NV+lMJuxFbukkRXsufaro5OQ=";
+      "pmbus-0.1.0" = "sha256-20peEHZl6aXcLhw/OWb4RHAXWRNqoMcDXXglwNP+Gpc=";
+      "probe-rs-0.12.0" = "sha256-/L+85K6uxzUmz/TlLLFbMlyekoXC/ClO33EQ/yYjQKU=";
+      "spd-0.1.0" = "sha256-X6XUx+huQp77XF5EZDYYqRqaHsdDSbDMK8qcuSGob3E=";
+      "tlvc-0.2.0" = "sha256-HiqDRqmKOTxz6UQSXNMOZdWdc5W+cFGuKBkNrqFvIIE=";
+      "vsc7448-info-0.1.0" = "sha256-otNLdfGIzuyu03wEb7tzhZVVMdS0of2sU/AKSNSsoho=";
+    };
+  };
+
+  meta = with lib; {
+    description = "Debugger for Hubris";
+    homepage = "https://github.com/oxidecomputer/humility";
+    license = with licenses; [ mpl20 ];
+    maintainers = with maintainers; [ therishidesai ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/leptosfmt/default.nix b/nixpkgs/pkgs/development/tools/rust/leptosfmt/default.nix
new file mode 100644
index 000000000000..2730453d2ae2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/leptosfmt/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "leptosfmt";
+  version = "0.1.18";
+
+  src = fetchFromGitHub {
+    owner = "bram209";
+    repo = "leptosfmt";
+    rev = version;
+    hash = "sha256-bNfTZgcru7PJR/9AcaOmW0E8QwdiXcuP7MWXcDPXGso=";
+  };
+
+  cargoHash = "sha256-NQYIq9Wc2mtUGeS3Iv2e0nfQkvcX6hOxZ6FHVcHD5cs=";
+
+  meta = with lib; {
+    description = "A formatter for the leptos view! macro";
+    homepage = "https://github.com/bram209/leptosfmt";
+    changelog = "https://github.com/bram209/leptosfmt/blob/${src.rev}/CHANGELOG.md";
+    license = with licenses; [ asl20 mit ];
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/maturin/default.nix b/nixpkgs/pkgs/development/tools/rust/maturin/default.nix
new file mode 100644
index 000000000000..fa17f4f03624
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/maturin/default.nix
@@ -0,0 +1,45 @@
+{ callPackage
+, lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, libiconv
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "maturin";
+  version = "1.4.0";
+
+  src = fetchFromGitHub {
+    owner = "PyO3";
+    repo = "maturin";
+    rev = "v${version}";
+    hash = "sha256-mD/7wWeclV5Xqii9hcZMustvR6tf7MoyTZ3WsvEc61U=";
+  };
+
+  cargoHash = "sha256-w8XpCJ8GS2VszW/9/O2suy82zVO1UpWTrU1lFGYwhvw=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [ Security libiconv ];
+
+  # Requires network access, fails in sandbox.
+  doCheck = false;
+
+  passthru.tests.pyo3 = callPackage ./pyo3-test {};
+
+  meta = with lib; {
+    description = "Build and publish Rust crates Python packages";
+    longDescription = ''
+      Build and publish Rust crates with PyO3, rust-cpython, and
+      cffi bindings as well as Rust binaries as Python packages.
+
+      This project is meant as a zero-configuration replacement for
+      setuptools-rust and Milksnake. It supports building wheels for
+      Python and can upload them to PyPI.
+    '';
+    homepage = "https://github.com/PyO3/maturin";
+    changelog = "https://github.com/PyO3/maturin/blob/v${version}/Changelog.md";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/maturin/pyo3-test/Cargo.lock b/nixpkgs/pkgs/development/tools/rust/maturin/pyo3-test/Cargo.lock
new file mode 100644
index 000000000000..5e698d4ff735
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/maturin/pyo3-test/Cargo.lock
@@ -0,0 +1,682 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "ahash"
+version = "0.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "739f4a8db6605981345c5654f3a85b056ce52f37a39d34da03f25bf2151ea16e"
+
+[[package]]
+name = "assert_approx_eq"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c07dab4369547dbe5114677b33fbbf724971019f3818172d59a97a61c774ffd"
+
+[[package]]
+name = "autocfg"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a"
+
+[[package]]
+name = "bitflags"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
+
+[[package]]
+name = "byteorder"
+version = "1.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae44d1a3d5a19df61dd0c8beb138458ac2a53a7ac09eba97d55592540004306b"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "const_fn"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28b9d6de7f49e22cf97ad17fc4036ece69300032f45f78f30b4a4482cdc3f4a6"
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dca26ee1f8d361640700bde38b2c37d8c22b3ce2d360e1fc1c74ea4b0aa7d775"
+dependencies = [
+ "cfg-if",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94af6efb46fef72616855b036a624cf27ba656ffc9be1b9a3c931cfc7749a9a9"
+dependencies = [
+ "cfg-if",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1aaa739f95311c2c7887a76863f500026092fb1dce0161dab577e559ef3569d"
+dependencies = [
+ "cfg-if",
+ "const_fn",
+ "crossbeam-utils",
+ "lazy_static",
+ "memoffset",
+ "scopeguard",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "02d96d1e189ef58269ebe5b97953da3274d83a93af647c2ddd6f9dab28cedb8d"
+dependencies = [
+ "autocfg",
+ "cfg-if",
+ "lazy_static",
+]
+
+[[package]]
+name = "ctor"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e8f45d9ad417bcef4817d614a501ab55cdd96a6fdb24f49aab89a54acfd66b19"
+dependencies = [
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "either"
+version = "1.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457"
+
+[[package]]
+name = "getrandom"
+version = "0.1.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "ghost"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a5bcf1bbeab73aa4cf2fde60a846858dc036163c7c33bec309f8d17de785479"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "glob"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574"
+
+[[package]]
+name = "hashbrown"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04"
+dependencies = [
+ "ahash",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "322f4de77956e22ed0e5032c359a0f1273f1f7f0d79bfa3b8ffbc730d7fbcc5c"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "indoc"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "47741a8bc60fb26eb8d6e0238bbb26d8575ff623fdc97b1a2c00c050b9684ed8"
+dependencies = [
+ "indoc-impl",
+ "proc-macro-hack",
+]
+
+[[package]]
+name = "indoc-impl"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce046d161f000fffde5f432a0d034d0341dc152643b2598ed5bfce44c4f3a8f0"
+dependencies = [
+ "proc-macro-hack",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "unindent",
+]
+
+[[package]]
+name = "instant"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61124eeebbd69b8190558df225adf7e4caafce0d743919e5d6b19652314ec5ec"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "inventory"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f0f7efb804ec95e33db9ad49e4252f049e37e8b0a4652e3cd61f7999f2eff7f"
+dependencies = [
+ "ctor",
+ "ghost",
+ "inventory-impl",
+]
+
+[[package]]
+name = "inventory-impl"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75c094e94816723ab936484666968f5b58060492e880f3c8d00489a1e244fa51"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "itoa"
+version = "0.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736"
+
+[[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.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7282d924be3275cec7f6756ff4121987bc6481325397dde6ba3e7802b1a8b1c"
+
+[[package]]
+name = "lock_api"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd96ffd135b2fd7b973ac026d28085defbe8983df057ced3eb4f2130b0831312"
+dependencies = [
+ "scopeguard",
+]
+
+[[package]]
+name = "memoffset"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "157b4208e3059a8f9e78d559edc658e13df41410cb3ae03979c83130067fdd87"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "num-bigint"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e9a41747ae4633fce5adffb4d2e81ffc5e89593cb19917f8fb2cc5ff76507bf"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-complex"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "747d632c0c558b87dbabbe6a82f3b4ae03720d0646ac5b7b4dae89394be5f2c5"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "num-integer"
+version = "0.1.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db"
+dependencies = [
+ "autocfg",
+ "num-traits",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3"
+dependencies = [
+ "hermit-abi",
+ "libc",
+]
+
+[[package]]
+name = "parking_lot"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d7744ac029df22dca6284efe4e898991d28e3085c706c972bcd7da4a27a15eb"
+dependencies = [
+ "instant",
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa7a782938e745763fe6907fc6ba86946d72f49fe7e21de074e08128a99fb018"
+dependencies = [
+ "cfg-if",
+ "instant",
+ "libc",
+ "redox_syscall",
+ "smallvec",
+ "winapi",
+]
+
+[[package]]
+name = "paste"
+version = "0.1.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "45ca20c77d80be666aef2b45486da86238fabe33e38306bd3118fe4af33fa880"
+dependencies = [
+ "paste-impl",
+ "proc-macro-hack",
+]
+
+[[package]]
+name = "paste-impl"
+version = "0.1.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d95a7db200b97ef370c8e6de0088252f7e0dfff7d047a28528e47456c0fc98b6"
+dependencies = [
+ "proc-macro-hack",
+]
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857"
+
+[[package]]
+name = "proc-macro-hack"
+version = "0.5.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e0704ee1a7e00d7bb417d0770ea303c1bccbabf0ef1667dae92b5967f5f8a71"
+dependencies = [
+ "unicode-xid",
+]
+
+[[package]]
+name = "proptest"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12e6c80c1139113c28ee4670dc50cc42915228b51f56a9e407f0ec60f966646f"
+dependencies = [
+ "bitflags",
+ "byteorder",
+ "lazy_static",
+ "num-traits",
+ "quick-error",
+ "rand",
+ "rand_chacha",
+ "rand_xorshift",
+ "regex-syntax",
+]
+
+[[package]]
+name = "pyo3"
+version = "0.13.2"
+dependencies = [
+ "assert_approx_eq",
+ "cfg-if",
+ "ctor",
+ "hashbrown",
+ "indoc",
+ "inventory",
+ "libc",
+ "num-bigint",
+ "num-complex",
+ "parking_lot",
+ "paste",
+ "proptest",
+ "pyo3",
+ "pyo3-macros",
+ "rustversion",
+ "serde",
+ "serde_json",
+ "trybuild",
+ "unindent",
+]
+
+[[package]]
+name = "pyo3-macros"
+version = "0.13.2"
+dependencies = [
+ "pyo3-macros-backend",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "pyo3-macros-backend"
+version = "0.13.2"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "quick-error"
+version = "1.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0"
+
+[[package]]
+name = "quote"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rand"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
+dependencies = [
+ "getrandom",
+ "libc",
+ "rand_chacha",
+ "rand_core",
+ "rand_hc",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402"
+dependencies = [
+ "ppv-lite86",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "rand_hc"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
+dependencies = [
+ "rand_core",
+]
+
+[[package]]
+name = "rand_xorshift"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77d416b86801d23dde1aa643023b775c3a462efc0ed96443add11546cdf1dca8"
+dependencies = [
+ "rand_core",
+]
+
+[[package]]
+name = "rayon"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b0d8e0819fadc20c74ea8373106ead0600e3a67ef1fe8da56e39b9ae7275674"
+dependencies = [
+ "autocfg",
+ "crossbeam-deque",
+ "either",
+ "rayon-core",
+]
+
+[[package]]
+name = "rayon-core"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ab346ac5921dc62ffa9f89b7a773907511cdfa5490c572ae9be1be33e8afa4a"
+dependencies = [
+ "crossbeam-channel",
+ "crossbeam-deque",
+ "crossbeam-utils",
+ "lazy_static",
+ "num_cpus",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94341e4e44e24f6b591b59e47a8a027df12e008d73fd5672dbea9cc22f4507d9"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5eb417147ba9860a96cfe72a0b93bf88fee1744b5636ec99ab20c1aa9376581"
+
+[[package]]
+name = "rustapi-module"
+version = "0.1.0"
+dependencies = [
+ "pyo3",
+]
+
+[[package]]
+name = "rustversion"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb5d2a036dc6d2d8fd16fde3498b04306e29bd193bf306a57427019b823d5acd"
+
+[[package]]
+name = "ryu"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e"
+
+[[package]]
+name = "scopeguard"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+
+[[package]]
+name = "serde"
+version = "1.0.123"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92d5161132722baa40d802cc70b15262b98258453e85e5d1d365c757c73869ae"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.123"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9391c295d64fc0abb2c556bad848f33cb8296276b1ad2677d1ae1ace4f258f31"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.62"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea1c6153794552ea7cf7cf63b1231a25de00ec90db326ba6264440fa08e31486"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e"
+
+[[package]]
+name = "syn"
+version = "1.0.60"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c700597eca8a5a762beb35753ef6b94df201c81cca676604f547495a0d7f0081"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-xid",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dfed899f0eb03f32ee8c6a0aabdb8a7949659e3466561fc0adf54e26d88c5f4"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "toml"
+version = "0.5.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "trybuild"
+version = "1.0.41"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "99471a206425fba51842a9186315f32d91c56eadc21ea4c21f847b59cf778f8b"
+dependencies = [
+ "glob",
+ "lazy_static",
+ "serde",
+ "serde_json",
+ "termcolor",
+ "toml",
+]
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564"
+
+[[package]]
+name = "unindent"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f14ee04d9415b52b3aeab06258a3f07093182b88ba0f9b8d203f211a7a7d41c7"
+
+[[package]]
+name = "wasi"
+version = "0.9.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
+
+[[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"
+
+[[package]]
+name = "word-count"
+version = "0.1.0"
+dependencies = [
+ "pyo3",
+ "rayon",
+]
diff --git a/nixpkgs/pkgs/development/tools/rust/maturin/pyo3-test/default.nix b/nixpkgs/pkgs/development/tools/rust/maturin/pyo3-test/default.nix
new file mode 100644
index 000000000000..7f79c8565d23
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/maturin/pyo3-test/default.nix
@@ -0,0 +1,12 @@
+{ python3
+, rustPlatform
+}:
+
+python3.pkgs.callPackage ./generic.nix {
+  buildAndTestSubdir = "examples/word-count";
+
+  nativeBuildInputs = with rustPlatform; [
+    cargoSetupHook
+    maturinBuildHook
+  ];
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/maturin/pyo3-test/generic.nix b/nixpkgs/pkgs/development/tools/rust/maturin/pyo3-test/generic.nix
new file mode 100644
index 000000000000..7bc7e8d43bcb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/maturin/pyo3-test/generic.nix
@@ -0,0 +1,45 @@
+# Derivation prototype, used by maturin and setuptools-rust
+# passthrough tests.
+
+{ lib
+, fetchFromGitHub
+, python
+, rustPlatform
+
+, nativeBuildInputs
+
+, buildAndTestSubdir ? null
+, format ? "pyproject"
+, preConfigure ? ""
+}:
+
+python.pkgs.buildPythonPackage rec {
+  pname = "word-count";
+  version = "0.13.2";
+
+  src = fetchFromGitHub {
+    owner = "PyO3";
+    repo = "pyo3";
+    rev = "v${version}";
+    hash = "sha256-NOMrrfo8WjlPhtGxWUOPJS/UDDdbLQRCXR++Zd6JmIA=";
+  };
+
+  cargoDeps = rustPlatform.importCargoLock {
+    lockFile = ./Cargo.lock;
+  };
+
+  postPatch = ''
+    ln -s ${./Cargo.lock} Cargo.lock
+  '';
+
+  inherit buildAndTestSubdir format nativeBuildInputs preConfigure;
+
+  pythonImportsCheck = [ "word_count" ];
+
+  meta = with lib; {
+    description = "PyO3 word count example";
+    homepage = "https://github.com/PyO3/pyo3";
+    license = licenses.asl20;
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/measureme/Cargo.lock b/nixpkgs/pkgs/development/tools/rust/measureme/Cargo.lock
new file mode 100644
index 000000000000..a1e663a7d5c8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/measureme/Cargo.lock
@@ -0,0 +1,993 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "ahash"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e8fd72866655d1904d6b0997d0b07ba561047d070fbe29de039031c641b61217"
+dependencies = [
+ "const-random",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43f6cb1bf222025340178f382c426f13757b2960e89779dfcb319c32542a5a41"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "analyzeme"
+version = "9.2.0"
+source = "git+https://github.com/rust-lang/measureme?tag=9.2.0#9f51cde2e5dd3ef0392f0f6a7201f4946502ef41"
+dependencies = [
+ "byteorder",
+ "measureme 9.2.0",
+ "memchr",
+ "rustc-hash",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "analyzeme"
+version = "10.1.1"
+dependencies = [
+ "analyzeme 9.2.0",
+ "decodeme",
+ "flate2",
+ "measureme 10.1.1",
+ "memchr",
+ "rustc-hash",
+ "serde",
+]
+
+[[package]]
+name = "ansi_term"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "arrayvec"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711"
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi 0.1.19",
+ "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 = "bytemuck"
+version = "1.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea"
+
+[[package]]
+name = "byteorder"
+version = "1.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
+
+[[package]]
+name = "cc"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "clap"
+version = "2.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c"
+dependencies = [
+ "ansi_term",
+ "atty",
+ "bitflags",
+ "strsim",
+ "textwrap",
+ "unicode-width",
+ "vec_map",
+]
+
+[[package]]
+name = "const-random"
+version = "0.1.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "368a7a772ead6ce7e1de82bfb04c485f3db8ec744f72925af5735e29a22cc18e"
+dependencies = [
+ "const-random-macro",
+ "proc-macro-hack",
+]
+
+[[package]]
+name = "const-random-macro"
+version = "0.1.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d7d6ab3c3a2282db210df5f02c4dab6e0a7057af0fb7ebd4070f30fe05c0ddb"
+dependencies = [
+ "getrandom",
+ "once_cell",
+ "proc-macro-hack",
+ "tiny-keccak",
+]
+
+[[package]]
+name = "crc32fast"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "crox"
+version = "10.1.1"
+dependencies = [
+ "analyzeme 10.1.1",
+ "measureme 10.1.1",
+ "rustc-hash",
+ "serde",
+ "serde_json",
+ "structopt",
+]
+
+[[package]]
+name = "crunchy"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7"
+
+[[package]]
+name = "csv"
+version = "1.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "626ae34994d3d8d668f4269922248239db4ae42d538b14c398b74a52208e8086"
+dependencies = [
+ "csv-core",
+ "itoa 1.0.6",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "csv-core"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b2466559f260f48ad25fe6317b3c8dac77b5bdb5763ac7d9d6103530663bc90"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "decodeme"
+version = "10.1.1"
+dependencies = [
+ "measureme 10.1.1",
+ "memchr",
+ "rustc-hash",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "dirs-next"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1"
+dependencies = [
+ "cfg-if",
+ "dirs-sys-next",
+]
+
+[[package]]
+name = "dirs-sys-next"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d"
+dependencies = [
+ "libc",
+ "redox_users",
+ "winapi",
+]
+
+[[package]]
+name = "encode_unicode"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0"
+
+[[package]]
+name = "errno"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "windows-sys",
+]
+
+[[package]]
+name = "errno-dragonfly"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "flamegraph"
+version = "10.1.1"
+dependencies = [
+ "analyzeme 10.1.1",
+ "inferno",
+ "measureme 10.1.1",
+ "structopt",
+]
+
+[[package]]
+name = "flate2"
+version = "1.0.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "glob"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
+
+[[package]]
+name = "heck"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
+dependencies = [
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286"
+
+[[package]]
+name = "inferno"
+version = "0.9.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b2a71c56e4c218f2a1d36bc5177cbfdedf89697ac68610ac3c8452cde152231"
+dependencies = [
+ "ahash",
+ "itoa 0.4.8",
+ "lazy_static",
+ "log",
+ "num-format",
+ "quick-xml",
+ "rgb",
+ "str_stack",
+]
+
+[[package]]
+name = "instant"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "io-lifetimes"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2"
+dependencies = [
+ "hermit-abi 0.3.1",
+ "libc",
+ "windows-sys",
+]
+
+[[package]]
+name = "is-terminal"
+version = "0.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "adcf93614601c8129ddf72e2d5633df827ba6551541c6d8c59520a371475be1f"
+dependencies = [
+ "hermit-abi 0.3.1",
+ "io-lifetimes",
+ "rustix",
+ "windows-sys",
+]
+
+[[package]]
+name = "itoa"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4"
+
+[[package]]
+name = "itoa"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6"
+
+[[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.146"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f92be4933c13fd498862a9e02a3055f8a8d9c039ce33db97306fd5a6caa7f29b"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519"
+
+[[package]]
+name = "lock_api"
+version = "0.4.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16"
+dependencies = [
+ "autocfg",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4"
+
+[[package]]
+name = "measureme"
+version = "9.2.0"
+source = "git+https://github.com/rust-lang/measureme?tag=9.2.0#9f51cde2e5dd3ef0392f0f6a7201f4946502ef41"
+dependencies = [
+ "log",
+ "memmap2",
+ "parking_lot",
+ "perf-event-open-sys 1.0.1",
+ "rustc-hash",
+ "smallvec",
+]
+
+[[package]]
+name = "measureme"
+version = "10.1.1"
+dependencies = [
+ "log",
+ "memmap2",
+ "parking_lot",
+ "perf-event-open-sys 3.0.0",
+ "rustc-hash",
+ "smallvec",
+]
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "memmap2"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "723e3ebdcdc5c023db1df315364573789f8857c11b631a2fdfad7c00f5c046b4"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "miniz_oxide"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "mmedit"
+version = "10.1.1"
+dependencies = [
+ "decodeme",
+ "measureme 10.1.1",
+ "structopt",
+]
+
+[[package]]
+name = "mmview"
+version = "10.1.1"
+dependencies = [
+ "analyzeme 10.1.1",
+ "measureme 10.1.1",
+ "structopt",
+]
+
+[[package]]
+name = "num-format"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a652d9771a63711fd3c3deb670acfbe5c30a4072e664d7a3bf5a9e1056ac72c3"
+dependencies = [
+ "arrayvec",
+ "itoa 1.0.6",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
+
+[[package]]
+name = "parking_lot"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99"
+dependencies = [
+ "instant",
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc"
+dependencies = [
+ "cfg-if",
+ "instant",
+ "libc",
+ "redox_syscall",
+ "smallvec",
+ "winapi",
+]
+
+[[package]]
+name = "perf-event-open-sys"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce9bedf5da2c234fdf2391ede2b90fabf585355f33100689bc364a3ea558561a"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "perf-event-open-sys"
+version = "3.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b29be2ba35c12c6939f6bc73187f728bba82c3c062ecdc5fa90ea739282a1f58"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "prettytable-rs"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eea25e07510aa6ab6547308ebe3c036016d162b8da920dbb079e3ba8acf3d95a"
+dependencies = [
+ "csv",
+ "encode_unicode",
+ "is-terminal",
+ "lazy_static",
+ "term",
+ "unicode-width",
+]
+
+[[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 1.0.109",
+ "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-macro-hack"
+version = "0.5.20+deprecated"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.60"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dec2b086b7a862cf4de201096214fa870344cf922b2b30c167badb3af3195406"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quick-xml"
+version = "0.18.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3cc440ee4802a86e357165021e3e255a9143724da31db1e2ea540214c96a0f82"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b9ab9c7eadfd8df19006f1cf1a4aed13540ed5cbc047010ece5826e10825488"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "redox_users"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b"
+dependencies = [
+ "getrandom",
+ "redox_syscall",
+ "thiserror",
+]
+
+[[package]]
+name = "regex"
+version = "1.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d0ab3ca65655bb1e41f2a8c8cd662eb4fb035e67c3f78da1d61dffe89d07300f"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "436b050e76ed2903236f032a59761c1eb99e1b0aead2c257922771dab1fc8c78"
+
+[[package]]
+name = "rgb"
+version = "0.8.36"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "20ec2d3e3fc7a92ced357df9cebd5a10b6fb2aa1ee797bf7e9ce2f17dffc8f59"
+dependencies = [
+ "bytemuck",
+]
+
+[[package]]
+name = "rustc-hash"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
+
+[[package]]
+name = "rustix"
+version = "0.37.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b96e891d04aa506a6d1f318d2771bcb1c7dfda84e126660ace067c9b474bb2c0"
+dependencies = [
+ "bitflags",
+ "errno",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys",
+]
+
+[[package]]
+name = "rustversion"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06"
+
+[[package]]
+name = "ryu"
+version = "1.0.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041"
+
+[[package]]
+name = "scopeguard"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+
+[[package]]
+name = "serde"
+version = "1.0.164"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e8c8cf938e98f769bc164923b06dce91cea1751522f46f8466461af04c9027d"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.164"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9735b638ccc51c28bf6914d90a2e9725b377144fc612c49a611fddd1b631d68"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.18",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.97"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bdf3bf93142acad5821c99197022e170842cdbc1c30482b98750c688c640842a"
+dependencies = [
+ "itoa 1.0.6",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
+
+[[package]]
+name = "stack_collapse"
+version = "10.1.1"
+dependencies = [
+ "analyzeme 10.1.1",
+ "measureme 10.1.1",
+ "structopt",
+]
+
+[[package]]
+name = "str_stack"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9091b6114800a5f2141aee1d1b9d6ca3592ac062dc5decb3764ec5895a47b4eb"
+
+[[package]]
+name = "strsim"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
+
+[[package]]
+name = "structopt"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c6b5c64445ba8094a6ab0c3cd2ad323e07171012d9c98b0b15651daf1787a10"
+dependencies = [
+ "clap",
+ "lazy_static",
+ "structopt-derive",
+]
+
+[[package]]
+name = "structopt-derive"
+version = "0.4.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dcb5ae327f9cc13b68763b5749770cb9e048a99bd9dfdfa58d0cf05d5f64afe0"
+dependencies = [
+ "heck",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "summarize"
+version = "10.1.1"
+dependencies = [
+ "analyzeme 10.1.1",
+ "measureme 10.1.1",
+ "prettytable-rs",
+ "rustc-hash",
+ "serde",
+ "serde_json",
+ "structopt",
+]
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "32d41677bcbe24c20c52e7c70b0d8db04134c5d1066bf98662e2871ad200ea3e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "term"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c59df8ac95d96ff9bede18eb7300b0fda5e5d8d90960e76f8e14ae765eedbf1f"
+dependencies = [
+ "dirs-next",
+ "rustversion",
+ "winapi",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.18",
+]
+
+[[package]]
+name = "tiny-keccak"
+version = "2.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237"
+dependencies = [
+ "crunchy",
+]
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b15811caf2415fb889178633e7724bad2509101cde276048e013b9def5e51fa0"
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+
+[[package]]
+name = "vec_map"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "version_checker"
+version = "10.1.1"
+dependencies = [
+ "glob",
+ "regex",
+]
+
+[[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-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
diff --git a/nixpkgs/pkgs/development/tools/rust/measureme/default.nix b/nixpkgs/pkgs/development/tools/rust/measureme/default.nix
new file mode 100644
index 000000000000..79b938b2adc6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/measureme/default.nix
@@ -0,0 +1,31 @@
+{ lib, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "measureme";
+  version = "10.1.1";
+
+  src = fetchFromGitHub {
+    owner = "rust-lang";
+    repo = "measureme";
+    rev = version;
+    hash = "sha256-RCh6fTa4d+/Fj5ID5Su3pCZj/O+FhITzfKixXu9G550=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "analyzeme-9.2.0" = "sha256-YOZiux4ouWBToGFx0+fiqjcyrnSjwc+8Qfi2rLGT/18=";
+    };
+  };
+
+  postPatch = ''
+    ln -s ${./Cargo.lock} Cargo.lock
+  '';
+
+  meta = with lib; {
+    description = "Support crate for rustc's self-profiling feature";
+    homepage = "https://github.com/rust-lang/measureme";
+    license = licenses.asl20;
+    maintainers = [ maintainers.t4ccer ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/ograc/default.nix b/nixpkgs/pkgs/development/tools/rust/ograc/default.nix
new file mode 100644
index 000000000000..4361a225498d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/ograc/default.nix
@@ -0,0 +1,21 @@
+{ fetchFromGitLab, lib, rustPlatform, }:
+
+rustPlatform.buildRustPackage {
+  pname = "ograc";
+  version = "0.1.6";
+  src = fetchFromGitLab {
+    owner = "lirnril";
+    repo = "ograc";
+    rev = "d09b3102ff7a364bf2593589327a16a473bd4f25";
+    sha256 = "sha256-vdHPFY6zZ/OBNlJO3N/6YXcvlddw2wYHgFWI0yfSgVo=";
+  };
+  cargoSha256 = "sha256-HAeEd7HY+hbTUOkIt6aTfvPYLRPtdAcUGvkuBUMjohA=";
+
+  meta = with lib; {
+    description = "like cargo, but backwards";
+    homepage = "https://crates.io/crates/ograc";
+    license = licenses.agpl3Plus;
+    maintainers = with maintainers; [ sciencentistguy ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/development/tools/rust/panamax/default.nix b/nixpkgs/pkgs/development/tools/rust/panamax/default.nix
new file mode 100644
index 000000000000..a86867eded08
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/panamax/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, rustPlatform
+, fetchCrate
+, pkg-config
+, libgit2
+, openssl
+, zlib
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "panamax";
+  version = "1.0.12";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-nHAsKvNEhGDVrLx8K7xnm7TuCxaZcYwlQ6xjVRvDdSk=";
+  };
+
+  cargoSha256 = "sha256-ydZ0KM/g9k0ux7Zr4crlxnKCC9N/qPzn1wmzbTIyz7o=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [
+    libgit2
+    openssl
+    zlib
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  meta = with lib; {
+    description = "Mirror rustup and crates.io repositories for offline Rust and cargo usage";
+    homepage = "https://github.com/panamax-rs/panamax";
+    license = with licenses; [ mit /* or */ asl20 ];
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/probe-rs/default.nix b/nixpkgs/pkgs/development/tools/rust/probe-rs/default.nix
new file mode 100644
index 000000000000..90ab81e4ddde
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/probe-rs/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, libusb1
+, openssl
+, DarwinTools
+, AppKit
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "probe-rs";
+  version = "0.22.0";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-7bWx6ZILqdSDY/q51UP/BuCgMH0F4ePMSnclHeF2DY4=";
+  };
+
+  cargoHash = "sha256-ynmKmXQrUnTcmo0S7FO+l/9EPuzgLCdUOPLuwoG4pbU=";
+
+  cargoBuildFlags = [ "--features=cli" ];
+
+  nativeBuildInputs = [ pkg-config ] ++ lib.optionals stdenv.isDarwin [ DarwinTools ];
+
+  buildInputs = [ libusb1 openssl ] ++ lib.optionals stdenv.isDarwin [ AppKit ];
+
+  meta = with lib; {
+    description = "CLI tool for on-chip debugging and flashing of ARM chips";
+    homepage = "https://probe.rs/";
+    changelog = "https://github.com/probe-rs/probe-rs/blob/v${version}/CHANGELOG.md";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ xgroleau newam ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/probe-run/default.nix b/nixpkgs/pkgs/development/tools/rust/probe-run/default.nix
new file mode 100644
index 000000000000..30ca65f776b0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/probe-run/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchCrate
+, pkg-config
+, DarwinTools
+, libusb1
+, libiconv
+, AppKit
+, IOKit
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "probe-run";
+  version = "0.3.11";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-RlmN2PV5Z/+NTYia7LhrAW437bsg6oUxlQ1qcbZuq0o=";
+  };
+
+  cargoHash = "sha256-MG3xHArNEqXs0vC5sSyaBM3421yJ25nazvBNQVcs4v0=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ] ++ lib.optionals stdenv.isDarwin [
+    DarwinTools
+  ];
+
+  buildInputs = [
+    libusb1
+  ] ++ lib.optionals stdenv.isDarwin [
+    libiconv
+    AppKit
+    IOKit
+  ];
+
+  meta = with lib; {
+    description = "Run embedded programs just like native ones";
+    homepage = "https://github.com/knurling-rs/probe-run";
+    changelog = "https://github.com/knurling-rs/probe-run/blob/v${version}/CHANGELOG.md";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ hoverbear newam ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/ra-multiplex/default.nix b/nixpkgs/pkgs/development/tools/rust/ra-multiplex/default.nix
new file mode 100644
index 000000000000..ce579c76eeb0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/ra-multiplex/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, fetchFromGitHub
+, makeWrapper
+, rustPlatform
+, rust-analyzer
+}:
+
+rustPlatform.buildRustPackage {
+  pname = "ra-multiplex";
+  version = "0.2.2";
+
+  src = fetchFromGitHub {
+    owner = "pr2502";
+    repo = "ra-multiplex";
+    rev = "dcb5f83890cb91016b0a1590cc1b732606bb6ec1";
+    hash = "sha256-Hf4Gj9eXEP4gXiqNV4Jq0oiGLX3DtDF9At1feEZ+bUE=";
+  };
+
+  cargoHash = "sha256-MeUtkPjOsL1kQ2W0Q1/OqhKDVXs4cECkATHISpyfp9U=";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postInstall = ''
+    wrapProgram $out/bin/ra-multiplex \
+      --suffix PATH ${lib.makeBinPath [ rust-analyzer ]}
+  '';
+
+  meta = with lib; {
+    description = "A multiplexer for rust-analyzer";
+    homepage = "https://github.com/pr2502/ra-multiplex";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ norfair ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/ravedude/default.nix b/nixpkgs/pkgs/development/tools/rust/ravedude/default.nix
new file mode 100644
index 000000000000..aeb44664cf6c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/ravedude/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, rustPlatform
+, fetchCrate
+, pkg-config
+, udev
+, nix-update-script
+, testers
+, ravedude
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "ravedude";
+  version = "0.1.6";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-LhPRz3DUMDoe50Hq3yO+2BHpyh5fQ4sMNGLttjkdSZw=";
+  };
+
+  cargoHash = "sha256-Uo8wlTAHBkn/WeGPhPP+BU80wjSyNHsWQj8QvA7mHrk=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ udev ];
+
+  passthru = {
+    updateScript = nix-update-script { };
+    tests.version = testers.testVersion {
+      package = ravedude;
+      version = "v${version}";
+    };
+  };
+
+  meta = with lib; {
+    description = "Tool to easily flash code onto an AVR microcontroller with avrdude";
+    homepage = "https://crates.io/crates/ravedude";
+    license = with licenses; [ mit /* or */ asl20 ];
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ rvarago ];
+    mainProgram = "ravedude";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/rhack/default.nix b/nixpkgs/pkgs/development/tools/rust/rhack/default.nix
new file mode 100644
index 000000000000..d141c43dd914
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/rhack/default.nix
@@ -0,0 +1,22 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rhack";
+  version = "0.1.0";
+
+  src = fetchFromGitHub {
+    owner = "nakabonne";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "088ynf65szaa86pxwwasn3wwi00z5pn7i8w9gh5dyn983z4d8237";
+  };
+
+  cargoSha256 = "sha256-HmBh2qbO/HuNPfHKifq41IB5ResnGka2iaAsnwppm9s=";
+
+  meta = with lib; {
+    description = "Temporary edit external crates that your project depends on";
+    homepage = "https://github.com/nakabonne/rhack";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/roogle/default.nix b/nixpkgs/pkgs/development/tools/rust/roogle/default.nix
new file mode 100644
index 000000000000..7def38d19913
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/roogle/default.nix
@@ -0,0 +1,27 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "roogle";
+  version = "0.1.4";
+
+  src = fetchFromGitHub {
+    owner = "hkmatsumoto";
+    repo = pname;
+    rev = version;
+    sha256 = "1h0agialbvhhiijkdnr47y7babq432limdl6ag2rmjfs7yishn4r";
+  };
+
+  cargoSha256 = "sha256-CzFfFKTmBUAafk8PkkWmUkRIyO+yEhmCfN1zsLRq4Iw=";
+
+  postInstall = ''
+    mkdir -p $out/share/roogle
+    cp -r assets $out/share/roogle
+  '';
+
+  meta = with lib; {
+    description = "A Rust API search engine which allows you to search functions by names and type signatures";
+    homepage = "https://github.com/hkmatsumoto/roogle";
+    license = with licenses; [ mit /* or */ asl20 ];
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/rust-analyzer/default.nix b/nixpkgs/pkgs/development/tools/rust/rust-analyzer/default.nix
new file mode 100644
index 000000000000..a1c8dd591e10
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/rust-analyzer/default.nix
@@ -0,0 +1,71 @@
+{ lib
+, stdenv
+, callPackage
+, fetchFromGitHub
+, rustPlatform
+, CoreServices
+, cmake
+, libiconv
+, useMimalloc ? false
+, doCheck ? true
+, nix-update-script
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rust-analyzer-unwrapped";
+  version = "2024-01-29";
+  cargoSha256 = "sha256-3f+Nc2HXCQsaZ+FFSH7ML0o1yikZWhsRZmA8JtBc2TY=";
+
+  src = fetchFromGitHub {
+    owner = "rust-lang";
+    repo = "rust-analyzer";
+    rev = version;
+    sha256 = "sha256-6K5rK1b2APQfXOrC+Hm+0QcyfPVt+TV81Q6Fd/QjMlQ=";
+  };
+
+  cargoBuildFlags = [ "--bin" "rust-analyzer" "--bin" "rust-analyzer-proc-macro-srv" ];
+  cargoTestFlags = [ "--package" "rust-analyzer" "--package" "proc-macro-srv-cli" ];
+
+  # Code format check requires more dependencies but don't really matter for packaging.
+  # So just ignore it.
+  checkFlags = [ "--skip=tidy::check_code_formatting" ];
+
+  nativeBuildInputs = lib.optional useMimalloc cmake;
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    CoreServices
+    libiconv
+  ];
+
+  buildFeatures = lib.optional useMimalloc "mimalloc";
+
+  CFG_RELEASE = version;
+
+  inherit doCheck;
+  preCheck = lib.optionalString doCheck ''
+    export RUST_SRC_PATH=${rustPlatform.rustLibSrc}
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+    versionOutput="$($out/bin/rust-analyzer --version)"
+    echo "'rust-analyzer --version' returns: $versionOutput"
+    [[ "$versionOutput" == "rust-analyzer ${version}" ]]
+    runHook postInstallCheck
+  '';
+
+  passthru = {
+    updateScript = nix-update-script { };
+    # FIXME: Pass overrided `rust-analyzer` once `buildRustPackage` also implements #119942
+    tests.neovim-lsp = callPackage ./test-neovim-lsp.nix { };
+  };
+
+  meta = with lib; {
+    description = "A modular compiler frontend for the Rust language";
+    homepage = "https://rust-analyzer.github.io";
+    license = with licenses; [ mit asl20 ];
+    maintainers = with maintainers; [ oxalica ];
+    mainProgram = "rust-analyzer";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/rust-analyzer/test-neovim-lsp.nix b/nixpkgs/pkgs/development/tools/rust/rust-analyzer/test-neovim-lsp.nix
new file mode 100644
index 000000000000..963e134075ed
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/rust-analyzer/test-neovim-lsp.nix
@@ -0,0 +1,49 @@
+{ runCommand, cargo, neovim, rust-analyzer, rustc }:
+runCommand "test-neovim-rust-analyzer" {
+  nativeBuildInputs = [ cargo neovim rust-analyzer rustc ];
+
+  testRustSrc = /* rust */ ''
+    fn main() {
+      let mut var = vec![None];
+      var.push(Some("hello".to_owned()));
+    }
+  '';
+
+  nvimConfig = /* lua */ ''
+    vim.lsp.buf_attach_client(vim.api.nvim_get_current_buf(), vim.lsp.start_client({
+      cmd = { "rust-analyzer" },
+      handlers = {
+        ["$/progress"] = function(_, msg, ctx)
+          if msg.token == "rustAnalyzer/Indexing" and msg.value.kind == "end" then
+            vim.cmd("goto 23") -- let mut |var =...
+            vim.lsp.buf.hover()
+          end
+        end,
+        ["textDocument/hover"] = function(_, msg, ctx)
+          -- Keep newlines.
+          io.write(msg.contents.value)
+          vim.cmd("q")
+        end,
+      },
+      on_error = function(code)
+        print("error: " .. code)
+        vim.cmd("q")
+      end
+    }))
+  '';
+
+} ''
+  # neovim requires a writable HOME.
+  export HOME="$(pwd)"
+
+  cargo new --bin test-rust-analyzer
+  cd test-rust-analyzer
+  cat <<<"$testRustSrc" >src/main.rs
+  cat <<<"$nvimConfig" >script.lua
+
+  # `-u` doesn't work
+  result="$(nvim --headless +'lua dofile("script.lua")' src/main.rs)"
+  echo "$result"
+  [[ "$result" == *"var: Vec<Option<String>>"* ]]
+  touch $out
+''
diff --git a/nixpkgs/pkgs/development/tools/rust/rust-analyzer/wrapper.nix b/nixpkgs/pkgs/development/tools/rust/rust-analyzer/wrapper.nix
new file mode 100644
index 000000000000..6fa5207de6eb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/rust-analyzer/wrapper.nix
@@ -0,0 +1,15 @@
+{ lib, rustPlatform, runCommand, makeWrapper, rust-analyzer-unwrapped
+, pname ? "rust-analyzer"
+, version ? rust-analyzer-unwrapped.version
+  # Use name from `RUST_SRC_PATH`
+, rustSrc ? rustPlatform.rustLibSrc
+}:
+runCommand "${pname}-${version}" {
+  inherit pname version;
+  inherit (rust-analyzer-unwrapped) src meta;
+  nativeBuildInputs = [ makeWrapper ];
+} ''
+  mkdir -p $out/bin
+  makeWrapper ${rust-analyzer-unwrapped}/bin/rust-analyzer $out/bin/rust-analyzer \
+    --set-default RUST_SRC_PATH "${rustSrc}"
+''
diff --git a/nixpkgs/pkgs/development/tools/rust/rust-audit-info/default.nix b/nixpkgs/pkgs/development/tools/rust/rust-audit-info/default.nix
new file mode 100644
index 000000000000..fbfae0042d59
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/rust-audit-info/default.nix
@@ -0,0 +1,20 @@
+{ lib, rustPlatform, fetchCrate }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rust-audit-info";
+  version = "0.5.2";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-g7ElNehBAVSRRlqsxkNm20C0KOMkf310bXNs3EN+/NQ=";
+  };
+
+  cargoSha256 = "sha256-bKrdgz6dyv/PF5JXMq7uvsh7SsK/qEd2W7tm6+YYlxg=";
+
+  meta = with lib; {
+    description = "A command-line tool to extract the dependency trees embedded in binaries by cargo-auditable";
+    homepage = "https://github.com/rust-secure-code/cargo-auditable/tree/master/rust-audit-info";
+    license = with licenses; [ mit /* or */ asl20 ];
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/rust-script/default.nix b/nixpkgs/pkgs/development/tools/rust/rust-script/default.nix
new file mode 100644
index 000000000000..417b173935f5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/rust-script/default.nix
@@ -0,0 +1,26 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rust-script";
+  version = "0.34.0";
+
+  src = fetchFromGitHub {
+    owner = "fornwall";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-a9VWPN/mTz159xKgN2RNflrcuutWXVdEFzbTIZJKgdY=";
+  };
+
+  cargoHash = "sha256-dawNgQtF9zVhlwIZzP+c5fHzcLJbCLOZx3kgIRAktTk=";
+
+  # tests require network access
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Run Rust files and expressions as scripts without any setup or compilation step";
+    homepage = "https://rust-script.org";
+    changelog = "https://github.com/fornwall/rust-script/releases/tag/${version}";
+    license = with licenses; [ mit /* or */ asl20 ];
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/rustfilt/default.nix b/nixpkgs/pkgs/development/tools/rust/rustfilt/default.nix
new file mode 100644
index 000000000000..353cdcdbfdc6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/rustfilt/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rustfilt";
+  version = "0.2.1";
+
+  src = fetchFromGitHub {
+    owner = "luser";
+    repo = pname;
+    rev = version;
+    hash = "sha256-zb1tkeWmeMq7aM8hWssS/UpvGzGbfsaVYCOKBnAKwiQ=";
+  };
+
+  cargoSha256 = "sha256-rs2EWcvTxLVeJ0t+jLM75s+K72t+hqKzwy3oAdCZ8BE=";
+
+  meta = with lib; {
+    description = "Demangle Rust symbol names using rustc-demangle";
+    homepage = "https://github.com/luser/rustfilt";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ wykurz ];
+    mainProgram = "rustfilt";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/rustup-toolchain-install-master/0001-dynamically-patchelf-binaries.patch b/nixpkgs/pkgs/development/tools/rust/rustup-toolchain-install-master/0001-dynamically-patchelf-binaries.patch
new file mode 100644
index 000000000000..1754ce11c4d3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/rustup-toolchain-install-master/0001-dynamically-patchelf-binaries.patch
@@ -0,0 +1,61 @@
+diff --git a/src/main.rs b/src/main.rs
+index 3cb6896..7f070e0 100644
+--- a/src/main.rs
++++ b/src/main.rs
+@@ -275,7 +275,9 @@ fn install_single_toolchain(
+
+     // install
+     if maybe_dry_client.is_some() {
+-        rename(&toolchain.dest, toolchain_path)?;
++        rename(&toolchain.dest, toolchain_path.clone())?;
++        nix_patchelf(toolchain_path)
++            .expect("failed to patch toolchain for NixOS");
+         eprintln!(
+             "toolchain `{}` is successfully installed!",
+             toolchain.dest.display()
+@@ -291,6 +293,45 @@ fn install_single_toolchain(
+     Ok(())
+ }
+
++fn nix_patchelf(mut toolchain_path: PathBuf) -> Result<(), Error> {
++    toolchain_path.push("bin");
++
++    for entry in toolchain_path.read_dir()? {
++        let entry = entry?;
++        if !entry.file_type()?.is_file() {
++            continue;
++        }
++
++        eprintln!("info: you seem to be running NixOS. Attempting to patch {}",
++                  entry.path().to_str().unwrap());
++        let _ = ::std::process::Command::new("@patchelf@/bin/patchelf")
++            .arg("--set-interpreter")
++            .arg("@dynamicLinker@")
++            .arg(entry.path())
++            .output();
++    }
++
++    toolchain_path.pop();
++    toolchain_path.push("lib");
++
++    for entry in toolchain_path.read_dir()? {
++        let entry = entry?;
++        if !entry.file_type()?.is_file() {
++            continue;
++        }
++
++        eprintln!("info: you seem to be running NixOS. Attempting to patch {}",
++                  entry.path().to_str().unwrap());
++        let _ = ::std::process::Command::new("@patchelf@/bin/patchelf")
++            .arg("--set-rpath")
++            .arg("@libPath@")
++            .arg(entry.path())
++            .output();
++    }
++
++    Ok(())
++}
++
+ fn fetch_master_commit(client: &Client, github_token: Option<&str>) -> Result<String, Error> {
+     eprintln!("fetching master commit hash... ");
+     fetch_master_commit_via_git()
diff --git a/nixpkgs/pkgs/development/tools/rust/rustup-toolchain-install-master/Cargo.lock b/nixpkgs/pkgs/development/tools/rust/rustup-toolchain-install-master/Cargo.lock
new file mode 100644
index 000000000000..4c358be9de93
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/rustup-toolchain-install-master/Cargo.lock
@@ -0,0 +1,1669 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "addr2line"
+version = "0.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97"
+dependencies = [
+ "gimli",
+]
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "ansi_term"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
+dependencies = [
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "async-compression"
+version = "0.3.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "942c7cd7ae39e91bde4820d74132e9862e62c2f386c3aa90ccf55949f5bad63a"
+dependencies = [
+ "bytes 0.5.6",
+ "flate2",
+ "futures-core",
+ "memchr",
+ "pin-project-lite 0.2.9",
+]
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi 0.1.19",
+ "libc",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "backtrace"
+version = "0.3.67"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "233d376d6d185f2a3093e58f283f60f880315b6c60075b01f36b3b85154564ca"
+dependencies = [
+ "addr2line",
+ "cc",
+ "cfg-if 1.0.0",
+ "libc",
+ "miniz_oxide 0.6.2",
+ "object",
+ "rustc-demangle",
+]
+
+[[package]]
+name = "base64"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bumpalo"
+version = "3.12.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c6ed94e98ecff0c12dd1b04c15ec0d7d9458ca8fe806cea6f12954efe74c63b"
+
+[[package]]
+name = "bytes"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e4cec68f03f32e44924783795810fa50a7035d8c8ebe78580ad7e6c703fba38"
+
+[[package]]
+name = "bytes"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be"
+
+[[package]]
+name = "cc"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
+
+[[package]]
+name = "cfg-if"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "clap"
+version = "2.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c"
+dependencies = [
+ "ansi_term",
+ "atty",
+ "bitflags",
+ "strsim",
+ "textwrap",
+ "unicode-width",
+ "vec_map",
+]
+
+[[package]]
+name = "core-foundation"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
+
+[[package]]
+name = "crc32fast"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200"
+dependencies = [
+ "cfg-if 1.0.0",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "encoding_rs"
+version = "0.8.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "errno"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "errno-dragonfly"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "failure"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d32e9bd16cc02eae7db7ef620b392808b89f6a5e16bb3497d159c6b92a0f4f86"
+dependencies = [
+ "backtrace",
+ "failure_derive",
+]
+
+[[package]]
+name = "failure_derive"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa4da3c766cd7a0db8242e326e9e4e081edd567072893ed320008189715366a4"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "synstructure",
+]
+
+[[package]]
+name = "fastrand"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "filetime"
+version = "0.2.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5cbc844cecaee9d4443931972e1289c8ff485cb4cc2767cb03ca139ed6885153"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "redox_syscall 0.2.16",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "flate2"
+version = "1.0.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide 0.7.1",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "foreign-types"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+dependencies = [
+ "foreign-types-shared",
+]
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "fuchsia-zircon"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82"
+dependencies = [
+ "bitflags",
+ "fuchsia-zircon-sys",
+]
+
+[[package]]
+name = "fuchsia-zircon-sys"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7"
+
+[[package]]
+name = "futures-channel"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2"
+dependencies = [
+ "futures-core",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c"
+
+[[package]]
+name = "futures-io"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964"
+
+[[package]]
+name = "futures-sink"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e"
+
+[[package]]
+name = "futures-task"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65"
+
+[[package]]
+name = "futures-util"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533"
+dependencies = [
+ "futures-core",
+ "futures-io",
+ "futures-task",
+ "memchr",
+ "pin-project-lite 0.2.9",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "gimli"
+version = "0.27.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad0a93d233ebf96623465aad4046a8d3aa4da22d4f4beba5388838c8a434bbb4"
+
+[[package]]
+name = "h2"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e4728fd124914ad25e99e3d15a9361a879f6620f63cb56bbb08f95abb97a535"
+dependencies = [
+ "bytes 0.5.6",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "http",
+ "indexmap",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tracing",
+ "tracing-futures",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+
+[[package]]
+name = "heck"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
+dependencies = [
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286"
+
+[[package]]
+name = "home"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb"
+dependencies = [
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "http"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482"
+dependencies = [
+ "bytes 1.4.0",
+ "fnv",
+ "itoa 1.0.6",
+]
+
+[[package]]
+name = "http-body"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "13d5ff830006f7646652e057693569bfe0d51760c0085a071769d142a205111b"
+dependencies = [
+ "bytes 0.5.6",
+ "http",
+]
+
+[[package]]
+name = "httparse"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
+
+[[package]]
+name = "httpdate"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "494b4d60369511e7dea41cf646832512a94e542f68bb9c49e54518e0f468eb47"
+
+[[package]]
+name = "hyper"
+version = "0.13.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a6f157065790a3ed2f88679250419b5cdd96e714a0d65f7797fd337186e96bb"
+dependencies = [
+ "bytes 0.5.6",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "httparse",
+ "httpdate",
+ "itoa 0.4.8",
+ "pin-project",
+ "socket2",
+ "tokio",
+ "tower-service",
+ "tracing",
+ "want",
+]
+
+[[package]]
+name = "hyper-tls"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d979acc56dcb5b8dddba3917601745e877576475aa046df3226eabdecef78eed"
+dependencies = [
+ "bytes 0.5.6",
+ "hyper",
+ "native-tls",
+ "tokio",
+ "tokio-tls",
+]
+
+[[package]]
+name = "idna"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
+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 1.0.0",
+]
+
+[[package]]
+name = "io-lifetimes"
+version = "1.0.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220"
+dependencies = [
+ "hermit-abi 0.3.1",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "iovec"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "ipnet"
+version = "2.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12b6ee2129af8d4fb011108c73d99a1b83a85977f23b82460c0ae2e25bb4b57f"
+
+[[package]]
+name = "itoa"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4"
+
+[[package]]
+name = "itoa"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6"
+
+[[package]]
+name = "js-sys"
+version = "0.3.62"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68c16e1bfd491478ab155fd8b4896b86f9ede344949b641e61501e07c2b8b4d5"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "kernel32-sys"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
+dependencies = [
+ "winapi 0.2.8",
+ "winapi-build",
+]
+
+[[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.144"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b00cc1c228a6782d0f076e7b232802e0c5689d41bb5df366f2a6b6621cfdfe1"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ece97ea872ece730aed82664c424eb4c8291e1ff2480247ccf7409044bc6479f"
+
+[[package]]
+name = "log"
+version = "0.4.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "lzma-sys"
+version = "0.1.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fda04ab3764e6cde78b9974eec4f779acaba7c4e84b36eca3cf77c581b85d27"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "mime"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
+
+[[package]]
+name = "mime_guess"
+version = "2.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef"
+dependencies = [
+ "mime",
+ "unicase",
+]
+
+[[package]]
+name = "miniz_oxide"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "miniz_oxide"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "mio"
+version = "0.6.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4afd66f5b91bf2a3bc13fad0e21caedac168ca4c707504e75585648ae80e4cc4"
+dependencies = [
+ "cfg-if 0.1.10",
+ "fuchsia-zircon",
+ "fuchsia-zircon-sys",
+ "iovec",
+ "kernel32-sys",
+ "libc",
+ "log",
+ "miow",
+ "net2",
+ "slab",
+ "winapi 0.2.8",
+]
+
+[[package]]
+name = "miow"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ebd808424166322d4a38da87083bfddd3ac4c131334ed55856112eb06d46944d"
+dependencies = [
+ "kernel32-sys",
+ "net2",
+ "winapi 0.2.8",
+ "ws2_32-sys",
+]
+
+[[package]]
+name = "native-tls"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e"
+dependencies = [
+ "lazy_static",
+ "libc",
+ "log",
+ "openssl",
+ "openssl-probe",
+ "openssl-sys",
+ "schannel",
+ "security-framework",
+ "security-framework-sys",
+ "tempfile",
+]
+
+[[package]]
+name = "net2"
+version = "0.2.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "74d0df99cfcd2530b2e694f6e17e7f37b8e26bb23983ac530c0c97408837c631"
+dependencies = [
+ "cfg-if 0.1.10",
+ "libc",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b"
+dependencies = [
+ "hermit-abi 0.2.6",
+ "libc",
+]
+
+[[package]]
+name = "object"
+version = "0.30.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea86265d3d3dcb6a27fc51bd29a4bf387fae9d2986b823079d4986af253eb439"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.17.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3"
+
+[[package]]
+name = "openssl"
+version = "0.10.52"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "01b8574602df80f7b85fdfc5392fa884a4e3b3f4f35402c070ab34c3d3f78d56"
+dependencies = [
+ "bitflags",
+ "cfg-if 1.0.0",
+ "foreign-types",
+ "libc",
+ "once_cell",
+ "openssl-macros",
+ "openssl-sys",
+]
+
+[[package]]
+name = "openssl-macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "openssl-probe"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
+
+[[package]]
+name = "openssl-sys"
+version = "0.9.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e17f59264b2809d77ae94f0e1ebabc434773f370d6ca667bd223ea10e06cc7e"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "pbr"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed5827dfa0d69b6c92493d6c38e633bbaa5937c153d0d7c28bf12313f8c6d514"
+dependencies = [
+ "crossbeam-channel",
+ "libc",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e"
+
+[[package]]
+name = "pin-project"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc"
+dependencies = [
+ "pin-project-internal",
+]
+
+[[package]]
+name = "pin-project-internal"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "257b64915a082f7811703966789728173279bdebb956b143dbcd23f6f970a777"
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
+
+[[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 1.0.109",
+ "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.56"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f4f29d145265ec1c483c7c654450edde0bfe043d3938d6972630663356d9500"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "remove_dir_all"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7"
+dependencies = [
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "reqwest"
+version = "0.10.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0718f81a8e14c4dbb3b34cf23dc6aaf9ab8a0dfec160c534b3dbca1aaa21f47c"
+dependencies = [
+ "async-compression",
+ "base64",
+ "bytes 0.5.6",
+ "encoding_rs",
+ "futures-core",
+ "futures-util",
+ "http",
+ "http-body",
+ "hyper",
+ "hyper-tls",
+ "ipnet",
+ "js-sys",
+ "lazy_static",
+ "log",
+ "mime",
+ "mime_guess",
+ "native-tls",
+ "percent-encoding",
+ "pin-project-lite 0.2.9",
+ "serde",
+ "serde_urlencoded",
+ "tokio",
+ "tokio-tls",
+ "url",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+ "winreg",
+]
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
+
+[[package]]
+name = "rustix"
+version = "0.37.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acf8729d8542766f1b2cf77eb034d52f40d375bb8b615d0b147089946e16613d"
+dependencies = [
+ "bitflags",
+ "errno",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "rustup-toolchain-install-master"
+version = "1.7.3"
+dependencies = [
+ "ansi_term",
+ "failure",
+ "home",
+ "pbr",
+ "remove_dir_all",
+ "reqwest",
+ "structopt",
+ "tar",
+ "tee",
+ "tempfile",
+ "xz2",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041"
+
+[[package]]
+name = "schannel"
+version = "0.1.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3"
+dependencies = [
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "security-framework"
+version = "2.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca2855b3715770894e67cbfa3df957790aa0c9edc3bf06efa1a84d77fa0839d1"
+dependencies = [
+ "bitflags",
+ "core-foundation",
+ "core-foundation-sys",
+ "libc",
+ "security-framework-sys",
+]
+
+[[package]]
+name = "security-framework-sys"
+version = "2.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f51d0c0d83bec45f16480d0ce0058397a69e48fcdc52d1dc8855fb68acbd31a7"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.163"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2113ab51b87a539ae008b5c6c02dc020ffa39afd2d83cffcb3f4eb2722cebec2"
+
+[[package]]
+name = "serde_json"
+version = "1.0.96"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1"
+dependencies = [
+ "itoa 1.0.6",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_urlencoded"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
+dependencies = [
+ "form_urlencoded",
+ "itoa 1.0.6",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "slab"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "socket2"
+version = "0.3.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "122e570113d28d773067fab24266b66753f6ea915758651696b6e35e49f88d6e"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "strsim"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
+
+[[package]]
+name = "structopt"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c6b5c64445ba8094a6ab0c3cd2ad323e07171012d9c98b0b15651daf1787a10"
+dependencies = [
+ "clap",
+ "lazy_static",
+ "structopt-derive",
+]
+
+[[package]]
+name = "structopt-derive"
+version = "0.4.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dcb5ae327f9cc13b68763b5749770cb9e048a99bd9dfdfa58d0cf05d5f64afe0"
+dependencies = [
+ "heck",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a34fcf3e8b60f57e6a14301a2e916d323af98b0ea63c599441eec8558660c822"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "synstructure"
+version = "0.12.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "unicode-xid",
+]
+
+[[package]]
+name = "tar"
+version = "0.4.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b55807c0344e1e6c04d7c965f5289c39a8d94ae23ed5c0b57aabac549f871c6"
+dependencies = [
+ "filetime",
+ "libc",
+ "xattr",
+]
+
+[[package]]
+name = "tee"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37c12559dba7383625faaff75be24becf35bfc885044375bcab931111799a3da"
+
+[[package]]
+name = "tempfile"
+version = "3.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998"
+dependencies = [
+ "cfg-if 1.0.0",
+ "fastrand",
+ "redox_syscall 0.3.5",
+ "rustix",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
+dependencies = [
+ "unicode-width",
+]
+
+[[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.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+[[package]]
+name = "tokio"
+version = "0.2.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6703a273949a90131b290be1fe7b039d0fc884aa1935860dfcbe056f28cd8092"
+dependencies = [
+ "bytes 0.5.6",
+ "fnv",
+ "futures-core",
+ "iovec",
+ "lazy_static",
+ "memchr",
+ "mio",
+ "num_cpus",
+ "pin-project-lite 0.1.12",
+ "slab",
+]
+
+[[package]]
+name = "tokio-tls"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a70f4fcd7b3b24fb194f837560168208f669ca8cb70d0c4b862944452396343"
+dependencies = [
+ "native-tls",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be8242891f2b6cbef26a2d7e8605133c2c554cd35b3e4948ea892d6d68436499"
+dependencies = [
+ "bytes 0.5.6",
+ "futures-core",
+ "futures-sink",
+ "log",
+ "pin-project-lite 0.1.12",
+ "tokio",
+]
+
+[[package]]
+name = "tower-service"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
+
+[[package]]
+name = "tracing"
+version = "0.1.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
+dependencies = [
+ "cfg-if 1.0.0",
+ "log",
+ "pin-project-lite 0.2.9",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "tracing-futures"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2"
+dependencies = [
+ "pin-project",
+ "tracing",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
+
+[[package]]
+name = "unicase"
+version = "2.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6"
+dependencies = [
+ "version_check",
+]
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c"
+
+[[package]]
+name = "url"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "percent-encoding",
+]
+
+[[package]]
+name = "vcpkg"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+
+[[package]]
+name = "vec_map"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "want"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0"
+dependencies = [
+ "log",
+ "try-lock",
+]
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.85"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b6cb788c4e39112fbe1822277ef6fb3c55cd86b95cb3d3c4c1c9597e4ac74b4"
+dependencies = [
+ "cfg-if 1.0.0",
+ "serde",
+ "serde_json",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.85"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35e522ed4105a9d626d885b35d62501b30d9666283a5c8be12c14a8bdafe7822"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.15",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.35"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "083abe15c5d88556b77bdf7aef403625be9e327ad37c62c4e4129af740168163"
+dependencies = [
+ "cfg-if 1.0.0",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.85"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "358a79a0cb89d21db8120cbfb91392335913e4890665b1a7981d9e956903b434"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.85"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4783ce29f09b9d93134d41297aded3a712b7b979e9c6f28c32cb88c973a94869"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.15",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.85"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a901d592cafaa4d711bc324edfaff879ac700b19c3dfd60058d2b445be2691eb"
+
+[[package]]
+name = "web-sys"
+version = "0.3.62"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16b5f940c7edfdc6d12126d98c9ef4d1b3d470011c47c76a6581df47ad9ba721"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "winapi"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
+
+[[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-build"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
+
+[[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-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows-sys"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
+dependencies = [
+ "windows-targets 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets 0.48.0",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5"
+dependencies = [
+ "windows_aarch64_gnullvm 0.48.0",
+ "windows_aarch64_msvc 0.48.0",
+ "windows_i686_gnu 0.48.0",
+ "windows_i686_msvc 0.48.0",
+ "windows_x86_64_gnu 0.48.0",
+ "windows_x86_64_gnullvm 0.48.0",
+ "windows_x86_64_msvc 0.48.0",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
+
+[[package]]
+name = "winreg"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0120db82e8a1e0b9fb3345a539c478767c0048d842860994d96113d5b667bd69"
+dependencies = [
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "ws2_32-sys"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e"
+dependencies = [
+ "winapi 0.2.8",
+ "winapi-build",
+]
+
+[[package]]
+name = "xattr"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d1526bbe5aaeb5eb06885f4d987bcdfa5e23187055de9b83fe00156a821fabc"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "xz2"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "388c44dc09d76f1536602ead6d325eb532f5c122f17782bd57fb47baeeb767e2"
+dependencies = [
+ "lzma-sys",
+]
diff --git a/nixpkgs/pkgs/development/tools/rust/rustup-toolchain-install-master/default.nix b/nixpkgs/pkgs/development/tools/rust/rustup-toolchain-install-master/default.nix
new file mode 100644
index 000000000000..8289e56e81d4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/rustup-toolchain-install-master/default.nix
@@ -0,0 +1,65 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, runCommand
+, stdenv
+, patchelf
+, zlib
+, pkg-config
+, openssl
+, xz
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rustup-toolchain-install-master";
+  version = "1.7.3";
+
+  src = fetchFromGitHub {
+    owner = "kennytm";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-J25ER/g8Kylw/oTIEl4Gl8i1xmhR+4JM5M5EHpl1ras=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+  };
+
+  patches =
+    let
+      patchelfPatch = runCommand "0001-dynamically-patchelf-binaries.patch" {
+        CC = stdenv.cc;
+        patchelf = patchelf;
+        libPath = "$ORIGIN/../lib:${lib.makeLibraryPath [ zlib ]}";
+      }
+      ''
+        export dynamicLinker=$(cat $CC/nix-support/dynamic-linker)
+        substitute ${./0001-dynamically-patchelf-binaries.patch} $out \
+          --subst-var patchelf \
+          --subst-var dynamicLinker \
+          --subst-var libPath
+      '';
+    in
+    lib.optionals stdenv.isLinux [ patchelfPatch ];
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [
+    openssl
+    xz
+  ] ++ lib.optionals stdenv.isDarwin [
+    Security
+  ];
+
+  # update Cargo.lock to work with openssl 3
+  postPatch = ''
+    ln -sf ${./Cargo.lock} Cargo.lock
+  '';
+
+  meta = with lib; {
+    description = "Install a rustc master toolchain usable from rustup";
+    homepage = "https://github.com/kennytm/rustup-toolchain-install-master";
+    license = licenses.mit;
+    maintainers = with maintainers; [ davidtwco ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/rustup/0001-dynamically-patchelf-binaries.patch b/nixpkgs/pkgs/development/tools/rust/rustup/0001-dynamically-patchelf-binaries.patch
new file mode 100644
index 000000000000..2b191031da60
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/rustup/0001-dynamically-patchelf-binaries.patch
@@ -0,0 +1,42 @@
+diff --git a/src/dist/component/package.rs b/src/dist/component/package.rs
+index 73a533b5..408ab815 100644
+--- a/src/dist/component/package.rs
++++ b/src/dist/component/package.rs
+@@ -113,6 +113,7 @@ fn install<'a>(
+                     } else {
+                         builder.move_file(path.clone(), &src_path)?
+                     }
++                    nix_patchelf_if_needed(&target.prefix().path().join(path.clone()), &src_path)
+                 }
+                 "dir" => {
+                     if self.copy {
+@@ -135,6 +136,29 @@ fn components(&self) -> Vec<String> {
+     }
+ }
+ 
++fn nix_patchelf_if_needed(dest_path: &Path, src_path: &Path) {
++    let (is_bin, is_lib) = if let Some(p) = src_path.parent() {
++        (p.ends_with("bin") || p.ends_with("libexec"), p.ends_with("lib"))
++    } else {
++        (false, false)
++    };
++
++    if is_bin {
++        let _ = ::std::process::Command::new("@patchelf@/bin/patchelf")
++            .arg("--set-interpreter")
++            .arg("@dynamicLinker@")
++            .arg(dest_path)
++            .output();
++    }
++    else if is_lib {
++        let _ = ::std::process::Command::new("@patchelf@/bin/patchelf")
++            .arg("--set-rpath")
++            .arg("@libPath@")
++            .arg(dest_path)
++            .output();
++    }
++}
++
+ #[derive(Debug)]
+ pub(crate) struct TarPackage<'a>(DirectoryPackage, temp::Dir<'a>);
+ 
diff --git a/nixpkgs/pkgs/development/tools/rust/rustup/Cargo.lock b/nixpkgs/pkgs/development/tools/rust/rustup/Cargo.lock
new file mode 100644
index 000000000000..1226dfb3bc18
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/rustup/Cargo.lock
@@ -0,0 +1,2503 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "aho-corasick"
+version = "0.7.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "aligned"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80a21b9440a626c7fc8573a9e3d3a06b75c7c97754c2949bc7857b90353ca655"
+dependencies = [
+ "as-slice",
+]
+
+[[package]]
+name = "android_system_properties"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800"
+
+[[package]]
+name = "as-slice"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "516b6b4f0e40d50dcda9365d53964ec74560ad4284da2e7fc97122cd83174516"
+dependencies = [
+ "stable_deref_trait",
+]
+
+[[package]]
+name = "async-compression"
+version = "0.3.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "942c7cd7ae39e91bde4820d74132e9862e62c2f386c3aa90ccf55949f5bad63a"
+dependencies = [
+ "flate2",
+ "futures-core",
+ "memchr",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi 0.1.19",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "base64"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a"
+
+[[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.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "bstr"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ffdb39cb703212f3c11973452c2861b972f757b021158f3516ba10f2fa8b2c1"
+dependencies = [
+ "memchr",
+ "once_cell",
+ "regex-automata",
+ "serde",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535"
+
+[[package]]
+name = "byteorder"
+version = "1.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
+
+[[package]]
+name = "bytes"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be"
+
+[[package]]
+name = "cc"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
+dependencies = [
+ "jobserver",
+]
+
+[[package]]
+name = "cfg-if"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
+
+[[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.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16b0a3d9ed01224b22057780a37bb8c5dbfe1be8ba48678e7bf57ec4b385411f"
+dependencies = [
+ "iana-time-zone",
+ "js-sys",
+ "num-integer",
+ "num-traits",
+ "time 0.1.45",
+ "wasm-bindgen",
+ "winapi",
+]
+
+[[package]]
+name = "clap"
+version = "3.2.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "71655c45cb9845d3270c9d6df84ebe72b4dad3c2ba3f7023ad47c144e4e473a5"
+dependencies = [
+ "atty",
+ "bitflags",
+ "clap_lex",
+ "indexmap",
+ "strsim",
+ "termcolor",
+ "terminal_size",
+ "textwrap",
+]
+
+[[package]]
+name = "clap_complete"
+version = "3.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f7a2e0a962c45ce25afce14220bc24f9dade0a1787f185cecf96bfba7847cd8"
+dependencies = [
+ "clap",
+]
+
+[[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 = "codespan-reporting"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e"
+dependencies = [
+ "termcolor",
+ "unicode-width",
+]
+
+[[package]]
+name = "concolor"
+version = "0.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7b3e3c41e9488eeda196b6806dbf487742107d61b2e16485bcca6c25ed5755b"
+dependencies = [
+ "bitflags",
+ "concolor-query",
+ "is-terminal",
+]
+
+[[package]]
+name = "concolor-query"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "82a90734b3d5dcf656e7624cca6bce9c3a90ee11f900e80141a7427ccfb3d317"
+
+[[package]]
+name = "content_inspector"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7bda66e858c683005a53a9a60c69a4aca7eeaa45d124526e389f7aec8e62f38"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "core-foundation"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc"
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crc32fast"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521"
+dependencies = [
+ "cfg-if 1.0.0",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "715e8152b692bba2d374b53d4875445368fdf21a94751410af607a5ac677d1fc"
+dependencies = [
+ "cfg-if 1.0.0",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "01a9af1f4c2ef74bb8aa1f7e19706bc72d03598c8a570bb5de72243c7a9d9d5a"
+dependencies = [
+ "autocfg",
+ "cfg-if 1.0.0",
+ "crossbeam-utils",
+ "memoffset",
+ "scopeguard",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fb766fa798726286dbbb842f174001dab8abc7b627a1dd86e0b7222a95d929f"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "crypto-common"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+dependencies = [
+ "generic-array",
+ "typenum",
+]
+
+[[package]]
+name = "curl"
+version = "0.4.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "509bd11746c7ac09ebd19f0b17782eae80aadee26237658a6b4808afb5c11a22"
+dependencies = [
+ "curl-sys",
+ "libc",
+ "openssl-probe",
+ "openssl-sys",
+ "schannel",
+ "socket2",
+ "winapi",
+]
+
+[[package]]
+name = "curl-sys"
+version = "0.4.60+curl-7.88.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "717abe2cb465a5da6ce06617388a3980c9a2844196734bec8ccb8e575250f13f"
+dependencies = [
+ "cc",
+ "libc",
+ "libz-sys",
+ "openssl-sys",
+ "pkg-config",
+ "vcpkg",
+ "winapi",
+]
+
+[[package]]
+name = "cvt"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34ac344c7efccb80cd25bc61b2170aec26f2f693fd40e765a539a1243db48c71"
+dependencies = [
+ "cfg-if 0.1.10",
+]
+
+[[package]]
+name = "cxx"
+version = "1.0.91"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "86d3488e7665a7a483b57e25bdd90d0aeb2bc7608c8d0346acf2ad3f1caf1d62"
+dependencies = [
+ "cc",
+ "cxxbridge-flags",
+ "cxxbridge-macro",
+ "link-cplusplus",
+]
+
+[[package]]
+name = "cxx-build"
+version = "1.0.91"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "48fcaf066a053a41a81dfb14d57d99738b767febb8b735c3016e469fac5da690"
+dependencies = [
+ "cc",
+ "codespan-reporting",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "scratch",
+ "syn",
+]
+
+[[package]]
+name = "cxxbridge-flags"
+version = "1.0.91"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2ef98b8b717a829ca5603af80e1f9e2e48013ab227b68ef37872ef84ee479bf"
+
+[[package]]
+name = "cxxbridge-macro"
+version = "1.0.91"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "086c685979a698443656e5cf7856c95c642295a38599f12fb1ff76fb28d19892"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "digest"
+version = "0.10.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f"
+dependencies = [
+ "block-buffer",
+ "crypto-common",
+]
+
+[[package]]
+name = "download"
+version = "1.26.0"
+dependencies = [
+ "anyhow",
+ "curl",
+ "env_proxy",
+ "hyper",
+ "lazy_static",
+ "reqwest",
+ "tempfile",
+ "thiserror",
+ "tokio",
+ "url",
+]
+
+[[package]]
+name = "dunce"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0bd4b30a6560bbd9b4620f4de34c3f14f60848e58a9b7216801afcb4c7b31c3c"
+
+[[package]]
+name = "effective-limits"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37195f01a7464b2bc99ba33c5b2b61929bb294632bce96987f88e2ade8e29a07"
+dependencies = [
+ "cfg-if 0.1.10",
+ "libc",
+ "sys-info",
+ "thiserror",
+ "winapi",
+]
+
+[[package]]
+name = "either"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91"
+
+[[package]]
+name = "encoding_rs"
+version = "0.8.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "enum-map"
+version = "2.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50c25992259941eb7e57b936157961b217a4fc8597829ddef0596d6c3cd86e1a"
+dependencies = [
+ "enum-map-derive",
+]
+
+[[package]]
+name = "enum-map-derive"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a4da76b3b6116d758c7ba93f7ec6a35d2e2cf24feda76c6e38a375f4d5c59f2"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "env_proxy"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a5019be18538406a43b5419a5501461f0c8b49ea7dfda0cfc32f4e51fc44be1"
+dependencies = [
+ "log",
+ "url",
+]
+
+[[package]]
+name = "errno"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "errno-dragonfly"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "fastrand"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "filetime"
+version = "0.2.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a3de6e8d11b22ff9edc6d916f890800597d60f8b2da1caf2955c274638d6412"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "redox_syscall",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "flate2"
+version = "1.0.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "foreign-types"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+dependencies = [
+ "foreign-types-shared",
+]
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "fs_at"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3dfc546714a30e1e1f2eb5e1d233a6c1254c4a3d25ac35c09743e824a39d35e"
+dependencies = [
+ "aligned",
+ "cfg-if 1.0.0",
+ "cvt",
+ "libc",
+ "nix",
+ "smart-default",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e5317663a9089767a1ec00a487df42e0ca174b61b4483213ac24448e4664df5"
+dependencies = [
+ "futures-core",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec90ff4d0fe1f57d600049061dc6bb68ed03c7d2fbd697274c41805dcb3f8608"
+
+[[package]]
+name = "futures-io"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfb8371b6fb2aeb2d280374607aeabfc99d95c72edfe51692e42d3d7f0d08531"
+
+[[package]]
+name = "futures-sink"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f310820bb3e8cfd46c80db4d7fb8353e15dfff853a127158425f31e0be6c8364"
+
+[[package]]
+name = "futures-task"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dcf79a1bf610b10f42aea489289c5a2c478a786509693b80cd39c44ccd936366"
+
+[[package]]
+name = "futures-util"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c1d6de3acfef38d2be4b1f543f553131788603495be83da675e180c8d6b7bd1"
+dependencies = [
+ "futures-core",
+ "futures-io",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+]
+
+[[package]]
+name = "git-testament"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "986bf57c808270f3a0a0652c3bfce0f5d667aa5f5b465616dc697c7f390834b1"
+dependencies = [
+ "git-testament-derive",
+ "no-std-compat",
+]
+
+[[package]]
+name = "git-testament-derive"
+version = "0.1.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4a782db5866c7ab75f3552dda4cbf34e3e257cc64c963c6ed5af1e12818e8ae6"
+dependencies = [
+ "log",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "time 0.3.20",
+]
+
+[[package]]
+name = "glob"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
+
+[[package]]
+name = "h2"
+version = "0.3.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5be7b54589b581f624f566bf5d8eb2bab1db736c51528720b6bd36b96b55924d"
+dependencies = [
+ "bytes",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "http",
+ "indexmap",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tracing",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286"
+
+[[package]]
+name = "home"
+version = "0.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "747309b4b440c06d57b0b25f2aee03ee9b5e5397d288c60e21fc709bb98a7408"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "http"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482"
+dependencies = [
+ "bytes",
+ "fnv",
+ "itoa",
+]
+
+[[package]]
+name = "http-body"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
+dependencies = [
+ "bytes",
+ "http",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "httparse"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
+
+[[package]]
+name = "httpdate"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421"
+
+[[package]]
+name = "humantime"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
+
+[[package]]
+name = "humantime-serde"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57a3db5ea5923d99402c94e9feb261dc5ee9b4efa158b0315f788cf549cc200c"
+dependencies = [
+ "humantime",
+ "serde",
+]
+
+[[package]]
+name = "hyper"
+version = "0.14.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e011372fa0b68db8350aa7a248930ecc7839bf46d8485577d69f117a75f164c"
+dependencies = [
+ "bytes",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "httparse",
+ "httpdate",
+ "itoa",
+ "pin-project-lite",
+ "socket2",
+ "tokio",
+ "tower-service",
+ "tracing",
+ "want",
+]
+
+[[package]]
+name = "hyper-rustls"
+version = "0.23.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1788965e61b367cd03a62950836d5cd41560c3577d90e40e0819373194d1661c"
+dependencies = [
+ "http",
+ "hyper",
+ "rustls",
+ "tokio",
+ "tokio-rustls",
+]
+
+[[package]]
+name = "hyper-tls"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905"
+dependencies = [
+ "bytes",
+ "hyper",
+ "native-tls",
+ "tokio",
+ "tokio-native-tls",
+]
+
+[[package]]
+name = "iana-time-zone"
+version = "0.1.53"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64c122667b287044802d6ce17ee2ddf13207ed924c712de9a66a5814d5b64765"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys",
+ "iana-time-zone-haiku",
+ "js-sys",
+ "wasm-bindgen",
+ "winapi",
+]
+
+[[package]]
+name = "iana-time-zone-haiku"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca"
+dependencies = [
+ "cxx",
+ "cxx-build",
+]
+
+[[package]]
+name = "idna"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399"
+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 1.0.0",
+]
+
+[[package]]
+name = "io-lifetimes"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1abeb7a0dd0f8181267ff8adc397075586500b81b28a73e8a0208b00fc170fb3"
+dependencies = [
+ "libc",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "ipnet"
+version = "2.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146"
+
+[[package]]
+name = "is-terminal"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21b6b32576413a8e69b90e952e4a026476040d81017b80445deda5f2d3921857"
+dependencies = [
+ "hermit-abi 0.3.1",
+ "io-lifetimes",
+ "rustix",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440"
+
+[[package]]
+name = "jobserver"
+version = "0.1.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "068b1ee6743e4d11fb9c6a1e6064b3693a1b600e7f5f5988047d98b3dc9fb90b"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "js-sys"
+version = "0.3.61"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[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.139"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79"
+
+[[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 = "link-cplusplus"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4"
+
+[[package]]
+name = "log"
+version = "0.4.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "lzma-sys"
+version = "0.1.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fda04ab3764e6cde78b9974eec4f779acaba7c4e84b36eca3cf77c581b85d27"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "memoffset"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "mime"
+version = "0.3.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "mio"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9"
+dependencies = [
+ "libc",
+ "log",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "native-tls"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e"
+dependencies = [
+ "lazy_static",
+ "libc",
+ "log",
+ "openssl",
+ "openssl-probe",
+ "openssl-sys",
+ "schannel",
+ "security-framework",
+ "security-framework-sys",
+ "tempfile",
+]
+
+[[package]]
+name = "nix"
+version = "0.26.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfdda3d196821d6af13126e40375cdf7da646a96114af134d5f417a9a1dc8e1a"
+dependencies = [
+ "bitflags",
+ "cfg-if 1.0.0",
+ "libc",
+ "static_assertions",
+]
+
+[[package]]
+name = "no-std-compat"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b93853da6d84c2e3c7d730d6473e8817692dd89be387eb01b94d7f108ecb5b8c"
+
+[[package]]
+name = "normalize-line-endings"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be"
+
+[[package]]
+name = "normpath"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "972dec05f98e7c787ede35d7a9ea4735eb7788c299287352757b3def6cc1f7b5"
+dependencies = [
+ "windows-sys 0.45.0",
+]
+
+[[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-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.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b"
+dependencies = [
+ "hermit-abi 0.2.6",
+ "libc",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.17.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3"
+
+[[package]]
+name = "opener"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "293c15678e37254c15bd2f092314abb4e51d7fdde05c2021279c12631b54f005"
+dependencies = [
+ "bstr",
+ "winapi",
+]
+
+[[package]]
+name = "openssl"
+version = "0.10.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b102428fd03bc5edf97f62620f7298614c45cedf287c271e7ed450bbaf83f2e1"
+dependencies = [
+ "bitflags",
+ "cfg-if 1.0.0",
+ "foreign-types",
+ "libc",
+ "once_cell",
+ "openssl-macros",
+ "openssl-sys",
+]
+
+[[package]]
+name = "openssl-macros"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "openssl-probe"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
+
+[[package]]
+name = "openssl-src"
+version = "111.25.1+1.1.1t"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ef9a9cc6ea7d9d5e7c4a913dc4b48d0e359eddf01af1dfec96ba7064b4aba10"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "openssl-sys"
+version = "0.9.80"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23bbbf7854cd45b83958ebe919f0e8e516793727652e27fda10a8384cfc790b7"
+dependencies = [
+ "autocfg",
+ "cc",
+ "libc",
+ "openssl-src",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "os_pipe"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a53dbb20faf34b16087a931834cba2d7a73cc74af2b7ef345a4c8324e2409a12"
+dependencies = [
+ "libc",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "os_str_bytes"
+version = "6.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b7820b9daea5457c9f21c69448905d723fbd21136ccf521748f23fd49e723ee"
+
+[[package]]
+name = "percent-encoding"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e"
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.51"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d727cae5b39d21da60fa540906919ad737832fe0b1c165da3a34d6548c849d6"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "pulldown-cmark"
+version = "0.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d9cc634bc78768157b5cbfe988ffcd1dcba95cd2b2f03a88316c08c6d00ed63"
+dependencies = [
+ "bitflags",
+ "memchr",
+ "unicase",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b"
+dependencies = [
+ "proc-macro2",
+]
+
+[[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",
+]
+
+[[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",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "rayon"
+version = "1.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6db3a213adf02b3bcfd2d3846bb41cb22857d131789e01df434fb7e7bc0759b7"
+dependencies = [
+ "either",
+ "rayon-core",
+]
+
+[[package]]
+name = "rayon-core"
+version = "1.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "356a0625f1954f730c0201cdab48611198dc6ce21f4acff55089b5a78e6e835b"
+dependencies = [
+ "crossbeam-channel",
+ "crossbeam-deque",
+ "crossbeam-utils",
+ "num_cpus",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "regex"
+version = "1.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848"
+
+[[package]]
+name = "remove_dir_all"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7174320e07c29945955cedd70b865995b286847111c8308d349a1f3a9e3af555"
+dependencies = [
+ "aligned",
+ "cfg-if 1.0.0",
+ "cvt",
+ "fs_at",
+ "lazy_static",
+ "libc",
+ "normpath",
+ "rayon",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "reqwest"
+version = "0.11.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21eed90ec8570952d53b772ecf8f206aa1ec9a3d76b2521c56c42973f2d91ee9"
+dependencies = [
+ "async-compression",
+ "base64",
+ "bytes",
+ "encoding_rs",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "hyper",
+ "hyper-rustls",
+ "hyper-tls",
+ "ipnet",
+ "js-sys",
+ "log",
+ "mime",
+ "native-tls",
+ "once_cell",
+ "percent-encoding",
+ "pin-project-lite",
+ "rustls",
+ "rustls-native-certs",
+ "rustls-pemfile",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "tokio",
+ "tokio-native-tls",
+ "tokio-rustls",
+ "tokio-socks",
+ "tokio-util",
+ "tower-service",
+ "url",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+ "winreg 0.10.1",
+]
+
+[[package]]
+name = "retry"
+version = "1.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac95c60a949a63fd2822f4964939662d8f2c16c4fa0624fd954bc6e703b9a3f6"
+dependencies = [
+ "rand",
+]
+
+[[package]]
+name = "ring"
+version = "0.16.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc"
+dependencies = [
+ "cc",
+ "libc",
+ "once_cell",
+ "spin",
+ "untrusted",
+ "web-sys",
+ "winapi",
+]
+
+[[package]]
+name = "rs_tracing"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3b121670da627e1c0110e7972c9db150dd7f8704dc073cce32c3db9cb7861e0"
+dependencies = [
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "rustix"
+version = "0.36.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f43abb88211988493c1abb44a70efa56ff0ce98f233b7b276146f1f3f7ba9644"
+dependencies = [
+ "bitflags",
+ "errno",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "rustls"
+version = "0.20.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fff78fc74d175294f4e83b28343315ffcfb114b156f0185e9741cb5570f50e2f"
+dependencies = [
+ "log",
+ "ring",
+ "sct",
+ "webpki",
+]
+
+[[package]]
+name = "rustls-native-certs"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0167bac7a9f490495f3c33013e7722b53cb087ecbe082fb0c6387c96f634ea50"
+dependencies = [
+ "openssl-probe",
+ "rustls-pemfile",
+ "schannel",
+ "security-framework",
+]
+
+[[package]]
+name = "rustls-pemfile"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d194b56d58803a43635bdc398cd17e383d6f71f9182b9a192c127ca42494a59b"
+dependencies = [
+ "base64",
+]
+
+[[package]]
+name = "rustup"
+version = "1.26.0"
+dependencies = [
+ "anyhow",
+ "cc",
+ "cfg-if 1.0.0",
+ "chrono",
+ "clap",
+ "clap_complete",
+ "download",
+ "effective-limits",
+ "enum-map",
+ "flate2",
+ "git-testament",
+ "home",
+ "lazy_static",
+ "libc",
+ "num_cpus",
+ "once_cell",
+ "opener",
+ "openssl",
+ "pulldown-cmark",
+ "rand",
+ "regex",
+ "remove_dir_all",
+ "retry",
+ "rs_tracing",
+ "same-file",
+ "scopeguard",
+ "semver",
+ "serde",
+ "sha2",
+ "sharded-slab",
+ "strsim",
+ "tar",
+ "tempfile",
+ "term",
+ "thiserror",
+ "threadpool",
+ "toml",
+ "trycmd",
+ "url",
+ "wait-timeout",
+ "walkdir",
+ "winapi",
+ "winreg 0.11.0",
+ "xz2",
+ "zstd",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b4b9743ed687d4b4bcedf9ff5eaa7398495ae14e61cba0a295704edbc7decde"
+
+[[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 = "schannel"
+version = "0.1.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3"
+dependencies = [
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "scopeguard"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+
+[[package]]
+name = "scratch"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ddccb15bcce173023b3fedd9436f882a0739b8dfb45e4f6b6002bee5929f61b2"
+
+[[package]]
+name = "sct"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "security-framework"
+version = "2.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a332be01508d814fed64bf28f798a146d73792121129962fdf335bb3c49a4254"
+dependencies = [
+ "bitflags",
+ "core-foundation",
+ "core-foundation-sys",
+ "libc",
+ "security-framework-sys",
+]
+
+[[package]]
+name = "security-framework-sys"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31c9bb296072e961fcbd8853511dd39c2d8be2deb1e17c6860b1d30732b323b4"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "semver"
+version = "1.0.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "58bc9567378fc7690d6b2addae4e60ac2eeea07becb2c64b9f218b53865cba2a"
+
+[[package]]
+name = "serde"
+version = "1.0.152"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.152"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.93"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cad406b69c91885b5107daf2c29572f6c8cdb3c66826821e286c533490c0bc76"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_spanned"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0efd8caf556a6cebd3b285caf480045fcc1ac04f6bd786b09a6f11af30c4fcf4"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde_urlencoded"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
+dependencies = [
+ "form_urlencoded",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "sha2"
+version = "0.10.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0"
+dependencies = [
+ "cfg-if 1.0.0",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "sharded-slab"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31"
+dependencies = [
+ "lazy_static",
+]
+
+[[package]]
+name = "shlex"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3"
+
+[[package]]
+name = "similar"
+version = "2.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "420acb44afdae038210c99e69aae24109f32f15500aa708e81d46c9f29d55fcf"
+
+[[package]]
+name = "slab"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "smart-default"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "133659a15339456eeeb07572eb02a91c91e9815e9cbc89566944d2c8d3efdbf6"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "snapbox"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4389a6395e9925166f19d67b64874e526ec28a4b8455f3321b686c912299c3ea"
+dependencies = [
+ "concolor",
+ "content_inspector",
+ "dunce",
+ "filetime",
+ "libc",
+ "normalize-line-endings",
+ "os_pipe",
+ "similar",
+ "snapbox-macros",
+ "tempfile",
+ "wait-timeout",
+ "walkdir",
+ "windows-sys 0.45.0",
+ "yansi",
+]
+
+[[package]]
+name = "snapbox-macros"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "485e65c1203eb37244465e857d15a26d3a85a5410648ccb53b18bd44cb3a7336"
+
+[[package]]
+name = "socket2"
+version = "0.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "spin"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
+
+[[package]]
+name = "stable_deref_trait"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
+
+[[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.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "sys-info"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b3a0d0aba8bf96a0e1ddfdc352fc53b3df7f39318c71854910c3c4b024ae52c"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "tar"
+version = "0.4.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b55807c0344e1e6c04d7c965f5289c39a8d94ae23ed5c0b57aabac549f871c6"
+dependencies = [
+ "filetime",
+ "libc",
+ "xattr",
+]
+
+[[package]]
+name = "tempfile"
+version = "3.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af18f7ae1acd354b992402e9ec5864359d693cd8a79dcbef59f76891701c1e95"
+dependencies = [
+ "cfg-if 1.0.0",
+ "fastrand",
+ "redox_syscall",
+ "rustix",
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "term"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e6b677dd1e8214ea1ef4297f85dbcbed8e8cdddb561040cc998ca2551c37561"
+dependencies = [
+ "byteorder",
+ "winapi",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "terminal_size"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c9afddd2cec1c0909f06b00ef33f94ab2cc0578c4a610aa208ddfec8aa2b43a"
+dependencies = [
+ "rustix",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d"
+dependencies = [
+ "terminal_size",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a9cd18aa97d5c45c6603caea1da6628790b37f7a34b6ca89522331c5180fed0"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "threadpool"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa"
+dependencies = [
+ "num_cpus",
+]
+
+[[package]]
+name = "time"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a"
+dependencies = [
+ "libc",
+ "wasi 0.10.0+wasi-snapshot-preview1",
+ "winapi",
+]
+
+[[package]]
+name = "time"
+version = "0.3.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd0cbfecb4d19b5ea75bb31ad904eb5b9fa13f21079c3b92017ebdf4999a5890"
+dependencies = [
+ "itoa",
+ "serde",
+ "time-core",
+ "time-macros",
+]
+
+[[package]]
+name = "time-core"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd"
+
+[[package]]
+name = "time-macros"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd80a657e71da814b8e5d60d3374fc6d35045062245d80224748ae522dd76f36"
+dependencies = [
+ "time-core",
+]
+
+[[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.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+[[package]]
+name = "tokio"
+version = "1.25.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c8e00990ebabbe4c14c08aca901caed183ecd5c09562a12c824bb53d3c3fd3af"
+dependencies = [
+ "autocfg",
+ "bytes",
+ "libc",
+ "memchr",
+ "mio",
+ "num_cpus",
+ "pin-project-lite",
+ "socket2",
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "tokio-native-tls"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2"
+dependencies = [
+ "native-tls",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-rustls"
+version = "0.23.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59"
+dependencies = [
+ "rustls",
+ "tokio",
+ "webpki",
+]
+
+[[package]]
+name = "tokio-socks"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "51165dfa029d2a65969413a6cc96f354b86b464498702f174a4efa13608fd8c0"
+dependencies = [
+ "either",
+ "futures-util",
+ "thiserror",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.7.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5427d89453009325de0d8f342c9490009f76e999cb7672d77e46267448f7e6b2"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-sink",
+ "pin-project-lite",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "toml"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml_datetime"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3ab8ed2edee10b50132aed5f331333428b011c99402b5a534154ed15746f9622"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.19.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a1eb0622d28f4b9c90adc4ea4b2b46b47663fde9ac5fafcb14a1369d5508825"
+dependencies = [
+ "indexmap",
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "winnow",
+]
+
+[[package]]
+name = "tower-service"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
+
+[[package]]
+name = "tracing"
+version = "0.1.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
+dependencies = [
+ "cfg-if 1.0.0",
+ "pin-project-lite",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
+
+[[package]]
+name = "trycmd"
+version = "0.14.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2311fe1144338119b5b9b31499286c7f60eaf00ce0dcacf5a445a12eb47aed29"
+dependencies = [
+ "glob",
+ "humantime",
+ "humantime-serde",
+ "rayon",
+ "serde",
+ "shlex",
+ "snapbox",
+ "toml_edit",
+]
+
+[[package]]
+name = "typenum"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba"
+
+[[package]]
+name = "unicase"
+version = "2.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6"
+dependencies = [
+ "version_check",
+]
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d54675592c1dbefd78cbd98db9bacd89886e1ca50692a0692baefffdeb92dd58"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-width"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+
+[[package]]
+name = "untrusted"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
+
+[[package]]
+name = "url"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "percent-encoding",
+]
+
+[[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 = "wait-timeout"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6"
+dependencies = [
+ "libc",
+]
+
+[[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 = "want"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0"
+dependencies = [
+ "log",
+ "try-lock",
+]
+
+[[package]]
+name = "wasi"
+version = "0.10.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b"
+dependencies = [
+ "cfg-if 1.0.0",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.34"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f219e0d211ba40266969f6dbdd90636da12f75bee4fc9d6c23d1260dadb51454"
+dependencies = [
+ "cfg-if 1.0.0",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d"
+
+[[package]]
+name = "web-sys"
+version = "0.3.61"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "webpki"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[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"
+
+[[package]]
+name = "windows-sys"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
+dependencies = [
+ "windows-targets",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e2522491fbfcd58cc84d47aeb2958948c4b8982e9a2d8a2a35bbaed431390e7"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c9864e83243fdec7fc9c5444389dcbbfd258f745e7853198f365e3c4968a608"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c8b1b673ffc16c47a9ff48570a9d85e25d265735c503681332589af6253c6c7"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de3887528ad530ba7bdbb1faa8275ec7a1155a45ffa57c37993960277145d640"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf4d1122317eddd6ff351aa852118a2418ad4214e6613a50e0191f7004372605"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1040f221285e17ebccbc2591ffdc2d44ee1f9186324dd3e84e99ac68d699c45"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "628bfdf232daa22b0d64fdb62b09fcc36bb01f05a3939e20ab73aaf9470d0463"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd"
+
+[[package]]
+name = "winnow"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "faf09497b8f8b5ac5d3bb4d05c0a99be20f26fd3d5f2db7b0716e946d5103658"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "winreg"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winreg"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76a1a57ff50e9b408431e8f97d5456f2807f8eb2a2cd79b06068fc87f8ecf189"
+dependencies = [
+ "cfg-if 1.0.0",
+ "winapi",
+]
+
+[[package]]
+name = "xattr"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d1526bbe5aaeb5eb06885f4d987bcdfa5e23187055de9b83fe00156a821fabc"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "xz2"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "388c44dc09d76f1536602ead6d325eb532f5c122f17782bd57fb47baeeb767e2"
+dependencies = [
+ "lzma-sys",
+]
+
+[[package]]
+name = "yansi"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec"
+
+[[package]]
+name = "zstd"
+version = "0.12.3+zstd.1.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76eea132fb024e0e13fd9c2f5d5d595d8a967aa72382ac2f9d39fcc95afd0806"
+dependencies = [
+ "zstd-safe",
+]
+
+[[package]]
+name = "zstd-safe"
+version = "6.0.4+zstd.1.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7afb4b54b8910cf5447638cb54bf4e8a65cbedd783af98b98c62ffe91f185543"
+dependencies = [
+ "libc",
+ "zstd-sys",
+]
+
+[[package]]
+name = "zstd-sys"
+version = "2.0.7+zstd.1.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94509c3ba2fe55294d752b79842c530ccfab760192521df74a081a78d2b3c7f5"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+]
diff --git a/nixpkgs/pkgs/development/tools/rust/rustup/default.nix b/nixpkgs/pkgs/development/tools/rust/rustup/default.nix
new file mode 100644
index 000000000000..e5874580d3f9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/rustup/default.nix
@@ -0,0 +1,107 @@
+{ stdenv
+, lib
+, runCommand
+, patchelf
+, fetchFromGitHub
+, rustPlatform
+, makeBinaryWrapper
+, pkg-config
+, openssl
+, curl
+, zlib
+, Security
+, CoreServices
+, libiconv
+, xz
+}:
+
+let
+  libPath = lib.makeLibraryPath [
+    zlib # libz.so.1
+  ];
+in
+
+rustPlatform.buildRustPackage rec {
+  pname = "rustup";
+  version = "1.26.0";
+
+  src = fetchFromGitHub {
+    owner = "rust-lang";
+    repo = "rustup";
+    rev = version;
+    sha256 = "sha256-rdhG9MdjWyvoaMGdjgFyCfQaoV48QtAZE7buA5TkDKg=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+  };
+
+  nativeBuildInputs = [ makeBinaryWrapper pkg-config ];
+
+  buildInputs = [
+    (curl.override { inherit openssl; })
+    zlib
+  ] ++ lib.optionals stdenv.isDarwin [ CoreServices Security libiconv xz ];
+
+  buildFeatures = [ "no-self-update" ];
+
+  checkFeatures = [ ];
+
+  patches = lib.optionals stdenv.isLinux [
+    (runCommand "0001-dynamically-patchelf-binaries.patch" { CC = stdenv.cc; patchelf = patchelf; libPath = "$ORIGIN/../lib:${libPath}"; } ''
+      export dynamicLinker=$(cat $CC/nix-support/dynamic-linker)
+      substitute ${./0001-dynamically-patchelf-binaries.patch} $out \
+        --subst-var patchelf \
+        --subst-var dynamicLinker \
+        --subst-var libPath
+    '')
+  ];
+
+  doCheck = !stdenv.isAarch64 && !stdenv.isDarwin;
+
+  # skip failing tests
+  checkFlags = [
+    # auto-self-update mode is set to 'disable' for nix rustup
+    "--skip=suite::cli_exact::check_updates_none"
+    "--skip=suite::cli_exact::check_updates_some"
+    "--skip=suite::cli_exact::check_updates_with_update"
+    # rustup-init is not used in nix rustup
+    "--skip=suite::cli_ui::rustup_init_ui_doc_text_tests"
+  ];
+
+  postInstall = ''
+    pushd $out/bin
+    mv rustup-init rustup
+    binlinks=(
+      cargo rustc rustdoc rust-gdb rust-lldb rls rustfmt cargo-fmt
+      cargo-clippy clippy-driver cargo-miri rust-gdbgui rust-analyzer
+    )
+    for link in ''${binlinks[@]}; do
+      ln -s rustup $link
+    done
+    popd
+
+    wrapProgram $out/bin/rustup --prefix "LD_LIBRARY_PATH" : "${libPath}"
+
+    # tries to create .rustup
+    export HOME=$(mktemp -d)
+    mkdir -p "$out/share/"{bash-completion/completions,fish/vendor_completions.d,zsh/site-functions}
+
+    # generate completion scripts for rustup
+    $out/bin/rustup completions bash rustup > "$out/share/bash-completion/completions/rustup"
+    $out/bin/rustup completions fish rustup > "$out/share/fish/vendor_completions.d/rustup.fish"
+    $out/bin/rustup completions zsh rustup >  "$out/share/zsh/site-functions/_rustup"
+
+    # generate completion scripts for cargo
+    # Note: fish completion script is not supported.
+    $out/bin/rustup completions bash cargo > "$out/share/bash-completion/completions/cargo"
+    $out/bin/rustup completions zsh cargo >  "$out/share/zsh/site-functions/_cargo"
+  '';
+
+  meta = with lib; {
+    description = "The Rust toolchain installer";
+    homepage = "https://www.rustup.rs/";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = [ maintainers.mic92 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/rusty-man/default.nix b/nixpkgs/pkgs/development/tools/rust/rusty-man/default.nix
new file mode 100644
index 000000000000..879cec5ebe6d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/rusty-man/default.nix
@@ -0,0 +1,23 @@
+{ lib, rustPlatform, fetchFromSourcehut }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rusty-man";
+  version = "0.5.0";
+
+  src = fetchFromSourcehut {
+    owner = "~ireas";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-djprzmogT1OEf0/+twdxzx30YaMNzFjXkZd4IDsH8oo=";
+  };
+
+  cargoSha256 = "sha256-Wf8D6y3LRYJpQjFFt0w5X+BOllbR3mc4Gzcr1ad3zD0=";
+
+  meta = with lib; {
+    description = "A command-line viewer for documentation generated by rustdoc";
+    homepage = "https://git.sr.ht/~ireas/rusty-man";
+    changelog = "https://git.sr.ht/~ireas/rusty-man/tree/v${version}/item/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/rustycli/default.nix b/nixpkgs/pkgs/development/tools/rust/rustycli/default.nix
new file mode 100644
index 000000000000..451ae2f95611
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/rustycli/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, rustPlatform
+, fetchCrate
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rustycli";
+  version = "0.1.1";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-4Txw6Cmwwgu7K8VIVoX9GR76VUqAEw6uYptmczbjqg0=";
+  };
+
+  cargoHash = "sha256-WU3lgGJH6qVDI1Un3HBqg0edqiP5sobTsAIXdnjeNTU=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  # some examples fail to compile
+  cargoTestFlags = [ "--tests" ];
+
+  meta = with lib; {
+    description = "Access the rust playground right in terminal";
+    homepage = "https://github.com/pwnwriter/rustycli";
+    changelog = "https://github.com/pwnwriter/rustycli/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/specr-transpile/default.nix b/nixpkgs/pkgs/development/tools/rust/specr-transpile/default.nix
new file mode 100644
index 000000000000..10a1acfac757
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/specr-transpile/default.nix
@@ -0,0 +1,23 @@
+{ lib
+, rustPlatform
+, fetchCrate
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "specr-transpile";
+  version = "0.1.25";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-yB4b7VaZ22zk8jhQijBOWRks22TV19q9IQNlVXyBlss=";
+  };
+
+  cargoHash = "sha256-pD+Llzt4ekkQgKGidEL6jIbbFpuqjuFTmQM29FtReTY=";
+
+  meta = with lib; {
+    description = "Converts Specr lang code to Rust";
+    homepage = "https://github.com/RalfJung/minirust-tooling";
+    license = with licenses; [ asl20 mit ];
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/sqlx-cli/default.nix b/nixpkgs/pkgs/development/tools/rust/sqlx-cli/default.nix
new file mode 100644
index 000000000000..16edbf5591d2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/sqlx-cli/default.nix
@@ -0,0 +1,83 @@
+{ stdenv
+, lib
+, rustPlatform
+, fetchFromGitHub
+, installShellFiles
+, pkg-config
+, openssl
+, libiconv
+, testers
+, sqlx-cli
+, CoreFoundation
+, Security
+, SystemConfiguration
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "sqlx-cli";
+  version = "0.7.3";
+
+  src = fetchFromGitHub {
+    owner = "launchbadge";
+    repo = "sqlx";
+    rev = "v${version}";
+    hash = "sha256-AKVNyuV9jwzmsy6tHkGkLj1fhVT8XYvEn2Ip2wCKDxI=";
+  };
+
+  cargoHash = "sha256-F3FLu/n57F8psk+d0Hf+HnqV/DvEFQwRefu/4C8A1sU=";
+
+  # Prepare the Cargo.lock for offline use.
+  # See https://github.com/NixOS/nixpkgs/issues/261412
+  postConfigure = ''
+    cargo metadata --offline > /dev/null
+  '';
+
+  buildNoDefaultFeatures = true;
+  buildFeatures = [
+    "native-tls"
+    "postgres"
+    "sqlite"
+    "mysql"
+    "completions"
+  ];
+
+  doCheck = false;
+  cargoBuildFlags = [ "--package sqlx-cli" ];
+
+  nativeBuildInputs = [
+    installShellFiles
+    pkg-config
+  ];
+
+  buildInputs =
+    lib.optionals stdenv.isLinux [
+      openssl
+    ] ++
+    lib.optionals stdenv.isDarwin [
+      CoreFoundation
+      Security
+      SystemConfiguration
+      libiconv
+    ];
+
+  postInstall = ''
+    for shell in bash fish zsh; do
+      $out/bin/sqlx completions $shell > sqlx.$shell
+      installShellCompletion sqlx.$shell
+    done
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = sqlx-cli;
+    command = "sqlx --version";
+  };
+
+  meta = with lib; {
+    description =
+      "SQLx's associated command-line utility for managing databases, migrations, and enabling offline mode with sqlx::query!() and friends.";
+    homepage = "https://github.com/launchbadge/sqlx";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ greizgh xrelkd fd ];
+    mainProgram = "sqlx";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/svd2rust/default.nix b/nixpkgs/pkgs/development/tools/rust/svd2rust/default.nix
new file mode 100644
index 000000000000..6a3dbe7d50b4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/svd2rust/default.nix
@@ -0,0 +1,26 @@
+{ lib, rustPlatform, fetchCrate }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "svd2rust";
+  version = "0.31.5";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-iJWF2BDLFH/sNi5xc8BIVmt4A+CSROxxp1TW5fcIp1Q=";
+  };
+
+  cargoHash = "sha256-WcF7XeDfCdGiQQBH1LN3q3iIUJlfLTjJ7xlMG52AO/w=";
+
+  # error: linker `aarch64-linux-gnu-gcc` not found
+  postPatch = ''
+    rm .cargo/config.toml
+  '';
+
+  meta = with lib; {
+    description = "Generate Rust register maps (`struct`s) from SVD files";
+    homepage = "https://github.com/rust-embedded/svd2rust";
+    changelog = "https://github.com/rust-embedded/svd2rust/blob/v${version}/CHANGELOG.md";
+    license = with licenses; [ mit asl20 ];
+    maintainers = with maintainers; [ newam ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/typeshare/default.nix b/nixpkgs/pkgs/development/tools/rust/typeshare/default.nix
new file mode 100644
index 000000000000..4f5eb0a5a6ec
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/typeshare/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, installShellFiles
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "typeshare";
+  version = "1.7.0";
+
+  src = fetchFromGitHub {
+    owner = "1password";
+    repo = "typeshare";
+    rev = "v${version}";
+    hash = "sha256-Ftr0YMrY6tPpfg25swYntBXLWGKT00PEz79aOiSgLsU=";
+  };
+
+  cargoHash = "sha256-VIPIFdbyPcflqHHLkzpDugmw9+9CJRIv+Oy7PoaUZ5g=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  buildFeatures = [ "go" ];
+
+  postInstall = ''
+    installShellCompletion --cmd typeshare \
+      --bash <($out/bin/typeshare completions bash) \
+      --fish <($out/bin/typeshare completions fish) \
+      --zsh <($out/bin/typeshare completions zsh)
+  '';
+
+  meta = with lib; {
+    description = "Command Line Tool for generating language files with typeshare";
+    homepage = "https://github.com/1password/typeshare";
+    changelog = "https://github.com/1password/typeshare/blob/v${version}/CHANGELOG.md";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rye/Cargo.lock b/nixpkgs/pkgs/development/tools/rye/Cargo.lock
new file mode 100644
index 000000000000..f60d223aba03
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rye/Cargo.lock
@@ -0,0 +1,2843 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "addr2line"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb"
+dependencies = [
+ "gimli",
+]
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "aead"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0"
+dependencies = [
+ "crypto-common",
+ "generic-array",
+]
+
+[[package]]
+name = "age"
+version = "0.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d55a4d912c80a92762ffd1c884065f3f9646467d22c95390e824a0ff7def472"
+dependencies = [
+ "age-core",
+ "base64 0.13.1",
+ "bech32",
+ "chacha20poly1305",
+ "cookie-factory",
+ "hkdf",
+ "hmac",
+ "i18n-embed",
+ "i18n-embed-fl",
+ "lazy_static",
+ "nom",
+ "pin-project",
+ "rand 0.7.3",
+ "rand 0.8.5",
+ "rust-embed",
+ "scrypt",
+ "sha2",
+ "subtle",
+ "x25519-dalek",
+ "zeroize",
+]
+
+[[package]]
+name = "age-core"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3d2e815ac879dc23c1139e720d21c6cd4d1276345c772587285d965a69b8f32"
+dependencies = [
+ "base64 0.13.1",
+ "chacha20poly1305",
+ "cookie-factory",
+ "hkdf",
+ "io_tee",
+ "nom",
+ "rand 0.8.5",
+ "secrecy",
+ "sha2",
+]
+
+[[package]]
+name = "ahash"
+version = "0.8.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77c3a9648d43b9cd48db467b3f87fdd6e146bcc88ab0180006cef2179fe11d01"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+ "version_check",
+ "zerocopy",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "allocator-api2"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5"
+
+[[package]]
+name = "anstyle"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2faccea4cc4ab4a667ce676a30e8ec13922a692c99bb8f5b11f1502c72e04220"
+
+[[package]]
+name = "anyhow"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "080e9890a082662b09c1ad45f567faeeb47f22b5fb23895fbe1e651e718e25ca"
+dependencies = [
+ "backtrace",
+]
+
+[[package]]
+name = "arc-swap"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6"
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "backtrace"
+version = "0.3.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837"
+dependencies = [
+ "addr2line",
+ "cc",
+ "cfg-if",
+ "libc",
+ "miniz_oxide",
+ "object",
+ "rustc-demangle",
+]
+
+[[package]]
+name = "base64"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
+
+[[package]]
+name = "base64"
+version = "0.21.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567"
+
+[[package]]
+name = "bech32"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d86b93f97252c47b41663388e6d155714a9d0c398b99f1005cbc5f978b29f445"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bitflags"
+version = "2.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf"
+
+[[package]]
+name = "block-buffer"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "bstr"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c48f0051a4b4c5e0b6d365cd04af53aeaa209e3cc15ec2cdb69e73cc87fbd0dc"
+dependencies = [
+ "memchr",
+ "serde",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec"
+
+[[package]]
+name = "byteorder"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
+
+[[package]]
+name = "bzip2"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bdb116a6ef3f6c3698828873ad02c3014b3c85cadb88496095628e3ef1e347f8"
+dependencies = [
+ "bzip2-sys",
+ "libc",
+]
+
+[[package]]
+name = "bzip2-sys"
+version = "0.1.11+1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "cc"
+version = "1.0.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
+dependencies = [
+ "jobserver",
+ "libc",
+]
+
+[[package]]
+name = "cfb"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d38f2da7a0a2c4ccf0065be06397cc26a81f4e528be095826eee9d4adbb8c60f"
+dependencies = [
+ "byteorder",
+ "fnv",
+ "uuid",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "chacha20"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818"
+dependencies = [
+ "cfg-if",
+ "cipher",
+ "cpufeatures",
+]
+
+[[package]]
+name = "chacha20poly1305"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "10cd79432192d1c0f4e1a0fef9527696cc039165d729fb41b3f4f4f354c2dc35"
+dependencies = [
+ "aead",
+ "chacha20",
+ "cipher",
+ "poly1305",
+ "zeroize",
+]
+
+[[package]]
+name = "charset"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "18e9079d1a12a2cc2bffb5db039c43661836ead4082120d5844f02555aca2d46"
+dependencies = [
+ "base64 0.13.1",
+ "encoding_rs",
+]
+
+[[package]]
+name = "chumsky"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8eebd66744a15ded14960ab4ccdbfb51ad3b81f51f3f04a80adac98c985396c9"
+dependencies = [
+ "hashbrown",
+ "stacker",
+]
+
+[[package]]
+name = "cipher"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad"
+dependencies = [
+ "crypto-common",
+ "inout",
+ "zeroize",
+]
+
+[[package]]
+name = "clap"
+version = "4.4.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e578d6ec4194633722ccf9544794b71b1385c3c027efe0c55db226fc880865c"
+dependencies = [
+ "clap_builder",
+ "clap_derive",
+]
+
+[[package]]
+name = "clap_builder"
+version = "4.4.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4df4df40ec50c46000231c914968278b1eb05098cf8f1b3a518a95030e71d1c7"
+dependencies = [
+ "anstyle",
+ "clap_lex",
+ "terminal_size",
+]
+
+[[package]]
+name = "clap_complete"
+version = "4.4.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abb745187d7f4d76267b37485a65e0149edd0e91a4cfcdd3f27524ad86cee9f3"
+dependencies = [
+ "clap",
+]
+
+[[package]]
+name = "clap_derive"
+version = "4.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1"
+
+[[package]]
+name = "configparser"
+version = "3.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ec6d3da8e550377a85339063af6e3735f4b1d9392108da4e083a1b3b9820288"
+
+[[package]]
+name = "console"
+version = "0.15.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e1f83fc076bd6dd27517eacdf25fef6c4dfe5f1d7448bafaaf3a26f13b5e4eb"
+dependencies = [
+ "encode_unicode",
+ "lazy_static",
+ "libc",
+ "unicode-width",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "cookie-factory"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "396de984970346b0d9e93d1415082923c679e5ae5c3ee3dcbd104f5610af126b"
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f"
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crc32fast"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d"
+dependencies = [
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e"
+dependencies = [
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345"
+
+[[package]]
+name = "crypto-common"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+dependencies = [
+ "generic-array",
+ "typenum",
+]
+
+[[package]]
+name = "ctrlc"
+version = "3.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b467862cc8610ca6fc9a1532d7777cee0804e678ab45410897b9396495994a0b"
+dependencies = [
+ "nix",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "curl"
+version = "0.4.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "509bd11746c7ac09ebd19f0b17782eae80aadee26237658a6b4808afb5c11a22"
+dependencies = [
+ "curl-sys",
+ "libc",
+ "openssl-probe",
+ "openssl-sys",
+ "schannel",
+ "socket2",
+ "winapi",
+]
+
+[[package]]
+name = "curl-sys"
+version = "0.4.71+curl-8.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c7b12a7ab780395666cb576203dc3ed6e01513754939a600b85196ccf5356bc5"
+dependencies = [
+ "cc",
+ "libc",
+ "libz-sys",
+ "openssl-sys",
+ "pkg-config",
+ "vcpkg",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "curve25519-dalek"
+version = "3.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61"
+dependencies = [
+ "byteorder",
+ "digest 0.9.0",
+ "rand_core 0.5.1",
+ "subtle",
+ "zeroize",
+]
+
+[[package]]
+name = "darling"
+version = "0.14.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850"
+dependencies = [
+ "darling_core",
+ "darling_macro",
+]
+
+[[package]]
+name = "darling_core"
+version = "0.14.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0"
+dependencies = [
+ "fnv",
+ "ident_case",
+ "proc-macro2",
+ "quote",
+ "strsim",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "darling_macro"
+version = "0.14.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e"
+dependencies = [
+ "darling_core",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "dashmap"
+version = "5.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856"
+dependencies = [
+ "cfg-if",
+ "hashbrown",
+ "lock_api",
+ "once_cell",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "data-encoding"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e962a19be5cfc3f3bf6dd8f61eb50107f356ad6270fbb3ed41476571db78be5"
+
+[[package]]
+name = "decompress"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67605f4868a37e8a9c50003a866a6896104602d5d7ddf7e8a7f398ec97e44ab3"
+dependencies = [
+ "derive_builder",
+ "flate2",
+ "infer",
+ "lazy_static",
+ "regex",
+ "tar",
+ "thiserror",
+ "zstd 0.12.4",
+]
+
+[[package]]
+name = "deranged"
+version = "0.3.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4"
+dependencies = [
+ "powerfmt",
+]
+
+[[package]]
+name = "derive_builder"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8d67778784b508018359cbc8696edb3db78160bab2c2a28ba7f56ef6932997f8"
+dependencies = [
+ "derive_builder_macro",
+]
+
+[[package]]
+name = "derive_builder_core"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c11bdc11a0c47bc7d37d582b5285da6849c96681023680b906673c5707af7b0f"
+dependencies = [
+ "darling",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "derive_builder_macro"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ebcda35c7a396850a55ffeac740804b40ffec779b98fffbb1738f4033f0ee79e"
+dependencies = [
+ "derive_builder_core",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "deunicode"
+version = "1.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3ae2a35373c5c74340b79ae6780b498b2b183915ec5dacf263aac5a099bf485a"
+
+[[package]]
+name = "dialoguer"
+version = "0.10.4"
+source = "git+https://github.com/console-rs/dialoguer?rev=47a9d4df729db7ffc1492bd0845be786e6f20153#47a9d4df729db7ffc1492bd0845be786e6f20153"
+dependencies = [
+ "console",
+ "shell-words",
+ "tempfile",
+ "thiserror",
+ "zeroize",
+]
+
+[[package]]
+name = "digest"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "digest"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
+dependencies = [
+ "block-buffer",
+ "crypto-common",
+ "subtle",
+]
+
+[[package]]
+name = "displaydoc"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "either"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
+
+[[package]]
+name = "encode_unicode"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
+
+[[package]]
+name = "encoding_rs"
+version = "0.8.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "equivalent"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
+
+[[package]]
+name = "errno"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245"
+dependencies = [
+ "libc",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "fastrand"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "fastrand"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5"
+
+[[package]]
+name = "filetime"
+version = "0.2.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ee447700ac8aa0b2f2bd7bc4462ad686ba06baa6727ac149a2d6277f0d240fd"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "find-crate"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59a98bbaacea1c0eb6a0876280051b892eb73594fd90cf3b20e9c817029c57d2"
+dependencies = [
+ "toml 0.5.11",
+]
+
+[[package]]
+name = "flate2"
+version = "1.0.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide",
+]
+
+[[package]]
+name = "fluent"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61f69378194459db76abd2ce3952b790db103ceb003008d3d50d97c41ff847a7"
+dependencies = [
+ "fluent-bundle",
+ "unic-langid",
+]
+
+[[package]]
+name = "fluent-bundle"
+version = "0.15.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e242c601dec9711505f6d5bbff5bedd4b61b2469f2e8bb8e57ee7c9747a87ffd"
+dependencies = [
+ "fluent-langneg",
+ "fluent-syntax",
+ "intl-memoizer",
+ "intl_pluralrules",
+ "rustc-hash",
+ "self_cell 0.10.3",
+ "smallvec",
+ "unic-langid",
+]
+
+[[package]]
+name = "fluent-langneg"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c4ad0989667548f06ccd0e306ed56b61bd4d35458d54df5ec7587c0e8ed5e94"
+dependencies = [
+ "unic-langid",
+]
+
+[[package]]
+name = "fluent-syntax"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0abed97648395c902868fee9026de96483933faa54ea3b40d652f7dfe61ca78"
+dependencies = [
+ "thiserror",
+]
+
+[[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.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "fs-err"
+version = "2.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88a41f105fe1d5b6b34b2055e3dc59bb79b46b48b2040b9e6c7b4b5de097aa41"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "fs2"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.1.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi 0.9.0+wasi-snapshot-preview1",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+]
+
+[[package]]
+name = "gimli"
+version = "0.28.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253"
+
+[[package]]
+name = "git-testament"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "710c78d2b68e46e62f5ba63ba0a7a2986640f37f9ecc07903b9ad4e7b2dbfc8e"
+dependencies = [
+ "git-testament-derive",
+]
+
+[[package]]
+name = "git-testament-derive"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b31494efbbe1a6730f6943759c21b92c8dc431cb4df177e6f2a6429c3c96842"
+dependencies = [
+ "log",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+ "time",
+]
+
+[[package]]
+name = "globset"
+version = "0.4.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57da3b9b5b85bd66f31093f8c408b90a74431672542466497dcbdfdc02034be1"
+dependencies = [
+ "aho-corasick",
+ "bstr",
+ "log",
+ "regex-automata",
+ "regex-syntax",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.14.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604"
+dependencies = [
+ "ahash",
+ "allocator-api2",
+]
+
+[[package]]
+name = "heck"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+
+[[package]]
+name = "hex"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
+
+[[package]]
+name = "hkdf"
+version = "0.12.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7"
+dependencies = [
+ "hmac",
+]
+
+[[package]]
+name = "hmac"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
+dependencies = [
+ "digest 0.10.7",
+]
+
+[[package]]
+name = "home"
+version = "0.5.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5"
+dependencies = [
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "i18n-config"
+version = "0.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c9ce3c48cbc21fd5b22b9331f32b5b51f6ad85d969b99e793427332e76e7640"
+dependencies = [
+ "log",
+ "serde",
+ "serde_derive",
+ "thiserror",
+ "toml 0.8.9",
+ "unic-langid",
+]
+
+[[package]]
+name = "i18n-embed"
+version = "0.13.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92a86226a7a16632de6723449ee5fe70bac5af718bc642ee9ca2f0f6e14fa1fa"
+dependencies = [
+ "arc-swap",
+ "fluent",
+ "fluent-langneg",
+ "fluent-syntax",
+ "i18n-embed-impl",
+ "intl-memoizer",
+ "lazy_static",
+ "log",
+ "parking_lot",
+ "rust-embed",
+ "thiserror",
+ "unic-langid",
+ "walkdir",
+]
+
+[[package]]
+name = "i18n-embed-fl"
+version = "0.6.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d26a3d3569737dfaac7fc1c4078e6af07471c3060b8e570bcd83cdd5f4685395"
+dependencies = [
+ "dashmap",
+ "find-crate",
+ "fluent",
+ "fluent-syntax",
+ "i18n-config",
+ "i18n-embed",
+ "lazy_static",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "strsim",
+ "syn 2.0.48",
+ "unic-langid",
+]
+
+[[package]]
+name = "i18n-embed-impl"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81093c4701672f59416582fe3145676126fd23ba5db910acad0793c1108aaa58"
+dependencies = [
+ "find-crate",
+ "i18n-config",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "ident_case"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
+
+[[package]]
+name = "idna"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "indexmap"
+version = "2.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "824b2ae422412366ba479e8111fd301f7b5faece8149317bb81925979a53f520"
+dependencies = [
+ "equivalent",
+ "hashbrown",
+]
+
+[[package]]
+name = "indicatif"
+version = "0.17.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb28741c9db9a713d93deb3bb9515c20788cef5815265bee4980e87bde7e0f25"
+dependencies = [
+ "console",
+ "instant",
+ "number_prefix",
+ "portable-atomic",
+ "unicode-width",
+]
+
+[[package]]
+name = "infer"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a898e4b7951673fce96614ce5751d13c40fc5674bc2d759288e46c3ab62598b3"
+dependencies = [
+ "cfb",
+]
+
+[[package]]
+name = "inout"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "instant"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "intl-memoizer"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c310433e4a310918d6ed9243542a6b83ec1183df95dff8f23f87bb88a264a66f"
+dependencies = [
+ "type-map",
+ "unic-langid",
+]
+
+[[package]]
+name = "intl_pluralrules"
+version = "7.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "078ea7b7c29a2b4df841a7f6ac8775ff6074020c6776d48491ce2268e068f972"
+dependencies = [
+ "unic-langid",
+]
+
+[[package]]
+name = "io_tee"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b3f7cef34251886990511df1c61443aa928499d598a9473929ab5a90a527304"
+
+[[package]]
+name = "itoa"
+version = "1.0.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c"
+
+[[package]]
+name = "jobserver"
+version = "0.1.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c37f63953c4c63420ed5fd3d6d398c719489b9f872b9fa683262f8edd363c7d"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "junction"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca39ef0d69b18e6a2fd14c2f0a1d593200f4a4ed949b240b5917ab51fac754cb"
+dependencies = [
+ "scopeguard",
+ "winapi",
+]
+
+[[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.153"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd"
+
+[[package]]
+name = "libz-sys"
+version = "1.1.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "037731f5d3aaa87a5675e895b63ddff1a87624bc29f77004ea829809654e48f6"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "license"
+version = "3.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "778718185117620a06e95d2b1e57d50166b1d6bfad93c8abfc1b3344c863ad8c"
+dependencies = [
+ "reword",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.4.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c"
+
+[[package]]
+name = "lock_api"
+version = "0.4.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45"
+dependencies = [
+ "autocfg",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
+
+[[package]]
+name = "mailparse"
+version = "0.14.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d096594926cab442e054e047eb8c1402f7d5b2272573b97ba68aa40629f9757"
+dependencies = [
+ "charset",
+ "data-encoding",
+ "quoted_printable 0.5.0",
+]
+
+[[package]]
+name = "memchr"
+version = "2.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149"
+
+[[package]]
+name = "minijinja"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6fe0ff215195a22884d867b547c70a0c4815cbbcc70991f281dca604b20d10ce"
+dependencies = [
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "minimal-lexical"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "monotrail-utils"
+version = "0.0.1"
+source = "git+https://github.com/konstin/poc-monotrail?rev=136807e1fe87e9319e0223f76b602ba5db881322#136807e1fe87e9319e0223f76b602ba5db881322"
+dependencies = [
+ "anyhow",
+ "cpufeatures",
+ "fs-err",
+ "fs2",
+ "pep508_rs",
+ "regex",
+ "serde",
+ "serde_json",
+ "tar",
+ "target-lexicon",
+ "tempfile",
+ "thiserror",
+ "toml 0.8.9",
+ "tracing",
+ "unscanny",
+ "ureq",
+ "zstd 0.13.0",
+]
+
+[[package]]
+name = "nix"
+version = "0.27.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053"
+dependencies = [
+ "bitflags 2.4.2",
+ "cfg-if",
+ "libc",
+]
+
+[[package]]
+name = "nom"
+version = "7.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
+dependencies = [
+ "memchr",
+ "minimal-lexical",
+]
+
+[[package]]
+name = "ntapi"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "num-conv"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9"
+
+[[package]]
+name = "number_prefix"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3"
+
+[[package]]
+name = "object"
+version = "0.32.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
+
+[[package]]
+name = "opaque-debug"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
+
+[[package]]
+name = "openssl-probe"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
+
+[[package]]
+name = "openssl-src"
+version = "300.2.2+3.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8bbfad0063610ac26ee79f7484739e2b07555a75c42453b89263830b5c8103bc"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "openssl-sys"
+version = "0.9.99"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "22e1bf214306098e4832460f797824c05d25aacdf896f64a985fb0fd992454ae"
+dependencies = [
+ "cc",
+ "libc",
+ "openssl-src",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "parking_lot"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+dependencies = [
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall",
+ "smallvec",
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "pathdiff"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd"
+
+[[package]]
+name = "pbkdf2"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917"
+dependencies = [
+ "digest 0.10.7",
+]
+
+[[package]]
+name = "pep440_rs"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0c29f9c43de378b4e4e0cd7dbcce0e5cfb80443de8c05620368b2948bc936a1"
+dependencies = [
+ "once_cell",
+ "regex",
+ "serde",
+ "unicode-width",
+]
+
+[[package]]
+name = "pep508_rs"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa9d1320b78f4a5715b3ec914f32b5e85a50287ad923730e3cbf0255259432eb"
+dependencies = [
+ "once_cell",
+ "pep440_rs",
+ "regex",
+ "serde",
+ "thiserror",
+ "tracing",
+ "unicode-width",
+ "url",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
+
+[[package]]
+name = "pin-project"
+version = "1.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0302c4a0442c456bd56f841aee5c3bfd17967563f6fadc9ceb9f9c23cf3807e0"
+dependencies = [
+ "pin-project-internal",
+]
+
+[[package]]
+name = "pin-project-internal"
+version = "1.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "266c042b60c9c76b8d53061e52b2e0d1116abc57cefc8c5cd671619a56ac3690"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2900ede94e305130c13ddd391e0ab7cbaeb783945ae07a279c268cb05109c6cb"
+
+[[package]]
+name = "poly1305"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf"
+dependencies = [
+ "cpufeatures",
+ "opaque-debug",
+ "universal-hash",
+]
+
+[[package]]
+name = "portable-atomic"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7170ef9988bc169ba16dd36a7fa041e5c4cbeb6a35b76d4c03daded371eae7c0"
+
+[[package]]
+name = "powerfmt"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+
+[[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 1.0.109",
+ "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.78"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "psm"
+version = "0.1.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5787f7cda34e3033a72192c018bc5883100330f362ef279a8cbccfce8bb4e874"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "python-pkginfo"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "037469c164f08c891bf6d69ca02f1d56210011451e229618669777df82124cfa"
+dependencies = [
+ "flate2",
+ "fs-err",
+ "mailparse",
+ "rfc2047-decoder",
+ "serde",
+ "tar",
+ "thiserror",
+ "zip",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.35"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "quoted_printable"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a3866219251662ec3b26fc217e3e05bf9c4f84325234dfb96bf0bf840889e49"
+
+[[package]]
+name = "quoted_printable"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "79ec282e887b434b68c18fe5c121d38e72a5cf35119b59e54ec5b992ea9c8eb0"
+
+[[package]]
+name = "rand"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
+dependencies = [
+ "getrandom 0.1.16",
+ "libc",
+ "rand_chacha 0.2.2",
+ "rand_core 0.5.1",
+ "rand_hc",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "libc",
+ "rand_chacha 0.3.1",
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402"
+dependencies = [
+ "ppv-lite86",
+ "rand_core 0.5.1",
+]
+
+[[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.4",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
+dependencies = [
+ "getrandom 0.1.16",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom 0.2.12",
+]
+
+[[package]]
+name = "rand_hc"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
+dependencies = [
+ "rand_core 0.5.1",
+]
+
+[[package]]
+name = "rayon"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa7237101a77a10773db45d62004a272517633fbcc3df19d96455ede1122e051"
+dependencies = [
+ "either",
+ "rayon-core",
+]
+
+[[package]]
+name = "rayon-core"
+version = "1.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2"
+dependencies = [
+ "crossbeam-deque",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "regex"
+version = "1.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-automata",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5bb987efffd3c6d0d8f5f89510bb458559eab11e4f869acb20bf845e016259cd"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
+
+[[package]]
+name = "reword"
+version = "7.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fe272098dce9ed76b479995953f748d1851261390b08f8a0ff619c885a1f0765"
+dependencies = [
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "rfc2047-decoder"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61fc4b4e52897c3e30b12b7e9b04461215b647fbe66f6def60dd8edbce14ec2e"
+dependencies = [
+ "base64 0.21.7",
+ "charset",
+ "chumsky",
+ "memchr",
+ "quoted_printable 0.4.8",
+ "thiserror",
+]
+
+[[package]]
+name = "ring"
+version = "0.17.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "688c63d65483050968b2a8937f7995f443e27041a0f7700aa59b0822aedebb74"
+dependencies = [
+ "cc",
+ "getrandom 0.2.12",
+ "libc",
+ "spin",
+ "untrusted",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "rust-embed"
+version = "6.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a36224c3276f8c4ebc8c20f158eca7ca4359c8db89991c4925132aaaf6702661"
+dependencies = [
+ "rust-embed-impl",
+ "rust-embed-utils",
+ "walkdir",
+]
+
+[[package]]
+name = "rust-embed-impl"
+version = "6.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49b94b81e5b2c284684141a2fb9e2a31be90638caf040bf9afbc5a0416afe1ac"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "rust-embed-utils",
+ "syn 2.0.48",
+ "walkdir",
+]
+
+[[package]]
+name = "rust-embed-utils"
+version = "7.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d38ff6bf570dc3bb7100fce9f7b60c33fa71d80e88da3f2580df4ff2bdded74"
+dependencies = [
+ "sha2",
+ "walkdir",
+]
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
+
+[[package]]
+name = "rustc-hash"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
+
+[[package]]
+name = "rustix"
+version = "0.38.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ea3e1a662af26cd7a3ba09c0297a31af215563ecf42817c98df621387f4e949"
+dependencies = [
+ "bitflags 2.4.2",
+ "errno",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "rustls"
+version = "0.21.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9d5a6813c0759e4609cd494e8e725babae6a2ca7b62a5536a13daaec6fcb7ba"
+dependencies = [
+ "log",
+ "ring",
+ "rustls-webpki",
+ "sct",
+]
+
+[[package]]
+name = "rustls-webpki"
+version = "0.101.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "rye"
+version = "0.22.0"
+dependencies = [
+ "age",
+ "anyhow",
+ "bzip2",
+ "clap",
+ "clap_complete",
+ "configparser",
+ "console",
+ "ctrlc",
+ "curl",
+ "decompress",
+ "dialoguer",
+ "flate2",
+ "git-testament",
+ "globset",
+ "hex",
+ "home",
+ "indicatif",
+ "junction",
+ "license",
+ "memchr",
+ "minijinja",
+ "monotrail-utils",
+ "nix",
+ "once_cell",
+ "pathdiff",
+ "pep440_rs",
+ "pep508_rs",
+ "python-pkginfo",
+ "regex",
+ "same-file",
+ "self-replace",
+ "serde",
+ "serde_json",
+ "sha2",
+ "shlex",
+ "slug",
+ "static_vcruntime",
+ "sysinfo",
+ "tar",
+ "tempfile",
+ "toml_edit",
+ "url",
+ "walkdir",
+ "whattheshell",
+ "which",
+ "winapi",
+ "winreg",
+ "xattr",
+ "zip",
+ "zstd 0.13.0",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c"
+
+[[package]]
+name = "salsa20"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97a22f5af31f73a954c10289c93e8a50cc23d971e80ee446f1f6f7137a088213"
+dependencies = [
+ "cipher",
+]
+
+[[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 = "schannel"
+version = "0.1.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534"
+dependencies = [
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "scopeguard"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+
+[[package]]
+name = "scrypt"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f9e24d2b632954ded8ab2ef9fea0a0c769ea56ea98bddbafbad22caeeadf45d"
+dependencies = [
+ "hmac",
+ "pbkdf2",
+ "salsa20",
+ "sha2",
+]
+
+[[package]]
+name = "sct"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "secrecy"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9bd1c54ea06cfd2f6b63219704de0b9b4f72dcc2b8fdef820be6cd799780e91e"
+dependencies = [
+ "zeroize",
+]
+
+[[package]]
+name = "self-replace"
+version = "1.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "525db198616b2bcd0f245daf7bfd8130222f7ee6af9ff9984c19a61bf1160c55"
+dependencies = [
+ "fastrand 1.9.0",
+ "tempfile",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "self_cell"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e14e4d63b804dc0c7ec4a1e52bcb63f02c7ac94476755aa579edac21e01f915d"
+dependencies = [
+ "self_cell 1.0.3",
+]
+
+[[package]]
+name = "self_cell"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "58bf37232d3bb9a2c4e641ca2a11d83b5062066f88df7fed36c28772046d65ba"
+
+[[package]]
+name = "serde"
+version = "1.0.196"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "870026e60fa08c69f064aa766c10f10b1d62db9ccd4d0abb206472bee0ce3b32"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.196"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "33c85360c95e7d137454dc81d9a4ed2b8efd8fbe19cee57357b32b9771fccb67"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.113"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "69801b70b1c3dac963ecb03a364ba0ceda9cf60c71cfe475e99864759c8b8a79"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_spanned"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "sha2"
+version = "0.10.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest 0.10.7",
+]
+
+[[package]]
+name = "shell-words"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde"
+
+[[package]]
+name = "shlex"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
+
+[[package]]
+name = "slug"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3bd94acec9c8da640005f8e135a39fc0372e74535e6b368b7a04b875f784c8c4"
+dependencies = [
+ "deunicode",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7"
+
+[[package]]
+name = "socket2"
+version = "0.4.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "spin"
+version = "0.9.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
+
+[[package]]
+name = "stacker"
+version = "0.1.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c886bd4480155fd3ef527d45e9ac8dd7118a898a46530b7b94c3e21866259fce"
+dependencies = [
+ "cc",
+ "cfg-if",
+ "libc",
+ "psm",
+ "winapi",
+]
+
+[[package]]
+name = "static_vcruntime"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "954e3e877803def9dc46075bf4060147c55cd70db97873077232eae0269dc89b"
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "subtle"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc"
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.48"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "sysinfo"
+version = "0.29.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd727fc423c2060f6c92d9534cef765c65a6ed3f428a03d7def74a8c4348e666"
+dependencies = [
+ "cfg-if",
+ "core-foundation-sys",
+ "libc",
+ "ntapi",
+ "once_cell",
+ "rayon",
+ "winapi",
+]
+
+[[package]]
+name = "tar"
+version = "0.4.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b16afcea1f22891c49a00c751c7b63b2233284064f11a200fc624137c51e2ddb"
+dependencies = [
+ "filetime",
+ "libc",
+ "xattr",
+]
+
+[[package]]
+name = "target-lexicon"
+version = "0.12.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "69758bda2e78f098e4ccb393021a0963bb3442eac05f135c30f61b7370bbafae"
+
+[[package]]
+name = "tempfile"
+version = "3.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "01ce4141aa927a6d1bd34a041795abd0db1cccba5d5f24b009f694bdf3a1f3fa"
+dependencies = [
+ "cfg-if",
+ "fastrand 2.0.1",
+ "redox_syscall",
+ "rustix",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "terminal_size"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21bebf2b7c9e0a515f6e0f8c51dc0f8e4696391e6f1ff30379559f8365fb0df7"
+dependencies = [
+ "rustix",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.56"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d54378c645627613241d077a3a79db965db602882668f9136ac42af9ecb730ad"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.56"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa0faa943b50f3db30a20aa7e265dbc66076993efed8463e8de414e5d06d3471"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "time"
+version = "0.3.34"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c8248b6521bb14bc45b4067159b9b6ad792e2d6d754d6c41fb50e29fefe38749"
+dependencies = [
+ "deranged",
+ "itoa",
+ "num-conv",
+ "powerfmt",
+ "serde",
+ "time-core",
+ "time-macros",
+]
+
+[[package]]
+name = "time-core"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3"
+
+[[package]]
+name = "time-macros"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ba3a3ef41e6672a2f0f001392bb5dcd3ff0a9992d618ca761a11c3121547774"
+dependencies = [
+ "num-conv",
+ "time-core",
+]
+
+[[package]]
+name = "tinystr"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "83c02bf3c538ab32ba913408224323915f4ef9a6d61c0e85d493f355921c0ece"
+dependencies = [
+ "displaydoc",
+]
+
+[[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.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+[[package]]
+name = "toml"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml"
+version = "0.8.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c6a4b9e8023eb94392d3dca65d717c53abc5dad49c07cb65bb8fcd87115fa325"
+dependencies = [
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "toml_edit",
+]
+
+[[package]]
+name = "toml_datetime"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.21.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1"
+dependencies = [
+ "indexmap",
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "winnow",
+]
+
+[[package]]
+name = "tracing"
+version = "0.1.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef"
+dependencies = [
+ "log",
+ "pin-project-lite",
+ "tracing-attributes",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-attributes"
+version = "0.1.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "type-map"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6d3364c5e96cb2ad1603037ab253ddd34d7fb72a58bdddf4b7350760fc69a46"
+dependencies = [
+ "rustc-hash",
+]
+
+[[package]]
+name = "typenum"
+version = "1.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
+
+[[package]]
+name = "unic-langid"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "238722e6d794ed130f91f4ea33e01fcff4f188d92337a21297892521c72df516"
+dependencies = [
+ "unic-langid-impl",
+]
+
+[[package]]
+name = "unic-langid-impl"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bd55a2063fdea4ef1f8633243a7b0524cbeef1905ae04c31a1c9b9775c55bc6"
+dependencies = [
+ "serde",
+ "tinystr",
+]
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85"
+
+[[package]]
+name = "universal-hash"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea"
+dependencies = [
+ "crypto-common",
+ "subtle",
+]
+
+[[package]]
+name = "unscanny"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e9df2af067a7953e9c3831320f35c1cc0600c30d44d9f7a12b01db1cd88d6b47"
+
+[[package]]
+name = "untrusted"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1"
+
+[[package]]
+name = "ureq"
+version = "2.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8cdd25c339e200129fe4de81451814e5228c9b771d57378817d6117cc2b3f97"
+dependencies = [
+ "base64 0.21.7",
+ "flate2",
+ "log",
+ "once_cell",
+ "rustls",
+ "rustls-webpki",
+ "serde",
+ "serde_json",
+ "url",
+ "webpki-roots",
+]
+
+[[package]]
+name = "url"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "percent-encoding",
+ "serde",
+]
+
+[[package]]
+name = "uuid"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f00cc9702ca12d3c81455259621e676d0f7251cec66a21e98fe2e9a37db93b2a"
+
+[[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.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee"
+dependencies = [
+ "same-file",
+ "winapi-util",
+]
+
+[[package]]
+name = "wasi"
+version = "0.9.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.90"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1223296a201415c7fad14792dbefaace9bd52b62d33453ade1c5b5f07555406"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.90"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fcdc935b63408d58a32f8cc9738a0bffd8f05cc7c002086c6ef20b7312ad9dcd"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.90"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3e4c238561b2d428924c49815533a8b9121c664599558a5d9ec51f8a1740a999"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.90"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bae1abb6806dc1ad9e560ed242107c0f6c84335f1749dd4e8ddb012ebd5e25a7"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.90"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d91413b1c31d7539ba5ef2451af3f0b833a005eb27a631cec32bc0635a8602b"
+
+[[package]]
+name = "webpki-roots"
+version = "0.25.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1"
+
+[[package]]
+name = "whattheshell"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7c94d2698698cb1322e20292460fd158373af5fb2802afb6bea9ee17628efddb"
+dependencies = [
+ "sysinfo",
+ "thiserror",
+]
+
+[[package]]
+name = "which"
+version = "6.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fa5e0c10bf77f44aac573e498d1a82d5fbd5e91f6fc0a99e7be4b38e85e101c"
+dependencies = [
+ "either",
+ "home",
+ "once_cell",
+ "rustix",
+ "windows-sys 0.52.0",
+]
+
+[[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.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596"
+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"
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
+dependencies = [
+ "windows-targets 0.52.0",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
+dependencies = [
+ "windows_aarch64_gnullvm 0.48.5",
+ "windows_aarch64_msvc 0.48.5",
+ "windows_i686_gnu 0.48.5",
+ "windows_i686_msvc 0.48.5",
+ "windows_x86_64_gnu 0.48.5",
+ "windows_x86_64_gnullvm 0.48.5",
+ "windows_x86_64_msvc 0.48.5",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd"
+dependencies = [
+ "windows_aarch64_gnullvm 0.52.0",
+ "windows_aarch64_msvc 0.52.0",
+ "windows_i686_gnu 0.52.0",
+ "windows_i686_msvc 0.52.0",
+ "windows_x86_64_gnu 0.52.0",
+ "windows_x86_64_gnullvm 0.52.0",
+ "windows_x86_64_msvc 0.52.0",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04"
+
+[[package]]
+name = "winnow"
+version = "0.5.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a7cad8365489051ae9f054164e459304af2e7e9bb407c958076c8bf4aef52da5"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "winreg"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a277a57398d4bfa075df44f501a17cfdf8542d224f0d36095a2adc7aee4ef0a5"
+dependencies = [
+ "cfg-if",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "x25519-dalek"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a0c105152107e3b96f6a00a65e86ce82d9b125230e1c4302940eca58ff71f4f"
+dependencies = [
+ "curve25519-dalek",
+ "rand_core 0.5.1",
+ "zeroize",
+]
+
+[[package]]
+name = "xattr"
+version = "1.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8da84f1a25939b27f6820d92aed108f83ff920fdf11a7b19366c27c4cda81d4f"
+dependencies = [
+ "libc",
+ "linux-raw-sys",
+ "rustix",
+]
+
+[[package]]
+name = "zerocopy"
+version = "0.7.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be"
+dependencies = [
+ "zerocopy-derive",
+]
+
+[[package]]
+name = "zerocopy-derive"
+version = "0.7.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "zeroize"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d"
+dependencies = [
+ "zeroize_derive",
+]
+
+[[package]]
+name = "zeroize_derive"
+version = "1.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "zip"
+version = "0.6.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "760394e246e4c28189f19d488c058bf16f564016aefac5d32bb1f3b51d5e9261"
+dependencies = [
+ "byteorder",
+ "bzip2",
+ "crc32fast",
+ "crossbeam-utils",
+ "flate2",
+ "time",
+]
+
+[[package]]
+name = "zstd"
+version = "0.12.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a27595e173641171fc74a1232b7b1c7a7cb6e18222c11e9dfb9888fa424c53c"
+dependencies = [
+ "zstd-safe 6.0.6",
+]
+
+[[package]]
+name = "zstd"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bffb3309596d527cfcba7dfc6ed6052f1d39dfbd7c867aa2e865e4a449c10110"
+dependencies = [
+ "zstd-safe 7.0.0",
+]
+
+[[package]]
+name = "zstd-safe"
+version = "6.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee98ffd0b48ee95e6c5168188e44a54550b1564d9d530ee21d5f0eaed1069581"
+dependencies = [
+ "libc",
+ "zstd-sys",
+]
+
+[[package]]
+name = "zstd-safe"
+version = "7.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43747c7422e2924c11144d5229878b98180ef8b06cca4ab5af37afc8a8d8ea3e"
+dependencies = [
+ "zstd-sys",
+]
+
+[[package]]
+name = "zstd-sys"
+version = "2.0.9+zstd.1.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e16efa8a874a0481a574084d34cc26fdb3b99627480f785888deb6386506656"
+dependencies = [
+ "cc",
+ "pkg-config",
+]
diff --git a/nixpkgs/pkgs/development/tools/rye/default.nix b/nixpkgs/pkgs/development/tools/rye/default.nix
new file mode 100644
index 000000000000..aa3bb0674577
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rye/default.nix
@@ -0,0 +1,66 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, installShellFiles
+, pkg-config
+, openssl
+, stdenv
+, CoreServices
+, Libsystem
+, SystemConfiguration
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rye";
+  version = "0.22.0";
+
+  src = fetchFromGitHub {
+    owner = "mitsuhiko";
+    repo = "rye";
+    rev = "refs/tags/${version}";
+    hash = "sha256-gM/Vn/eBPZ39568LqUXyx+ZTTsKAVur30Qrl3GS1ID8=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "dialoguer-0.10.4" = "sha256-WDqUKOu7Y0HElpPxf2T8EpzAY3mY8sSn9lf0V0jyAFc=";
+      "monotrail-utils-0.0.1" = "sha256-h2uxWsDrU9j2C5OWbYsfGz0S1VsPzYrfksQVEkwd2ys=";
+    };
+  };
+
+  env = {
+    OPENSSL_NO_VENDOR = 1;
+  };
+
+  nativeBuildInputs = [ installShellFiles pkg-config ];
+
+  buildInputs = [
+    openssl
+  ]
+  ++ lib.optionals stdenv.isDarwin [
+    CoreServices
+    Libsystem
+    SystemConfiguration
+  ];
+
+  postInstall = lib.optionalString (stdenv.buildPlatform.canExecute stdenv.hostPlatform) ''
+    installShellCompletion --cmd rye \
+      --bash <($out/bin/rye self completion -s bash) \
+      --fish <($out/bin/rye self completion -s fish) \
+      --zsh <($out/bin/rye self completion -s zsh)
+  '';
+
+  checkFlags = [
+    "--skip=utils::test_is_inside_git_work_tree"
+  ];
+
+  meta = with lib; {
+    description = "A tool to easily manage python dependencies and environments";
+    homepage = "https://github.com/mitsuhiko/rye";
+    changelog = "https://github.com/mitsuhiko/rye/releases/tag/${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ GaetanLepage ];
+    mainProgram = "rye";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/sass/Gemfile b/nixpkgs/pkgs/development/tools/sass/Gemfile
new file mode 100644
index 000000000000..e46ea120f725
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/sass/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'sass'
diff --git a/nixpkgs/pkgs/development/tools/sass/Gemfile.lock b/nixpkgs/pkgs/development/tools/sass/Gemfile.lock
new file mode 100644
index 000000000000..1904c01ecf26
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/sass/Gemfile.lock
@@ -0,0 +1,21 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    ffi (1.16.3)
+    rb-fsevent (0.11.2)
+    rb-inotify (0.10.1)
+      ffi (~> 1.0)
+    sass (3.7.4)
+      sass-listen (~> 4.0.0)
+    sass-listen (4.0.0)
+      rb-fsevent (~> 0.9, >= 0.9.4)
+      rb-inotify (~> 0.9, >= 0.9.7)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  sass
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/development/tools/sass/default.nix b/nixpkgs/pkgs/development/tools/sass/default.nix
new file mode 100644
index 000000000000..8c76ac4e017b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/sass/default.nix
@@ -0,0 +1,17 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "sass";
+  gemdir = ./.;
+  exes = [ "sass" "sass-convert" "scss" ];
+
+  passthru.updateScript = bundlerUpdateScript "sass";
+
+  meta = with lib; {
+    description = "Tools and Ruby libraries for the CSS3 extension languages: Sass and SCSS";
+    homepage    = "https://sass-lang.com";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ romildo manveru nicknovitski ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/sass/gemset.nix b/nixpkgs/pkgs/development/tools/sass/gemset.nix
new file mode 100644
index 000000000000..5cadd7870b86
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/sass/gemset.nix
@@ -0,0 +1,55 @@
+{
+  ffi = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1yvii03hcgqj30maavddqamqy50h7y6xcn2wcyq72wn823zl4ckd";
+      type = "gem";
+    };
+    version = "1.16.3";
+  };
+  rb-fsevent = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zmf31rnpm8553lqwibvv3kkx0v7majm1f341xbxc0bk5sbhp423";
+      type = "gem";
+    };
+    version = "0.11.2";
+  };
+  rb-inotify = {
+    dependencies = ["ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1jm76h8f8hji38z3ggf4bzi8vps6p7sagxn3ab57qc0xyga64005";
+      type = "gem";
+    };
+    version = "0.10.1";
+  };
+  sass = {
+    dependencies = ["sass-listen"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0p95lhs0jza5l7hqci1isflxakz83xkj97lkvxl919is0lwhv2w0";
+      type = "gem";
+    };
+    version = "3.7.4";
+  };
+  sass-listen = {
+    dependencies = ["rb-fsevent" "rb-inotify"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xw3q46cmahkgyldid5hwyiwacp590zj2vmswlll68ryvmvcp7df";
+      type = "gem";
+    };
+    version = "4.0.0";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/sassc/default.nix b/nixpkgs/pkgs/development/tools/sassc/default.nix
new file mode 100644
index 000000000000..15995303748f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/sassc/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, libsass }:
+
+stdenv.mkDerivation rec {
+  pname = "sassc";
+  version = "3.6.2"; # also check libsass for updates
+
+  src = fetchFromGitHub {
+    owner = "sass";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-jcs3+orRqKt9C3c2FTdeaj4H2rBP74lW3HF8CHSm7lQ=";
+  };
+
+  postPatch = ''
+    export SASSC_VERSION=${version}
+  '';
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  buildInputs = [ libsass ];
+
+  meta = with lib; {
+    description = "A front-end for libsass";
+    homepage = "https://github.com/sass/sassc/";
+    license = licenses.mit;
+    mainProgram = "sassc";
+    maintainers = with maintainers; [ codyopel pjones ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/sauce-connect/default.nix b/nixpkgs/pkgs/development/tools/sauce-connect/default.nix
new file mode 100644
index 000000000000..ef47a2e318cd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/sauce-connect/default.nix
@@ -0,0 +1,48 @@
+{ stdenv, lib, fetchurl, zlib, unzip }:
+
+stdenv.mkDerivation rec {
+  pname = "sauce-connect";
+  version = "4.9.1";
+
+  passthru = {
+    sources = {
+      x86_64-linux = fetchurl {
+        url = "https://saucelabs.com/downloads/sc-${version}-linux.tar.gz";
+        hash = "sha256-S3vzng6b0giB6Zceaxi62pQOEHysIR/vVQmswkEZ0/M=";
+      };
+      x86_64-darwin = fetchurl {
+        url = "https://saucelabs.com/downloads/sc-${version}-osx.zip";
+        hash = "sha256-6tJayqo+p7PMz8M651ikHz6tEjGjRIffOqQBchkpW5Q=";
+      };
+      aarch64-darwin = passthru.sources.x86_64-darwin;
+    };
+  };
+
+  src = passthru.sources.${stdenv.hostPlatform.system}
+    or (throw "Unsupported system: ${stdenv.hostPlatform.system}");
+
+  nativeBuildInputs = [ unzip ];
+
+  patchPhase = lib.optionalString stdenv.isLinux ''
+    patchelf \
+      --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+      --set-rpath "$out/lib:${lib.makeLibraryPath [zlib]}" \
+      bin/sc
+  '';
+
+  installPhase = ''
+    mkdir -p $out
+    cp -r * $out
+  '';
+
+  dontStrip = true;
+
+  meta = with lib; {
+    description = "A secure tunneling app for executing tests securely when testing behind firewalls";
+    sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    homepage = "https://docs.saucelabs.com/reference/sauce-connect/";
+    maintainers = with maintainers; [ offline ];
+    platforms = builtins.attrNames passthru.sources;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/sauce-connect/update.sh b/nixpkgs/pkgs/development/tools/sauce-connect/update.sh
new file mode 100755
index 000000000000..d74cbe577b3c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/sauce-connect/update.sh
@@ -0,0 +1,27 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p common-updater-scripts curl jq
+# API documentation: https://docs.saucelabs.com/dev/api/connect/
+
+set -Eeuo pipefail
+shopt -s lastpipe
+die() {
+    echo -e "${BASH_SOURCE[0]}:${BASH_LINENO[0]}" ERROR: "$@" >&2
+    exit 1
+}
+# shellcheck disable=2154
+trap 's=$?; die "$BASH_COMMAND"; exit $s' ERR
+
+# Versions may not be updated simultaneously across all platforms, so need to figure out the latest
+# version that includes both platforms. For example, currently the latest on Linux is 4.9.2 while
+# Mac is 4.9.1.
+response=$(curl -fsSL 'https://api.us-west-1.saucelabs.com/rest/v1/public/tunnels/info/versions?all=true')
+all_versions=$(jq --exit-status --raw-output \
+    '.all_downloads | to_entries[] | select(.value | has("linux") and has("osx")) | .key' \
+    <<< "$response")
+latest_version=$(sort --version-sort <<< "$all_versions" | tail -n 1)
+for platform in x86_64-linux x86_64-darwin; do
+    update-source-version sauce-connect 0 "sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=" \
+        --source-key="passthru.sources.$platform"
+    update-source-version sauce-connect "$latest_version" \
+        --source-key="passthru.sources.$platform"
+done
diff --git a/nixpkgs/pkgs/development/tools/sca2d/default.nix b/nixpkgs/pkgs/development/tools/sca2d/default.nix
new file mode 100644
index 000000000000..eb745e5bd2c6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/sca2d/default.nix
@@ -0,0 +1,50 @@
+{ lib
+, python3
+, fetchFromGitLab
+, fetchFromGitHub
+}:
+let
+  python = python3.override {
+    packageOverrides = self: super: {
+      lark010 = super.lark.overridePythonAttrs (old: rec {
+        version = "0.10.0";
+
+        src = fetchFromGitHub {
+          owner = "lark-parser";
+          repo = "lark";
+          rev = "refs/tags/${version}";
+          sha256 = "sha256-ctdPPKPSD4weidyhyj7RCV89baIhmuxucF3/Ojx1Efo=";
+        };
+
+        patches = [ ];
+
+        disabledTestPaths = [ "tests/test_nearley/test_nearley.py" ];
+      });
+    };
+    self = python;
+  };
+in
+python.pkgs.buildPythonApplication rec {
+  pname = "sca2d";
+  version = "0.2.0";
+  format = "setuptools";
+
+  src = fetchFromGitLab {
+    owner = "bath_open_instrumentation_group";
+    repo = "sca2d";
+    rev = "v${version}";
+    hash = "sha256-P+7g57AH8H7q0hBE2I9w8A+bN5M6MPbc9gA0b889aoQ=";
+  };
+
+  propagatedBuildInputs = with python.pkgs; [ lark010 colorama ];
+
+  pythonImportsCheck = [ "sca2d" ];
+
+  meta = with lib; {
+    description = "An experimental static code analyser for OpenSCAD";
+    homepage = "https://gitlab.com/bath_open_instrumentation_group/sca2d";
+    changelog = "https://gitlab.com/bath_open_instrumentation_group/sca2d/-/blob/${src.rev}/CHANGELOG.md";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ traxys ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/scalafix/default.nix b/nixpkgs/pkgs/development/tools/scalafix/default.nix
new file mode 100644
index 000000000000..3d57bdbd92c5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/scalafix/default.nix
@@ -0,0 +1,46 @@
+{ lib, stdenv, jre, coursier, makeWrapper, installShellFiles, setJavaClassPath }:
+
+let
+  baseName = "scalafix";
+  version = "0.10.0";
+  deps = stdenv.mkDerivation {
+    name = "${baseName}-deps-${version}";
+    buildCommand = ''
+      export COURSIER_CACHE=$(pwd)
+      ${coursier}/bin/cs fetch ch.epfl.scala:scalafix-cli_2.13.8:${version} > deps
+      mkdir -p $out/share/java
+      cp $(< deps) $out/share/java/
+    '';
+    outputHashMode = "recursive";
+    outputHash     = "sha256-lDeg90L484MggtQ2a9OyHv4UcfLPjzG3OJZCaWW2AC8=";
+  };
+in
+stdenv.mkDerivation {
+  pname = baseName;
+  inherit version;
+
+  nativeBuildInputs = [ makeWrapper installShellFiles setJavaClassPath ];
+  buildInputs = [ deps ];
+
+  dontUnpack = true;
+
+  installPhase = ''
+    makeWrapper ${jre}/bin/java $out/bin/${baseName} \
+      --add-flags "-cp $CLASSPATH scalafix.cli.Cli"
+
+    installShellCompletion --cmd ${baseName} \
+      --bash <($out/bin/${baseName} --bash) \
+      --zsh  <($out/bin/${baseName} --zsh)
+  '';
+
+  installCheckPhase = ''
+    $out/bin/${baseName} --version | grep -q "${version}"
+  '';
+
+  meta = with lib; {
+    description = "Refactoring and linting tool for Scala";
+    homepage = "https://scalacenter.github.io/scalafix/";
+    license = licenses.bsd3;
+    maintainers = [ maintainers.tomahna ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/scalafmt/default.nix b/nixpkgs/pkgs/development/tools/scalafmt/default.nix
new file mode 100644
index 000000000000..db65c8f3b79c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/scalafmt/default.nix
@@ -0,0 +1,47 @@
+{ lib, stdenv, jre, coursier, makeWrapper, setJavaClassPath }:
+
+let
+  baseName = "scalafmt";
+  version = "3.7.9";
+  deps = stdenv.mkDerivation {
+    name = "${baseName}-deps-${version}";
+    buildCommand = ''
+      export COURSIER_CACHE=$(pwd)
+      ${coursier}/bin/cs fetch org.scalameta:scalafmt-cli_2.13:${version} > deps
+      mkdir -p $out/share/java
+      cp $(< deps) $out/share/java/
+    '';
+    outputHashMode = "recursive";
+    outputHash = "sha256-r4vv62H0AryjZb+34fVHvqvndipOYyf6XpQC9u8Dxso=";
+  };
+in
+stdenv.mkDerivation {
+  pname = baseName;
+  inherit version;
+
+  nativeBuildInputs = [ makeWrapper setJavaClassPath ];
+  buildInputs = [ deps ];
+
+  dontUnpack = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    makeWrapper ${jre}/bin/java $out/bin/${baseName} \
+      --add-flags "-cp $CLASSPATH org.scalafmt.cli.Cli"
+
+    runHook postInstall
+  '';
+
+  installCheckPhase = ''
+    $out/bin/${baseName} --version | grep -q "${version}"
+  '';
+
+  meta = with lib; {
+    description = "Opinionated code formatter for Scala";
+    homepage = "http://scalameta.org/scalafmt";
+    license = licenses.asl20;
+    maintainers = [ maintainers.markus1189 ];
+    mainProgram = "scalafmt";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/scenebuilder/default.nix b/nixpkgs/pkgs/development/tools/scenebuilder/default.nix
new file mode 100644
index 000000000000..44e81b20bc2b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/scenebuilder/default.nix
@@ -0,0 +1,79 @@
+{ lib, stdenv, fetchFromGitHub, openjdk20, maven, makeDesktopItem, copyDesktopItems, makeWrapper, glib, wrapGAppsHook }:
+
+let
+  jdk = openjdk20.override (lib.optionalAttrs stdenv.isLinux {
+    enableJavaFX = true;
+  });
+  maven' = maven.override {
+    inherit jdk;
+  };
+  selectSystem = attrs:
+    attrs.${stdenv.hostPlatform.system}
+      or (throw "Unsupported system: ${stdenv.hostPlatform.system}");
+in
+maven'.buildMavenPackage rec {
+  pname = "scenebuilder";
+  version = "20.0.0";
+
+  src = fetchFromGitHub {
+    owner = "gluonhq";
+    repo = pname;
+    rev = version;
+    hash = "sha256-Og+dzkJ6+YH0fD4HJw8gUKGgvQuNw17BxgzZMP/bEA0=";
+  };
+
+  buildDate = "2022-10-07T00:00:00+01:00"; # v20.0.0 release date
+  mvnParameters = "-Dmaven.test.skip -Dproject.build.outputTimestamp=${buildDate} -DbuildTimestamp=${buildDate}";
+  mvnHash = selectSystem {
+    x86_64-linux = "sha256-QwxA3lKVkRG5CV2GIwfVFPOj112pHr7bDlZJD6KwrHc=";
+    aarch64-linux = "sha256-cO5nHSvv2saBuAjq47A+GW9vFWEM+ysXyZgI0Oe/F70=";
+  };
+
+  nativeBuildInputs = [ copyDesktopItems makeWrapper glib wrapGAppsHook ];
+
+  dontWrapGApps = true; # prevent double wrapping
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin $out/share/java $out/share/{${pname},icons/hicolor/128x128/apps}
+    cp app/target/lib/scenebuilder-${version}-SNAPSHOT-all.jar $out/share/java/${pname}.jar
+
+    cp app/src/main/resources/com/oracle/javafx/scenebuilder/app/SB_Logo.png $out/share/icons/hicolor/128x128/apps/scenebuilder.png
+
+    runHook postInstall
+  '';
+
+  postFixup = ''
+    makeWrapper ${jdk}/bin/java $out/bin/${pname} \
+      --add-flags "--add-modules javafx.web,javafx.fxml,javafx.swing,javafx.media" \
+      --add-flags "--add-opens=javafx.fxml/javafx.fxml=ALL-UNNAMED" \
+      --add-flags "-cp $out/share/java/${pname}.jar" \
+      --add-flags "com.oracle.javafx.scenebuilder.app.SceneBuilderApp" \
+      "''${gappsWrapperArgs[@]}"
+    '';
+
+  desktopItems = [ (makeDesktopItem {
+    name = "scenebuilder";
+    exec = "scenebuilder";
+    icon = "scenebuilder";
+    comment = "A visual, drag'n'drop, layout tool for designing JavaFX application user interfaces.";
+    desktopName = "Scene Builder";
+    mimeTypes = [ "application/java" "application/java-vm" "application/java-archive" ];
+    categories = [ "Development" ];
+  }) ];
+
+  meta = with lib; {
+    broken = stdenv.isDarwin;
+    description = "A visual, drag'n'drop, layout tool for designing JavaFX application user interfaces.";
+    homepage = "https://gluonhq.com/products/scene-builder/";
+    sourceProvenance = with sourceTypes; [
+      fromSource
+      binaryBytecode  # deps
+    ];
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ wirew0rm ];
+    platforms = platforms.all;
+  };
+}
+
diff --git a/nixpkgs/pkgs/development/tools/scenic-view/default.nix b/nixpkgs/pkgs/development/tools/scenic-view/default.nix
new file mode 100644
index 000000000000..3d0c69d66cf7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/scenic-view/default.nix
@@ -0,0 +1,122 @@
+{ lib, stdenv, fetchFromGitHub, openjdk, openjfx, gradle_7, makeDesktopItem, perl, writeText, makeWrapper }:
+let
+  jdk = openjdk.override (lib.optionalAttrs stdenv.isLinux {
+    enableJavaFX = true;
+    openjfx = openjfx.override { withWebKit = true; };
+  });
+
+  pname = "scenic-view";
+  version = "11.0.2";
+
+  src = fetchFromGitHub {
+    owner = "JonathanGiles";
+    repo = pname;
+    rev = version;
+    sha256 = "1idfh9hxqs4fchr6gvhblhvjqk4mpl4rnpi84vn1l3yb700z7dwy";
+  };
+
+  gradle = gradle_7;
+
+  deps = stdenv.mkDerivation {
+    name = "${pname}-deps";
+    inherit src;
+
+    nativeBuildInputs = [ jdk perl gradle ];
+
+    buildPhase = ''
+      export GRADLE_USER_HOME=$(mktemp -d);
+      gradle --no-daemon build
+    '';
+
+    # Mavenize dependency paths
+    # e.g. org.codehaus.groovy/groovy/2.4.0/{hash}/groovy-2.4.0.jar -> org/codehaus/groovy/groovy/2.4.0/groovy-2.4.0.jar
+    installPhase = ''
+      find $GRADLE_USER_HOME/caches/modules-2 -type f -regex '.*\.\(jar\|pom\)' \
+        | perl -pe 's#(.*/([^/]+)/([^/]+)/([^/]+)/[0-9a-f]{30,40}/([^/\s]+))$# ($x = $2) =~ tr|\.|/|; "install -Dm444 $1 \$out/$x/$3/$4/$5" #e' \
+        | sh
+    '';
+
+    outputHashAlgo =  "sha256";
+    outputHashMode = "recursive";
+    outputHash = "0d6qs0wg2nfxyq85q46a8dcdqknz9pypb2qmvc8k2w8vcdac1y7n";
+  };
+
+  # Point to our local deps repo
+  gradleInit = writeText "init.gradle" ''
+    settingsEvaluated { settings ->
+      settings.pluginManagement {
+        repositories {
+          clear()
+          maven { url '${deps}' }
+        }
+      }
+    }
+    logger.lifecycle 'Replacing Maven repositories with ${deps}...'
+    gradle.projectsLoaded {
+      rootProject.allprojects {
+        buildscript {
+          repositories {
+            clear()
+            maven { url '${deps}' }
+          }
+        }
+        repositories {
+          clear()
+          maven { url '${deps}' }
+        }
+      }
+    }
+  '';
+
+  desktopItem = makeDesktopItem {
+    name = pname;
+    desktopName = pname;
+    exec = pname;
+    comment = "JavaFx application to visualize and modify the scenegraph of running JavaFx applications.";
+    mimeTypes = [ "application/java" "application/java-vm" "application/java-archive" ];
+    categories = [ "Development" ];
+  };
+
+in stdenv.mkDerivation rec {
+  inherit pname version src;
+  nativeBuildInputs = [ jdk gradle makeWrapper ];
+
+  buildPhase = ''
+    runHook preBuild
+
+    export GRADLE_USER_HOME=$(mktemp -d)
+    gradle --offline --no-daemon --info --init-script ${gradleInit} build
+
+    runHook postBuild
+    '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin $out/share/${pname}
+    cp build/libs/scenicview.jar $out/share/${pname}/${pname}.jar
+    makeWrapper ${jdk}/bin/java $out/bin/${pname} --add-flags "-jar $out/share/${pname}/${pname}.jar"
+
+    runHook postInstall
+  '';
+
+  desktopItems = [ desktopItem ];
+
+  meta = with lib; {
+    broken = stdenv.isDarwin;
+    description = "JavaFx application to visualize and modify the scenegraph of running JavaFx applications.";
+    longDescription = ''
+      A JavaFX application designed to make it simple to understand the current state of your application scenegraph
+      and to also easily manipulate properties of the scenegraph without having to keep editing your code.
+      This lets you find bugs and get things pixel perfect without having to do the compile-check-compile dance.
+    '';
+    homepage = "https://github.com/JonathanGiles/scenic-view/";
+    sourceProvenance = with sourceTypes; [
+      fromSource
+      binaryBytecode  # deps
+    ];
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ wirew0rm ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/schemacrawler/default.nix b/nixpkgs/pkgs/development/tools/schemacrawler/default.nix
new file mode 100644
index 000000000000..c47ea26c745c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/schemacrawler/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, stdenv
+, fetchzip
+, jre
+, makeWrapper
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "schemacrawler";
+  version = "16.21.1";
+
+  src = fetchzip {
+    url = "https://github.com/schemacrawler/SchemaCrawler/releases/download/v${finalAttrs.version}/schemacrawler-${finalAttrs.version}-bin.zip";
+    hash = "sha256-9tZGSWOUpQAAOQAbYxx0w734EKq2BdSYyIR4zmor4+Y=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    cp -r {config,lib} $out/
+
+    makeWrapper ${jre}/bin/java $out/bin/schemacrawler \
+      --add-flags "-cp $out/lib/*:$out/config" \
+      --add-flags schemacrawler.Main
+
+    runHook postInstall
+  '';
+
+  preferLocalBuild = true;
+
+  meta = with lib; {
+    description = "Database schema discovery and comprehension tool";
+    homepage = "https://www.schemacrawler.com/";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = with licenses; [ epl10 gpl3Only lgpl3Only ];
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ elohmeier ];
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/scry/default.nix b/nixpkgs/pkgs/development/tools/scry/default.nix
new file mode 100644
index 000000000000..28a6c09177b4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/scry/default.nix
@@ -0,0 +1,40 @@
+{ lib, fetchFromGitHub, crystal, coreutils, makeWrapper, bash }:
+
+crystal.buildCrystalPackage rec {
+  pname = "scry";
+  version = "0.9.1";
+
+  src = fetchFromGitHub {
+    owner = "crystal-lang-tools";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-hqyG1aKY3M8q8lZEKzpUUKl9jS7NF+VMsma6+C0sCbg=";
+  };
+
+  # a bunch of tests fail when built in the sandbox while perfectly fine outside
+  postPatch = ''
+    rm spec/scry/{client,completion_provider,context,executable}_spec.cr
+  '';
+
+  format = "shards";
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ bash ];
+
+  shardsFile = ./shards.nix;
+
+  postFixup = ''
+    wrapProgram $out/bin/scry \
+      --prefix PATH : ${lib.makeBinPath [ crystal coreutils ]}
+  '';
+
+  # the binary doesn't take any arguments, so this will hang
+  doInstallCheck = false;
+
+  meta = with lib; {
+    description = "Code analysis server for the Crystal programming language";
+    homepage = "https://github.com/crystal-lang-tools/scry";
+    license = licenses.mit;
+    maintainers = with maintainers; [ peterhoeg Br1ght0ne ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/scry/shards.nix b/nixpkgs/pkgs/development/tools/scry/shards.nix
new file mode 100644
index 000000000000..df3d0848471a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/scry/shards.nix
@@ -0,0 +1,14 @@
+{
+  json_mapping = {
+    owner = "crystal-lang";
+    repo = "json_mapping.cr";
+    rev = "v0.1.0";
+    sha256 = "1qq5vs2085x7cwmp96rrjns0yz9kiz1lycxynfbz5psxll6b8p55";
+  };
+  lsp = {
+    owner = "crystal-lang-tools";
+    repo = "lsp";
+    rev = "v0.2.0";
+    sha256 = "1lnviqrywh0w05mx67mzw7d1qz328p52z4k69pcqw66gs44i7b5c";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/scss-lint/Gemfile b/nixpkgs/pkgs/development/tools/scss-lint/Gemfile
new file mode 100644
index 000000000000..05eac2332f5b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/scss-lint/Gemfile
@@ -0,0 +1,2 @@
+source "https://rubygems.org"
+gem "scss_lint"
diff --git a/nixpkgs/pkgs/development/tools/scss-lint/Gemfile.lock b/nixpkgs/pkgs/development/tools/scss-lint/Gemfile.lock
new file mode 100644
index 000000000000..08e2fe4e64db
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/scss-lint/Gemfile.lock
@@ -0,0 +1,25 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    ffi (1.9.25)
+    rake (12.3.1)
+    rb-fsevent (0.10.3)
+    rb-inotify (0.9.10)
+      ffi (>= 0.5.0, < 2)
+    sass (3.7.2)
+      sass-listen (~> 4.0.0)
+    sass-listen (4.0.0)
+      rb-fsevent (~> 0.9, >= 0.9.4)
+      rb-inotify (~> 0.9, >= 0.9.7)
+    scss_lint (0.57.1)
+      rake (>= 0.9, < 13)
+      sass (~> 3.5, >= 3.5.5)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  scss_lint
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/development/tools/scss-lint/default.nix b/nixpkgs/pkgs/development/tools/scss-lint/default.nix
new file mode 100644
index 000000000000..866a860905c9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/scss-lint/default.nix
@@ -0,0 +1,17 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "scss_lint";
+  gemdir = ./.;
+  exes = [ "scss-lint" ];
+
+  passthru.updateScript = bundlerUpdateScript "scss-lint";
+
+  meta = with lib; {
+    description = "A tool to help keep your SCSS files clean and readable";
+    homepage    = "https://github.com/brigade/scss-lint";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ lovek323 nicknovitski ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/scss-lint/gemset.nix b/nixpkgs/pkgs/development/tools/scss-lint/gemset.nix
new file mode 100644
index 000000000000..027522e58f8b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/scss-lint/gemset.nix
@@ -0,0 +1,62 @@
+{
+  ffi = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jpm2dis1j7zvvy3lg7axz9jml316zrn7s0j59vyq3qr127z0m7q";
+      type = "gem";
+    };
+    version = "1.9.25";
+  };
+  rake = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1idi53jay34ba9j68c3mfr9wwkg3cd9qh0fn9cg42hv72c6q8dyg";
+      type = "gem";
+    };
+    version = "12.3.1";
+  };
+  rb-fsevent = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1lm1k7wpz69jx7jrc92w3ggczkjyjbfziq5mg62vjnxmzs383xx8";
+      type = "gem";
+    };
+    version = "0.10.3";
+  };
+  rb-inotify = {
+    dependencies = ["ffi"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0yfsgw5n7pkpyky6a9wkf1g9jafxb0ja7gz0qw0y14fd2jnzfh71";
+      type = "gem";
+    };
+    version = "0.9.10";
+  };
+  sass = {
+    dependencies = ["sass-listen"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1phs6hnd8b95m7n5wbh5bsclmwaajd1sqlgw9fmj72bfqldbmcqa";
+      type = "gem";
+    };
+    version = "3.7.2";
+  };
+  sass-listen = {
+    dependencies = ["rb-fsevent" "rb-inotify"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xw3q46cmahkgyldid5hwyiwacp590zj2vmswlll68ryvmvcp7df";
+      type = "gem";
+    };
+    version = "4.0.0";
+  };
+  scss_lint = {
+    dependencies = ["rake" "sass"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0dv4ff1lqbgqdx99nwg059c983dhw67kvvjd21f6vf62cjx09lpn";
+      type = "gem";
+    };
+    version = "0.57.1";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/sd-local/default.nix b/nixpkgs/pkgs/development/tools/sd-local/default.nix
new file mode 100644
index 000000000000..b8a01e2633b5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/sd-local/default.nix
@@ -0,0 +1,24 @@
+{ lib, fetchFromGitHub, buildGoModule }:
+
+buildGoModule rec {
+  pname = "sd-local";
+  version = "1.0.52";
+
+  src = fetchFromGitHub {
+    owner = "screwdriver-cd";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-2EWLi42ztuohouhMZ3DXa2wHx1tgPAUH0IKbn6lQeF0=";
+  };
+
+  vendorHash = "sha256-uHu8jPPQCJAhXE+Lzw5/9wyw7sL5REQJsPsYII+Nusc=";
+
+  subPackages = [ "." ];
+
+  meta = with lib; {
+    description = "screwdriver.cd local mode";
+    homepage = "https://github.com/screwdriver-cd/sd-local";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ midchildan ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/sea-orm-cli/default.nix b/nixpkgs/pkgs/development/tools/sea-orm-cli/default.nix
new file mode 100644
index 000000000000..a983924c0c01
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/sea-orm-cli/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchCrate
+, pkg-config
+, openssl
+, darwin
+}:
+rustPlatform.buildRustPackage rec {
+  pname = "sea-orm-cli";
+  version = "0.12.10";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-BVQbzP/+TJFqhnBeerYiLMpJJ8q9x582DR5X10K027U=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ openssl ]
+    ++ lib.optionals stdenv.isDarwin [ darwin.apple_sdk.frameworks.SystemConfiguration ];
+
+  cargoHash = "sha256-qCcWReo72eHN9MoTVAmSHYVhpqw0kZ9VU/plYRcirVA=";
+
+  meta = with lib; {
+    homepage = "https://www.sea-ql.org/SeaORM";
+    description = " Command line utility for SeaORM";
+    license = with licenses; [ mit /* or */ asl20 ];
+    maintainers = with maintainers; [ traxys ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/selene/default.nix b/nixpkgs/pkgs/development/tools/selene/default.nix
new file mode 100644
index 000000000000..dbaeb264b358
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/selene/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, robloxSupport ? true
+, pkg-config
+, openssl
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "selene";
+  version = "0.26.1";
+
+  src = fetchFromGitHub {
+    owner = "kampfkarren";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-0imHwZNyhJXFai1J5tHqnQ6Ta10nETQ5TILGH0bHc8Y=";
+  };
+
+  cargoHash = "sha256-Lm3agCnxDxcj7op17uiokK8Y790oMxwHJStvP/9DsI0=";
+
+  nativeBuildInputs = lib.optionals robloxSupport [
+    pkg-config
+  ];
+
+  buildInputs = lib.optionals robloxSupport [
+    openssl
+  ] ++ lib.optionals (robloxSupport && stdenv.isDarwin) [
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  buildNoDefaultFeatures = !robloxSupport;
+
+  meta = with lib; {
+    description = "A blazing-fast modern Lua linter written in Rust";
+    homepage = "https://github.com/kampfkarren/selene";
+    changelog = "https://github.com/kampfkarren/selene/blob/${version}/CHANGELOG.md";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/selenium/chromedriver/default.nix b/nixpkgs/pkgs/development/tools/selenium/chromedriver/default.nix
new file mode 100644
index 000000000000..55ce40832f9e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/selenium/chromedriver/default.nix
@@ -0,0 +1,78 @@
+{ lib, stdenv, fetchurl, unzip, makeWrapper
+, cairo, fontconfig, freetype, gdk-pixbuf, glib
+, glibc, gtk2, libX11, nspr, nss, pango
+, libxcb, libXi, libXrender, libXext, dbus
+, testers, chromedriver
+}:
+
+let
+  upstream-info = (import ../../../../applications/networking/browsers/chromium/upstream-info.nix).stable.chromedriver;
+  allSpecs = {
+    x86_64-linux = {
+      system = "linux64";
+      hash = upstream-info.hash_linux;
+    };
+
+    x86_64-darwin = {
+      system = "mac-x64";
+      hash = upstream-info.hash_darwin;
+    };
+
+    aarch64-darwin = {
+      system = "mac-arm64";
+      hash = upstream-info.hash_darwin_aarch64;
+    };
+  };
+
+  spec = allSpecs.${stdenv.hostPlatform.system}
+    or (throw "missing chromedriver binary for ${stdenv.hostPlatform.system}");
+
+  libs = lib.makeLibraryPath [
+    stdenv.cc.cc.lib
+    cairo fontconfig freetype
+    gdk-pixbuf glib gtk2
+    libX11 nspr nss pango libXrender
+    libxcb libXext libXi
+    dbus
+  ];
+
+in stdenv.mkDerivation rec {
+  pname = "chromedriver";
+  version = upstream-info.version;
+
+  src = fetchurl {
+    url = "https://edgedl.me.gvt1.com/edgedl/chrome/chrome-for-testing/${version}/${spec.system}/chromedriver-${spec.system}.zip";
+    hash = spec.hash;
+  };
+
+  nativeBuildInputs = [ unzip makeWrapper ];
+
+  unpackPhase = "unzip $src";
+
+  installPhase = ''
+    install -m755 -D "chromedriver-${spec.system}/chromedriver" $out/bin/chromedriver
+  '' + lib.optionalString (!stdenv.isDarwin) ''
+    patchelf --set-interpreter ${glibc.out}/lib/ld-linux-x86-64.so.2 $out/bin/chromedriver
+    wrapProgram "$out/bin/chromedriver" --prefix LD_LIBRARY_PATH : "${libs}"
+  '';
+
+  passthru.tests.version = testers.testVersion { package = chromedriver; };
+
+  meta = with lib; {
+    homepage = "https://chromedriver.chromium.org/";
+    description = "A WebDriver server for running Selenium tests on Chrome";
+    longDescription = ''
+      WebDriver is an open source tool for automated testing of webapps across
+      many browsers. It provides capabilities for navigating to web pages, user
+      input, JavaScript execution, and more. ChromeDriver is a standalone
+      server that implements the W3C WebDriver standard.
+    '';
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ goibhniu marsam primeos ];
+    # Note from primeos: By updating Chromium I also update Google Chrome and
+    # ChromeDriver.
+    platforms = attrNames allSpecs;
+    mainProgram = "chromedriver";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/selenium/htmlunit-driver/default.nix b/nixpkgs/pkgs/development/tools/selenium/htmlunit-driver/default.nix
new file mode 100644
index 000000000000..dcea17d807d9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/selenium/htmlunit-driver/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "htmlunit-driver-standalone";
+  version = "2.27";
+
+  src = fetchurl {
+    url = "https://github.com/SeleniumHQ/htmlunit-driver/releases/download/${version}/htmlunit-driver-${version}-with-dependencies.jar";
+    sha256 = "1sd3cwpamcbq9pv0mvcm8x6minqrlb4i0r12q3jg91girqswm2dp";
+  };
+
+  dontUnpack = true;
+
+  installPhase = "install -D $src $out/share/lib/${pname}-${version}/${pname}-${version}.jar";
+
+  meta = with lib; {
+    homepage = "https://github.com/SeleniumHQ/htmlunit-driver";
+    description = "A WebDriver server for running Selenium tests on the HtmlUnit headless browser";
+    maintainers = with maintainers; [ coconnor offline ];
+    platforms = platforms.all;
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/selenium/selendroid/default.nix b/nixpkgs/pkgs/development/tools/selenium/selendroid/default.nix
new file mode 100644
index 000000000000..66a9b97d0db9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/selenium/selendroid/default.nix
@@ -0,0 +1,49 @@
+{ lib, stdenv, fetchurl, makeWrapper, jdk, selenium-server-standalone }:
+
+let
+    pname = "selendroid-standalone";
+    pluginName = "selendroid-grid-plugin-${version}";
+    version = "0.17.0";
+    srcs = {
+      jar = fetchurl {
+        url = "https://github.com/selendroid/selendroid/releases/download/${version}/selendroid-standalone-${version}-with-dependencies.jar";
+        sha256 = "10lxdsgp711pv8r6dk2aagnbvnn1b25zfqjvz7plc73zqhx1dxvw";
+      };
+      gridPlugin = fetchurl {
+        url = "https://search.maven.org/remotecontent?filepath=io/selendroid/selendroid-grid-plugin/${version}/${pluginName}.jar";
+        sha256 = "1x6cjmp2hpghbgbf8vss0qaj2n4sfl29wp3bc4k1s3hnnpccvz70";
+      };
+    };
+in
+stdenv.mkDerivation {
+  inherit pname version;
+
+  dontUnpack = true;
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ jdk ];
+
+  installPhase = ''
+    mkdir -p $out/share/lib/selendroid
+    cp ${srcs.jar} $out/share/lib/selendroid/selendroid-standalone-${version}.jar
+    cp ${srcs.gridPlugin} $out/share/lib/selendroid/${pluginName}.jar
+
+    makeWrapper ${jdk}/bin/java $out/bin/selendroid \
+      --add-flags "-jar $out/share/lib/selendroid/selendroid-standalone-${version}.jar"
+    makeWrapper ${jdk}/bin/java $out/bin/selendroid-selenium \
+      --add-flags "-Dfile.encoding=UTF-8" \
+      --add-flags "-cp ${selenium-server-standalone}/share/lib/${selenium-server-standalone.name}/${selenium-server-standalone.name}.jar:$out/share/lib/selendroid/${pluginName}.jar" \
+      --add-flags "org.openqa.grid.selenium.GridLauncherV3" \
+      --add-flags "-role hub" \
+      --add-flags "-capabilityMatcher io.selendroid.grid.SelendroidCapabilityMatcher"
+  '';
+
+  meta = with lib; {
+    homepage = "http://selendroid.io/";
+    description = "Test automation for native or hybrid Android apps and the mobile web";
+    maintainers = with maintainers; [ offline ];
+    platforms = platforms.all;
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/selenium/server/default.nix b/nixpkgs/pkgs/development/tools/selenium/server/default.nix
new file mode 100644
index 000000000000..b1cc26bec519
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/selenium/server/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchurl, makeWrapper, jre
+, htmlunit-driver, chromedriver, chromeSupport ? true }:
+
+let
+  minorVersion = "3.141";
+  patchVersion = "59";
+
+in stdenv.mkDerivation rec {
+  pname = "selenium-server-standalone";
+  version = "${minorVersion}.${patchVersion}";
+
+  src = fetchurl {
+    url = "http://selenium-release.storage.googleapis.com/${minorVersion}/selenium-server-standalone-${version}.jar";
+    sha256 = "1jzkx0ahsb27zzzfvjqv660x9fz2pbcddgmhdzdmasxns5vipxxc";
+  };
+
+  dontUnpack = true;
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ jre ];
+
+  installPhase = ''
+    mkdir -p $out/share/lib/${pname}-${version}
+    cp $src $out/share/lib/${pname}-${version}/${pname}-${version}.jar
+    makeWrapper ${jre}/bin/java $out/bin/selenium-server \
+      --add-flags "-cp $out/share/lib/${pname}-${version}/${pname}-${version}.jar:${htmlunit-driver}/share/lib/${htmlunit-driver.name}/${htmlunit-driver.name}.jar" \
+      ${lib.optionalString chromeSupport "--add-flags -Dwebdriver.chrome.driver=${chromedriver}/bin/chromedriver"} \
+      --add-flags "org.openqa.grid.selenium.GridLauncherV3"
+  '';
+
+  meta = with lib; {
+    homepage = "http://www.seleniumhq.org/";
+    description = "Selenium Server for remote WebDriver";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.asl20;
+    maintainers = with maintainers; [ coconnor offline ];
+    mainProgram = "selenium-server";
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/sem/default.nix b/nixpkgs/pkgs/development/tools/sem/default.nix
new file mode 100644
index 000000000000..76741e773110
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/sem/default.nix
@@ -0,0 +1,31 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "sem";
+  version = "0.28.6";
+
+  src = fetchFromGitHub {
+    owner = "semaphoreci";
+    repo = "cli";
+    rev = "v${version}";
+    sha256 = "sha256-8zGgqa0z3KYSYVaYlSnTET7QJ+Mdp+FVJ5MD2pyh7Ns=";
+  };
+
+  vendorHash = "sha256-p8+M+pRp12P7tYlFpXjU94JcJOugQpD8rFdowhonh74=";
+  subPackages = [ "." ];
+
+  ldflags = [ "-X main.version=${version}" "-X main.buildSource=nix" ];
+
+  postInstall = ''
+    install -m755 $out/bin/cli $out/bin/sem
+  '';
+
+  meta = with lib; {
+    description = "A cli to operate on semaphore ci (2.0)";
+    homepage = "https://github.com/semaphoreci/cli";
+    changelog = "https://github.com/semaphoreci/cli/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ liberatys ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/semantic-release/default.nix b/nixpkgs/pkgs/development/tools/semantic-release/default.nix
new file mode 100644
index 000000000000..2b81e5bef401
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/semantic-release/default.nix
@@ -0,0 +1,41 @@
+{ cctools
+, buildNpmPackage
+, fetchFromGitHub
+, lib
+, python3
+, stdenv
+}:
+
+buildNpmPackage rec {
+  pname = "semantic-release";
+  version = "23.0.2";
+
+  src = fetchFromGitHub {
+    owner = "semantic-release";
+    repo = "semantic-release";
+    rev = "v${version}";
+    hash = "sha256-zwc21Ug/x1jP+litn8ij8eEvqpVmtMSiQT3jN4+RhNc=";
+  };
+
+  npmDepsHash = "sha256-8iCb6s9VCuXfgU6Qc/bUHMiLgEgreEa7LU0j+1CYVI0=";
+
+  dontNpmBuild = true;
+
+  nativeBuildInputs = [
+    python3
+  ] ++ lib.optional stdenv.isDarwin cctools;
+
+  # Fixes `semantic-release --version` output
+  postPatch = ''
+    substituteInPlace package.json --replace \
+      '"version": "0.0.0-development"' \
+      '"version": "${version}"'
+  '';
+
+  meta = {
+    description = "Fully automated version management and package publishing";
+    homepage = "https://semantic-release.gitbook.io/semantic-release/";
+    license = lib.licenses.mit;
+    maintainers = [ lib.maintainers.sestrella ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/sentry-cli/default.nix b/nixpkgs/pkgs/development/tools/sentry-cli/default.nix
new file mode 100644
index 000000000000..46c83790d064
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/sentry-cli/default.nix
@@ -0,0 +1,38 @@
+{ rustPlatform
+, fetchFromGitHub
+, lib
+, openssl
+, pkg-config
+, stdenv
+, CoreServices
+, Security
+, SystemConfiguration
+}:
+rustPlatform.buildRustPackage rec {
+  pname = "sentry-cli";
+  version = "2.28.0";
+
+  src = fetchFromGitHub {
+    owner = "getsentry";
+    repo = "sentry-cli";
+    rev = version;
+    sha256 = "sha256-KC+2ZJGMd5xjekRRgkKB09v9+h6CS94fs6/Px3Pn54Q=";
+  };
+  doCheck = false;
+
+  # Needed to get openssl-sys to use pkgconfig.
+  OPENSSL_NO_VENDOR = 1;
+
+  buildInputs = [ openssl ] ++ lib.optionals stdenv.isDarwin [ CoreServices Security SystemConfiguration ];
+  nativeBuildInputs = [ pkg-config ];
+
+  cargoHash = "sha256-XaFRA0lpTuuV/bfEFR2JzyQIPEBdfFSuhBrKNASnfdo=";
+
+  meta = with lib; {
+    homepage = "https://docs.sentry.io/cli/";
+    license = licenses.bsd3;
+    description = "A command line utility to work with Sentry";
+    changelog = "https://github.com/getsentry/sentry-cli/raw/${version}/CHANGELOG.md";
+    maintainers = with maintainers; [ rizary loewenheim ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/shadered/default.nix b/nixpkgs/pkgs/development/tools/shadered/default.nix
new file mode 100644
index 000000000000..cebb9704d180
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/shadered/default.nix
@@ -0,0 +1,50 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, cmake
+, sfml
+, glm
+, python3
+, glew
+, pkg-config
+, SDL2 }:
+
+stdenv.mkDerivation rec {
+  pname = "SHADERed";
+  version = "1.5.6";
+
+  src = fetchFromGitHub {
+    owner = "dfranx";
+    repo = pname;
+    rev = "v${version}";
+    fetchSubmodules = true;
+    sha256 = "0drf8wwx0gcmi22jq2yyjy7ppxynfq172wqakchscm313j248fjr";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+  ];
+
+  buildInputs = [
+    SDL2
+    glew
+    glm
+    python3
+    sfml
+  ];
+
+  patches = [
+    ./install_path_fix.patch
+  ];
+
+  env.NIX_CFLAGS_COMPILE = "-Wno-error=format-security";
+
+  meta = with lib; {
+    description = "Lightweight, cross-platform & full-featured shader IDE";
+    homepage = "https://github.com/dfranx/SHADERed";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ Scriptkiddi ];
+    broken = true;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/shadered/install_path_fix.patch b/nixpkgs/pkgs/development/tools/shadered/install_path_fix.patch
new file mode 100644
index 000000000000..6b39ca696b90
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/shadered/install_path_fix.patch
@@ -0,0 +1,13 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 55eb05c..18f7fc3 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -234,7 +234,7 @@ endif()
+ 
+ set(BINARY_INST_DESTINATION "bin")
+ set(RESOURCE_INST_DESTINATION "share/shadered")
+-install(PROGRAMS bin/SHADERed DESTINATION "${BINARY_INST_DESTINATION}" RENAME shadered)
++install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/bin/SHADERed DESTINATION "${BINARY_INST_DESTINATION}" RENAME shadered)
+ install(DIRECTORY bin/data bin/templates bin/themes bin/plugins DESTINATION "${RESOURCE_INST_DESTINATION}")
+ 
+ if (UNIX AND NOT APPLE)
diff --git a/nixpkgs/pkgs/development/tools/shellcheck/default.nix b/nixpkgs/pkgs/development/tools/shellcheck/default.nix
new file mode 100644
index 000000000000..8d04c357ce50
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/shellcheck/default.nix
@@ -0,0 +1,53 @@
+{ stdenv, lib, ShellCheck, haskell, pandoc }:
+
+# this wraps around the haskell package
+# and puts the documentation into place
+
+let
+  # TODO: move to lib/ in separate PR
+  overrideMeta = drv: overrideFn:
+    let
+      drv' = if drv ? meta then drv else drv // { meta = { }; };
+      pos = (builtins.unsafeGetAttrPos "pname" drv');
+      meta' = drv'.meta // {
+        # copied from the mkDerivation code
+        position = pos.file + ":" + toString pos.line;
+      };
+    in
+    drv' // { meta = meta' // overrideFn meta'; };
+
+  bin = haskell.lib.compose.justStaticExecutables ShellCheck;
+
+  shellcheck = stdenv.mkDerivation {
+    pname = "shellcheck";
+    version = bin.version;
+
+    inherit (ShellCheck) meta src;
+
+    nativeBuildInputs = [ pandoc ];
+
+    outputs = [ "bin" "man" "doc" "out" ];
+
+    buildPhase = ''
+      pandoc -s -f markdown-smart -t man shellcheck.1.md -o shellcheck.1
+    '';
+
+    installPhase = ''
+      install -Dm755 ${bin}/bin/shellcheck $bin/bin/shellcheck
+      install -Dm644 README.md $doc/share/shellcheck/README.md
+      install -Dm644 shellcheck.1 $man/share/man/man1/shellcheck.1
+      mkdir $out
+    '';
+
+    passthru = ShellCheck.passthru or { } // {
+      # pandoc takes long to build and documentation isn't needed for in nixpkgs usage
+      unwrapped = ShellCheck;
+    };
+  };
+
+in
+overrideMeta shellcheck (old: {
+  maintainers = with lib.maintainers; [ zowoq ];
+  mainProgram = "shellcheck";
+  outputsToInstall = [ "bin" "man" "doc" ];
+})
diff --git a/nixpkgs/pkgs/development/tools/shellharden/default.nix b/nixpkgs/pkgs/development/tools/shellharden/default.nix
new file mode 100644
index 000000000000..5006c5fe9cba
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/shellharden/default.nix
@@ -0,0 +1,28 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "shellharden";
+  version = "4.3.0";
+
+  src = fetchFromGitHub {
+    owner = "anordal";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-yOfGMxNaaw5ub7woShDMCJNiz6FgV5IBJN87VmORLvg=";
+  };
+
+  cargoSha256 = "sha256-o3CBnxEQNmvn+h/QArIkzi9xfZzIngvwHpkMT+PItY4=";
+
+  postPatch = "patchShebangs moduletests/run";
+
+  meta = with lib; {
+    description = "The corrective bash syntax highlighter";
+    longDescription = ''
+      Shellharden is a syntax highlighter and a tool to semi-automate the
+      rewriting of scripts to ShellCheck conformance, mainly focused on quoting.
+    '';
+    homepage = "https://github.com/anordal/shellharden";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ oxzi ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/sigrok-cli/default.nix b/nixpkgs/pkgs/development/tools/sigrok-cli/default.nix
new file mode 100644
index 000000000000..0e8d697ef36d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/sigrok-cli/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchgit, autoreconfHook, pkg-config, glib, libsigrok, libsigrokdecode }:
+
+stdenv.mkDerivation rec {
+  pname = "sigrok-cli";
+  version = "0.7.2-unstable-2023-04-10";
+
+  src = fetchgit {
+    url = "git://sigrok.org/sigrok-cli";
+    rev = "9d9f7b82008e3b3665bda12a63a3339e9f7aabc3";
+    hash = "sha256-B2FJxRkfKELrtqxZDv5QTvntpu9zJnTK15CAUYbf+5M=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+  buildInputs = [ glib libsigrok libsigrokdecode ];
+
+  meta = with lib; {
+    description = "Command-line frontend for the sigrok signal analysis software suite";
+    homepage = "https://sigrok.org/";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = with maintainers; [ bjornfor vifino ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/sigrok-firmware-fx2lafw/default.nix b/nixpkgs/pkgs/development/tools/sigrok-firmware-fx2lafw/default.nix
new file mode 100644
index 000000000000..44a095bf59f9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/sigrok-firmware-fx2lafw/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, stdenv
+, fetchgit
+, autoreconfHook
+, sdcc
+}:
+
+stdenv.mkDerivation rec {
+  pname = "sigrok-firmware-fx2lafw";
+  version = "0.1.7-unstable-2024-02-03";
+
+  src = fetchgit {
+    url = "git://sigrok.org/sigrok-firmware-fx2lafw";
+    rev = "0f2d3242ffb5582e5b9a018ed9ae9812d517a56e";
+    hash = "sha256-xveVcwAwtqKGD3/UvnBz5ASvTyg/6jAlTedZElhV2HE=";
+  };
+
+  enableParallelBuilding = true;
+
+  nativeBuildInputs = [ autoreconfHook sdcc ];
+
+  meta = with lib; {
+    description = "Firmware for FX2 logic analyzers";
+    homepage = "https://sigrok.org/";
+
+    # licensing details explained in:
+    # https://sigrok.org/gitweb/?p=sigrok-firmware-fx2lafw.git;a=blob;f=README;hb=HEAD#l122
+    license = with licenses; [
+      gpl2Plus    # overall
+      lgpl21Plus  # fx2lib, Hantek 6022BE, Sainsmart DDS120 firmwares
+    ];
+
+    sourceProvenance = with sourceTypes; [ fromSource ];
+    platforms = platforms.all;
+    maintainers = with maintainers; [ panicgh vifino ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/simavr/default.nix b/nixpkgs/pkgs/development/tools/simavr/default.nix
new file mode 100644
index 000000000000..db3f9e6664e1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/simavr/default.nix
@@ -0,0 +1,54 @@
+{ lib, stdenv, makeSetupHook, fetchFromGitHub, libelf, which, pkg-config, freeglut
+, avrgcc, avrlibc
+, libGLU, libGL
+, GLUT }:
+
+let
+  setupHookDarwin = makeSetupHook {
+    name = "darwin-avr-gcc-hook";
+    substitutions = {
+      darwinSuffixSalt = stdenv.cc.suffixSalt;
+      avrSuffixSalt = avrgcc.suffixSalt;
+    };
+  } ./setup-hook-darwin.sh;
+in stdenv.mkDerivation rec {
+  pname = "simavr";
+  version = "1.7";
+
+  src = fetchFromGitHub {
+    owner = "buserror";
+    repo = "simavr";
+    rev = "v${version}";
+    sha256 = "0njz03lkw5374x1lxrq08irz4b86lzj2hibx46ssp7zv712pq55q";
+  };
+
+  makeFlags = [
+    "DESTDIR=$(out)"
+    "PREFIX="
+    "AVR_ROOT=${avrlibc}/avr"
+    "SIMAVR_VERSION=${version}"
+    "AVR=avr-"
+  ];
+
+  nativeBuildInputs = [ which pkg-config avrgcc ]
+    ++ lib.optional stdenv.isDarwin setupHookDarwin;
+  buildInputs = [ libelf freeglut libGLU libGL ]
+    ++ lib.optional stdenv.isDarwin GLUT;
+
+  # remove forbidden references to $TMPDIR
+  preFixup = lib.optionalString stdenv.isLinux ''
+    patchelf --shrink-rpath --allowed-rpath-prefixes "$NIX_STORE" "$out"/bin/*
+  '';
+
+  doCheck = true;
+  checkTarget = "-C tests run_tests";
+
+  meta = with lib; {
+    description = "A lean and mean Atmel AVR simulator";
+    homepage    = "https://github.com/buserror/simavr";
+    license     = licenses.gpl3;
+    platforms   = platforms.unix;
+    maintainers = with maintainers; [ goodrone ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/tools/simavr/setup-hook-darwin.sh b/nixpkgs/pkgs/development/tools/simavr/setup-hook-darwin.sh
new file mode 100644
index 000000000000..3861e45973ac
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/simavr/setup-hook-darwin.sh
@@ -0,0 +1,34 @@
+
+fixupCFlagsForDarwin() {
+    # Because it’s getting called from a Darwin stdenv, avr-gcc will pick up on
+    # Darwin-specific flags, and it will barf and die on -iframework in
+    # particular. Strip them out, so simavr can compile its test firmware.
+    cflagsFilter='s|-F[^ ]*||g;s|-iframework [^ ]*||g;s|-isystem [^ ]*||g;s|  *| |g'
+
+    # The `CoreFoundation` reference is added by `linkSystemCoreFoundationFramework` in the
+    # Apple SDK’s setup hook. Remove that because avr-gcc will fail due to file not found.
+    ldFlagsFilter='s|/nix/store/[^-]*-apple-framework-CoreFoundation[^ ]*||g'
+
+    # `cc-wrapper.sh`` supports getting flags from a system-specific salt. While it is currently a
+    # tuple, that’s not considered a stable interface, so the derivation will provide them.
+    export NIX_CFLAGS_COMPILE_@darwinSuffixSalt@=${NIX_CFLAGS_COMPILE-}
+    export NIX_LDFLAGS_@darwinSuffixSalt@=${NIX_LDFLAGS-}
+
+    echo removing @darwinSuffixSalt@-specific flags from NIX_CFLAGS_COMPILE for @avrSuffixSalt@
+    export NIX_CFLAGS_COMPILE_@avrSuffixSalt@+="$(sed "$cflagsFilter" <<< "$NIX_CFLAGS_COMPILE")"
+    echo removing @darwinSuffixSalt@-specific flags from NIX_LDFLAGS for @avrSuffixSalt@
+    export NIX_LDFLAGS_@avrSuffixSalt@+="$(sed "$ldFlagsFilter;$cflagsFilter" <<< "$NIX_LDFLAGS")"
+
+    # Make sure the global flags aren’t accidentally influencing the platform-specific flags.
+    export NIX_CFLAGS_COMPILE=""
+    export NIX_LDFLAGS=""
+}
+
+# This is pretty hacky, but this hook _must_ run after `linkSystemCoreFoundationFramework`.
+function runFixupCFlagsForDarwinLast() {
+    preConfigureHooks+=(fixupCFlagsForDarwin)
+}
+
+if [ -z "${dontFixupCFlagsForDarwin-}" ]; then
+    postUnpackHooks+=(runFixupCFlagsForDarwinLast)
+fi
diff --git a/nixpkgs/pkgs/development/tools/skaffold/default.nix b/nixpkgs/pkgs/development/tools/skaffold/default.nix
new file mode 100644
index 000000000000..3d98bf472770
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/skaffold/default.nix
@@ -0,0 +1,53 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles, makeWrapper }:
+
+buildGoModule rec {
+  pname = "skaffold";
+  version = "2.10.1";
+
+  src = fetchFromGitHub {
+    owner = "GoogleContainerTools";
+    repo = "skaffold";
+    rev = "v${version}";
+    hash = "sha256-NNiWiTY5AHMcGxDND5QwlucYVrp94C92qtMNLrVm2tQ=";
+  };
+
+  vendorHash = null;
+
+  subPackages = ["cmd/skaffold"];
+
+  ldflags = let t = "github.com/GoogleContainerTools/skaffold/v2/pkg/skaffold"; in [
+    "-s" "-w"
+    "-X ${t}/version.version=v${version}"
+    "-X ${t}/version.gitCommit=${src.rev}"
+    "-X ${t}/version.buildDate=unknown"
+  ];
+
+  nativeBuildInputs = [ installShellFiles makeWrapper ];
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/skaffold version | grep ${version} > /dev/null
+  '';
+
+  postInstall = ''
+    wrapProgram $out/bin/skaffold --set SKAFFOLD_UPDATE_CHECK false
+
+    installShellCompletion --cmd skaffold \
+      --bash <($out/bin/skaffold completion bash) \
+      --zsh <($out/bin/skaffold completion zsh)
+  '';
+
+  meta = with lib; {
+    homepage = "https://skaffold.dev/";
+    changelog = "https://github.com/GoogleContainerTools/skaffold/releases/tag/v${version}";
+    description = "Easy and Repeatable Kubernetes Development";
+    longDescription = ''
+      Skaffold is a command line tool that facilitates continuous development for Kubernetes applications.
+      You can iterate on your application source code locally then deploy to local or remote Kubernetes clusters.
+      Skaffold handles the workflow for building, pushing and deploying your application.
+      It also provides building blocks and describe customizations for a CI/CD pipeline.
+    '';
+    license = licenses.asl20;
+    maintainers = with maintainers; [ vdemeester bryanasdev000];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/skjold/default.nix b/nixpkgs/pkgs/development/tools/skjold/default.nix
new file mode 100644
index 000000000000..e827e727a957
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/skjold/default.nix
@@ -0,0 +1,81 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+let
+  py = python3.override {
+    packageOverrides = self: super: {
+      packaging = super.packaging.overridePythonAttrs (oldAttrs: rec {
+        version = "21.3";
+        src = oldAttrs.src.override {
+          inherit version;
+          hash = "sha256-3UfEKSfYmrkR5gZRiQfMLTofOLvQJjhZcGQ/nFuOz+s=";
+        };
+        nativeBuildInputs = with python3.pkgs; [ setuptools ];
+        propagatedBuildInputs = with python3.pkgs; [ pyparsing six ];
+      });
+    };
+  };
+in
+with py.pkgs;
+
+buildPythonApplication rec {
+  pname = "skjold";
+  version = "0.6.1";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "twu";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-rsdstzNZvokYfTjEyPrWR+0SJpf9wL0HAesq8+A+tPY=";
+  };
+
+  nativeBuildInputs = with py.pkgs; [
+    poetry-core
+  ];
+
+  propagatedBuildInputs = with py.pkgs; [
+    click
+    packaging
+    pyyaml
+    toml
+  ];
+
+  nativeCheckInputs = with py.pkgs; [
+    pytest-mock
+    pytest-watch
+    pytestCheckHook
+  ];
+
+  disabledTestPaths = [
+    # Too sensitive to pass
+    "tests/test_cli.py"
+  ];
+
+  disabledTests = [
+    # Requires network access
+    "pyup-werkzeug"
+    "test_ensure_accessing_advisories_triggers_update"
+    "test_ensure_accessing_advisories_triggers_update"
+    "test_ensure_gemnasium_update"
+    "test_ensure_missing_github_token_raises_usage_error"
+    "test_ensure_pypi_advisory_db_update"
+    "test_ensure_source_is_affected_single"
+    "test_osv_advisory_with_vulnerable_package_via_osv_api"
+    "urllib3"
+  ];
+
+  pythonImportsCheck = [
+    "skjold"
+  ];
+
+  meta = with lib; {
+    description = "Tool to Python dependencies against security advisory databases";
+    homepage = "https://github.com/twu/skjold";
+    changelog = "https://github.com/twu/skjold/releases/tag/v${version}";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/skopeo/default.nix b/nixpkgs/pkgs/development/tools/skopeo/default.nix
new file mode 100644
index 000000000000..7afeb6313946
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/skopeo/default.nix
@@ -0,0 +1,78 @@
+{ lib
+, stdenv
+, buildGoModule
+, fetchFromGitHub
+, gpgme
+, lvm2
+, btrfs-progs
+, pkg-config
+, go-md2man
+, installShellFiles
+, makeWrapper
+, fuse-overlayfs
+, dockerTools
+, runCommand
+, testers
+, skopeo
+}:
+
+buildGoModule rec {
+  pname = "skopeo";
+  version = "1.14.2";
+
+  src = fetchFromGitHub {
+    rev = "v${version}";
+    owner = "containers";
+    repo = "skopeo";
+    hash = "sha256-js1Y7EGXinzOMMX9LjsG6D57UhGtZcvesOw/JDEKvoU=";
+  };
+
+  outputs = [ "out" "man" ];
+
+  vendorHash = null;
+
+  doCheck = false;
+
+  nativeBuildInputs = [ pkg-config go-md2man installShellFiles makeWrapper ];
+
+  buildInputs = [ gpgme ]
+    ++ lib.optionals stdenv.isLinux [ lvm2 btrfs-progs ];
+
+  buildPhase = ''
+    runHook preBuild
+    patchShebangs .
+    make bin/skopeo completions docs
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    PREFIX=${placeholder "out"} make install-binary install-completions install-docs
+    install ${passthru.policy}/default-policy.json -Dt $out/etc/containers
+  '' + lib.optionalString stdenv.isLinux ''
+    wrapProgram $out/bin/skopeo \
+      --prefix PATH : ${lib.makeBinPath [ fuse-overlayfs ]}
+  '' + ''
+    runHook postInstall
+  '';
+
+  passthru = {
+    policy = runCommand "policy" { } ''
+      install ${src}/default-policy.json -Dt $out
+    '';
+    tests = {
+      version = testers.testVersion {
+        package = skopeo;
+      };
+      inherit (dockerTools.examples) testNixFromDockerHub;
+    };
+  };
+
+  meta = with lib; {
+    changelog = "https://github.com/containers/skopeo/releases/tag/${src.rev}";
+    description = "A command line utility for various operations on container images and image repositories";
+    homepage = "https://github.com/containers/skopeo";
+    maintainers = with maintainers; [ lewo developer-guy ] ++ teams.podman.members;
+    license = licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/slimerjs/default.nix b/nixpkgs/pkgs/development/tools/slimerjs/default.nix
new file mode 100644
index 000000000000..f800dedf615f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/slimerjs/default.nix
@@ -0,0 +1,51 @@
+{ lib
+, bash
+, fetchFromGitHub
+, firefox
+, strip-nondeterminism
+, stdenv
+, unzip
+, zip
+}:
+
+stdenv.mkDerivation rec {
+  pname = "slimerjs";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "laurentj";
+    repo = "slimerjs";
+    sha256 = "sha256-RHd9PqcSkO9FYi5x+09TN7c4fKGf5pCPXjoCUXZ2mvA=";
+    rev = version;
+  };
+
+  buildInputs = [ zip ];
+  nativeBuildInputs = [
+    strip-nondeterminism
+    unzip
+  ];
+
+  preConfigure = ''
+    test -d src && cd src
+    test -f omni.ja || zip omni.ja -r */
+  '';
+
+  installPhase = ''
+    strip-nondeterminism --type zip omni.ja
+    mkdir -p "$out"/{bin,share/doc/slimerjs,lib/slimerjs}
+    cp LICENSE README* "$out/share/doc/slimerjs"
+    cp -r * "$out/lib/slimerjs"
+    echo '#!${bash}/bin/bash' >>  "$out/bin/slimerjs"
+    echo 'export SLIMERJSLAUNCHER=${firefox}/bin/firefox' >>  "$out/bin/slimerjs"
+    echo "'$out/lib/slimerjs/slimerjs' \"\$@\"" >> "$out/bin/slimerjs"
+    chmod a+x "$out/bin/slimerjs"
+    sed -e 's@MaxVersion=[3456][0-9][.]@MaxVersion=99.@' -i "$out/lib/slimerjs/application.ini"
+  '';
+
+  meta = with lib; {
+    description = "Gecko-based programmatically-driven browser";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ raskin ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/smlfmt/default.nix b/nixpkgs/pkgs/development/tools/smlfmt/default.nix
new file mode 100644
index 000000000000..2094cde2ffcb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/smlfmt/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, mlton }:
+
+stdenv.mkDerivation rec {
+  pname = "smlfmt";
+  version = "1.1.0";
+
+  src = fetchFromGitHub {
+    owner = "shwestrick";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-qwhYOZrck028NliPDnqFZel3IxopQzouhHq6R7DkfPE=";
+  };
+
+  nativeBuildInputs = [ mlton ];
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm755 -t $out/bin smlfmt
+    runHook postInstall
+  '';
+
+  meta = {
+    description = "A custom parser/auto-formatter for Standard ML";
+    longDescription = ''
+      A custom parser and code formatter for Standard ML, with helpful error messages.
+
+      Supports SML source files (.sml, .sig, .fun, etc.) as well as MLBasis
+      compilation files (.mlb) using MLton conventions, including MLBasis path
+      maps.
+    '';
+
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ munksgaard ];
+    platforms = mlton.meta.platforms;
+    homepage = "https://github.com/shwestrick/smlfmt";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/snazy/default.nix b/nixpkgs/pkgs/development/tools/snazy/default.nix
new file mode 100644
index 000000000000..7abe2fd98cfc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/snazy/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, installShellFiles
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "snazy";
+  version = "0.52.17";
+
+  src = fetchFromGitHub {
+    owner = "chmouel";
+    repo = pname;
+    rev = version;
+    hash = "sha256-0r5xhmU9a9I+q24mjJ+C4EKK1Nw/67YThuBFibAx3Dw=";
+  };
+
+  cargoHash = "sha256-ljYsF5lBRqiTqx9nta5h/75052GWOBJ9uJnqZkWJvwI=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    installShellCompletion --cmd snazy \
+      --bash <($out/bin/snazy --shell-completion bash) \
+      --fish <($out/bin/snazy --shell-completion fish) \
+      --zsh <($out/bin/snazy --shell-completion zsh)
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+    $out/bin/snazy --help
+    $out/bin/snazy --version | grep "snazy ${version}"
+    runHook postInstallCheck
+  '';
+
+  meta = with lib; {
+    description = "A snazzy json log viewer";
+    longDescription = ''
+      Snazy is a simple tool to parse json logs and output them in a nice format
+      with nice colors.
+    '';
+    homepage = "https://github.com/chmouel/snazy/";
+    changelog = "https://github.com/chmouel/snazy/releases/tag/${src.rev}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ figsoda jk ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/so/default.nix b/nixpkgs/pkgs/development/tools/so/default.nix
new file mode 100644
index 000000000000..6d3e3fab0b7c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/so/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, rustPlatform, fetchFromGitHub, openssl, pkg-config, libiconv, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "so";
+  version = "0.4.9";
+
+  src = fetchFromGitHub {
+    owner = "samtay";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-4IZNOclQj3ZLE6WRddn99CrV8OoyfkRBXnA4oEyMxv8=";
+  };
+
+  cargoSha256 = "sha256-hHXA/n/HQeBaD4QZ2b6Okw66poBRwNTpQWF0qBhLp/o=";
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ openssl ] ++ lib.optionals stdenv.isDarwin [
+    libiconv Security
+  ];
+
+  meta = with lib; {
+    description = "A TUI interface to the StackExchange network";
+    homepage = "https://github.com/samtay/so";
+    license = licenses.mit;
+    maintainers = with maintainers; [ mredaelli ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/solarus-quest-editor/default.nix b/nixpkgs/pkgs/development/tools/solarus-quest-editor/default.nix
new file mode 100644
index 000000000000..3dc60021b757
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/solarus-quest-editor/default.nix
@@ -0,0 +1,42 @@
+{ lib, mkDerivation, fetchFromGitLab, cmake, luajit
+, SDL2, SDL2_image, SDL2_ttf, physfs, fetchpatch
+, openal, libmodplug, libvorbis, solarus
+, qtbase, qttools, glm }:
+
+mkDerivation rec {
+  pname = "solarus-quest-editor";
+  version = "1.6.4";
+
+  src = fetchFromGitLab {
+    owner = "solarus-games";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1qbc2j9kalk7xqk9j27s7wnm5zawiyjs47xqkqphw683idmzmjzn";
+  };
+
+  patches = [
+    (fetchpatch {
+      url = "https://gitlab.com/solarus-games/solarus-quest-editor/-/commit/81d5c7f1602cf355684d70a5e3449fefccfc44b8.patch";
+      sha256 = "tVUxkkDp2PcOHGy4dGvUcYj9gF7k4LN21VuxohCw9NE=";
+    })
+  ];
+
+  nativeBuildInputs = [ cmake ];
+
+  buildInputs = [ luajit SDL2 SDL2_image SDL2_ttf physfs openal
+    libmodplug libvorbis solarus qtbase qttools glm ];
+
+  meta = with lib; {
+    description = "The editor for the Zelda-like ARPG game engine, Solarus";
+    longDescription = ''
+      Solarus is a game engine for Zelda-like ARPG games written in lua.
+      Many full-fledged games have been writen for the engine.
+      Games can be created easily using the editor.
+    '';
+    homepage = "https://www.solarus-games.org";
+    license = licenses.gpl3;
+    maintainers = [ ];
+    platforms = platforms.linux;
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/tools/spicy/default.nix b/nixpkgs/pkgs/development/tools/spicy/default.nix
new file mode 100644
index 000000000000..b297053843e7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/spicy/default.nix
@@ -0,0 +1,28 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "spicy";
+  version = "0.6.2";
+
+  src = fetchFromGitHub {
+    owner = "trhodeos";
+    repo = "spicy";
+    rev = "v${version}";
+    sha256 = "sha256-TodMm4UbnLB+LiyfPVXT7bcVLbyBFbGoOYQSsz3IMfM=";
+  };
+
+  vendorHash = "sha256-uy33vfsvyLCep1aN8qO0BMmpPylhzTLhosjjD5ghmHE=";
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "A Nintendo 64 segment assembler";
+    longDescription = ''
+      An open-source version of the Nintendo64 sdk's mild.exe. Assembles
+      segments into an n64-compatible rom.
+    '';
+    homepage = "https://github.com/trhodeos/spicy";
+    license = licenses.mit;
+    maintainers = with maintainers; [ _414owen ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/spirv-tools/default.nix b/nixpkgs/pkgs/development/tools/spirv-tools/default.nix
new file mode 100644
index 000000000000..648b2615166c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/spirv-tools/default.nix
@@ -0,0 +1,50 @@
+{ lib, stdenv, fetchFromGitHub, cmake, python3, spirv-headers }:
+
+stdenv.mkDerivation rec {
+  pname = "spirv-tools";
+  version = "1.3.275.0";
+
+  src = fetchFromGitHub {
+    owner = "KhronosGroup";
+    repo = "SPIRV-Tools";
+    rev = "vulkan-sdk-${version}";
+    hash = "sha256-RzGvoDt1Qc+f6mZsfs99MxX4YB3yFc5FP92Yx/WGrsI=";
+  };
+
+  # The cmake options are sufficient for turning on static building, but not
+  # for disabling shared building, just trim the shared lib from the CMake
+  # description
+  patches = lib.optional stdenv.hostPlatform.isStatic ./no-shared-libs.patch;
+
+  nativeBuildInputs = [ cmake python3 ];
+
+  cmakeFlags = [
+    "-DSPIRV-Headers_SOURCE_DIR=${spirv-headers.src}"
+    # Avoid blanket -Werror to evade build failures on less
+    # tested compilers.
+    "-DSPIRV_WERROR=OFF"
+  ];
+
+  # https://github.com/KhronosGroup/SPIRV-Tools/issues/3905
+  postPatch = ''
+    substituteInPlace CMakeLists.txt \
+      --replace '-P ''${CMAKE_CURRENT_SOURCE_DIR}/cmake/write_pkg_config.cmake' \
+                '-DCMAKE_INSTALL_FULL_LIBDIR=''${CMAKE_INSTALL_FULL_LIBDIR}
+                 -DCMAKE_INSTALL_FULL_INCLUDEDIR=''${CMAKE_INSTALL_FULL_INCLUDEDIR}
+                 -P ''${CMAKE_CURRENT_SOURCE_DIR}/cmake/write_pkg_config.cmake'
+    substituteInPlace cmake/SPIRV-Tools.pc.in \
+      --replace '$'{prefix}/@CMAKE_INSTALL_LIBDIR@ @CMAKE_INSTALL_FULL_LIBDIR@ \
+      --replace '$'{prefix}/@CMAKE_INSTALL_INCLUDEDIR@ @CMAKE_INSTALL_FULL_INCLUDEDIR@
+    substituteInPlace cmake/SPIRV-Tools-shared.pc.in \
+      --replace '$'{prefix}/@CMAKE_INSTALL_LIBDIR@ @CMAKE_INSTALL_FULL_LIBDIR@ \
+      --replace '$'{prefix}/@CMAKE_INSTALL_INCLUDEDIR@ @CMAKE_INSTALL_FULL_INCLUDEDIR@
+  '';
+
+  meta = with lib; {
+    description = "The SPIR-V Tools project provides an API and commands for processing SPIR-V modules";
+    homepage = "https://github.com/KhronosGroup/SPIRV-Tools";
+    license = licenses.asl20;
+    platforms = with platforms; unix ++ windows;
+    maintainers = [ maintainers.ralith ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/spirv-tools/no-shared-libs.patch b/nixpkgs/pkgs/development/tools/spirv-tools/no-shared-libs.patch
new file mode 100644
index 000000000000..45d2be6ec6ac
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/spirv-tools/no-shared-libs.patch
@@ -0,0 +1,30 @@
+diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt
+index acfa0c12..bf3eb686 100644
+--- a/source/CMakeLists.txt
++++ b/source/CMakeLists.txt
+@@ -378,16 +378,6 @@ function(spirv_tools_default_target_options target)
+   add_dependencies(${target} spirv-tools-build-version core_tables enum_string_mapping extinst_tables)
+ endfunction()
+ 
+-# Always build ${SPIRV_TOOLS}-shared. This is expected distro packages, and
+-# unlike the other SPIRV_TOOLS target, defaults to hidden symbol visibility.
+-add_library(${SPIRV_TOOLS}-shared SHARED ${SPIRV_SOURCES})
+-spirv_tools_default_target_options(${SPIRV_TOOLS}-shared)
+-set_target_properties(${SPIRV_TOOLS}-shared PROPERTIES CXX_VISIBILITY_PRESET hidden)
+-target_compile_definitions(${SPIRV_TOOLS}-shared
+-  PRIVATE SPIRV_TOOLS_IMPLEMENTATION
+-  PUBLIC SPIRV_TOOLS_SHAREDLIB
+-)
+-
+ if(SPIRV_TOOLS_BUILD_STATIC)
+   add_library(${SPIRV_TOOLS}-static STATIC ${SPIRV_SOURCES})
+   spirv_tools_default_target_options(${SPIRV_TOOLS}-static)
+@@ -402,7 +392,7 @@ if(SPIRV_TOOLS_BUILD_STATIC)
+     add_library(${SPIRV_TOOLS} ALIAS ${SPIRV_TOOLS}-static)
+   endif()
+ 
+-  set(SPIRV_TOOLS_TARGETS ${SPIRV_TOOLS}-static ${SPIRV_TOOLS}-shared)
++  set(SPIRV_TOOLS_TARGETS ${SPIRV_TOOLS}-static)
+ else()
+   add_library(${SPIRV_TOOLS} ${SPIRV_TOOLS_LIBRARY_TYPE} ${SPIRV_SOURCES})
+   spirv_tools_default_target_options(${SPIRV_TOOLS})
diff --git a/nixpkgs/pkgs/development/tools/spr/default.nix b/nixpkgs/pkgs/development/tools/spr/default.nix
new file mode 100644
index 000000000000..a9ed5c3c2128
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/spr/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, rustPlatform
+, fetchCrate
+, Security
+, stdenv
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "spr";
+  version = "1.3.4";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-lsdWInJWcofwU3P4vAWcLQeZuV3Xn1z30B7mhODJ4Vc=";
+  };
+
+  cargoSha256 = "sha256-VQg3HDNw+L1FsFtHXnIw6dMVUxV63ZWHCxiknzsqXW8=";
+
+  buildInputs = lib.optional stdenv.isDarwin Security;
+
+  meta = with lib; {
+    description = "Submit pull requests for individual, amendable, rebaseable commits to GitHub";
+    homepage = "https://github.com/getcord/spr";
+    license = licenses.mit;
+    maintainers = with maintainers; [ sven-of-cord ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/spring-boot-cli/default.nix b/nixpkgs/pkgs/development/tools/spring-boot-cli/default.nix
new file mode 100644
index 000000000000..5e92ac17f7bc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/spring-boot-cli/default.nix
@@ -0,0 +1,63 @@
+{ lib, stdenv, fetchzip, jdk, makeWrapper, installShellFiles, coreutils, testers, gitUpdater }:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "spring-boot-cli";
+  version = "3.2.2";
+
+  src = fetchzip {
+    url = "mirror://maven/org/springframework/boot/${finalAttrs.pname}/${finalAttrs.version}/${finalAttrs.pname}-${finalAttrs.version}-bin.zip";
+    hash = "sha256-Jlczhy4Nfquhrm+SO/MRfBsHrHRHDkU4TUTTPTH7aVk=";
+  };
+
+  nativeBuildInputs = [ makeWrapper installShellFiles ];
+
+  installPhase = ''
+    runHook preInstall
+    rm bin/spring.bat
+    installShellCompletion --bash shell-completion/bash/spring
+    installShellCompletion --zsh shell-completion/zsh/_spring
+    rm -r shell-completion
+    cp -r . $out
+    wrapProgram $out/bin/spring \
+      --set JAVA_HOME ${jdk} \
+      --set PATH /bin:${coreutils}/bin:${jdk}/bin
+    runHook postInstall
+  '';
+
+  passthru = {
+    tests.version = testers.testVersion {
+      package = finalAttrs.finalPackage;
+      command = "${lib.getExe finalAttrs.finalPackage} --version";
+      version = "v${finalAttrs.version}";
+    };
+    updateScript = gitUpdater {
+      url = "https://github.com/spring-projects/spring-boot";
+      ignoredVersions = ".*-(RC|M).*";
+      rev-prefix = "v";
+    };
+  };
+
+  meta = with lib; {
+    description = ''
+      CLI which makes it easy to create spring-based applications
+    '';
+    longDescription = ''
+      Spring Boot makes it easy to create stand-alone, production-grade
+      Spring-based Applications that you can run. We take an opinionated view
+      of the Spring platform and third-party libraries, so that you can get
+      started with minimum fuss. Most Spring Boot applications need very
+      little Spring configuration.
+
+      You can use Spring Boot to create Java applications that can be started
+      by using java -jar or more traditional war deployments. We also provide
+      a command line tool that runs “spring scripts”.
+    '';
+    homepage = "https://spring.io/projects/spring-boot";
+    changelog = "https://github.com/spring-projects/spring-boot/releases/tag/v${finalAttrs.version}";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    mainProgram = "spring";
+    license = licenses.asl20;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ moaxcp ];
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/sq/default.nix b/nixpkgs/pkgs/development/tools/sq/default.nix
new file mode 100644
index 000000000000..e440509ead64
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/sq/default.nix
@@ -0,0 +1,50 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles, testers, sq }:
+
+buildGoModule rec {
+  pname = "sq";
+  version = "0.46.1";
+
+  src = fetchFromGitHub {
+    owner = "neilotoole";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-TjJ3XDyHHZWMAYV5bJQffH4a9AheZWraov3d4HB/yno=";
+  };
+
+  vendorHash = "sha256-DIYSUIUHEiRv+pPZ2hE/2X4GmT3lvdWd/mkl1wbjID4=";
+
+  proxyVendor = true;
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  # Some tests violates sandbox constraints.
+  doCheck = false;
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=github.com/neilotoole/sq/cli/buildinfo.Version=v${version}"
+  ];
+
+  postInstall = ''
+    installShellCompletion --cmd sq \
+      --bash <($out/bin/sq completion bash) \
+      --fish <($out/bin/sq completion fish) \
+      --zsh <($out/bin/sq completion zsh)
+  '';
+
+  passthru.tests = {
+    version = testers.testVersion {
+      package = sq;
+      version = "v${version}";
+    };
+  };
+
+  meta = with lib; {
+    description = "Swiss army knife for data";
+    homepage = "https://sq.io/";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ raitobezarius ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/sqlboiler/default.nix b/nixpkgs/pkgs/development/tools/sqlboiler/default.nix
new file mode 100644
index 000000000000..eccb479aa5a4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/sqlboiler/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "sqlboiler";
+  version = "4.16.1";
+
+  src = fetchFromGitHub {
+    owner = "volatiletech";
+    repo = "sqlboiler";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-MmZ2TZZ06eiz05bkEm6E8tmGRVkInBZJGHbuPN4fMMY=";
+  };
+
+  vendorHash = "sha256-BTrQPWThfJ7gWXi/Y1l/s2BmkW5lVYS/PP0WRwntQxA=";
+
+  tags = [
+    "mysql"
+    "go"
+    "golang"
+    "postgres"
+    "orm"
+    "database"
+    "postgresql"
+    "mssql"
+    "sqlite3"
+    "sqlboiler"
+  ];
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Generate a Go ORM tailored to your database schema";
+    homepage = "https://github.com/volatiletech/sqlboiler";
+    changelog = "https://github.com/volatiletech/sqlboiler/releases/tag/v${version}";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ mrityunjaygr8 ];
+    mainProgram = "sqlboiler";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/sqldef/default.nix b/nixpkgs/pkgs/development/tools/sqldef/default.nix
new file mode 100644
index 000000000000..4141cd4f9176
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/sqldef/default.nix
@@ -0,0 +1,30 @@
+{ lib, buildGoModule, fetchFromGitHub, libpg_query, xxHash, postgresql }:
+
+buildGoModule rec {
+  pname = "sqldef";
+  version = "0.16.15";
+
+  src = fetchFromGitHub {
+    owner = "k0kubun";
+    repo = "sqldef";
+    rev = "v${version}";
+    hash = "sha256-srwCSALP+xtccMnIOpsErn4hk83grXyOMEA2Hwsvjv0=";
+  };
+
+  proxyVendor = true;
+
+  vendorHash = "sha256-VM50tJxChGU1lGol4HUKB5Zp0c2F8D9+NhrW6XK7i+g=";
+
+  ldflags = [ "-s" "-w" "-X main.version=${version}" ];
+
+  # The test requires a running database
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Idempotent SQL schema management tool";
+    license = with licenses; [ mit /* for everything except parser */  asl20 /* for parser */ ];
+    homepage = "https://github.com/k0kubun/sqldef";
+    changelog = "https://github.com/k0kubun/sqldef/blob/v${version}/CHANGELOG.md";
+    maintainers = with maintainers; [ kgtkr ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/sqlint/Gemfile b/nixpkgs/pkgs/development/tools/sqlint/Gemfile
new file mode 100644
index 000000000000..7f045baeaa01
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/sqlint/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'sqlint'
diff --git a/nixpkgs/pkgs/development/tools/sqlint/Gemfile.lock b/nixpkgs/pkgs/development/tools/sqlint/Gemfile.lock
new file mode 100644
index 000000000000..dab324f352f1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/sqlint/Gemfile.lock
@@ -0,0 +1,17 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    google-protobuf (3.25.0)
+    pg_query (4.2.3)
+      google-protobuf (>= 3.22.3)
+    sqlint (0.3.0)
+      pg_query (>= 1)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  sqlint
+
+BUNDLED WITH
+   2.4.20
diff --git a/nixpkgs/pkgs/development/tools/sqlint/default.nix b/nixpkgs/pkgs/development/tools/sqlint/default.nix
new file mode 100644
index 000000000000..960792d648b3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/sqlint/default.nix
@@ -0,0 +1,18 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "sqlint";
+  gemdir = ./.;
+
+  exes = [ "sqlint" ];
+
+  passthru.updateScript = bundlerUpdateScript "sqlint";
+
+  meta = with lib; {
+    description = "Simple SQL linter";
+    homepage    = "https://github.com/purcell/sqlint";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ ariutta nicknovitski purcell ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/sqlint/gemset.nix b/nixpkgs/pkgs/development/tools/sqlint/gemset.nix
new file mode 100644
index 000000000000..05925a45e69e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/sqlint/gemset.nix
@@ -0,0 +1,34 @@
+{
+  google-protobuf = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "18d1w5j7vjaza3v1ig9j7zyis04kxqdkb1272vbgncxn03ck45mm";
+      type = "gem";
+    };
+    version = "3.25.0";
+  };
+  pg_query = {
+    dependencies = ["google-protobuf"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15ynrzqsmmbmxib8ri8n9k6z3l6rwd91j7y1mghm33nfgdf9bj8w";
+      type = "gem";
+    };
+    version = "4.2.3";
+  };
+  sqlint = {
+    dependencies = ["pg_query"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "06gljzjhbfvxs85699jr1p7y2j8hhi629kfarad7yjqy7ssl541n";
+      type = "gem";
+    };
+    version = "0.3.0";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/sqsh/default.nix b/nixpkgs/pkgs/development/tools/sqsh/default.nix
new file mode 100644
index 000000000000..ba4a681a594d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/sqsh/default.nix
@@ -0,0 +1,49 @@
+{ lib, stdenv, fetchurl, autoreconfHook, freetds, readline, libiconv }:
+
+let
+  mainVersion = "2.5";
+
+in stdenv.mkDerivation rec {
+  pname = "sqsh";
+  version = "${mainVersion}.16.1";
+
+  src = fetchurl {
+    url    = "mirror://sourceforge/sqsh/sqsh/sqsh-${mainVersion}/${pname}-${version}.tgz";
+    sha256 = "1wi0hdmhk7l8nrz4j3kaa177mmxyklmzhj7sq1gj4q6fb8v1yr6n";
+  };
+
+  preConfigure = ''
+    export SYBASE=${freetds}
+  '' + lib.optionalString stdenv.isDarwin ''
+    substituteInPlace configure --replace "libct.so" "libct.dylib"
+  '';
+
+  enableParallelBuilding = true;
+
+  buildInputs = [ freetds readline libiconv ];
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  patches = [
+    (fetchurl {
+      # https://cvsweb.openbsd.org/cgi-bin/cvsweb/ports/databases/sqsh/patches/patch-src_cmd_connect_c
+      name = "patch-src_cmd_connect_c.patch";
+      url = "https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/ports/databases/sqsh/patches/patch-src_cmd_connect_c?rev=1.2&content-type=text/plain";
+      sha256 = "1dz97knr2h0a0ca1vq2mx6h8s3ns9jb1a0qraa4wkfmcdi3aqw0j";
+    })
+  ];
+
+  patchFlags = [ "-p0" ];
+
+  meta = with lib; {
+    description = "Command line tool for querying Sybase/MSSQL databases";
+    longDescription = ''
+      Sqsh (pronounced skwish) is short for SQshelL (pronounced s-q-shell),
+      it is intended as a replacement for the venerable 'isql' program supplied
+      by Sybase.
+    '';
+    license = licenses.gpl2;
+    homepage = "https://sourceforge.net/projects/sqsh/";
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/squawk/default.nix b/nixpkgs/pkgs/development/tools/squawk/default.nix
new file mode 100644
index 000000000000..1813ac21659a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/squawk/default.nix
@@ -0,0 +1,54 @@
+{ darwin
+, fetchFromGitHub
+, lib
+, libiconv
+, libpg_query
+, openssl
+, pkg-config
+, rustPlatform
+, stdenv
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "squawk";
+  version = "0.28.0";
+
+  src = fetchFromGitHub {
+    owner = "sbdchd";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-RnY41G0ombqJewv+kxvg8AwQeRaVb+frZjmU/Cd28Jo=";
+  };
+
+  cargoHash = "sha256-YR2ZSwrCkX8eyHTj1Dtk9f01/y9fDtknouige68kS8I=";
+
+  nativeBuildInputs = [
+    pkg-config
+    rustPlatform.bindgenHook
+  ];
+
+  buildInputs = lib.optionals (!stdenv.isDarwin) [
+    libiconv
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin (with darwin.apple_sdk.frameworks; [
+    CoreFoundation
+    Security
+  ]);
+
+  OPENSSL_NO_VENDOR = 1;
+
+  LIBPG_QUERY_PATH = libpg_query;
+
+  checkFlags = [
+    # depends on the PostgreSQL version
+    "--skip=parse::tests::test_parse_sql_query_json"
+  ];
+
+  meta = with lib; {
+    description = "Linter for PostgreSQL, focused on migrations";
+    homepage = "https://squawkhq.com/";
+    changelog = "https://github.com/sbdchd/squawk/blob/v${version}/CHANGELOG.md";
+    license = licenses.gpl3Only;
+    maintainers = with lib.maintainers; [ andrewsmith marsam ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/sshs/default.nix b/nixpkgs/pkgs/development/tools/sshs/default.nix
new file mode 100644
index 000000000000..74eecc7979c0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/sshs/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, nix-update-script
+}:
+
+buildGoModule rec {
+  pname = "sshs";
+  version = "3.4.0";
+
+  src = fetchFromGitHub {
+    owner = "quantumsheep";
+    repo = pname;
+    rev = version;
+    hash = "sha256-KD971dGm1oQt9GbiUGZm2k4SJrBAA9rnHj7Gu0t3SJw=";
+  };
+
+  vendorHash = "sha256-OCh37wjSs40Q0VQmoc1nXQ4nWddnoUCrI5xgxpxR/Ec=";
+
+  ldflags = [ "-s" "-w" "-X github.com/quantumsheep/sshs/cmd.Version=${version}" ];
+
+  passthru.updateScript = nix-update-script { };
+
+  meta = with lib; {
+    description = "Terminal user interface for SSH";
+    homepage = "https://github.com/quantumsheep/sshs";
+    license = licenses.mit;
+    maintainers = with maintainers; [ not-my-segfault ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/sslmate-agent/default.nix b/nixpkgs/pkgs/development/tools/sslmate-agent/default.nix
new file mode 100644
index 000000000000..dccc22e7fe9e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/sslmate-agent/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchurl, dpkg, autoPatchelfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "sslmate-agent";
+  version = "1.99.11";
+
+  src = fetchurl {
+    url = "https://packages.sslmate.com/debian/pool/sslmate2/s/sslmate-client/${pname}_${version}-1_amd64.deb";
+    sha256 = "sha256-LBiZI0pGAFWnvTigEhtkhHq4FGdbYiMzjLheMuP0YTU=";
+  };
+
+  nativeBuildInputs = [
+    dpkg
+    autoPatchelfHook
+  ];
+
+  unpackCmd = ''
+    dpkg-deb -x ${src} ./sslmate-agent-${pname}
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    # Not moving etc because it only contains init.rd setttings
+    mv usr $out
+    mv lib $out
+
+    substituteInPlace $out/lib/systemd/system/sslmate-agent.service \
+      --replace "/usr/s" "$out/"
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Daemon for managing SSL/TLS certificates on a server";
+    homepage = "https://sslmate.com/";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    maintainers = with maintainers; [ wolfangaukang ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/sslmate/default.nix b/nixpkgs/pkgs/development/tools/sslmate/default.nix
new file mode 100644
index 000000000000..836b0bc1b08e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/sslmate/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchurl, perlPackages, makeWrapper, openssl }:
+
+stdenv.mkDerivation rec {
+  pname = "sslmate";
+  version = "1.9.1";
+
+  src = fetchurl {
+    url = "https://packages.sslmate.com/other/${pname}-${version}.tar.gz";
+    sha256 = "sha256-F5szGn1cbw7R3lHMocM7as1RS/uaBqKCsvOxA+rXDOc=";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ perlPackages.perl ];
+
+  postInstall = ''
+    wrapProgram $out/bin/sslmate --prefix PERL5LIB : \
+      "${with perlPackages; makePerlPath [
+        URI
+        JSONPP
+        TermReadKey
+      ]}" \
+      --prefix PATH : "${openssl.bin}/bin"
+  '';
+
+  meta = with lib; {
+    homepage = "https://sslmate.com";
+    maintainers = [ maintainers.domenkozar ];
+    description = "Easy to buy, deploy, and manage your SSL certs";
+    platforms = platforms.unix;
+    license = licenses.mit; # X11
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/stagit/default.nix b/nixpkgs/pkgs/development/tools/stagit/default.nix
new file mode 100644
index 000000000000..05ea0d2e03e6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/stagit/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, libgit2, fetchgit }:
+
+stdenv.mkDerivation rec {
+  pname = "stagit";
+  version = "1.2";
+
+  src = fetchgit {
+    url = "git://git.codemadness.org/stagit";
+    rev = version;
+    sha256 = "sha256-mVYR8THGGfaTsx3aaSbQBxExRo87K47SD+PU5cZ8z58=";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  buildInputs = [ libgit2 ];
+
+  meta = with lib; {
+    description = "git static site generator";
+    homepage = "https://git.codemadness.org/stagit/file/README.html";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ jb55 sikmir ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/statik/default.nix b/nixpkgs/pkgs/development/tools/statik/default.nix
new file mode 100644
index 000000000000..e77cf8f3bb0b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/statik/default.nix
@@ -0,0 +1,29 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "statik";
+  version = "0.1.7";
+
+  src = fetchFromGitHub {
+    owner = "rakyll";
+    repo = "statik";
+    rev = "v${version}";
+    sha256 = "ahsNiac/3I2+PUqc90E73Brb99M68ewh9nWXoupfE3g=";
+  };
+
+  vendorHash = null;
+
+  # Avoid building example
+  subPackages = [ "." "fs" ];
+  # Tests are checking that the files embedded are preserving
+  # their meta data like dates etc, but it assumes to be in 2048
+  # which is not the case once entered the nix store
+  doCheck = false;
+
+  meta = with lib; {
+    homepage = "https://github.com/rakyll/statik";
+    description = "Embed files into a Go executable ";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ Madouura ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/steamos-devkit/default.nix b/nixpkgs/pkgs/development/tools/steamos-devkit/default.nix
new file mode 100644
index 000000000000..43c4af73f2a7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/steamos-devkit/default.nix
@@ -0,0 +1,135 @@
+{ lib
+, fetchFromGitHub
+, fetchFromGitLab
+, writeScript
+, python3
+, copyDesktopItems
+, makeDesktopItem
+, pkg-config
+, SDL2
+}:
+let
+  # steamos-devkit requires a build of the unreleased pyimgui 2.0 branch, move to pythonPackages when 2.0 is released.
+  pyimgui = python3.pkgs.buildPythonPackage {
+    pname = "pyimgui";
+    version = "unstable-2022-03-06";
+
+    src = fetchFromGitHub {
+      owner = "pyimgui";
+      repo = "pyimgui";
+      rev = "1f095af5886f424ee12f26fa93b108b6420fafa4"; # dev/version-2.0 branch
+      fetchSubmodules = true;
+      sha256 = "sha256-k070ue132m8H1Zm8bo7J7spCS5dSTGOj689ci7vJ+aw=";
+    };
+
+    nativeBuildInputs = with python3.pkgs; [
+      cython
+      pkg-config
+      SDL2
+    ];
+
+    propagatedBuildInputs = with python3.pkgs; [
+      click
+      pyopengl
+      pysdl2
+    ];
+
+    # Requires OpenGL acceleration
+    doCheck = false;
+    pythonImportsCheck = [ "imgui" ];
+  };
+  steamos-devkit-script = ''
+    #!${python3.interpreter}
+    import os
+
+    # Change the cwd to avoid imgui using cwd which often is ~ to store the state, use the same location as the settings
+    path = os.path.expanduser(os.path.join("~", ".devkit-client-gui"))
+    os.makedirs(path, exist_ok=True)
+    os.chdir(path)
+
+    # Workaround to get pysdl to work on wayland, remove when https://gitlab.steamos.cloud/devkit/steamos-devkit/-/issues/1 is solved.
+    if os.environ.get("XDG_SESSION_TYPE") == "wayland":
+      os.environ["SDL_VIDEODRIVER"] = "wayland"
+
+    import devkit_client.gui2
+    devkit_client.gui2.main()
+  '';
+in
+python3.pkgs.buildPythonPackage rec {
+  pname = "steamos-devkit";
+  version = "0.20230411.0";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.steamos.cloud";
+    owner = "devkit";
+    repo = "steamos-devkit";
+    rev = "v${version}";
+    sha256 = "sha256-DQIyjEpUFnC0OjMjKMrGYs4+HoEDfcSc3m3rfXLPyZ0=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    appdirs
+    bcrypt
+    cffi
+    cryptography
+    idna
+    ifaddr
+    netifaces
+    numpy
+    paramiko
+    pycparser
+    pyimgui
+    pynacl
+    pysdl2
+    signalslot
+    six
+  ];
+
+  nativeBuildInputs = [
+    copyDesktopItems
+  ];
+
+  postUnpack = ''
+    # Find the absolute source root to link correctly to the previous root
+    prevRoot=$(realpath $sourceRoot)
+
+    # Update the source root to the devkit_client package
+    sourceRoot="$sourceRoot/client"
+
+    # Link the setup script into the new source root
+    ln -s $prevRoot/setup/shiv-linux-setup.py $sourceRoot/setup.py
+  '';
+
+  postInstall = ''
+    mkdir -p $out/bin
+
+    # These are various assets like scripts that steamos-devkit will copy to the remote device
+    cp -R ./devkit-utils $out/${python3.sitePackages}/devkit-utils
+
+    # writeScript + symlink will be ignored by wrapPythonPrograms
+    # Copying it is undesirable too, just write it directly to a script instead
+    cat << EOF > $out/bin/steamos-devkit
+    ${steamos-devkit-script}
+    EOF
+    chmod +x $out/bin/steamos-devkit
+  '';
+
+  # There are no checks for steamos-devkit
+  doCheck = false;
+  pythonImportsCheck = [ "devkit_client" ];
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = "SteamOS-Devkit";
+      exec = "steamos-devkit";
+      desktopName = "SteamOS Devkit Client";
+    })
+  ];
+
+  meta = with lib; {
+    description = "SteamOS Devkit Client";
+    homepage = "https://gitlab.steamos.cloud/devkit/steamos-devkit";
+    license = licenses.mit;
+    maintainers = with maintainers; [ myaats ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/stylua/default.nix b/nixpkgs/pkgs/development/tools/stylua/default.nix
new file mode 100644
index 000000000000..de4a20ee36fe
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/stylua/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+  # lua54 implies lua52/lua53
+, features ? [ "lua54" "luau" ]
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "stylua";
+  version = "0.20.0";
+
+  src = fetchFromGitHub {
+    owner = "johnnymorganz";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-bqUmLtJLjImWqe06CeIWIU4FP+/Vxszp2yKMosVeyZM=";
+  };
+
+  cargoHash = "sha256-EMHt9oskPJCeAu/5VG6PaMt/4NTmNOaFTM5TMOy0BV8=";
+
+  # remove cargo config so it can find the linker on aarch64-unknown-linux-gnu
+  postPatch = ''
+    rm .cargo/config.toml
+  '';
+
+  buildFeatures = features;
+
+  meta = with lib; {
+    description = "An opinionated Lua code formatter";
+    homepage = "https://github.com/johnnymorganz/stylua";
+    changelog = "https://github.com/johnnymorganz/stylua/blob/v${version}/CHANGELOG.md";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "stylua";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/subxt/default.nix b/nixpkgs/pkgs/development/tools/subxt/default.nix
new file mode 100644
index 000000000000..fd557c96b04f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/subxt/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+, cmake
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "subxt";
+  version = "0.34.0";
+
+  src = fetchFromGitHub {
+    owner = "paritytech";
+    repo = "subxt";
+    rev = "v${version}";
+    hash = "sha256-1SkAYJ6YdZeaD3c1pekd/nwTEI9Zt/2fmA3Y7PPLxoE=";
+  };
+
+  cargoHash = "sha256-a3LPvPCQklmrtC9XpxARgYeL4bmj2vFsLbiRGjNUGio=";
+
+  # Only build the command line client
+  cargoBuildFlags = [ "--bin" "subxt" ];
+
+  # Needed by wabt-sys
+  nativeBuildInputs = [ cmake ];
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  # Requires a running substrate node
+  doCheck = false;
+
+  meta = with lib; {
+    homepage = "https://github.com/paritytech/subxt";
+    description = "Submit transactions to a substrate node via RPC.";
+    license = with licenses; [ gpl3Plus asl20 ];
+    maintainers = [ maintainers.FlorianFranzen ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/summon/default.nix b/nixpkgs/pkgs/development/tools/summon/default.nix
new file mode 100644
index 000000000000..598e8fab6392
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/summon/default.nix
@@ -0,0 +1,29 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+buildGoModule rec {
+  pname = "summon";
+  version = "0.9.6";
+
+  src = fetchFromGitHub {
+    owner = "cyberark";
+    repo = "summon";
+    rev = "v${version}";
+    hash = "sha256-OOIq6U7HCxcYvBFZdewSpglg9lFzITsb6IPu/EID+Z0=";
+  };
+
+  vendorHash = "sha256-qh3DJFxf1FqYgbULo4M+0nSOQ6uTlMTjAqNl7l+IPvk=";
+
+  subPackages = [ "cmd" ];
+
+  postInstall = ''
+    mv $out/bin/cmd $out/bin/summon
+  '';
+
+  meta = with lib; {
+    description =
+      "CLI that provides on-demand secrets access for common DevOps tools";
+    homepage = "https://cyberark.github.io/summon";
+    license = lib.licenses.mit;
+    maintainers = with maintainers; [ quentini ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/sunxi-tools/default.nix b/nixpkgs/pkgs/development/tools/sunxi-tools/default.nix
new file mode 100644
index 000000000000..320fcb1b04cd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/sunxi-tools/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, dtc, libusb1, zlib }:
+
+stdenv.mkDerivation rec {
+  pname = "sunxi-tools";
+  version = "unstable-2021-08-29";
+
+  src = fetchFromGitHub {
+    owner = "linux-sunxi";
+    repo = "sunxi-tools";
+    rev = "74273b671a3fc34048383c40c85c684423009fb9";
+    sha256 = "1gwamb64vr45iy2ry7jp1k3zc03q5sydmdflrbwr892f0ijh2wjl";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ dtc libusb1 zlib ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  buildFlags = [ "tools" "misc" ];
+
+  installTargets = [ "install-tools" "install-misc" ];
+
+  meta = with lib; {
+    description = "Tools for Allwinner SoC devices";
+    homepage = "http://linux-sunxi.org/";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ elitak ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/supabase-cli/default.nix b/nixpkgs/pkgs/development/tools/supabase-cli/default.nix
new file mode 100644
index 000000000000..479bd5d76081
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/supabase-cli/default.nix
@@ -0,0 +1,57 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+, testers
+, supabase-cli
+, nix-update-script
+}:
+
+buildGoModule rec {
+  pname = "supabase-cli";
+  version = "1.144.2";
+
+  src = fetchFromGitHub {
+    owner = "supabase";
+    repo = "cli";
+    rev = "v${version}";
+    hash = "sha256-gcQIdXQMcHRbtVEa5dQFAE2UGf2caf7FUlFF+4jNcFY=";
+  };
+
+  vendorHash = "sha256-9SKQkfrHNQbJAzrgI7fmkml6RvjqrfpuE9XppKrHBmk=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=github.com/supabase/cli/internal/utils.Version=${version}"
+  ];
+
+  doCheck = false; # tests are trying to connect to localhost
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    rm $out/bin/{codegen,docs,listdep}
+    mv $out/bin/{cli,supabase}
+
+    installShellCompletion --cmd supabase \
+      --bash <($out/bin/supabase completion bash) \
+      --fish <($out/bin/supabase completion fish) \
+      --zsh <($out/bin/supabase completion zsh)
+  '';
+
+  passthru = {
+    tests.version = testers.testVersion {
+      package = supabase-cli;
+    };
+    updateScript = nix-update-script { };
+  };
+
+  meta = with lib; {
+    description = "A CLI for interacting with supabase";
+    homepage = "https://github.com/supabase/cli";
+    license = licenses.mit;
+    maintainers = with maintainers; [ gerschtli kashw2 ];
+    mainProgram = "supabase";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/surge-cli/default.nix b/nixpkgs/pkgs/development/tools/surge-cli/default.nix
new file mode 100644
index 000000000000..13cd941d1a2b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/surge-cli/default.nix
@@ -0,0 +1,25 @@
+{ buildNpmPackage, fetchFromGitHub, lib }:
+
+buildNpmPackage rec {
+  pname = "surge-cli";
+  version = "0.23.1";
+
+  src = fetchFromGitHub {
+    owner = "sintaxi";
+    repo = "surge";
+    rev = "v${version}";
+    hash = "sha256-EpYww/YCQhPFmnOJ1zbigI2qyUrKN2TxKHEju/0Si3M=";
+  };
+
+  npmDepsHash = "sha256-F1C/sfOT/Tf+h28g1umP6czLFIsxDkbvT14ZfWLTiCE=";
+
+  dontNpmBuild = true;
+
+  meta = with lib; {
+    mainProgram = "surge";
+    description = "CLI for the surge.sh CDN";
+    homepage = "https://surge.sh";
+    license = licenses.mit;
+    maintainers = with maintainers; [ MoritzBoehme ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/swc/default.nix b/nixpkgs/pkgs/development/tools/swc/default.nix
new file mode 100644
index 000000000000..afb4ad5d5899
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/swc/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, rustPlatform
+, fetchCrate
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "swc";
+  version = "0.91.69";
+
+  env = {
+    # swc depends on nightly features
+    RUSTC_BOOTSTRAP = 1;
+  };
+
+  src = fetchCrate {
+    pname = "swc_cli";
+    inherit version;
+    sha256 = "sha256-8zbxE1qkEWeSYt2L5PElZeJPRuK4Yiooy8xDmCD/PYw=";
+  };
+
+  cargoSha256 = "sha256-kRsRUOvDMRci3bN5NfhiLCWojNkSuLz3K4BfKfGYc7g=";
+
+  buildFeatures = [ "swc_core/plugin_transform_host_native" ];
+
+  meta = with lib; {
+    description = "Rust-based platform for the Web";
+    homepage = "https://github.com/swc-project/swc";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ dit7ya kashw2 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/swiftformat/default.nix b/nixpkgs/pkgs/development/tools/swiftformat/default.nix
new file mode 100644
index 000000000000..823496693f25
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/swiftformat/default.nix
@@ -0,0 +1,45 @@
+{ stdenv, lib, fetchFromGitHub, runCommand }:
+
+# This derivation is impure: it relies on an Xcode toolchain being installed
+# and available in the expected place. The values of sandboxProfile and
+# hydraPlatforms are copied pretty directly from the MacVim derivation, which
+# is also impure.
+
+stdenv.mkDerivation rec {
+  pname = "swiftformat";
+  version = "0.47.10";
+
+  src = fetchFromGitHub {
+    owner = "nicklockwood";
+    repo = "SwiftFormat";
+    rev = version;
+    sha256 = "1gqxpymbhpmap0i2blg9akarlql4mkzv45l4i212gsxcs991b939";
+  };
+
+  preConfigure = "LD=$CC";
+
+  buildPhase = ''
+    /usr/bin/xcodebuild -project SwiftFormat.xcodeproj \
+      -scheme "SwiftFormat (Command Line Tool)" \
+      CODE_SIGN_IDENTITY= SYMROOT=build OBJROOT=build
+  '';
+
+  installPhase = ''
+    install -D -m 0555 build/Release/swiftformat $out/bin/swiftformat
+  '';
+
+  sandboxProfile = ''
+    (allow file-read* file-write* process-exec mach-lookup)
+    ; block homebrew dependencies
+    (deny file-read* file-write* process-exec mach-lookup (subpath "/usr/local") (with no-log))
+  '';
+
+  meta = with lib; {
+    description = "A code formatting and linting tool for Swift";
+    homepage = "https://github.com/nicklockwood/SwiftFormat";
+    license = licenses.mit;
+    maintainers = [ maintainers.bdesham ];
+    platforms = platforms.darwin;
+    hydraPlatforms = [];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/swiftpm2nix/default.nix b/nixpkgs/pkgs/development/tools/swiftpm2nix/default.nix
new file mode 100644
index 000000000000..25d6b06ef98b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/swiftpm2nix/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, callPackage, makeWrapper, jq, nix-prefetch-git }:
+
+stdenv.mkDerivation {
+  name = "swiftpm2nix";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  dontUnpack = true;
+
+  installPhase = ''
+    install -vD ${./swiftpm2nix.sh} $out/bin/swiftpm2nix
+    wrapProgram $out/bin/$name \
+      --prefix PATH : ${lib.makeBinPath [ jq nix-prefetch-git ]} \
+  '';
+
+  preferLocalBuild = true;
+
+  passthru = callPackage ./support.nix { };
+
+  meta = {
+    description = "Generate a Nix expression to fetch swiftpm dependencies";
+    maintainers = with lib.maintainers; [ dtzWill trepetti dduan trundle stephank ];
+    platforms = lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/swiftpm2nix/support.nix b/nixpkgs/pkgs/development/tools/swiftpm2nix/support.nix
new file mode 100644
index 000000000000..dfc2d01a4501
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/swiftpm2nix/support.nix
@@ -0,0 +1,57 @@
+{ lib, fetchgit, formats }:
+with lib;
+let
+  json = formats.json { };
+in rec {
+
+  # Derive a pin file from workspace state.
+  mkPinFile = workspaceState:
+    assert workspaceState.version >= 5 && workspaceState.version <= 6;
+    json.generate "Package.resolved" {
+      version = 1;
+      object.pins = map (dep: {
+        package = dep.packageRef.name;
+        repositoryURL = dep.packageRef.location;
+        state = dep.state.checkoutState;
+      }) workspaceState.object.dependencies;
+    };
+
+  # Make packaging helpers from swiftpm2nix generated output.
+  helpers = generated: let
+    inherit (import generated) workspaceStateFile hashes;
+    workspaceState = lib.importJSON workspaceStateFile;
+    pinFile = mkPinFile workspaceState;
+  in rec {
+
+    # Create fetch expressions for dependencies.
+    sources = listToAttrs (
+      map (dep: nameValuePair dep.subpath (fetchgit {
+        url = dep.packageRef.location;
+        rev = dep.state.checkoutState.revision;
+        sha256 = hashes.${dep.subpath};
+        fetchSubmodules = true;
+      })) workspaceState.object.dependencies
+    );
+
+    # Configure phase snippet for use in packaging.
+    configure = ''
+      mkdir -p .build/checkouts
+      ln -sf ${pinFile} ./Package.resolved
+      install -m 0600 ${workspaceStateFile} ./.build/workspace-state.json
+    ''
+      + concatStrings (mapAttrsToList (name: src: ''
+        ln -s '${src}' '.build/checkouts/${name}'
+      '') sources)
+      + ''
+        # Helper that makes a swiftpm dependency mutable by copying the source.
+        swiftpmMakeMutable() {
+          local orig="$(readlink .build/checkouts/$1)"
+          rm .build/checkouts/$1
+          cp -r "$orig" .build/checkouts/$1
+          chmod -R u+w .build/checkouts/$1
+        }
+      '';
+
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/tools/swiftpm2nix/swiftpm2nix.sh b/nixpkgs/pkgs/development/tools/swiftpm2nix/swiftpm2nix.sh
new file mode 100755
index 000000000000..eda7f475064a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/swiftpm2nix/swiftpm2nix.sh
@@ -0,0 +1,45 @@
+#!/usr/bin/env bash
+
+# Generates a Nix expression to fetch swiftpm dependencies, and a
+# configurePhase snippet to prepare a working directory for swift-build.
+
+set -eu -o pipefail
+shopt -s lastpipe
+
+stateFile=".build/workspace-state.json"
+if [[ ! -f "$stateFile" ]]; then
+  echo >&2 "Missing $stateFile. Run 'swift package resolve' first."
+  exit 1
+fi
+
+stateVersion="$(jq .version $stateFile)"
+if [[ $stateVersion -lt 5 || $stateVersion -gt 6 ]]; then
+  echo >&2 "Unsupported $stateFile version"
+  exit 1
+fi
+
+# Iterate dependencies and prefetch.
+hashes=""
+jq -r '.object.dependencies[] | "\(.subpath) \(.packageRef.location) \(.state.checkoutState.revision)"' $stateFile \
+| while read -r name url rev; do
+  echo >&2 "-- Fetching $name"
+  sha256="$(nix-prefetch-git --fetch-submodules $url $rev | jq -r .sha256)"
+  hashes+="
+    \"$name\" = \"$sha256\";"
+  echo >&2
+done
+hashes+=$'\n'"  "
+
+# Generate output.
+mkdir -p nix
+# Copy the workspace state, but clear 'artifacts'.
+jq '.object.artifacts = []' < $stateFile > nix/workspace-state.json
+# Build an expression for fetching sources, and preparing the working directory.
+cat > nix/default.nix << EOF
+# This file was generated by swiftpm2nix.
+{
+  workspaceStateFile = ./workspace-state.json;
+  hashes = {$hashes};
+}
+EOF
+echo >&2 "-- Generated ./nix"
diff --git a/nixpkgs/pkgs/development/tools/symfony-cli/default.nix b/nixpkgs/pkgs/development/tools/symfony-cli/default.nix
new file mode 100644
index 000000000000..e316ae832231
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/symfony-cli/default.nix
@@ -0,0 +1,60 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+, nix-update-script
+, testers
+, symfony-cli
+, nssTools
+, makeBinaryWrapper
+}:
+
+buildGoModule rec {
+  pname = "symfony-cli";
+  version = "5.8.8";
+  vendorHash = "sha256-ACK0JCaS1MOCgUi2DMEjIcKf/nMCcrdDyIdioBZv7qw=";
+
+  src = fetchFromGitHub {
+    owner = "symfony-cli";
+    repo = "symfony-cli";
+    rev = "v${version}";
+    hash = "sha256-GdmFRGyp4s5G5RTEFKjcrY/OpaEVCgRhNVJbY1F8vk0=";
+  };
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X main.version=${version}"
+    "-X main.channel=stable"
+  ];
+
+  buildInputs = [ makeBinaryWrapper ];
+
+  postInstall = ''
+    mkdir $out/libexec
+    mv $out/bin/symfony-cli $out/libexec/symfony
+
+    makeBinaryWrapper $out/libexec/symfony $out/bin/symfony \
+      --prefix PATH : ${lib.makeBinPath [ nssTools ]}
+  '';
+
+  # Tests requires network access
+  doCheck = false;
+
+  passthru = {
+    updateScript = nix-update-script { };
+    tests.version = testers.testVersion {
+      inherit version;
+      package = symfony-cli;
+      command = "symfony version --no-ansi";
+    };
+  };
+
+  meta = {
+    changelog = "https://github.com/symfony-cli/symfony-cli/releases/tag/v${version}";
+    description = "Symfony CLI";
+    homepage = "https://github.com/symfony-cli/symfony-cli";
+    license = lib.licenses.agpl3Plus;
+    mainProgram = "symfony";
+    maintainers = with lib.maintainers; [ drupol ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/systemfd/default.nix b/nixpkgs/pkgs/development/tools/systemfd/default.nix
new file mode 100644
index 000000000000..a695cf83a295
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/systemfd/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+}:
+
+let
+  version = "0.4.0";
+
+in
+rustPlatform.buildRustPackage {
+
+  pname = "systemfd";
+  inherit version;
+
+  src = fetchFromGitHub {
+    repo = "systemfd";
+    owner = "mitsuhiko";
+    rev = version;
+    sha256 = "sha256-HUJgYPD4C9fMUYKpzmIy9gDT6HAZDWw1JLMKLgzRQTY=";
+  };
+
+  cargoSha256 = "sha256-UhfE9Q5E79rN2mjkNB5IAN/J0fbpoy9CmM6ojHQcFP0=";
+
+  meta = {
+    description = "A convenient helper for passing sockets into another process";
+    homepage = "https://github.com/mitsuhiko/systemfd";
+    license = lib.licenses.asl20;
+    maintainers = [ lib.maintainers.adisbladis ];
+    platforms = lib.platforms.unix;
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/tools/tabnine/default.nix b/nixpkgs/pkgs/development/tools/tabnine/default.nix
new file mode 100644
index 000000000000..4426e2bbf81f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/tabnine/default.nix
@@ -0,0 +1,48 @@
+{ stdenv, lib, fetchurl, unzip }:
+let
+  sources = lib.importJSON ./sources.json;
+  platform =
+    if (builtins.hasAttr stdenv.hostPlatform.system sources.platforms) then
+      builtins.getAttr (stdenv.hostPlatform.system) sources.platforms
+    else
+      throw "Not supported on ${stdenv.hostPlatform.system}";
+in
+stdenv.mkDerivation {
+  pname = "tabnine";
+  inherit (sources) version;
+
+  src = fetchurl {
+    url = "https://update.tabnine.com/bundles/${sources.version}/${platform.name}/TabNine.zip";
+    inherit (platform) hash;
+  };
+
+  dontBuild = true;
+
+  # Work around the "unpacker appears to have produced no directories"
+  # case that happens when the archive doesn't have a subdirectory.
+  sourceRoot = ".";
+
+  nativeBuildInputs = [ unzip ];
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm755 TabNine $out/bin/TabNine
+    install -Dm755 TabNine-deep-cloud $out/bin/TabNine-deep-cloud
+    install -Dm755 TabNine-deep-local $out/bin/TabNine-deep-local
+    install -Dm755 WD-TabNine $out/bin/WD-TabNine
+    runHook postInstall
+  '';
+
+  passthru = {
+    platform = platform.name;
+    updateScript = ./update.sh;
+  };
+
+  meta = with lib; {
+    homepage = "https://tabnine.com";
+    description = "Smart Compose for code that uses deep learning to help you write code faster";
+    license = licenses.unfree;
+    platforms = attrNames sources.platforms;
+    maintainers = with maintainers; [ lovesegfault ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/tabnine/sources.json b/nixpkgs/pkgs/development/tools/tabnine/sources.json
new file mode 100644
index 000000000000..96a791ff0981
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/tabnine/sources.json
@@ -0,0 +1,17 @@
+{
+  "version": "4.10.0",
+  "platforms": {
+    "x86_64-linux": {
+      "name": "x86_64-unknown-linux-musl",
+      "hash": "sha256-sVjSrQsdOtWvuYZqLSmlsbu2yKe7MYBOxctrKlltlwY="
+    },
+    "aarch64-darwin": {
+      "name": "aarch64-apple-darwin",
+      "hash": "sha256-HMPK09rOwRbsRwiHwjXZnDt4evEz2CP8zAReg/bhgTg="
+    },
+    "x86_64-darwin": {
+      "name": "x86_64-apple-darwin",
+      "hash": "sha256-8y96VXWvHYTO+qs8x6ND5tD3Mb4qBXwdcIeYBLOkCdc="
+    }
+  }
+}
diff --git a/nixpkgs/pkgs/development/tools/tabnine/update.sh b/nixpkgs/pkgs/development/tools/tabnine/update.sh
new file mode 100755
index 000000000000..5269a027198b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/tabnine/update.sh
@@ -0,0 +1,50 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p curl jq git
+#shellcheck shell=bash
+
+set -euo pipefail
+
+SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd)
+
+function prefetch-sri() {
+    nix-prefetch-url "$1" 2>/dev/null |
+        xargs nix --experimental-features nix-command hash to-sri --type sha256
+}
+
+declare -A platforms=(
+    [x86_64-unknown-linux-musl]="x86_64-linux"
+    [x86_64-apple-darwin]="x86_64-darwin"
+    [aarch64-apple-darwin]="aarch64-darwin"
+)
+
+old_version="$(jq -r '.version' "$SCRIPT_DIR/sources.json")"
+new_version="$(curl -sS https://update.tabnine.com/bundles/version)"
+
+echo "Updating $old_version -> $new_version"
+
+sources_tmp="$(mktemp)"
+trap 'rm -f "$sources_tmp"' EXIT
+
+cat <<EOF >"$sources_tmp"
+{
+  "version": "$new_version",
+  "platforms": {}
+}
+EOF
+
+for platform in "${!platforms[@]}"; do
+    url="https://update.tabnine.com/bundles/${new_version}/${platform}/TabNine.zip"
+    hash="$(prefetch-sri "$url")"
+    nix_platform="${platforms[$platform]}"
+    cat <<<"$(jq --arg nix_platform "$nix_platform" --arg platform "$platform" --arg hash "$hash" '.platforms += {($nix_platform): {name: $platform, hash: $hash}}' "$sources_tmp")" >"$sources_tmp"
+done
+
+cp "$sources_tmp" "$SCRIPT_DIR/sources.json"
+
+if [[ `git status --porcelain "$SCRIPT_DIR/sources.json"` ]]; then
+    git add "$SCRIPT_DIR/sources.json"
+    git commit -m "tabnine: $old_version -> $new_version"
+else
+    echo "No changes made to $SCRIPT_DIR/sources.json, skipping commit"
+fi
+
diff --git a/nixpkgs/pkgs/development/tools/tailwindcss/default.nix b/nixpkgs/pkgs/development/tools/tailwindcss/default.nix
new file mode 100644
index 000000000000..0b4b4978966b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/tailwindcss/default.nix
@@ -0,0 +1,62 @@
+{ lib
+, fetchurl
+, stdenv
+, runCommand
+, tailwindcss
+,
+}:
+let
+  inherit (stdenv.hostPlatform) system;
+  throwSystem = throw "tailwindcss has not been packaged for ${system} yet.";
+
+  plat = {
+    aarch64-darwin = "macos-arm64";
+    aarch64-linux = "linux-arm64";
+    armv7l-linux = "linux-armv7";
+    x86_64-darwin = "macos-x64";
+    x86_64-linux = "linux-x64";
+  }.${system} or throwSystem;
+
+  hash = {
+    aarch64-darwin = "sha256-QHOOWezvBvlVJDFU59HG6vETcAN8vu5KMsMTg4fi2l0=";
+    aarch64-linux = "sha256-EXjD6LRLnrQ/QOeG7iVmTJPYP20FsGLA2cr0ENZNVYc=";
+    armv7l-linux = "sha256-OOAEsUQARJXNFIYhrbhSwh1dNQ5mMIyP+eL9kKFXJvU=";
+    x86_64-darwin = "sha256-WU0BsDISUZnbEFxmH+I95MBpAGkhuW9/7pjuT7wV+AA=";
+    x86_64-linux = "sha256-poFMyPtuVz3WNzUgk/O46SfFyGKLH/h4JmUpNa8UMLE=";
+  }.${system} or throwSystem;
+in
+stdenv.mkDerivation rec {
+  pname = "tailwindcss";
+  version = "3.4.1";
+
+  src = fetchurl {
+    url = "https://github.com/tailwindlabs/tailwindcss/releases/download/v${version}/tailwindcss-${plat}";
+    inherit hash;
+  };
+
+  dontUnpack = true;
+  dontConfigure = true;
+  dontBuild = true;
+  dontFixup = true;
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp ${src} $out/bin/tailwindcss
+    chmod 755 $out/bin/tailwindcss
+  '';
+
+  passthru.tests.helptext = runCommand "tailwindcss-test-helptext" { } ''
+    ${tailwindcss}/bin/tailwindcss --help > $out
+  '';
+  passthru.updateScript = ./update.sh;
+
+  meta = with lib; {
+    description = "Command-line tool for the CSS framework with composable CSS classes, standalone CLI";
+    homepage = "https://tailwindcss.com/blog/standalone-cli";
+    license = licenses.mit;
+    sourceProvenance = [ sourceTypes.binaryNativeCode ];
+    maintainers = [ maintainers.adamcstephens ];
+    mainProgram = "tailwindcss";
+    platforms = platforms.darwin ++ platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/tailwindcss/update.sh b/nixpkgs/pkgs/development/tools/tailwindcss/update.sh
new file mode 100755
index 000000000000..b3a9ccf37819
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/tailwindcss/update.sh
@@ -0,0 +1,31 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p curl gnused jq nix-prefetch
+set -eou pipefail
+
+ROOT="$(dirname "$(readlink -f "$0")")"
+
+CURRENT_VERSION=$(nix-instantiate --eval --strict --json -A tailwindcss.version . | jq -r .)
+LATEST_VERSION=$(curl --fail --silent https://api.github.com/repos/tailwindlabs/tailwindcss/releases/latest | jq --raw-output .tag_name | sed 's/v//')
+sed -i "s/version = \".*\"/version = \"${LATEST_VERSION}\"/" "$ROOT/default.nix"
+
+if [ "$CURRENT_VERSION" = "$LATEST_VERSION" ]; then
+    echo "tailwindcss already at latest version $CURRENT_VERSION, exiting"
+    exit 0
+fi
+
+function updatePlatform() {
+    NIXPLAT=$1
+    TAILWINDPLAT=$2
+    echo "Updating tailwindcss for $NIXPLAT"
+
+    URL="https://github.com/tailwindlabs/tailwindcss/releases/download/v${LATEST_VERSION}/tailwindcss-${TAILWINDPLAT}"
+    HASH=$(nix hash to-sri --type sha256 "$(nix-prefetch-url --type sha256 "$URL")")
+
+    sed -i "s,$NIXPLAT = \"sha256.*\",$NIXPLAT = \"${HASH}\"," "$ROOT/default.nix"
+}
+
+updatePlatform aarch64-darwin macos-arm64
+updatePlatform aarch64-linux linux-arm64
+updatePlatform armv7l-linux linux-armv7
+updatePlatform x86_64-darwin macos-x64
+updatePlatform x86_64-linux linux-x64
diff --git a/nixpkgs/pkgs/development/tools/taplo/default.nix b/nixpkgs/pkgs/development/tools/taplo/default.nix
new file mode 100644
index 000000000000..43026331f5c7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/taplo/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, rustPlatform
+, fetchCrate
+, stdenv
+, Security
+, withLsp ? true
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "taplo";
+  version = "0.8.1";
+
+  src = fetchCrate {
+    inherit version;
+    pname = "taplo-cli";
+    sha256 = "sha256-evNW6OA7rArj0TvOaQgktcQy0tWnel3ZL+ic78e6lOk=";
+  };
+
+  cargoSha256 = "sha256-jeLjoqEieR96mUZQmQtv7P78lmOaF18ruVhZLi/TieQ=";
+
+  buildInputs = lib.optional stdenv.isDarwin Security;
+
+  buildFeatures = lib.optional withLsp "lsp";
+
+  meta = with lib; {
+    description = "A TOML toolkit written in Rust";
+    homepage = "https://taplo.tamasfe.dev";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "taplo";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/tapview/default.nix b/nixpkgs/pkgs/development/tools/tapview/default.nix
new file mode 100644
index 000000000000..19c1113c5cd4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/tapview/default.nix
@@ -0,0 +1,32 @@
+{ asciidoctor
+, fetchFromGitLab
+, lib
+, stdenv
+}:
+
+stdenv.mkDerivation rec {
+  pname = "tapview";
+  version = "1.1";
+
+  nativeBuildInputs = [ asciidoctor ];
+
+  src = fetchFromGitLab {
+    owner = "esr";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-inrxICNglZU/tup+YnHaDiVss32K2OXht/7f8lOZI4g=";
+  };
+
+  # Remove unnecessary `echo` checks: `/bin/echo` fails, and `echo -n` works as expected.
+  patches = [ ./dont_check_echo.patch ];
+
+  makeFlags = [ "prefix=$(out)" ];
+
+  meta = with lib; {
+    description = "A minimalist pure consumer for TAP (Test Anything Protocol)";
+    homepage = "https://gitlab.com/esr/tapview";
+    license = licenses.bsd2;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ pamplemousse ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/tapview/dont_check_echo.patch b/nixpkgs/pkgs/development/tools/tapview/dont_check_echo.patch
new file mode 100644
index 000000000000..3b12adb84c57
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/tapview/dont_check_echo.patch
@@ -0,0 +1,44 @@
+diff --git a/tapview b/tapview
+index ad6a33a66d1..4cf9545d42f 100644
+--- a/tapview
++++ b/tapview
+@@ -13,21 +13,6 @@
+ #
+ # This is version 1.1
+ # A newer version may be available at https://gitlab.com/esr/tapview
+-#
+-# POSIX allows but does not mandate that -n suppresses emission of a
+-# trailing newline in echo. Thus, some shell builtin echos don't do
+-# that.  Cope gracefully.
+-# shellcheck disable=SC2039
+-if [ "$(echo -n "a"; echo "b")" != "ab" ]
+-then
+-    ECHO="echo"
+-elif [ "$(/bin/echo -n "a"; /bin/echo "b")" = "ab" ]
+-then
+-    ECHO="/bin/echo"
+-else
+-    echo "tapview: bailing out, your echo lacks -n support."
+-    exit 3
+-fi
+ 
+ OK="."
+ FAIL="F"
+@@ -37,7 +22,7 @@ TODO_OK="u"
+ 
+ ship_char() {
+     # shellcheck disable=SC2039
+-    "${ECHO}" -n "$1"
++    echo -n "$1"
+ }
+ 
+ ship_line() {
+@@ -155,7 +140,7 @@ do
+     fi
+ done
+ 
+-/bin/echo ""
++echo ""
+ 
+ if [ -z "$expect" ]
+ then
diff --git a/nixpkgs/pkgs/development/tools/tarmac/Cargo.lock b/nixpkgs/pkgs/development/tools/tarmac/Cargo.lock
new file mode 100644
index 000000000000..73e01ddbde45
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/tarmac/Cargo.lock
@@ -0,0 +1,2212 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "addr2line"
+version = "0.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97"
+dependencies = [
+ "gimli",
+]
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "adler32"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234"
+
+[[package]]
+name = "aho-corasick"
+version = "0.7.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67fc08ce920c31afb70f013dcce1bfc3a3195de6a228474e45e1f145b36f8d04"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.71"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8"
+
+[[package]]
+name = "arrayref"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545"
+
+[[package]]
+name = "arrayvec"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b"
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi 0.1.19",
+ "libc",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "autocfg"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0dde43e75fd43e8a1bf86103336bc699aa8d17ad1be60c76c0bdfd4828e19b78"
+dependencies = [
+ "autocfg 1.1.0",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "backtrace"
+version = "0.3.67"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "233d376d6d185f2a3093e58f283f60f880315b6c60075b01f36b3b85154564ca"
+dependencies = [
+ "addr2line",
+ "cc",
+ "cfg-if 1.0.0",
+ "libc",
+ "miniz_oxide 0.6.2",
+ "object",
+ "rustc-demangle",
+]
+
+[[package]]
+name = "base64"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b25d992356d2eb0ed82172f5248873db5560c4721f564b13cb5193bda5e668e"
+dependencies = [
+ "byteorder",
+]
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "blake3"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46080006c1505f12f64dd2a09264b343381ed3190fa02c8005d5d662ac571c63"
+dependencies = [
+ "arrayref",
+ "arrayvec",
+ "cc",
+ "cfg-if 0.1.10",
+ "constant_time_eq",
+ "crypto-mac",
+ "digest",
+]
+
+[[package]]
+name = "bstr"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3d4260bcc2e8fc9df1eac4919a720effeb63a3f0952f5bf4944adfa18897f09"
+dependencies = [
+ "memchr",
+ "serde",
+]
+
+[[package]]
+name = "byteorder"
+version = "1.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
+
+[[package]]
+name = "bytes"
+version = "0.4.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c"
+dependencies = [
+ "byteorder",
+ "either",
+ "iovec",
+]
+
+[[package]]
+name = "cc"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
+
+[[package]]
+name = "cfg-if"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "clap"
+version = "2.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c"
+dependencies = [
+ "bitflags",
+ "textwrap",
+ "unicode-width",
+]
+
+[[package]]
+name = "clicolors-control"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90082ee5dcdd64dc4e9e0d37fbf3ee325419e39c0092191e0393df65518f741e"
+dependencies = [
+ "atty",
+ "lazy_static",
+ "libc",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "cloudabi"
+version = "0.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "console"
+version = "0.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "45e0f3986890b3acbc782009e2629dfe2baa430ac091519ce3be26164a2ae6c0"
+dependencies = [
+ "clicolors-control",
+ "encode_unicode",
+ "lazy_static",
+ "libc",
+ "regex",
+ "termios",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "constant_time_eq"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc"
+
+[[package]]
+name = "cookie"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "888604f00b3db336d2af898ec3c1d5d0ddf5e6d462220f2ededc33a87ac4bbd5"
+dependencies = [
+ "time",
+ "url 1.7.2",
+]
+
+[[package]]
+name = "cookie_store"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46750b3f362965f197996c4448e4a0935e791bf7d6631bfce9ee0af3d24c919c"
+dependencies = [
+ "cookie",
+ "failure",
+ "idna 0.1.5",
+ "log",
+ "publicsuffix",
+ "serde",
+ "serde_json",
+ "time",
+ "try_from",
+ "url 1.7.2",
+]
+
+[[package]]
+name = "core-foundation"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
+
+[[package]]
+name = "crc32fast"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c20ff29ded3204c5106278a81a38f4b482636ed4fa1e6cfbeef193291beb29ed"
+dependencies = [
+ "crossbeam-epoch",
+ "crossbeam-utils",
+ "maybe-uninit",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "058ed274caafc1f60c4997b5fc07bf7dc7cca454af7c6e81edffe5f33f70dace"
+dependencies = [
+ "autocfg 1.1.0",
+ "cfg-if 0.1.10",
+ "crossbeam-utils",
+ "lazy_static",
+ "maybe-uninit",
+ "memoffset",
+ "scopeguard",
+]
+
+[[package]]
+name = "crossbeam-queue"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "774ba60a54c213d409d5353bda12d49cd68d14e45036a285234c8d6f91f92570"
+dependencies = [
+ "cfg-if 0.1.10",
+ "crossbeam-utils",
+ "maybe-uninit",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8"
+dependencies = [
+ "autocfg 1.1.0",
+ "cfg-if 0.1.10",
+ "lazy_static",
+]
+
+[[package]]
+name = "crypto-mac"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4434400df11d95d556bac068ddfedd482915eb18fe8bea89bc80b6e4b1c179e5"
+dependencies = [
+ "generic-array",
+ "subtle",
+]
+
+[[package]]
+name = "deflate"
+version = "0.7.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "707b6a7b384888a70c8d2e8650b3e60170dfc6a67bb4aa67b6dfca57af4bedb4"
+dependencies = [
+ "adler32",
+ "byteorder",
+]
+
+[[package]]
+name = "difference"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "524cbf6897b527295dff137cec09ecf3a05f4fddffd7dfcd1585403449e74198"
+
+[[package]]
+name = "digest"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "dtoa"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56899898ce76aaf4a0f24d914c97ea6ed976d42fec6ad33fcbb0a1103e07b2b0"
+
+[[package]]
+name = "either"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91"
+
+[[package]]
+name = "encode_unicode"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
+
+[[package]]
+name = "encoding_rs"
+version = "0.8.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "env_logger"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44533bbbb3bb3c1fa17d9f2e4e38bbbaf8396ba82193c4cb1b6445d711445d36"
+dependencies = [
+ "atty",
+ "humantime",
+ "log",
+ "regex",
+ "termcolor",
+]
+
+[[package]]
+name = "errno"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "errno-dragonfly"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "failure"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d32e9bd16cc02eae7db7ef620b392808b89f6a5e16bb3497d159c6b92a0f4f86"
+dependencies = [
+ "backtrace",
+ "failure_derive",
+]
+
+[[package]]
+name = "failure_derive"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa4da3c766cd7a0db8242e326e9e4e081edd567072893ed320008189715366a4"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "synstructure",
+]
+
+[[package]]
+name = "fastrand"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "flate2"
+version = "1.0.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide 0.7.1",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "foreign-types"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+dependencies = [
+ "foreign-types-shared",
+]
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8"
+dependencies = [
+ "percent-encoding 2.2.0",
+]
+
+[[package]]
+name = "fs-err"
+version = "2.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0845fa252299212f0389d64ba26f34fa32cfe41588355f21ed507c59a0f64541"
+
+[[package]]
+name = "fuchsia-cprng"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba"
+
+[[package]]
+name = "fuchsia-zircon"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82"
+dependencies = [
+ "bitflags",
+ "fuchsia-zircon-sys",
+]
+
+[[package]]
+name = "fuchsia-zircon-sys"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7"
+
+[[package]]
+name = "futures"
+version = "0.1.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a471a38ef8ed83cd6e40aa59c1ffe17db6855c18e3604d9c4ed8c08ebc28678"
+
+[[package]]
+name = "futures-cpupool"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab90cde24b3319636588d0c35fe03b1333857621051837ed769faefb4c2162e4"
+dependencies = [
+ "futures",
+ "num_cpus",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.12.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd"
+dependencies = [
+ "typenum",
+]
+
+[[package]]
+name = "gimli"
+version = "0.27.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad0a93d233ebf96623465aad4046a8d3aa4da22d4f4beba5388838c8a434bbb4"
+
+[[package]]
+name = "globset"
+version = "0.4.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "029d74589adefde59de1a0c4f4732695c32805624aec7b68d91503d4dba79afc"
+dependencies = [
+ "aho-corasick 0.7.20",
+ "bstr",
+ "fnv",
+ "log",
+ "regex",
+]
+
+[[package]]
+name = "h2"
+version = "0.1.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a5b34c246847f938a410a03c5458c7fee2274436675e76d8b903c08efc29c462"
+dependencies = [
+ "byteorder",
+ "bytes",
+ "fnv",
+ "futures",
+ "http",
+ "indexmap",
+ "log",
+ "slab",
+ "string",
+ "tokio-io",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+
+[[package]]
+name = "heck"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
+dependencies = [
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286"
+
+[[package]]
+name = "http"
+version = "0.1.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6ccf5ede3a895d8856620237b2f02972c1bbc78d2965ad7fe8838d4a0ed41f0"
+dependencies = [
+ "bytes",
+ "fnv",
+ "itoa 0.4.8",
+]
+
+[[package]]
+name = "http-body"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6741c859c1b2463a423a1dbce98d418e6c3c3fc720fb0d45528657320920292d"
+dependencies = [
+ "bytes",
+ "futures",
+ "http",
+ "tokio-buf",
+]
+
+[[package]]
+name = "httparse"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
+
+[[package]]
+name = "humantime"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f"
+dependencies = [
+ "quick-error",
+]
+
+[[package]]
+name = "hyper"
+version = "0.12.36"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c843caf6296fc1f93444735205af9ed4e109a539005abb2564ae1d6fad34c52"
+dependencies = [
+ "bytes",
+ "futures",
+ "futures-cpupool",
+ "h2",
+ "http",
+ "http-body",
+ "httparse",
+ "iovec",
+ "itoa 0.4.8",
+ "log",
+ "net2",
+ "rustc_version",
+ "time",
+ "tokio",
+ "tokio-buf",
+ "tokio-executor",
+ "tokio-io",
+ "tokio-reactor",
+ "tokio-tcp",
+ "tokio-threadpool",
+ "tokio-timer",
+ "want",
+]
+
+[[package]]
+name = "hyper-tls"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a800d6aa50af4b5850b2b0f659625ce9504df908e9733b635720483be26174f"
+dependencies = [
+ "bytes",
+ "futures",
+ "hyper",
+ "native-tls",
+ "tokio-io",
+]
+
+[[package]]
+name = "idna"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e"
+dependencies = [
+ "matches",
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[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 = "idna"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
+dependencies = [
+ "autocfg 1.1.0",
+ "hashbrown",
+]
+
+[[package]]
+name = "inflate"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1cdb29978cc5797bd8dcc8e5bf7de604891df2a8dc576973d71a281e916db2ff"
+dependencies = [
+ "adler32",
+]
+
+[[package]]
+name = "insta"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8df742abee84dbf27d20869c9adf77b0d8f7ea3eead13c2c9e3998d136a97058"
+dependencies = [
+ "console",
+ "difference",
+ "lazy_static",
+ "serde",
+ "serde_json",
+ "serde_yaml",
+]
+
+[[package]]
+name = "instant"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "io-lifetimes"
+version = "1.0.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220"
+dependencies = [
+ "hermit-abi 0.3.1",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "iovec"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "itoa"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4"
+
+[[package]]
+name = "itoa"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6"
+
+[[package]]
+name = "kernel32-sys"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
+dependencies = [
+ "winapi 0.2.8",
+ "winapi-build",
+]
+
+[[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.144"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b00cc1c228a6782d0f076e7b232802e0c5689d41bb5df366f2a6b6621cfdfe1"
+
+[[package]]
+name = "linked-hash-map"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ece97ea872ece730aed82664c424eb4c8291e1ff2480247ccf7409044bc6479f"
+
+[[package]]
+name = "lock_api"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4da24a77a3d8a6d4862d95f72e6fdb9c09a643ecdb402d754004a557f2bec75"
+dependencies = [
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "matches"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5"
+
+[[package]]
+name = "maybe-uninit"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00"
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "memoffset"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "043175f069eda7b85febe4a74abbaeff828d9f8b448515d3151a14a3542811aa"
+dependencies = [
+ "autocfg 1.1.0",
+]
+
+[[package]]
+name = "mime"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
+
+[[package]]
+name = "mime_guess"
+version = "2.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef"
+dependencies = [
+ "mime",
+ "unicase",
+]
+
+[[package]]
+name = "miniz_oxide"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "miniz_oxide"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "mio"
+version = "0.6.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4afd66f5b91bf2a3bc13fad0e21caedac168ca4c707504e75585648ae80e4cc4"
+dependencies = [
+ "cfg-if 0.1.10",
+ "fuchsia-zircon",
+ "fuchsia-zircon-sys",
+ "iovec",
+ "kernel32-sys",
+ "libc",
+ "log",
+ "miow",
+ "net2",
+ "slab",
+ "winapi 0.2.8",
+]
+
+[[package]]
+name = "miow"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ebd808424166322d4a38da87083bfddd3ac4c131334ed55856112eb06d46944d"
+dependencies = [
+ "kernel32-sys",
+ "net2",
+ "winapi 0.2.8",
+ "ws2_32-sys",
+]
+
+[[package]]
+name = "native-tls"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e"
+dependencies = [
+ "lazy_static",
+ "libc",
+ "log",
+ "openssl",
+ "openssl-probe",
+ "openssl-sys",
+ "schannel",
+ "security-framework",
+ "security-framework-sys",
+ "tempfile",
+]
+
+[[package]]
+name = "net2"
+version = "0.2.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "74d0df99cfcd2530b2e694f6e17e7f37b8e26bb23983ac530c0c97408837c631"
+dependencies = [
+ "cfg-if 0.1.10",
+ "libc",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b"
+dependencies = [
+ "hermit-abi 0.2.6",
+ "libc",
+]
+
+[[package]]
+name = "object"
+version = "0.30.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea86265d3d3dcb6a27fc51bd29a4bf387fae9d2986b823079d4986af253eb439"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.17.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3"
+
+[[package]]
+name = "openssl"
+version = "0.10.52"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "01b8574602df80f7b85fdfc5392fa884a4e3b3f4f35402c070ab34c3d3f78d56"
+dependencies = [
+ "bitflags",
+ "cfg-if 1.0.0",
+ "foreign-types",
+ "libc",
+ "once_cell",
+ "openssl-macros",
+ "openssl-sys",
+]
+
+[[package]]
+name = "openssl-macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "openssl-probe"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
+
+[[package]]
+name = "openssl-sys"
+version = "0.9.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e17f59264b2809d77ae94f0e1ebabc434773f370d6ca667bd223ea10e06cc7e"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "packos"
+version = "0.1.0"
+dependencies = [
+ "env_logger",
+ "insta",
+ "log",
+]
+
+[[package]]
+name = "parking_lot"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f842b1982eb6c2fe34036a4fbfb06dd185a3f5c8edfaacdf7d1ea10b07de6252"
+dependencies = [
+ "lock_api",
+ "parking_lot_core",
+ "rustc_version",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bda66b810a62be75176a80873726630147a5ca780cd33921e0b5709033e66b0a"
+dependencies = [
+ "cfg-if 0.1.10",
+ "cloudabi",
+ "libc",
+ "redox_syscall 0.1.57",
+ "rustc_version",
+ "smallvec",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831"
+
+[[package]]
+name = "percent-encoding"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
+
+[[package]]
+name = "png"
+version = "0.15.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef859a23054bbfee7811284275ae522f0434a3c8e7f4b74bd4a35ae7e1c4a283"
+dependencies = [
+ "bitflags",
+ "crc32fast",
+ "deflate",
+ "inflate",
+]
+
+[[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 1.0.109",
+ "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.56"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "publicsuffix"
+version = "1.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95b4ce31ff0a27d93c8de1849cf58162283752f065a90d508f1105fa6c9a213f"
+dependencies = [
+ "idna 0.2.3",
+ "url 2.3.1",
+]
+
+[[package]]
+name = "quick-error"
+version = "1.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0"
+
+[[package]]
+name = "quote"
+version = "1.0.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f4f29d145265ec1c483c7c654450edde0bfe043d3938d6972630663356d9500"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rand"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca"
+dependencies = [
+ "autocfg 0.1.8",
+ "libc",
+ "rand_chacha",
+ "rand_core 0.4.2",
+ "rand_hc",
+ "rand_isaac",
+ "rand_jitter",
+ "rand_os",
+ "rand_pcg",
+ "rand_xorshift",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef"
+dependencies = [
+ "autocfg 0.1.8",
+ "rand_core 0.3.1",
+]
+
+[[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",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc"
+
+[[package]]
+name = "rand_hc"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4"
+dependencies = [
+ "rand_core 0.3.1",
+]
+
+[[package]]
+name = "rand_isaac"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08"
+dependencies = [
+ "rand_core 0.3.1",
+]
+
+[[package]]
+name = "rand_jitter"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b"
+dependencies = [
+ "libc",
+ "rand_core 0.4.2",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "rand_os"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071"
+dependencies = [
+ "cloudabi",
+ "fuchsia-cprng",
+ "libc",
+ "rand_core 0.4.2",
+ "rdrand",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "rand_pcg"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44"
+dependencies = [
+ "autocfg 0.1.8",
+ "rand_core 0.4.2",
+]
+
+[[package]]
+name = "rand_xorshift"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c"
+dependencies = [
+ "rand_core 0.3.1",
+]
+
+[[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",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.1.57"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce"
+
+[[package]]
+name = "redox_syscall"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "regex"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af83e617f331cc6ae2da5443c602dfa5af81e517212d9d611a5b3ba1777b5370"
+dependencies = [
+ "aho-corasick 1.0.1",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a5996294f19bd3aae0453a862ad728f60e6600695733dd5df01da90c54363a3c"
+
+[[package]]
+name = "reqwest"
+version = "0.9.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f88643aea3c1343c804950d7bf983bd2067f5ab59db6d613a08e05572f2714ab"
+dependencies = [
+ "base64",
+ "bytes",
+ "cookie",
+ "cookie_store",
+ "encoding_rs",
+ "flate2",
+ "futures",
+ "http",
+ "hyper",
+ "hyper-tls",
+ "log",
+ "mime",
+ "mime_guess",
+ "native-tls",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "time",
+ "tokio",
+ "tokio-executor",
+ "tokio-io",
+ "tokio-threadpool",
+ "tokio-timer",
+ "url 1.7.2",
+ "uuid",
+ "winreg",
+]
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
+
+[[package]]
+name = "rustc_version"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
+dependencies = [
+ "semver",
+]
+
+[[package]]
+name = "rustix"
+version = "0.37.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acf8729d8542766f1b2cf77eb034d52f40d375bb8b615d0b147089946e16613d"
+dependencies = [
+ "bitflags",
+ "errno",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041"
+
+[[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 = "schannel"
+version = "0.1.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3"
+dependencies = [
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "scopeguard"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+
+[[package]]
+name = "security-framework"
+version = "2.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca2855b3715770894e67cbfa3df957790aa0c9edc3bf06efa1a84d77fa0839d1"
+dependencies = [
+ "bitflags",
+ "core-foundation",
+ "core-foundation-sys",
+ "libc",
+ "security-framework-sys",
+]
+
+[[package]]
+name = "security-framework-sys"
+version = "2.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f51d0c0d83bec45f16480d0ce0058397a69e48fcdc52d1dc8855fb68acbd31a7"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "semver"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
+dependencies = [
+ "semver-parser",
+]
+
+[[package]]
+name = "semver-parser"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
+
+[[package]]
+name = "serde"
+version = "1.0.163"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2113ab51b87a539ae008b5c6c02dc020ffa39afd2d83cffcb3f4eb2722cebec2"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.163"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c805777e3930c8883389c602315a24224bcc738b63905ef87cd1420353ea93e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.96"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1"
+dependencies = [
+ "itoa 1.0.6",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_urlencoded"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "642dd69105886af2efd227f75a520ec9b44a820d65bc133a9131f7d229fd165a"
+dependencies = [
+ "dtoa",
+ "itoa 0.4.8",
+ "serde",
+ "url 1.7.2",
+]
+
+[[package]]
+name = "serde_yaml"
+version = "0.8.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "578a7433b776b56a35785ed5ce9a7e777ac0598aac5a6dd1b4b18a307c7fc71b"
+dependencies = [
+ "indexmap",
+ "ryu",
+ "serde",
+ "yaml-rust",
+]
+
+[[package]]
+name = "slab"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d"
+dependencies = [
+ "autocfg 1.1.0",
+]
+
+[[package]]
+name = "smallvec"
+version = "0.6.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b97fcaeba89edba30f044a10c6a3cc39df9c3f17d7cd829dd1446cab35f890e0"
+dependencies = [
+ "maybe-uninit",
+]
+
+[[package]]
+name = "string"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d24114bfcceb867ca7f71a0d3fe45d45619ec47a6fbfa98cb14e14250bfa5d6d"
+dependencies = [
+ "bytes",
+]
+
+[[package]]
+name = "structopt"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c6b5c64445ba8094a6ab0c3cd2ad323e07171012d9c98b0b15651daf1787a10"
+dependencies = [
+ "clap",
+ "lazy_static",
+ "structopt-derive",
+]
+
+[[package]]
+name = "structopt-derive"
+version = "0.4.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dcb5ae327f9cc13b68763b5749770cb9e048a99bd9dfdfa58d0cf05d5f64afe0"
+dependencies = [
+ "heck",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "subtle"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d67a5a62ba6e01cb2192ff309324cb4875d0c451d55fe2319433abe7a05a8ee"
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a34fcf3e8b60f57e6a14301a2e916d323af98b0ea63c599441eec8558660c822"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "synstructure"
+version = "0.12.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "unicode-xid",
+]
+
+[[package]]
+name = "tarmac"
+version = "0.7.0"
+dependencies = [
+ "anyhow",
+ "backtrace",
+ "blake3",
+ "env_logger",
+ "fs-err",
+ "globset",
+ "lazy_static",
+ "log",
+ "packos",
+ "png",
+ "regex",
+ "reqwest",
+ "serde",
+ "serde_json",
+ "structopt",
+ "thiserror",
+ "toml",
+ "walkdir",
+ "winreg",
+]
+
+[[package]]
+name = "tempfile"
+version = "3.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998"
+dependencies = [
+ "cfg-if 1.0.0",
+ "fastrand",
+ "redox_syscall 0.3.5",
+ "rustix",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "termios"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "411c5bf740737c7918b8b1fe232dca4dc9f8e754b8ad5e20966814001ed0ac6b"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "time"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a"
+dependencies = [
+ "libc",
+ "wasi",
+ "winapi 0.3.9",
+]
+
+[[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.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+[[package]]
+name = "tokio"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a09c0b5bb588872ab2f09afa13ee6e9dac11e10a0ec9e8e3ba39a5a5d530af6"
+dependencies = [
+ "bytes",
+ "futures",
+ "mio",
+ "num_cpus",
+ "tokio-current-thread",
+ "tokio-executor",
+ "tokio-io",
+ "tokio-reactor",
+ "tokio-tcp",
+ "tokio-threadpool",
+ "tokio-timer",
+]
+
+[[package]]
+name = "tokio-buf"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fb220f46c53859a4b7ec083e41dec9778ff0b1851c0942b211edb89e0ccdc46"
+dependencies = [
+ "bytes",
+ "either",
+ "futures",
+]
+
+[[package]]
+name = "tokio-current-thread"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1de0e32a83f131e002238d7ccde18211c0a5397f60cbfffcb112868c2e0e20e"
+dependencies = [
+ "futures",
+ "tokio-executor",
+]
+
+[[package]]
+name = "tokio-executor"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb2d1b8f4548dbf5e1f7818512e9c406860678f29c300cdf0ebac72d1a3a1671"
+dependencies = [
+ "crossbeam-utils",
+ "futures",
+]
+
+[[package]]
+name = "tokio-io"
+version = "0.1.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57fc868aae093479e3131e3d165c93b1c7474109d13c90ec0dda2a1bbfff0674"
+dependencies = [
+ "bytes",
+ "futures",
+ "log",
+]
+
+[[package]]
+name = "tokio-reactor"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09bc590ec4ba8ba87652da2068d150dcada2cfa2e07faae270a5e0409aa51351"
+dependencies = [
+ "crossbeam-utils",
+ "futures",
+ "lazy_static",
+ "log",
+ "mio",
+ "num_cpus",
+ "parking_lot",
+ "slab",
+ "tokio-executor",
+ "tokio-io",
+ "tokio-sync",
+]
+
+[[package]]
+name = "tokio-sync"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "edfe50152bc8164fcc456dab7891fa9bf8beaf01c5ee7e1dd43a397c3cf87dee"
+dependencies = [
+ "fnv",
+ "futures",
+]
+
+[[package]]
+name = "tokio-tcp"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "98df18ed66e3b72e742f185882a9e201892407957e45fbff8da17ae7a7c51f72"
+dependencies = [
+ "bytes",
+ "futures",
+ "iovec",
+ "mio",
+ "tokio-io",
+ "tokio-reactor",
+]
+
+[[package]]
+name = "tokio-threadpool"
+version = "0.1.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df720b6581784c118f0eb4310796b12b1d242a7eb95f716a8367855325c25f89"
+dependencies = [
+ "crossbeam-deque",
+ "crossbeam-queue",
+ "crossbeam-utils",
+ "futures",
+ "lazy_static",
+ "log",
+ "num_cpus",
+ "slab",
+ "tokio-executor",
+]
+
+[[package]]
+name = "tokio-timer"
+version = "0.2.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93044f2d313c95ff1cb7809ce9a7a05735b012288a888b62d4434fd58c94f296"
+dependencies = [
+ "crossbeam-utils",
+ "futures",
+ "slab",
+ "tokio-executor",
+]
+
+[[package]]
+name = "toml"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
+
+[[package]]
+name = "try_from"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "283d3b89e1368717881a9d51dad843cc435380d8109c9e47d38780a324698d8b"
+dependencies = [
+ "cfg-if 0.1.10",
+]
+
+[[package]]
+name = "typenum"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba"
+
+[[package]]
+name = "unicase"
+version = "2.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6"
+dependencies = [
+ "version_check",
+]
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c"
+
+[[package]]
+name = "url"
+version = "1.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a"
+dependencies = [
+ "idna 0.1.5",
+ "matches",
+ "percent-encoding 1.0.1",
+]
+
+[[package]]
+name = "url"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643"
+dependencies = [
+ "form_urlencoded",
+ "idna 0.3.0",
+ "percent-encoding 2.2.0",
+]
+
+[[package]]
+name = "uuid"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90dbc611eb48397705a6b0f6e917da23ae517e4d127123d2cf7674206627d32a"
+dependencies = [
+ "rand",
+]
+
+[[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.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698"
+dependencies = [
+ "same-file",
+ "winapi-util",
+]
+
+[[package]]
+name = "want"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6395efa4784b027708f7451087e647ec73cc74f5d9bc2e418404248d679a230"
+dependencies = [
+ "futures",
+ "log",
+ "try-lock",
+]
+
+[[package]]
+name = "wasi"
+version = "0.10.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
+
+[[package]]
+name = "winapi"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
+
+[[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-build"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
+
+[[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 0.3.9",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows-sys"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
+dependencies = [
+ "windows-targets 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets 0.48.0",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5"
+dependencies = [
+ "windows_aarch64_gnullvm 0.48.0",
+ "windows_aarch64_msvc 0.48.0",
+ "windows_i686_gnu 0.48.0",
+ "windows_i686_msvc 0.48.0",
+ "windows_x86_64_gnu 0.48.0",
+ "windows_x86_64_gnullvm 0.48.0",
+ "windows_x86_64_msvc 0.48.0",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
+
+[[package]]
+name = "winreg"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2986deb581c4fe11b621998a5e53361efe6b48a151178d0cd9eeffa4dc6acc9"
+dependencies = [
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "ws2_32-sys"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e"
+dependencies = [
+ "winapi 0.2.8",
+ "winapi-build",
+]
+
+[[package]]
+name = "yaml-rust"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85"
+dependencies = [
+ "linked-hash-map",
+]
diff --git a/nixpkgs/pkgs/development/tools/tarmac/default.nix b/nixpkgs/pkgs/development/tools/tarmac/default.nix
new file mode 100644
index 000000000000..b8383fc5031d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/tarmac/default.nix
@@ -0,0 +1,52 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, openssl
+, stdenv
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "tarmac";
+  version = "0.7.0";
+
+  src = fetchFromGitHub {
+    owner = "Roblox";
+    repo = "tarmac";
+    rev = "v${version}";
+    sha256 = "sha256-O6qrAzGiAxiE56kpuvH/jDKHRXxHZ2SlDL5nwOOd4EU=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [
+    Security
+  ];
+
+  # update Cargo.lock to work with openssl 3
+  postPatch = ''
+    ln -sf ${./Cargo.lock} Cargo.lock
+  '';
+
+  meta = with lib; {
+    description = "Resource compiler and asset manager for Roblox";
+    longDescription = ''
+      Tarmac is a resource compiler and asset manager for Roblox projects.
+      It helps enable hermetic place builds when used with tools like Rojo.
+    '';
+    homepage = "https://github.com/Roblox/tarmac";
+    downloadPage = "https://github.com/Roblox/tarmac/releases/tag/v${version}";
+    changelog = "https://github.com/Roblox/tarmac/raw/v${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ wackbyte ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/teller/default.nix b/nixpkgs/pkgs/development/tools/teller/default.nix
new file mode 100644
index 000000000000..a906e6c1f5e5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/teller/default.nix
@@ -0,0 +1,69 @@
+{ lib, buildGoModule, fetchFromGitHub, nix-update-script }:
+let
+  pname = "teller";
+  version = "1.5.6";
+  date = "2022-10-13";
+in
+buildGoModule {
+  inherit pname version;
+
+  src = fetchFromGitHub {
+    owner = "tellerops";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-vgrfWKKXf4C4qkbGiB3ndtJy1VyTx2NJs2QiOSFFZkE=";
+  };
+
+  vendorHash = null;
+
+  # use make instead of default checks because e2e does not work with `buildGoDir`
+  checkPhase = ''
+    runHook preCheck
+    HOME="$(mktemp -d)"
+    # We do not set trimpath for tests, in case they reference test assets
+    export GOFLAGS=''${GOFLAGS//-trimpath/}
+
+    make test
+
+    # e2e tests can fail on first try
+
+    max_iteration=3
+    for i in $(seq 1 $max_iteration)
+    do
+      make e2e
+      result=$?
+      if [[ $result -eq 0 ]]
+      then
+        echo "e2e tests passed"
+        break
+      else
+        echo "e2e tests failed, retrying..."
+        sleep 1
+      fi
+    done
+
+    if [[ $result -ne 0 ]]
+    then
+      echo "e2e tests failed after $max_iteration attempts"
+    fi
+
+    runHook postCheck
+  '';
+
+  passthru.updateScript = nix-update-script { };
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X main.version=${version}"
+    "-X main.commit=${version}"
+    "-X main.date=${date}"
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/tellerops/teller/";
+    description = "Cloud native secrets management for developers";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ wahtique ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/templ/default.nix b/nixpkgs/pkgs/development/tools/templ/default.nix
new file mode 100644
index 000000000000..ef54d183e48b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/templ/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "templ";
+  version = "0.2.543";
+
+  subPackages = [ "cmd/templ" ];
+
+  CGO_ENABLED = 0;
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-extldflags -static"
+  ];
+
+  src = fetchFromGitHub {
+    owner = "a-h";
+    repo = "templ";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-A99GBzxmrAhjPzo5qj6V3YWkQJavs9j9beMtNYqGnqo=";
+  };
+
+  vendorHash = "sha256-4tHofTnSNI/MBmrGdGsLNoXjxUC0+Gwp3PzzUwfUkQU=";
+
+  meta = with lib; {
+    description = "A language for writing HTML user interfaces in Go";
+    homepage = "https://templ.guide/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ luleyleo ];
+    mainProgram = "templ";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/textql/default.nix b/nixpkgs/pkgs/development/tools/textql/default.nix
new file mode 100644
index 000000000000..74953d0e3fab
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/textql/default.nix
@@ -0,0 +1,39 @@
+{ lib, buildGoModule, fetchFromGitHub, fetchpatch, sqlite }:
+
+buildGoModule rec {
+  pname = "textql";
+  version = "unstable-2021-07-06";
+
+  src = fetchFromGitHub {
+    owner  = "dinedal";
+    repo   = "textql";
+    rev    = "fca00ecc76c8d9891b195ad2c1359d39f0213604";
+    hash   = "sha256-NccRo5YdhwTo2eez5UE5nI3TEqzTL1rjPO1kKfDBNuw=";
+  };
+
+  patches = [
+    # fix build with go 1.17
+    (fetchpatch {
+      url = "https://github.com/jawn-smith/textql/commit/a0d7038c8c30671dfd618f47322814ab492c11a1.patch";
+      sha256 = "1yjdbwipjxxhfcqlj1z6ngsm7dr8gfp4l61jynn2iw7f02cn1yck";
+    })
+  ];
+
+  vendorHash = "sha256-/DFtZA3Tml+RYTuv1YEUnC37jChTjrC01+zRO7Tj58A=";
+
+  postInstall = ''
+    install -Dm644 -t $out/share/man/man1 ${src}/man/textql.1
+  '';
+
+  # needed for tests
+  nativeBuildInputs = [ sqlite ];
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "Execute SQL against structured text like CSV or TSV";
+    homepage = "https://github.com/dinedal/textql";
+    license = licenses.mit;
+    maintainers = with maintainers; [ vrthra ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/tf2pulumi/default.nix b/nixpkgs/pkgs/development/tools/tf2pulumi/default.nix
new file mode 100644
index 000000000000..c108515ee6ad
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/tf2pulumi/default.nix
@@ -0,0 +1,28 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "tf2pulumi";
+  version = "0.12.0";
+
+  src = fetchFromGitHub {
+    owner = "pulumi";
+    repo = "tf2pulumi";
+    rev = "v${version}";
+    sha256 = "sha256-i6nK1AEnQY47ro6tNDBExdcb9WvltY/21FVrVaiSTvo=";
+  };
+
+  vendorHash = "sha256-x7GAkbvhML2VUQ9/zitrTBBiy9lISb3iTx6yn5WbEig=";
+
+  ldflags = [
+    "-s" "-w" "-X=github.com/pulumi/tf2pulumi/version.Version=${src.rev}"
+  ];
+
+  subPackages = [ "." ];
+
+  meta = with lib; {
+    description = "Convert Terraform projects to Pulumi TypeScript programs";
+    homepage = "https://www.pulumi.com/tf2pulumi/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ mausch ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/the-way/default.nix b/nixpkgs/pkgs/development/tools/the-way/default.nix
new file mode 100644
index 000000000000..9418afb6cfa6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/the-way/default.nix
@@ -0,0 +1,37 @@
+{ lib, rustPlatform, fetchCrate, installShellFiles, stdenv, darwin }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "the-way";
+  version = "0.20.3";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-/vG5LkQiA8iPP+UV1opLeJwbYfmzqYwpsoMizpGT98o=";
+  };
+
+  cargoHash = "sha256-iZxV099582LuZ8A3uOsKPyekAQG2cQusLZhW+W1wW/8=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.AppKit
+  ];
+
+  useNextest = true;
+
+  postInstall = ''
+    $out/bin/the-way config default tmp.toml
+    for shell in bash fish zsh; do
+      THE_WAY_CONFIG=tmp.toml $out/bin/the-way complete $shell > the-way.$shell
+      installShellCompletion the-way.$shell
+    done
+  '';
+
+  meta = with lib; {
+    description = "Terminal code snippets manager";
+    homepage = "https://github.com/out-of-cheese-error/the-way";
+    changelog = "https://github.com/out-of-cheese-error/the-way/blob/v${version}/CHANGELOG.md";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ figsoda numkem ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/thrust/default.nix b/nixpkgs/pkgs/development/tools/thrust/default.nix
new file mode 100644
index 000000000000..5e7b90641704
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/thrust/default.nix
@@ -0,0 +1,47 @@
+{ lib, stdenv, fetchurl, buildEnv, makeWrapper, glib, alsa-lib , dbus, gtk2, atk
+, pango, freetype, fontconfig, gdk-pixbuf , cairo, cups, expat, nspr, gconf, nss
+, xorg, libcap, unzip
+}:
+
+let
+  thrustEnv = buildEnv {
+    name = "env-thrust";
+    paths = [
+      stdenv.cc.cc glib dbus gtk2 atk pango freetype fontconfig gdk-pixbuf
+      cairo cups expat alsa-lib nspr gconf nss xorg.libXrender xorg.libX11
+      xorg.libXext xorg.libXdamage xorg.libXtst xorg.libXcomposite
+      xorg.libXi xorg.libXfixes xorg.libXrandr xorg.libXcursor libcap
+    ];
+  };
+in stdenv.mkDerivation rec {
+  pname = "thrust";
+  version = "0.7.6";
+
+  src = fetchurl {
+    url = "https://github.com/breach/thrust/releases/download/v${version}/thrust-v${version}-linux-x64.zip";
+    sha256 = "07rrnlj0gk500pvar4b1wdqm05p4n9yjwn911x93bd2qwc8r5ymc";
+  };
+
+  nativeBuildInputs = [ makeWrapper unzip ];
+  buildInputs = [ thrustEnv ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mkdir -p $out/libexec/thrust
+    unzip -d $out/libexec/thrust/ $src
+    patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+      $out/libexec/thrust/thrust_shell
+    wrapProgram $out/libexec/thrust/thrust_shell \
+      --prefix "LD_LIBRARY_PATH" : "${thrustEnv}/lib:${thrustEnv}/lib64"
+    ln -s $out/libexec/thrust/thrust_shell $out/bin
+  '';
+
+  meta = with lib; {
+    description = "Chromium-based cross-platform / cross-language application framework";
+    homepage = "https://github.com/breach/thrust";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.mit;
+    maintainers = [ maintainers.osener ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/time-ghc-modules/default.nix b/nixpkgs/pkgs/development/tools/time-ghc-modules/default.nix
new file mode 100644
index 000000000000..e57495b8fb1c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/time-ghc-modules/default.nix
@@ -0,0 +1,54 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, makeWrapper
+, sqlite
+, python3
+, coreutils
+, findutils
+, gnused
+}:
+
+stdenv.mkDerivation rec {
+  pname = "time-ghc-modules";
+  version = "1.0.1";
+
+  src = fetchFromGitHub {
+    owner = "codedownio";
+    repo = "time-ghc-modules";
+    rev = version;
+    sha256 = "0s6540gllhjn7366inhwa70rdnngnhbi07jn1h6x8a0pi71wdfm9";
+  };
+
+  nativeBuildInputs = [makeWrapper];
+
+  buildPhase = ''
+    runHook preBuild
+
+    mkdir -p $out/bin
+    cp ./time-ghc-modules $out/bin/time-ghc-modules
+    wrapProgram $out/bin/time-ghc-modules --prefix PATH : ${lib.makeBinPath [ sqlite python3 coreutils findutils gnused ]} \
+                                          --set PROCESS_SCRIPT $out/lib/process \
+                                          --set HTML_FILE $out/lib/index.html
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/lib
+    install -m 444 ./dist/index.html $out/lib
+    install ./scripts/process $out/lib
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Analyze GHC .dump-timings files";
+    homepage = "https://github.com/codedownio/time-ghc-modules";
+    license = licenses.mit;
+    maintainers = [ maintainers.thomasjm ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/toast/default.nix b/nixpkgs/pkgs/development/tools/toast/default.nix
new file mode 100644
index 000000000000..00c5e74e64d5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/toast/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "toast";
+  version = "0.47.5";
+
+  src = fetchFromGitHub {
+    owner = "stepchowfun";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-kAXzBJMAxHjZSK6lbpF+/27n9CGvq7x6Ay2TaFYgQSU=";
+  };
+
+  cargoHash = "sha256-681ZFS8dtn815VYdFwPEJXnuMGTycSuRPDxmj1kN3rs=";
+
+  checkFlags = [ "--skip=format::tests::code_str_display" ]; # fails
+
+  meta = with lib; {
+    description = "Containerize your development and continuous integration environments";
+    homepage = "https://github.com/stepchowfun/toast";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dit7ya ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/tokio-console/cargo-lock.patch b/nixpkgs/pkgs/development/tools/tokio-console/cargo-lock.patch
new file mode 100644
index 000000000000..224a4acc082b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/tokio-console/cargo-lock.patch
@@ -0,0 +1,13 @@
+diff --git a/Cargo.lock b/Cargo.lock
+index fcbe50c..27d4c30 100644
+--- a/Cargo.lock
++++ b/Cargo.lock
+@@ -1390,7 +1390,7 @@ dependencies = [
+ 
+ [[package]]
+ name = "tokio-console"
+-version = "0.1.8"
++version = "0.1.9"
+ dependencies = [
+  "atty",
+  "clap",
diff --git a/nixpkgs/pkgs/development/tools/tokio-console/default.nix b/nixpkgs/pkgs/development/tools/tokio-console/default.nix
new file mode 100644
index 000000000000..558934fd15ff
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/tokio-console/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+, protobuf
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "tokio-console";
+  version = "0.1.9";
+
+  src = fetchFromGitHub {
+    owner = "tokio-rs";
+    repo = "console";
+    rev = "tokio-console-v${version}";
+    hash = "sha256-zISgEhUmAfHErq4AelbnSwtKjtxYH//pbLUAlPKxQYk=";
+  };
+
+  cargoHash = "sha256-qK8U6BZN7sdBP8CbzsDeewsGulNA/KFVS9vscBxysRg=";
+
+  nativeBuildInputs = [ protobuf ];
+
+  cargoPatches = [ ./cargo-lock.patch ];
+
+  # uses currently unstable tokio features
+  RUSTFLAGS = "--cfg tokio_unstable";
+
+  checkFlags = [
+    # tests depend upon git repository at test execution time
+    "--skip bootstrap"
+    "--skip config::tests::args_example_changed"
+    "--skip config::tests::toml_example_changed"
+  ];
+
+  meta = with lib; {
+    description = "A debugger for asynchronous Rust code";
+    homepage = "https://github.com/tokio-rs/console";
+    mainProgram = "tokio-console";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ max-niederman ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/toluapp/default.nix b/nixpkgs/pkgs/development/tools/toluapp/default.nix
new file mode 100644
index 000000000000..9a9acec17294
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/toluapp/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub, cmake, lua }:
+
+stdenv.mkDerivation rec {
+  version = "1.0.93";
+  pname = "toluapp";
+
+  src = fetchFromGitHub {
+    owner = "LuaDist";
+    repo  = "toluapp";
+    rev   = version;
+    sha256 = "0zd55bc8smmgk9j4cf0jpibb03lgsvl0knpwhplxbv93mcdnw7s0";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ lua ];
+
+  patches = [ ./environ-and-linux-is-kinda-posix.patch ./headers.patch ];
+
+  meta = with lib; {
+    description = "A tool to integrate C/Cpp code with Lua";
+    homepage = "http://www.codenix.com/~tolua/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ vrthra ];
+    mainProgram = "tolua++";
+    platforms = with platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/toluapp/environ-and-linux-is-kinda-posix.patch b/nixpkgs/pkgs/development/tools/toluapp/environ-and-linux-is-kinda-posix.patch
new file mode 100644
index 000000000000..6743b25cb8ab
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/toluapp/environ-and-linux-is-kinda-posix.patch
@@ -0,0 +1,36 @@
+As it turns out, scons doesn't inherit environment variables by
+default. Debugging this was very pleasant. -- oxij
+
+diff --git a/SConstruct b/SConstruct
+index 5c1e774..66aa4c8 100644
+--- a/SConstruct
++++ b/SConstruct
+@@ -5,13 +5,11 @@ tools = ['default']
+ if os.name == 'nt':
+ 	tools = ['mingw']
+ 
+-env = Environment(tools = tools)
++env = Environment(tools = tools, ENV = os.environ)
+ 
+ options_file = None
+-if sys.platform == 'linux2':
+-	options_file = "linux"
+ 
+-elif 'msvc' in env['TOOLS']:
++if 'msvc' in env['TOOLS']:
+ 	options_file = "msvc"
+ else:
+ 	options_file = "posix"
+diff --git a/config_posix.py b/config_posix.py
+index 2bb696c..eb4eb9b 100644
+--- a/config_posix.py
++++ b/config_posix.py
+@@ -16,7 +16,7 @@ CCFLAGS = ['-O2', '-ansi', '-Wall']
+ prefix = '/usr/local'
+ 
+ # libraries
+-LIBS = ['lua', 'lualib', 'm']
++LIBS = ['lua', 'liblua', 'm']
+ 
+ 
+ 
diff --git a/nixpkgs/pkgs/development/tools/toluapp/headers.patch b/nixpkgs/pkgs/development/tools/toluapp/headers.patch
new file mode 100644
index 000000000000..59a47bb989a9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/toluapp/headers.patch
@@ -0,0 +1,15 @@
+diff --git a/include/tolua++.h b/include/tolua++.h
+index ed53449..f57d56d 100644
+--- a/include/tolua++.h
++++ b/include/tolua++.h
+@@ -43,8 +43,8 @@ extern "C" {
+
+ typedef int lua_Object;
+
+-#include "lua.h"
+-#include "lauxlib.h"
++#include <lua.h>
++#include <lauxlib.h>
+
+ struct tolua_Error
+ {
diff --git a/nixpkgs/pkgs/development/tools/toml2json/default.nix b/nixpkgs/pkgs/development/tools/toml2json/default.nix
new file mode 100644
index 000000000000..b2abf4eb7211
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/toml2json/default.nix
@@ -0,0 +1,20 @@
+{ lib, rustPlatform, fetchCrate }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "toml2json";
+  version = "1.3.1";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-9q2HtNzsRO0/5gcmxUfWuQlWsfvw/A21WEXZlifCUjY=";
+  };
+
+  cargoHash = "sha256-laOM7LpmsCpLcm4kPRsJiXHoKR58RCuQxVO5Z78beWI=";
+
+  meta = with lib; {
+    description = "A very small CLI for converting TOML to JSON";
+    homepage = "https://github.com/woodruffw/toml2json";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ rvarago ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/toml2nix/Cargo.lock b/nixpkgs/pkgs/development/tools/toml2nix/Cargo.lock
new file mode 100644
index 000000000000..f6b37fbc189d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/toml2nix/Cargo.lock
@@ -0,0 +1,25 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "serde"
+version = "1.0.145"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "728eb6351430bccb993660dfffc5a72f91ccc1295abaa8ce19b27ebe4f75568b"
+
+[[package]]
+name = "toml"
+version = "0.4.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "758664fc71a3a69038656bee8b6be6477d2a6c315a6b81f7081f591bffa4111f"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml2nix"
+version = "0.1.1"
+dependencies = [
+ "toml",
+]
diff --git a/nixpkgs/pkgs/development/tools/toml2nix/default.nix b/nixpkgs/pkgs/development/tools/toml2nix/default.nix
new file mode 100644
index 000000000000..6987619dbcb5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/toml2nix/default.nix
@@ -0,0 +1,24 @@
+{ lib, rustPlatform, fetchCrate }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "toml2nix";
+  version = "0.1.1";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-YhluLS4tFMibFrDzgIvNtfjM5dAqJQvygeZocKn3+Jg=";
+  };
+
+  cargoLock.lockFile = ./Cargo.lock;
+
+  postPatch = ''
+    ln -s ${./Cargo.lock} Cargo.lock
+  '';
+
+  meta = with lib; {
+    description = "A tool to convert TOML files to Nix expressions";
+    homepage = "https://crates.io/crates/toml2nix";
+    license = with licenses; [ mit /* or */ asl20 ];
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/tora/default.nix b/nixpkgs/pkgs/development/tools/tora/default.nix
new file mode 100644
index 000000000000..bb85babe7c46
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/tora/default.nix
@@ -0,0 +1,55 @@
+{ mkDerivation, lib, fetchFromGitHub, cmake, extra-cmake-modules, makeWrapper
+, boost, doxygen, openssl, libmysqlclient, postgresql, graphviz, loki
+, qscintilla, qtbase, qttools }:
+
+mkDerivation {
+  pname = "tora";
+  version = "3.2.176";
+
+  src = fetchFromGitHub {
+    owner  = "tora-tool";
+    repo   = "tora";
+    rev    = "39bf2837779bf458fc72a9f0e49271152e57829f";
+    sha256 = "0fr9b542i8r6shgnz33lc3cz333fnxgmac033yxfrdjfglzk0j2k";
+  };
+
+  nativeBuildInputs = [ cmake extra-cmake-modules makeWrapper qttools ];
+
+  buildInputs = [
+    boost doxygen graphviz loki libmysqlclient openssl postgresql qscintilla qtbase
+  ];
+
+  preConfigure = ''
+    substituteInPlace src/widgets/toglobalsetting.cpp \
+      --replace 'defaultGvHome = "/usr/bin"' 'defaultGvHome = "${lib.getBin graphviz}/bin"'
+    substituteInPlace extlibs/libermodel/dotgraph.cpp \
+      --replace /usr/bin/dot ${lib.getBin graphviz}/bin/dot
+  '';
+
+  cmakeFlags = [
+    "-DWANT_INTERNAL_LOKI=0"
+    "-DWANT_INTERNAL_QSCINTILLA=0"
+    # cmake/modules/FindQScintilla.cmake looks in qtbase and for the wrong library name
+    "-DQSCINTILLA_INCLUDE_DIR=${qscintilla}/include"
+    "-DQSCINTILLA_LIBRARY=${qscintilla}/lib/libqscintilla2.so"
+    "-DENABLE_DB2=0"
+    "-DENABLE_ORACLE=0"
+    "-DENABLE_TERADATA=0"
+    "-DQT5_BUILD=1"
+    "-Wno-dev"
+  ];
+
+  # these libraries are only searched for at runtime so we need to force-link them
+  NIX_LDFLAGS = "-lgvc -lmysqlclient -lecpg -lssl -L${libmysqlclient}/lib/mariadb";
+
+  qtWrapperArgs = [
+    ''--prefix PATH : ${lib.getBin graphviz}/bin''
+  ];
+
+  meta = with lib; {
+    description = "Tora SQL tool";
+    maintainers = with maintainers; [ peterhoeg ];
+    platforms = platforms.linux;
+    license = licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/toxiproxy/default.nix b/nixpkgs/pkgs/development/tools/toxiproxy/default.nix
new file mode 100644
index 000000000000..fdeb362ee946
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/toxiproxy/default.nix
@@ -0,0 +1,36 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "toxiproxy";
+  version = "2.5.0";
+
+  src = fetchFromGitHub {
+    owner = "Shopify";
+    repo = "toxiproxy";
+    rev = "v${version}";
+    sha256 = "sha256-SL3YHsNeFw8K8lPrzJXAoTkHxS+1sTREfzjawBxdnf0=";
+  };
+
+  vendorHash = "sha256-CmENxPAdjz0BAyvhLKIaJjSbK/mvRzHGCQOfGIiA3yI=";
+
+  excludedPackages = [ "test/e2e" ];
+
+  ldflags = [ "-s" "-w" "-X github.com/Shopify/toxiproxy/v2.Version=${version}" ];
+
+  # Fixes tests on Darwin
+  __darwinAllowLocalNetworking = true;
+
+  checkFlags = [ "-short" ];
+
+  postInstall = ''
+    mv $out/bin/cli $out/bin/toxiproxy-cli
+    mv $out/bin/server $out/bin/toxiproxy-server
+  '';
+
+  meta = {
+    description = "Proxy for for simulating network conditions";
+    homepage = "https://github.com/Shopify/toxiproxy";
+    maintainers = with lib.maintainers; [ avnik ];
+    license = lib.licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/tracy/0001-remove-unifiedtypeidentifiers-framework b/nixpkgs/pkgs/development/tools/tracy/0001-remove-unifiedtypeidentifiers-framework
new file mode 100644
index 000000000000..0dc5a7eb68f1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/tracy/0001-remove-unifiedtypeidentifiers-framework
@@ -0,0 +1,13 @@
+diff --git a/profiler/build/unix/legacy.mk b/profiler/build/unix/legacy.mk
+index 24765f1a..8baffb68 100644
+--- a/profiler/build/unix/legacy.mk
++++ b/profiler/build/unix/legacy.mk
+@@ -16,7 +16,7 @@ else
+ 	UNAME := $(shell uname -s)
+ 	ifeq ($(UNAME),Darwin)
+ 		SRC3 += ../../../nfd/nfd_cocoa.m
+-		LIBS +=  -framework CoreFoundation -framework AppKit -framework UniformTypeIdentifiers
++		LIBS +=  -framework CoreFoundation -framework AppKit
+ 	else
+ 		ifdef TRACY_GTK_FILESELECTOR
+ 			SRC += ../../../nfd/nfd_gtk.cpp
diff --git a/nixpkgs/pkgs/development/tools/tracy/default.nix b/nixpkgs/pkgs/development/tools/tracy/default.nix
new file mode 100644
index 000000000000..4c86ea2fb9cb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/tracy/default.nix
@@ -0,0 +1,111 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+
+, capstone
+, darwin
+, dbus
+, freetype
+, glfw
+, hicolor-icon-theme
+, pkg-config
+, tbb
+}:
+
+stdenv.mkDerivation rec {
+  pname = "tracy";
+  version = "0.10";
+
+  src = fetchFromGitHub {
+    owner = "wolfpld";
+    repo = "tracy";
+    rev = "v${version}";
+    sha256 = "sha256-DN1ExvQ5wcIUyhMAfiakFbZkDsx+5l8VMtYGvSdboPA=";
+  };
+
+  patches = lib.optionals (stdenv.isDarwin && !(lib.versionAtLeast stdenv.hostPlatform.darwinMinVersion "11")) [
+    ./0001-remove-unifiedtypeidentifiers-framework
+  ];
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [
+    capstone
+    freetype
+    glfw
+  ] ++ lib.optionals stdenv.isLinux [
+    dbus
+    hicolor-icon-theme
+    tbb
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.AppKit
+    darwin.apple_sdk.frameworks.Carbon
+  ] ++ lib.optionals (stdenv.isDarwin && lib.versionAtLeast stdenv.hostPlatform.darwinMinVersion "11") [
+    darwin.apple_sdk.frameworks.UniformTypeIdentifiers
+  ];
+
+  env.NIX_CFLAGS_COMPILE = toString ([ ]
+    # Apple's compiler finds a format string security error on
+    # ../../../server/TracyView.cpp:649:34, preventing building.
+    ++ lib.optional stdenv.isDarwin "-Wno-format-security"
+    ++ lib.optional stdenv.isLinux "-ltbb"
+    ++ lib.optional stdenv.cc.isClang "-faligned-allocation"
+    # workaround issue #19098
+    ++ lib.optional (stdenv.cc.isClang && stdenv.isDarwin) "-fno-lto");
+
+  buildPhase = ''
+    runHook preBuild
+
+    make -j $NIX_BUILD_CORES -C capture/build/unix release
+    make -j $NIX_BUILD_CORES -C csvexport/build/unix release
+    make -j $NIX_BUILD_CORES -C import-chrome/build/unix release
+    make -j $NIX_BUILD_CORES -C library/unix release
+    make -j $NIX_BUILD_CORES -C profiler/build/unix release LEGACY=1
+    make -j $NIX_BUILD_CORES -C update/build/unix release
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    install -D -m 0755 capture/build/unix/capture-release $out/bin/capture
+    install -D -m 0755 csvexport/build/unix/csvexport-release $out/bin/tracy-csvexport
+    install -D -m 0755 import-chrome/build/unix/import-chrome-release $out/bin/import-chrome
+    install -D -m 0755 library/unix/libtracy-release.so $out/lib/libtracy.so
+    install -D -m 0755 profiler/build/unix/Tracy-release $out/bin/tracy
+    install -D -m 0755 update/build/unix/update-release $out/bin/update
+
+    mkdir -p $out/include/Tracy/client
+    mkdir -p $out/include/Tracy/common
+    mkdir -p $out/include/Tracy/tracy
+
+    cp -p public/client/*.{h,hpp} $out/include/Tracy/client
+    cp -p public/common/*.{h,hpp} $out/include/Tracy/common
+    cp -p public/tracy/*.{h,hpp} $out/include/Tracy/tracy
+  '' + lib.optionalString stdenv.isLinux ''
+    substituteInPlace extra/desktop/tracy.desktop \
+      --replace Exec=/usr/bin/tracy Exec=tracy
+
+    install -D -m 0644 extra/desktop/application-tracy.xml $out/share/mime/packages/application-tracy.xml
+    install -D -m 0644 extra/desktop/tracy.desktop $out/share/applications/tracy.desktop
+    install -D -m 0644 icon/application-tracy.svg $out/share/icons/hicolor/scalable/apps/application-tracy.svg
+    install -D -m 0644 icon/icon.png $out/share/icons/hicolor/256x256/apps/tracy.png
+    install -D -m 0644 icon/icon.svg $out/share/icons/hicolor/scalable/apps/tracy.svg
+  '' + ''
+    runHook postInstall
+  '';
+
+  postFixup = lib.optionalString stdenv.isDarwin ''
+    install_name_tool -change libcapstone.4.dylib ${capstone}/lib/libcapstone.4.dylib $out/bin/tracy
+  '';
+
+  meta = with lib; {
+    description = "A real time, nanosecond resolution, remote telemetry frame profiler for games and other applications";
+    homepage = "https://github.com/wolfpld/tracy";
+    platforms = platforms.linux ++ platforms.darwin;
+    license = licenses.bsd3;
+    mainProgram = "tracy";
+    maintainers = with maintainers; [ mpickering nagisa paveloom ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/tradcpp/aarch64.patch b/nixpkgs/pkgs/development/tools/tradcpp/aarch64.patch
new file mode 100644
index 000000000000..ef7ad9828ace
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/tradcpp/aarch64.patch
@@ -0,0 +1,12 @@
+diff a/config.h b/config.h
+--- a/config.h
++++ b/config.h
+@@ -124,6 +124,8 @@
+ #define CONFIG_CPU "__ppc64__"
+ #elif defined(__ARM__)
+ #define CONFIG_CPU "__ARM__"
++#elif defined(__aarch64__)
++#define CONFIG_CPU "__aarch64__"
+ #else
+ /* let it go */
+ #endif
diff --git a/nixpkgs/pkgs/development/tools/tradcpp/default.nix b/nixpkgs/pkgs/development/tools/tradcpp/default.nix
new file mode 100644
index 000000000000..7d2606eba84e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/tradcpp/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchurl, autoconf }:
+
+stdenv.mkDerivation rec {
+  pname = "tradcpp";
+  version = "0.5.2";
+
+  src = fetchurl {
+    url = "https://ftp.netbsd.org/pub/NetBSD/misc/dholland/${pname}-${version}.tar.gz";
+    sha256 = "1h2bwxwc13rz3g2236l89hm47f72hn3m4h7wjir3j532kq0m68bc";
+  };
+
+  strictDeps = true;
+  # tradcpp only comes with BSD-make Makefile; the patch adds configure support
+  nativeBuildInputs = [ autoconf ];
+  preConfigure = "autoconf";
+  patches = [
+    ./tradcpp-configure.patch
+    ./aarch64.patch
+  ];
+
+  meta = with lib; {
+    description = "A traditional (K&R-style) C macro preprocessor";
+    platforms = platforms.all;
+    license = licenses.bsd2;
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/tools/tradcpp/tradcpp-configure.patch b/nixpkgs/pkgs/development/tools/tradcpp/tradcpp-configure.patch
new file mode 100644
index 000000000000..39cc499e2180
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/tradcpp/tradcpp-configure.patch
@@ -0,0 +1,84 @@
+*** /dev/null	Wed Jan  7 11:47:26 2015
+--- tradcpp-0.4/Makefile.in	Wed Jan  7 11:43:15 2015
+***************
+*** 0 ****
+--- 1,64 ----
++ SHELL = /bin/sh
++ 
++ ### Filled in by `configure' ###
++ srcdir = @srcdir@
++ VPATH = @srcdir@
++ CC = @CC@
++ CFLAGS = @CFLAGS@
++ CPPFLAGS = @CPPFLAGS@
++ 
++ LDFLAGS = @LDFLAGS@
++ 
++ prefix = @prefix@
++ exec_prefix = @exec_prefix@
++ 
++ bindir = @bindir@
++ libdir = @libdir@
++ incdir = @includedir@
++ manext = 1
++ mandir = @mandir@/man$(manext)
++ docdir = @docdir@
++ datarootdir = @datarootdir@
++ datadir = @datadir@
++ 
++ OBJS=	main.o \
++ 	files.o directive.o eval.o macro.o output.o \
++ 	place.o array.o utils.o
++ 
++ .PHONY: all clean install man doc dist
++ 
++ default: all
++ 
++ all: tradcpp
++ 
++ tradcpp: $(OBJS)
++ 	$(CC) $(LDFLAGS) $(CFLAGS) $(CPPFLAGS) -o $@ $(OBJS)
++ 
++ clean:
++ 	rm -f *.o
++ 
++ distclean: clean
++ 	rm -f Makefile config.log config.status config-cache
++ 
++ install: tradcpp
++ 	mkdir -p $(DESTDIR)$(mandir)
++ 	install tradcpp.1 $(DESTDIR)$(mandir)
++ 	mkdir -p $(DESTDIR)$(bindir)
++ 	install tradcpp $(DESTDIR)$(bindir)
++ 
++ .c.o:
++ 	$(CC) -c $(CPPFLAGS) $(CFLAGS) -o $@ $<
++ 
++ array.o: array.c array.h inlinedefs.h utils.h
++ directive.o: directive.c utils.h mode.h place.h files.h directive.h \
++  macro.h eval.h output.h
++ eval.o: eval.c utils.h array.h inlinedefs.h mode.h place.h eval.h
++ files.o: files.c array.h inlinedefs.h utils.h mode.h place.h files.h \
++  directive.h
++ macro.o: macro.c array.h inlinedefs.h utils.h mode.h place.h macro.h \
++  output.h
++ main.o: main.c version.h config.h utils.h array.h inlinedefs.h mode.h \
++  place.h files.h directive.h macro.h
++ output.o: output.c utils.h mode.h place.h output.h
++ place.o: place.c utils.h array.h inlinedefs.h place.h
++ utils.o: utils.c utils.h
+*** /dev/null	Wed Jan  7 11:47:26 2015
+--- tradcpp-0.4/configure.ac	Wed Jan  7 11:22:18 2015
+***************
+*** 0 ****
+--- 1,10 ----
++ AC_PREREQ([2.60])dnl
++ AC_INIT(main.c)
++ AC_PROG_CC
++ AC_LANG(C)
++ AC_SUBST(CC)
++ AC_SUBST(CFLAGS)
++ AC_SUBST(CPPFLAGS)
++ AC_SUBST(LDFLAGS)
++ AC_SUBST(LD)
++ AC_OUTPUT(Makefile)
diff --git a/nixpkgs/pkgs/development/tools/treefmt/default.nix b/nixpkgs/pkgs/development/tools/treefmt/default.nix
new file mode 100644
index 000000000000..408272796d70
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/treefmt/default.nix
@@ -0,0 +1,21 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+rustPlatform.buildRustPackage rec {
+  pname = "treefmt";
+  version = "0.6.1";
+
+  src = fetchFromGitHub {
+    owner = "numtide";
+    repo = "treefmt";
+    rev = "v${version}";
+    hash = "sha256-icAe54Mv1xpOjUPSk8QDZaMk2ueNvjER6UyJ9uyUL6s=";
+  };
+
+  cargoSha256 = "sha256-bpNIGuh74nwEmHPeXtPmsML9vJOb00xkdjK0Nd7esAc=";
+
+  meta = {
+    description = "one CLI to format the code tree";
+    homepage = "https://github.com/numtide/treefmt";
+    license = lib.licenses.mit;
+    maintainers = [ lib.maintainers.zimbatm ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/trunk-io/default.nix b/nixpkgs/pkgs/development/tools/trunk-io/default.nix
new file mode 100644
index 000000000000..0428b8489547
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/trunk-io/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "trunk-io";
+  version = "1.3.0";
+
+  src = fetchurl {
+    url = "https://trunk.io/releases/launcher/${finalAttrs.version}/trunk";
+    hash = "sha256-v9WJb9oIs5k2ZIX80L83dRtEarTiVsXBtXBta0sP++A=";
+  };
+
+  dontUnpack = true;
+  dontConfigure = true;
+  dontBuild = true;
+
+  installPhase = ''
+    install -D $src $out/bin/trunk
+  '';
+
+  passthru.updateScript = ./update.sh;
+
+  meta = with lib; {
+    homepage = "https://trunk.io/";
+    description = "Developer experience toolkit used to check, test, merge, and monitor code";
+    license = licenses.unfree;
+    maintainers = with maintainers; [ aaronjheng ];
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/trunk-io/update.sh b/nixpkgs/pkgs/development/tools/trunk-io/update.sh
new file mode 100755
index 000000000000..9110bb633527
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/trunk-io/update.sh
@@ -0,0 +1,7 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p curl pcre common-updater-scripts
+
+set -eu -o pipefail
+
+version="$(curl -fsSL https://trunk.io/releases/trunk | grep -Fi 'readonly TRUNK_LAUNCHER_VERSION=' | pcregrep -o1 '"(\d+(?:\.\d+)+)"')"
+update-source-version trunk-io "$version"
diff --git a/nixpkgs/pkgs/development/tools/trunk/default.nix b/nixpkgs/pkgs/development/tools/trunk/default.nix
new file mode 100644
index 000000000000..d752db90ca03
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/trunk/default.nix
@@ -0,0 +1,60 @@
+{ lib,
+stdenv,
+rustPlatform,
+fetchFromGitHub,
+pkg-config,
+openssl,
+jq,
+moreutils,
+CoreServices,
+SystemConfiguration
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "trunk";
+  version = "0.18.8";
+
+  src = fetchFromGitHub {
+    owner = "thedodd";
+    repo = "trunk";
+    rev = "v${version}";
+    hash = "sha256-cx14IVqsu1SQezs8T1HFZ75+MPWkvf5RcvGCodW5G4A=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = if stdenv.isDarwin
+    then [ CoreServices SystemConfiguration ]
+    else [ openssl ];
+  # requires network
+  checkFlags = [ "--skip=tools::tests::download_and_install_binaries" ];
+
+  cargoHash = "sha256-zMkRCNFrfkUvq6oz/7GtaWNw9YS5NygBUYzoOAoQl40=";
+
+  # the dependency css-minify contains both README.md and Readme.md,
+  # which causes a hash mismatch on systems with a case-insensitive filesystem
+  # this removes the readme files and updates cargo's checksum file accordingly
+  depsExtraArgs = {
+    nativeBuildInputs = [
+      jq
+      moreutils
+    ];
+
+    postBuild = ''
+      pushd $name/css-minify
+
+      rm -f README.md Readme.md
+      jq 'del(.files."README.md") | del(.files."Readme.md")' \
+        .cargo-checksum.json -c \
+        | sponge .cargo-checksum.json
+
+      popd
+    '';
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/thedodd/trunk";
+    description = "Build, bundle & ship your Rust WASM application to the web";
+    maintainers = with maintainers; [ freezeboy ];
+    license = with licenses; [ asl20 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ttfb/default.nix b/nixpkgs/pkgs/development/tools/ttfb/default.nix
new file mode 100644
index 000000000000..f024280c0870
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ttfb/default.nix
@@ -0,0 +1,40 @@
+{ darwin
+, fetchCrate
+, lib
+, rustPlatform
+, stdenv
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "ttfb";
+  version = "1.10.0";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-94gBofb7H7+qU50+cp+rq14Vtbk2vuXFQksNITvICm4=";
+  };
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  cargoHash = "sha256-CUisxtUQXkStqSZikIoAN0GwpUjvQqon7KqI0beHL5U=";
+
+  # The bin feature activates all dependencies of the binary. Otherwise,
+  # only the library is build.
+  buildFeatures = [ "bin" ];
+
+  meta = {
+    description = "CLI-Tool to measure the TTFB (time to first byte) of HTTP(S) requests";
+    longDescription = ''
+      ttfb measure the TTFB (time to first byte) of HTTP(S) requests. This includes data
+      of intermediate steps, such as the relative and absolute timings of DNS lookup, TCP
+      connect, and TLS handshake.
+    '';
+    homepage = "https://github.com/phip1611/ttfb";
+    changelog = "https://github.com/phip1611/ttfb/blob/v${version}/CHANGELOG.md";
+    license = with lib.licenses; [ mit ];
+    maintainers = with lib.maintainers; [ phip1611 ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/development/tools/turbogit/default.nix b/nixpkgs/pkgs/development/tools/turbogit/default.nix
new file mode 100644
index 000000000000..2680d10f1dbb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/turbogit/default.nix
@@ -0,0 +1,44 @@
+{ fetchFromGitHub, buildGoModule, lib, installShellFiles, libgit2, pkg-config }:
+buildGoModule rec {
+  pname = "turbogit";
+  version = "3.1.1";
+
+  src = fetchFromGitHub {
+    owner = "b4nst";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-BHgVJlitRUX/9zYPoK5XfRpzzTZRbLhQVZJcx8KVshk=";
+  };
+
+  vendorHash = "sha256-280OcGXZQJD4G6z0b2WnWAS+v7XVptyf2WnlPjG99/0=";
+
+  subPackages = [ "." ];
+
+  buildInputs = [ libgit2 ];
+  nativeBuildInputs = [ installShellFiles pkg-config ];
+  postInstall = ''
+    # Move turbogit binary to tug
+    ln -s $out/bin/turbogit $out/bin/tug
+
+    # Generate completion files
+    mkdir -p share/completions
+    $out/bin/tug completion bash > share/completions/tug.bash
+    $out/bin/tug completion fish > share/completions/tug.fish
+    $out/bin/tug completion zsh > share/completions/tug.zsh
+
+    installShellCompletion share/completions/tug.{bash,fish,zsh}
+  '';
+
+  meta = with lib; {
+    description = "Keep your git workflow clean without headache.";
+    longDescription = ''
+      turbogit (tug) is a cli tool built to help you deal with your day-to-day git work.
+      turbogit enforces convention (e.g. The Conventional Commits) but tries to keep things simple and invisible for you.
+      turbogit is your friend.
+    '';
+    homepage = "https://b4nst.github.io/turbogit";
+    license = licenses.mit;
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = [ maintainers.yusdacra ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/turso-cli/default.nix b/nixpkgs/pkgs/development/tools/turso-cli/default.nix
new file mode 100644
index 000000000000..155360affbf7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/turso-cli/default.nix
@@ -0,0 +1,48 @@
+{
+  lib,
+  stdenv,
+  buildGoModule,
+  fetchFromGitHub,
+  installShellFiles,
+  nix-update-script,
+}:
+buildGoModule rec {
+  pname = "turso-cli";
+  version = "0.88.6";
+
+  src = fetchFromGitHub {
+    owner = "tursodatabase";
+    repo = "turso-cli";
+    rev = "v${version}";
+    hash = "sha256-u8TZFgeDeZVRcP4ICgUrI4qhqlL1lhTSVDmWK3Ozku4=";
+  };
+
+  vendorHash = "sha256-rTeW2RQhcdwJTAMQELm4cdObJbm8gk/I2Qz3Wk3+zpI=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  ldflags = [
+    "-X github.com/tursodatabase/turso-cli/internal/cmd.version=v${version}"
+  ];
+
+  preCheck = ''
+    export HOME=$(mktemp -d)
+  '';
+
+  postInstall = lib.optionalString (stdenv.buildPlatform.canExecute stdenv.hostPlatform) ''
+    installShellCompletion --cmd turso \
+      --bash <($out/bin/turso completion bash) \
+      --fish <($out/bin/turso completion fish) \
+      --zsh <($out/bin/turso completion zsh)
+  '';
+
+  passthru.updateScript = nix-update-script { };
+
+  meta = with lib; {
+    description = "This is the command line interface (CLI) to Turso.";
+    homepage = "https://turso.tech";
+    mainProgram = "turso";
+    license = licenses.mit;
+    maintainers = with maintainers; [ zestsystem kashw2 fryuni ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/twiggy/default.nix b/nixpkgs/pkgs/development/tools/twiggy/default.nix
new file mode 100644
index 000000000000..f1ee4c68fb19
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/twiggy/default.nix
@@ -0,0 +1,22 @@
+{ lib
+, fetchCrate
+, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "twiggy";
+  version = "0.7.0";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-NbtS7A5Zl8634Q3xyjVzNraNszjt1uIXqmctArfnqkk=";
+  };
+
+  cargoSha256 = "sha256-94pfhVZ0CNMn+lCl5O+wOyE+D6fVXbH4NAPx92nMNbM=";
+
+  meta = with lib; {
+    homepage = "https://rustwasm.github.io/twiggy/";
+    description = "A code size profiler for Wasm";
+    license = with licenses; [ asl20 mit ];
+    maintainers = with maintainers; [ lucperkins ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/twilio-cli/default.nix b/nixpkgs/pkgs/development/tools/twilio-cli/default.nix
new file mode 100644
index 000000000000..f862b036ac2b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/twilio-cli/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenvNoCC, nodejs-slim, fetchzip, testers }:
+
+stdenvNoCC.mkDerivation (finalAttrs: {
+  pname = "twilio-cli";
+  version = "5.18.0";
+
+  src = fetchzip {
+    url = "https://twilio-cli-prod.s3.amazonaws.com/twilio-v${finalAttrs.version}/twilio-v${finalAttrs.version}.tar.gz";
+    hash = "sha256-PdfcNRRc2LmYpS5p8y5rfP8vW9z8u72kK7RMu18tsVs=";
+  };
+
+  buildInputs = [ nodejs-slim ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin $out/libexec/twilio-cli
+    cp -R . $out/libexec/twilio-cli
+    ln -s $out/libexec/twilio-cli/bin/run $out/bin/twilio
+
+    runHook postInstall
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = finalAttrs.finalPackage;
+  };
+
+  meta = with lib; {
+    description = "Unleash the power of Twilio from your command prompt";
+    homepage = "https://github.com/twilio/twilio-cli";
+    changelog = "https://github.com/twilio/twilio-cli/blob/${finalAttrs.version}/CHANGES.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ marsam ];
+    platforms = nodejs-slim.meta.platforms;
+    mainProgram = "twilio";
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/twitch-cli/application-name.patch b/nixpkgs/pkgs/development/tools/twitch-cli/application-name.patch
new file mode 100644
index 000000000000..0d80e7252c88
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/twitch-cli/application-name.patch
@@ -0,0 +1,13 @@
+diff --git a/cmd/root.go b/cmd/root.go
+index 3d85c19..cbbe40c 100644
+--- a/cmd/root.go
++++ b/cmd/root.go
+@@ -16,7 +16,7 @@ import (
+ var cfgFile string
+ 
+ var rootCmd = &cobra.Command{
+-	Use:   "twitch",
++	Use:   "twitch-cli",
+ 	Short: "A simple CLI tool for the New Twitch API and Webhook products.",
+ }
+ 
diff --git a/nixpkgs/pkgs/development/tools/twitch-cli/default.nix b/nixpkgs/pkgs/development/tools/twitch-cli/default.nix
new file mode 100644
index 000000000000..cc145b08ed58
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/twitch-cli/default.nix
@@ -0,0 +1,49 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+, testers
+, twitch-cli
+}:
+
+buildGoModule rec {
+  pname = "twitch-cli";
+  version = "1.1.22";
+
+  src = fetchFromGitHub {
+    owner = "twitchdev";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-9tbU9gR8UHg98UKZ9ganapAz1bar18xb7ISvKoeuwe4=";
+  };
+
+  patches = [
+    ./application-name.patch
+  ];
+
+  vendorHash = "sha256-1uUokMeI0D/apDFJLq+Go5BQp1JMYxJQF8nKvw52E7o=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=main.buildVersion=${version}"
+  ];
+
+  preCheck = ''
+    export HOME=$(mktemp -d)
+  '';
+
+  __darwinAllowLocalNetworking = true;
+
+  passthru.tests.version = testers.testVersion {
+    package = twitch-cli;
+    command = "HOME=$(mktemp -d) ${pname} version";
+    version = "${pname}/${version}";
+  };
+
+  meta = with lib; {
+    description = "The official Twitch CLI to make developing on Twitch easier";
+    homepage = "https://github.com/twitchdev/twitch-cli";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ benediktbroich ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/txtpbfmt/default.nix b/nixpkgs/pkgs/development/tools/txtpbfmt/default.nix
new file mode 100644
index 000000000000..384320bb3b95
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/txtpbfmt/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule {
+  pname = "txtpbfmt";
+  version = "unstable-2023-10-25";
+
+  src = fetchFromGitHub {
+    owner = "protocolbuffers";
+    repo = "txtpbfmt";
+    rev = "084445ff1adf0d8a27429bba65dbde5663f02d26";
+    hash = "sha256-SoU1GON9avesty6FSZ+z6o2JHInUtwv+PVOzqCu+8L8=";
+  };
+
+  vendorHash = "sha256-IdD+R8plU4/e9fQaGSM5hJxyMECb6hED0Qg8afwHKbY=";
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "Formatter for text proto files";
+    homepage = "https://github.com/protocolbuffers/txtpbfmt";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ aaronjheng ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/typos/default.nix b/nixpkgs/pkgs/development/tools/typos/default.nix
new file mode 100644
index 000000000000..c1f31c07c6cc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/typos/default.nix
@@ -0,0 +1,23 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "typos";
+  version = "1.16.25";
+
+  src = fetchFromGitHub {
+    owner = "crate-ci";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-prmMj8tVOm9P5EKkenero4YM9ccVU3JskTiHjup0oeQ=";
+  };
+
+  cargoHash = "sha256-OBbLWsG22Rs4veQRDUgoFKcMnOKNOxK6rqBah8y3CnY=";
+
+  meta = with lib; {
+    description = "Source code spell checker";
+    homepage = "https://github.com/crate-ci/typos";
+    changelog = "https://github.com/crate-ci/typos/blob/${src.rev}/CHANGELOG.md";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ figsoda mgttlinger ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/udis86/default.nix b/nixpkgs/pkgs/development/tools/udis86/default.nix
new file mode 100644
index 000000000000..14a594a827da
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/udis86/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch
+, autoreconfHook
+, python3
+}:
+
+stdenv.mkDerivation rec {
+  pname = "udis86";
+  version = "unstable-2014-12-25";
+
+  src = fetchFromGitHub {
+    owner = "vmt";
+    repo = "udis86";
+    rev = "56ff6c87c11de0ffa725b14339004820556e343d";
+    hash = "sha256-bmm1rgzZeStQJXEmcT8vnplsnmgN3LJlYs7COmqsDU8=";
+  };
+
+  patches = [
+    (fetchpatch {
+      name = "support-python3-for-building";
+      url = "https://github.com/vmt/udis86/commit/3c05ce60372cb2eba39d6eb87ac05af8a664e1b1.patch";
+      hash = "sha256-uF4Cwt7UMkyd0RX6cCMQt9xvkkUNQvTDH/Z/6nHtVT8=";
+    })
+  ];
+
+  nativeBuildInputs = [ autoreconfHook python3 ];
+
+  configureFlags = [
+    "--enable-shared"
+  ];
+
+  outputs = [ "bin" "out" "dev" "lib" ];
+
+  meta = with lib; {
+    homepage = "https://udis86.sourceforge.net";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ timor ];
+    mainProgram = "udcli";
+    description = ''
+      Easy-to-use, minimalistic x86 disassembler library (libudis86)
+    '';
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/uftrace/default.nix b/nixpkgs/pkgs/development/tools/uftrace/default.nix
new file mode 100644
index 000000000000..26bb1cf60e00
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/uftrace/default.nix
@@ -0,0 +1,25 @@
+{lib, stdenv, fetchFromGitHub}:
+
+stdenv.mkDerivation rec {
+  pname = "uftrace";
+  version = "0.15.2";
+
+  src = fetchFromGitHub {
+    owner = "namhyung";
+    repo = "uftrace";
+    rev = "v${version}";
+    sha256 = "sha256-FfTt1S7X7FakKXWbmJJ1HMYcu/tG/UFknz8XmEPbPUo=";
+  };
+
+  postUnpack = ''
+        patchShebangs .
+  '';
+
+  meta = {
+    description = "Function (graph) tracer for user-space";
+    homepage = "https://github.com/namhyung/uftrace";
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.linux;
+    maintainers = [lib.maintainers.nthorne];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/unconvert/default.nix b/nixpkgs/pkgs/development/tools/unconvert/default.nix
new file mode 100644
index 000000000000..ac49ad1f9696
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/unconvert/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "unconvert";
+  version = "unstable-2022-09-18";
+
+  src = fetchFromGitHub {
+    owner = "mdempsky";
+    repo = "unconvert";
+    rev = "3f84926d692329767c21c2aef3dfb7889c956832";
+    sha256 = "sha256-vcRHriFCT5b8SKjtRSg+kZDcCAKySC1cKVq+FMZb+9M=";
+  };
+
+  vendorHash = "sha256-p77mLvGtohmC8J+bqqkM5kqc1pMPcFx7GhXOZ4q4jeM=";
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "Remove unnecessary type conversions from Go source";
+    homepage = "https://github.com/mdempsky/unconvert";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ kalbasit ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/unityhub/default.nix b/nixpkgs/pkgs/development/tools/unityhub/default.nix
new file mode 100644
index 000000000000..3ef4b44953d1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/unityhub/default.nix
@@ -0,0 +1,143 @@
+{ lib
+, stdenv
+, fetchurl
+, dpkg
+, makeWrapper
+, buildFHSEnv
+, extraPkgs ? pkgs: [ ]
+, extraLibs ? pkgs: [ ]
+}:
+
+stdenv.mkDerivation rec {
+  pname = "unityhub";
+  version = "3.7.0";
+
+  src = fetchurl {
+    url = "https://hub-dist.unity3d.com/artifactory/hub-debian-prod-local/pool/main/u/unity/unityhub_amd64/unityhub-amd64-${version}.deb";
+    sha256 = "sha256-cFHcfpsHSDlR82PtZ0leRDpvCD6nw0Qdb3PsYKMnosA=";
+  };
+
+  nativeBuildInputs = [
+    dpkg
+    makeWrapper
+  ];
+
+  fhsEnv = buildFHSEnv {
+    name = "${pname}-fhs-env";
+    runScript = "";
+
+    targetPkgs = pkgs: with pkgs; [
+      # Unity Hub binary dependencies
+      xorg.libXrandr
+      xdg-utils
+
+      # GTK filepicker
+      gsettings-desktop-schemas
+      hicolor-icon-theme
+
+      # Bug Reporter dependencies
+      fontconfig
+      freetype
+      lsb-release
+    ] ++ extraPkgs pkgs;
+
+    multiPkgs = pkgs: with pkgs; [
+      # Unity Hub ldd dependencies
+      cups
+      gtk3
+      expat
+      libxkbcommon
+      lttng-ust_2_12
+      krb5
+      alsa-lib
+      nss
+      libdrm
+      mesa
+      nspr
+      atk
+      dbus
+      at-spi2-core
+      pango
+      xorg.libXcomposite
+      xorg.libXext
+      xorg.libXdamage
+      xorg.libXfixes
+      xorg.libxcb
+      xorg.libxshmfence
+      xorg.libXScrnSaver
+      xorg.libXtst
+
+      # Unity Hub additional dependencies
+      libva
+      openssl
+      cairo
+      libnotify
+      libuuid
+      libsecret
+      udev
+      libappindicator
+      wayland
+      cpio
+      icu
+      libpulseaudio
+
+      # Unity Editor dependencies
+      libglvnd # provides ligbl
+      xorg.libX11
+      xorg.libXcursor
+      glib
+      gdk-pixbuf
+      libxml2
+      zlib
+      clang
+      git # for git-based packages in unity package manager
+
+      # Unity Editor 2019 specific dependencies
+      xorg.libXi
+      xorg.libXrender
+      gnome2.GConf
+      libcap
+    ] ++ extraLibs pkgs;
+  };
+
+  unpackCmd = "dpkg -x $curSrc src";
+
+  dontConfigure = true;
+  dontBuild = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out
+    mv opt/ usr/share/ $out
+
+    # `/opt/unityhub/unityhub` is a shell wrapper that runs `/opt/unityhub/unityhub-bin`
+    # Which we don't need and overwrite with our own custom wrapper
+    makeWrapper ${fhsEnv}/bin/${pname}-fhs-env $out/opt/unityhub/unityhub \
+      --add-flags $out/opt/unityhub/unityhub-bin \
+      --argv0 unityhub
+
+    # Link binary
+    mkdir -p $out/bin
+    ln -s $out/opt/unityhub/unityhub $out/bin/unityhub
+
+    # Replace absolute path in desktop file to correctly point to nix store
+    substituteInPlace $out/share/applications/unityhub.desktop \
+      --replace /opt/unityhub/unityhub $out/opt/unityhub/unityhub
+
+    runHook postInstall
+  '';
+
+  passthru.updateScript = ./update.sh;
+
+  meta = with lib; {
+    description = "Official Unity3D app to download and manage Unity Projects and installations";
+    homepage = "https://unity.com/";
+    downloadPage = "https://unity.com/unity-hub";
+    changelog = "https://unity.com/unity-hub/release-notes";
+    license = licenses.unfree;
+    maintainers = with maintainers; [ tesq0 huantian ];
+    platforms = [ "x86_64-linux" ];
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/unityhub/update.sh b/nixpkgs/pkgs/development/tools/unityhub/update.sh
new file mode 100755
index 000000000000..646652aa6fc4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/unityhub/update.sh
@@ -0,0 +1,13 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p curl common-updater-scripts
+# set -euo pipefail
+
+new_version="$(curl https://hub-dist.unity3d.com/artifactory/hub-debian-prod-local/dists/stable/main/binary-amd64/Packages --silent | sed -nE "s/^Version: ([0-9]+\.[0-9]+\.[0-9]+)$/\1/p" | sort -V | tail -n 1)"
+old_version="$(sed -nE 's/^\s*version = "([0-9]+\.[0-9]+\.[0-9]+)";$/\1/p' ./default.nix)"
+
+if [[ "$new_version" == "$old_version" ]]; then
+    echo "Up to date"
+    exit 0
+fi
+
+update-source-version unityhub "$new_version"
diff --git a/nixpkgs/pkgs/development/tools/upbound/default.nix b/nixpkgs/pkgs/development/tools/upbound/default.nix
new file mode 100644
index 000000000000..c1ac7b1a19b0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/upbound/default.nix
@@ -0,0 +1,32 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "upbound";
+  version = "0.24.1";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = "up";
+    rev = "v${version}";
+    sha256 = "sha256-1WSkNL1XpgnkWeL4tDiOxoKX6N5LYepD3DU0109pWC4=";
+  };
+
+  vendorHash = "sha256-jHVwI5fQbS/FhRptRXtNezG1djaZKHJgpPJfuEH/zO0=";
+
+  subPackages = [ "cmd/docker-credential-up" "cmd/up" ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/upbound/up/internal/version.version=v${version}"
+  ];
+
+  meta = with lib; {
+    description =
+      "CLI for interacting with Upbound Cloud, Upbound Enterprise, and Universal Crossplane (UXP)";
+    homepage = "https://upbound.io";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ lucperkins ];
+    mainProgram = "up";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/vagrant/0001-Revert-Merge-pull-request-12225-from-chrisroberts-re.patch b/nixpkgs/pkgs/development/tools/vagrant/0001-Revert-Merge-pull-request-12225-from-chrisroberts-re.patch
new file mode 100644
index 000000000000..75b8f0cf8dfe
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/vagrant/0001-Revert-Merge-pull-request-12225-from-chrisroberts-re.patch
@@ -0,0 +1,349 @@
+From dc7156d8951242231cfd9142b3d5628815dc6589 Mon Sep 17 00:00:00 2001
+From: Maximilian Bosch <maximilian@mbosch.me>
+Date: Wed, 31 Mar 2021 14:30:01 +0200
+Subject: [PATCH] Revert "Merge pull request #12225 from
+ chrisroberts/resolution-isolation"
+
+This reverts commit 8a69d0c4dae035a4b1aa789bc4ec3db69c210df2, reversing
+changes made to 5dd0a8c8acc36b654c13a5102e4327eedf1858f2.
+
+-----
+
+Rationale: NixOS-specific patch. The changes in here break our current
+implementation of declarative plugins (only `vagrant-libvirt` atm).
+---
+ bin/vagrant                       | 28 +--------------
+ lib/vagrant.rb                    |  2 +-
+ lib/vagrant/bundler.rb            | 17 +++------
+ lib/vagrant/errors.rb             | 12 -------
+ lib/vagrant/plugin/manager.rb     | 22 ++----------
+ templates/locales/en.yml          | 23 ++----------
+ test/unit/bin/vagrant_test.rb     |  1 -
+ test/unit/vagrant/bundler_test.rb | 58 ++++++++++++++-----------------
+ 8 files changed, 39 insertions(+), 124 deletions(-)
+
+diff --git a/bin/vagrant b/bin/vagrant
+index c019f30ff..ba7e40076 100755
+--- a/bin/vagrant
++++ b/bin/vagrant
+@@ -23,9 +23,9 @@ if idx = argv.index("--")
+   argv = argv.slice(0, idx)
+ end
+ 
+-require_relative "../lib/vagrant/version"
+ # Fast path the version of Vagrant
+ if argv.include?("-v") || argv.include?("--version")
++  require_relative "../lib/vagrant/version"
+   puts "Vagrant #{Vagrant::VERSION}"
+   exit 0
+ end
+@@ -82,29 +82,6 @@ end
+ $stdout.sync = true
+ $stderr.sync = true
+ 
+-# Before we start activate all our dependencies
+-# so we can provide correct resolutions later
+-builtin_specs = []
+-
+-vagrant_spec = Gem::Specification.find_all_by_name("vagrant").detect do |spec|
+-  spec.version == Gem::Version.new(Vagrant::VERSION)
+-end
+-
+-dep_activator = proc do |spec|
+-  spec.runtime_dependencies.each do |dep|
+-    gem(dep.name, *dep.requirement.as_list)
+-    dep_spec = Gem::Specification.find_all_by_name(dep.name).detect(&:activated?)
+-    if dep_spec
+-      builtin_specs << dep_spec
+-      dep_activator.call(dep_spec)
+-    end
+-  end
+-end
+-
+-if vagrant_spec
+-  dep_activator.call(vagrant_spec)
+-end
+-
+ env = nil
+ begin
+   require 'log4r'
+@@ -114,9 +91,6 @@ begin
+   require 'vagrant/util/platform'
+   require 'vagrant/util/experimental'
+ 
+-  # Set our list of builtin specs
+-  Vagrant::Bundler.instance.builtin_specs = builtin_specs
+-
+   # Schedule the cleanup of things
+   at_exit(&Vagrant::Bundler.instance.method(:deinit))
+ 
+diff --git a/lib/vagrant.rb b/lib/vagrant.rb
+index f3dcba0bc..d696bdff8 100644
+--- a/lib/vagrant.rb
++++ b/lib/vagrant.rb
+@@ -81,7 +81,7 @@ if ENV["VAGRANT_LOG"] && ENV["VAGRANT_LOG"] != ""
+     # See https://github.com/rest-client/rest-client/issues/34#issuecomment-290858
+     # for more information
+     class VagrantLogger < Log4r::Logger
+-      def << msg
++      def << (msg)
+         debug(msg.strip)
+       end
+     end
+diff --git a/lib/vagrant/bundler.rb b/lib/vagrant/bundler.rb
+index eb2caabb0..d75f54362 100644
+--- a/lib/vagrant/bundler.rb
++++ b/lib/vagrant/bundler.rb
+@@ -189,11 +189,8 @@ module Vagrant
+     attr_reader :env_plugin_gem_path
+     # @return [Pathname] Vagrant environment data path
+     attr_reader :environment_data_path
+-    # @return [Array<Gem::Specification>, nil] List of builtin specs
+-    attr_accessor :builtin_specs
+ 
+     def initialize
+-      @builtin_specs = []
+       @plugin_gem_path = Vagrant.user_data_path.join("gems", RUBY_VERSION).freeze
+       @logger = Log4r::Logger.new("vagrant::bundler")
+     end
+@@ -290,6 +287,7 @@ module Vagrant
+         # Never allow dependencies to be remotely satisfied during init
+         request_set.remote = false
+ 
++        repair_result = nil
+         begin
+           @logger.debug("resolving solution from available specification set")
+           # Resolve the request set to ensure proper activation order
+@@ -652,6 +650,7 @@ module Vagrant
+         self_spec.activate
+         @logger.info("Activated vagrant specification version - #{self_spec.version}")
+       end
++      self_spec.runtime_dependencies.each { |d| gem d.name, *d.requirement.as_list }
+       # discover all the gems we have available
+       list = {}
+       if Gem.respond_to?(:default_specifications_dir)
+@@ -660,16 +659,10 @@ module Vagrant
+         spec_dir = Gem::Specification.default_specifications_dir
+       end
+       directories = [spec_dir]
+-      if Vagrant.in_bundler?
+-        Gem::Specification.find_all{true}.each do |spec|
+-          list[spec.full_name] = spec
+-        end
+-      else
+-        builtin_specs.each do |spec|
+-          list[spec.full_name] = spec
+-        end
++      Gem::Specification.find_all{true}.each do |spec|
++        list[spec.full_name] = spec
+       end
+-      if Vagrant.in_installer?
++      if(!Object.const_defined?(:Bundler))
+         directories += Gem::Specification.dirs.find_all do |path|
+           !path.start_with?(Gem.user_dir)
+         end
+diff --git a/lib/vagrant/errors.rb b/lib/vagrant/errors.rb
+index 5cb861c06..782615bc4 100644
+--- a/lib/vagrant/errors.rb
++++ b/lib/vagrant/errors.rb
+@@ -636,18 +636,6 @@ module Vagrant
+       error_key(:provisioner_winrm_unsupported)
+     end
+ 
+-    class PluginNeedsDeveloperTools < VagrantError
+-      error_key(:plugin_needs_developer_tools)
+-    end
+-
+-    class PluginMissingLibrary < VagrantError
+-      error_key(:plugin_missing_library)
+-    end
+-
+-    class PluginMissingRubyDev < VagrantError
+-      error_key(:plugin_missing_ruby_dev)
+-    end
+-
+     class PluginGemNotFound < VagrantError
+       error_key(:plugin_gem_not_found)
+     end
+diff --git a/lib/vagrant/plugin/manager.rb b/lib/vagrant/plugin/manager.rb
+index b73f07f9c..9058e68b3 100644
+--- a/lib/vagrant/plugin/manager.rb
++++ b/lib/vagrant/plugin/manager.rb
+@@ -179,26 +179,8 @@ module Vagrant
+         result
+       rescue Gem::GemNotFoundException
+         raise Errors::PluginGemNotFound, name: name
+-      rescue Gem::Exception => err
+-        @logger.warn("Failed to install plugin: #{err}")
+-        @logger.debug("#{err.class}: #{err}\n#{err.backtrace.join("\n")}")
+-        # Try and determine a cause for the failure
+-        case err.message
+-        when /install development tools first/
+-          raise Errors::PluginNeedsDeveloperTools
+-        when /library not found in default locations/
+-          lib = err.message.match(/(\w+) library not found in default locations/)
+-          if lib.nil?
+-            raise Errors::BundlerError, message: err.message
+-          end
+-          raise Errors::PluginMissingLibrary,
+-            library: lib.captures.first,
+-            name: name
+-        when /find header files for ruby/
+-          raise Errors::PluginMissingRubyDev
+-        else
+-          raise Errors::BundlerError, message: err.message
+-        end
++      rescue Gem::Exception => e
++        raise Errors::BundlerError, message: e.to_s
+       end
+ 
+       # Uninstalls the plugin with the given name.
+diff --git a/templates/locales/en.yml b/templates/locales/en.yml
+index edae9b477..782904f49 100644
+--- a/templates/locales/en.yml
++++ b/templates/locales/en.yml
+@@ -794,9 +794,9 @@ en:
+         matching this provider. For example, if you're using VirtualBox,
+         the clone environment must also be using VirtualBox.
+       cloud_init_not_found: |-
+-        cloud-init is not found. Please ensure that cloud-init is installed and
++        cloud-init is not found. Please ensure that cloud-init is installed and 
+         available on path for guest '%{guest_name}'.
+-      cloud_init_command_failed: |-
++      cloud_init_command_failed: |- 
+         cloud init command '%{cmd}' failed on guest '%{guest_name}'.
+       command_deprecated: |-
+         The command 'vagrant %{name}' has been deprecated and is no longer functional
+@@ -1245,30 +1245,6 @@ en:
+         following command:
+ 
+           vagrant plugin install --local
+-      plugin_needs_developer_tools: |-
+-        Vagrant failed to install the requested plugin because development tools
+-        are required for installation but are not currently installed on this
+-        machine. Please install development tools and then try this command
+-        again.
+-      plugin_missing_library: |-
+-        Vagrant failed to install the requested plugin because it depends
+-        on development files for a library which is not currently installed
+-        on this system. The following library is required by the '%{name}'
+-        plugin:
+-
+-          %{library}
+-
+-        If a package manager is used on this system, please install the development
+-        package for the library. The name of the package will be similar to:
+-
+-          %{library}-dev or %{library}-devel
+-
+-        After the library and development files have been installed, please
+-        run the command again.
+-      plugin_missing_ruby_dev: |-
+-        Vagrant failed to install the requested plugin because the Ruby header
+-        files could not be found. Install the ruby development package for your
+-        system and then run this command again.
+       powershell_not_found: |-
+         Failed to locate the powershell executable on the available PATH. Please
+         ensure powershell is installed and available on the local PATH, then
+@@ -3015,7 +2998,7 @@ en:
+     pushes:
+       file:
+         no_destination: "File destination must be specified."
+-
++    
+     autocomplete:
+       installed: |-
+         Autocomplete installed at paths:
+diff --git a/test/unit/bin/vagrant_test.rb b/test/unit/bin/vagrant_test.rb
+index dbbd52112..bc11309aa 100644
+--- a/test/unit/bin/vagrant_test.rb
++++ b/test/unit/bin/vagrant_test.rb
+@@ -30,7 +30,6 @@ describe "vagrant bin" do
+     allow(Kernel).to receive(:exit)
+     allow(Vagrant::Environment).to receive(:new).and_return(env)
+     allow(Vagrant).to receive(:in_installer?).and_return(true)
+-    allow(self).to receive(:require_relative)
+   end
+ 
+   after { expect(run_vagrant).to eq(exit_code) }
+diff --git a/test/unit/vagrant/bundler_test.rb b/test/unit/vagrant/bundler_test.rb
+index 69f425c66..00cedc021 100644
+--- a/test/unit/vagrant/bundler_test.rb
++++ b/test/unit/vagrant/bundler_test.rb
+@@ -778,46 +778,42 @@ describe Vagrant::Bundler do
+       end
+     end
+ 
+-    context "when bundler is not defined" do
+-      before { expect(Vagrant).to receive(:in_bundler?).and_return(false) }
++    context "when run time dependencies are defined" do
++      let(:vagrant_dep_specs) { [double("spec", name: "vagrant-dep", requirement: double("spec-req", as_list: []))] }
+ 
+-      context "when running inside the installer" do
+-        before { expect(Vagrant).to receive(:in_installer?).and_return(true) }
++      it "should call #gem to activate the dependencies" do
++        expect(subject).to receive(:gem).with("vagrant-dep", any_args)
++        subject.send(:vagrant_internal_specs)
++      end
++    end
+ 
+-        it "should load gem specification directories" do
+-          expect(Gem::Specification).to receive(:dirs).and_return(spec_dirs)
+-          subject.send(:vagrant_internal_specs)
+-        end
++    context "when bundler is not defined" do
++      before { expect(Object).to receive(:const_defined?).with(:Bundler).and_return(false) }
+ 
+-        context "when checking paths" do
+-          let(:spec_dirs) { [double("spec-dir", start_with?: in_user_dir)] }
+-          let(:in_user_dir) { true }
+-          let(:user_dir) { double("user-dir") }
++      it "should load gem specification directories" do
++        expect(Gem::Specification).to receive(:dirs).and_return(spec_dirs)
++        subject.send(:vagrant_internal_specs)
++      end
+ 
+-          before { allow(Gem).to receive(:user_dir).and_return(user_dir) }
++      context "when checking paths" do
++        let(:spec_dirs) { [double("spec-dir", start_with?: in_user_dir)] }
++        let(:in_user_dir) { true }
++        let(:user_dir) { double("user-dir") }
+ 
+-          it "should check if path is within local user directory" do
+-            expect(spec_dirs.first).to receive(:start_with?).with(user_dir).and_return(false)
+-            subject.send(:vagrant_internal_specs)
+-          end
+-
+-          context "when path is not within user directory" do
+-            let(:in_user_dir) { false }
++        before { allow(Gem).to receive(:user_dir).and_return(user_dir) }
+ 
+-            it "should use path when loading specs" do
+-              expect(Gem::Specification).to receive(:each_spec) { |arg| expect(arg).to include(spec_dirs.first) }
+-              subject.send(:vagrant_internal_specs)
+-            end
+-          end
++        it "should check if path is within local user directory" do
++          expect(spec_dirs.first).to receive(:start_with?).with(user_dir).and_return(false)
++          subject.send(:vagrant_internal_specs)
+         end
+-      end
+ 
+-      context "when running outside the installer" do
+-        before { expect(Vagrant).to receive(:in_installer?).and_return(false) }
++        context "when path is not within user directory" do
++          let(:in_user_dir) { false }
+ 
+-        it "should not load gem specification directories" do
+-          expect(Gem::Specification).not_to receive(:dirs)
+-          subject.send(:vagrant_internal_specs)
++          it "should use path when loading specs" do
++            expect(Gem::Specification).to receive(:each_spec) { |arg| expect(arg).to include(spec_dirs.first) }
++            subject.send(:vagrant_internal_specs)
++          end
+         end
+       end
+     end
+-- 
+2.29.3
+
diff --git a/nixpkgs/pkgs/development/tools/vagrant/0004-Support-system-installed-plugins.patch b/nixpkgs/pkgs/development/tools/vagrant/0004-Support-system-installed-plugins.patch
new file mode 100644
index 000000000000..fa6555c594ef
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/vagrant/0004-Support-system-installed-plugins.patch
@@ -0,0 +1,93 @@
+From: Antonio Terceiro <terceiro@debian.org>
+Date: Wed, 27 May 2015 09:36:17 -0300
+Subject: Support system-installed plugins
+Source: https://salsa.debian.org/ruby-team/vagrant/-/blob/9d86f222/debian/patches/0004-Support-system-installed-plugins.patch
+
+Plugins must be installed as regular Ruby libraries, and they must
+contain /usr/share/vagrant-plugins/plugins.d/$PLUGINNAME.json with the
+following content:
+
+{
+  "${PLUGINNAME}": {
+    "ruby_version":"$(ruby -e 'puts RUBY_VERSION')",
+    "vagrant_version":"$(cat /usr/share/vagrant/version.txt)",
+    "gem_version":"",
+    "require":"",
+    "sources":[]
+  }
+}
+---
+ lib/vagrant/plugin/manager.rb    |  4 ++--
+ lib/vagrant/plugin/state_file.rb | 22 +++++++++++++++++++++-
+ 2 files changed, 23 insertions(+), 3 deletions(-)
+
+diff --git a/lib/vagrant/plugin/manager.rb b/lib/vagrant/plugin/manager.rb
+index 9058e68..2772131 100644
+--- a/lib/vagrant/plugin/manager.rb
++++ b/lib/vagrant/plugin/manager.rb
+@@ -18,7 +18,7 @@ module Vagrant
+ 
+       # Returns the path to the [StateFile] for system plugins.
+       def self.system_plugins_file
+-        dir = Vagrant.installer_embedded_dir
++        dir = '@system_plugin_dir@'
+         return nil if !dir
+         Pathname.new(dir).join("plugins.json")
+       end
+@@ -38,7 +38,7 @@ module Vagrant
+ 
+         system_path  = self.class.system_plugins_file
+         @system_file = nil
+-        @system_file = StateFile.new(system_path) if system_path && system_path.file?
++        @system_file = StateFile.new(system_path, true) if system_path && system_path.file?
+ 
+         @local_file = nil
+         @globalized = @localized = false
+diff --git a/lib/vagrant/plugin/state_file.rb b/lib/vagrant/plugin/state_file.rb
+index c6872d4..935d431 100644
+--- a/lib/vagrant/plugin/state_file.rb
++++ b/lib/vagrant/plugin/state_file.rb
+@@ -11,8 +11,9 @@ module Vagrant
+       # @return [Pathname] path to file
+       attr_reader :path
+ 
+-      def initialize(path)
++      def initialize(path, system = false)
+         @path = path
++        @system = system
+ 
+         @data = {}
+         if @path.exist?
+@@ -28,6 +29,21 @@ module Vagrant
+ 
+         @data["version"] ||= "1"
+         @data["installed"] ||= {}
++        load_extra_plugins
++      end
++
++      def load_extra_plugins
++        extra_plugins = Dir.glob(@path.dirname.join('plugins.d', '*.json'))
++        extra_plugins.each do |filename|
++          json = File.read(filename)
++          begin
++            plugin_data = JSON.parse(json)
++            @data["installed"].merge!(plugin_data)
++          rescue JSON::ParserError => e
++            raise Vagrant::Errors::PluginStateFileParseError,
++              path: filename, message: e.message
++          end
++        end
+       end
+ 
+       # Add a plugin that is installed to the state file.
+@@ -107,6 +123,10 @@ module Vagrant
+           f.close
+           FileUtils.mv(f.path, @path)
+         end
++      rescue Errno::EACCES
++        # Ignore permission denied against system-installed plugins; regular
++        # users are not supposed to write there.
++        raise unless @system
+       end
+ 
+       protected
diff --git a/nixpkgs/pkgs/development/tools/vagrant/default.nix b/nixpkgs/pkgs/development/tools/vagrant/default.nix
new file mode 100644
index 000000000000..5dc9e46671e9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/vagrant/default.nix
@@ -0,0 +1,112 @@
+{ stdenv, lib, fetchurl, buildRubyGem, bundlerEnv, ruby, libarchive
+, libguestfs, qemu, writeText, withLibvirt ? stdenv.isLinux
+}:
+
+let
+  # NOTE: bumping the version and updating the hash is insufficient;
+  # you must use bundix to generate a new gemset.nix in the Vagrant source.
+  version = "2.3.7";
+  url = "https://github.com/hashicorp/vagrant/archive/v${version}.tar.gz";
+  hash = "sha256-+oqWMZqnuf9fSpkbd8vzf1SVSdhHN2JLzr76jyAEv0U=";
+
+  deps = bundlerEnv rec {
+    name = "${pname}-${version}";
+    pname = "vagrant";
+    inherit version;
+
+    inherit ruby;
+    gemfile = writeText "Gemfile" "";
+    lockfile = writeText "Gemfile.lock" "";
+    gemset = lib.recursiveUpdate (import ./gemset.nix) ({
+      vagrant = {
+        source = {
+          type = "url";
+          inherit url hash;
+        };
+        inherit version;
+      };
+    } // lib.optionalAttrs withLibvirt (import ./gemset_libvirt.nix));
+
+    # This replaces the gem symlinks with directories, resolving this
+    # error when running vagrant (I have no idea why):
+    # /nix/store/p4hrycs0zaa9x0gsqylbk577ppnryixr-vagrant-2.2.6/lib/ruby/gems/2.6.0/gems/i18n-1.1.1/lib/i18n/config.rb:6:in `<module:I18n>': uninitialized constant I18n::Config (NameError)
+    postBuild = ''
+      for gem in "$out"/lib/ruby/gems/*/gems/*; do
+        cp -a "$gem/" "$gem.new"
+        rm "$gem"
+        # needed on macOS, otherwise the mv yields permission denied
+        chmod +w "$gem.new"
+        mv "$gem.new" "$gem"
+      done
+    '';
+  };
+
+in buildRubyGem rec {
+  name = "${gemName}-${version}";
+  gemName = "vagrant";
+  inherit version;
+
+  doInstallCheck = true;
+  dontBuild = false;
+  src = fetchurl { inherit url hash; };
+
+  patches = [
+    ./unofficial-installation-nowarn.patch
+    ./use-system-bundler-version.patch
+    ./0004-Support-system-installed-plugins.patch
+    ./0001-Revert-Merge-pull-request-12225-from-chrisroberts-re.patch
+  ];
+
+  postPatch = ''
+    substituteInPlace lib/vagrant/plugin/manager.rb --subst-var-by \
+      system_plugin_dir "$out/vagrant-plugins"
+  '';
+
+  # PATH additions:
+  #   - libarchive: Make `bsdtar` available for extracting downloaded boxes
+  # withLibvirt only:
+  #   - libguestfs: Make 'virt-sysprep' available for 'vagrant package'
+  #   - qemu: Make 'qemu-img' available for 'vagrant package'
+  postInstall =
+    let
+      pathAdditions = lib.makeSearchPath "bin"
+        (map (x: lib.getBin x) ([
+          libarchive
+        ] ++ lib.optionals withLibvirt [
+          libguestfs
+          qemu
+        ]));
+    in ''
+    wrapProgram "$out/bin/vagrant" \
+      --set GEM_PATH "${deps}/lib/ruby/gems/${ruby.version.libDir}" \
+      --prefix PATH ':' ${pathAdditions} \
+      --set-default VAGRANT_CHECKPOINT_DISABLE 1
+
+    mkdir -p "$out/vagrant-plugins/plugins.d"
+    echo '{}' > "$out/vagrant-plugins/plugins.json"
+
+    mkdir -p $out/share/bash-completion/completions/
+    cp -av contrib/bash/completion.sh $out/share/bash-completion/completions/vagrant
+  '' +
+  lib.optionalString withLibvirt ''
+    substitute ${./vagrant-libvirt.json.in} $out/vagrant-plugins/plugins.d/vagrant-libvirt.json \
+      --subst-var-by ruby_version ${ruby.version} \
+      --subst-var-by vagrant_version ${version}
+  '';
+
+  installCheckPhase = ''
+    HOME="$(mktemp -d)" $out/bin/vagrant init --output - > /dev/null
+  '';
+
+  passthru = {
+    inherit ruby deps;
+  };
+
+  meta = with lib; {
+    description = "A tool for building complete development environments";
+    homepage = "https://www.vagrantup.com/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ];
+    platforms = with platforms; linux ++ darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/vagrant/gemset.nix b/nixpkgs/pkgs/development/tools/vagrant/gemset.nix
new file mode 100644
index 000000000000..ba76a4f8d8bf
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/vagrant/gemset.nix
@@ -0,0 +1,630 @@
+{
+  bcrypt_pbkdf = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ndamfaivnkhc6hy0yqyk2gkwr6f3bz6216lh74hsiiyk3axz445";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  builder = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "045wzckxpwcqzrjr353cxnyaxgf0qg22jh00dcx7z38cys5g1jlr";
+      type = "gem";
+    };
+    version = "3.2.4";
+  };
+  childprocess = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1lvcp8bsd35g57f7wz4jigcw2sryzzwrpcgjwwf3chmjrjcww5in";
+      type = "gem";
+    };
+    version = "4.1.0";
+  };
+  concurrent-ruby = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0krcwb6mn0iklajwngwsg850nk8k9b35dhmc2qkbdqvmifdi2y9q";
+      type = "gem";
+    };
+    version = "1.2.2";
+  };
+  date = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "03skfikihpx37rc27vr3hwrb057gxnmdzxhmzd4bf4jpkl0r55w1";
+      type = "gem";
+    };
+    version = "3.3.3";
+  };
+  diff-lcs = {
+    groups = ["default" "development"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0rwvjahnp7cpmracd8x732rjgnilqv2sx7d1gfrysslc3h039fa9";
+      type = "gem";
+    };
+    version = "1.5.0";
+  };
+  ed25519 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0zb2dr2ihb1qiknn5iaj1ha1w9p7lj9yq5waasndlfadz225ajji";
+      type = "gem";
+    };
+    version = "1.3.0";
+  };
+  erubi = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08s75vs9cxlc4r1q2bjg4br8g9wc5lc5x5vl0vv4zq5ivxsdpgi7";
+      type = "gem";
+    };
+    version = "1.12.0";
+  };
+  excon = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0j826kfvzn7nc5pv950n270r0sx1702k988ad11cdlav3dcxxw09";
+      type = "gem";
+    };
+    version = "0.99.0";
+  };
+  fake_ftp = {
+    groups = ["development"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zl9q9m4x7lz9890g0h1qqj7hcxnwzpjfnfbxadjblps7b5054q4";
+      type = "gem";
+    };
+    version = "0.3.0";
+  };
+  ffi = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1862ydmclzy1a0cjbvm8dz7847d9rch495ib0zb64y84d3xd4bkg";
+      type = "gem";
+    };
+    version = "1.15.5";
+  };
+  google-protobuf = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zqyy07ps6zh0gi9nppmnsngzv5nx1qjv726mzhv83sh90rc25nm";
+      type = "gem";
+    };
+    version = "3.22.2";
+  };
+  googleapis-common-protos-types = {
+    dependencies = ["google-protobuf"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "12w5bwaziz2iqb9dvgnskp2a7ifml6n4lyl9ypvnxj5bfrrwysap";
+      type = "gem";
+    };
+    version = "1.5.0";
+  };
+  grpc = {
+    dependencies = ["google-protobuf" "googleapis-common-protos-types"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0kj4j1g6l9v92k3byqyfq2kmawy12cj898daxqn1jsw0b458k0dh";
+      type = "gem";
+    };
+    version = "1.53.0";
+  };
+  grpc-tools = {
+    groups = ["development"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0dal0xca2f301jrh049agmrbab21yjqd8npizzz55dhqn9dkwdsl";
+      type = "gem";
+    };
+    version = "1.53.0";
+  };
+  gssapi = {
+    dependencies = ["ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1qdfhj12aq8v0y961v4xv96a1y2z80h3xhvzrs9vsfgf884g6765";
+      type = "gem";
+    };
+    version = "1.3.1";
+  };
+  gyoku = {
+    dependencies = ["builder" "rexml"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1kd2q59xpm39hpvmmvyi6g3f1fr05xjbnxwkrdqz4xy7hirqi79q";
+      type = "gem";
+    };
+    version = "1.4.0";
+  };
+  hashicorp-checkpoint = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1z6mwzvd7p2wqhmk07dwrhvm0ncgqm7pxn0pr2k025rwsspp9bsd";
+      type = "gem";
+    };
+    version = "0.1.5";
+  };
+  httpclient = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19mxmvghp7ki3klsxwrlwr431li7hm1lczhhj8z4qihl2acy8l99";
+      type = "gem";
+    };
+    version = "2.8.3";
+  };
+  i18n = {
+    dependencies = ["concurrent-ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vdcchz7jli1p0gnc669a7bj3q1fv09y9ppf0y3k0vb1jwdwrqwi";
+      type = "gem";
+    };
+    version = "1.12.0";
+  };
+  ipaddr = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ypic2hrmvvcgw7al72raphqv5cs1zvq4w284pwrkvfqsrqrqrsf";
+      type = "gem";
+    };
+    version = "1.2.5";
+  };
+  listen = {
+    dependencies = ["rb-fsevent" "rb-inotify"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13rgkfar8pp31z1aamxf5y7cfq88wv6rxxcwy7cmm177qq508ycn";
+      type = "gem";
+    };
+    version = "3.8.0";
+  };
+  little-plugger = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1frilv82dyxnlg8k1jhrvyd73l6k17mxc5vwxx080r4x1p04gwym";
+      type = "gem";
+    };
+    version = "1.1.4";
+  };
+  log4r = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ri90q0frfmigkirqv5ihyrj59xm8pq5zcmf156cbdv4r4l2jicv";
+      type = "gem";
+    };
+    version = "1.1.10";
+  };
+  logging = {
+    dependencies = ["little-plugger" "multi_json"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zflchpx4g8c110gjdcs540bk5a336nq6nmx379rdg56xw0pjd02";
+      type = "gem";
+    };
+    version = "2.3.1";
+  };
+  mime-types = {
+    dependencies = ["mime-types-data"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ipw892jbksbxxcrlx9g5ljq60qx47pm24ywgfbyjskbcl78pkvb";
+      type = "gem";
+    };
+    version = "3.4.1";
+  };
+  mime-types-data = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pky3vzaxlgm9gw5wlqwwi7wsw3jrglrfflrppvvnsrlaiz043z9";
+      type = "gem";
+    };
+    version = "3.2023.0218.1";
+  };
+  multi_json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0pb1g1y3dsiahavspyzkdy39j4q377009f6ix0bh1ag4nqw43l0z";
+      type = "gem";
+    };
+    version = "1.15.0";
+  };
+  net-ftp = {
+    dependencies = ["net-protocol" "time"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bqy9xg5225x102873j1qqq1bvnwfbi8lnf4357mpq6wimnw9pf9";
+      type = "gem";
+    };
+    version = "0.2.0";
+  };
+  net-protocol = {
+    dependencies = ["timeout"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0dxckrlw4q1lcn3qg4mimmjazmg9bma5gllv72f8js3p36fb3b91";
+      type = "gem";
+    };
+    version = "0.2.1";
+  };
+  net-scp = {
+    dependencies = ["net-ssh"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1si2nq9l6jy5n2zw1q59a5gaji7v9vhy8qx08h4fg368906ysbdk";
+      type = "gem";
+    };
+    version = "4.0.0";
+  };
+  net-sftp = {
+    dependencies = ["net-ssh"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0r33aa2d61hv1psm0l0mm6ik3ycsnq8symv7h84kpyf2b7493fv5";
+      type = "gem";
+    };
+    version = "4.0.0";
+  };
+  net-ssh = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0yx0pb5fmziz92bw8qzbh8vf20lr56nd3s6q8h0gsgr307lki687";
+      type = "gem";
+    };
+    version = "7.1.0";
+  };
+  nori = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "066wc774a2zp4vrq3k7k8p0fhv30ymqmxma1jj7yg5735zls8agn";
+      type = "gem";
+    };
+    version = "2.6.0";
+  };
+  pairing_heap = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15rcn0bd9z25dgbrsnjp9zva1hs22vnr54pzi9wjy62js2nfmx9r";
+      type = "gem";
+    };
+    version = "3.0.0";
+  };
+  rake = {
+    groups = ["development"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15whn7p9nrkxangbs9hh75q585yfn66lv0v2mhj6q6dl6x8bzr2w";
+      type = "gem";
+    };
+    version = "13.0.6";
+  };
+  rb-fsevent = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zmf31rnpm8553lqwibvv3kkx0v7majm1f341xbxc0bk5sbhp423";
+      type = "gem";
+    };
+    version = "0.11.2";
+  };
+  rb-inotify = {
+    dependencies = ["ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1jm76h8f8hji38z3ggf4bzi8vps6p7sagxn3ab57qc0xyga64005";
+      type = "gem";
+    };
+    version = "0.10.1";
+  };
+  rb-kqueue = {
+    dependencies = ["ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0vpq1dmmlbggfk399s7jq2rrnjp6r8774amfli75bqhjn1sk2bxg";
+      type = "gem";
+    };
+    version = "0.2.8";
+  };
+  rexml = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08ximcyfjy94pm1rhcx04ny1vx2sk0x4y185gzn86yfsbzwkng53";
+      type = "gem";
+    };
+    version = "3.2.5";
+  };
+  rgl = {
+    dependencies = ["pairing_heap" "rexml" "stream"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jjc2v9hg42bzg6w5yg3azrsdr31qmc6ff93xb5adfjqg337vzz3";
+      type = "gem";
+    };
+    version = "0.5.10";
+  };
+  rspec = {
+    dependencies = ["rspec-core" "rspec-expectations" "rspec-mocks"];
+    groups = ["development"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "171rc90vcgjl8p1bdrqa92ymrj8a87qf6w20x05xq29mljcigi6c";
+      type = "gem";
+    };
+    version = "3.12.0";
+  };
+  rspec-core = {
+    dependencies = ["rspec-support"];
+    groups = ["default" "development"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0da45cvllbv39sdbsl65vp5djb2xf5m10mxc9jm7rsqyyxjw4h1f";
+      type = "gem";
+    };
+    version = "3.12.1";
+  };
+  rspec-expectations = {
+    dependencies = ["diff-lcs" "rspec-support"];
+    groups = ["default" "development"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "03ba3lfdsj9zl00v1yvwgcx87lbadf87livlfa5kgqssn9qdnll6";
+      type = "gem";
+    };
+    version = "3.12.2";
+  };
+  rspec-its = {
+    dependencies = ["rspec-core" "rspec-expectations"];
+    groups = ["development"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15zafd70gxly5i0s00nky14sj2n92dnj3xpj83ysl3c2wx0119ad";
+      type = "gem";
+    };
+    version = "1.3.0";
+  };
+  rspec-mocks = {
+    dependencies = ["diff-lcs" "rspec-support"];
+    groups = ["default" "development"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1hfm17xakfvwya236graj6c2arr4sb9zasp35q5fykhyz8mhs0w2";
+      type = "gem";
+    };
+    version = "3.12.5";
+  };
+  rspec-support = {
+    groups = ["default" "development"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "12y52zwwb3xr7h91dy9k3ndmyyhr3mjcayk0nnarnrzz8yr48kfx";
+      type = "gem";
+    };
+    version = "3.12.0";
+  };
+  rubyntlm = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0b8hczk8hysv53ncsqzx4q6kma5gy5lqc7s5yx8h64x3vdb18cjv";
+      type = "gem";
+    };
+    version = "0.6.3";
+  };
+  rubyzip = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0grps9197qyxakbpw02pda59v45lfgbgiyw48i0mq9f2bn9y6mrz";
+      type = "gem";
+    };
+    version = "2.3.2";
+  };
+  stream = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "016m9v81vpj14d8g5ins91zc4pzl7vf5f1gxl7jhfsfy601k7cv2";
+      type = "gem";
+    };
+    version = "0.5.5";
+  };
+  thor = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0d1g37j6sc7fkidf8rqlm3wh9zgyg3g7y8h2x1y34hmil5ywa8c3";
+      type = "gem";
+    };
+    version = "0.18.1";
+  };
+  time = {
+    dependencies = ["date"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13pzdsgf3v06mymzipcpa7p80shyw328ybn775nzpnhc6n8y9g30";
+      type = "gem";
+    };
+    version = "0.2.2";
+  };
+  timeout = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pfddf51n5fnj4f9ggwj3wbf23ynj0nbxlxqpz12y1gvl9g7d6r6";
+      type = "gem";
+    };
+    version = "0.3.2";
+  };
+  vagrant-spec = {
+    dependencies = ["childprocess" "log4r" "rspec" "thor"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      fetchSubmodules = false;
+      rev = "708be5c53ea10131b19921c536eae012d1396a96";
+      sha256 = "0xnyai6wdx3xi5nhdvn7bpz73dlvnam4dckkwzd03apdssg6pnr6";
+      type = "git";
+      url = "https://github.com/hashicorp/vagrant-spec.git";
+    };
+    version = "0.0.1";
+  };
+  vagrant_cloud = {
+    dependencies = ["excon" "log4r" "rexml"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0np0d8rjca130si5iaxasbqmfbbx4l3kd9mxdsa3p5mqiia7za3b";
+      type = "gem";
+    };
+    version = "3.0.5";
+  };
+  wdm = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0x5l2pn4x92734k6i2wcjbn2klmwgkiqaajvxadh35k74dgnyh18";
+      type = "gem";
+    };
+    version = "0.1.1";
+  };
+  webrick = {
+    groups = ["development"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1d4cvgmxhfczxiq5fr534lmizkhigd15bsx5719r5ds7k7ivisc7";
+      type = "gem";
+    };
+    version = "1.7.0";
+  };
+  winrm = {
+    dependencies = ["builder" "erubi" "gssapi" "gyoku" "httpclient" "logging" "nori" "rubyntlm"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nxf6a47d1xf1nvi7rbfbzjyyjhz0iakrnrsr2hj6y24a381sd8i";
+      type = "gem";
+    };
+    version = "2.3.6";
+  };
+  winrm-elevated = {
+    dependencies = ["erubi" "winrm" "winrm-fs"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1lmlaii8qapn84wxdg5d82gbailracgk67d0qsnbdnffcg8kswzd";
+      type = "gem";
+    };
+    version = "1.2.3";
+  };
+  winrm-fs = {
+    dependencies = ["erubi" "logging" "rubyzip" "winrm"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0gb91k6s1yjqw387x4w1nkpnxblq3pjdqckayl0qvz5n3ygdsb0d";
+      type = "gem";
+    };
+    version = "1.3.5";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/vagrant/gemset_libvirt.nix b/nixpkgs/pkgs/development/tools/vagrant/gemset_libvirt.nix
new file mode 100644
index 000000000000..d31b76a4e7f8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/vagrant/gemset_libvirt.nix
@@ -0,0 +1,199 @@
+{
+  builder = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "045wzckxpwcqzrjr353cxnyaxgf0qg22jh00dcx7z38cys5g1jlr";
+      type = "gem";
+    };
+    version = "3.2.4";
+  };
+  excon = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1rv2hq29lx2337214a1p2qy70fi77ch6p0p77nw9h6x84q028qr0";
+      type = "gem";
+    };
+    version = "0.92.3";
+  };
+  fog-core = {
+    dependencies = ["builder" "excon" "formatador" "mime-types"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "06m6hxq8vspx9h9bgc2s19m56jzasvl45vblrfv1q5h1qg1k6amw";
+      type = "gem";
+    };
+    version = "2.3.0";
+  };
+  fog-json = {
+    dependencies = ["fog-core" "multi_json"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zj8llzc119zafbmfa4ai3z5s7c4vp9akfs0f9l2piyvcarmlkyx";
+      type = "gem";
+    };
+    version = "1.2.0";
+  };
+  fog-libvirt = {
+    dependencies = ["fog-core" "fog-json" "fog-xml" "json" "ruby-libvirt"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "sha256-z0VkRqFk3JU02ULQ+xQbywekzrJgz1YPDul//Ov5ajU=";
+      type = "gem";
+    };
+    version = "0.11.0";
+  };
+  fog-xml = {
+    dependencies = ["fog-core" "nokogiri"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vyyb2429xqzys39xyk2r3fal80qqn397aj2kqsjrgg2y6m59i41";
+      type = "gem";
+    };
+    version = "0.1.4";
+  };
+  formatador = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1l06bv4avphbdmr1y4g0rqlczr38k6r65b3zghrbj2ynyhm3xqjl";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1z9grvjyfz16ag55hg522d3q4dh07hf391sf9s96npc0vfi85xkz";
+      type = "gem";
+    };
+    version = "2.6.1";
+  };
+  mime-types = {
+    dependencies = ["mime-types-data"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ipw892jbksbxxcrlx9g5ljq60qx47pm24ywgfbyjskbcl78pkvb";
+      type = "gem";
+    };
+    version = "3.4.1";
+  };
+  mime-types-data = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "003gd7mcay800k2q4pb2zn8lwwgci4bhi42v2jvlidm8ksx03i6q";
+      type = "gem";
+    };
+    version = "3.2022.0105";
+  };
+  mini_portile2 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "sha256-RrLSRMxv8BqJv2EnRpDAn9vcpHqErp6sOQOegSMa7nw=";
+      type = "gem";
+    };
+    version = "2.8.2";
+  };
+  multi_json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0pb1g1y3dsiahavspyzkdy39j4q377009f6ix0bh1ag4nqw43l0z";
+      type = "gem";
+    };
+    version = "1.15.0";
+  };
+  nokogiri = {
+    dependencies = ["mini_portile2" "racc"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "sha256-INyAC4++TE9LWxZOaqOrgqNxvLJ+toXBZpYcNN2KItc=";
+      type = "gem";
+    };
+    version = "1.15.2";
+  };
+  racc = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "sha256-r2QSSDb908AOgwcD1/hz6l3qvekj83AGo59aXg2hY4c=";
+      type = "gem";
+    };
+    version = "1.7.1";
+  };
+  rexml = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08ximcyfjy94pm1rhcx04ny1vx2sk0x4y185gzn86yfsbzwkng53";
+      type = "gem";
+    };
+    version = "3.2.5";
+  };
+  xml-simple = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "sha256-0hEx5RnIbxpbwrbS1X1G5pmOR/GO0kmyXK2GQz29aV0=";
+      type = "gem";
+    };
+    version = "1.1.9";
+  };
+  diffy = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "sha256-NrQv++UTjdxWGCEHwkrY1rBm7P0odoKfOR46SZPYmuE=";
+      type = "gem";
+    };
+    version = "3.4.2";
+  };
+  ruby-libvirt = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0rnmbfhdz270fky0cm8w1i73gkrnlf3s1hdkm5yxjkdbvapwvjsd";
+      type = "gem";
+    };
+    version = "0.8.0";
+  };
+  vagrant-libvirt = {
+    dependencies = ["fog-core" "fog-libvirt" "nokogiri" "rexml" "xml-simple" "diffy"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "sha256-NMiRjrVQo2Ui9nOJwpDmNJUk+95gsT85pwFMIiw3bwQ=";
+      type = "gem";
+    };
+    version = "0.12.2";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/vagrant/unofficial-installation-nowarn.patch b/nixpkgs/pkgs/development/tools/vagrant/unofficial-installation-nowarn.patch
new file mode 100644
index 000000000000..0ea8b51ef527
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/vagrant/unofficial-installation-nowarn.patch
@@ -0,0 +1,16 @@
+diff --git a/bin/vagrant b/bin/vagrant
+index 7ca30b391..d3f4ea61a 100755
+--- a/bin/vagrant
++++ b/bin/vagrant
+@@ -221,11 +221,6 @@ begin
+       end
+     end
+ 
+-    if !Vagrant.in_installer? && !Vagrant.very_quiet?
+-      # If we're not in the installer, warn.
+-      env.ui.warn(I18n.t("vagrant.general.not_in_installer") + "\n", prefix: false)
+-    end
+-
+     # Acceptable experimental flag values include:
+     #
+     # Unset  - Disables experimental features
diff --git a/nixpkgs/pkgs/development/tools/vagrant/use-system-bundler-version.patch b/nixpkgs/pkgs/development/tools/vagrant/use-system-bundler-version.patch
new file mode 100644
index 000000000000..8262220140a6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/vagrant/use-system-bundler-version.patch
@@ -0,0 +1,13 @@
+diff --git a/lib/vagrant/bundler.rb b/lib/vagrant/bundler.rb
+index 336ac1e05..1bfd84c0d 100644
+--- a/lib/vagrant/bundler.rb
++++ b/lib/vagrant/bundler.rb
+@@ -470,7 +470,7 @@ module Vagrant
+       source_list = {}
+       system_plugins = plugins.map do |plugin_name, plugin_info|
+         plugin_name if plugin_info["system"]
+-      end.compact
++      end.compact << "bundler"
+       installer_set = VagrantSet.new(:both)
+       installer_set.system_plugins = system_plugins
+ 
diff --git a/nixpkgs/pkgs/development/tools/vagrant/vagrant-libvirt.json.in b/nixpkgs/pkgs/development/tools/vagrant/vagrant-libvirt.json.in
new file mode 100644
index 000000000000..22060e1c2db7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/vagrant/vagrant-libvirt.json.in
@@ -0,0 +1,9 @@
+{
+  "vagrant-libvirt": {
+    "ruby_version":"@ruby_version@",
+    "vagrant_version":"@vagrant_version@",
+    "gem_version":"",
+    "require":"",
+    "sources":[]
+  }
+}
diff --git a/nixpkgs/pkgs/development/tools/vala-lint/default.nix b/nixpkgs/pkgs/development/tools/vala-lint/default.nix
new file mode 100644
index 000000000000..b3f4987146b8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/vala-lint/default.nix
@@ -0,0 +1,67 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, glib
+, json-glib
+, meson
+, ninja
+, pantheon
+, pkg-config
+, vala
+, gettext
+, wrapGAppsHook
+, unstableGitUpdater
+}:
+
+stdenv.mkDerivation rec {
+  pname = "vala-lint";
+  version = "unstable-2023-12-05";
+
+  src = fetchFromGitHub {
+    owner = "vala-lang";
+    repo = "vala-lint";
+    rev = "8ae2bb65fe66458263d94711ae4ddd978faece00";
+    sha256 = "sha256-FZV726ZeNEX4ulEh+IIzwZqpnVRr7IeZb47FV1C7YjU=";
+  };
+
+  nativeBuildInputs = [
+    gettext
+    meson
+    ninja
+    pkg-config
+    vala
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    glib
+    json-glib
+  ];
+
+  postPatch = ''
+    # https://github.com/vala-lang/vala-lint/issues/181
+    substituteInPlace test/meson.build \
+      --replace "test('auto-fix', auto_fix_test, env: test_envars)" ""
+  '';
+
+  doCheck = true;
+
+  passthru = {
+    updateScript = unstableGitUpdater {
+      url = "https://github.com/vala-lang/vala-lint.git";
+    };
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/vala-lang/vala-lint";
+    description = "Check Vala code files for code-style errors";
+    longDescription = ''
+      Small command line tool and library for checking Vala code files for code-style errors.
+      Based on the elementary Code-Style guidelines.
+    '';
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = teams.pantheon.members;
+    mainProgram = "io.elementary.vala-lint";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/vcstool/default.nix b/nixpkgs/pkgs/development/tools/vcstool/default.nix
new file mode 100644
index 000000000000..0350c7296fde
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/vcstool/default.nix
@@ -0,0 +1,27 @@
+{ lib, python3Packages, fetchPypi
+, git, breezy, subversion }:
+
+with python3Packages;
+
+buildPythonApplication rec {
+  pname = "vcstool";
+  version = "0.3.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "04b3a963e15386660f139e5b95d293e43e3cb414e3b13e14ee36f5223032ee2c";
+  };
+
+  propagatedBuildInputs = [ pyyaml setuptools ];
+
+  makeWrapperArgs = ["--prefix" "PATH" ":" (lib.makeBinPath [ git breezy subversion ])];
+
+  doCheck = false; # requires network
+
+  meta = with lib; {
+    description = "Provides a command line tool to invoke vcs commands on multiple repositories";
+    homepage = "https://github.com/dirk-thomas/vcstool";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ sivteck ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/vendir/default.nix b/nixpkgs/pkgs/development/tools/vendir/default.nix
new file mode 100644
index 000000000000..62f30354e68b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/vendir/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "vendir";
+  version = "0.39.0";
+
+  src = fetchFromGitHub {
+    owner = "vmware-tanzu";
+    repo = "carvel-vendir";
+    rev = "v${version}";
+    sha256 = "sha256-m8dxYq3RcfWFBxja2E3MUqYAl1CYpkrBWPeMIC/7Sgg=";
+  };
+
+  vendorHash = null;
+
+  subPackages = [ "cmd/vendir" ];
+
+  meta = with lib; {
+    description = "CLI tool to vendor portions of git repos, github releases, helm charts, docker image contents, etc. declaratively";
+    homepage = "https://carvel.dev/vendir/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ russell ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/viceroy/default.nix b/nixpkgs/pkgs/development/tools/viceroy/default.nix
new file mode 100644
index 000000000000..2f3bfbe8c2c8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/viceroy/default.nix
@@ -0,0 +1,29 @@
+{ rustPlatform, fetchFromGitHub, lib, stdenv, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "viceroy";
+  version = "0.9.3";
+
+  src = fetchFromGitHub {
+    owner = "fastly";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-LOm4d6SV5rlb7NovhSp7V0JIaOfHIZOqeIcpIvTsZsA=";
+  };
+
+  buildInputs = lib.optional stdenv.isDarwin Security;
+
+  cargoHash = "sha256-Pz+jA4uC/40mj5Jn/lB+XcoN/QSD23iLwsEowTUI0pg=";
+
+  cargoTestFlags = [
+    "--package viceroy-lib"
+  ];
+
+  meta = with lib; {
+    description = "Viceroy provides local testing for developers working with Compute@Edge";
+    homepage = "https://github.com/fastly/Viceroy";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ ereslibre shyim ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/vim-vint/default.nix b/nixpkgs/pkgs/development/tools/vim-vint/default.nix
new file mode 100644
index 000000000000..d5f37bdb2bbc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/vim-vint/default.nix
@@ -0,0 +1,34 @@
+{ lib, python3Packages, fetchPypi }:
+
+with python3Packages;
+
+buildPythonApplication rec {
+  pname = "vim-vint";
+  version = "0.3.21";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "15qdh8fby9xgfjxidcfv1xmrqqrxxapky7zmyn46qx1abhp9piax";
+  };
+
+  # For python 3.5 > version > 2.7 , a nested dependency (pythonPackages.hypothesis) fails.
+  disabled = ! pythonAtLeast "3.5";
+
+  nativeCheckInputs = [ pytest pytest-cov ];
+  propagatedBuildInputs = [ ansicolor chardet pyyaml setuptools ];
+
+  # Unpin test dependency versions. This is fixed in master but not yet released.
+  preCheck = ''
+    sed -i 's/==.*//g' test-requirements.txt
+    sed -i 's/mock == 1.0.1/mock/g' setup.py
+  '';
+
+  meta = with lib; {
+    description = "Fast and Highly Extensible Vim script Language Lint implemented by Python";
+    homepage = "https://github.com/Kuniwak/vint";
+    license = licenses.mit;
+    mainProgram = "vint";
+    maintainers = with maintainers; [ andsild ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/vndr/default.nix b/nixpkgs/pkgs/development/tools/vndr/default.nix
new file mode 100644
index 000000000000..d4e665adc414
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/vndr/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "vndr-unstable";
+  version = "2020-07-28";
+  rev = "f12b881cb8f081a5058408a58f429b9014833fc6";
+
+  goPackagePath = "github.com/LK4D4/vndr";
+  excludedPackages = "test";
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "LK4D4";
+    repo = "vndr";
+    sha256 = "04za4x8p8qzwjlp4i0j0gsb4xx0x9f4yp3ab0b97r50pah1ac2g3";
+  };
+
+  meta = {
+    description = "Stupid golang vendoring tool, inspired by docker vendor script";
+    homepage = "https://github.com/LK4D4/vndr";
+    maintainers = with lib.maintainers; [ vdemeester rvolosatovs ];
+    license = lib.licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/volta/Cargo.lock b/nixpkgs/pkgs/development/tools/volta/Cargo.lock
new file mode 100644
index 000000000000..0925a8cc91fd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/volta/Cargo.lock
@@ -0,0 +1,1918 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "ahash"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47"
+dependencies = [
+ "getrandom",
+ "once_cell",
+ "version_check",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "0.7.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "android_system_properties"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d7ed72e1635e121ca3e79420540282af22da58be50de153d36f81ddc6b83aa9e"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "ansi_term"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "archive"
+version = "0.1.0"
+dependencies = [
+ "attohttpc",
+ "cfg-if 1.0.0",
+ "flate2",
+ "fs-utils",
+ "hyperx",
+ "progress-read",
+ "tar",
+ "tee",
+ "thiserror",
+ "verbatim",
+ "zip",
+]
+
+[[package]]
+name = "assert-json-diff"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50f1c3703dd33532d7f0ca049168930e9099ecac238e23cf932f3a69c42f06da"
+dependencies = [
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "attohttpc"
+version = "0.24.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b85f766c20e6ae766956f7a2fcc4e0931e79a7e1f48b29132b5d647021114914"
+dependencies = [
+ "flate2",
+ "http",
+ "log",
+ "rustls",
+ "rustls-native-certs",
+ "serde",
+ "serde_json",
+ "url",
+ "webpki",
+]
+
+[[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 = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e49efa51329a5fd37e7c79db4621af617cd4e3e5bc224939808d076077077bf"
+
+[[package]]
+name = "autocfg"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8aac770f1885fd7e387acedd76065302551364496e46b3dd00860b2f8359b9d"
+
+[[package]]
+name = "base64"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
+
+[[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",
+]
+
+[[package]]
+name = "block-padding"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d4dc3af3ee2e12f3e5d224e5e1e3d73668abbeb69e566d361f7d5563a4fdf09"
+dependencies = [
+ "byte-tools",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535"
+
+[[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.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a7c3dd8985a7111efc5c80b44e23ecdd8c007de8ade3b96595387e812b957cf5"
+
+[[package]]
+name = "bytes"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8"
+
+[[package]]
+name = "bzip2"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42b7c3cbf0fa9c1b82308d57191728ca0256cb821220f4e2fd410a72ade26e3b"
+dependencies = [
+ "bzip2-sys",
+ "libc",
+]
+
+[[package]]
+name = "bzip2-sys"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6584aa36f5ad4c9247f5323b0a42f37802b37a836f0ad87084d7a33961abe25f"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "cc"
+version = "1.0.73"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11"
+
+[[package]]
+name = "cfg-if"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "chain-map"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc076b92c3d763b90697600bf9833c204b517ff911f64dcfb58221b0663d3ee9"
+
+[[package]]
+name = "chrono"
+version = "0.4.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16b0a3d9ed01224b22057780a37bb8c5dbfe1be8ba48678e7bf57ec4b385411f"
+dependencies = [
+ "iana-time-zone",
+ "js-sys",
+ "num-integer",
+ "num-traits",
+ "time",
+ "wasm-bindgen",
+ "winapi",
+]
+
+[[package]]
+name = "ci_info"
+version = "0.14.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62a62f39080c8c83e899dff6abd46c4fac05c1cf8dafece96ad8238e79addbf8"
+dependencies = [
+ "envmnt",
+]
+
+[[package]]
+name = "clap"
+version = "2.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c"
+dependencies = [
+ "ansi_term",
+ "atty",
+ "bitflags",
+ "strsim",
+ "textwrap 0.11.0",
+ "unicode-width",
+ "vec_map",
+]
+
+[[package]]
+name = "cmdline_words_parser"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75d8078f03daf673d8bd34a1ef48c680ea4a895204882ce5f0ccfb2487b2bd29"
+
+[[package]]
+name = "colored"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b3616f750b84d8f0de8a58bda93e08e2a81ad3f523089b05f1dffecab48c6cbd"
+dependencies = [
+ "atty",
+ "lazy_static",
+ "winapi",
+]
+
+[[package]]
+name = "console"
+version = "0.15.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3d79fbe8970a77e3e34151cc13d3b3e248aa0faaecb9f6091fa07ebefe5ad60"
+dependencies = [
+ "encode_unicode",
+ "lazy_static",
+ "libc",
+ "unicode-width",
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "core-foundation"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc"
+
+[[package]]
+name = "crc32fast"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba125de2af0df55319f41944744ad91c71113bf74a4646efff39afe1f6842db1"
+dependencies = [
+ "cfg-if 0.1.10",
+]
+
+[[package]]
+name = "ctrlc"
+version = "3.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1631ca6e3c59112501a9d87fd86f21591ff77acd31331e8a73f8d80a65bbdd71"
+dependencies = [
+ "nix",
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "detect-indent"
+version = "0.1.0"
+source = "git+https://github.com/stefanpenner/detect-indent-rs?branch=master#f645bcc81bfb1f9745c4a4dec7c7f6faf3f84ec5"
+dependencies = [
+ "lazy_static",
+ "regex",
+]
+
+[[package]]
+name = "digest"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05f47366984d3ad862010e22c7ce81a7dbcaebbdfb37241a620f8b6596ee135c"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "dirs"
+version = "4.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059"
+dependencies = [
+ "dirs-sys",
+]
+
+[[package]]
+name = "dirs-sys"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "03d86534ed367a67548dc68113a0f5db55432fdfbb6e6f9d77704397d95d5780"
+dependencies = [
+ "libc",
+ "redox_users",
+ "winapi",
+]
+
+[[package]]
+name = "dunce"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0bd4b30a6560bbd9b4620f4de34c3f14f60848e58a9b7216801afcb4c7b31c3c"
+
+[[package]]
+name = "either"
+version = "1.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457"
+
+[[package]]
+name = "encode_unicode"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90b2c9496c001e8cb61827acdefad780795c42264c137744cae6f7d9e3450abd"
+
+[[package]]
+name = "envmnt"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9fbb2fcaad9e6c9e3388dfcc1b44ae5508ae864b7af36f163a8a7c1a48796eee"
+dependencies = [
+ "fsio",
+ "indexmap",
+]
+
+[[package]]
+name = "envoy"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb34b6240ca977e7ab7dff6f060f9cb9a8f92c7745fe9e292b9443944d1aa768"
+
+[[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.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "779d043b6a0b90cc4c0ed7ee380a6504394cee7efd7db050e3774eee387324b2"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "filetime"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0408e2626025178a6a7f7ffc05a25bc47103229f19c113755de7bf63816290c"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "redox_syscall",
+ "winapi",
+]
+
+[[package]]
+name = "flate2"
+version = "1.0.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f82b0f4c27ad9f8bfd1f3208d882da2b09c301bc1c828fd3a00d0216d2fbbff6"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3"
+
+[[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 = "fs-utils"
+version = "0.1.0"
+
+[[package]]
+name = "fs2"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "fsio"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09e87827efaf94c7a44b562ff57de06930712fe21b530c3797cdede26e6377eb"
+dependencies = [
+ "dunce",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.12.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd"
+dependencies = [
+ "typenum",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "hamcrest2"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49f837c62de05dc9cc71ff6486cd85de8856a330395ae338a04bfcefe5e91075"
+dependencies = [
+ "num",
+ "regex",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+dependencies = [
+ "ahash",
+]
+
+[[package]]
+name = "heck"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "20564e78d53d2bb135c343b3f47714a56af2061f1c928fdb541dc7b9fdd94205"
+dependencies = [
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "http"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399"
+dependencies = [
+ "bytes",
+ "fnv",
+ "itoa 1.0.1",
+]
+
+[[package]]
+name = "httparse"
+version = "1.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e8734b0cfd3bc3e101ec59100e101c2eecd19282202e87808b3037b442777a83"
+
+[[package]]
+name = "httpdate"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "494b4d60369511e7dea41cf646832512a94e542f68bb9c49e54518e0f468eb47"
+
+[[package]]
+name = "hyperx"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5617e92fc2f2501c3e2bc6ce547cad841adba2bae5b921c7e52510beca6d084c"
+dependencies = [
+ "base64",
+ "bytes",
+ "http",
+ "httpdate",
+ "language-tags",
+ "mime",
+ "percent-encoding",
+ "unicase",
+]
+
+[[package]]
+name = "iana-time-zone"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef5528d9c2817db4e10cc78f8d4c8228906e5854f389ff6b076cee3572a09d35"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys",
+ "js-sys",
+ "wasm-bindgen",
+ "winapi",
+]
+
+[[package]]
+name = "idna"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "02e2673c30ee86b5b96a9cb52ad15718aa1f966f5ab9ad54a8b95d5ca33120a9"
+dependencies = [
+ "matches",
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399"
+dependencies = [
+ "autocfg 1.0.0",
+ "hashbrown",
+]
+
+[[package]]
+name = "indicatif"
+version = "0.17.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cef509aa9bc73864d6756f0d34d35504af3cf0844373afe9b8669a5b8005a729"
+dependencies = [
+ "console",
+ "number_prefix",
+ "portable-atomic",
+ "unicode-width",
+]
+
+[[package]]
+name = "instant"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "itoa"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "501266b7edd0174f8530248f87f99c88fbe60ca4ef3dd486835b8d8d53136f7f"
+
+[[package]]
+name = "itoa"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35"
+
+[[package]]
+name = "js-sys"
+version = "0.3.59"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "258451ab10b34f8af53416d1fdab72c22e805f0c92a1136d59470ec0b11138b2"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "language-tags"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4345964bb142484797b161f473a503a434de77149dd8c7427788c6e13379388"
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "lazycell"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
+
+[[package]]
+name = "libc"
+version = "0.2.138"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db6d7e329c562c5dfab7a46a2afabc8b987ab9a4834c9d1ca04dc54c1546cef8"
+
+[[package]]
+name = "log"
+version = "0.4.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "maplit"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08cbb6b4fef96b6d77bfc40ec491b1690c779e77b05cd9f07f787ed376fd4c43"
+
+[[package]]
+name = "matches"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08"
+
+[[package]]
+name = "maybe-uninit"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00"
+
+[[package]]
+name = "memchr"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a"
+
+[[package]]
+name = "mime"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3e27ca21f40a310bd06d9031785f4801710d566c184a6e15bad4f1d9b65f9425"
+dependencies = [
+ "unicase",
+]
+
+[[package]]
+name = "miniz_oxide"
+version = "0.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96590ba8f175222643a85693f33d26e9c8a015f599c216509b1a6894af675d34"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "mockito"
+version = "0.31.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80f9fece9bd97ab74339fe19f4bcaf52b76dcc18e5364c7977c1838f76b38de9"
+dependencies = [
+ "assert-json-diff",
+ "colored",
+ "httparse",
+ "lazy_static",
+ "log",
+ "rand",
+ "regex",
+ "serde_json",
+ "serde_urlencoded",
+ "similar",
+]
+
+[[package]]
+name = "msdos_time"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aad9dfe950c057b1bfe9c1f2aa51583a8468ef2a5baba2ebbe06d775efeb7729"
+dependencies = [
+ "time",
+ "winapi",
+]
+
+[[package]]
+name = "nix"
+version = "0.26.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46a58d1d356c6597d08cde02c2f09d785b09e28711837b1ed667dc652c08a694"
+dependencies = [
+ "bitflags",
+ "cfg-if 1.0.0",
+ "libc",
+ "static_assertions",
+]
+
+[[package]]
+name = "num"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf4825417e1e1406b3782a8ce92f4d53f26ec055e3622e1881ca8e9f5f9e08db"
+dependencies = [
+ "num-bigint",
+ "num-complex",
+ "num-integer",
+ "num-iter",
+ "num-rational",
+ "num-traits",
+]
+
+[[package]]
+name = "num-bigint"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9c3f34cdd24f334cb265d9bf8bfa8a241920d026916785747a92f0e55541a1a"
+dependencies = [
+ "autocfg 0.1.4",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-complex"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fcb0cf31fb3ff77e6d2a6ebd6800df7fdcd106f2ad89113c9130bcd07f93dffc"
+dependencies = [
+ "autocfg 0.1.4",
+ "num-traits",
+]
+
+[[package]]
+name = "num-integer"
+version = "0.1.41"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b85e541ef8255f6cf42bbfe4ef361305c6c135d10919ecc26126c4e5ae94bc09"
+dependencies = [
+ "autocfg 0.1.4",
+ "num-traits",
+]
+
+[[package]]
+name = "num-iter"
+version = "0.1.39"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76bd5272412d173d6bf9afdf98db8612bbabc9a7a830b7bfc9c188911716132e"
+dependencies = [
+ "autocfg 0.1.4",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-rational"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2885278d5fe2adc2f75ced642d52d879bffaceb5a2e0b1d4309ffdfb239b454"
+dependencies = [
+ "autocfg 0.1.4",
+ "num-bigint",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ba9a427cfca2be13aa6f6403b0b7e7368fe982bfa16fccc450ce74c46cd9b32"
+dependencies = [
+ "autocfg 0.1.4",
+]
+
+[[package]]
+name = "number_prefix"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3"
+
+[[package]]
+name = "once_cell"
+version = "1.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f61fba1741ea2b3d6a1e3178721804bb716a68a6aeba1149b5d52e3d464ea66"
+
+[[package]]
+name = "opaque-debug"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93f5bb2e8e8dec81642920ccff6b61f1eb94fa3020c5a325c9851ff604152409"
+
+[[package]]
+name = "openssl-probe"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
+
+[[package]]
+name = "os_info"
+version = "3.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4750134fb6a5d49afc80777394ad5d95b04bc12068c6abb92fae8f43817270f"
+dependencies = [
+ "log",
+ "serde",
+ "winapi",
+]
+
+[[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.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "933085deae3f32071f135d799d75667b63c8dc1f4537159756e3d4ceab41868c"
+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.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "63120576c4efd69615b5537d3d052257328a4ca82876771d6944424ccfd9f646"
+dependencies = [
+ "pest",
+ "pest_meta",
+ "proc-macro2 0.4.30",
+ "quote 0.6.12",
+ "syn 0.15.36",
+]
+
+[[package]]
+name = "pest_meta"
+version = "2.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f249ea6de7c7b7aba92b4ff4376a994c6dbd98fd2166c89d5c4947397ecb574d"
+dependencies = [
+ "maplit",
+ "pest",
+ "sha-1",
+]
+
+[[package]]
+name = "podio"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "780fb4b6698bbf9cf2444ea5d22411cef2953f0824b98f33cf454ec5615645bd"
+
+[[package]]
+name = "portable-atomic"
+version = "0.3.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "15eb2c6e362923af47e13c23ca5afb859e83d54452c55b0b9ac763b8f7c1ac16"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "237a5ed80e274dbc66f86bd59c1e25edc039660be53194b5fe0a482e0f2612ea"
+
+[[package]]
+name = "proc-macro2"
+version = "0.4.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759"
+dependencies = [
+ "unicode-xid",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.47"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ea3d908b0e36316caf9e9e2c4625cdde190a7e6f440d794667ed17a1855e725"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "progress-read"
+version = "0.1.0"
+
+[[package]]
+name = "quote"
+version = "0.6.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "faf4799c5d274f3868a4aae320a0a182cbd2baee377b378f080e16a23e9d80db"
+dependencies = [
+ "proc-macro2 0.4.30",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "053a8c8bcc71fcce321828dc897a98ab9760bef03a4fc36693c231e5b3216cfe"
+dependencies = [
+ "proc-macro2 1.0.47",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e7573632e6454cf6b99d7aac4ccca54be06da05aca2ef7423d22d27d4d4bcd8"
+dependencies = [
+ "libc",
+ "rand_chacha",
+ "rand_core",
+ "rand_hc",
+]
+
+[[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",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "rand_hc"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d51e9f596de227fda2ea6c84607f5558e196eeaf43c986b724ba4fb8fdf497e7"
+dependencies = [
+ "rand_core",
+]
+
+[[package]]
+name = "readext"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abdc58f5f18bcf347b55cebb34ed4618b0feff9a9223160f5902adbc1f6a72a6"
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "redox_users"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "528532f3d801c87aec9def2add9ca802fe569e44a544afe633765267840abe64"
+dependencies = [
+ "getrandom",
+ "redox_syscall",
+]
+
+[[package]]
+name = "regex"
+version = "1.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733"
+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.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4a83fa3702a688b9359eccba92d153ac33fd2e8462f9e0e3fdf155239ea7792e"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "retry"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9166d72162de3575f950507683fac47e30f6f2c3836b71b7fbc61aa517c9c5f4"
+dependencies = [
+ "rand",
+]
+
+[[package]]
+name = "ring"
+version = "0.16.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc"
+dependencies = [
+ "cc",
+ "libc",
+ "once_cell",
+ "spin",
+ "untrusted",
+ "web-sys",
+ "winapi",
+]
+
+[[package]]
+name = "rustls"
+version = "0.20.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5aab8ee6c7097ed6057f43c187a62418d0c05a4bd5f18b3571db50ee0f9ce033"
+dependencies = [
+ "log",
+ "ring",
+ "sct",
+ "webpki",
+]
+
+[[package]]
+name = "rustls-native-certs"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0167bac7a9f490495f3c33013e7722b53cb087ecbe082fb0c6387c96f634ea50"
+dependencies = [
+ "openssl-probe",
+ "rustls-pemfile",
+ "schannel",
+ "security-framework",
+]
+
+[[package]]
+name = "rustls-pemfile"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0864aeff53f8c05aa08d86e5ef839d3dfcf07aeba2db32f12db0ef716e87bd55"
+dependencies = [
+ "base64",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c9613b5a66ab9ba26415184cfc41156594925a9cf3a2057e57f31ff145f6568"
+
+[[package]]
+name = "same-file"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "585e8ddcedc187886a30fa705c47985c3fa88d06624095856b36ca0b82ff4421"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "schannel"
+version = "0.1.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88d6731146462ea25d9244b2ed5fd1d716d25c52e4d54aa4fb0f3c4e9854dbe2"
+dependencies = [
+ "lazy_static",
+ "windows-sys 0.36.1",
+]
+
+[[package]]
+name = "sct"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "security-framework"
+version = "2.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2bc1bb97804af6631813c55739f771071e0f2ed33ee20b68c86ec505d906356c"
+dependencies = [
+ "bitflags",
+ "core-foundation",
+ "core-foundation-sys",
+ "libc",
+ "security-framework-sys",
+]
+
+[[package]]
+name = "security-framework-sys"
+version = "2.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0160a13a177a45bfb43ce71c01580998474f556ad854dcbca936dd2841a5c556"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "semver"
+version = "0.9.0"
+source = "git+https://github.com/mikrostew/semver?branch=new-parser#7583eb352dc181ccd09978fd2b16461c1b1669c1"
+dependencies = [
+ "semver-parser",
+]
+
+[[package]]
+name = "semver-parser"
+version = "0.10.0"
+source = "git+https://github.com/mikrostew/semver-parser?branch=rewrite#f5c74268a09eef16a289a667ca7b4925e690fe13"
+dependencies = [
+ "pest",
+ "pest_derive",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.152"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.152"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e"
+dependencies = [
+ "proc-macro2 1.0.47",
+ "quote 1.0.2",
+ "syn 1.0.105",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.91"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "877c235533714907a8c2464236f5c4b2a17262ef1bd71f38f35ea592c8da6883"
+dependencies = [
+ "indexmap",
+ "itoa 1.0.1",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_urlencoded"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "edfa57a7f8d9c1d260a549e7224100f6c43d43f9103e06dd8b4095a9b2b43ce9"
+dependencies = [
+ "form_urlencoded",
+ "itoa 0.4.4",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "sha-1"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23962131a91661d643c98940b20fcaffe62d776a823247be80a48fcb8b6fce68"
+dependencies = [
+ "block-buffer",
+ "digest",
+ "fake-simd",
+ "opaque-debug",
+]
+
+[[package]]
+name = "similar"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e24979f63a11545f5f2c60141afe249d4f19f84581ea2138065e400941d83d3"
+
+[[package]]
+name = "smallvec"
+version = "0.6.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b97fcaeba89edba30f044a10c6a3cc39df9c3f17d7cd829dd1446cab35f890e0"
+dependencies = [
+ "maybe-uninit",
+]
+
+[[package]]
+name = "smawk"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f67ad224767faa3c7d8b6d91985b78e70a1324408abcb1cfcc2be4c06bc06043"
+
+[[package]]
+name = "spin"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
+
+[[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.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
+
+[[package]]
+name = "structopt"
+version = "0.2.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16c2cdbf9cc375f15d1b4141bc48aeef444806655cd0e904207edc8d68d86ed7"
+dependencies = [
+ "clap",
+ "structopt-derive",
+]
+
+[[package]]
+name = "structopt-derive"
+version = "0.2.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53010261a84b37689f9ed7d395165029f9cc7abb9f56bbfe86bee2597ed25107"
+dependencies = [
+ "heck",
+ "proc-macro2 0.4.30",
+ "quote 0.6.12",
+ "syn 0.15.36",
+]
+
+[[package]]
+name = "syn"
+version = "0.15.36"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b4f551a91e2e3848aeef8751d0d4eec9489b6474c720fd4c55958d8d31a430c"
+dependencies = [
+ "proc-macro2 0.4.30",
+ "quote 0.6.12",
+ "unicode-xid",
+]
+
+[[package]]
+name = "syn"
+version = "1.0.105"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "60b9b43d45702de4c839cb9b51d9f529c5dd26a4aff255b42b1ebc03e88ee908"
+dependencies = [
+ "proc-macro2 1.0.47",
+ "quote 1.0.2",
+ "unicode-ident",
+]
+
+[[package]]
+name = "tar"
+version = "0.4.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b55807c0344e1e6c04d7c965f5289c39a8d94ae23ed5c0b57aabac549f871c6"
+dependencies = [
+ "filetime",
+ "libc",
+ "xattr",
+]
+
+[[package]]
+name = "tee"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37c12559dba7383625faaff75be24becf35bfc885044375bcab931111799a3da"
+
+[[package]]
+name = "tempfile"
+version = "3.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4"
+dependencies = [
+ "cfg-if 1.0.0",
+ "fastrand",
+ "libc",
+ "redox_syscall",
+ "remove_dir_all",
+ "winapi",
+]
+
+[[package]]
+name = "term_size"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e4129646ca0ed8f45d09b929036bafad5377103edd06e50bf574b353d2b08d9"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "test-support"
+version = "0.1.0"
+dependencies = [
+ "archive",
+ "hamcrest2",
+ "serde_json",
+ "thiserror",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d"
+dependencies = [
+ "smawk",
+ "unicode-linebreak",
+ "unicode-width",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a9cd18aa97d5c45c6603caea1da6628790b37f7a34b6ca89522331c5180fed0"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f"
+dependencies = [
+ "proc-macro2 1.0.47",
+ "quote 1.0.2",
+ "syn 1.0.105",
+]
+
+[[package]]
+name = "time"
+version = "0.1.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255"
+dependencies = [
+ "libc",
+ "wasi",
+ "winapi",
+]
+
+[[package]]
+name = "typenum"
+version = "1.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b63708a265f51345575b27fe43f9500ad611579e764c79edbc2037b1121959ec"
+
+[[package]]
+name = "ucd-trie"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "71a9c5b1fe77426cf144cc30e49e955270f5086e31a6441dfa8b32efc09b9d77"
+
+[[package]]
+name = "unicase"
+version = "2.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6"
+dependencies = [
+ "version_check",
+]
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5"
+dependencies = [
+ "matches",
+]
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3"
+
+[[package]]
+name = "unicode-linebreak"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c5faade31a542b8b35855fff6e8def199853b2da8da256da52f52f1316ee3137"
+dependencies = [
+ "hashbrown",
+ "regex",
+]
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "141339a08b982d942be2ca06ff8b076563cbe223d1befd5450716790d44e2426"
+dependencies = [
+ "smallvec",
+]
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1967f4cdfc355b37fd76d2a954fb2ed3871034eb4f26d60537d88795cfc332a9"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+
+[[package]]
+name = "unicode-xid"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc"
+
+[[package]]
+name = "untrusted"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
+
+[[package]]
+name = "url"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "22fe195a4f217c25b25cb5058ced57059824a678474874038dc88d211bf508d3"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "percent-encoding",
+]
+
+[[package]]
+name = "validate-npm-package-name"
+version = "0.1.0"
+dependencies = [
+ "lazy_static",
+ "percent-encoding",
+ "regex",
+]
+
+[[package]]
+name = "vec_map"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a"
+
+[[package]]
+name = "verbatim"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbad0679079b451226e954019b2efac46bafa8f7b1418b953861e864072a97c6"
+
+[[package]]
+name = "version_check"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "078775d0255232fb988e6fccf26ddc9d1ac274299aaedcedce21c6f72cc533ce"
+
+[[package]]
+name = "volta"
+version = "1.1.1"
+dependencies = [
+ "atty",
+ "cfg-if 1.0.0",
+ "ci_info",
+ "dirs",
+ "envoy",
+ "hamcrest2",
+ "hyperx",
+ "lazy_static",
+ "log",
+ "mockito",
+ "semver",
+ "serde",
+ "serde_json",
+ "structopt",
+ "test-support",
+ "textwrap 0.16.0",
+ "volta-core",
+ "volta-migrate",
+ "which",
+ "winreg",
+]
+
+[[package]]
+name = "volta-core"
+version = "0.1.0"
+dependencies = [
+ "archive",
+ "attohttpc",
+ "atty",
+ "cfg-if 1.0.0",
+ "chain-map",
+ "chrono",
+ "ci_info",
+ "cmdline_words_parser",
+ "console",
+ "ctrlc",
+ "detect-indent",
+ "dirs",
+ "dunce",
+ "envoy",
+ "fs-utils",
+ "fs2",
+ "hyperx",
+ "indexmap",
+ "indicatif",
+ "lazy_static",
+ "lazycell",
+ "log",
+ "mockito",
+ "once_cell",
+ "os_info",
+ "readext",
+ "regex",
+ "retry",
+ "semver",
+ "serde",
+ "serde_json",
+ "tempfile",
+ "term_size",
+ "textwrap 0.16.0",
+ "validate-npm-package-name",
+ "volta-layout",
+ "walkdir",
+ "winreg",
+]
+
+[[package]]
+name = "volta-layout"
+version = "0.1.1"
+dependencies = [
+ "volta-layout-macro",
+]
+
+[[package]]
+name = "volta-layout-macro"
+version = "0.1.0"
+dependencies = [
+ "proc-macro2 1.0.47",
+ "quote 1.0.2",
+ "syn 1.0.105",
+]
+
+[[package]]
+name = "volta-migrate"
+version = "0.1.0"
+dependencies = [
+ "log",
+ "semver",
+ "serde",
+ "serde_json",
+ "tempfile",
+ "volta-core",
+ "volta-layout",
+ "walkdir",
+]
+
+[[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.10.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.82"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc7652e3f6c4706c8d9cd54832c4a4ccb9b5336e2c3bd154d5cccfbf1c1f5f7d"
+dependencies = [
+ "cfg-if 1.0.0",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.82"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "662cd44805586bd52971b9586b1df85cdbbd9112e4ef4d8f41559c334dc6ac3f"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2 1.0.47",
+ "quote 1.0.2",
+ "syn 1.0.105",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.82"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b260f13d3012071dfb1512849c033b1925038373aea48ced3012c09df952c602"
+dependencies = [
+ "quote 1.0.2",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.82"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5be8e654bdd9b79216c2929ab90721aa82faf65c48cdf08bdc4e7f51357b80da"
+dependencies = [
+ "proc-macro2 1.0.47",
+ "quote 1.0.2",
+ "syn 1.0.105",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.82"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6598dd0bd3c7d51095ff6531a5b23e02acdc81804e30d8f07afb77b7215a140a"
+
+[[package]]
+name = "web-sys"
+version = "0.3.59"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed055ab27f941423197eb86b2035720b1a3ce40504df082cac2ecc6ed73335a1"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "webpki"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "which"
+version = "4.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2441c784c52b289a054b7201fc93253e288f094e2f4be9058343127c4226a269"
+dependencies = [
+ "either",
+ "libc",
+ "once_cell",
+]
+
+[[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"
+
+[[package]]
+name = "windows-sys"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2"
+dependencies = [
+ "windows_aarch64_msvc 0.36.1",
+ "windows_i686_gnu 0.36.1",
+ "windows_i686_msvc 0.36.1",
+ "windows_x86_64_gnu 0.36.1",
+ "windows_x86_64_msvc 0.36.1",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc 0.42.0",
+ "windows_i686_gnu 0.42.0",
+ "windows_i686_msvc 0.42.0",
+ "windows_x86_64_gnu 0.42.0",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc 0.42.0",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41d2aa71f6f0cbe00ae5167d90ef3cfe66527d6f613ca78ac8024c3ccab9a19e"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd0f252f5a35cac83d6311b2e795981f5ee6e67eb1f9a7f64eb4500fbc4dcdb4"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fbeae19f6716841636c28d695375df17562ca208b2b7d0dc47635a50ae6c5de7"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "84c12f65daa39dd2babe6e442988fc329d6243fdce47d7d2d155b8d874862246"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf7b1b21b5362cbc318f686150e5bcea75ecedc74dd157d874d754a2ca44b0ed"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09d525d2ba30eeb3297665bd434a54297e4170c7f1a44cad4ef58095b4cd2028"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f40009d85759725a34da6d89a94e63d7bdc50a862acf0dbc7c8e488f1edcb6f5"
+
+[[package]]
+name = "winreg"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "xattr"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "244c3741f4240ef46274860397c7c74e50eb23624996930e484c16679633a54c"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "zip"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7341988e4535c60882d5e5f0b7ad0a9a56b080ade8bdb5527cb512f7b2180e0"
+dependencies = [
+ "bzip2",
+ "flate2",
+ "msdos_time",
+ "podio",
+ "time",
+]
diff --git a/nixpkgs/pkgs/development/tools/volta/default.nix b/nixpkgs/pkgs/development/tools/volta/default.nix
new file mode 100644
index 000000000000..b61347c05f2e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/volta/default.nix
@@ -0,0 +1,58 @@
+{
+  lib,
+  rustPlatform,
+  libiconv,
+  stdenv,
+  installShellFiles,
+  darwin,
+  fetchFromGitHub,
+}:
+rustPlatform.buildRustPackage rec {
+  pname = "volta";
+  version = "1.1.1";
+
+  src = fetchFromGitHub {
+    owner = "volta-cli";
+    repo = "volta";
+    rev = "v${version}";
+    hash = "sha256-+j3WRpunV+3YfZnyuKA/CsiKr+gOaP2NbmnyoGMN+Mg=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "detect-indent-0.1.0" = "sha256-qtPkPaBiyuT8GhpEFdU7IkAgKnCbTES0FB2CvNKWqic=";
+      "semver-0.9.0" = "sha256-nw1somkZe9Qi36vjfWlTcDqHAIbaJj72KBTfmucVxXs=";
+      "semver-parser-0.10.0" = "sha256-iTGnKSddsriF6JS6lvJNjp9aDzGtfjrHEiCijeie3uE=";
+    };
+  };
+
+  buildInputs = [ installShellFiles ]
+    ++ lib.optionals stdenv.isDarwin [ darwin.apple_sdk.frameworks.Security libiconv ];
+
+  HOME = "$TMPDIR";
+
+  postInstall = ''
+    installShellCompletion --cmd volta \
+      --bash <($out/bin/volta completions bash) \
+      --fish <($out/bin/volta completions fish) \
+      --zsh <($out/bin/volta completions zsh)
+  '';
+  meta = with lib; {
+    description = "The Hassle-Free JavaScript Tool Manager";
+    longDescription = ''
+      With Volta, you can select a Node engine once and then stop worrying
+      about it. You can switch between projects and stop having to manually
+      switch between Nodes. You can install npm package binaries in your
+      toolchain without having to periodically reinstall them or figure out why
+      they’ve stopped working.
+
+      Note: Volta cannot be used on NixOS out of the box because it downloads
+      Node binaries that assume shared libraries are in FHS standard locations.
+    '';
+    homepage = "https://volta.sh/";
+    changelog = "https://github.com/volta-cli/volta/blob/main/RELEASES.md";
+    license = with licenses; [ bsd2 ];
+    maintainers = with maintainers; [ fbrs ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/vsce/default.nix b/nixpkgs/pkgs/development/tools/vsce/default.nix
new file mode 100644
index 000000000000..5ba007818e3b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/vsce/default.nix
@@ -0,0 +1,49 @@
+{ lib
+, stdenv
+, buildNpmPackage
+, fetchFromGitHub
+, pkg-config
+, libsecret
+, darwin
+, python3
+, testers
+, vsce
+}:
+
+buildNpmPackage rec {
+  pname = "vsce";
+  version = "2.23.0";
+
+  src = fetchFromGitHub {
+    owner = "microsoft";
+    repo = "vscode-vsce";
+    rev = "v${version}";
+    hash = "sha256-2s8hG3HNDQnuwFXZX1mCTSbKCm4n7YAzhHDaWVYTyys=";
+  };
+
+  npmDepsHash = "sha256-1PVUDEecFW+lFmZOZUTlgeKsLwLK9O4vFHi6gOLjBfo=";
+
+  postPatch = ''
+    substituteInPlace package.json --replace '"version": "0.0.0"' '"version": "${version}"'
+  '';
+
+  nativeBuildInputs = [ pkg-config python3 ];
+
+  buildInputs = [ libsecret ]
+    ++ lib.optionals stdenv.isDarwin (with darwin.apple_sdk.frameworks; [ AppKit Security ]);
+
+  makeCacheWritable = true;
+  npmFlags = [ "--legacy-peer-deps" ];
+
+  passthru.tests.version = testers.testVersion {
+    package = vsce;
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/microsoft/vscode-vsce";
+    description = "Visual Studio Code Extension Manager";
+    maintainers = with maintainers; [ aaronjheng ];
+    license = licenses.mit;
+    mainProgram = "vsce";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/vulkan-validation-layers/default.nix b/nixpkgs/pkgs/development/tools/vulkan-validation-layers/default.nix
new file mode 100644
index 000000000000..1d0a39fb2b8b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/vulkan-validation-layers/default.nix
@@ -0,0 +1,85 @@
+{ lib
+, callPackage
+, stdenv
+, fetchFromGitHub
+, cmake
+, pkg-config
+, jq
+, glslang
+, libffi
+, libX11
+, libXau
+, libxcb
+, libXdmcp
+, libXrandr
+, spirv-headers
+, vulkan-headers
+, vulkan-utility-libraries
+, wayland
+}:
+
+let
+  robin-hood-hashing = callPackage ./robin-hood-hashing.nix {};
+in
+stdenv.mkDerivation rec {
+  pname = "vulkan-validation-layers";
+  version = "1.3.275.0";
+
+  src = fetchFromGitHub {
+    owner = "KhronosGroup";
+    repo = "Vulkan-ValidationLayers";
+    rev = "vulkan-sdk-${version}";
+    hash = "sha256-hJx8gn0zCN3+DhO6niylZJXPHgQ+VhQV5tL8qAeRaUg=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    jq
+  ];
+
+  buildInputs = [
+    libX11
+    libXau
+    libXdmcp
+    libXrandr
+    libffi
+    libxcb
+    vulkan-headers
+    vulkan-utility-libraries
+    wayland
+  ];
+
+  cmakeFlags = [
+    "-DGLSLANG_INSTALL_DIR=${glslang}"
+    "-DSPIRV_HEADERS_INSTALL_DIR=${spirv-headers}"
+    "-DROBIN_HOOD_HASHING_INSTALL_DIR=${robin-hood-hashing}"
+    "-DBUILD_LAYER_SUPPORT_FILES=ON"
+    "-DPKG_CONFIG_EXECUTABLE=${pkg-config}/bin/pkg-config"
+    # Hide dev warnings that are useless for packaging
+    "-Wno-dev"
+  ];
+
+  # Tests require access to vulkan-compatible GPU, which isn't
+  # available in Nix sandbox. Fails with VK_ERROR_INCOMPATIBLE_DRIVER.
+  doCheck = false;
+
+  separateDebugInfo = true;
+
+  # Include absolute paths to layer libraries in their associated
+  # layer definition json files.
+  preFixup = ''
+    for f in "$out"/share/vulkan/explicit_layer.d/*.json "$out"/share/vulkan/implicit_layer.d/*.json; do
+      jq <"$f" >tmp.json ".layer.library_path = \"$out/lib/\" + .layer.library_path"
+      mv tmp.json "$f"
+    done
+  '';
+
+  meta = with lib; {
+    description = "The official Khronos Vulkan validation layers";
+    homepage    = "https://github.com/KhronosGroup/Vulkan-ValidationLayers";
+    platforms   = platforms.linux;
+    license     = licenses.asl20;
+    maintainers = [ maintainers.ralith ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/vulkan-validation-layers/robin-hood-hashing.nix b/nixpkgs/pkgs/development/tools/vulkan-validation-layers/robin-hood-hashing.nix
new file mode 100644
index 000000000000..cd08f0231ab2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/vulkan-validation-layers/robin-hood-hashing.nix
@@ -0,0 +1,33 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, cmake
+}:
+
+stdenv.mkDerivation rec {
+  pname = "robin-hood-hashing";
+  version = "3.11.5"; # pin
+
+  src = fetchFromGitHub {
+    owner = "martinus";
+    repo = "robin-hood-hashing";
+    rev = version; # pin
+    sha256 = "sha256-J4u9Q6cXF0SLHbomP42AAn5LSKBYeVgTooOhqxOIpuM=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+  ];
+
+  cmakeFlags = [
+    "-DRH_STANDALONE_PROJECT=OFF"
+  ];
+
+  meta = with lib; {
+    description = "A faster, more efficient replacement for std::unordered_map / std::unordered_set";
+    homepage    = "https://github.com/martinus/robin-hood-hashing";
+    platforms   = platforms.linux;
+    license     = licenses.mit;
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/vultr-cli/default.nix b/nixpkgs/pkgs/development/tools/vultr-cli/default.nix
new file mode 100644
index 000000000000..e3be6f0366fd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/vultr-cli/default.nix
@@ -0,0 +1,35 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles }:
+
+buildGoModule rec {
+  pname = "vultr-cli";
+  version = "2.22.0";
+
+  src = fetchFromGitHub {
+    owner = "vultr";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-DdiMrmvLa2ZaZen//+Qz4UxZwvn8DNgH9mYp/Q8Z4Uw=";
+  };
+
+  vendorHash = "sha256-3sXqpeOZSiysZYOv15c+ZkMZOwqy3UCkvBEB1szaWFA=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  ldflags = [ "-s" "-w" ];
+
+  postInstall = ''
+    installShellCompletion --cmd vultr-cli \
+      --bash <($out/bin/vultr-cli completion bash) \
+      --fish <($out/bin/vultr-cli completion fish) \
+      --zsh <($out/bin/vultr-cli completion zsh)
+  '';
+
+  meta = with lib; {
+    description = "Official command line tool for Vultr services";
+    homepage = "https://github.com/vultr/vultr-cli";
+    changelog = "https://github.com/vultr/vultr-cli/blob/v${version}/CHANGELOG.md";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ Br1ght0ne ];
+    mainProgram = "vultr-cli";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/vultr/default.nix b/nixpkgs/pkgs/development/tools/vultr/default.nix
new file mode 100644
index 000000000000..71a048455787
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/vultr/default.nix
@@ -0,0 +1,29 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "vultr";
+  version = "2.0.3";
+
+  src = fetchFromGitHub {
+    owner = "JamesClonk";
+    repo = "vultr";
+    rev = "v${version}";
+    sha256 = "sha256-kyB6gUbc32NsSDqDy1zVT4HXn0pWxHdBOEBOSaI0Xro=";
+  };
+
+  vendorHash = null;
+
+  # There are not test files
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Vultr CLI and API client library";
+    homepage = "https://jamesclonk.github.io/vultr";
+    changelog = "https://github.com/JamesClonk/vultr/releases/tag/${src.rev}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ zauberpony ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/wabt/default.nix b/nixpkgs/pkgs/development/tools/wabt/default.nix
new file mode 100644
index 000000000000..64b8f4dd474c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/wabt/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchFromGitHub, cmake }:
+
+stdenv.mkDerivation rec {
+  pname = "wabt";
+  version = "1.0.34";
+
+  src = fetchFromGitHub {
+    owner = "WebAssembly";
+    repo = "wabt";
+    rev = version;
+    sha256 = "sha256-KlaMc3k1y6KviMDrMbKPcJOywJasrPZrnvSos8hgu+8=";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [ cmake ];
+  cmakeFlags = [ "-DBUILD_TESTS=OFF" "-DCMAKE_PROJECT_VERSION=${version}" ];
+
+  meta = with lib; {
+    description = "The WebAssembly Binary Toolkit";
+    longDescription = ''
+      WABT (pronounced "wabbit") is a suite of tools for WebAssembly, including:
+       * wat2wasm: translate from WebAssembly text format to the WebAssembly
+         binary format
+       * wasm2wat: the inverse of wat2wasm, translate from the binary format
+         back to the text format (also known as a .wat)
+       * wasm-objdump: print information about a wasm binary. Similiar to
+         objdump.
+       * wasm-interp: decode and run a WebAssembly binary file using a
+         stack-based interpreter
+       * wat-desugar: parse .wat text form as supported by the spec interpreter
+         (s-expressions, flat syntax, or mixed) and print "canonical" flat
+         format
+       * wasm2c: convert a WebAssembly binary file to a C source and header
+    '';
+    homepage = "https://github.com/WebAssembly/wabt";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ ekleog ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/wails/default.nix b/nixpkgs/pkgs/development/tools/wails/default.nix
new file mode 100644
index 000000000000..d0902b1c5cff
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/wails/default.nix
@@ -0,0 +1,74 @@
+{ lib
+, stdenv
+, buildGoModule
+, fetchFromGitHub
+, pkg-config
+, makeWrapper
+, go
+, gcc
+, gtk3
+, webkitgtk
+, nodejs
+, zlib
+}:
+
+buildGoModule rec {
+  pname = "wails";
+  version = "2.7.1";
+
+  src = fetchFromGitHub {
+    owner = "wailsapp";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-KC5BkIaDLWT1soHr1FpfZWnEzyZTMUPaGMTap7P1W98=";
+  } + "/v2";
+
+  vendorHash = "sha256-EoWsDo39tS4KbcOVgrd1esSzEseC2+ZfMj4+KvymwF8=";
+
+  proxyVendor = true;
+
+  subPackages = [ "cmd/wails" ];
+
+  # These packages are needed to build wails
+  # and will also need to be used when building a wails app.
+  nativeBuildInputs = [
+    pkg-config
+    makeWrapper
+  ];
+
+  # Wails apps are built with Go, so we need to be able to
+  # add it in propagatedBuildInputs.
+  allowGoReference = true;
+
+  # Following packages are required when wails used as a builder.
+  propagatedBuildInputs = [
+    pkg-config
+    go
+    gcc
+    gtk3
+    webkitgtk
+    nodejs
+  ];
+
+  ldflags = [
+    "-s"
+    "-w"
+  ];
+
+  # As Wails calls a compiler, certain apps and libraries need to be made available.
+  postFixup = ''
+    wrapProgram $out/bin/wails \
+      --prefix PATH : ${lib.makeBinPath [ pkg-config go gcc nodejs ]} \
+      --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ gtk3 webkitgtk ]} \
+      --set PKG_CONFIG_PATH "$PKG_CONFIG_PATH" \
+      --set CGO_LDFLAGS "-L${lib.makeLibraryPath [ zlib ]}"
+  '';
+
+  meta = with lib; {
+    description = "Build applications using Go + HTML + CSS + JS";
+    homepage = "https://wails.io";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ianmjones ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/wally-cli/default.nix b/nixpkgs/pkgs/development/tools/wally-cli/default.nix
new file mode 100644
index 000000000000..547f68bf8f33
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/wally-cli/default.nix
@@ -0,0 +1,29 @@
+{ lib, buildGoModule, fetchFromGitHub, pkg-config, libusb1 }:
+
+buildGoModule rec {
+  pname = "wally-cli";
+  version = "2.0.1";
+
+  subPackages = [ "." ];
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ libusb1 ];
+
+  src = fetchFromGitHub {
+    owner = "zsa";
+    repo = "wally-cli";
+    rev = "${version}-linux";
+    sha256 = "NuyQHEygy4LNqLtrpdwfCR+fNy3ZUxOClVdRen6AXMc=";
+  };
+
+  vendorHash = "sha256-HffgkuKmaOjTYi+jQ6vBlC50JqqbYiikURT6TCqL7e0=";
+
+  meta = with lib; {
+    description = "A tool to flash firmware to mechanical keyboards";
+    homepage = "https://ergodox-ez.com/pages/wally-planck";
+    platforms = with platforms; linux ++ darwin;
+    license = licenses.mit;
+    maintainers = with maintainers; [ spacekookie r-burns ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/wambo/default.nix b/nixpkgs/pkgs/development/tools/wambo/default.nix
new file mode 100644
index 000000000000..f5e277d415ef
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/wambo/default.nix
@@ -0,0 +1,30 @@
+{ fetchCrate
+, lib
+, rustPlatform
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "wambo";
+  version = "0.3.1";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-WZQgQmoFmsWLgPYRWonJmyKq9IIJ+a6J+O19XPppJG4=";
+  };
+
+  cargoHash = "sha256-ghUdhWW5gURWxj/OhbcKPNeLzeJvndqAxEZmwKBATUk=";
+
+  meta = {
+    description = "All-in-one tool to convert decimal/bin/oct/hex and interpret bits as integers";
+    longDescription = ''
+      wambo is a binary that can easily shows you a numeric value in all important numeral systems
+      (bin, hex, dec) + interprets the input as both signed and unsigned values (from i8 to i64,
+      including f32 and f64). It also easily calculates you mibibytes to bytes, kilobytes to gibibytes,
+      and so on.
+    '';
+    homepage = "https://github.com/phip1611/wambo";
+    changelog = "https://github.com/phip1611/wambo/blob/v${version}/CHANGELOG.md";
+    license = with lib.licenses; [ mit ];
+    maintainers = with lib.maintainers; [ phip1611 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/wasm-bindgen-cli/default.nix b/nixpkgs/pkgs/development/tools/wasm-bindgen-cli/default.nix
new file mode 100644
index 000000000000..63d16bb0c719
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/wasm-bindgen-cli/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, rustPlatform
+, fetchCrate
+, nodejs
+, pkg-config
+, openssl
+, stdenv
+, curl
+, Security
+, version ? "0.2.89"
+, hash ? "sha256-IPxP68xtNSpwJjV2yNMeepAS0anzGl02hYlSTvPocz8="
+, cargoHash ? "sha256-pBeQaG6i65uJrJptZQLuIaCb/WCQMhba1Z1OhYqA8Zc="
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "wasm-bindgen-cli";
+  inherit version hash cargoHash;
+
+  src = fetchCrate {
+    inherit pname version hash;
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ openssl ] ++ lib.optionals stdenv.isDarwin [ curl Security ];
+
+  nativeCheckInputs = [ nodejs ];
+
+  # tests require it to be ran in the wasm-bindgen monorepo
+  doCheck = false;
+
+  meta = with lib; {
+    homepage = "https://rustwasm.github.io/docs/wasm-bindgen/";
+    license = with licenses; [ asl20 /* or */ mit ];
+    description = "Facilitating high-level interactions between wasm modules and JavaScript";
+    maintainers = with maintainers; [ rizary ];
+    mainProgram = "wasm-bindgen";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/wasm-pack/default.nix b/nixpkgs/pkgs/development/tools/wasm-pack/default.nix
new file mode 100644
index 000000000000..d805b529d678
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/wasm-pack/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "wasm-pack";
+  version = "0.12.1";
+
+  src = fetchFromGitHub {
+    owner = "rustwasm";
+    repo = "wasm-pack";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-L4mCgUPG4cgTUpCoaIUOTONBOggXn5vMyPKj48B3MMk=";
+  };
+
+  cargoHash = "sha256-mqQRQXaUW6mreE7UUEA0zhhaaGGKLRUngH9QLxcaIdY=";
+
+  buildInputs = lib.optional stdenv.isDarwin darwin.apple_sdk.frameworks.Security;
+
+  # Most tests rely on external resources and build artifacts.
+  # Disabling check here to work with build sandboxing.
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A utility that builds rust-generated WebAssembly package";
+    homepage = "https://github.com/rustwasm/wasm-pack";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = [ maintainers.dhkl ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/wasmedge/default.nix b/nixpkgs/pkgs/development/tools/wasmedge/default.nix
new file mode 100644
index 000000000000..7857b66c9183
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/wasmedge/default.nix
@@ -0,0 +1,66 @@
+{ lib
+, fetchFromGitHub
+, llvmPackages_12
+, boost
+, cmake
+, spdlog
+, libxml2
+, libffi
+, Foundation
+, testers
+}:
+
+let
+  llvmPackages = llvmPackages_12;
+  stdenv = llvmPackages.stdenv;
+in
+stdenv.mkDerivation (finalAttrs: {
+  pname = "wasmedge";
+  version = "0.13.5";
+
+  src = fetchFromGitHub {
+    owner = "WasmEdge";
+    repo = "WasmEdge";
+    rev = finalAttrs.version;
+    sha256 = "sha256-JaFaqYIwcRXYl5JukAfViUn8VTpMPThFO8EaVTPIudA=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    llvmPackages.lld
+  ];
+
+  buildInputs = [
+    boost
+    spdlog
+    llvmPackages.llvm
+    libxml2
+    libffi
+  ] ++ lib.optionals stdenv.isDarwin [
+    Foundation
+  ];
+
+  cmakeFlags = [
+    "-DWASMEDGE_BUILD_TESTS=OFF" # Tests are downloaded using git
+  ] ++ lib.optionals stdenv.isDarwin [
+    "-DWASMEDGE_FORCE_DISABLE_LTO=ON"
+  ];
+
+  postPatch = ''
+    echo -n $version > VERSION
+  '';
+
+  passthru.tests = {
+    version = testers.testVersion {
+      package = finalAttrs.finalPackage;
+    };
+  };
+
+  meta = with lib; {
+    homepage = "https://wasmedge.org/";
+    license = with licenses; [ asl20 ];
+    description = "A lightweight, high-performance, and extensible WebAssembly runtime for cloud native, edge, and decentralized applications";
+    maintainers = with maintainers; [ dit7ya ];
+    platforms = platforms.all;
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/wasmi/Cargo.lock b/nixpkgs/pkgs/development/tools/wasmi/Cargo.lock
new file mode 100644
index 000000000000..dfc5d70f774f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/wasmi/Cargo.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 = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c378d78423fdad8089616f827526ee33c19f2fddbd5de1629152c9593ba4783"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "ambient-authority"
+version = "0.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec8ad6edb4840b78c5c3d88de606b22252d552b55f3a4699fbb10fc070ec3049"
+
+[[package]]
+name = "anes"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299"
+
+[[package]]
+name = "anstream"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1f58811cfac344940f1a400b6e6231ce35171f614f26439e80f8c1465c5cc0c"
+dependencies = [
+ "anstyle",
+ "anstyle-parse",
+ "anstyle-query",
+ "anstyle-wincon",
+ "colorchoice",
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "15c4c2c83f81532e5845a733998b6971faca23490340a418e9b72a3ec9de12ea"
+
+[[package]]
+name = "anstyle-parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "938874ff5980b03a87c5524b3ae5b59cf99b1d6bc836848df7bc5ada9643c333"
+dependencies = [
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle-query"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b"
+dependencies = [
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "anstyle-wincon"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "58f54d10c6dfa51283a066ceab3ec1ab78d13fae00aa49243a45e4571fb79dfd"
+dependencies = [
+ "anstyle",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.75"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6"
+
+[[package]]
+name = "assert_cmd"
+version = "2.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88903cb14723e4d4003335bb7f8a14f27691649105346a0f0957466c096adfe6"
+dependencies = [
+ "anstyle",
+ "bstr",
+ "doc-comment",
+ "predicates",
+ "predicates-core",
+ "predicates-tree",
+ "wait-timeout",
+]
+
+[[package]]
+name = "assert_matches"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9"
+
+[[package]]
+name = "async-trait"
+version = "0.1.73"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc00ceb34980c03614e35a3a4e218276a0a824e911d07651cd0d858a51e8c0f0"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.29",
+]
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi 0.1.19",
+ "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 = "bitflags"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635"
+
+[[package]]
+name = "bstr"
+version = "1.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c2f7349907b712260e64b0afe2f84692af14a454be26187d9df565c7f69266a"
+dependencies = [
+ "memchr",
+ "regex-automata",
+ "serde",
+]
+
+[[package]]
+name = "cap-fs-ext"
+version = "0.26.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b0e103ce36d217d568903ad27b14ec2238ecb5d65bad2e756a8f3c0d651506e"
+dependencies = [
+ "cap-primitives",
+ "cap-std",
+ "io-lifetimes",
+ "windows-sys 0.36.1",
+]
+
+[[package]]
+name = "cap-primitives"
+version = "0.26.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af3f336aa91cce16033ed3c94ac91d98956c49b420e6d6cd0dd7d0e386a57085"
+dependencies = [
+ "ambient-authority",
+ "fs-set-times",
+ "io-extras",
+ "io-lifetimes",
+ "ipnet",
+ "maybe-owned",
+ "rustix 0.35.14",
+ "winapi-util",
+ "windows-sys 0.36.1",
+ "winx",
+]
+
+[[package]]
+name = "cap-rand"
+version = "0.26.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d14b9606aa9550d34651bc481443203bc014237bdb992d201d2afa62d2ec6dea"
+dependencies = [
+ "ambient-authority",
+ "rand",
+]
+
+[[package]]
+name = "cap-std"
+version = "0.26.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c9d6e70b626eceac9d6fc790fe2d72cc3f2f7bc3c35f467690c54a526b0f56db"
+dependencies = [
+ "cap-primitives",
+ "io-extras",
+ "io-lifetimes",
+ "ipnet",
+ "rustix 0.35.14",
+]
+
+[[package]]
+name = "cap-time-ext"
+version = "0.26.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3a0524f7c4cff2ea547ae2b652bf7a348fd3e48f76556dc928d8b45ab2f1d50"
+dependencies = [
+ "cap-primitives",
+ "once_cell",
+ "rustix 0.35.14",
+ "winx",
+]
+
+[[package]]
+name = "cast"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5"
+
+[[package]]
+name = "cc"
+version = "1.0.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "ciborium"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "effd91f6c78e5a4ace8a5d3c0b6bfaec9e2baaef55f3efc00e45fb2e477ee926"
+dependencies = [
+ "ciborium-io",
+ "ciborium-ll",
+ "serde",
+]
+
+[[package]]
+name = "ciborium-io"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cdf919175532b369853f5d5e20b26b43112613fd6fe7aee757e35f7a44642656"
+
+[[package]]
+name = "ciborium-ll"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "defaa24ecc093c77630e6c15e17c51f5e187bf35ee514f4e2d67baaa96dae22b"
+dependencies = [
+ "ciborium-io",
+ "half",
+]
+
+[[package]]
+name = "clap"
+version = "4.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7c8d502cbaec4595d2e7d5f61e318f05417bd2b66fdc3809498f0d3fdf0bea27"
+dependencies = [
+ "clap_builder",
+ "clap_derive",
+ "once_cell",
+]
+
+[[package]]
+name = "clap_builder"
+version = "4.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5891c7bc0edb3e1c2204fc5e94009affabeb1821c9e5fdc3959536c5c0bb984d"
+dependencies = [
+ "anstream",
+ "anstyle",
+ "clap_lex",
+ "strsim",
+]
+
+[[package]]
+name = "clap_derive"
+version = "4.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c9fd1a5729c4548118d7d70ff234a44868d00489a4b6597b0b020918a0e91a1a"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.29",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd7cc57abe963c6d3b9d8be5b06ba7c8957a930305ca90304f24ef040aa6f961"
+
+[[package]]
+name = "colorchoice"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
+
+[[package]]
+name = "criterion"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2b12d017a929603d80db1831cd3a24082f8137ce19c69e6447f54f5fc8d692f"
+dependencies = [
+ "anes",
+ "cast",
+ "ciborium",
+ "clap",
+ "criterion-plot",
+ "is-terminal 0.4.9",
+ "itertools",
+ "num-traits",
+ "once_cell",
+ "oorandom",
+ "regex",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "tinytemplate",
+ "walkdir",
+]
+
+[[package]]
+name = "criterion-plot"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1"
+dependencies = [
+ "cast",
+ "itertools",
+]
+
+[[package]]
+name = "difflib"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8"
+
+[[package]]
+name = "dirs"
+version = "4.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059"
+dependencies = [
+ "dirs-sys",
+]
+
+[[package]]
+name = "dirs-sys"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6"
+dependencies = [
+ "libc",
+ "redox_users",
+ "winapi",
+]
+
+[[package]]
+name = "doc-comment"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10"
+
+[[package]]
+name = "downcast-rs"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650"
+
+[[package]]
+name = "either"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
+
+[[package]]
+name = "errno"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "errno"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "136526188508e25c6fef639d7927dfb3e0e3084488bf202267829cf7fc23dbdd"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "errno-dragonfly"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "fs-set-times"
+version = "0.17.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a267b6a9304912e018610d53fe07115d8b530b160e85db4d2d3a59f3ddde1aec"
+dependencies = [
+ "io-lifetimes",
+ "rustix 0.35.14",
+ "windows-sys 0.36.1",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "half"
+version = "1.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7"
+
+[[package]]
+name = "heck"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b"
+
+[[package]]
+name = "indexmap-nostd"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e04e2fd2b8188ea827b32ef11de88377086d690286ab35747ef7f9bf3ccb590"
+
+[[package]]
+name = "io-extras"
+version = "0.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4a5d8c2ab5becd8720e30fd25f8fa5500d8dc3fceadd8378f05859bd7b46fc49"
+dependencies = [
+ "io-lifetimes",
+ "windows-sys 0.36.1",
+]
+
+[[package]]
+name = "io-lifetimes"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59ce5ef949d49ee85593fc4d3f3f95ad61657076395cbbce23e2121fc5542074"
+dependencies = [
+ "libc",
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "ipnet"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6"
+
+[[package]]
+name = "is-terminal"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d508111813f9af3afd2f92758f77e4ed2cc9371b642112c6a48d22eb73105c5"
+dependencies = [
+ "hermit-abi 0.2.6",
+ "io-lifetimes",
+ "rustix 0.35.14",
+ "windows-sys 0.36.1",
+]
+
+[[package]]
+name = "is-terminal"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b"
+dependencies = [
+ "hermit-abi 0.3.2",
+ "rustix 0.38.10",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "itertools"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
+
+[[package]]
+name = "leb128"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67"
+
+[[package]]
+name = "libc"
+version = "0.2.147"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3"
+
+[[package]]
+name = "libm"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7012b1bbb0719e1097c47611d3898568c546d597c2e74d66f6087edd5233ff4"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.0.46"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4d2456c373231a208ad294c33dc5bff30051eafd954cd4caae83a712b12854d"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57bcfdad1b858c2db7c38303a6d2ad4dfaf5eb53dfeb0910128b2c26d6158503"
+
+[[package]]
+name = "log"
+version = "0.4.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
+
+[[package]]
+name = "maybe-owned"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4facc753ae494aeb6e3c22f839b158aebd4f9270f55cd3c79906c45476c47ab4"
+
+[[package]]
+name = "memchr"
+version = "2.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5486aed0026218e61b8a01d5fbd5a0a134649abb71a0e53b7bc088529dced86e"
+
+[[package]]
+name = "num-traits"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
+
+[[package]]
+name = "oorandom"
+version = "11.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575"
+
+[[package]]
+name = "paste"
+version = "1.0.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c"
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+
+[[package]]
+name = "predicates"
+version = "3.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09963355b9f467184c04017ced4a2ba2d75cbcb4e7462690d388233253d4b1a9"
+dependencies = [
+ "anstyle",
+ "difflib",
+ "itertools",
+ "predicates-core",
+]
+
+[[package]]
+name = "predicates-core"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b794032607612e7abeb4db69adb4e33590fa6cf1149e95fd7cb00e634b92f174"
+
+[[package]]
+name = "predicates-tree"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "368ba315fb8c5052ab692e68a0eefec6ec57b23a36959c14496f0b0df2c0cecf"
+dependencies = [
+ "predicates-core",
+ "termtree",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.66"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
+dependencies = [
+ "proc-macro2",
+]
+
+[[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",
+]
+
+[[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",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "redox_users"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b"
+dependencies = [
+ "getrandom",
+ "redox_syscall",
+ "thiserror",
+]
+
+[[package]]
+name = "regex"
+version = "1.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12de2eff854e5fa4b1295edd650e227e9d8fb0c9e90b12e7f36d6a6811791a29"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-automata",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49530408a136e16e5b486e883fbb6ba058e8e4e8ae6621a77b048b314336e629"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da"
+
+[[package]]
+name = "rustix"
+version = "0.35.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6380889b07a03b5ecf1d44dc9ede6fd2145d84b502a2a9ca0b03c48e0cc3220f"
+dependencies = [
+ "bitflags 1.3.2",
+ "errno 0.2.8",
+ "io-lifetimes",
+ "itoa",
+ "libc",
+ "linux-raw-sys 0.0.46",
+ "once_cell",
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "rustix"
+version = "0.38.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed6248e1caa625eb708e266e06159f135e8c26f2bb7ceb72dc4b2766d0340964"
+dependencies = [
+ "bitflags 2.4.0",
+ "errno 0.3.3",
+ "libc",
+ "linux-raw-sys 0.4.5",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741"
+
+[[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 = "serde"
+version = "1.0.188"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf9e0fcba69a370eed61bcf2b728575f726b50b55cba78064753d708ddc7549e"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.188"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.29",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.105"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "693151e1ac27563d6dbcec9dee9fbd5da8539b20fa14ad3752b2e6d363ace360"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "shellexpand"
+version = "2.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ccc8076840c4da029af4f87e4e8daeb0fca6b87bbb02e10cb60b791450e11e4"
+dependencies = [
+ "dirs",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9"
+
+[[package]]
+name = "spin"
+version = "0.9.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
+
+[[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.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c324c494eba9d92503e6f1ef2e6df781e78f6a7705a0202d9801b198807d518a"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "system-interface"
+version = "0.23.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92adbaf536f5aff6986e1e62ba36cee72b1718c5153eee08b9e728ddde3f6029"
+dependencies = [
+ "atty",
+ "bitflags 1.3.2",
+ "cap-fs-ext",
+ "cap-std",
+ "io-lifetimes",
+ "rustix 0.35.14",
+ "windows-sys 0.36.1",
+ "winx",
+]
+
+[[package]]
+name = "termtree"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76"
+
+[[package]]
+name = "thiserror"
+version = "1.0.47"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97a802ec30afc17eee47b2855fc72e0c4cd62be9b4efe6591edde0ec5bd68d8f"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.47"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6bb623b56e39ab7dcd4b1b98bb6c8f8d907ed255b18de254088016b27a8ee19b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.29",
+]
+
+[[package]]
+name = "tinytemplate"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc"
+dependencies = [
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "tracing"
+version = "0.1.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
+dependencies = [
+ "cfg-if",
+ "log",
+ "pin-project-lite",
+ "tracing-attributes",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-attributes"
+version = "0.1.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.29",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+
+[[package]]
+name = "utf8parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
+
+[[package]]
+name = "wait-timeout"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "walkdir"
+version = "2.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698"
+dependencies = [
+ "same-file",
+ "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 = "wasi-cap-std-sync"
+version = "2.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4b4953999c746173c263b81e9e5e3e335ff47face7187ba2a5ecc91c716e6f3"
+dependencies = [
+ "anyhow",
+ "async-trait",
+ "cap-fs-ext",
+ "cap-rand",
+ "cap-std",
+ "cap-time-ext",
+ "fs-set-times",
+ "io-extras",
+ "io-lifetimes",
+ "is-terminal 0.3.0",
+ "once_cell",
+ "rustix 0.35.14",
+ "system-interface",
+ "tracing",
+ "wasi-common",
+ "windows-sys 0.36.1",
+]
+
+[[package]]
+name = "wasi-common"
+version = "2.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d47faf4f76ebfdeb1f3346a949c6fbf2f2471afc68280b00c76d6c02221d80ad"
+dependencies = [
+ "anyhow",
+ "bitflags 1.3.2",
+ "cap-rand",
+ "cap-std",
+ "io-extras",
+ "rustix 0.35.14",
+ "thiserror",
+ "tracing",
+ "wiggle",
+ "windows-sys 0.36.1",
+]
+
+[[package]]
+name = "wasm-encoder"
+version = "0.31.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41763f20eafed1399fff1afb466496d3a959f58241436cfdc17e3f5ca954de16"
+dependencies = [
+ "leb128",
+]
+
+[[package]]
+name = "wasm-encoder"
+version = "0.32.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ba64e81215916eaeb48fee292f29401d69235d62d8b8fd92a7b2844ec5ae5f7"
+dependencies = [
+ "leb128",
+]
+
+[[package]]
+name = "wasmi"
+version = "0.31.0"
+dependencies = [
+ "anyhow",
+ "assert_matches",
+ "criterion",
+ "smallvec",
+ "spin",
+ "wasmi_arena",
+ "wasmi_core",
+ "wasmparser-nostd",
+ "wast 62.0.1",
+ "wat",
+]
+
+[[package]]
+name = "wasmi_arena"
+version = "0.4.0"
+
+[[package]]
+name = "wasmi_cli"
+version = "0.31.0"
+dependencies = [
+ "anyhow",
+ "assert_cmd",
+ "clap",
+ "wasmi",
+ "wasmi_wasi",
+ "wat",
+]
+
+[[package]]
+name = "wasmi_core"
+version = "0.13.0"
+dependencies = [
+ "downcast-rs",
+ "libm",
+ "num-traits",
+ "paste",
+ "rand",
+]
+
+[[package]]
+name = "wasmi_wasi"
+version = "0.31.0"
+dependencies = [
+ "wasi-cap-std-sync",
+ "wasi-common",
+ "wasmi",
+ "wat",
+ "wiggle",
+]
+
+[[package]]
+name = "wasmparser-nostd"
+version = "0.100.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9157cab83003221bfd385833ab587a039f5d6fa7304854042ba358a3b09e0724"
+dependencies = [
+ "indexmap-nostd",
+]
+
+[[package]]
+name = "wast"
+version = "35.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2ef140f1b49946586078353a453a1d28ba90adfc54dde75710bc1931de204d68"
+dependencies = [
+ "leb128",
+]
+
+[[package]]
+name = "wast"
+version = "62.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8ae06f09dbe377b889fbd620ff8fa21e1d49d1d9d364983c0cdbf9870cb9f1f"
+dependencies = [
+ "leb128",
+ "memchr",
+ "unicode-width",
+ "wasm-encoder 0.31.1",
+]
+
+[[package]]
+name = "wast"
+version = "64.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a259b226fd6910225aa7baeba82f9d9933b6d00f2ce1b49b80fa4214328237cc"
+dependencies = [
+ "leb128",
+ "memchr",
+ "unicode-width",
+ "wasm-encoder 0.32.0",
+]
+
+[[package]]
+name = "wat"
+version = "1.0.71"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53253d920ab413fca1c7dc2161d601c79b4fdf631d0ba51dd4343bf9b556c3f6"
+dependencies = [
+ "wast 64.0.0",
+]
+
+[[package]]
+name = "wiggle"
+version = "2.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "211ef4d238fd83bbe6f1bc57f3e2e20dc8b1f999188be252e7a535b696c6f84f"
+dependencies = [
+ "anyhow",
+ "async-trait",
+ "bitflags 1.3.2",
+ "thiserror",
+ "tracing",
+ "wiggle-macro",
+ "witx",
+]
+
+[[package]]
+name = "wiggle-generate"
+version = "2.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "63feec26b2fc3708c7a63316949ca75dd96988f03a17e4cb8d533dc62587ada4"
+dependencies = [
+ "anyhow",
+ "heck",
+ "proc-macro2",
+ "quote",
+ "shellexpand",
+ "syn 1.0.109",
+ "witx",
+]
+
+[[package]]
+name = "wiggle-macro"
+version = "2.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "494dc2646618c2b7fb0ec5e1d27dbac5ca31194c00a64698a4b5b35a83d80c21"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "wiggle-generate",
+]
+
+[[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"
+
+[[package]]
+name = "windows-sys"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2"
+dependencies = [
+ "windows_aarch64_msvc 0.36.1",
+ "windows_i686_gnu 0.36.1",
+ "windows_i686_msvc 0.36.1",
+ "windows_x86_64_gnu 0.36.1",
+ "windows_x86_64_msvc 0.36.1",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
+dependencies = [
+ "windows_aarch64_gnullvm 0.48.5",
+ "windows_aarch64_msvc 0.48.5",
+ "windows_i686_gnu 0.48.5",
+ "windows_i686_msvc 0.48.5",
+ "windows_x86_64_gnu 0.48.5",
+ "windows_x86_64_gnullvm 0.48.5",
+ "windows_x86_64_msvc 0.48.5",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
+
+[[package]]
+name = "winx"
+version = "0.33.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7b01e010390eb263a4518c8cebf86cb67469d1511c00b749a47b64c39e8054d"
+dependencies = [
+ "bitflags 1.3.2",
+ "io-lifetimes",
+ "windows-sys 0.36.1",
+]
+
+[[package]]
+name = "witx"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e366f27a5cabcddb2706a78296a40b8fcc451e1a6aba2fc1d94b4a01bdaaef4b"
+dependencies = [
+ "anyhow",
+ "log",
+ "thiserror",
+ "wast 35.0.2",
+]
diff --git a/nixpkgs/pkgs/development/tools/wasmi/default.nix b/nixpkgs/pkgs/development/tools/wasmi/default.nix
new file mode 100644
index 000000000000..4af59590722a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/wasmi/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "wasmi";
+  version = "0.31.0";
+
+  src = fetchFromGitHub {
+    owner = "paritytech";
+    repo = "wasmi";
+    rev = "v${version}";
+    hash = "sha256-chLWrZ+OLUTSFmTu+qKpjApXDmJFhS68N2RKjaql75U=";
+    fetchSubmodules = true;
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+  };
+
+  postPatch = ''
+    ln -s ${./Cargo.lock} Cargo.lock
+  '';
+
+  meta = with lib; {
+    description = "An efficient WebAssembly interpreter";
+    homepage = "https://github.com/paritytech/wasmi";
+    changelog = "https://github.com/paritytech/wasmi/blob/${src.rev}/CHANGELOG.md";
+    license = with licenses; [ asl20 mit ];
+    mainProgram = "wasmi_cli";
+    maintainers = with maintainers; [ dit7ya ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/wasmserve/default.nix b/nixpkgs/pkgs/development/tools/wasmserve/default.nix
new file mode 100644
index 000000000000..3248082e2a4c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/wasmserve/default.nix
@@ -0,0 +1,25 @@
+{ buildGoModule
+, lib
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "wasmserve";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "hajimehoshi";
+    repo = "wasmserve";
+    rev = "v${version}";
+    hash = "sha256-KlCbUre6yIorE1ZM++Rto8vgwVGsC1wZj1xCd3AwQy0=";
+  };
+
+  vendorHash = null;
+
+  meta = with lib; {
+    description = "An HTTP server for testing Wasm";
+    homepage = "https://github.com/hajimehoshi/wasmserve";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ kirillrdy ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/wasynth/Cargo.lock b/nixpkgs/pkgs/development/tools/wasynth/Cargo.lock
new file mode 100644
index 000000000000..c231fd9e9754
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/wasynth/Cargo.lock
@@ -0,0 +1,278 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "arbitrary"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a7924531f38b1970ff630f03eb20a2fde69db5c590c93b0f3482e95dcc5fd60"
+dependencies = [
+ "derive_arbitrary",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "cc"
+version = "1.0.73"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11"
+
+[[package]]
+name = "codegen-luajit"
+version = "0.12.0"
+dependencies = [
+ "wasm-ast",
+ "wasmparser 0.86.0",
+]
+
+[[package]]
+name = "codegen-luau"
+version = "0.12.0"
+dependencies = [
+ "wasm-ast",
+ "wasmparser 0.86.0",
+]
+
+[[package]]
+name = "derive_arbitrary"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c9a577516173adb681466d517d39bd468293bc2c2a16439375ef0f35bba45f3d"
+dependencies = [
+ "proc-macro2 1.0.40",
+ "quote 1.0.20",
+ "syn 1.0.98",
+]
+
+[[package]]
+name = "dev-test"
+version = "0.12.0"
+dependencies = [
+ "codegen-luajit",
+ "codegen-luau",
+ "libfuzzer-sys",
+ "test-generator",
+ "wasm-ast",
+ "wasm-smith",
+ "wast",
+]
+
+[[package]]
+name = "flagset"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cda653ca797810c02f7ca4b804b40b8b95ae046eb989d356bce17919a8c25499"
+
+[[package]]
+name = "glob"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574"
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+
+[[package]]
+name = "indexmap"
+version = "1.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e"
+dependencies = [
+ "autocfg",
+ "hashbrown",
+]
+
+[[package]]
+name = "leb128"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67"
+
+[[package]]
+name = "libfuzzer-sys"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "336244aaeab6a12df46480dc585802aa743a72d66b11937844c61bbca84c991d"
+dependencies = [
+ "arbitrary",
+ "cc",
+ "once_cell",
+]
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "once_cell"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "18a6dbe30758c9f83eb00cbea4ac95966305f5a7772f3f42ebfc7fc7eddbd8e1"
+
+[[package]]
+name = "proc-macro2"
+version = "0.4.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759"
+dependencies = [
+ "unicode-xid",
+]
+
+[[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 = "0.6.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1"
+dependencies = [
+ "proc-macro2 0.4.30",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804"
+dependencies = [
+ "proc-macro2 1.0.40",
+]
+
+[[package]]
+name = "syn"
+version = "0.15.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5"
+dependencies = [
+ "proc-macro2 0.4.30",
+ "quote 0.6.13",
+ "unicode-xid",
+]
+
+[[package]]
+name = "syn"
+version = "1.0.98"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd"
+dependencies = [
+ "proc-macro2 1.0.40",
+ "quote 1.0.20",
+ "unicode-ident",
+]
+
+[[package]]
+name = "test-generator"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea97be90349ab3574f6e74d1566e1c5dd3a4bc74b89f4af4cc10ca010af103c0"
+dependencies = [
+ "glob",
+ "proc-macro2 0.4.30",
+ "quote 0.6.13",
+ "syn 0.15.44",
+]
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "15c61ba63f9235225a22310255a29b806b907c9b8c964bcbd0a2c70f3f2deea7"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973"
+
+[[package]]
+name = "unicode-xid"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc"
+
+[[package]]
+name = "wasm-ast"
+version = "0.12.0"
+dependencies = [
+ "wasmparser 0.86.0",
+]
+
+[[package]]
+name = "wasm-encoder"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31f0c17267a5ffd6ae3d897589460e21db1673c84fb7016b909c9691369a75ea"
+dependencies = [
+ "leb128",
+]
+
+[[package]]
+name = "wasm-encoder"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f76068e87fe9b837a6bc2ccded66784173eadb828c4168643e9fddf6f9ed2e61"
+dependencies = [
+ "leb128",
+]
+
+[[package]]
+name = "wasm-smith"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b73250e61e41d0e467b78559c7d761841005d724384bb0b78d52ff974acf5520"
+dependencies = [
+ "arbitrary",
+ "flagset",
+ "indexmap",
+ "leb128",
+ "wasm-encoder 0.14.0",
+ "wasmparser 0.87.0",
+]
+
+[[package]]
+name = "wasmparser"
+version = "0.86.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bcbfe95447da2aa7ff171857fc8427513eb57c75a729bb190e974dc695e8f5c"
+dependencies = [
+ "indexmap",
+]
+
+[[package]]
+name = "wasmparser"
+version = "0.87.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c04e207cd2e8ecb6f9bd28a2cf3119b4c6bfeee6fe3a25cc1daf8041d00a875"
+dependencies = [
+ "indexmap",
+]
+
+[[package]]
+name = "wast"
+version = "42.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "badcb03f976f983ff0daf294da9697be659442f61e6b0942bb37a2b6cbfe9dd4"
+dependencies = [
+ "leb128",
+ "memchr",
+ "unicode-width",
+ "wasm-encoder 0.13.0",
+]
diff --git a/nixpkgs/pkgs/development/tools/wasynth/default.nix b/nixpkgs/pkgs/development/tools/wasynth/default.nix
new file mode 100644
index 000000000000..0edefb233355
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/wasynth/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "wasynth";
+  version = "0.12.0";
+
+  src = fetchFromGitHub {
+    owner = "Rerumu";
+    repo = "Wasynth";
+    rev = "v${version}";
+    sha256 = "sha256-hbY+epUtYSQrvnAbCELsVcqd3UoXGn24FkzWfrM0K14=";
+  };
+
+  # A lock file isn't provided, so it must be added manually.
+  cargoLock.lockFile = ./Cargo.lock;
+  postPatch = ''
+    cp ${./Cargo.lock} Cargo.lock
+  '';
+
+  # Not all of the tests pass.
+  doCheck = false;
+
+  # These binaries are tests and should be removed.
+  postInstall = ''
+    rm $out/bin/{luajit,luau}_translate
+  '';
+
+  meta = with lib; {
+    description = "WebAssembly translation tools for various languages";
+    longDescription = ''
+      Wasynth provides the following WebAssembly translation tools:
+       * wasm2luajit: translate WebAssembly to LuaJIT source code
+       * wasm2luau: translate WebAssembly Luau source code
+    '';
+    homepage = "https://github.com/Rerumu/Wasynth";
+    license = with licenses; [ gpl3Only ];
+    maintainers = with maintainers; [ wackbyte ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/watchman/Cargo.lock b/nixpkgs/pkgs/development/tools/watchman/Cargo.lock
new file mode 100644
index 000000000000..d0ccfa032ade
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/watchman/Cargo.lock
@@ -0,0 +1,1060 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "addr2line"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4fa78e18c64fce05e902adecd7a5eed15a5e0a3439f7b0e169f0252214865e3"
+dependencies = [
+ "gimli",
+]
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "ahash"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f"
+dependencies = [
+ "cfg-if",
+ "getrandom",
+ "once_cell",
+ "version_check",
+]
+
+[[package]]
+name = "ansi_term"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.72"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b13c32d80ecc7ab747b80c3784bce54ee8a7a0cc4fbda9bf4cda2cf6fe90854"
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi 0.1.19",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "backtrace"
+version = "0.3.68"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4319208da049c43661739c5fade2ba182f09d1dc2299b32298d3a31692b17e12"
+dependencies = [
+ "addr2line",
+ "cc",
+ "cfg-if",
+ "libc",
+ "miniz_oxide",
+ "object",
+ "rustc-demangle",
+]
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "byteorder"
+version = "1.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
+
+[[package]]
+name = "bytes"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "cc"
+version = "1.0.82"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "305fe645edc1442a0fa8b6726ba61d422798d37a52e12eaecf4b022ebbb88f01"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "clap"
+version = "2.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c"
+dependencies = [
+ "ansi_term",
+ "atty",
+ "bitflags",
+ "strsim",
+ "textwrap",
+ "unicode-width",
+ "vec_map",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
+
+[[package]]
+name = "crossbeam"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2801af0d36612ae591caa9568261fddce32ce6e08a7275ea334a06a4ad021a2c"
+dependencies = [
+ "cfg-if",
+ "crossbeam-channel",
+ "crossbeam-deque",
+ "crossbeam-epoch",
+ "crossbeam-queue",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200"
+dependencies = [
+ "cfg-if",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
+dependencies = [
+ "cfg-if",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7"
+dependencies = [
+ "autocfg",
+ "cfg-if",
+ "crossbeam-utils",
+ "memoffset 0.9.0",
+ "scopeguard",
+]
+
+[[package]]
+name = "crossbeam-queue"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d1cfb3ea8a53f37c40dea2c7bedcbd88bdfae54f5e2175d6ecaff1c988353add"
+dependencies = [
+ "cfg-if",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "duct"
+version = "0.13.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37ae3fc31835f74c2a7ceda3aeede378b0ae2e74c8f1c36559fcc9ae2a4e7d3e"
+dependencies = [
+ "libc",
+ "once_cell",
+ "os_pipe",
+ "shared_child",
+]
+
+[[package]]
+name = "either"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
+
+[[package]]
+name = "futures"
+version = "0.1.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a471a38ef8ed83cd6e40aa59c1ffe17db6855c18e3604d9c4ed8c08ebc28678"
+
+[[package]]
+name = "futures"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-io",
+ "futures-sink",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c"
+
+[[package]]
+name = "futures-executor"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-io"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964"
+
+[[package]]
+name = "futures-macro"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.28",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e"
+
+[[package]]
+name = "futures-task"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65"
+
+[[package]]
+name = "futures-util"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533"
+dependencies = [
+ "futures 0.1.31",
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-macro",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "gimli"
+version = "0.27.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e"
+
+[[package]]
+name = "heck"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
+dependencies = [
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b"
+
+[[package]]
+name = "itoa"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
+
+[[package]]
+name = "jwalk"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5dbcda57db8b6dc067e589628b7348639014e793d9e8137d8cf215e8b133a0bd"
+dependencies = [
+ "crossbeam",
+ "rayon",
+]
+
+[[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.147"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3"
+
+[[package]]
+name = "lock_api"
+version = "0.4.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16"
+dependencies = [
+ "autocfg",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4"
+
+[[package]]
+name = "maplit"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d"
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "memoffset"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "memoffset"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "miniz_oxide"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "mio"
+version = "0.8.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2"
+dependencies = [
+ "libc",
+ "wasi",
+ "windows-sys",
+]
+
+[[package]]
+name = "nix"
+version = "0.25.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f346ff70e7dbfd675fe90590b92d59ef2de15a8779ae305ebcbfd3f0caf59be4"
+dependencies = [
+ "autocfg",
+ "bitflags",
+ "cfg-if",
+ "libc",
+ "memoffset 0.6.5",
+ "pin-utils",
+]
+
+[[package]]
+name = "ntapi"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
+dependencies = [
+ "hermit-abi 0.3.2",
+ "libc",
+]
+
+[[package]]
+name = "object"
+version = "0.31.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8bda667d9f2b5051b8833f59f3bf748b28ef54f850f4fcb389a252aa383866d1"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
+
+[[package]]
+name = "os_pipe"
+version = "1.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ae859aa07428ca9a929b936690f8b12dc5f11dd8c6992a18ca93919f28bc177"
+dependencies = [
+ "libc",
+ "windows-sys",
+]
+
+[[package]]
+name = "parking_lot"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+dependencies = [
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall",
+ "smallvec",
+ "windows-targets",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12cc1b0bf1727a77a54b6654e7b5f1af8604923edc8b81885f8ec92f9e3f0a05"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[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 1.0.109",
+ "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.66"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50f3b39ccfb720540debaa0164757101c08ecb8d326b15358ce76a62c7e85965"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rayon"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b"
+dependencies = [
+ "either",
+ "rayon-core",
+]
+
+[[package]]
+name = "rayon-core"
+version = "1.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d"
+dependencies = [
+ "crossbeam-channel",
+ "crossbeam-deque",
+ "crossbeam-utils",
+ "num_cpus",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
+
+[[package]]
+name = "ryu"
+version = "1.0.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741"
+
+[[package]]
+name = "scopeguard"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+
+[[package]]
+name = "serde"
+version = "1.0.183"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "32ac8da02677876d532745a130fc9d8e6edfa81a269b107c5b00829b91d8eb3c"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_bser"
+version = "0.3.1"
+dependencies = [
+ "anyhow",
+ "byteorder",
+ "bytes",
+ "serde",
+ "serde_bytes",
+ "thiserror",
+]
+
+[[package]]
+name = "serde_bytes"
+version = "0.11.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab33ec92f677585af6d88c65593ae2375adde54efdbf16d597f2cbc7a6d368ff"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.183"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aafe972d60b0b9bee71a91b92fee2d4fb3c9d7e8f6b179aa99f27203d99a4816"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.28",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.104"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "076066c5f1078eac5b722a31827a8832fe108bed65dfa75e233c89f8206e976c"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "shared_child"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0d94659ad3c2137fef23ae75b03d5241d633f8acded53d672decfa0e6e0caef"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "slab"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9"
+
+[[package]]
+name = "socket2"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2538b18701741680e0322a2302176d3253a35388e2e62f172f64f4f16605f877"
+dependencies = [
+ "libc",
+ "windows-sys",
+]
+
+[[package]]
+name = "strsim"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
+
+[[package]]
+name = "structopt"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c6b5c64445ba8094a6ab0c3cd2ad323e07171012d9c98b0b15651daf1787a10"
+dependencies = [
+ "clap",
+ "lazy_static",
+ "structopt-derive",
+]
+
+[[package]]
+name = "structopt-derive"
+version = "0.4.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dcb5ae327f9cc13b68763b5749770cb9e048a99bd9dfdfa58d0cf05d5f64afe0"
+dependencies = [
+ "heck",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04361975b3f5e348b2189d8dc55bc942f278b2d482a6a0365de5bdd62d351567"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "sysinfo"
+version = "0.26.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c18a6156d1f27a9592ee18c1a846ca8dd5c258b7179fc193ae87c74ebb666f5"
+dependencies = [
+ "cfg-if",
+ "core-foundation-sys",
+ "libc",
+ "ntapi",
+ "once_cell",
+ "rayon",
+ "winapi",
+]
+
+[[package]]
+name = "tabular"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9a2882c514780a1973df90de9d68adcd8871bacc9a6331c3f28e6d2ff91a3d1"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "611040a08a0439f8248d1990b111c95baa9c704c805fa1f62104b39655fd7f90"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "090198534930841fab3a5d1bb637cde49e339654e606195f8d9c76eeb081dc96"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.28",
+]
+
+[[package]]
+name = "tokio"
+version = "1.30.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d3ce25f50619af8b0aec2eb23deebe84249e19e2ddd393a6e16e3300a6dadfd"
+dependencies = [
+ "backtrace",
+ "bytes",
+ "libc",
+ "mio",
+ "num_cpus",
+ "parking_lot",
+ "pin-project-lite",
+ "signal-hook-registry",
+ "socket2",
+ "tokio-macros",
+ "tracing",
+ "windows-sys",
+]
+
+[[package]]
+name = "tokio-macros"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.28",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.6.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "36943ee01a6d67977dd3f84a5a1d2efeb4ada3a1ae771cadfaa535d9d9fc6507"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-io",
+ "futures-sink",
+ "log",
+ "pin-project-lite",
+ "slab",
+ "tokio",
+]
+
+[[package]]
+name = "tracing"
+version = "0.1.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
+dependencies = [
+ "cfg-if",
+ "pin-project-lite",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c"
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+
+[[package]]
+name = "vec_map"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "watchman_client"
+version = "0.8.0"
+dependencies = [
+ "anyhow",
+ "bytes",
+ "futures 0.3.28",
+ "maplit",
+ "serde",
+ "serde_bser",
+ "thiserror",
+ "tokio",
+ "tokio-util",
+ "winapi",
+]
+
+[[package]]
+name = "watchmanctl"
+version = "0.1.0"
+dependencies = [
+ "ahash",
+ "anyhow",
+ "duct",
+ "jwalk",
+ "nix",
+ "serde",
+ "serde_json",
+ "structopt",
+ "sysinfo",
+ "tabular",
+ "tokio",
+ "watchman_client",
+]
+
+[[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-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05d4b17490f70499f20b9e791dcf6a299785ce8af4d709018206dc5b4953e95f"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
diff --git a/nixpkgs/pkgs/development/tools/watchman/default.nix b/nixpkgs/pkgs/development/tools/watchman/default.nix
new file mode 100644
index 000000000000..973a48a84bc8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/watchman/default.nix
@@ -0,0 +1,106 @@
+{ boost
+, cargo
+, cmake
+, CoreServices
+, cpptoml
+, double-conversion
+, edencommon
+, ensureNewerSourcesForZipFilesHook
+, fb303
+, fbthrift
+, fetchFromGitHub
+, fizz
+, fmt_8
+, folly
+, glog
+, gtest
+, lib
+, libevent
+, libiconv
+, libsodium
+, libunwind
+, lz4
+, openssl
+, pcre2
+, pkg-config
+, rustPlatform
+, rustc
+, stateDir ? "/tmp"
+, stdenv
+, wangle
+, zlib
+, zstd
+}:
+
+stdenv.mkDerivation rec {
+  pname = "watchman";
+  version = "2023.08.14.00";
+
+  src = fetchFromGitHub {
+    owner = "facebook";
+    repo = "watchman";
+    rev = "v${version}";
+    hash = "sha256-41bBPFlLYFHySyX4/GUllT1pNywSRcH7x/pnb5iN/1o=";
+  };
+
+  cmakeFlags = [
+    "-DBUILD_SHARED_LIBS=ON"
+    "-DENABLE_EDEN_SUPPORT=NO" # requires sapling (formerly known as eden), which is not packaged in nixpkgs
+    "-DWATCHMAN_STATE_DIR=${stateDir}"
+    "-DWATCHMAN_VERSION_OVERRIDE=${version}"
+  ] ++ lib.optionals stdenv.isDarwin [
+    "-DCMAKE_OSX_DEPLOYMENT_TARGET=10.14" # For aligned allocation
+  ];
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    ensureNewerSourcesForZipFilesHook
+    rustPlatform.cargoSetupHook
+    cargo
+    rustc
+  ];
+
+  buildInputs = [
+    pcre2
+    openssl
+    gtest
+    glog
+    boost
+    libevent
+    fmt_8
+    libsodium
+    zlib
+    folly
+    fizz
+    wangle
+    fbthrift
+    fb303
+    cpptoml
+    edencommon
+    libunwind
+    double-conversion
+    lz4
+    zstd
+    libiconv
+  ] ++ lib.optionals stdenv.isDarwin [ CoreServices ];
+
+  cargoRoot = "watchman/cli";
+
+  cargoDeps = rustPlatform.importCargoLock {
+    lockFile = ./Cargo.lock;
+  };
+
+  postPatch = ''
+    patchShebangs .
+    cp ${./Cargo.lock} ${cargoRoot}/Cargo.lock
+  '';
+
+  meta = with lib; {
+    description = "Watches files and takes action when they change";
+    homepage = "https://facebook.github.io/watchman";
+    maintainers = with maintainers; [ kylesferrazza ];
+    platforms = platforms.unix;
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/web-ext/default.nix b/nixpkgs/pkgs/development/tools/web-ext/default.nix
new file mode 100644
index 000000000000..bb9cda866e7f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/web-ext/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, buildNpmPackage
+, fetchFromGitHub
+, runCommand
+, web-ext
+}:
+
+buildNpmPackage rec {
+  pname = "web-ext";
+  version = "7.11.0";
+
+  src = fetchFromGitHub {
+    owner = "mozilla";
+    repo = "web-ext";
+    rev = version;
+    hash = "sha256-tXYqAAzxAFQGREkNGgBrHLp7ukRDMtr0bPYW7hOEniY=";
+  };
+
+  npmDepsHash = "sha256-uKAEWe28zUgE7Fv00sGXD5dKje/pHh22yJlYtk+7tN8=";
+
+  npmBuildFlags = [ "--production" ];
+
+  passthru.tests.help = runCommand "${pname}-tests" { } ''
+    ${web-ext}/bin/web-ext --help
+    touch $out
+  '';
+
+  meta = {
+    description = "A command line tool to help build, run, and test web extensions";
+    homepage = "https://github.com/mozilla/web-ext";
+    license = lib.licenses.mpl20;
+    mainProgram = "web-ext";
+    maintainers = with lib.maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/wgo/default.nix b/nixpkgs/pkgs/development/tools/wgo/default.nix
new file mode 100644
index 000000000000..3ed1fc89bf4e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/wgo/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+let
+  pname = "wgo";
+  version = "0.5.4";
+in
+buildGoModule {
+  inherit pname version;
+
+  src = fetchFromGitHub {
+    owner = "bokwoon95";
+    repo = "wgo";
+    rev = "v${version}";
+    hash = "sha256-MPmB6G5JCIEfFYchVmV8sS5Zfzfui9tClDI6RlLdP6U=";
+  };
+
+  vendorHash = "sha256-w6UJxZToHbbQmuXkyqFzyssFcE+7uVNqOuIF/XKdEsU=";
+
+  ldflags = [ "-s" "-w" ];
+
+  subPackages = [ "." ];
+
+  checkFlags = [
+    # Flaky tests.
+    # See https://github.com/bokwoon95/wgo/blob/e0448e04b6ca44323f507d1aca94425b7c69803c/START_HERE.md?plain=1#L26.
+    "-skip=TestWgoCmd_FileEvent"
+  ];
+
+  meta = with lib; {
+    description = "Live reload for Go apps";
+    homepage = "https://github.com/bokwoon95/wgo";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/wiggle/default.nix b/nixpkgs/pkgs/development/tools/wiggle/default.nix
new file mode 100644
index 000000000000..2da789fdc603
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/wiggle/default.nix
@@ -0,0 +1,44 @@
+{ lib, stdenv, fetchFromGitHub, ncurses, groff }:
+
+stdenv.mkDerivation rec {
+  pname = "wiggle";
+  version = "1.3";
+
+  src = fetchFromGitHub {
+    owner = "neilbrown";
+    repo = "wiggle";
+    rev = "v${version}";
+    sha256 = "18ilzr9sbal1j8p1d94ilm1j5blac5cngvcvjpdmgmpw6diy2ldf";
+  };
+
+  buildInputs = [ ncurses groff ];
+
+  configurePhase = ''
+    makeFlagsArray=( CFLAGS="-I. -O3"
+                     STRIP="-s"
+                     INSTALL="install"
+                     BINDIR="$out/bin"
+                     MANDIR="$out/share/man"
+                   )
+    patchShebangs .
+  '';
+
+  meta = with lib; {
+    homepage = "https://blog.neil.brown.name/category/wiggle/";
+    description = "Tool for applying patches with conflicts";
+    longDescription = ''
+      Wiggle applies patches to a file in a similar manner to the patch(1)
+      program. The distinctive difference is, however, that wiggle will
+      attempt to apply a patch even if the "before" part of the patch doesn't
+      match the target file perfectly. This is achieved by breaking the file
+      and patch into words and finding the best alignment of words in the file
+      with words in the patch. Once this alignment has been found, any
+      differences (word-wise) in the patch are applied to the file as best as
+      possible. Also, wiggle will (in some cases) detect changes that have
+      already been applied, and will ignore them.
+    '';
+    license = licenses.gpl2Plus;
+    platforms = platforms.all;
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/wiiload/default.nix b/nixpkgs/pkgs/development/tools/wiiload/default.nix
new file mode 100644
index 000000000000..3d7f1b798633
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/wiiload/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub, autoconf, automake, zlib }:
+stdenv.mkDerivation rec {
+  version = "0.5.3";
+  pname = "wiiload";
+
+  nativeBuildInputs = [ autoconf automake ];
+  buildInputs = [ zlib ];
+
+  src = fetchFromGitHub {
+    owner = "devkitPro";
+    repo  = "wiiload";
+    rev = "v${version}";
+    sha256 = "sha256-pZdZzCAPfAVucuiV/q/ROY3cz/wxQWep6dCTGNn2fSo=";
+  };
+
+  preConfigure = "./autogen.sh";
+
+  meta = with lib; {
+    description = "Load homebrew apps over network/usbgecko to your Wii";
+    homepage = "https://wiibrew.org/wiki/Wiiload";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ tomsmeets ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/winhelpcgi/default.nix b/nixpkgs/pkgs/development/tools/winhelpcgi/default.nix
new file mode 100644
index 000000000000..608ab00f50b6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/winhelpcgi/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, fetchurl, libwmf, libpng12, pkg-config, lib }: stdenv.mkDerivation {
+  pname = "winhelpcgi";
+  version = "1.0-rc3";
+
+  src = fetchurl {
+    url = "http://www.herdsoft.com/ftp/winhelpcgi_1.0-1.tar.gz";
+    sha256 = "sha256-9HIs50ZGoTfGixD9c/DQs0KJMQtmfsDVB8qRMnQtXNw=";
+
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ libwmf libpng12 ];
+
+  meta = {
+    description = "CGI module for Linux, Solaris, MacOS X and AIX to read Windows Help Files";
+    homepage = "http://www.herdsoft.com/linux/produkte/winhelpcgi.html";
+    license = lib.licenses.gpl2Only;
+    maintainers = [ lib.maintainers.shlevy ];
+    platforms = lib.platforms.linux;
+    broken = stdenv.isAarch64;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/wire/default.nix b/nixpkgs/pkgs/development/tools/wire/default.nix
new file mode 100644
index 000000000000..50e57d07d413
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/wire/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "wire";
+  version = "0.5.0";
+
+  src = fetchFromGitHub {
+    owner = "google";
+    repo = "wire";
+    rev = "v${version}";
+    sha256 = "sha256-9xjymiyPFMKbysgZULmcBEMI26naUrLMgTA+d7Q+DA0=";
+  };
+
+  vendorHash = "sha256-ZFUX4LgPte6oAf94D82Man/P9VMpx+CDNCTMBwiy9Fc=";
+
+  subPackages = [ "cmd/wire" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/google/wire";
+    description = "A code generation tool that automates connecting components using dependency injection";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ svrana ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/wizer/default.nix b/nixpkgs/pkgs/development/tools/wizer/default.nix
new file mode 100644
index 000000000000..29a9c7420129
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/wizer/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+, testers
+, wizer
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "wizer";
+  version = "4.0.0";
+
+  # the crate does not contain files which are necessary for the tests
+  # see https://github.com/bytecodealliance/wizer/commit/3a95e27ce42f1fdaef07b52988e4699eaa221e04
+  src = fetchFromGitHub {
+    owner = "bytecodealliance";
+    repo = "wizer";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-KFMfNgoKZWVLXNUYHWpAP8CCnVQLv/cDmQgzz29lKxQ=";
+  };
+
+  cargoHash = "sha256-kKN2JwzuFe7q8VZcKOjc5PkN3isHzzQcTJAvapGBdAE=";
+
+  cargoBuildFlags = [ "--bin" pname ];
+
+  buildFeatures = [ "env_logger" "structopt" ];
+
+  # Setting $HOME to a temporary directory is necessary to prevent checks from failing, as
+  # the test suite creates a cache directory at $HOME/Library/Caches/BytecodeAlliance.wasmtime.
+  preCheck = ''
+    export HOME=$(mktemp -d)
+  '';
+
+  passthru.tests = {
+    version = testers.testVersion { package = wizer; };
+  };
+
+  meta = with lib; {
+    description = "The WebAssembly pre-initializer";
+    homepage = "https://github.com/bytecodealliance/wizer";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ lucperkins amesgen ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/wlcs/default.nix b/nixpkgs/pkgs/development/tools/wlcs/default.nix
new file mode 100644
index 000000000000..d6fce69b4318
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/wlcs/default.nix
@@ -0,0 +1,72 @@
+{ stdenv
+, lib
+, gitUpdater
+, fetchFromGitHub
+, testers
+, cmake
+, pkg-config
+, boost
+, gtest
+, wayland
+, wayland-scanner
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "wlcs";
+  version = "1.7.0";
+
+  src = fetchFromGitHub {
+    owner = "MirServer";
+    repo = "wlcs";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-BQPRymkbGu4YvTYXTaTMuyP5fHpqMWI4xPwjDRHZNEQ=";
+  };
+
+  strictDeps = true;
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    wayland-scanner
+  ];
+
+  buildInputs = [
+    boost
+    gtest
+    wayland
+  ];
+
+  passthru = {
+    tests.pkg-config = testers.testMetaPkgConfig finalAttrs.finalPackage;
+    updateScript = gitUpdater {
+      rev-prefix = "v";
+    };
+  };
+
+  meta = with lib; {
+    description = "Wayland Conformance Test Suite";
+    longDescription = ''
+      wlcs aspires to be a protocol-conformance-verifying test suite usable by Wayland
+      compositor implementors.
+
+      It is growing out of porting the existing Weston test suite to be run in Mir's
+      test suite, but it is designed to be usable by any compositor.
+
+      wlcs relies on compositors providing an integration module, providing wlcs with
+      API hooks to start a compositor, connect a client, move a window, and so on.
+      This makes both writing and debugging tests easier - the tests are (generally)
+      in the same address space as the compositor, so there is a consistent global
+      clock available, it's easier to poke around in compositor internals, and
+      standard debugging tools can follow control flow from the test client to the
+      compositor and back again.
+    '';
+    homepage = "https://github.com/MirServer/wlcs";
+    changelog = "https://github.com/MirServer/wlcs/releases/tag/v${version}";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ OPNA2608 ];
+    platforms = platforms.linux;
+    pkgConfigModules = [
+      "wlcs"
+    ];
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/wllvm/default.nix b/nixpkgs/pkgs/development/tools/wllvm/default.nix
new file mode 100644
index 000000000000..7bb63a192e4d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/wllvm/default.nix
@@ -0,0 +1,19 @@
+{ lib, python3Packages, fetchPypi }:
+
+python3Packages.buildPythonApplication rec {
+  version = "1.3.1";
+  pname = "wllvm";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-PgV6V18FyezIZpqMQEbyv98MaVM7h7T7/Kvg3yMMwzE=";
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/travitch/whole-program-llvm";
+    description = "A wrapper script to build whole-program LLVM bitcode files";
+    license = licenses.mit;
+    maintainers = with maintainers; [ mic92 dtzWill ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/worker-build/Cargo.lock b/nixpkgs/pkgs/development/tools/worker-build/Cargo.lock
new file mode 100644
index 000000000000..17c911f4146c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/worker-build/Cargo.lock
@@ -0,0 +1,2415 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "aho-corasick"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43f6cb1bf222025340178f382c426f13757b2960e89779dfcb319c32542a5a41"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "android-tzdata"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
+
+[[package]]
+name = "android_system_properties"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.71"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8"
+
+[[package]]
+name = "async-trait"
+version = "0.1.68"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.18",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "base64"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "489d6c0ed21b11d038c31b6ceccca973e65d73ba3bd8ecb9a2babf5546164643"
+dependencies = [
+ "byteorder",
+ "safemem",
+]
+
+[[package]]
+name = "base64"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
+
+[[package]]
+name = "base64"
+version = "0.21.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "blake2"
+version = "0.10.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe"
+dependencies = [
+ "digest",
+]
+
+[[package]]
+name = "block-buffer"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1"
+
+[[package]]
+name = "byteorder"
+version = "1.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
+
+[[package]]
+name = "bytes"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be"
+
+[[package]]
+name = "cc"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
+
+[[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.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec837a71355b28f6556dbd569b37b3f363091c0bd4b2e735674521b4c5fd9bc5"
+dependencies = [
+ "android-tzdata",
+ "iana-time-zone",
+ "js-sys",
+ "num-traits",
+ "wasm-bindgen",
+ "winapi",
+]
+
+[[package]]
+name = "chrono-tz"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf9cc2b23599e6d7479755f3594285efb3f74a1bdca7a7374948bc831e23a552"
+dependencies = [
+ "chrono",
+ "chrono-tz-build",
+ "phf",
+]
+
+[[package]]
+name = "chrono-tz-build"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9998fb9f7e9b2111641485bf8beb32f92945f97f92a3d061f744cfef335f751"
+dependencies = [
+ "parse-zoneinfo",
+ "phf",
+ "phf_codegen",
+]
+
+[[package]]
+name = "console_error_panic_hook"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "core-foundation"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3e4c1eaa2012c47becbbad2ab175484c2a84d1185b566fb2cc5b8707343dfe58"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crc32fast"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "crypto-common"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+dependencies = [
+ "generic-array",
+ "typenum",
+]
+
+[[package]]
+name = "digest"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
+dependencies = [
+ "block-buffer",
+ "crypto-common",
+ "subtle",
+]
+
+[[package]]
+name = "dirs-next"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1"
+dependencies = [
+ "cfg-if",
+ "dirs-sys-next",
+]
+
+[[package]]
+name = "dirs-sys-next"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d"
+dependencies = [
+ "libc",
+ "redox_users",
+ "winapi",
+]
+
+[[package]]
+name = "encoding_rs"
+version = "0.8.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "errno"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "errno-dragonfly"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "fallible-iterator"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7"
+
+[[package]]
+name = "fastrand"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "filetime"
+version = "0.2.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5cbc844cecaee9d4443931972e1289c8ff485cb4cc2767cb03ca139ed6885153"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall 0.2.16",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "flate2"
+version = "1.0.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "foreign-types"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+dependencies = [
+ "foreign-types-shared",
+]
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c"
+
+[[package]]
+name = "futures-io"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964"
+
+[[package]]
+name = "futures-macro"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.18",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e"
+
+[[package]]
+name = "futures-task"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65"
+
+[[package]]
+name = "futures-util"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533"
+dependencies = [
+ "futures-core",
+ "futures-io",
+ "futures-macro",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "libc",
+ "wasi",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "h2"
+version = "0.3.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d357c7ae988e7d2182f7d7871d0b963962420b0678b0997ce7de72001aeab782"
+dependencies = [
+ "bytes",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "http",
+ "indexmap",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tracing",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+
+[[package]]
+name = "heck"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
+dependencies = [
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286"
+
+[[package]]
+name = "hex"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
+
+[[package]]
+name = "hmac"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
+dependencies = [
+ "digest",
+]
+
+[[package]]
+name = "http"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482"
+dependencies = [
+ "bytes",
+ "fnv",
+ "itoa",
+]
+
+[[package]]
+name = "http-body"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
+dependencies = [
+ "bytes",
+ "http",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "httparse"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
+
+[[package]]
+name = "httpdate"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421"
+
+[[package]]
+name = "hyper"
+version = "0.14.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab302d72a6f11a3b910431ff93aae7e773078c769f0a3ef15fb9ec692ed147d4"
+dependencies = [
+ "bytes",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "httparse",
+ "httpdate",
+ "itoa",
+ "pin-project-lite",
+ "socket2 0.4.9",
+ "tokio",
+ "tower-service",
+ "tracing",
+ "want",
+]
+
+[[package]]
+name = "hyper-on-workers"
+version = "0.1.0"
+dependencies = [
+ "console_error_panic_hook",
+ "hyper",
+ "tokio",
+ "wasm-bindgen-futures",
+ "worker",
+]
+
+[[package]]
+name = "hyper-tls"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905"
+dependencies = [
+ "bytes",
+ "hyper",
+ "native-tls",
+ "tokio",
+ "tokio-native-tls",
+]
+
+[[package]]
+name = "iana-time-zone"
+version = "0.1.57"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys",
+ "iana-time-zone-haiku",
+ "js-sys",
+ "wasm-bindgen",
+ "windows",
+]
+
+[[package]]
+name = "iana-time-zone-haiku"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "id-arena"
+version = "2.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25a2bc672d1148e28034f176e01fffebb08b35768468cc954630da77a1449005"
+
+[[package]]
+name = "idna"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
+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 = "io-lifetimes"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2"
+dependencies = [
+ "hermit-abi 0.3.1",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "ipnet"
+version = "2.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12b6ee2129af8d4fb011108c73d99a1b83a85977f23b82460c0ae2e25bb4b57f"
+
+[[package]]
+name = "itoa"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6"
+
+[[package]]
+name = "js-sys"
+version = "0.3.63"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2f37a4a5928311ac501dee68b3c7613a1037d0edb30c8e5427bd832d55d1b790"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "leb128"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67"
+
+[[package]]
+name = "libc"
+version = "0.2.146"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f92be4933c13fd498862a9e02a3055f8a8d9c039ce33db97306fd5a6caa7f29b"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519"
+
+[[package]]
+name = "lock_api"
+version = "0.4.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16"
+dependencies = [
+ "autocfg",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4"
+
+[[package]]
+name = "matchit"
+version = "0.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9376a4f0340565ad675d11fc1419227faf5f60cd7ac9cb2e7185a471f30af833"
+
+[[package]]
+name = "md-5"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6365506850d44bff6e2fbcb5176cf63650e48bd45ef2fe2665ae1570e0f4b9ca"
+dependencies = [
+ "digest",
+]
+
+[[package]]
+name = "md5"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "490cc448043f947bae3cbee9c203358d62dbee0db12107a74be5c30ccfd09771"
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "mime"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
+
+[[package]]
+name = "mime_guess"
+version = "2.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef"
+dependencies = [
+ "mime",
+ "unicase",
+]
+
+[[package]]
+name = "miniz_oxide"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "mio"
+version = "0.8.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2"
+dependencies = [
+ "libc",
+ "wasi",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "native-tls"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e"
+dependencies = [
+ "lazy_static",
+ "libc",
+ "log",
+ "openssl",
+ "openssl-probe",
+ "openssl-sys",
+ "schannel",
+ "security-framework",
+ "security-framework-sys",
+ "tempfile",
+]
+
+[[package]]
+name = "nu-ansi-term"
+version = "0.46.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84"
+dependencies = [
+ "overload",
+ "winapi",
+]
+
+[[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.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b"
+dependencies = [
+ "hermit-abi 0.2.6",
+ "libc",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
+
+[[package]]
+name = "openssl"
+version = "0.10.54"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "69b3f656a17a6cbc115b5c7a40c616947d213ba182135b014d6051b73ab6f019"
+dependencies = [
+ "bitflags",
+ "cfg-if",
+ "foreign-types",
+ "libc",
+ "once_cell",
+ "openssl-macros",
+ "openssl-sys",
+]
+
+[[package]]
+name = "openssl-macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.18",
+]
+
+[[package]]
+name = "openssl-probe"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
+
+[[package]]
+name = "openssl-sys"
+version = "0.9.88"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c2ce0f250f34a308dcfdbb351f511359857d4ed2134ba715a4eadd46e1ffd617"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "overload"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
+
+[[package]]
+name = "parking_lot"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+dependencies = [
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall 0.3.5",
+ "smallvec",
+ "windows-targets",
+]
+
+[[package]]
+name = "parse-zoneinfo"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c705f256449c60da65e11ff6626e0c16a0a0b96aaa348de61376b249bc340f41"
+dependencies = [
+ "regex",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94"
+
+[[package]]
+name = "phf"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "928c6535de93548188ef63bb7c4036bd415cd8f36ad25af44b9789b2ee72a48c"
+dependencies = [
+ "phf_shared",
+]
+
+[[package]]
+name = "phf_codegen"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a56ac890c5e3ca598bbdeaa99964edb5b0258a583a9eb6ef4e89fc85d9224770"
+dependencies = [
+ "phf_generator",
+ "phf_shared",
+]
+
+[[package]]
+name = "phf_generator"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1181c94580fa345f50f19d738aaa39c0ed30a600d95cb2d3e23f94266f14fbf"
+dependencies = [
+ "phf_shared",
+ "rand",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1fb5f6f826b772a8d4c0394209441e7d37cbbb967ae9c7e0e8134365c9ee676"
+dependencies = [
+ "siphasher",
+]
+
+[[package]]
+name = "pin-project"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c95a7476719eab1e366eaf73d0260af3021184f18177925b07f54b30089ceead"
+dependencies = [
+ "pin-project-internal",
+]
+
+[[package]]
+name = "pin-project-internal"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39407670928234ebc5e6e580247dd567ad73a3578460c5990f9503df207e8f07"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.18",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
+
+[[package]]
+name = "postgres-protocol"
+version = "0.6.5"
+source = "git+https://github.com/sfackler/rust-postgres?branch=master#790af54a0fdd5c487e77dc9a25d82921ee31ffe6"
+dependencies = [
+ "base64 0.21.2",
+ "byteorder",
+ "bytes",
+ "fallible-iterator",
+ "getrandom",
+ "hmac",
+ "md-5",
+ "memchr",
+ "rand",
+ "sha2",
+ "stringprep",
+]
+
+[[package]]
+name = "postgres-types"
+version = "0.2.5"
+source = "git+https://github.com/sfackler/rust-postgres?branch=master#790af54a0fdd5c487e77dc9a25d82921ee31ffe6"
+dependencies = [
+ "bytes",
+ "fallible-iterator",
+ "postgres-protocol",
+]
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.60"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dec2b086b7a862cf4de201096214fa870344cf922b2b30c167badb3af3195406"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b9ab9c7eadfd8df19006f1cf1a4aed13540ed5cbc047010ece5826e10825488"
+dependencies = [
+ "proc-macro2",
+]
+
+[[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",
+]
+
+[[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",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "redox_users"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b"
+dependencies = [
+ "getrandom",
+ "redox_syscall 0.2.16",
+ "thiserror",
+]
+
+[[package]]
+name = "regex"
+version = "1.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d0ab3ca65655bb1e41f2a8c8cd662eb4fb035e67c3f78da1d61dffe89d07300f"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "436b050e76ed2903236f032a59761c1eb99e1b0aead2c257922771dab1fc8c78"
+
+[[package]]
+name = "reqwest"
+version = "0.11.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cde824a14b7c14f85caff81225f411faacc04a2013f41670f41443742b1c1c55"
+dependencies = [
+ "base64 0.21.2",
+ "bytes",
+ "encoding_rs",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "hyper",
+ "hyper-tls",
+ "ipnet",
+ "js-sys",
+ "log",
+ "mime",
+ "mime_guess",
+ "native-tls",
+ "once_cell",
+ "percent-encoding",
+ "pin-project-lite",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "tokio",
+ "tokio-native-tls",
+ "tokio-util",
+ "tower-service",
+ "url",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "wasm-streams 0.2.3",
+ "web-sys",
+ "winreg",
+]
+
+[[package]]
+name = "retry"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9166d72162de3575f950507683fac47e30f6f2c3836b71b7fbc61aa517c9c5f4"
+dependencies = [
+ "rand",
+]
+
+[[package]]
+name = "ring"
+version = "0.16.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc"
+dependencies = [
+ "cc",
+ "libc",
+ "once_cell",
+ "spin",
+ "untrusted",
+ "web-sys",
+ "winapi",
+]
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
+
+[[package]]
+name = "rustix"
+version = "0.37.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b96e891d04aa506a6d1f318d2771bcb1c7dfda84e126660ace067c9b474bb2c0"
+dependencies = [
+ "bitflags",
+ "errno",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "rustls"
+version = "0.20.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fff78fc74d175294f4e83b28343315ffcfb114b156f0185e9741cb5570f50e2f"
+dependencies = [
+ "log",
+ "ring",
+ "sct",
+ "webpki",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041"
+
+[[package]]
+name = "safemem"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072"
+
+[[package]]
+name = "schannel"
+version = "0.1.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3"
+dependencies = [
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "scoped-tls"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294"
+
+[[package]]
+name = "scopeguard"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+
+[[package]]
+name = "sct"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "security-framework"
+version = "2.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fc758eb7bffce5b308734e9b0c1468893cae9ff70ebf13e7090be8dcbcc83a8"
+dependencies = [
+ "bitflags",
+ "core-foundation",
+ "core-foundation-sys",
+ "libc",
+ "security-framework-sys",
+]
+
+[[package]]
+name = "security-framework-sys"
+version = "2.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f51d0c0d83bec45f16480d0ce0058397a69e48fcdc52d1dc8855fb68acbd31a7"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.164"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e8c8cf938e98f769bc164923b06dce91cea1751522f46f8466461af04c9027d"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde-wasm-bindgen"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3b143e2833c57ab9ad3ea280d21fd34e285a42837aeb0ee301f4f41890fa00e"
+dependencies = [
+ "js-sys",
+ "serde",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.164"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9735b638ccc51c28bf6914d90a2e9725b377144fc612c49a611fddd1b631d68"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.18",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.96"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_urlencoded"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
+dependencies = [
+ "form_urlencoded",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "sha-1"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f5058ada175748e33390e40e872bd0fe59a19f265d0158daa551c5a88a76009c"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "sha2"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "sharded-slab"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31"
+dependencies = [
+ "lazy_static",
+]
+
+[[package]]
+name = "siphasher"
+version = "0.3.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de"
+
+[[package]]
+name = "slab"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
+
+[[package]]
+name = "socket2"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "socket2"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2538b18701741680e0322a2302176d3253a35388e2e62f172f64f4f16605f877"
+dependencies = [
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "spin"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
+
+[[package]]
+name = "stringprep"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ee348cb74b87454fff4b551cbf727025810a004f88aeacae7f85b87f4e9a1c1"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "subtle"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc"
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "32d41677bcbe24c20c52e7c70b0d8db04134c5d1066bf98662e2871ad200ea3e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "tar"
+version = "0.4.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b55807c0344e1e6c04d7c965f5289c39a8d94ae23ed5c0b57aabac549f871c6"
+dependencies = [
+ "filetime",
+ "libc",
+ "xattr",
+]
+
+[[package]]
+name = "tempfile"
+version = "3.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31c0432476357e58790aaa47a8efb0c5138f137343f3b5f23bd36a27e3b0a6d6"
+dependencies = [
+ "autocfg",
+ "cfg-if",
+ "fastrand",
+ "redox_syscall 0.3.5",
+ "rustix",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.18",
+]
+
+[[package]]
+name = "thread_local"
+version = "1.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+]
+
+[[package]]
+name = "time"
+version = "0.3.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea9e1b3cf1243ae005d9e74085d4d542f3125458f3a81af210d901dcd7411efd"
+dependencies = [
+ "itoa",
+ "js-sys",
+ "serde",
+ "time-core",
+ "time-macros",
+]
+
+[[package]]
+name = "time-core"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb"
+
+[[package]]
+name = "time-macros"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "372950940a5f07bf38dbe211d7283c9e6d7327df53794992d293e534c733d09b"
+dependencies = [
+ "time-core",
+]
+
+[[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.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+[[package]]
+name = "tokio"
+version = "1.28.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94d7b1cfd2aa4011f2de74c2c4c63665e27a71006b0a192dcd2710272e73dfa2"
+dependencies = [
+ "autocfg",
+ "bytes",
+ "libc",
+ "mio",
+ "num_cpus",
+ "pin-project-lite",
+ "socket2 0.4.9",
+ "tokio-macros",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "tokio-macros"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.18",
+]
+
+[[package]]
+name = "tokio-native-tls"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2"
+dependencies = [
+ "native-tls",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-postgres"
+version = "0.7.8"
+source = "git+https://github.com/sfackler/rust-postgres?branch=master#790af54a0fdd5c487e77dc9a25d82921ee31ffe6"
+dependencies = [
+ "async-trait",
+ "byteorder",
+ "bytes",
+ "fallible-iterator",
+ "futures-channel",
+ "futures-util",
+ "log",
+ "parking_lot",
+ "percent-encoding",
+ "phf",
+ "pin-project-lite",
+ "postgres-protocol",
+ "postgres-types",
+ "socket2 0.5.3",
+ "tokio",
+ "tokio-util",
+]
+
+[[package]]
+name = "tokio-postgres-on-workers"
+version = "0.1.0"
+dependencies = [
+ "tokio-postgres",
+ "worker",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.7.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-sink",
+ "pin-project-lite",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "tower-service"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
+
+[[package]]
+name = "tracing"
+version = "0.1.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
+dependencies = [
+ "cfg-if",
+ "pin-project-lite",
+ "tracing-attributes",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-attributes"
+version = "0.1.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f57e3ca2a01450b1a921183a9c9cbfda207fd822cef4ccb00a65402cbba7a74"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.18",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a"
+dependencies = [
+ "once_cell",
+ "valuable",
+]
+
+[[package]]
+name = "tracing-log"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922"
+dependencies = [
+ "lazy_static",
+ "log",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-on-workers"
+version = "0.1.0"
+dependencies = [
+ "time",
+ "tracing",
+ "tracing-subscriber",
+ "tracing-web",
+ "worker",
+]
+
+[[package]]
+name = "tracing-serde"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc6b213177105856957181934e4920de57730fc69bf42c37ee5bb664d406d9e1"
+dependencies = [
+ "serde",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-subscriber"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77"
+dependencies = [
+ "nu-ansi-term",
+ "serde",
+ "serde_json",
+ "sharded-slab",
+ "smallvec",
+ "thread_local",
+ "time",
+ "tracing-core",
+ "tracing-log",
+ "tracing-serde",
+]
+
+[[package]]
+name = "tracing-web"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ff5efc53ed5a7c4b99b3dd24fd10f41e7aa1b284a4e64ae9167d97e31afe124"
+dependencies = [
+ "js-sys",
+ "tracing-core",
+ "tracing-subscriber",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
+
+[[package]]
+name = "tungstenite"
+version = "0.17.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e27992fd6a8c29ee7eef28fc78349aa244134e10ad447ce3b9f0ac0ed0fa4ce0"
+dependencies = [
+ "base64 0.13.1",
+ "byteorder",
+ "bytes",
+ "http",
+ "httparse",
+ "log",
+ "rand",
+ "sha-1",
+ "thiserror",
+ "url",
+ "utf-8",
+]
+
+[[package]]
+name = "typenum"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba"
+
+[[package]]
+name = "unicase"
+version = "2.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6"
+dependencies = [
+ "version_check",
+]
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b15811caf2415fb889178633e7724bad2509101cde276048e013b9def5e51fa0"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
+
+[[package]]
+name = "untrusted"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
+
+[[package]]
+name = "ureq"
+version = "2.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "338b31dd1314f68f3aabf3ed57ab922df95ffcd902476ca7ba3c4ce7b908c46d"
+dependencies = [
+ "base64 0.13.1",
+ "flate2",
+ "log",
+ "once_cell",
+ "rustls",
+ "url",
+ "webpki",
+ "webpki-roots",
+]
+
+[[package]]
+name = "url"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50bff7831e19200a85b17131d085c25d7811bc4e186efdaf54bbd132994a88cb"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "percent-encoding",
+]
+
+[[package]]
+name = "utf-8"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9"
+
+[[package]]
+name = "uuid"
+version = "1.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "345444e32442451b267fc254ae85a209c64be56d2890e601a0c37ff0c3c5ecd2"
+dependencies = [
+ "getrandom",
+ "serde",
+]
+
+[[package]]
+name = "valuable"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
+
+[[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 = "walrus"
+version = "0.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4eb08e48cde54c05f363d984bb54ce374f49e242def9468d2e1b6c2372d291f8"
+dependencies = [
+ "anyhow",
+ "id-arena",
+ "leb128",
+ "log",
+ "walrus-macro",
+ "wasmparser",
+]
+
+[[package]]
+name = "walrus-macro"
+version = "0.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0a6e5bd22c71e77d60140b0bd5be56155a37e5bd14e24f5f87298040d0cc40d7"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "want"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0"
+dependencies = [
+ "log",
+ "try-lock",
+]
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5bba0e8cb82ba49ff4e229459ff22a191bbe9a1cb3a341610c9c33efc27ddf73"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19b04bc93f9d6bdee709f6bd2118f57dd6679cf1176a1af464fca3ab0d66d8fb"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.18",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-cli-support"
+version = "0.2.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8315d6503415e5d44ff64f1ba34aefd8264c561df17e0f1c8eb8c96bde79c45e"
+dependencies = [
+ "anyhow",
+ "base64 0.9.3",
+ "log",
+ "rustc-demangle",
+ "serde_json",
+ "tempfile",
+ "unicode-ident",
+ "walrus",
+ "wasm-bindgen-externref-xform",
+ "wasm-bindgen-multi-value-xform",
+ "wasm-bindgen-shared",
+ "wasm-bindgen-threads-xform",
+ "wasm-bindgen-wasm-conventions",
+ "wasm-bindgen-wasm-interpreter",
+]
+
+[[package]]
+name = "wasm-bindgen-externref-xform"
+version = "0.2.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4522bf3be16c6274c87a5a2c5d2a62efa80253b025f8e813f9682d0d6a8a8fca"
+dependencies = [
+ "anyhow",
+ "walrus",
+]
+
+[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.36"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d1985d03709c53167ce907ff394f5316aa22cb4e12761295c5dc57dacb6297e"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14d6b024f1a526bb0234f52840389927257beb670610081360e5a03c5df9c258"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e128beba882dd1eb6200e1dc92ae6c5dbaa4311aa7bb211ca035779e5efc39f8"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.18",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-multi-value-xform"
+version = "0.2.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "113256596776ebb4b243512d3711e73d5475eaeff373e1ae65427c66e5aa2073"
+dependencies = [
+ "anyhow",
+ "walrus",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed9d5b4305409d1fc9482fee2d7f9bcbf24b3972bf59817ef757e23982242a93"
+
+[[package]]
+name = "wasm-bindgen-test"
+version = "0.3.36"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c9e636f3a428ff62b3742ebc3c70e254dfe12b8c2b469d688ea59cdd4abcf502"
+dependencies = [
+ "console_error_panic_hook",
+ "js-sys",
+ "scoped-tls",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "wasm-bindgen-test-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-test-macro"
+version = "0.3.36"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f18c1fad2f7c4958e7bcce014fa212f59a65d5e3721d0f77e6c0b27ede936ba3"
+dependencies = [
+ "proc-macro2",
+ "quote",
+]
+
+[[package]]
+name = "wasm-bindgen-threads-xform"
+version = "0.2.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89106aaf83a2b80464fc8f60a074a4575135b73a491e174f35bbeae6ff0d7ec6"
+dependencies = [
+ "anyhow",
+ "walrus",
+ "wasm-bindgen-wasm-conventions",
+]
+
+[[package]]
+name = "wasm-bindgen-wasm-conventions"
+version = "0.2.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "84e5ad27a7930400994cb40823d3d4a7ef235fac52d0c75ebd61fa40eba994a8"
+dependencies = [
+ "anyhow",
+ "walrus",
+]
+
+[[package]]
+name = "wasm-bindgen-wasm-interpreter"
+version = "0.2.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e69500063b7b20f3e9422d78c2b381dd192c7c4ebaef34d205332877cd78e0d3"
+dependencies = [
+ "anyhow",
+ "log",
+ "walrus",
+ "wasm-bindgen-wasm-conventions",
+]
+
+[[package]]
+name = "wasm-streams"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6bbae3363c08332cadccd13b67db371814cd214c2524020932f0804b8cf7c078"
+dependencies = [
+ "futures-util",
+ "js-sys",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+]
+
+[[package]]
+name = "wasm-streams"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4609d447824375f43e1ffbc051b50ad8f4b3ae8219680c94452ea05eb240ac7"
+dependencies = [
+ "futures-util",
+ "js-sys",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+]
+
+[[package]]
+name = "wasmparser"
+version = "0.77.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fe3d5405e9ea6c1317a656d6e0820912d8b7b3607823a7596117c8f666daf6f"
+
+[[package]]
+name = "web-sys"
+version = "0.3.63"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3bdd9ef4e984da1187bf8110c5cf5b845fbc87a23602cdf912386a76fcd3a7c2"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "webpki"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "webpki-roots"
+version = "0.22.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87"
+dependencies = [
+ "webpki",
+]
+
+[[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-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f"
+dependencies = [
+ "windows-targets",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5"
+dependencies = [
+ "windows_aarch64_gnullvm 0.48.0",
+ "windows_aarch64_msvc 0.48.0",
+ "windows_i686_gnu 0.48.0",
+ "windows_i686_msvc 0.48.0",
+ "windows_x86_64_gnu 0.48.0",
+ "windows_x86_64_gnullvm 0.48.0",
+ "windows_x86_64_msvc 0.48.0",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
+
+[[package]]
+name = "winreg"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "worker"
+version = "0.0.18"
+dependencies = [
+ "async-trait",
+ "chrono",
+ "chrono-tz",
+ "futures-channel",
+ "futures-util",
+ "http",
+ "js-sys",
+ "matchit",
+ "pin-project",
+ "serde",
+ "serde-wasm-bindgen",
+ "serde_json",
+ "tokio",
+ "url",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "wasm-streams 0.3.0",
+ "web-sys",
+ "worker-kv",
+ "worker-macros",
+ "worker-sys",
+]
+
+[[package]]
+name = "worker-build"
+version = "0.0.10"
+dependencies = [
+ "anyhow",
+ "dirs-next",
+ "flate2",
+ "tar",
+ "ureq",
+ "wasm-bindgen-cli-support",
+]
+
+[[package]]
+name = "worker-kv"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d4b9fe1a87b7aef252fceb4f30bf6303036a5de329c81ccad9be9c35d1fdbc7"
+dependencies = [
+ "js-sys",
+ "serde",
+ "serde-wasm-bindgen",
+ "serde_json",
+ "thiserror",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+]
+
+[[package]]
+name = "worker-macros"
+version = "0.0.10"
+dependencies = [
+ "async-trait",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.18",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "wasm-bindgen-macro-support",
+ "worker-sys",
+]
+
+[[package]]
+name = "worker-sandbox"
+version = "0.1.0"
+dependencies = [
+ "blake2",
+ "cfg-if",
+ "chrono",
+ "console_error_panic_hook",
+ "futures-channel",
+ "futures-util",
+ "getrandom",
+ "hex",
+ "http",
+ "md5",
+ "rand",
+ "regex",
+ "reqwest",
+ "retry",
+ "serde",
+ "serde-wasm-bindgen",
+ "serde_json",
+ "tokio",
+ "tungstenite",
+ "uuid",
+ "wasm-bindgen-test",
+ "worker",
+]
+
+[[package]]
+name = "worker-sys"
+version = "0.0.10"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "xattr"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d1526bbe5aaeb5eb06885f4d987bcdfa5e23187055de9b83fe00156a821fabc"
+dependencies = [
+ "libc",
+]
diff --git a/nixpkgs/pkgs/development/tools/worker-build/default.nix b/nixpkgs/pkgs/development/tools/worker-build/default.nix
new file mode 100644
index 000000000000..620fd87142ff
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/worker-build/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "worker-build";
+  version = "0.0.18";
+
+  src = fetchFromGitHub {
+    owner = "cloudflare";
+    repo = "workers-rs";
+    rev = "v${version}";
+    hash = "sha256-z6m14IbMzgycwnQpA28e4taokDSVpfZOKIRmFIwLjbg=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "postgres-protocol-0.6.5" = "sha256-xLyaappu7ebtKOoHY49dvjDEcuRg8IOv1bNH9RxSUcM=";
+    };
+  };
+
+  buildInputs = lib.optionals stdenv.isDarwin [ Security ];
+
+  buildAndTestSubdir = "worker-build";
+
+  # missing some module upstream to run the tests
+  doCheck = false;
+
+  meta = with lib; {
+    description = "This is a tool to be used as a custom build command for a Cloudflare Workers `workers-rs` project.";
+    homepage = "https://github.com/cloudflare/workers-rs";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ happysalada ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/wp4nix/default.nix b/nixpkgs/pkgs/development/tools/wp4nix/default.nix
new file mode 100644
index 000000000000..08a202784ce0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/wp4nix/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, buildGoModule
+, fetchFromGitLab
+, nix
+, subversion
+, makeWrapper
+}:
+
+buildGoModule rec {
+  pname = "wp4nix";
+  version = "1.0.0";
+
+  src = fetchFromGitLab {
+    domain = "git.helsinki.tools";
+    owner = "helsinki-systems";
+    repo = "wp4nix";
+    rev = "v${version}";
+    sha256 = "sha256-WJteeFUMr684yZEtUP13MqRjJ1UAeo48AzOPdLEE65w=";
+  };
+
+  vendorHash = null;
+
+  nativeBuildInputs = [
+    makeWrapper
+  ];
+
+  postInstall = ''
+    wrapProgram $out/bin/wp4nix \
+      --prefix PATH : ${lib.makeBinPath [ nix subversion ]}
+  '';
+
+  meta = with lib; {
+    description = "Packaging helper for Wordpress themes and plugins";
+    homepage = "https://git.helsinki.tools/helsinki-systems/wp4nix";
+    license = licenses.mit;
+    maintainers = with maintainers; [ onny ];
+    platforms = platforms.unix;
+  };
+}
+
diff --git a/nixpkgs/pkgs/development/tools/wrangler_1/default.nix b/nixpkgs/pkgs/development/tools/wrangler_1/default.nix
new file mode 100644
index 000000000000..44bd00cf69aa
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/wrangler_1/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, pkg-config, openssl, curl, Security, CoreServices, CoreFoundation, libiconv }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "wrangler";
+  version = "1.21.0";
+
+  src = fetchFromGitHub {
+    owner = "cloudflare";
+    repo = "wrangler";
+    rev = "v${version}";
+    sha256 = "sha256-GfuU+g4tPU3TorzymEa9q8n4uKYsG0ZTz8rJirGOLfQ=";
+  };
+
+  cargoHash = "sha256-tPLqDm6kOVBKrLvhgZ9xD6vVBNjBBk9uLF7WOPgz8qE=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ openssl ]
+    ++ lib.optionals stdenv.isDarwin [ curl CoreFoundation CoreServices Security libiconv ];
+
+  OPENSSL_NO_VENDOR = 1;
+
+  # tries to use "/homeless-shelter" and fails
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A CLI tool designed for folks who are interested in using Cloudflare Workers";
+    homepage = "https://github.com/cloudflare/wrangler";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ Br1ght0ne ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/wxformbuilder/default.nix b/nixpkgs/pkgs/development/tools/wxformbuilder/default.nix
new file mode 100644
index 000000000000..e8f888680bad
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/wxformbuilder/default.nix
@@ -0,0 +1,68 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, darwin
+, makeWrapper
+, shared-mime-info
+, boost
+, wxGTK32
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "wxformbuilder";
+  version = "4.0.0";
+
+  src = fetchFromGitHub {
+    owner = "wxFormBuilder";
+    repo = "wxFormBuilder";
+    rev = "v${finalAttrs.version}";
+    fetchSubmodules = true;
+    leaveDotGit = true;
+    postFetch = ''
+      substituteInPlace $out/.git-properties \
+        --replace "\$Format:%h\$" "$(git -C $out rev-parse --short HEAD)" \
+        --replace "\$Format:%(describe)\$" "$(git -C $out rev-parse --short HEAD)"
+      rm -rf $out/.git
+    '';
+    hash = "sha256-Lqta+u9WVwUREsR7aH+2DJn0oM5QwlwRSBImuwNkmS4=";
+  };
+
+  postPatch = ''
+    substituteInPlace third_party/tinyxml2/cmake/tinyxml2.pc.in \
+      --replace '$'{exec_prefix}/@CMAKE_INSTALL_LIBDIR@ @CMAKE_INSTALL_FULL_LIBDIR@ \
+      --replace '$'{prefix}/@CMAKE_INSTALL_INCLUDEDIR@ @CMAKE_INSTALL_FULL_INCLUDEDIR@
+    sed -i '/fixup_bundle/d' cmake/macros.cmake
+  '';
+
+  nativeBuildInputs = [
+    cmake
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.sigtool
+    makeWrapper
+  ] ++ lib.optionals stdenv.isLinux [
+    shared-mime-info
+  ];
+
+  buildInputs = [
+    boost
+    wxGTK32
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Cocoa
+  ];
+
+  postInstall = lib.optionalString stdenv.isDarwin ''
+    mkdir -p $out/{Applications,bin}
+    mv $out/wxFormBuilder.app $out/Applications
+    makeWrapper $out/Applications/wxFormBuilder.app/Contents/MacOS/wxFormBuilder $out/bin/wxformbuilder
+  '';
+
+  meta = with lib; {
+    description = "RAD tool for wxWidgets GUI design";
+    homepage = "https://github.com/wxFormBuilder/wxFormBuilder";
+    license = licenses.gpl2Only;
+    mainProgram = "wxformbuilder";
+    maintainers = with maintainers; [ matthuszagh wegank ];
+    platforms = platforms.unix;
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/xc/default.nix b/nixpkgs/pkgs/development/tools/xc/default.nix
new file mode 100644
index 000000000000..0e09b77e453e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/xc/default.nix
@@ -0,0 +1,29 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "xc";
+  version = "0.8.0";
+
+  src = fetchFromGitHub {
+    owner = "joerdav";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-vTyCS85xbJnAgbasWD6LFxij9EezzlJ1pyvCJptqmOU=";
+  };
+
+  vendorHash = "sha256-EbIuktQ2rExa2DawyCamTrKRC1yXXMleRB8/pcKFY5c=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=main.version=${version}"
+  ];
+
+  meta = with lib; {
+    description = "Markdown defined task runner";
+    homepage = "https://xcfile.dev/";
+    changelog = "https://github.com/joerdav/xc/releases/tag/${src.rev}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda joerdav ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/xcbuild/default.nix b/nixpkgs/pkgs/development/tools/xcbuild/default.nix
new file mode 100644
index 000000000000..8dc527c0e1f5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/xcbuild/default.nix
@@ -0,0 +1,80 @@
+{ lib, stdenv, cmake, fetchFromGitHub, zlib, libxml2, libpng
+, CoreServices, CoreGraphics, ImageIO, ninja }:
+
+let
+  googletest = fetchFromGitHub {
+    owner  = "google";
+    repo   = "googletest";
+    rev    = "43359642a1c16ad3f4fc575c7edd0cb935810815";
+    sha256 = "0y4xaah62fjr3isaryc3vfz3mn9xflr00vchdimj8785milxga4q";
+  };
+
+  linenoise = fetchFromGitHub {
+    owner  = "antirez";
+    repo   = "linenoise";
+    rev    = "c894b9e59f02203dbe4e2be657572cf88c4230c3";
+    sha256 = "0wasql7ph5g473zxhc2z47z3pjp42q0dsn4gpijwzbxawid71b4w";
+  };
+in stdenv.mkDerivation {
+  pname = "xcbuild";
+
+  # Once a version is released that includes
+  # https://github.com/facebook/xcbuild/commit/183c087a6484ceaae860c6f7300caf50aea0d710,
+  # we can stop doing this -pre thing.
+  version = "0.1.2-pre";
+
+  src = fetchFromGitHub {
+    owner  = "facebook";
+    repo   = "xcbuild";
+    rev    = "32b9fbeb69bfa2682bd0351ec2f14548aaedd554";
+    sha256 = "1xxwg2849jizxv0g1hy0b1m3i7iivp9bmc4f5pi76swsn423d41m";
+  };
+
+  patches = [ ./includes.patch ];
+
+  prePatch = ''
+    rmdir ThirdParty/*
+    cp -r --no-preserve=all ${googletest} ThirdParty/googletest
+    cp -r --no-preserve=all ${linenoise} ThirdParty/linenoise
+  '';
+
+  postPatch = lib.optionalString (!stdenv.isDarwin) ''
+    # Fix build on gcc-13 due to missing includes
+    sed -e '1i #include <cstdint>' -i \
+      Libraries/libutil/Headers/libutil/Permissions.h \
+      Libraries/pbxbuild/Headers/pbxbuild/Tool/AuxiliaryFile.h \
+      Libraries/pbxbuild/Headers/pbxbuild/Tool/Invocation.h
+
+    # Avoid a glibc >= 2.25 deprecation warning that gets fatal via -Werror.
+    sed 1i'#include <sys/sysmacros.h>' \
+      -i Libraries/xcassets/Headers/xcassets/Slot/SystemVersion.h
+  '' + lib.optionalString stdenv.isDarwin ''
+    # Apple Open Sourced LZFSE, but not libcompression, and it isn't
+    # part of an impure framework we can add
+    substituteInPlace Libraries/libcar/Sources/Rendition.cpp \
+      --replace "#if HAVE_LIBCOMPRESSION" "#if 0"
+  '';
+
+  # TODO: instruct cmake not to put it in /usr, rather than cleaning up
+  postInstall = ''
+    mv $out/usr/* $out
+    rmdir $out/usr
+    cp liblinenoise.* $out/lib/
+  '';
+
+  env.NIX_CFLAGS_COMPILE = "-Wno-error";
+
+  cmakeFlags = [ "-GNinja" ];
+
+  nativeBuildInputs = [ cmake ninja ];
+  buildInputs = [ zlib libxml2 libpng ]
+    ++ lib.optionals stdenv.isDarwin [ CoreServices CoreGraphics ImageIO ];
+
+  meta = with lib; {
+    description = "Xcode-compatible build tool";
+    homepage = "https://github.com/facebook/xcbuild";
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ copumpkin matthewbauer ];
+    license = with licenses; [ bsd2 bsd3 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/xcbuild/includes.patch b/nixpkgs/pkgs/development/tools/xcbuild/includes.patch
new file mode 100644
index 000000000000..7a05a33eb678
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/xcbuild/includes.patch
@@ -0,0 +1,10 @@
+--- a/Libraries/plist/Sources/Format/Encoding.cpp
++++ b/Libraries/plist/Sources/Format/Encoding.cpp
+@@ -11,6 +11,7 @@
+ #include <plist/Format/unicode.h>
+ 
+ #include <cassert>
++#include <cstdlib> /* abort() */
+ 
+ #if defined(__linux__)
+ #include <endian.h>
diff --git a/nixpkgs/pkgs/development/tools/xcbuild/platforms.nix b/nixpkgs/pkgs/development/tools/xcbuild/platforms.nix
new file mode 100644
index 000000000000..0108ac8ef697
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/xcbuild/platforms.nix
@@ -0,0 +1,301 @@
+{ stdenv, runCommand, lib, sdks, xcodePlatform, writeText }:
+
+let
+
+  inherit (lib.generators) toPlist;
+
+  Info = {
+    CFBundleIdentifier = "com.apple.platform.${lib.toLower xcodePlatform}";
+    Type = "Platform";
+    Name = lib.toLower xcodePlatform;
+  };
+
+  Version = {
+    ProjectName = "OSXPlatformSupport";
+  };
+
+  # These files are all based off of Xcode spec fies found in
+  # /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/Library/Xcode/PrivatePlugIns/IDEOSXSupportCore.ideplugin/Contents/Resources.
+
+  # Based off of the "MacOSX Architectures.xcspec" file. All i386 stuff
+  # is removed because NixPkgs only supports darwin-x86_64 and darwin-arm64.
+  Architectures = [
+    {
+      Identifier = "Standard";
+      Type = "Architecture";
+      Name = "Standard Architectures (Apple Silicon, 64-bit Intel)";
+      RealArchitectures = [ "arm64" "x86_64" ];
+      ArchitectureSetting = "ARCHS_STANDARD";
+    }
+    {
+      Identifier = "Universal";
+      Type = "Architecture";
+      Name = "Universal (Apple Silicon, 64-bit Intel)";
+      RealArchitectures = [ "arm64" "x86_64" ];
+      ArchitectureSetting = "ARCHS_STANDARD_32_64_BIT";
+    }
+    {
+      Identifier = "Native";
+      Type = "Architecture";
+      Name = "Native Architecture of Build Machine";
+      ArchitectureSetting = "NATIVE_ARCH_ACTUAL";
+    }
+    {
+      Identifier = "Standard64bit";
+      Type = "Architecture";
+      Name = "Apple Silicon, 64-bit Intel";
+      RealArchitectures = [ "arm64" "x86_64" ];
+      ArchitectureSetting = "ARCHS_STANDARD_64_BIT";
+    }
+    {
+      Identifier = if stdenv.isAarch64 then "arm64" else "x86_64";
+      Type = "Architecture";
+      Name = "Apple Silicon or Intel 64-bit";
+    }
+    {
+      Identifier = "Standard_Including_64_bit";
+      Type = "Architecture";
+      Name = "Standard Architectures (including 64-bit)";
+      RealArchitectures = [ "arm64" "x86_64" ];
+      ArchitectureSetting = "ARCHS_STANDARD_INCLUDING_64_BIT";
+    }
+  ];
+
+  # Based off of the "MacOSX Package Types.xcspec" file. Only keep the
+  # bare minimum needed.
+  PackageTypes = [
+    {
+      Identifier = "com.apple.package-type.mach-o-executable";
+      Type = "PackageType";
+      Name = "Mach-O Executable";
+      DefaultBuildSettings = {
+        EXECUTABLE_NAME = "$(EXECUTABLE_PREFIX)$(PRODUCT_NAME)$(EXECUTABLE_VARIANT_SUFFIX)$(EXECUTABLE_SUFFIX)";
+        EXECUTABLE_PATH = "$(EXECUTABLE_NAME)";
+      };
+      ProductReference = {
+        FileType = "compiled.mach-o.executable";
+        Name = "$(EXECUTABLE_NAME)";
+      };
+    }
+    {
+      Identifier = "com.apple.package-type.mach-o-objfile";
+      Type = "PackageType";
+      Name = "Mach-O Object File";
+      DefaultBuildSettings = {
+        EXECUTABLE_NAME = "$(EXECUTABLE_PREFIX)$(PRODUCT_NAME)$(EXECUTABLE_VARIANT_SUFFIX)$(EXECUTABLE_SUFFIX)";
+        EXECUTABLE_PATH = "$(EXECUTABLE_NAME)";
+      };
+      ProductReference = {
+        FileType = "compiled.mach-o.objfile";
+        Name = "$(EXECUTABLE_NAME)";
+      };
+    }
+    {
+      Identifier = "com.apple.package-type.mach-o-dylib";
+      Type = "PackageType";
+      Name = "Mach-O Dynamic Library";
+      DefaultBuildSettings = {
+        EXECUTABLE_NAME = "$(EXECUTABLE_PREFIX)$(PRODUCT_NAME)$(EXECUTABLE_VARIANT_SUFFIX)$(EXECUTABLE_SUFFIX)";
+        EXECUTABLE_PATH = "$(EXECUTABLE_NAME)";
+      };
+      ProductReference = {
+        FileType = "compiled.mach-o.dylib";
+        Name = "$(EXECUTABLE_NAME)";
+      };
+    }
+    {
+      Identifier = "com.apple.package-type.static-library";
+      Type = "PackageType";
+      Name = "Mach-O Static Library";
+      DefaultBuildSettings = {
+        EXECUTABLE_PREFIX = "lib";
+        EXECUTABLE_SUFFIX = ".a";
+        EXECUTABLE_NAME = "$(EXECUTABLE_PREFIX)$(PRODUCT_NAME)$(EXECUTABLE_VARIANT_SUFFIX)$(EXECUTABLE_SUFFIX)";
+        EXECUTABLE_PATH = "$(EXECUTABLE_NAME)";
+      };
+      ProductReference = {
+        FileType = "archive.ar";
+        Name = "$(EXECUTABLE_NAME)";
+        IsLaunchable = "NO";
+      };
+    }
+    {
+      Identifier = "com.apple.package-type.wrapper";
+      Type = "PackageType";
+      Name = "Wrapper";
+      DefaultBuildSettings = {
+        WRAPPER_SUFFIX = ".bundle";
+        WRAPPER_NAME = "$(WRAPPER_PREFIX)$(PRODUCT_NAME)$(WRAPPER_SUFFIX)";
+        CONTENTS_FOLDER_PATH = "$(WRAPPER_NAME)/Contents";
+        EXECUTABLE_NAME = "$(EXECUTABLE_PREFIX)$(PRODUCT_NAME)$(EXECUTABLE_VARIANT_SUFFIX)$(EXECUTABLE_SUFFIX)";
+        EXECUTABLE_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)/MacOS";
+        EXECUTABLE_PATH = "$(EXECUTABLE_FOLDER_PATH)/$(EXECUTABLE_NAME)";
+        INFOPLIST_PATH = "$(CONTENTS_FOLDER_PATH)/Info.plist";
+        INFOSTRINGS_PATH = "$(LOCALIZED_RESOURCES_FOLDER_PATH)/InfoPlist.strings";
+        PKGINFO_PATH = "$(CONTENTS_FOLDER_PATH)/PkgInfo";
+        PBDEVELOPMENTPLIST_PATH = "$(CONTENTS_FOLDER_PATH)/pbdevelopment.plist";
+        VERSIONPLIST_PATH = "$(CONTENTS_FOLDER_PATH)/version.plist";
+        PUBLIC_HEADERS_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)/Headers";
+        PRIVATE_HEADERS_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)/PrivateHeaders";
+        EXECUTABLES_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)/Executables";
+        FRAMEWORKS_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)/Frameworks";
+        SHARED_FRAMEWORKS_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)/SharedFrameworks";
+        SHARED_SUPPORT_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)/SharedSupport";
+        UNLOCALIZED_RESOURCES_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)/Resources";
+        LOCALIZED_RESOURCES_FOLDER_PATH = "$(UNLOCALIZED_RESOURCES_FOLDER_PATH)/$(DEVELOPMENT_LANGUAGE).lproj";
+        DOCUMENTATION_FOLDER_PATH = "$(LOCALIZED_RESOURCES_FOLDER_PATH)/Documentation";
+        PLUGINS_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)/PlugIns";
+        SCRIPTS_FOLDER_PATH = "$(UNLOCALIZED_RESOURCES_FOLDER_PATH)/Scripts";
+      };
+      ProductReference = {
+        FileType = "wrapper.cfbundle";
+        Name = "$(WRAPPER_NAME)";
+        IsLaunchable = "NO";
+      };
+    }
+    {
+      Identifier = "com.apple.package-type.wrapper.application";
+      Type = "PackageType";
+      BasedOn = "com.apple.package-type.wrapper";
+      Name = "Application Wrapper";
+      DefaultBuildSettings = {
+        GENERATE_PKGINFO_FILE = "YES";
+      };
+      ProductReference = {
+        FileType = "wrapper.application";
+        Name = "$(WRAPPER_NAME)";
+        IsLaunchable = "YES";
+      };
+    }
+  ];
+
+  # Based off of the "MacOSX Product Types.xcspec" file. All
+  # bundles/wrapper are removed, because we prefer dynamic products in
+  # NixPkgs.
+  ProductTypes = [
+    {
+      Identifier = "com.apple.product-type.tool";
+      Type = "ProductType";
+      Name = "Command-line Tool";
+      PackageTypes = [ "com.apple.package-type.mach-o-executable" ];
+    }
+    {
+      Identifier = "com.apple.product-type.objfile";
+      Type = "ProductType";
+      Name = "Object File";
+      PackageTypes = [ "com.apple.package-type.mach-o-objfile" ];
+    }
+    {
+      Identifier = "com.apple.product-type.library.dynamic";
+      Type = "ProductType";
+      Name = "Dynamic Library";
+      PackageTypes = [ "com.apple.package-type.mach-o-dylib" ];
+      DefaultBuildProperties = {
+        FULL_PRODUCT_NAME = "$(EXECUTABLE_NAME)";
+        MACH_O_TYPE = "mh_dylib";
+        REZ_EXECUTABLE = "YES";
+        EXECUTABLE_SUFFIX = ".$(EXECUTABLE_EXTENSION)";
+        EXECUTABLE_EXTENSION = "dylib";
+        DYLIB_COMPATIBILITY_VERSION = "1";
+        DYLIB_CURRENT_VERSION = "1";
+        FRAMEWORK_FLAG_PREFIX = "-framework";
+        LIBRARY_FLAG_PREFIX = "-l";
+        LIBRARY_FLAG_NOSPACE = "YES";
+        STRIP_STYLE = "debugging";
+        GCC_INLINES_ARE_PRIVATE_EXTERN = "YES";
+        CODE_SIGNING_ALLOWED = "YES";
+        CODE_SIGNING_REQUIRED = "NO";
+      };
+    }
+    {
+      Identifier = "com.apple.product-type.library.static";
+      Type = "ProductType";
+      Name = "Static Library";
+      PackageTypes = [ "com.apple.package-type.static-library" ];
+      DefaultBuildProperties = {
+        FULL_PRODUCT_NAME = "$(EXECUTABLE_NAME)";
+        MACH_O_TYPE = "staticlib";
+        REZ_EXECUTABLE = "YES";
+        EXECUTABLE_PREFIX = "lib";
+        EXECUTABLE_SUFFIX = ".$(EXECUTABLE_EXTENSION)";
+        EXECUTABLE_EXTENSION = "a";
+        FRAMEWORK_FLAG_PREFIX = "-framework";
+        LIBRARY_FLAG_PREFIX = "-l";
+        LIBRARY_FLAG_NOSPACE = "YES";
+        STRIP_STYLE = "debugging";
+        SEPARATE_STRIP = "YES";
+        CLANG_ENABLE_MODULE_DEBUGGING = "NO";
+      };
+    }
+    {
+      Type = "ProductType";
+      Identifier = "com.apple.product-type.bundle";
+      Name = "Bundle";
+      DefaultBuildProperties = {
+        FULL_PRODUCT_NAME = "$(WRAPPER_NAME)";
+        MACH_O_TYPE = "mh_bundle";
+        WRAPPER_PREFIX = "";
+        WRAPPER_SUFFIX = ".$(WRAPPER_EXTENSION)";
+        WRAPPER_EXTENSION = "bundle";
+        WRAPPER_NAME = "$(WRAPPER_PREFIX)$(PRODUCT_NAME)$(WRAPPER_SUFFIX)";
+        FRAMEWORK_FLAG_PREFIX = "-framework";
+        LIBRARY_FLAG_PREFIX = "-l";
+        LIBRARY_FLAG_NOSPACE = "YES";
+        STRIP_STYLE = "non-global";
+      };
+      PackageTypes = [ "com.apple.package-type.wrapper" ];
+      IsWrapper = "YES";
+      HasInfoPlist = "YES";
+      HasInfoPlistStrings = "YES";
+    }
+    {
+      Identifier = "com.apple.product-type.application";
+      Type = "ProductType";
+      BasedOn = "com.apple.product-type.bundle";
+      Name = "Application";
+      DefaultBuildProperties = {
+        MACH_O_TYPE = "mh_execute";
+        WRAPPER_SUFFIX = ".$(WRAPPER_EXTENSION)";
+        WRAPPER_EXTENSION = "app";
+      };
+      PackageTypes = [ "com.apple.package-type.wrapper.application" ];
+    }
+    {
+      Type = "ProductType";
+      Identifier = "com.apple.product-type.framework";
+      Name = "Bundle";
+      DefaultBuildProperties = {
+        FULL_PRODUCT_NAME = "$(WRAPPER_NAME)";
+        MACH_O_TYPE = "mh_bundle";
+        WRAPPER_PREFIX = "";
+        WRAPPER_SUFFIX = ".$(WRAPPER_EXTENSION)";
+        WRAPPER_EXTENSION = "bundle";
+        WRAPPER_NAME = "$(WRAPPER_PREFIX)$(PRODUCT_NAME)$(WRAPPER_SUFFIX)";
+        FRAMEWORK_FLAG_PREFIX = "-framework";
+        LIBRARY_FLAG_PREFIX = "-l";
+        LIBRARY_FLAG_NOSPACE = "YES";
+        STRIP_STYLE = "non-global";
+      };
+      PackageTypes = [ "com.apple.package-type.wrapper" ];
+      IsWrapper = "YES";
+      HasInfoPlist = "YES";
+      HasInfoPlistStrings = "YES";
+    }
+  ];
+
+in
+
+runCommand "Platforms" {} ''
+  platform=$out/${xcodePlatform}.platform
+
+  install -D ${writeText "Info.plist" (toPlist {} Info)} $platform/Info.plist
+  install -D ${writeText "version.plist" (toPlist {} Version)} $platform/version.plist
+  install -D ${writeText "Architectures.xcspec" (toPlist {} Architectures)} $platform/Developer/Library/Xcode/Specifications/Architectures.xcspec
+  install -D ${writeText "PackageTypes.xcspec" (toPlist {} PackageTypes)} $platform/Developer/Library/Xcode/Specifications/PackageTypes.xcspec
+  install -D ${writeText "ProductTypes.xcspec" (toPlist {} ProductTypes)} $platform/Developer/Library/Xcode/Specifications/ProductTypes.xcspec
+
+  ln -s $platform $platform/usr
+
+  mkdir -p $platform/Developer
+  ln -s ${sdks} $platform/Developer/SDKs
+''
diff --git a/nixpkgs/pkgs/development/tools/xcbuild/sdks.nix b/nixpkgs/pkgs/development/tools/xcbuild/sdks.nix
new file mode 100644
index 000000000000..bf16bf132d77
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/xcbuild/sdks.nix
@@ -0,0 +1,32 @@
+{ runCommand, lib, toolchainName, sdkName
+, writeText, xcodePlatform, sdkVer, productBuildVer }:
+
+let
+  inherit (lib.generators) toPlist toJSON;
+
+  SDKSettings = {
+    CanonicalName = sdkName;
+    DisplayName = sdkName;
+    Toolchains = [ toolchainName ];
+    Version = sdkVer;
+    MaximumDeploymentTarget = sdkVer;
+    isBaseSDK = "YES";
+  };
+
+  SystemVersion = lib.optionalAttrs (productBuildVer != null) {
+    ProductBuildVersion = productBuildVer;
+  } // {
+    ProductName = "Mac OS X";
+    ProductVersion = sdkVer;
+  };
+in
+
+runCommand "SDKs" {} ''
+  sdk=$out/${sdkName}.sdk
+  install -D ${writeText "SDKSettings.plist" (toPlist {} SDKSettings)} $sdk/SDKSettings.plist
+  install -D ${writeText "SDKSettings.json" (toJSON {} SDKSettings)} $sdk/SDKSettings.json
+  install -D ${writeText "SystemVersion.plist" (toPlist {} SystemVersion)} $sdk/System/Library/CoreServices/SystemVersion.plist
+  ln -s $sdk $sdk/usr
+
+  ln -s $sdk $out/${xcodePlatform}.sdk
+''
diff --git a/nixpkgs/pkgs/development/tools/xcbuild/setup-hook.sh b/nixpkgs/pkgs/development/tools/xcbuild/setup-hook.sh
new file mode 100644
index 000000000000..f4b5abf2d8d3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/xcbuild/setup-hook.sh
@@ -0,0 +1,29 @@
+xcbuildBuildPhase() {
+    export DSTROOT=$out
+
+    runHook preBuild
+
+    echo "running xcodebuild"
+
+    xcodebuild SYMROOT=$PWD/Products OBJROOT=$PWD/Intermediates $xcbuildFlags build
+
+    runHook postBuild
+}
+
+xcbuildInstallPhase () {
+    runHook preInstall
+
+    # not implemented
+    # xcodebuild install
+
+    runHook postInstall
+}
+
+buildPhase=xcbuildBuildPhase
+if [ -z "${installPhase-}" ]; then
+    installPhase=xcbuildInstallPhase
+fi
+
+# if [ -d "*.xcodeproj" ]; then
+#     buildPhase=xcbuildPhase
+# fi
diff --git a/nixpkgs/pkgs/development/tools/xcbuild/toolchains.nix b/nixpkgs/pkgs/development/tools/xcbuild/toolchains.nix
new file mode 100644
index 000000000000..e0abf90847fc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/xcbuild/toolchains.nix
@@ -0,0 +1,73 @@
+{ runCommand, toolchainName, fetchurl, stdenv
+, buildPackages, lib, writeText }:
+
+let
+
+  inherit (lib) getBin optionalString;
+  inherit (lib.generators) toPlist;
+
+  ToolchainInfo = {
+    Identifier = toolchainName;
+  };
+
+  # We could pull this out of developer_cmds but it adds an annoying
+  # loop if we want to bootstrap and this is just a tiny script so I'm
+  # not going to bother.
+  mkdep-darwin-src = fetchurl {
+    url        = "https://opensource.apple.com/source/developer_cmds/developer_cmds-63/mkdep/mkdep.sh";
+    sha256     = "0n4wpqfslfjs5zbys5yri8pfi2awyhlmknsf6laa5jzqbzq9x541";
+    executable = true;
+  };
+in
+
+runCommand "Toolchains" {} (''
+  toolchain=$out/XcodeDefault.xctoolchain
+  mkdir -p $toolchain
+
+  install -D ${writeText "ToolchainInfo.plist" (toPlist {} ToolchainInfo)} $toolchain/ToolchainInfo.plist
+
+  ln -s $toolchain $toolchain/usr
+
+  mkdir -p $toolchain/include
+  mkdir -p $toolchain/lib
+  mkdir -p $toolchain/libexec
+  mkdir -p $toolchain/share
+  mkdir -p $toolchain/bin
+
+  for bin in ${getBin stdenv.cc}/bin/*; do
+    ln -s $bin $toolchain/bin
+  done
+
+  for bin in ${getBin stdenv.cc.bintools.bintools}/bin/*; do
+    if ! [ -e "$toolchain/bin/$(basename $bin)" ]; then
+      ln -s $bin $toolchain/bin
+    fi
+  done
+
+  ln -s ${buildPackages.bison}/bin/yacc $toolchain/bin/yacc
+  ln -s ${buildPackages.bison}/bin/bison $toolchain/bin/bison
+  ln -s ${buildPackages.flex}/bin/flex $toolchain/bin/flex
+  ln -s ${buildPackages.flex}/bin/flex++ $toolchain/bin/flex++
+  ln -s $toolchain/bin/flex $toolchain/bin/lex
+
+  ln -s ${buildPackages.m4}/bin/m4 $toolchain/bin/m4
+  ln -s $toolchain/bin/m4 $toolchain/bin/gm4
+
+  ln -s ${buildPackages.unifdef}/bin/unifdef $toolchain/bin/unifdef
+  ln -s ${buildPackages.unifdef}/bin/unifdefall $toolchain/bin/unifdefall
+
+  ln -s ${buildPackages.gperf}/bin/gperf $toolchain/bin/gperf
+  ln -s ${buildPackages.indent}/bin/indent $toolchain/bin/indent
+  ln -s ${buildPackages.ctags}/bin/ctags $toolchain/bin/ctags
+'' + optionalString stdenv.isDarwin ''
+  for bin in ${getBin buildPackages.darwin.cctools}/bin/*; do
+    if ! [ -e "$toolchain/bin/$(basename $bin)" ]; then
+      ln -s $bin $toolchain/bin
+    fi
+  done
+
+  ln -s ${buildPackages.darwin.bootstrap_cmds}/bin/mig $toolchain/bin
+  mkdir -p $toolchain/libexec
+  ln -s ${buildPackages.darwin.bootstrap_cmds}/libexec/migcom $toolchain/libexec
+  ln -s ${mkdep-darwin-src} $toolchain/bin/mkdep
+'')
diff --git a/nixpkgs/pkgs/development/tools/xcbuild/wrapper.nix b/nixpkgs/pkgs/development/tools/xcbuild/wrapper.nix
new file mode 100644
index 000000000000..9c8c846e5cca
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/xcbuild/wrapper.nix
@@ -0,0 +1,167 @@
+{ lib, stdenv, makeWrapper, writeText, writeTextFile, runCommand, callPackage
+, CoreServices, ImageIO, CoreGraphics
+, xcodePlatform ? stdenv.targetPlatform.xcodePlatform or "MacOSX"
+, xcodeVer ? stdenv.targetPlatform.xcodeVer or "9.4.1"
+, sdkVer ? stdenv.targetPlatform.darwinSdkVersion or "10.12"
+, productBuildVer ? null
+}:
+
+let
+
+  toolchainName = "com.apple.dt.toolchain.XcodeDefault";
+  sdkName = "${xcodePlatform}${sdkVer}";
+  xcrunSdkName = lib.toLower xcodePlatform;
+
+  # TODO: expose MACOSX_DEPLOYMENT_TARGET in nix so we can use it here.
+  sdkBuildVersion = "17E189";
+  xcodeSelectVersion = "2349";
+
+  xcbuild = callPackage ./default.nix {
+    inherit CoreServices ImageIO CoreGraphics stdenv;
+  };
+
+  toolchains = callPackage ./toolchains.nix {
+    inherit toolchainName stdenv;
+  };
+
+  sdks = callPackage ./sdks.nix {
+    inherit toolchainName sdkName xcodePlatform sdkVer productBuildVer;
+  };
+
+  platforms = callPackage ./platforms.nix {
+    inherit sdks xcodePlatform stdenv;
+  };
+
+  xcconfig = writeText "nix.xcconfig" ''
+    SDKROOT=${sdkName}
+  '';
+
+  xcode-select = writeText "xcode-select" ''
+#!${stdenv.shell}
+while [ $# -gt 0 ]; do
+   case "$1" in
+         -h | --help) ;; # noop
+         -s | --switch) shift;; # noop
+         -r | --reset) ;; # noop
+         -v | --version) echo xcode-select version ${xcodeSelectVersion} ;;
+         -p | -print-path | --print-path) echo @DEVELOPER_DIR@ ;;
+         --install) ;; # noop
+    esac
+    shift
+done
+  '';
+
+  xcrun = writeTextFile {
+    name = "xcrun";
+    executable = true;
+    destination = "/bin/xcrun";
+    text = ''
+#!${stdenv.shell}
+args=( "$@" )
+
+# If an SDK was requested, check that it matches.
+for ((i = 0; i < ''${#args[@]}; i++)); do
+  case "''${args[i]}" in
+    --sdk | -sdk)
+      i=$((i + 1))
+      if [[ "''${args[i]}" != '${xcrunSdkName}' ]]; then
+        echo >&2 "xcodebuild: error: SDK \"''${args[i]}\" cannot be located."
+        exit 1
+      fi
+      ;;
+  esac
+done
+
+while [ $# -gt 0 ]; do
+   case "$1" in
+         --sdk | -sdk) shift ;;
+         --toolchain | -toolchain) shift ;;
+         --find | -find | -f)
+           shift
+           command -v $1 || exit 1 ;;
+         --log | -log) ;; # noop
+         --verbose | -verbose) ;; # noop
+         --no-cache | -no-cache) ;; # noop
+         --kill-cache | -kill-cache) ;; # noop
+         --show-sdk-path | -show-sdk-path)
+           echo ${sdks}/${sdkName}.sdk ;;
+         --show-sdk-platform-path | -show-sdk-platform-path)
+           echo ${platforms}/${xcodePlatform}.platform ;;
+         --show-sdk-version | -show-sdk-version)
+           echo ${sdkVer} ;;
+         --show-sdk-build-version | -show-sdk-build-version)
+           echo ${sdkBuildVersion} ;;
+         *) break ;;
+    esac
+    shift
+done
+
+if ! [[ -z "$@" ]]; then
+   exec "$@"
+fi
+    '';
+    checkPhase = ''
+      ${stdenv.shellDryRun} "$target"
+    '';
+  };
+
+in
+
+runCommand "xcodebuild-${xcbuild.version}" {
+  nativeBuildInputs = [ makeWrapper ];
+  inherit (xcbuild) meta;
+
+  # ensure that the toolchain goes in PATH
+  propagatedBuildInputs = [ "${toolchains}/XcodeDefault.xctoolchain" ];
+
+  passthru = {
+    inherit xcbuild xcrun;
+    toolchain = "${toolchains}/XcodeDefault.xctoolchain";
+    sdk = "${sdks}/${sdkName}";
+    platform = "${platforms}/${xcodePlatform}.platform";
+  };
+
+  preferLocalBuild = true;
+} ''
+  mkdir -p $out/bin
+
+  ln -s $out $out/usr
+
+  mkdir -p $out/Library/Xcode
+  ln -s ${xcbuild}/Library/Xcode/Specifications $out/Library/Xcode/Specifications
+
+  ln -s ${platforms} $out/Platforms
+  ln -s ${toolchains} $out/Toolchains
+
+  mkdir -p $out/Applications/Xcode.app/Contents
+  ln -s $out $out/Applications/Xcode.app/Contents/Developer
+
+  # The native xcodebuild command supports an invocation like "xcodebuild -version -sdk" without specifying the specific SDK, so we simulate this by
+  # detecting this case and simulating the output; printing the header and appending the normal output via appending the sdk version to the positional
+  # arguments we pass through to the wrapped xcodebuild.
+  makeWrapper ${xcbuild}/bin/xcodebuild $out/bin/xcodebuild \
+    --add-flags "-xcconfig ${xcconfig}" \
+    --add-flags "DERIVED_DATA_DIR=." \
+    --set DEVELOPER_DIR "$out" \
+    --set SDKROOT ${sdkName} \
+    --run '[ "$#" -eq 2 ] && [ "$1" = "-version" ] && [ "$2" = "-sdk" ] && echo ${sdkName}.sdk - macOS ${sdkVer} \(macosx${sdkVer}\) && set -- "$@" "${sdkName}"' \
+    --run '[ "$1" = "-version" ] && [ "$#" -eq 1 ] && (echo Xcode ${xcodeVer}; echo Build version ${sdkBuildVersion}) && exit 0' \
+    --run '[ "$1" = "-license" ] && exit 0'
+
+  substitute ${xcode-select} $out/bin/xcode-select \
+    --subst-var-by DEVELOPER_DIR $out/Applications/Xcode.app/Contents/Developer
+  chmod +x $out/bin/xcode-select
+
+  cp ${xcrun}/bin/xcrun $out/bin/xcrun
+
+  for bin in PlistBuddy actool builtin-copy builtin-copyPlist \
+             builtin-copyStrings builtin-copyTiff \
+             builtin-embeddedBinaryValidationUtility \
+             builtin-infoPlistUtility builtin-lsRegisterURL \
+             builtin-productPackagingUtility builtin-validationUtility \
+             lsbom plutil; do
+    ln -s ${xcbuild}/bin/$bin $out/bin/$bin
+  done
+
+  fixupPhase
+''
diff --git a/nixpkgs/pkgs/development/tools/xcode-install/Gemfile b/nixpkgs/pkgs/development/tools/xcode-install/Gemfile
new file mode 100644
index 000000000000..b9d313ce14fc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/xcode-install/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'xcode-install'
diff --git a/nixpkgs/pkgs/development/tools/xcode-install/Gemfile.lock b/nixpkgs/pkgs/development/tools/xcode-install/Gemfile.lock
new file mode 100644
index 000000000000..589543fe47d6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/xcode-install/Gemfile.lock
@@ -0,0 +1,204 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    CFPropertyList (3.0.3)
+    addressable (2.7.0)
+      public_suffix (>= 2.0.2, < 5.0)
+    artifactory (3.0.15)
+    atomos (0.1.3)
+    aws-eventstream (1.1.0)
+    aws-partitions (1.419.0)
+    aws-sdk-core (3.111.2)
+      aws-eventstream (~> 1, >= 1.0.2)
+      aws-partitions (~> 1, >= 1.239.0)
+      aws-sigv4 (~> 1.1)
+      jmespath (~> 1.0)
+    aws-sdk-kms (1.41.0)
+      aws-sdk-core (~> 3, >= 3.109.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-s3 (1.87.0)
+      aws-sdk-core (~> 3, >= 3.109.0)
+      aws-sdk-kms (~> 1)
+      aws-sigv4 (~> 1.1)
+    aws-sigv4 (1.2.2)
+      aws-eventstream (~> 1, >= 1.0.2)
+    babosa (1.0.4)
+    claide (1.0.3)
+    colored (1.2)
+    colored2 (3.1.2)
+    commander-fastlane (4.4.6)
+      highline (~> 1.7.2)
+    declarative (0.0.20)
+    declarative-option (0.1.0)
+    digest-crc (0.6.3)
+      rake (>= 12.0.0, < 14.0.0)
+    domain_name (0.5.20190701)
+      unf (>= 0.0.5, < 1.0.0)
+    dotenv (2.7.6)
+    emoji_regex (3.2.1)
+    excon (0.78.1)
+    faraday (1.3.0)
+      faraday-net_http (~> 1.0)
+      multipart-post (>= 1.2, < 3)
+      ruby2_keywords
+    faraday-cookie_jar (0.0.7)
+      faraday (>= 0.8.0)
+      http-cookie (~> 1.0.0)
+    faraday-net_http (1.0.1)
+    faraday_middleware (1.0.0)
+      faraday (~> 1.0)
+    fastimage (2.2.1)
+    fastlane (2.172.0)
+      CFPropertyList (>= 2.3, < 4.0.0)
+      addressable (>= 2.3, < 3.0.0)
+      artifactory (~> 3.0)
+      aws-sdk-s3 (~> 1.0)
+      babosa (>= 1.0.3, < 2.0.0)
+      bundler (>= 1.12.0, < 3.0.0)
+      colored
+      commander-fastlane (>= 4.4.6, < 5.0.0)
+      dotenv (>= 2.1.1, < 3.0.0)
+      emoji_regex (>= 0.1, < 4.0)
+      excon (>= 0.71.0, < 1.0.0)
+      faraday (~> 1.0)
+      faraday-cookie_jar (~> 0.0.6)
+      faraday_middleware (~> 1.0)
+      fastimage (>= 2.1.0, < 3.0.0)
+      gh_inspector (>= 1.1.2, < 2.0.0)
+      google-api-client (>= 0.37.0, < 0.39.0)
+      google-cloud-storage (>= 1.15.0, < 2.0.0)
+      highline (>= 1.7.2, < 2.0.0)
+      json (< 3.0.0)
+      jwt (>= 2.1.0, < 3)
+      mini_magick (>= 4.9.4, < 5.0.0)
+      multipart-post (~> 2.0.0)
+      plist (>= 3.1.0, < 4.0.0)
+      rubyzip (>= 2.0.0, < 3.0.0)
+      security (= 0.1.3)
+      simctl (~> 1.6.3)
+      slack-notifier (>= 2.0.0, < 3.0.0)
+      terminal-notifier (>= 2.0.0, < 3.0.0)
+      terminal-table (>= 1.4.5, < 2.0.0)
+      tty-screen (>= 0.6.3, < 1.0.0)
+      tty-spinner (>= 0.8.0, < 1.0.0)
+      word_wrap (~> 1.0.0)
+      xcodeproj (>= 1.13.0, < 2.0.0)
+      xcpretty (~> 0.3.0)
+      xcpretty-travis-formatter (>= 0.0.3)
+    gh_inspector (1.1.3)
+    google-api-client (0.38.0)
+      addressable (~> 2.5, >= 2.5.1)
+      googleauth (~> 0.9)
+      httpclient (>= 2.8.1, < 3.0)
+      mini_mime (~> 1.0)
+      representable (~> 3.0)
+      retriable (>= 2.0, < 4.0)
+      signet (~> 0.12)
+    google-apis-core (0.2.1)
+      addressable (~> 2.5, >= 2.5.1)
+      googleauth (~> 0.14)
+      httpclient (>= 2.8.1, < 3.0)
+      mini_mime (~> 1.0)
+      representable (~> 3.0)
+      retriable (>= 2.0, < 4.0)
+      rexml
+      signet (~> 0.14)
+      webrick
+    google-apis-iamcredentials_v1 (0.1.0)
+      google-apis-core (~> 0.1)
+    google-apis-storage_v1 (0.1.0)
+      google-apis-core (~> 0.1)
+    google-cloud-core (1.5.0)
+      google-cloud-env (~> 1.0)
+      google-cloud-errors (~> 1.0)
+    google-cloud-env (1.4.0)
+      faraday (>= 0.17.3, < 2.0)
+    google-cloud-errors (1.0.1)
+    google-cloud-storage (1.30.0)
+      addressable (~> 2.5)
+      digest-crc (~> 0.4)
+      google-apis-iamcredentials_v1 (~> 0.1)
+      google-apis-storage_v1 (~> 0.1)
+      google-cloud-core (~> 1.2)
+      googleauth (~> 0.9)
+      mini_mime (~> 1.0)
+    googleauth (0.15.0)
+      faraday (>= 0.17.3, < 2.0)
+      jwt (>= 1.4, < 3.0)
+      memoist (~> 0.16)
+      multi_json (~> 1.11)
+      os (>= 0.9, < 2.0)
+      signet (~> 0.14)
+    highline (1.7.10)
+    http-cookie (1.0.3)
+      domain_name (~> 0.5)
+    httpclient (2.8.3)
+    jmespath (1.4.0)
+    json (2.5.1)
+    jwt (2.2.2)
+    memoist (0.16.2)
+    mini_magick (4.11.0)
+    mini_mime (1.0.2)
+    multi_json (1.15.0)
+    multipart-post (2.0.0)
+    nanaimo (0.3.0)
+    naturally (2.2.1)
+    os (1.1.1)
+    plist (3.6.0)
+    public_suffix (4.0.6)
+    rake (13.0.3)
+    representable (3.0.4)
+      declarative (< 0.1.0)
+      declarative-option (< 0.2.0)
+      uber (< 0.2.0)
+    retriable (3.1.2)
+    rexml (3.2.4)
+    rouge (2.0.7)
+    ruby2_keywords (0.0.4)
+    rubyzip (2.3.0)
+    security (0.1.3)
+    signet (0.14.0)
+      addressable (~> 2.3)
+      faraday (>= 0.17.3, < 2.0)
+      jwt (>= 1.5, < 3.0)
+      multi_json (~> 1.10)
+    simctl (1.6.8)
+      CFPropertyList
+      naturally
+    slack-notifier (2.3.2)
+    terminal-notifier (2.0.0)
+    terminal-table (1.8.0)
+      unicode-display_width (~> 1.1, >= 1.1.1)
+    tty-cursor (0.7.1)
+    tty-screen (0.8.1)
+    tty-spinner (0.9.3)
+      tty-cursor (~> 0.7)
+    uber (0.1.0)
+    unf (0.1.4)
+      unf_ext
+    unf_ext (0.0.7.7)
+    unicode-display_width (1.7.0)
+    webrick (1.7.0)
+    word_wrap (1.0.0)
+    xcode-install (2.6.8)
+      claide (>= 0.9.1, < 1.1.0)
+      fastlane (>= 2.1.0, < 3.0.0)
+    xcodeproj (1.19.0)
+      CFPropertyList (>= 2.3.3, < 4.0)
+      atomos (~> 0.1.3)
+      claide (>= 1.0.2, < 2.0)
+      colored2 (~> 3.1)
+      nanaimo (~> 0.3.0)
+    xcpretty (0.3.0)
+      rouge (~> 2.0.7)
+    xcpretty-travis-formatter (1.0.1)
+      xcpretty (~> 0.2, >= 0.0.7)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  xcode-install
+
+BUNDLED WITH
+   1.17.2
diff --git a/nixpkgs/pkgs/development/tools/xcode-install/default.nix b/nixpkgs/pkgs/development/tools/xcode-install/default.nix
new file mode 100644
index 000000000000..677217b5c810
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/xcode-install/default.nix
@@ -0,0 +1,17 @@
+{ lib
+, bundlerApp
+}:
+
+bundlerApp {
+  pname = "xcode-install";
+  gemdir = ./.;
+  exes = [ "xcversion" ];
+
+  meta = with lib; {
+    description = "Install and update your Xcodes automatically";
+    homepage = "https://github.com/xcpretty/xcode-install";
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ q3k ];
+    license = with licenses; [ mit ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/xcode-install/gemset.nix b/nixpkgs/pkgs/development/tools/xcode-install/gemset.nix
new file mode 100644
index 000000000000..c6355de34a2f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/xcode-install/gemset.nix
@@ -0,0 +1,833 @@
+{
+  addressable = {
+    dependencies = ["public_suffix"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fvchp2rhp2rmigx7qglf69xvjqvzq7x0g49naliw29r2bz656sy";
+      type = "gem";
+    };
+    version = "2.7.0";
+  };
+  artifactory = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0wify8rhjwr5bw5y6ary61vba290vk766cxw9a9mg05yswmaisls";
+      type = "gem";
+    };
+    version = "3.0.15";
+  };
+  atomos = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "17vq6sjyswr5jfzwdccw748kgph6bdw30bakwnn6p8sl4hpv4hvx";
+      type = "gem";
+    };
+    version = "0.1.3";
+  };
+  aws-eventstream = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0r0pn66yqrdkrfdin7qdim0yj2x75miyg4wp6mijckhzhrjb7cv5";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  aws-partitions = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vz0djj8w3ns0sz5gvkla5jml8xzx6skbcfj255m81fyww1x6ws8";
+      type = "gem";
+    };
+    version = "1.419.0";
+  };
+  aws-sdk-core = {
+    dependencies = ["aws-eventstream" "aws-partitions" "aws-sigv4" "jmespath"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bfj1cnpp0ljr9jc44kljdwl5399cbqlvlqkz6fxq5i4r6ckggi4";
+      type = "gem";
+    };
+    version = "3.111.2";
+  };
+  aws-sdk-kms = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "02f70a4rr5h2na7navjhaf3n15ifq95zdl1avsryyxdvqzm5gzwm";
+      type = "gem";
+    };
+    version = "1.41.0";
+  };
+  aws-sdk-s3 = {
+    dependencies = ["aws-sdk-core" "aws-sdk-kms" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0capqhvm08ngq74n33ym0khixkdj342jpikssw57avdmd8g6kaq7";
+      type = "gem";
+    };
+    version = "1.87.0";
+  };
+  aws-sigv4 = {
+    dependencies = ["aws-eventstream"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ll9382c1x2hp750cilh01h1cycgyhdr4cmmgx23k94hyyb8chv5";
+      type = "gem";
+    };
+    version = "1.2.2";
+  };
+  babosa = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "16dwqn33kmxkqkv51cwiikdkbrdjfsymlnc0rgbjwilmym8a9phq";
+      type = "gem";
+    };
+    version = "1.0.4";
+  };
+  CFPropertyList = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ia09r8bj3bjhcfiyr3vlk9zx7vahfypbs2lyrxix9x1jx3lfzq4";
+      type = "gem";
+    };
+    version = "3.0.3";
+  };
+  claide = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0kasxsms24fgcdsq680nz99d5lazl9rmz1qkil2y5gbbssx89g0z";
+      type = "gem";
+    };
+    version = "1.0.3";
+  };
+  colored = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0b0x5jmsyi0z69bm6sij1k89z7h0laag3cb4mdn7zkl9qmxb90lx";
+      type = "gem";
+    };
+    version = "1.2";
+  };
+  colored2 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jlbqa9q4mvrm73aw9mxh23ygzbjiqwisl32d8szfb5fxvbjng5i";
+      type = "gem";
+    };
+    version = "3.1.2";
+  };
+  commander-fastlane = {
+    dependencies = ["highline"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0y8d3ac9qwm1cg6rnpf8rcdsy1yxacrd2g2kl809xsp2vi973g65";
+      type = "gem";
+    };
+    version = "4.4.6";
+  };
+  declarative = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1yczgnqrbls7shrg63y88g7wand2yp9h6sf56c9bdcksn5nds8c0";
+      type = "gem";
+    };
+    version = "0.0.20";
+  };
+  declarative-option = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1g4ibxq566f1frnhdymzi9hxxcm4g2gw4n21mpjk2mhwym4q6l0p";
+      type = "gem";
+    };
+    version = "0.1.0";
+  };
+  digest-crc = {
+    dependencies = ["rake"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "118d5p02kdw6a5pi8af12dxma7q3b77zz5q5xjjf5kgp8qh1930a";
+      type = "gem";
+    };
+    version = "0.6.3";
+  };
+  domain_name = {
+    dependencies = ["unf"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lcqjsmixjp52bnlgzh4lg9ppsk52x9hpwdjd53k8jnbah2602h0";
+      type = "gem";
+    };
+    version = "0.5.20190701";
+  };
+  dotenv = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0iym172c5337sm1x2ykc2i3f961vj3wdclbyg1x6sxs3irgfsl94";
+      type = "gem";
+    };
+    version = "2.7.6";
+  };
+  emoji_regex = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qbzlracxw4xwyvrgr0qcl1alk4ijk6pv53ni6f43csi649y3n3s";
+      type = "gem";
+    };
+    version = "3.2.1";
+  };
+  excon = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "16ij8617v3js03yj1zd32mmrf7kpi9l96bid5mpqk30c4mzai55r";
+      type = "gem";
+    };
+    version = "0.78.1";
+  };
+  faraday = {
+    dependencies = ["faraday-net_http" "multipart-post" "ruby2_keywords"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1hmssd8pj4n7yq4kz834ylkla8ryyvhaap6q9nzymp93m1xq21kz";
+      type = "gem";
+    };
+    version = "1.3.0";
+  };
+  faraday-cookie_jar = {
+    dependencies = ["faraday" "http-cookie"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "00hligx26w9wdnpgsrf0qdnqld4rdccy8ym6027h5m735mpvxjzk";
+      type = "gem";
+    };
+    version = "0.0.7";
+  };
+  faraday-net_http = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fi8sda5hc54v1w3mqfl5yz09nhx35kglyx72w7b8xxvdr0cwi9j";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  faraday_middleware = {
+    dependencies = ["faraday"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jik2kgfinwnfi6fpp512vlvs0mlggign3gkbpkg5fw1jr9his0r";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  fastimage = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vqp53s9vgd28f4l17q0vs7xv32y64af0ny3wb1fgg4i534rzg6j";
+      type = "gem";
+    };
+    version = "2.2.1";
+  };
+  fastlane = {
+    dependencies = ["CFPropertyList" "addressable" "artifactory" "aws-sdk-s3" "babosa" "colored" "commander-fastlane" "dotenv" "emoji_regex" "excon" "faraday" "faraday-cookie_jar" "faraday_middleware" "fastimage" "gh_inspector" "google-api-client" "google-cloud-storage" "highline" "json" "jwt" "mini_magick" "multipart-post" "plist" "rubyzip" "security" "simctl" "slack-notifier" "terminal-notifier" "terminal-table" "tty-screen" "tty-spinner" "word_wrap" "xcodeproj" "xcpretty" "xcpretty-travis-formatter"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0crr42qdgy9l409pffpfs7nq8ha18lp1nxngny2dc9hiq1xx4r5d";
+      type = "gem";
+    };
+    version = "2.172.0";
+  };
+  gh_inspector = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0f8r9byajj3bi2c7c5sqrc7m0zrv3nblfcd4782lw5l73cbsgk04";
+      type = "gem";
+    };
+    version = "1.1.3";
+  };
+  google-api-client = {
+    dependencies = ["addressable" "googleauth" "httpclient" "mini_mime" "representable" "retriable" "signet"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1jybks8i00rxrxx9mkx90dbdk6pczh2w757wchlavmrkrk0dp9s1";
+      type = "gem";
+    };
+    version = "0.38.0";
+  };
+  google-apis-core = {
+    dependencies = ["addressable" "googleauth" "httpclient" "mini_mime" "representable" "retriable" "rexml" "signet" "webrick"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "184pqw7z7s8mc1r5gj8f76xvp8z650xq50vdfj5gjwsbmzd99z2f";
+      type = "gem";
+    };
+    version = "0.2.1";
+  };
+  google-apis-iamcredentials_v1 = {
+    dependencies = ["google-apis-core"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xjlzq2fxpwvp9b6ajs8cpyjv8vs2d2npg9v23yj181hj2fnn82c";
+      type = "gem";
+    };
+    version = "0.1.0";
+  };
+  google-apis-storage_v1 = {
+    dependencies = ["google-apis-core"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0axycds5q20fqm6vqxa5r922021p0f8jhwvlgw8r1vq600ljribi";
+      type = "gem";
+    };
+    version = "0.1.0";
+  };
+  google-cloud-core = {
+    dependencies = ["google-cloud-env" "google-cloud-errors"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1qjn7vs8f85vxi1nkikbjfja6bv9snrj26vzscjii0cm8n4dy0i1";
+      type = "gem";
+    };
+    version = "1.5.0";
+  };
+  google-cloud-env = {
+    dependencies = ["faraday"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bjgxyvagy6hjj8yg7fqq24rwdjxb6hx7fdd1bmn4mwd846lci2i";
+      type = "gem";
+    };
+    version = "1.4.0";
+  };
+  google-cloud-errors = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1hvs1x39g77hbdqjxmzcl6gq8160pv3kskvzbbch0ww1np6qwm67";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  google-cloud-storage = {
+    dependencies = ["addressable" "digest-crc" "google-apis-iamcredentials_v1" "google-apis-storage_v1" "google-cloud-core" "googleauth" "mini_mime"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "17axi5gmy0g04801v11lww5mvqzffqdc3w6k1j7f95v90hy4yn6m";
+      type = "gem";
+    };
+    version = "1.30.0";
+  };
+  googleauth = {
+    dependencies = ["faraday" "jwt" "memoist" "multi_json" "os" "signet"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pwm0mzb5zffhk6yw4v3n1yj8qr6jla6f78vsv4g0bxh9z0ikc2z";
+      type = "gem";
+    };
+    version = "0.15.0";
+  };
+  highline = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "01ib7jp85xjc4gh4jg0wyzllm46hwv8p0w1m4c75pbgi41fps50y";
+      type = "gem";
+    };
+    version = "1.7.10";
+  };
+  http-cookie = {
+    dependencies = ["domain_name"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "004cgs4xg5n6byjs7qld0xhsjq3n6ydfh897myr2mibvh6fjc49g";
+      type = "gem";
+    };
+    version = "1.0.3";
+  };
+  httpclient = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19mxmvghp7ki3klsxwrlwr431li7hm1lczhhj8z4qihl2acy8l99";
+      type = "gem";
+    };
+    version = "2.8.3";
+  };
+  jmespath = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1d4wac0dcd1jf6kc57891glih9w57552zgqswgy74d1xhgnk0ngf";
+      type = "gem";
+    };
+    version = "1.4.0";
+  };
+  json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lrirj0gw420kw71bjjlqkqhqbrplla61gbv1jzgsz6bv90qr3ci";
+      type = "gem";
+    };
+    version = "2.5.1";
+  };
+  jwt = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "14ynyq1q483spj20ffl4xayfqx1a8qr761mqjfxczf8lwlap392n";
+      type = "gem";
+    };
+    version = "2.2.2";
+  };
+  memoist = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0i9wpzix3sjhf6d9zw60dm4371iq8kyz7ckh2qapan2vyaim6b55";
+      type = "gem";
+    };
+    version = "0.16.2";
+  };
+  mini_magick = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1aj604x11d9pksbljh0l38f70b558rhdgji1s9i763hiagvvx2hs";
+      type = "gem";
+    };
+    version = "4.11.0";
+  };
+  mini_mime = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1axm0rxyx3ss93wbmfkm78a6x03l8y4qy60rhkkiq0aza0vwq3ha";
+      type = "gem";
+    };
+    version = "1.0.2";
+  };
+  multi_json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0pb1g1y3dsiahavspyzkdy39j4q377009f6ix0bh1ag4nqw43l0z";
+      type = "gem";
+    };
+    version = "1.15.0";
+  };
+  multipart-post = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09k0b3cybqilk1gwrwwain95rdypixb2q9w65gd44gfzsd84xi1x";
+      type = "gem";
+    };
+    version = "2.0.0";
+  };
+  nanaimo = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xi36h3f7nm8bc2k0b6svpda1lyank2gf872lxjbhw3h95hdrbma";
+      type = "gem";
+    };
+    version = "0.3.0";
+  };
+  naturally = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "04x1nkx6gkqzlc4phdvq05v3vjds6mgqhjqzqpcs6vdh5xyqrf59";
+      type = "gem";
+    };
+    version = "2.2.1";
+  };
+  os = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "12fli64wz5j9868gpzv5wqsingk1jk457qyqksv9ksmq9b0zpc9x";
+      type = "gem";
+    };
+    version = "1.1.1";
+  };
+  plist = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1whhr897z6z6av85x2cipyjk46bwh6s4wx6nbrcd3iifnzvbqs7l";
+      type = "gem";
+    };
+    version = "3.6.0";
+  };
+  public_suffix = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1xqcgkl7bwws1qrlnmxgh8g4g9m10vg60bhlw40fplninb3ng6d9";
+      type = "gem";
+    };
+    version = "4.0.6";
+  };
+  rake = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1iik52mf9ky4cgs38fp2m8r6skdkq1yz23vh18lk95fhbcxb6a67";
+      type = "gem";
+    };
+    version = "13.0.3";
+  };
+  representable = {
+    dependencies = ["declarative" "declarative-option" "uber"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qm9rgi1j5a6nv726ka4mmixivlxfsg91h8rpp72wwd4vqbkkm07";
+      type = "gem";
+    };
+    version = "3.0.4";
+  };
+  retriable = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1q48hqws2dy1vws9schc0kmina40gy7sn5qsndpsfqdslh65snha";
+      type = "gem";
+    };
+    version = "3.1.2";
+  };
+  rexml = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1mkvkcw9fhpaizrhca0pdgjcrbns48rlz4g6lavl5gjjq3rk2sq3";
+      type = "gem";
+    };
+    version = "3.2.4";
+  };
+  rouge = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0sfikq1q8xyqqx690iiz7ybhzx87am4w50w8f2nq36l3asw4x89d";
+      type = "gem";
+    };
+    version = "2.0.7";
+  };
+  ruby2_keywords = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15wfcqxyfgka05v2a7kpg64x57gl1y4xzvnc9lh60bqx5sf1iqrs";
+      type = "gem";
+    };
+    version = "0.0.4";
+  };
+  rubyzip = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0590m2pr9i209pp5z4mx0nb1961ishdiqb28995hw1nln1d1b5ji";
+      type = "gem";
+    };
+    version = "2.3.0";
+  };
+  security = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ryjxs0j66wrbky2c08yf0mllwalvpg12rpxzbdx2rdhj3cbrlxa";
+      type = "gem";
+    };
+    version = "0.1.3";
+  };
+  signet = {
+    dependencies = ["addressable" "faraday" "jwt" "multi_json"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "10g2667fvxnc50hcd1aywgsbf8j7nrckg3n7zjvywmyz82pwmpqp";
+      type = "gem";
+    };
+    version = "0.14.0";
+  };
+  simctl = {
+    dependencies = ["CFPropertyList" "naturally"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1v9rsdmg5c5kkf8ps47xnrfbvjnq11sbaifr186jwkh4npawz00x";
+      type = "gem";
+    };
+    version = "1.6.8";
+  };
+  slack-notifier = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pkfn99dhy5s526r6k8d87fwwb6j287ga9s7lxqmh60z28xqh3bv";
+      type = "gem";
+    };
+    version = "2.3.2";
+  };
+  terminal-notifier = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1slc0y8pjpw30hy21v8ypafi8r7z9jlj4bjbgz03b65b28i2n3bs";
+      type = "gem";
+    };
+    version = "2.0.0";
+  };
+  terminal-table = {
+    dependencies = ["unicode-display_width"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1512cngw35hsmhvw4c05rscihc59mnj09m249sm9p3pik831ydqk";
+      type = "gem";
+    };
+    version = "1.8.0";
+  };
+  tty-cursor = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0j5zw041jgkmn605ya1zc151bxgxl6v192v2i26qhxx7ws2l2lvr";
+      type = "gem";
+    };
+    version = "0.7.1";
+  };
+  tty-screen = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "18jr6s1cg8yb26wzkqa6874q0z93rq0y5aw092kdqazk71y6a235";
+      type = "gem";
+    };
+    version = "0.8.1";
+  };
+  tty-spinner = {
+    dependencies = ["tty-cursor"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0hh5awmijnzw9flmh5ak610x1d00xiqagxa5mbr63ysggc26y0qf";
+      type = "gem";
+    };
+    version = "0.9.3";
+  };
+  uber = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1p1mm7mngg40x05z52md3mbamkng0zpajbzqjjwmsyw0zw3v9vjv";
+      type = "gem";
+    };
+    version = "0.1.0";
+  };
+  unf = {
+    dependencies = ["unf_ext"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bh2cf73i2ffh4fcpdn9ir4mhq8zi50ik0zqa1braahzadx536a9";
+      type = "gem";
+    };
+    version = "0.1.4";
+  };
+  unf_ext = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0wc47r23h063l8ysws8sy24gzh74mks81cak3lkzlrw4qkqb3sg4";
+      type = "gem";
+    };
+    version = "0.0.7.7";
+  };
+  unicode-display_width = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "06i3id27s60141x6fdnjn5rar1cywdwy64ilc59cz937303q3mna";
+      type = "gem";
+    };
+    version = "1.7.0";
+  };
+  webrick = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1d4cvgmxhfczxiq5fr534lmizkhigd15bsx5719r5ds7k7ivisc7";
+      type = "gem";
+    };
+    version = "1.7.0";
+  };
+  word_wrap = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1iyc5bc7dbgsd8j3yk1i99ral39f23l6wapi0083fbl19hid8mpm";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  xcode-install = {
+    dependencies = ["claide" "fastlane"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1yhslanqw8r0mhls2hira05c8xjzzr7mnz1ab9p5qwg4z45ddjj8";
+      type = "gem";
+    };
+    version = "2.6.8";
+  };
+  xcodeproj = {
+    dependencies = ["CFPropertyList" "atomos" "claide" "colored2" "nanaimo"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1411j6sfnz0cx4fiw52f0yqx4bgcn8cmpgi3i5rwmmahayyjz2fn";
+      type = "gem";
+    };
+    version = "1.19.0";
+  };
+  xcpretty = {
+    dependencies = ["rouge"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1xq47q2h5llj7b54rws4796904vnnjz7qqnacdv7wlp3gdbwrivm";
+      type = "gem";
+    };
+    version = "0.3.0";
+  };
+  xcpretty-travis-formatter = {
+    dependencies = ["xcpretty"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "14rg4f70klrs910n7rsgfa4dn8s2qyny55194ax2qyyb2wpk7k5a";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/xcodes/default.nix b/nixpkgs/pkgs/development/tools/xcodes/default.nix
new file mode 100644
index 000000000000..a7449aa08651
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/xcodes/default.nix
@@ -0,0 +1,60 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, swift
+, swiftpm
+, swiftpm2nix
+, makeWrapper
+, CryptoKit
+, LocalAuthentication
+, libcompression
+, aria2
+}:
+let
+  generated = swiftpm2nix.helpers ./generated;
+in
+stdenv.mkDerivation (finalAttrs: {
+  pname = "xcodes";
+  version = "1.4.1";
+
+  src = fetchFromGitHub {
+    owner = "XcodesOrg";
+    repo = finalAttrs.pname;
+    rev = finalAttrs.version;
+    hash = "sha256-ARrSQ9ozM90Yg7y4WdU7jjNQ64sXHuhxZh/iNJcFfY0=";
+  };
+
+  nativeBuildInputs = [ swift swiftpm makeWrapper ];
+
+  buildInputs = [
+    CryptoKit
+    LocalAuthentication
+    libcompression
+  ];
+
+  configurePhase = generated.configure;
+
+  installPhase = ''
+    runHook preInstall
+
+    binPath="$(swiftpmBinPath)"
+    install -D $binPath/xcodes $out/bin/xcodes
+    wrapProgram $out/bin/xcodes \
+      --prefix PATH : ${lib.makeBinPath [ aria2 ]}
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    changelog = "https://github.com/XcodesOrg/xcodes/releases/tag/${finalAttrs.version}";
+    description = "Command-line tool to install and switch between multiple versions of Xcode";
+    homepage = "https://github.com/XcodesOrg/xcodes";
+    license = with licenses; [
+      mit
+      # unxip
+      lgpl3Only
+    ];
+    maintainers = with maintainers; [ _0x120581f emilytrau ];
+    platforms = platforms.darwin;
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/xcodes/generated/default.nix b/nixpkgs/pkgs/development/tools/xcodes/generated/default.nix
new file mode 100644
index 000000000000..32ec081a9380
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/xcodes/generated/default.nix
@@ -0,0 +1,17 @@
+# This file was generated by swiftpm2nix.
+{
+  workspaceStateFile = ./workspace-state.json;
+  hashes = {
+    "data" = "1jf2y9dbg1qvxkkabdkihdnr1kmznq79h18j65a7iw1hljdp8hyg";
+    "Foundation" = "0hcpc15v38l32qc2sh4gqj909b1f90knln9yz3mfiyf6xi7iy6q7";
+    "KeychainAccess" = "0m57pq1vn5qarmlx5x4kfv0yzjylafl3ipih5p60zyfsx6k5b55l";
+    "LegibleError" = "08x5agha74chq1z5c7c5r2vasdk81pyl2k085miapd4l3jszz4fj";
+    "Path.swift" = "05qk7kwb1254zwdxc3sjc3gprccnv9fwapmy5y6ygxjz8a6jfk83";
+    "PromiseKit" = "0vlkd4famjgbd4qs2ldi5aqg13nk77h7ddsdigyxxzgkwgxl076d";
+    "Rainbow" = "0iv31azny668vpsjgmldgkgn9cp8i5h9rlc6w5bs8q63nwq19wb0";
+    "swift-argument-parser" = "19b4pkcx4xf0iwg0nbr7wvkkbwl6h8sch848gid6l98728glmcw9";
+    "SwiftSoup" = "14klizw8jhmxhxays1b1yh4bp0nbb3l4l1pj6sdnf0iqs0wladv8";
+    "Version" = "0s5bwr1li6dnsnalfyraq1kzhqmmn9qwp1mld4msrn3q5vvjmql9";
+    "Yams" = "11abhcfkmqm3cmh7vp7rqzvxd1zj02j2866a2pp6v9m89456xb76";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/xcodes/generated/workspace-state.json b/nixpkgs/pkgs/development/tools/xcodes/generated/workspace-state.json
new file mode 100644
index 000000000000..f13a3a54c6d4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/xcodes/generated/workspace-state.json
@@ -0,0 +1,194 @@
+{
+  "object": {
+    "artifacts": [],
+    "dependencies": [
+      {
+        "basedOn": null,
+        "packageRef": {
+          "identity": "data",
+          "kind": "remoteSourceControl",
+          "location": "https://github.com/xcodereleases/data",
+          "name": "XcodeReleases"
+        },
+        "state": {
+          "checkoutState": {
+            "revision": "fcf527b187817f67c05223676341f3ab69d4214d"
+          },
+          "name": "sourceControlCheckout"
+        },
+        "subpath": "data"
+      },
+      {
+        "basedOn": null,
+        "packageRef": {
+          "identity": "foundation",
+          "kind": "remoteSourceControl",
+          "location": "https://github.com/PromiseKit/Foundation.git",
+          "name": "PMKFoundation"
+        },
+        "state": {
+          "checkoutState": {
+            "revision": "985f17fa69ee0e5b7eb3ff9be87ffc4e05fc0927",
+            "version": "3.4.0"
+          },
+          "name": "sourceControlCheckout"
+        },
+        "subpath": "Foundation"
+      },
+      {
+        "basedOn": null,
+        "packageRef": {
+          "identity": "keychainaccess",
+          "kind": "remoteSourceControl",
+          "location": "https://github.com/kishikawakatsumi/KeychainAccess.git",
+          "name": "KeychainAccess"
+        },
+        "state": {
+          "checkoutState": {
+            "revision": "8d33ffd6f74b3bcfc99af759d4204c6395a3f918",
+            "version": "3.2.1"
+          },
+          "name": "sourceControlCheckout"
+        },
+        "subpath": "KeychainAccess"
+      },
+      {
+        "basedOn": null,
+        "packageRef": {
+          "identity": "legibleerror",
+          "kind": "remoteSourceControl",
+          "location": "https://github.com/mxcl/LegibleError.git",
+          "name": "LegibleError"
+        },
+        "state": {
+          "checkoutState": {
+            "revision": "909e9bab3ded97350b28a5ab41dd745dd8aa9710",
+            "version": "1.0.4"
+          },
+          "name": "sourceControlCheckout"
+        },
+        "subpath": "LegibleError"
+      },
+      {
+        "basedOn": null,
+        "packageRef": {
+          "identity": "path.swift",
+          "kind": "remoteSourceControl",
+          "location": "https://github.com/mxcl/Path.swift.git",
+          "name": "Path.swift"
+        },
+        "state": {
+          "checkoutState": {
+            "revision": "dac007e907a4f4c565cfdc55a9ce148a761a11d5",
+            "version": "0.16.3"
+          },
+          "name": "sourceControlCheckout"
+        },
+        "subpath": "Path.swift"
+      },
+      {
+        "basedOn": null,
+        "packageRef": {
+          "identity": "promisekit",
+          "kind": "remoteSourceControl",
+          "location": "https://github.com/mxcl/PromiseKit.git",
+          "name": "PromiseKit"
+        },
+        "state": {
+          "checkoutState": {
+            "revision": "1c296a8637838901d2b01e4c46875ee749506133",
+            "version": "6.8.5"
+          },
+          "name": "sourceControlCheckout"
+        },
+        "subpath": "PromiseKit"
+      },
+      {
+        "basedOn": null,
+        "packageRef": {
+          "identity": "rainbow",
+          "kind": "remoteSourceControl",
+          "location": "https://github.com/onevcat/Rainbow.git",
+          "name": "Rainbow"
+        },
+        "state": {
+          "checkoutState": {
+            "revision": "626c3d4b6b55354b4af3aa309f998fae9b31a3d9",
+            "version": "3.2.0"
+          },
+          "name": "sourceControlCheckout"
+        },
+        "subpath": "Rainbow"
+      },
+      {
+        "basedOn": null,
+        "packageRef": {
+          "identity": "swift-argument-parser",
+          "kind": "remoteSourceControl",
+          "location": "https://github.com/apple/swift-argument-parser",
+          "name": "swift-argument-parser"
+        },
+        "state": {
+          "checkoutState": {
+            "revision": "9f39744e025c7d377987f30b03770805dcb0bcd1",
+            "version": "1.1.4"
+          },
+          "name": "sourceControlCheckout"
+        },
+        "subpath": "swift-argument-parser"
+      },
+      {
+        "basedOn": null,
+        "packageRef": {
+          "identity": "swiftsoup",
+          "kind": "remoteSourceControl",
+          "location": "https://github.com/scinfu/SwiftSoup.git",
+          "name": "SwiftSoup"
+        },
+        "state": {
+          "checkoutState": {
+            "revision": "aeb5b4249c273d1783a5299e05be1b26e061ea81",
+            "version": "2.0.0"
+          },
+          "name": "sourceControlCheckout"
+        },
+        "subpath": "SwiftSoup"
+      },
+      {
+        "basedOn": null,
+        "packageRef": {
+          "identity": "version",
+          "kind": "remoteSourceControl",
+          "location": "https://github.com/mxcl/Version.git",
+          "name": "Version"
+        },
+        "state": {
+          "checkoutState": {
+            "revision": "087c91fedc110f9f833b14ef4c32745dabca8913",
+            "version": "1.0.3"
+          },
+          "name": "sourceControlCheckout"
+        },
+        "subpath": "Version"
+      },
+      {
+        "basedOn": null,
+        "packageRef": {
+          "identity": "yams",
+          "kind": "remoteSourceControl",
+          "location": "https://github.com/jpsim/Yams",
+          "name": "Yams"
+        },
+        "state": {
+          "checkoutState": {
+            "revision": "01835dc202670b5bb90d07f3eae41867e9ed29f6",
+            "version": "5.0.1"
+          },
+          "name": "sourceControlCheckout"
+        },
+        "subpath": "Yams"
+      }
+    ]
+  },
+  "version": 6
+}
diff --git a/nixpkgs/pkgs/development/tools/xcpretty/Gemfile b/nixpkgs/pkgs/development/tools/xcpretty/Gemfile
new file mode 100644
index 000000000000..0b37143fe0eb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/xcpretty/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'xcpretty'
diff --git a/nixpkgs/pkgs/development/tools/xcpretty/Gemfile.lock b/nixpkgs/pkgs/development/tools/xcpretty/Gemfile.lock
new file mode 100644
index 000000000000..c0b9676d27bd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/xcpretty/Gemfile.lock
@@ -0,0 +1,15 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    rouge (2.0.7)
+    xcpretty (0.3.0)
+      rouge (~> 2.0.7)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  xcpretty
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/development/tools/xcpretty/default.nix b/nixpkgs/pkgs/development/tools/xcpretty/default.nix
new file mode 100644
index 000000000000..9c24b9810050
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/xcpretty/default.nix
@@ -0,0 +1,21 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "xcpretty";
+  gemdir = ./.;
+
+  exes = [ "xcpretty" ];
+
+  passthru = {
+    updateScript = bundlerUpdateScript "xcpretty";
+  };
+
+  meta = with lib; {
+    description     = "Flexible and fast xcodebuild formatter";
+    homepage        = "https://github.com/supermarin/xcpretty";
+    license         = licenses.mit;
+    maintainers     = with maintainers; [
+      nicknovitski
+    ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/xcpretty/gemset.nix b/nixpkgs/pkgs/development/tools/xcpretty/gemset.nix
new file mode 100644
index 000000000000..ef5591c30cf3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/xcpretty/gemset.nix
@@ -0,0 +1,19 @@
+{
+  rouge = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0sfikq1q8xyqqx690iiz7ybhzx87am4w50w8f2nq36l3asw4x89d";
+      type = "gem";
+    };
+    version = "2.0.7";
+  };
+  xcpretty = {
+    dependencies = ["rouge"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1xq47q2h5llj7b54rws4796904vnnjz7qqnacdv7wlp3gdbwrivm";
+      type = "gem";
+    };
+    version = "0.3.0";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/xqilla/default.nix b/nixpkgs/pkgs/development/tools/xqilla/default.nix
new file mode 100644
index 000000000000..342ca426801d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/xqilla/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchurl, fetchpatch, xercesc }:
+
+stdenv.mkDerivation rec {
+  pname = "xqilla";
+  version = "2.3.4";
+
+  src = fetchurl {
+    url    = "mirror://sourceforge/xqilla/XQilla-${version}.tar.gz";
+    sha256 = "0m9z7diw7pdyb4qycbqyr2x55s13v8310xsi7yz0inpw27q4vzdd";
+  };
+
+  patches = [
+    (fetchpatch {
+      name = "xqilla-gcc11.patch";
+      url = "https://git.pld-linux.org/gitweb.cgi?p=packages/xqilla.git;a=blob_plain;f=xqilla-gcc11.patch;h=c9e28be64097040348f710cb27be5f7dad001112;hb=4efe07397c6fb426a65b2eec6999d3c7e683848a";
+      hash = "sha256-enMEF3U+PsbwOQ5SwlRVWc/FpyLS3aK6JgUgOp3ZbiA=";
+    })
+  ];
+
+  configureFlags = [ "--with-xerces=${xercesc}" ];
+
+  meta = with lib; {
+    description = "An XQuery and XPath 2 library and command line utility written in C++, implemented on top of the Xerces-C library";
+    license     = licenses.asl20 ;
+    maintainers = with maintainers; [ obadz ];
+    platforms   = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/yaml2json/default.nix b/nixpkgs/pkgs/development/tools/yaml2json/default.nix
new file mode 100644
index 000000000000..444b0b0017e1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/yaml2json/default.nix
@@ -0,0 +1,26 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "yaml2json";
+  version = "1.3.2";
+
+  src = fetchFromGitHub {
+    owner = "bronze1man";
+    repo = "yaml2json";
+    rev = "v${version}";
+    hash = "sha256-yVA5eV+/TxWN3wzsHy5++IGMAopkCz+PBfjSD+TNKc8=";
+  };
+
+  vendorHash = "sha256-g+yaVIx4jxpAQ/+WrGKxhVeliYx7nLQe/zsGpxV4Fn4=";
+
+  subPackages = [ "." ];
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/bronze1man/yaml2json";
+    description = "Convert yaml to json";
+    license = with licenses; [ mit ];
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/yamlfmt/default.nix b/nixpkgs/pkgs/development/tools/yamlfmt/default.nix
new file mode 100644
index 000000000000..5f8c043b196f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/yamlfmt/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "yamlfmt";
+  version = "0.11.0";
+
+  src = fetchFromGitHub {
+    owner = "google";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-7+ui5jEJkjejAZRdM+okoF3Qw8SJSTKJS7LNNnBgz0g=";
+  };
+
+  vendorHash = "sha256-JiFVc2+LcCgvnEX6W4XBtIgXcILEO2HZT4DTp62eUJU=";
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "An extensible command line tool or library to format yaml files.";
+    homepage = "https://github.com/google/yamlfmt";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ sno2wman ];
+    mainProgram = "yamlfmt";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/yamlpath/default.nix b/nixpkgs/pkgs/development/tools/yamlpath/default.nix
new file mode 100644
index 000000000000..8bb0fcc8311c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/yamlpath/default.nix
@@ -0,0 +1,54 @@
+{ lib
+, fetchFromGitHub
+, hiera-eyaml
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "yamlpath";
+  version = "3.8.0";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "wwkimball";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    sha256 = "sha256-6N2s/LWFa3mgMQ88rt3IaWk+b2PTWfT7z1mi+ioQEyU=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    python-dateutil
+    ruamel-yaml
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    hiera-eyaml
+    mock
+    pytest-console-scripts
+    pytestCheckHook
+  ];
+
+  preCheck = ''
+    export PATH=$PATH:$out/bin
+  '';
+
+  pythonImportsCheck = [
+    "yamlpath"
+  ];
+
+  meta = with lib; {
+    description = "Command-line processors for YAML/JSON/Compatible data";
+    homepage = "https://github.com/wwkimball/yamlpath";
+    changelog = "https://github.com/wwkimball/yamlpath/releases/tag/v${version}";
+    longDescription = ''
+      Command-line get/set/merge/validate/scan/convert/diff processors for YAML/JSON/Compatible data
+      using powerful, intuitive, command-line friendly syntax
+     '';
+    license = licenses.isc;
+    maintainers = with maintainers; [ Flakebi ];
+
+   # No support for ruamel.yaml > 0.17.21
+   # https://github.com/wwkimball/yamlpath/issues/217
+    broken = true;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/yarn-berry/default.nix b/nixpkgs/pkgs/development/tools/yarn-berry/default.nix
new file mode 100644
index 000000000000..d52d6d27e880
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/yarn-berry/default.nix
@@ -0,0 +1,44 @@
+{ fetchFromGitHub, lib, nodejs, stdenv, yarn }:
+
+stdenv.mkDerivation rec {
+  name = "yarn-berry";
+  version = "4.0.1";
+
+  src = fetchFromGitHub {
+    owner = "yarnpkg";
+    repo = "berry";
+    rev = "@yarnpkg/cli/${version}";
+    hash = "sha256-9QNeXamNqRx+Bfg8nAhnImPuNFyqrHIs1eF9prSwIR4=";
+  };
+
+  buildInputs = [
+    nodejs
+  ];
+
+  nativeBuildInputs = [
+    yarn
+  ];
+
+  dontConfigure = true;
+
+  buildPhase = ''
+    runHook preBuild
+    yarn workspace @yarnpkg/cli build:cli
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm 755 ./packages/yarnpkg-cli/bundles/yarn.js "$out/bin/yarn"
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://yarnpkg.com/";
+    description = "Fast, reliable, and secure dependency management.";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ ryota-ka thehedgeh0g ];
+    platforms = platforms.unix;
+    mainProgram = "yarn";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/yarn/default.nix b/nixpkgs/pkgs/development/tools/yarn/default.nix
new file mode 100644
index 000000000000..330212545020
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/yarn/default.nix
@@ -0,0 +1,41 @@
+{ lib, fetchFromGitHub, fetchzip, nodejs, stdenvNoCC, testers }:
+
+let
+  completion = fetchFromGitHub {
+    owner = "dsifford";
+    repo = "yarn-completion";
+    rev = "v0.17.0";
+    hash = "sha256-z7KPXeYPPRuaEPxgY6YqsLt9n8cSsW3n2FhOzVde1HU=";
+  };
+in
+stdenvNoCC.mkDerivation (finalAttrs: {
+  pname = "yarn";
+  version = "1.22.19";
+
+  src = fetchzip {
+    url = "https://github.com/yarnpkg/yarn/releases/download/v${finalAttrs.version}/yarn-v${finalAttrs.version}.tar.gz";
+    sha256 = "sha256-12wUuWH+kkqxAgVYkyhIYVtexjv8DFP9kLpFLWg+h0o=";
+  };
+
+  buildInputs = [ nodejs ];
+
+  installPhase = ''
+    mkdir -p $out/{bin,libexec/yarn/,share/bash-completion/completions/}
+    cp -R . $out/libexec/yarn
+    ln -s $out/libexec/yarn/bin/yarn.js $out/bin/yarn
+    ln -s $out/libexec/yarn/bin/yarn.js $out/bin/yarnpkg
+    ln -s ${completion}/yarn-completion.bash $out/share/bash-completion/completions/yarn.bash
+  '';
+
+  passthru.tests = testers.testVersion { package = finalAttrs.finalPackage; };
+
+  meta = with lib; {
+    description = "Fast, reliable, and secure dependency management for javascript";
+    homepage = "https://classic.yarnpkg.com/";
+    changelog = "https://github.com/yarnpkg/yarn/blob/v${finalAttrs.version}/CHANGELOG.md";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ offline screendriver marsam ];
+    platforms = nodejs.meta.platforms;
+    mainProgram = "yarn";
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/.prettierignore b/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/.prettierignore
new file mode 100644
index 000000000000..3c3629e647f5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/.prettierignore
@@ -0,0 +1 @@
+node_modules
diff --git a/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/LICENSE.txt b/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/LICENSE.txt
new file mode 100644
index 000000000000..94a9ed024d38
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/LICENSE.txt
@@ -0,0 +1,674 @@
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+    <program>  Copyright (C) <year>  <name of author>
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/bin/yarn2nix.js b/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/bin/yarn2nix.js
new file mode 100755
index 000000000000..4e15cfc218f2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/bin/yarn2nix.js
@@ -0,0 +1,90 @@
+#!/usr/bin/env node
+
+const fs = require("fs");
+const lockfile = require("@yarnpkg/lockfile");
+const { docopt } = require("docopt");
+const deepEqual = require("deep-equal");
+const R = require("ramda");
+
+const fixPkgAddMissingSha1 = require("../lib/fixPkgAddMissingSha1");
+const mapObjIndexedReturnArray = require("../lib/mapObjIndexedReturnArray");
+const generateNix = require("../lib/generateNix");
+
+const USAGE = `
+Usage: yarn2nix [options]
+
+Options:
+  -h --help           Shows this help.
+  --no-nix            Hide the nix output
+  --no-patch          Don't patch the lockfile if hashes are missing
+  --lockfile=FILE     Specify path to the lockfile [default: ./yarn.lock].
+  --builtin-fetchgit  Use builtin fetchGit for git dependencies to support on-the-fly generation of yarn.nix without an internet connection
+`;
+
+const options = docopt(USAGE);
+
+const data = fs.readFileSync(options["--lockfile"], "utf8");
+
+// json example:
+
+// {
+//   type:'success',
+//   object:{
+//     'abbrev@1':{
+//       version:'1.0.9',
+//       resolved:'https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135'
+//     },
+//     'shell-quote@git+https://github.com/srghma/node-shell-quote.git#without_unlicenced_jsonify':{
+//       version:'1.6.0',
+//       resolved:'git+https://github.com/srghma/node-shell-quote.git#0aa381896e0cd7409ead15fd444f225807a61e0a'
+//     },
+//     '@graphile/plugin-supporter@git+https://1234user:1234pass@git.graphile.com/git/users/1234user/postgraphile-supporter.git':{
+//       version:'1.6.0',
+//       resolved:'git+https://1234user:1234pass@git.graphile.com/git/users/1234user/postgraphile-supporter.git#1234commit'
+//     },
+//   }
+// }
+
+const json = lockfile.parse(data);
+
+if (json.type !== "success") {
+  throw new Error("yarn.lock parse error");
+}
+
+// Check for missing hashes in the yarn.lock and patch if necessary
+
+let pkgs = R.pipe(
+  mapObjIndexedReturnArray((value, key) => ({
+    ...value,
+    nameWithVersion: key
+  })),
+  R.uniqBy(R.prop("resolved"))
+)(json.object);
+
+(async () => {
+  if (!options["--no-patch"]) {
+    pkgs = await Promise.all(R.map(fixPkgAddMissingSha1, pkgs));
+  }
+
+  const origJson = lockfile.parse(data);
+
+  if (!deepEqual(origJson, json)) {
+    console.error("found changes in the lockfile", options["--lockfile"]);
+
+    if (options["--no-patch"]) {
+      console.error("...aborting");
+      process.exit(1);
+    }
+
+    fs.writeFileSync(options["--lockfile"], lockfile.stringify(json.object));
+  }
+
+  if (!options["--no-nix"]) {
+    // print to stdout
+    console.log(generateNix(pkgs, options["--builtin-fetchgit"]));
+  }
+})().catch(error => {
+  console.error(error);
+
+  process.exit(1);
+});
diff --git a/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/default.nix b/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/default.nix
new file mode 100644
index 000000000000..914296d70953
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/default.nix
@@ -0,0 +1,467 @@
+{ pkgs ? import <nixpkgs> {}
+, nodejs ? pkgs.nodejs
+, yarn ? pkgs.yarn
+, allowAliases ? pkgs.config.allowAliases
+}@inputs:
+
+let
+  inherit (pkgs) stdenv lib callPackage git rsync runCommandLocal;
+
+  compose = f: g: x: f (g x);
+  id = x: x;
+  composeAll = builtins.foldl' compose id;
+
+  # https://docs.npmjs.com/files/package.json#license
+  # TODO: support expression syntax (OR, AND, etc)
+  getLicenseFromSpdxId = licstr:
+    if licstr == "UNLICENSED" then
+      lib.licenses.unfree
+    else
+      lib.getLicenseFromSpdxId licstr;
+in rec {
+  # Export yarn again to make it easier to find out which yarn was used.
+  inherit yarn;
+
+  # Re-export pkgs
+  inherit pkgs;
+
+  unlessNull = item: alt:
+    if item == null then alt else item;
+
+  reformatPackageName = pname:
+    let
+      # regex adapted from `validate-npm-package-name`
+      # will produce 3 parts e.g.
+      # "@someorg/somepackage" -> [ "@someorg/" "someorg" "somepackage" ]
+      # "somepackage" -> [ null null "somepackage" ]
+      parts = builtins.tail (builtins.match "^(@([^/]+)/)?([^/]+)$" pname);
+      # if there is no organisation we need to filter out null values.
+      non-null = builtins.filter (x: x != null) parts;
+    in builtins.concatStringsSep "-" non-null;
+
+  inherit getLicenseFromSpdxId;
+
+  # Generates the yarn.nix from the yarn.lock file
+  mkYarnNix = { yarnLock, flags ? [] }:
+    pkgs.runCommand "yarn.nix" {}
+    "${yarn2nix}/bin/yarn2nix --lockfile ${yarnLock} --no-patch --builtin-fetchgit ${lib.escapeShellArgs flags} > $out";
+
+  # Loads the generated offline cache. This will be used by yarn as
+  # the package source.
+  importOfflineCache = yarnNix:
+    let
+      pkg = callPackage yarnNix { };
+    in
+      pkg.offline_cache;
+
+  defaultYarnFlags = [
+    "--offline"
+    "--frozen-lockfile"
+    "--ignore-engines"
+  ];
+
+  mkYarnModules = {
+    name ? "${pname}-${version}", # safe name and version, e.g. testcompany-one-modules-1.0.0
+    pname, # original name, e.g @testcompany/one
+    version,
+    packageJSON,
+    yarnLock,
+    yarnNix ? mkYarnNix { inherit yarnLock; },
+    offlineCache ? importOfflineCache yarnNix,
+    yarnFlags ? [ ],
+    ignoreScripts ? true,
+    nodejs ? inputs.nodejs,
+    yarn ? inputs.yarn.override { inherit nodejs; },
+    pkgConfig ? {},
+    preBuild ? "",
+    postBuild ? "",
+    workspaceDependencies ? [], # List of yarn packages
+    packageResolutions ? {},
+  }:
+    let
+      extraNativeBuildInputs =
+        lib.concatMap
+          (key: pkgConfig.${key}.nativeBuildInputs or [])
+          (builtins.attrNames pkgConfig);
+      extraBuildInputs =
+        lib.concatMap
+          (key: pkgConfig.${key}.buildInputs or [])
+          (builtins.attrNames pkgConfig);
+
+      postInstall = builtins.map (key:
+        if (pkgConfig.${key} ? postInstall) then
+          ''
+            for f in $(find -L -path '*/node_modules/${key}' -type d); do
+              (cd "$f" && (${pkgConfig.${key}.postInstall}))
+            done
+          ''
+        else
+          ""
+      ) (builtins.attrNames pkgConfig);
+
+      # build-time JSON generation to avoid IFD
+      # see https://nixos.wiki/wiki/Import_From_Derivation
+      workspaceJSON = pkgs.runCommand "${name}-workspace-package.json"
+        {
+          nativeBuildInputs = [ pkgs.jq ];
+          inherit packageJSON;
+          passAsFile = [ "baseJSON" ];
+          baseJSON = builtins.toJSON { private = true; workspaces = [ "deps/**" ]; resolutions = packageResolutions; };
+        } ''
+        jq --slurpfile packageJSON "$packageJSON" '.resolutions = $packageJSON[0].resolutions + .resolutions' <"$baseJSONPath" >$out
+      '';
+
+      workspaceDependencyLinks = lib.concatMapStringsSep "\n"
+        (dep: ''
+          mkdir -p "deps/${dep.pname}"
+          ln -sf ${dep.packageJSON} "deps/${dep.pname}/package.json"
+        '')
+        workspaceDependencies;
+
+    in stdenv.mkDerivation {
+      inherit preBuild postBuild name;
+      dontUnpack = true;
+      dontInstall = true;
+      nativeBuildInputs = [ yarn nodejs git ] ++ extraNativeBuildInputs;
+      buildInputs = extraBuildInputs;
+
+      configurePhase = lib.optionalString (offlineCache ? outputHash) ''
+        if ! cmp -s ${yarnLock} ${offlineCache}/yarn.lock; then
+          echo "yarn.lock changed, you need to update the fetchYarnDeps hash"
+          exit 1
+        fi
+      '' + ''
+        # Yarn writes cache directories etc to $HOME.
+        export HOME=$PWD/yarn_home
+      '';
+
+      buildPhase = ''
+        runHook preBuild
+
+        mkdir -p "deps/${pname}"
+        cp ${packageJSON} "deps/${pname}/package.json"
+        cp ${workspaceJSON} ./package.json
+        cp ${yarnLock} ./yarn.lock
+        chmod +w ./yarn.lock
+
+        yarn config --offline set yarn-offline-mirror ${offlineCache}
+
+        # Do not look up in the registry, but in the offline cache.
+        ${fixup_yarn_lock}/bin/fixup_yarn_lock yarn.lock
+
+        ${workspaceDependencyLinks}
+
+        yarn install ${lib.escapeShellArgs (defaultYarnFlags ++ lib.optional ignoreScripts "--ignore-scripts" ++ yarnFlags)}
+
+        ${lib.concatStringsSep "\n" postInstall}
+
+        mkdir $out
+        mv node_modules $out/
+        mv deps $out/
+        patchShebangs $out
+
+        runHook postBuild
+      '';
+    };
+
+  # This can be used as a shellHook in mkYarnPackage. It brings the built node_modules into
+  # the shell-hook environment.
+  linkNodeModulesHook = ''
+    if [[ -d node_modules || -L node_modules ]]; then
+      echo "./node_modules is present. Replacing."
+      rm -rf node_modules
+    fi
+
+    ln -s "$node_modules" node_modules
+  '';
+
+  mkYarnWorkspace = {
+    src,
+    packageJSON ? src + "/package.json",
+    yarnLock ? src + "/yarn.lock",
+    nodejs ? inputs.nodejs,
+    yarn ? inputs.yarn.override { inherit nodejs; },
+    packageOverrides ? {},
+    ...
+  }@attrs:
+  let
+    package = lib.importJSON packageJSON;
+
+    packageGlobs = if lib.isList package.workspaces then package.workspaces else package.workspaces.packages;
+
+    packageResolutions = package.resolutions or {};
+
+    globElemToRegex = lib.replaceStrings ["*"] [".*"];
+
+    # PathGlob -> [PathGlobElem]
+    splitGlob = lib.splitString "/";
+
+    # Path -> [PathGlobElem] -> [Path]
+    # Note: Only directories are included, everything else is filtered out
+    expandGlobList = base: globElems:
+      let
+        elemRegex = globElemToRegex (lib.head globElems);
+        rest = lib.tail globElems;
+        children = lib.attrNames (lib.filterAttrs (name: type: type == "directory") (builtins.readDir base));
+        matchingChildren = lib.filter (child: builtins.match elemRegex child != null) children;
+      in if globElems == []
+        then [ base ]
+        else lib.concatMap (child: expandGlobList (base+("/"+child)) rest) matchingChildren;
+
+    # Path -> PathGlob -> [Path]
+    expandGlob = base: glob: expandGlobList base (splitGlob glob);
+
+    packagePaths = lib.concatMap (expandGlob src) packageGlobs;
+
+    packages = lib.listToAttrs (map (src:
+      let
+        packageJSON = src + "/package.json";
+
+        package = lib.importJSON packageJSON;
+
+        allDependencies = lib.foldl (a: b: a // b) {} (map (field: lib.attrByPath [field] {} package) ["dependencies" "devDependencies"]);
+
+        # { [name: String] : { pname : String, packageJSON : String, ... } } -> { [pname: String] : version } -> [{ pname : String, packageJSON : String, ... }]
+        getWorkspaceDependencies = packages: allDependencies:
+          let
+            packageList = lib.attrValues packages;
+          in
+            composeAll [
+              (lib.filter (x: x != null))
+              (lib.mapAttrsToList (pname: _version: lib.findFirst (package: package.pname == pname) null packageList))
+            ] allDependencies;
+
+        workspaceDependencies = getWorkspaceDependencies packages allDependencies;
+
+        name = reformatPackageName package.name;
+      in {
+        inherit name;
+        value = mkYarnPackage (
+          builtins.removeAttrs attrs ["packageOverrides"]
+          // { inherit src packageJSON yarnLock nodejs yarn packageResolutions workspaceDependencies; }
+          // lib.attrByPath [name] {} packageOverrides
+        );
+      })
+      packagePaths
+    );
+  in packages;
+
+  mkYarnPackage = {
+    name ? null,
+    src,
+    packageJSON ? src + "/package.json",
+    yarnLock ? src + "/yarn.lock",
+    yarnNix ? mkYarnNix { inherit yarnLock; },
+    offlineCache ? importOfflineCache yarnNix,
+    nodejs ? inputs.nodejs,
+    yarn ? inputs.yarn.override { inherit nodejs; },
+    yarnFlags ? [ ],
+    yarnPreBuild ? "",
+    yarnPostBuild ? "",
+    pkgConfig ? {},
+    extraBuildInputs ? [],
+    publishBinsFor ? null,
+    workspaceDependencies ? [], # List of yarnPackages
+    packageResolutions ? {},
+    ...
+  }@attrs:
+    let
+      package = lib.importJSON packageJSON;
+      pname = attrs.pname or package.name;
+      safeName = reformatPackageName package.name;
+      version = attrs.version or package.version;
+      baseName = unlessNull name "${safeName}-${version}";
+
+      workspaceDependenciesTransitive = lib.unique (
+        (lib.flatten (builtins.map (dep: dep.workspaceDependencies) workspaceDependencies))
+        ++ workspaceDependencies
+      );
+
+      deps = mkYarnModules {
+        pname = package.name;
+        name = "${safeName}-modules-${version}";
+        preBuild = yarnPreBuild;
+        postBuild = yarnPostBuild;
+        workspaceDependencies = workspaceDependenciesTransitive;
+        inherit packageJSON version yarnLock offlineCache nodejs yarn yarnFlags pkgConfig packageResolutions;
+      };
+
+      publishBinsFor_ = unlessNull publishBinsFor [ package.name ];
+
+      linkDirFunction = ''
+        linkDirToDirLinks() {
+          target=$1
+          if [ ! -f "$target" ]; then
+            mkdir -p "$target"
+          elif [ -L "$target" ]; then
+            local new=$(mktemp -d)
+            trueSource=$(realpath "$target")
+            if [ "$(ls $trueSource | wc -l)" -gt 0 ]; then
+              ln -s $trueSource/* $new/
+            fi
+            rm -r "$target"
+            mv "$new" "$target"
+          fi
+        }
+      '';
+
+      workspaceDependencyCopy = lib.concatMapStringsSep "\n"
+        (dep: ''
+          # ensure any existing scope directory is not a symlink
+          linkDirToDirLinks "$(dirname node_modules/${dep.package.name})"
+          mkdir -p "deps/${dep.package.name}"
+          tar -xf "${dep}/tarballs/${dep.name}.tgz" --directory "deps/${dep.package.name}" --strip-components=1
+          if [ ! -e "deps/${dep.package.name}/node_modules" ]; then
+            ln -s "${deps}/deps/${dep.package.name}/node_modules" "deps/${dep.package.name}/node_modules"
+          fi
+        '')
+        workspaceDependenciesTransitive;
+
+    in stdenv.mkDerivation (builtins.removeAttrs attrs ["yarnNix" "pkgConfig" "workspaceDependencies" "packageResolutions"] // {
+      inherit pname version src;
+
+      name = baseName;
+
+      buildInputs = [ yarn nodejs rsync ] ++ extraBuildInputs;
+
+      node_modules = deps + "/node_modules";
+
+      configurePhase = attrs.configurePhase or ''
+        runHook preConfigure
+
+        for localDir in npm-packages-offline-cache node_modules; do
+          if [[ -d $localDir || -L $localDir ]]; then
+            echo "$localDir dir present. Removing."
+            rm -rf $localDir
+          fi
+        done
+
+        # move convent of . to ./deps/${package.name}
+        mv $PWD $NIX_BUILD_TOP/temp
+        mkdir -p "$PWD/deps/${package.name}"
+        rm -fd "$PWD/deps/${package.name}"
+        mv $NIX_BUILD_TOP/temp "$PWD/deps/${package.name}"
+        cd $PWD
+
+        ln -s ${deps}/deps/${package.name}/node_modules "deps/${package.name}/node_modules"
+
+        cp -r $node_modules node_modules
+        chmod -R +w node_modules
+
+        ${linkDirFunction}
+
+        linkDirToDirLinks "$(dirname node_modules/${package.name})"
+        ln -s "deps/${package.name}" "node_modules/${package.name}"
+
+        ${workspaceDependencyCopy}
+
+        # Help yarn commands run in other phases find the package
+        echo "--cwd deps/${package.name}" > .yarnrc
+        runHook postConfigure
+      '';
+
+      # Replace this phase on frontend packages where only the generated
+      # files are an interesting output.
+      installPhase = attrs.installPhase or ''
+        runHook preInstall
+
+        mkdir -p $out/{bin,libexec/${package.name}}
+        mv node_modules $out/libexec/${package.name}/node_modules
+        mv deps $out/libexec/${package.name}/deps
+
+        node ${./internal/fixup_bin.js} $out/bin $out/libexec/${package.name}/node_modules ${lib.concatStringsSep " " publishBinsFor_}
+
+        runHook postInstall
+      '';
+
+      doDist = attrs.doDist or true;
+
+      distPhase = attrs.distPhase or ''
+        # pack command ignores cwd option
+        rm -f .yarnrc
+        cd $out/libexec/${package.name}/deps/${package.name}
+        mkdir -p $out/tarballs/
+        yarn pack --offline --ignore-scripts --filename $out/tarballs/${baseName}.tgz
+      '';
+
+      passthru = {
+        inherit package packageJSON deps;
+        workspaceDependencies = workspaceDependenciesTransitive;
+      } // (attrs.passthru or {});
+
+      meta = {
+        inherit (nodejs.meta) platforms;
+      } // lib.optionalAttrs (package ? description) { inherit (package) description; }
+        // lib.optionalAttrs (package ? homepage) { inherit (package) homepage; }
+        // lib.optionalAttrs (package ? license) { license = getLicenseFromSpdxId package.license; }
+        // (attrs.meta or {});
+    });
+
+  yarn2nix = mkYarnPackage {
+    src =
+      let
+        src = ./.;
+
+        mkFilter = { dirsToInclude, filesToInclude, root }: path: type:
+          let
+            inherit (lib) elem elemAt splitString;
+
+            subpath = elemAt (splitString "${toString root}/" path) 1;
+            spdir = elemAt (splitString "/" subpath) 0;
+          in elem spdir dirsToInclude ||
+            (type == "regular" && elem subpath filesToInclude);
+      in builtins.filterSource
+          (mkFilter {
+            dirsToInclude = ["bin" "lib"];
+            filesToInclude = ["package.json" "yarn.lock"];
+            root = src;
+          })
+          src;
+
+    # yarn2nix is the only package that requires the yarnNix option.
+    # All the other projects can auto-generate that file.
+    yarnNix = ./yarn.nix;
+
+    # Using the filter above and importing package.json from the filtered
+    # source results in an error in restricted mode. To circumvent this,
+    # we import package.json from the unfiltered source
+    packageJSON = ./package.json;
+
+    yarnFlags = defaultYarnFlags ++ [ "--ignore-scripts" "--production=true" ];
+
+    nativeBuildInputs = [ pkgs.makeWrapper ];
+
+    buildPhase = ''
+      source ${./nix/expectShFunctions.sh}
+
+      expectFilePresent ./node_modules/.yarn-integrity
+
+      # check dependencies are installed
+      expectFilePresent ./node_modules/@yarnpkg/lockfile/package.json
+
+      # check devDependencies are not installed
+      expectFileOrDirAbsent ./node_modules/.bin/eslint
+      expectFileOrDirAbsent ./node_modules/eslint/package.json
+    '';
+
+    postInstall = ''
+      wrapProgram $out/bin/yarn2nix --prefix PATH : "${pkgs.nix-prefetch-git}/bin"
+    '';
+  };
+
+  fixup_yarn_lock = runCommandLocal "fixup_yarn_lock"
+    {
+      buildInputs = [ nodejs ];
+    } ''
+    mkdir -p $out/lib
+    mkdir -p $out/bin
+
+    cp ${./lib/urlToName.js} $out/lib/urlToName.js
+    cp ${./internal/fixup_yarn_lock.js} $out/bin/fixup_yarn_lock
+
+    patchShebangs $out
+  '';
+} // lib.optionalAttrs allowAliases {
+  # Aliases
+  spdxLicense = getLicenseFromSpdxId; # added 2021-12-01
+}
diff --git a/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/internal/fixup_bin.js b/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/internal/fixup_bin.js
new file mode 100755
index 000000000000..a605147ab865
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/internal/fixup_bin.js
@@ -0,0 +1,53 @@
+#!/usr/bin/env node
+
+/* Usage:
+ * node fixup_bin.js <bin_dir> <modules_dir> [<bin_pkg_1>, <bin_pkg_2> ... ]
+ */
+
+const fs = require("fs");
+const path = require("path");
+
+const derivationBinPath = process.argv[2];
+const nodeModules = process.argv[3];
+const packagesToPublishBin = process.argv.slice(4);
+
+function processPackage(name) {
+  console.log("fixup_bin: Processing ", name);
+
+  const packagePath = `${nodeModules}/${name}`;
+  const packageJsonPath = `${packagePath}/package.json`;
+  const packageJson = JSON.parse(fs.readFileSync(packageJsonPath));
+
+  if (!packageJson.bin) {
+    console.log("fixup_bin: No binaries provided");
+    return;
+  }
+
+  // There are two alternative syntaxes for `bin`
+  // a) just a plain string, in which case the name of the package is the name of the binary.
+  // b) an object, where key is the name of the eventual binary, and the value the path to that binary.
+  if (typeof packageJson.bin === "string") {
+    const binName = packageJson.bin;
+    packageJson.bin = {};
+    packageJson.bin[packageJson.name] = binName;
+  }
+
+  // eslint-disable-next-line no-restricted-syntax, guard-for-in
+  for (const binName in packageJson.bin) {
+    const binPath = packageJson.bin[binName];
+    const normalizedBinName = binName.replace("@", "").replace("/", "-");
+
+    const targetPath = path.normalize(`${packagePath}/${binPath}`);
+    const createdPath = `${derivationBinPath}/${normalizedBinName}`;
+
+    console.log(
+      `fixup_bin: creating link ${createdPath} that points to ${targetPath}`
+    );
+
+    fs.symlinkSync(targetPath, createdPath);
+  }
+}
+
+packagesToPublishBin.forEach(pkg => {
+  processPackage(pkg);
+});
diff --git a/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/internal/fixup_yarn_lock.js b/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/internal/fixup_yarn_lock.js
new file mode 100755
index 000000000000..319d02623459
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/internal/fixup_yarn_lock.js
@@ -0,0 +1,49 @@
+#!/usr/bin/env node
+
+/* Usage:
+ * node fixup_yarn_lock.js yarn.lock
+ */
+
+const fs = require("fs");
+const readline = require("readline");
+
+const urlToName = require("../lib/urlToName");
+
+const yarnLockPath = process.argv[2];
+
+const readFile = readline.createInterface({
+  input: fs.createReadStream(yarnLockPath, { encoding: "utf8" }),
+
+  // Note: we use the crlfDelay option to recognize all instances of CR LF
+  // ('\r\n') in input.txt as a single line break.
+  crlfDelay: Infinity,
+
+  terminal: false // input and output should be treated like a TTY
+});
+
+const result = [];
+
+readFile
+  .on("line", line => {
+    const arr = line.match(/^ {2}resolved "([^#]+)(#[^"]+)?"$/);
+
+    if (arr !== null) {
+      const [_, url, shaOrRev] = arr;
+
+      const fileName = urlToName(url);
+
+      result.push(`  resolved "${fileName}${shaOrRev ?? ""}"`);
+    } else {
+      result.push(line);
+    }
+  })
+  .on("close", () => {
+    fs.writeFile(yarnLockPath, result.join("\n"), "utf8", err => {
+      if (err) {
+        console.error(
+          "fixup_yarn_lock: fatal error when trying to write to yarn.lock",
+          err
+        );
+      }
+    });
+  });
diff --git a/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/lib/fixPkgAddMissingSha1.js b/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/lib/fixPkgAddMissingSha1.js
new file mode 100644
index 000000000000..3a5867a3d22c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/lib/fixPkgAddMissingSha1.js
@@ -0,0 +1,64 @@
+const https = require("https");
+const crypto = require("crypto");
+
+// TODO:
+// make test case where getSha1 function is used, i.e. the case when resolved is without sha1?
+// consider using https://github.com/request/request-promise-native
+
+function getSha1(url) {
+  return new Promise((resolve, reject) => {
+    https.get(url, res => {
+      const { statusCode } = res;
+      const hash = crypto.createHash("sha1");
+
+      if (statusCode !== 200) {
+        const err = new Error(`Request Failed.\nStatus Code: ${statusCode}`);
+
+        // consume response data to free up memory
+        res.resume();
+
+        reject(err);
+      }
+
+      res.on("data", chunk => {
+        hash.update(chunk);
+      });
+
+      res.on("end", () => {
+        resolve(hash.digest("hex"));
+      });
+
+      res.on("error", reject);
+    });
+  });
+}
+
+// Object -> Object
+async function fixPkgAddMissingSha1(pkg) {
+  // local dependency
+
+  if (!pkg.resolved) {
+    console.error(
+      `yarn2nix: can't find "resolved" field for package ${pkg.nameWithVersion}, you probably required it using "file:...", this feature is not supported, ignoring`
+    );
+    return pkg;
+  }
+
+  const [url, sha1] = pkg.resolved.split("#", 2);
+
+  if (sha1 || url.startsWith("https://codeload.github.com")) {
+    return pkg;
+  }
+
+  // if there is no sha1 in resolved url
+  // (this could happen if yarn.lock was generated by older version of yarn)
+  // - request it from registry by https and add it to pkg
+  const newSha1 = await getSha1(url);
+
+  return {
+    ...pkg,
+    resolved: `${url}#${newSha1}`
+  };
+}
+
+module.exports = fixPkgAddMissingSha1;
diff --git a/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/lib/generateNix.js b/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/lib/generateNix.js
new file mode 100644
index 000000000000..238fb744ab19
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/lib/generateNix.js
@@ -0,0 +1,179 @@
+const R = require("ramda");
+const ssri = require("ssri");
+
+const urlToName = require("./urlToName");
+const { execFileSync } = require("child_process");
+
+// fetchgit transforms
+//
+// "shell-quote@git+https://github.com/srghma/node-shell-quote.git#without_unlicenced_jsonify":
+//   version "1.6.0"
+//   resolved "git+https://github.com/srghma/node-shell-quote.git#1234commit"
+//
+// to
+//
+// builtins.fetchGit {
+//   url = "https://github.com/srghma/node-shell-quote.git";
+//   ref = "without_unlicenced_jsonify";
+//   rev = "1234commit";
+// }
+//
+// and transforms
+//
+// "@graphile/plugin-supporter@git+https://1234user:1234pass@git.graphile.com/git/users/1234user/postgraphile-supporter.git":
+//   version "0.6.0"
+//   resolved "git+https://1234user:1234pass@git.graphile.com/git/users/1234user/postgraphile-supporter.git#1234commit"
+//
+// to
+//
+// builtins.fetchGit {
+//   url = "https://1234user:1234pass@git.graphile.com/git/users/1234user/postgraphile-supporter.git";
+//   ref = "master";
+//   rev = "1234commit";
+// }
+
+function prefetchgit(url, rev) {
+  return JSON.parse(
+    execFileSync(
+      "nix-prefetch-git",
+      ["--rev", rev, url, "--fetch-submodules"],
+      {
+        stdio: ["ignore", "pipe", "ignore"],
+        timeout: 60000
+      }
+    )
+  ).sha256;
+}
+
+function fetchgit(fileName, url, rev, branch, builtinFetchGit) {
+  const repo = builtinFetchGit
+    ? `builtins.fetchGit ({
+         url = "${url}";
+         ref = "${branch}";
+         rev = "${rev}";
+       } // (if builtins.compareVersions "2.4pre" builtins.nixVersion < 0 then {
+         # workaround for https://github.com/NixOS/nix/issues/5128
+         allRefs = true;
+       } else {}))`
+    : `fetchgit {
+         url = "${url}";
+         rev = "${rev}";
+         sha256 = "${prefetchgit(url, rev)}";
+       }`;
+
+  return `    {
+    name = "${fileName}";
+    path =
+      let repo = ${repo};
+      in runCommand "${fileName}" { buildInputs = [gnutar]; } ''
+        # Set u+w because tar-fs can't unpack archives with read-only dirs
+        # https://github.com/mafintosh/tar-fs/issues/79
+        tar cf $out --mode u+w -C \${repo} .
+      '';
+  }`;
+}
+
+/**
+ * Parse an integrity hash out of an SSRI string.
+ *
+ * Provides a default and uses the "best" supported algorithm if there are multiple.
+ */
+function parseIntegrity(maybeIntegrity, fallbackHash) {
+  if (!maybeIntegrity && fallbackHash) {
+    return { algo: "sha1", hash: fallbackHash };
+  }
+
+  const integrities = ssri.parse(maybeIntegrity);
+  for (const key in integrities) {
+    if (!/^sha(1|256|512)$/.test(key)) {
+      delete integrities[key];
+    }
+  }
+
+  algo = integrities.pickAlgorithm();
+  hash = integrities[algo][0].digest;
+  return { algo, hash };
+}
+
+function fetchLockedDep(builtinFetchGit) {
+  return function(pkg) {
+    const { integrity, nameWithVersion, resolved } = pkg;
+
+    if (!resolved) {
+      console.error(
+        `yarn2nix: can't find "resolved" field for package ${nameWithVersion}, you probably required it using "file:...", this feature is not supported, ignoring`
+      );
+      return "";
+    }
+
+    const [url, sha1OrRev] = resolved.split("#");
+
+    const fileName = urlToName(url);
+
+    if (resolved.startsWith("https://codeload.github.com/")) {
+      const s = resolved.split("/");
+      const githubUrl = `https://github.com/${s[3]}/${s[4]}.git`;
+      const githubRev = s[6];
+
+      const [_, branch] = nameWithVersion.split("#");
+
+      return fetchgit(
+        fileName,
+        githubUrl,
+        githubRev,
+        branch || "master",
+        builtinFetchGit
+      );
+    }
+
+    if (url.startsWith("git+") || url.startsWith("git:")) {
+      const rev = sha1OrRev;
+
+      const [_, branch] = nameWithVersion.split("#");
+
+      const urlForGit = url.replace(/^git\+/, "");
+
+      return fetchgit(
+        fileName,
+        urlForGit,
+        rev,
+        branch || "master",
+        builtinFetchGit
+      );
+    }
+
+    const { algo, hash } = parseIntegrity(integrity, sha1OrRev);
+
+    return `    {
+      name = "${fileName}";
+      path = fetchurl {
+        name = "${fileName}";
+        url  = "${url}";
+        ${algo} = "${hash}";
+      };
+    }`;
+  };
+}
+
+const HEAD = `
+{ fetchurl, fetchgit, linkFarm, runCommand, gnutar }: rec {
+  offline_cache = linkFarm "offline" packages;
+  packages = [
+`.trim();
+
+// Object -> String
+function generateNix(pkgs, builtinFetchGit) {
+  const nameWithVersionAndPackageNix = R.map(
+    fetchLockedDep(builtinFetchGit),
+    pkgs
+  );
+
+  const packagesDefinition = R.join(
+    "\n",
+    R.values(nameWithVersionAndPackageNix)
+  );
+
+  return R.join("\n", [HEAD, packagesDefinition, "  ];", "}"]);
+}
+
+module.exports = generateNix;
diff --git a/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/lib/mapObjIndexedReturnArray.js b/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/lib/mapObjIndexedReturnArray.js
new file mode 100644
index 000000000000..eb4d25e65cc8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/lib/mapObjIndexedReturnArray.js
@@ -0,0 +1,21 @@
+const _curry2 = require("ramda/src/internal/_curry2");
+const _map = require("ramda/src/internal/_map");
+const keys = require("ramda/src/keys");
+
+// mapObjIndexed: ((v, k, {k: v}) → v') → {k: v} → {k: v'}
+// mapObjIndexedReturnArray: ((v, k, {k: v}) → v') → {k: v} → [v']
+
+/*
+ * @example
+ *
+ *      const xyz = { x: 1, y: 2, z: 3 };
+ *      const prependKeyAndDouble = (num, key, obj) => key + (num * 2);
+ *
+ *      mapObjIndexedReturnArray(prependKeyAndDouble, xyz); //=> ['x2', 'y4', 'z6']
+ */
+
+const mapObjIndexedReturnArray = _curry2((fn, obj) =>
+  _map(key => fn(obj[key], key, obj), keys(obj))
+);
+
+module.exports = mapObjIndexedReturnArray;
diff --git a/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/lib/urlToName.js b/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/lib/urlToName.js
new file mode 100644
index 000000000000..2228e4eb487a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/lib/urlToName.js
@@ -0,0 +1,28 @@
+const path = require("path");
+
+// String -> String
+
+// @url examples:
+// - https://registry.yarnpkg.com/acorn-es7-plugin/-/acorn-es7-plugin-1.1.7.tgz
+// - https://registry.npmjs.org/acorn-es7-plugin/-/acorn-es7-plugin-1.1.7.tgz
+// - git+https://github.com/srghma/node-shell-quote.git
+// - git+https://1234user:1234pass@git.graphile.com/git/users/1234user/postgraphile-supporter.git
+// - https://codeload.github.com/Gargron/emoji-mart/tar.gz/934f314fd8322276765066e8a2a6be5bac61b1cf
+
+function urlToName(url) {
+  // Yarn generates `codeload.github.com` tarball URLs, where the final
+  // path component (file name) is the git hash. See #111.
+  // See also https://github.com/yarnpkg/yarn/blob/989a7406/src/resolvers/exotics/github-resolver.js#L24-L26
+  let isCodeloadGitTarballUrl =
+    url.startsWith("https://codeload.github.com/") && url.includes("/tar.gz/");
+
+  if (url.startsWith("git+") || isCodeloadGitTarballUrl) {
+    return path.basename(url);
+  }
+
+  return url
+    .replace(/https:\/\/(.)*(.com)\//g, "") // prevents having long directory names
+    .replace(/[@/%:-]/g, "_"); // replace @ and : and - and % characters with underscore
+}
+
+module.exports = urlToName;
diff --git a/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/nix/expectShFunctions.sh b/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/nix/expectShFunctions.sh
new file mode 100644
index 000000000000..fad230c69212
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/nix/expectShFunctions.sh
@@ -0,0 +1,30 @@
+expectFilePresent () {
+  if [ -f "$1" ]; then
+    echo "Test passed: file is present - $1"
+  else
+    echo "Test failed: file is absent - $1"
+    exit 1
+  fi
+}
+
+expectFileOrDirAbsent () {
+  if [ ! -e "$1" ];
+  then
+    echo "Test passed: file or dir is absent - $1"
+  else
+    echo "Test failed: file or dir is present - $1"
+    exit 1
+  fi
+}
+
+expectEqual () {
+  if [ "$1" == "$2" ];
+  then
+    echo "Test passed: output is equal to expected_output"
+  else
+    echo "Test failed: output is not equal to expected_output:"
+    echo "  output - $1"
+    echo "  expected_output - $2"
+    exit 1
+  fi
+}
diff --git a/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/package.json b/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/package.json
new file mode 100644
index 000000000000..da62eadd2e58
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/package.json
@@ -0,0 +1,48 @@
+{
+  "name": "yarn2nix",
+  "version": "1.0.0",
+  "description": "Convert packages.json and yarn.lock into a Nix expression that downloads all the dependencies",
+  "main": "index.js",
+  "repository": ".",
+  "author": "Maarten Hoogendoorn <maarten@moretea.nl>",
+  "license": "MIT",
+  "scripts": {
+    "yarn2nix": "bin/yarn2nix.js",
+    "format": "prettier-eslint --write './**/*.{js,jsx,json}'",
+    "lint": "eslint ."
+  },
+  "bin": {
+    "yarn2nix": "bin/yarn2nix.js"
+  },
+  "engines": {
+    "node": ">=8.0.0"
+  },
+  "dependencies": {
+    "@yarnpkg/lockfile": "^1.1.0",
+    "deep-equal": "^1.0.1",
+    "docopt": "^0.6.2",
+    "ramda": "^0.26.1",
+    "ssri": "^10.0.0"
+  },
+  "devDependencies": {
+    "babel-eslint": "^10.0.1",
+    "eslint": "^5.11.1",
+    "eslint-config-airbnb": "^17.1.0",
+    "eslint-config-prettier": "^3.3.0",
+    "eslint-config-standard": "^12.0.0",
+    "eslint-plugin-import": "^2.14.0",
+    "eslint-plugin-jsx-a11y": "^6.1.2",
+    "eslint-plugin-node": "^8.0.0",
+    "eslint-plugin-promise": "^4.0.1",
+    "eslint-plugin-react": "^7.12.2",
+    "eslint-plugin-standard": "^4.0.0",
+    "husky": "^1.3.1",
+    "lint-staged": "^8.1.0",
+    "prettier-eslint-cli": "^4.7.1"
+  },
+  "husky": {
+    "hooks": {
+      "pre-commit": "lint-staged"
+    }
+  }
+}
diff --git a/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/yarn.lock b/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/yarn.lock
new file mode 100644
index 000000000000..5140ca98044f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/yarn.lock
@@ -0,0 +1,3602 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.8.3":
+  version "7.8.3"
+  resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e"
+  integrity sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==
+  dependencies:
+    "@babel/highlight" "^7.8.3"
+
+"@babel/generator@^7.9.6":
+  version "7.9.6"
+  resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.9.6.tgz#5408c82ac5de98cda0d77d8124e99fa1f2170a43"
+  integrity sha512-+htwWKJbH2bL72HRluF8zumBxzuX0ZZUFl3JLNyoUjM/Ho8wnVpPXM6aUz8cfKDqQ/h7zHqKt4xzJteUosckqQ==
+  dependencies:
+    "@babel/types" "^7.9.6"
+    jsesc "^2.5.1"
+    lodash "^4.17.13"
+    source-map "^0.5.0"
+
+"@babel/helper-function-name@^7.9.5":
+  version "7.9.5"
+  resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz#2b53820d35275120e1874a82e5aabe1376920a5c"
+  integrity sha512-JVcQZeXM59Cd1qanDUxv9fgJpt3NeKUaqBqUEvfmQ+BCOKq2xUgaWZW2hr0dkbyJgezYuplEoh5knmrnS68efw==
+  dependencies:
+    "@babel/helper-get-function-arity" "^7.8.3"
+    "@babel/template" "^7.8.3"
+    "@babel/types" "^7.9.5"
+
+"@babel/helper-get-function-arity@^7.8.3":
+  version "7.8.3"
+  resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz#b894b947bd004381ce63ea1db9f08547e920abd5"
+  integrity sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==
+  dependencies:
+    "@babel/types" "^7.8.3"
+
+"@babel/helper-split-export-declaration@^7.8.3":
+  version "7.8.3"
+  resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz#31a9f30070f91368a7182cf05f831781065fc7a9"
+  integrity sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==
+  dependencies:
+    "@babel/types" "^7.8.3"
+
+"@babel/helper-validator-identifier@^7.9.0", "@babel/helper-validator-identifier@^7.9.5":
+  version "7.9.5"
+  resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz#90977a8e6fbf6b431a7dc31752eee233bf052d80"
+  integrity sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g==
+
+"@babel/highlight@^7.8.3":
+  version "7.9.0"
+  resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.9.0.tgz#4e9b45ccb82b79607271b2979ad82c7b68163079"
+  integrity sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==
+  dependencies:
+    "@babel/helper-validator-identifier" "^7.9.0"
+    chalk "^2.0.0"
+    js-tokens "^4.0.0"
+
+"@babel/parser@^7.7.0", "@babel/parser@^7.8.6", "@babel/parser@^7.9.6":
+  version "7.9.6"
+  resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.9.6.tgz#3b1bbb30dabe600cd72db58720998376ff653bc7"
+  integrity sha512-AoeIEJn8vt+d/6+PXDRPaksYhnlbMIiejioBZvvMQsOjW/JYK6k/0dKnvvP3EhK5GfMBWDPtrxRtegWdAcdq9Q==
+
+"@babel/runtime-corejs3@^7.8.3":
+  version "7.9.6"
+  resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.9.6.tgz#67aded13fffbbc2cb93247388cf84d77a4be9a71"
+  integrity sha512-6toWAfaALQjt3KMZQc6fABqZwUDDuWzz+cAfPhqyEnzxvdWOAkjwPNxgF8xlmo7OWLsSjaKjsskpKHRLaMArOA==
+  dependencies:
+    core-js-pure "^3.0.0"
+    regenerator-runtime "^0.13.4"
+
+"@babel/runtime@^7.0.0", "@babel/runtime@^7.4.5":
+  version "7.9.6"
+  resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.9.6.tgz#a9102eb5cadedf3f31d08a9ecf294af7827ea29f"
+  integrity sha512-64AF1xY3OAkFHqOb9s4jpgk1Mm5vDZ4L3acHvAml+53nO1XbXLuDodsVpO4OIUsmemlUHMxNdYMNJmsvOwLrvQ==
+  dependencies:
+    regenerator-runtime "^0.13.4"
+
+"@babel/template@^7.8.3":
+  version "7.8.6"
+  resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.8.6.tgz#86b22af15f828dfb086474f964dcc3e39c43ce2b"
+  integrity sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==
+  dependencies:
+    "@babel/code-frame" "^7.8.3"
+    "@babel/parser" "^7.8.6"
+    "@babel/types" "^7.8.6"
+
+"@babel/traverse@^7.7.0":
+  version "7.9.6"
+  resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.9.6.tgz#5540d7577697bf619cc57b92aa0f1c231a94f442"
+  integrity sha512-b3rAHSjbxy6VEAvlxM8OV/0X4XrG72zoxme6q1MOoe2vd0bEc+TwayhuC1+Dfgqh1QEG+pj7atQqvUprHIccsg==
+  dependencies:
+    "@babel/code-frame" "^7.8.3"
+    "@babel/generator" "^7.9.6"
+    "@babel/helper-function-name" "^7.9.5"
+    "@babel/helper-split-export-declaration" "^7.8.3"
+    "@babel/parser" "^7.9.6"
+    "@babel/types" "^7.9.6"
+    debug "^4.1.0"
+    globals "^11.1.0"
+    lodash "^4.17.13"
+
+"@babel/types@^7.7.0", "@babel/types@^7.8.3", "@babel/types@^7.8.6", "@babel/types@^7.9.5", "@babel/types@^7.9.6":
+  version "7.9.6"
+  resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.9.6.tgz#2c5502b427251e9de1bd2dff95add646d95cc9f7"
+  integrity sha512-qxXzvBO//jO9ZnoasKF1uJzHd2+M6Q2ZPIVfnFps8JJvXy0ZBbwbNOmE6SGIY5XOY6d1Bo5lb9d9RJ8nv3WSeA==
+  dependencies:
+    "@babel/helper-validator-identifier" "^7.9.5"
+    lodash "^4.17.13"
+    to-fast-properties "^2.0.0"
+
+"@samverschueren/stream-to-observable@^0.3.0":
+  version "0.3.0"
+  resolved "https://registry.yarnpkg.com/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz#ecdf48d532c58ea477acfcab80348424f8d0662f"
+  integrity sha512-MI4Xx6LHs4Webyvi6EbspgyAb4D2Q2VtnCQ1blOJcoLS6mVa8lNN2rkIy1CVxfTUpoyIbCTkXES1rLXztFD1lg==
+  dependencies:
+    any-observable "^0.3.0"
+
+"@yarnpkg/lockfile@^1.1.0":
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31"
+  integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==
+
+abbrev@1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
+  integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
+
+acorn-jsx@^3.0.0:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b"
+  integrity sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=
+  dependencies:
+    acorn "^3.0.4"
+
+acorn-jsx@^5.0.0:
+  version "5.2.0"
+  resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe"
+  integrity sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==
+
+acorn@^3.0.4:
+  version "3.3.0"
+  resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a"
+  integrity sha1-ReN/s56No/JbruP/U2niu18iAXo=
+
+acorn@^5.5.0:
+  version "5.7.4"
+  resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e"
+  integrity sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==
+
+acorn@^6.0.7:
+  version "6.4.1"
+  resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474"
+  integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==
+
+ajv-keywords@^2.1.0:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762"
+  integrity sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=
+
+ajv@^5.2.3, ajv@^5.3.0:
+  version "5.5.2"
+  resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965"
+  integrity sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=
+  dependencies:
+    co "^4.6.0"
+    fast-deep-equal "^1.0.0"
+    fast-json-stable-stringify "^2.0.0"
+    json-schema-traverse "^0.3.0"
+
+ajv@^6.10.2, ajv@^6.9.1:
+  version "6.12.2"
+  resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.2.tgz#c629c5eced17baf314437918d2da88c99d5958cd"
+  integrity sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==
+  dependencies:
+    fast-deep-equal "^3.1.1"
+    fast-json-stable-stringify "^2.0.0"
+    json-schema-traverse "^0.4.1"
+    uri-js "^4.2.2"
+
+ansi-escapes@^3.0.0, ansi-escapes@^3.2.0:
+  version "3.2.0"
+  resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b"
+  integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==
+
+ansi-regex@^2.0.0:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
+  integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
+
+ansi-regex@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
+  integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
+
+ansi-regex@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997"
+  integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==
+
+ansi-styles@^2.2.1:
+  version "2.2.1"
+  resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
+  integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=
+
+ansi-styles@^3.1.0, ansi-styles@^3.2.0, ansi-styles@^3.2.1:
+  version "3.2.1"
+  resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
+  integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
+  dependencies:
+    color-convert "^1.9.0"
+
+any-observable@^0.3.0:
+  version "0.3.0"
+  resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b"
+  integrity sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==
+
+argparse@^1.0.7:
+  version "1.0.10"
+  resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
+  integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
+  dependencies:
+    sprintf-js "~1.0.2"
+
+aria-query@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-3.0.0.tgz#65b3fcc1ca1155a8c9ae64d6eee297f15d5133cc"
+  integrity sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w=
+  dependencies:
+    ast-types-flow "0.0.7"
+    commander "^2.11.0"
+
+arr-diff@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
+  integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=
+
+arr-flatten@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
+  integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==
+
+arr-union@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
+  integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=
+
+array-includes@^3.0.3, array-includes@^3.1.1:
+  version "3.1.1"
+  resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.1.tgz#cdd67e6852bdf9c1215460786732255ed2459348"
+  integrity sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==
+  dependencies:
+    define-properties "^1.1.3"
+    es-abstract "^1.17.0"
+    is-string "^1.0.5"
+
+array-union@^1.0.1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
+  integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=
+  dependencies:
+    array-uniq "^1.0.1"
+
+array-uniq@^1.0.1:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
+  integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=
+
+array-unique@^0.3.2:
+  version "0.3.2"
+  resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
+  integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=
+
+array.prototype.flat@^1.2.1:
+  version "1.2.3"
+  resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz#0de82b426b0318dbfdb940089e38b043d37f6c7b"
+  integrity sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ==
+  dependencies:
+    define-properties "^1.1.3"
+    es-abstract "^1.17.0-next.1"
+
+arrify@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
+  integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=
+
+assign-symbols@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
+  integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=
+
+ast-types-flow@0.0.7, ast-types-flow@^0.0.7:
+  version "0.0.7"
+  resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad"
+  integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0=
+
+astral-regex@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9"
+  integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==
+
+atob@^2.1.2:
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
+  integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
+
+axobject-query@^2.0.2:
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.1.2.tgz#2bdffc0371e643e5f03ba99065d5179b9ca79799"
+  integrity sha512-ICt34ZmrVt8UQnvPl6TVyDTkmhXmAyAT4Jh5ugfGUX4MOrZ+U/ZY6/sdylRw3qGNr9Ub5AJsaHeDMzNLehRdOQ==
+
+babel-code-frame@^6.22.0:
+  version "6.26.0"
+  resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
+  integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=
+  dependencies:
+    chalk "^1.1.3"
+    esutils "^2.0.2"
+    js-tokens "^3.0.2"
+
+babel-eslint@^10.0.1:
+  version "10.1.0"
+  resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.1.0.tgz#6968e568a910b78fb3779cdd8b6ac2f479943232"
+  integrity sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==
+  dependencies:
+    "@babel/code-frame" "^7.0.0"
+    "@babel/parser" "^7.7.0"
+    "@babel/traverse" "^7.7.0"
+    "@babel/types" "^7.7.0"
+    eslint-visitor-keys "^1.0.0"
+    resolve "^1.12.0"
+
+babel-runtime@^6.23.0, babel-runtime@^6.26.0:
+  version "6.26.0"
+  resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
+  integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4=
+  dependencies:
+    core-js "^2.4.0"
+    regenerator-runtime "^0.11.0"
+
+balanced-match@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
+  integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
+
+base@^0.11.1:
+  version "0.11.2"
+  resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
+  integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==
+  dependencies:
+    cache-base "^1.0.1"
+    class-utils "^0.3.5"
+    component-emitter "^1.2.1"
+    define-property "^1.0.0"
+    isobject "^3.0.1"
+    mixin-deep "^1.2.0"
+    pascalcase "^0.1.1"
+
+boolify@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/boolify/-/boolify-1.0.1.tgz#b5c09e17cacd113d11b7bb3ed384cc012994d86b"
+  integrity sha1-tcCeF8rNET0Rt7s+04TMASmU2Gs=
+
+brace-expansion@^1.1.7:
+  version "1.1.11"
+  resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
+  integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
+  dependencies:
+    balanced-match "^1.0.0"
+    concat-map "0.0.1"
+
+braces@^2.3.1:
+  version "2.3.2"
+  resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729"
+  integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==
+  dependencies:
+    arr-flatten "^1.1.0"
+    array-unique "^0.3.2"
+    extend-shallow "^2.0.1"
+    fill-range "^4.0.0"
+    isobject "^3.0.1"
+    repeat-element "^1.1.2"
+    snapdragon "^0.8.1"
+    snapdragon-node "^2.0.1"
+    split-string "^3.0.2"
+    to-regex "^3.0.1"
+
+buffer-from@^1.0.0:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
+  integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
+
+cache-base@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
+  integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==
+  dependencies:
+    collection-visit "^1.0.0"
+    component-emitter "^1.2.1"
+    get-value "^2.0.6"
+    has-value "^1.0.0"
+    isobject "^3.0.1"
+    set-value "^2.0.0"
+    to-object-path "^0.3.0"
+    union-value "^1.0.0"
+    unset-value "^1.0.0"
+
+caller-callsite@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134"
+  integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=
+  dependencies:
+    callsites "^2.0.0"
+
+caller-path@^0.1.0:
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f"
+  integrity sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=
+  dependencies:
+    callsites "^0.2.0"
+
+caller-path@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4"
+  integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=
+  dependencies:
+    caller-callsite "^2.0.0"
+
+callsites@^0.2.0:
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca"
+  integrity sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=
+
+callsites@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50"
+  integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=
+
+callsites@^3.0.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
+  integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
+
+camelcase-keys@^4.1.0:
+  version "4.2.0"
+  resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-4.2.0.tgz#a2aa5fb1af688758259c32c141426d78923b9b77"
+  integrity sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=
+  dependencies:
+    camelcase "^4.1.0"
+    map-obj "^2.0.0"
+    quick-lru "^1.0.0"
+
+camelcase@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd"
+  integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=
+
+chalk@2.3.0:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba"
+  integrity sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==
+  dependencies:
+    ansi-styles "^3.1.0"
+    escape-string-regexp "^1.0.5"
+    supports-color "^4.0.0"
+
+chalk@^1.0.0, chalk@^1.1.3:
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
+  integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=
+  dependencies:
+    ansi-styles "^2.2.1"
+    escape-string-regexp "^1.0.2"
+    has-ansi "^2.0.0"
+    strip-ansi "^3.0.0"
+    supports-color "^2.0.0"
+
+chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.1, chalk@^2.4.1, chalk@^2.4.2:
+  version "2.4.2"
+  resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
+  integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
+  dependencies:
+    ansi-styles "^3.2.1"
+    escape-string-regexp "^1.0.5"
+    supports-color "^5.3.0"
+
+chardet@^0.4.0:
+  version "0.4.2"
+  resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2"
+  integrity sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=
+
+chardet@^0.7.0:
+  version "0.7.0"
+  resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
+  integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==
+
+ci-info@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46"
+  integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==
+
+circular-json@^0.3.1:
+  version "0.3.3"
+  resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66"
+  integrity sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==
+
+class-utils@^0.3.5:
+  version "0.3.6"
+  resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
+  integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==
+  dependencies:
+    arr-union "^3.1.0"
+    define-property "^0.2.5"
+    isobject "^3.0.0"
+    static-extend "^0.1.1"
+
+cli-cursor@^2.0.0, cli-cursor@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5"
+  integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=
+  dependencies:
+    restore-cursor "^2.0.0"
+
+cli-truncate@^0.2.1:
+  version "0.2.1"
+  resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574"
+  integrity sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=
+  dependencies:
+    slice-ansi "0.0.4"
+    string-width "^1.0.1"
+
+cli-width@^2.0.0:
+  version "2.2.1"
+  resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48"
+  integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==
+
+cliui@^3.2.0:
+  version "3.2.0"
+  resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d"
+  integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=
+  dependencies:
+    string-width "^1.0.1"
+    strip-ansi "^3.0.1"
+    wrap-ansi "^2.0.0"
+
+co@^4.6.0:
+  version "4.6.0"
+  resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
+  integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=
+
+code-point-at@^1.0.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
+  integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=
+
+collection-visit@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0"
+  integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=
+  dependencies:
+    map-visit "^1.0.0"
+    object-visit "^1.0.0"
+
+color-convert@^1.9.0:
+  version "1.9.3"
+  resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
+  integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
+  dependencies:
+    color-name "1.1.3"
+
+color-name@1.1.3:
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
+  integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
+
+commander@^2.11.0, commander@^2.14.1, commander@^2.9.0:
+  version "2.20.3"
+  resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
+  integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
+
+common-tags@^1.4.0:
+  version "1.8.0"
+  resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz#8e3153e542d4a39e9b10554434afaaf98956a937"
+  integrity sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==
+
+component-emitter@^1.2.1:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0"
+  integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==
+
+concat-map@0.0.1:
+  version "0.0.1"
+  resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+  integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
+
+concat-stream@^1.6.0:
+  version "1.6.2"
+  resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
+  integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==
+  dependencies:
+    buffer-from "^1.0.0"
+    inherits "^2.0.3"
+    readable-stream "^2.2.2"
+    typedarray "^0.0.6"
+
+confusing-browser-globals@^1.0.5:
+  version "1.0.9"
+  resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.9.tgz#72bc13b483c0276801681871d4898516f8f54fdd"
+  integrity sha512-KbS1Y0jMtyPgIxjO7ZzMAuUpAKMt1SzCL9fsrKsX6b0zJPTaT0SiSPmewwVZg9UAO83HVIlEhZF84LIjZ0lmAw==
+
+contains-path@^0.1.0:
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a"
+  integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=
+
+copy-descriptor@^0.1.0:
+  version "0.1.1"
+  resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
+  integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=
+
+core-js-pure@^3.0.0:
+  version "3.6.5"
+  resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.6.5.tgz#c79e75f5e38dbc85a662d91eea52b8256d53b813"
+  integrity sha512-lacdXOimsiD0QyNf9BC/mxivNJ/ybBGJXQFKzRekp1WTHoVUWsUHEn+2T8GJAzzIhyOuXA+gOxCVN3l+5PLPUA==
+
+core-js@^2.4.0:
+  version "2.6.11"
+  resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c"
+  integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==
+
+core-util-is@~1.0.0:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
+  integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
+
+cosmiconfig@^5.0.7, cosmiconfig@^5.2.0:
+  version "5.2.1"
+  resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a"
+  integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==
+  dependencies:
+    import-fresh "^2.0.0"
+    is-directory "^0.3.1"
+    js-yaml "^3.13.1"
+    parse-json "^4.0.0"
+
+cross-spawn@^5.0.1, cross-spawn@^5.1.0:
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
+  integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=
+  dependencies:
+    lru-cache "^4.0.1"
+    shebang-command "^1.2.0"
+    which "^1.2.9"
+
+cross-spawn@^6.0.0, cross-spawn@^6.0.5:
+  version "6.0.5"
+  resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
+  integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==
+  dependencies:
+    nice-try "^1.0.4"
+    path-key "^2.0.1"
+    semver "^5.5.0"
+    shebang-command "^1.2.0"
+    which "^1.2.9"
+
+damerau-levenshtein@^1.0.4:
+  version "1.0.6"
+  resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz#143c1641cb3d85c60c32329e26899adea8701791"
+  integrity sha512-JVrozIeElnj3QzfUIt8tB8YMluBJom4Vw9qTPpjGYQ9fYlB3D/rb6OordUxf3xeFB35LKWs0xqcO5U6ySvBtug==
+
+date-fns@^1.27.2:
+  version "1.30.1"
+  resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c"
+  integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==
+
+debug@^2.2.0, debug@^2.3.3, debug@^2.6.9:
+  version "2.6.9"
+  resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
+  integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
+  dependencies:
+    ms "2.0.0"
+
+debug@^3.1.0:
+  version "3.2.6"
+  resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
+  integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==
+  dependencies:
+    ms "^2.1.1"
+
+debug@^4.0.1, debug@^4.1.0:
+  version "4.1.1"
+  resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791"
+  integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==
+  dependencies:
+    ms "^2.1.1"
+
+decamelize@^1.1.1:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
+  integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
+
+decode-uri-component@^0.2.0:
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
+  integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=
+
+dedent@^0.7.0:
+  version "0.7.0"
+  resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c"
+  integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=
+
+deep-equal@^1.0.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a"
+  integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==
+  dependencies:
+    is-arguments "^1.0.4"
+    is-date-object "^1.0.1"
+    is-regex "^1.0.4"
+    object-is "^1.0.1"
+    object-keys "^1.1.1"
+    regexp.prototype.flags "^1.2.0"
+
+deep-is@~0.1.3:
+  version "0.1.3"
+  resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
+  integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=
+
+define-properties@^1.1.2, define-properties@^1.1.3:
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
+  integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==
+  dependencies:
+    object-keys "^1.0.12"
+
+define-property@^0.2.5:
+  version "0.2.5"
+  resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116"
+  integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=
+  dependencies:
+    is-descriptor "^0.1.0"
+
+define-property@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6"
+  integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY=
+  dependencies:
+    is-descriptor "^1.0.0"
+
+define-property@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d"
+  integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==
+  dependencies:
+    is-descriptor "^1.0.2"
+    isobject "^3.0.1"
+
+del@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5"
+  integrity sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=
+  dependencies:
+    globby "^6.1.0"
+    is-path-cwd "^1.0.0"
+    is-path-in-cwd "^1.0.0"
+    p-map "^1.1.1"
+    pify "^3.0.0"
+    rimraf "^2.2.8"
+
+dlv@^1.1.0:
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79"
+  integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==
+
+docopt@^0.6.2:
+  version "0.6.2"
+  resolved "https://registry.yarnpkg.com/docopt/-/docopt-0.6.2.tgz#b28e9e2220da5ec49f7ea5bb24a47787405eeb11"
+  integrity sha1-so6eIiDaXsSffqW7JKR3h0Be6xE=
+
+doctrine@1.5.0:
+  version "1.5.0"
+  resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa"
+  integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=
+  dependencies:
+    esutils "^2.0.2"
+    isarray "^1.0.0"
+
+doctrine@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
+  integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==
+  dependencies:
+    esutils "^2.0.2"
+
+doctrine@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"
+  integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==
+  dependencies:
+    esutils "^2.0.2"
+
+elegant-spinner@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e"
+  integrity sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=
+
+emoji-regex@^7.0.1, emoji-regex@^7.0.2:
+  version "7.0.3"
+  resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"
+  integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==
+
+end-of-stream@^1.1.0:
+  version "1.4.4"
+  resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
+  integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
+  dependencies:
+    once "^1.4.0"
+
+error-ex@^1.2.0, error-ex@^1.3.1:
+  version "1.3.2"
+  resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
+  integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
+  dependencies:
+    is-arrayish "^0.2.1"
+
+es-abstract@^1.17.0, es-abstract@^1.17.0-next.1, es-abstract@^1.17.5:
+  version "1.17.5"
+  resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.5.tgz#d8c9d1d66c8981fb9200e2251d799eee92774ae9"
+  integrity sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==
+  dependencies:
+    es-to-primitive "^1.2.1"
+    function-bind "^1.1.1"
+    has "^1.0.3"
+    has-symbols "^1.0.1"
+    is-callable "^1.1.5"
+    is-regex "^1.0.5"
+    object-inspect "^1.7.0"
+    object-keys "^1.1.1"
+    object.assign "^4.1.0"
+    string.prototype.trimleft "^2.1.1"
+    string.prototype.trimright "^2.1.1"
+
+es-to-primitive@^1.2.1:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a"
+  integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==
+  dependencies:
+    is-callable "^1.1.4"
+    is-date-object "^1.0.1"
+    is-symbol "^1.0.2"
+
+escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.4, escape-string-regexp@^1.0.5:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+  integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
+
+eslint-config-airbnb-base@^13.2.0:
+  version "13.2.0"
+  resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-13.2.0.tgz#f6ea81459ff4dec2dda200c35f1d8f7419d57943"
+  integrity sha512-1mg/7eoB4AUeB0X1c/ho4vb2gYkNH8Trr/EgCT/aGmKhhG+F6vF5s8+iRBlWAzFIAphxIdp3YfEKgEl0f9Xg+w==
+  dependencies:
+    confusing-browser-globals "^1.0.5"
+    object.assign "^4.1.0"
+    object.entries "^1.1.0"
+
+eslint-config-airbnb@^17.1.0:
+  version "17.1.1"
+  resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-17.1.1.tgz#2272e0b86bb1e2b138cdf88d07a3b6f4cda3d626"
+  integrity sha512-xCu//8a/aWqagKljt+1/qAM62BYZeNq04HmdevG5yUGWpja0I/xhqd6GdLRch5oetEGFiJAnvtGuTEAese53Qg==
+  dependencies:
+    eslint-config-airbnb-base "^13.2.0"
+    object.assign "^4.1.0"
+    object.entries "^1.1.0"
+
+eslint-config-prettier@^3.3.0:
+  version "3.6.0"
+  resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-3.6.0.tgz#8ca3ffac4bd6eeef623a0651f9d754900e3ec217"
+  integrity sha512-ixJ4U3uTLXwJts4rmSVW/lMXjlGwCijhBJHk8iVqKKSifeI0qgFEfWl8L63isfc8Od7EiBALF6BX3jKLluf/jQ==
+  dependencies:
+    get-stdin "^6.0.0"
+
+eslint-config-standard@^12.0.0:
+  version "12.0.0"
+  resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-12.0.0.tgz#638b4c65db0bd5a41319f96bba1f15ddad2107d9"
+  integrity sha512-COUz8FnXhqFitYj4DTqHzidjIL/t4mumGZto5c7DrBpvWoie+Sn3P4sLEzUGeYhRElWuFEf8K1S1EfvD1vixCQ==
+
+eslint-import-resolver-node@^0.3.2:
+  version "0.3.3"
+  resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.3.tgz#dbaa52b6b2816b50bc6711af75422de808e98404"
+  integrity sha512-b8crLDo0M5RSe5YG8Pu2DYBj71tSB6OvXkfzwbJU2w7y8P4/yo0MyF8jU26IEuEuHF2K5/gcAJE3LhQGqBBbVg==
+  dependencies:
+    debug "^2.6.9"
+    resolve "^1.13.1"
+
+eslint-module-utils@^2.4.1:
+  version "2.6.0"
+  resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz#579ebd094f56af7797d19c9866c9c9486629bfa6"
+  integrity sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==
+  dependencies:
+    debug "^2.6.9"
+    pkg-dir "^2.0.0"
+
+eslint-plugin-es@^1.3.1:
+  version "1.4.1"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-1.4.1.tgz#12acae0f4953e76ba444bfd1b2271081ac620998"
+  integrity sha512-5fa/gR2yR3NxQf+UXkeLeP8FBBl6tSgdrAz1+cF84v1FMM4twGwQoqTnn+QxFLcPOrF4pdKEJKDB/q9GoyJrCA==
+  dependencies:
+    eslint-utils "^1.4.2"
+    regexpp "^2.0.1"
+
+eslint-plugin-import@^2.14.0:
+  version "2.20.2"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.20.2.tgz#91fc3807ce08be4837141272c8b99073906e588d"
+  integrity sha512-FObidqpXrR8OnCh4iNsxy+WACztJLXAHBO5hK79T1Hc77PgQZkyDGA5Ag9xAvRpglvLNxhH/zSmZ70/pZ31dHg==
+  dependencies:
+    array-includes "^3.0.3"
+    array.prototype.flat "^1.2.1"
+    contains-path "^0.1.0"
+    debug "^2.6.9"
+    doctrine "1.5.0"
+    eslint-import-resolver-node "^0.3.2"
+    eslint-module-utils "^2.4.1"
+    has "^1.0.3"
+    minimatch "^3.0.4"
+    object.values "^1.1.0"
+    read-pkg-up "^2.0.0"
+    resolve "^1.12.0"
+
+eslint-plugin-jsx-a11y@^6.1.2:
+  version "6.2.3"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.3.tgz#b872a09d5de51af70a97db1eea7dc933043708aa"
+  integrity sha512-CawzfGt9w83tyuVekn0GDPU9ytYtxyxyFZ3aSWROmnRRFQFT2BiPJd7jvRdzNDi6oLWaS2asMeYSNMjWTV4eNg==
+  dependencies:
+    "@babel/runtime" "^7.4.5"
+    aria-query "^3.0.0"
+    array-includes "^3.0.3"
+    ast-types-flow "^0.0.7"
+    axobject-query "^2.0.2"
+    damerau-levenshtein "^1.0.4"
+    emoji-regex "^7.0.2"
+    has "^1.0.3"
+    jsx-ast-utils "^2.2.1"
+
+eslint-plugin-node@^8.0.0:
+  version "8.0.1"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-8.0.1.tgz#55ae3560022863d141fa7a11799532340a685964"
+  integrity sha512-ZjOjbjEi6jd82rIpFSgagv4CHWzG9xsQAVp1ZPlhRnnYxcTgENUVBvhYmkQ7GvT1QFijUSo69RaiOJKhMu6i8w==
+  dependencies:
+    eslint-plugin-es "^1.3.1"
+    eslint-utils "^1.3.1"
+    ignore "^5.0.2"
+    minimatch "^3.0.4"
+    resolve "^1.8.1"
+    semver "^5.5.0"
+
+eslint-plugin-promise@^4.0.1:
+  version "4.2.1"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.2.1.tgz#845fd8b2260ad8f82564c1222fce44ad71d9418a"
+  integrity sha512-VoM09vT7bfA7D+upt+FjeBO5eHIJQBUWki1aPvB+vbNiHS3+oGIJGIeyBtKQTME6UPXXy3vV07OL1tHd3ANuDw==
+
+eslint-plugin-react@^7.12.2:
+  version "7.20.0"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.20.0.tgz#f98712f0a5e57dfd3e5542ef0604b8739cd47be3"
+  integrity sha512-rqe1abd0vxMjmbPngo4NaYxTcR3Y4Hrmc/jg4T+sYz63yqlmJRknpEQfmWY+eDWPuMmix6iUIK+mv0zExjeLgA==
+  dependencies:
+    array-includes "^3.1.1"
+    doctrine "^2.1.0"
+    has "^1.0.3"
+    jsx-ast-utils "^2.2.3"
+    object.entries "^1.1.1"
+    object.fromentries "^2.0.2"
+    object.values "^1.1.1"
+    prop-types "^15.7.2"
+    resolve "^1.15.1"
+    string.prototype.matchall "^4.0.2"
+    xregexp "^4.3.0"
+
+eslint-plugin-standard@^4.0.0:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-standard/-/eslint-plugin-standard-4.0.1.tgz#ff0519f7ffaff114f76d1bd7c3996eef0f6e20b4"
+  integrity sha512-v/KBnfyaOMPmZc/dmc6ozOdWqekGp7bBGq4jLAecEfPGmfKiWS4sA8sC0LqiV9w5qmXAtXVn4M3p1jSyhY85SQ==
+
+eslint-scope@^3.7.1:
+  version "3.7.3"
+  resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.3.tgz#bb507200d3d17f60247636160b4826284b108535"
+  integrity sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA==
+  dependencies:
+    esrecurse "^4.1.0"
+    estraverse "^4.1.1"
+
+eslint-scope@^4.0.3:
+  version "4.0.3"
+  resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848"
+  integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==
+  dependencies:
+    esrecurse "^4.1.0"
+    estraverse "^4.1.1"
+
+eslint-utils@^1.3.1, eslint-utils@^1.4.2:
+  version "1.4.3"
+  resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f"
+  integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==
+  dependencies:
+    eslint-visitor-keys "^1.1.0"
+
+eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2"
+  integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==
+
+eslint@^4.0.0, eslint@^4.5.0:
+  version "4.19.1"
+  resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.19.1.tgz#32d1d653e1d90408854bfb296f076ec7e186a300"
+  integrity sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==
+  dependencies:
+    ajv "^5.3.0"
+    babel-code-frame "^6.22.0"
+    chalk "^2.1.0"
+    concat-stream "^1.6.0"
+    cross-spawn "^5.1.0"
+    debug "^3.1.0"
+    doctrine "^2.1.0"
+    eslint-scope "^3.7.1"
+    eslint-visitor-keys "^1.0.0"
+    espree "^3.5.4"
+    esquery "^1.0.0"
+    esutils "^2.0.2"
+    file-entry-cache "^2.0.0"
+    functional-red-black-tree "^1.0.1"
+    glob "^7.1.2"
+    globals "^11.0.1"
+    ignore "^3.3.3"
+    imurmurhash "^0.1.4"
+    inquirer "^3.0.6"
+    is-resolvable "^1.0.0"
+    js-yaml "^3.9.1"
+    json-stable-stringify-without-jsonify "^1.0.1"
+    levn "^0.3.0"
+    lodash "^4.17.4"
+    minimatch "^3.0.2"
+    mkdirp "^0.5.1"
+    natural-compare "^1.4.0"
+    optionator "^0.8.2"
+    path-is-inside "^1.0.2"
+    pluralize "^7.0.0"
+    progress "^2.0.0"
+    regexpp "^1.0.1"
+    require-uncached "^1.0.3"
+    semver "^5.3.0"
+    strip-ansi "^4.0.0"
+    strip-json-comments "~2.0.1"
+    table "4.0.2"
+    text-table "~0.2.0"
+
+eslint@^5.11.1:
+  version "5.16.0"
+  resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.16.0.tgz#a1e3ac1aae4a3fbd8296fcf8f7ab7314cbb6abea"
+  integrity sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==
+  dependencies:
+    "@babel/code-frame" "^7.0.0"
+    ajv "^6.9.1"
+    chalk "^2.1.0"
+    cross-spawn "^6.0.5"
+    debug "^4.0.1"
+    doctrine "^3.0.0"
+    eslint-scope "^4.0.3"
+    eslint-utils "^1.3.1"
+    eslint-visitor-keys "^1.0.0"
+    espree "^5.0.1"
+    esquery "^1.0.1"
+    esutils "^2.0.2"
+    file-entry-cache "^5.0.1"
+    functional-red-black-tree "^1.0.1"
+    glob "^7.1.2"
+    globals "^11.7.0"
+    ignore "^4.0.6"
+    import-fresh "^3.0.0"
+    imurmurhash "^0.1.4"
+    inquirer "^6.2.2"
+    js-yaml "^3.13.0"
+    json-stable-stringify-without-jsonify "^1.0.1"
+    levn "^0.3.0"
+    lodash "^4.17.11"
+    minimatch "^3.0.4"
+    mkdirp "^0.5.1"
+    natural-compare "^1.4.0"
+    optionator "^0.8.2"
+    path-is-inside "^1.0.2"
+    progress "^2.0.0"
+    regexpp "^2.0.1"
+    semver "^5.5.1"
+    strip-ansi "^4.0.0"
+    strip-json-comments "^2.0.1"
+    table "^5.2.3"
+    text-table "^0.2.0"
+
+espree@^3.5.2, espree@^3.5.4:
+  version "3.5.4"
+  resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.4.tgz#b0f447187c8a8bed944b815a660bddf5deb5d1a7"
+  integrity sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==
+  dependencies:
+    acorn "^5.5.0"
+    acorn-jsx "^3.0.0"
+
+espree@^5.0.1:
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/espree/-/espree-5.0.1.tgz#5d6526fa4fc7f0788a5cf75b15f30323e2f81f7a"
+  integrity sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==
+  dependencies:
+    acorn "^6.0.7"
+    acorn-jsx "^5.0.0"
+    eslint-visitor-keys "^1.0.0"
+
+esprima@^4.0.0:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
+  integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
+
+esquery@^1.0.0, esquery@^1.0.1:
+  version "1.3.1"
+  resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57"
+  integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==
+  dependencies:
+    estraverse "^5.1.0"
+
+esrecurse@^4.1.0:
+  version "4.2.1"
+  resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf"
+  integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==
+  dependencies:
+    estraverse "^4.1.0"
+
+estraverse@^4.1.0, estraverse@^4.1.1:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
+  integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
+
+estraverse@^5.1.0:
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.1.0.tgz#374309d39fd935ae500e7b92e8a6b4c720e59642"
+  integrity sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw==
+
+esutils@^2.0.2:
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
+  integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
+
+execa@^0.7.0:
+  version "0.7.0"
+  resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777"
+  integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=
+  dependencies:
+    cross-spawn "^5.0.1"
+    get-stream "^3.0.0"
+    is-stream "^1.1.0"
+    npm-run-path "^2.0.0"
+    p-finally "^1.0.0"
+    signal-exit "^3.0.0"
+    strip-eof "^1.0.0"
+
+execa@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8"
+  integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==
+  dependencies:
+    cross-spawn "^6.0.0"
+    get-stream "^4.0.0"
+    is-stream "^1.1.0"
+    npm-run-path "^2.0.0"
+    p-finally "^1.0.0"
+    signal-exit "^3.0.0"
+    strip-eof "^1.0.0"
+
+expand-brackets@^2.1.4:
+  version "2.1.4"
+  resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"
+  integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI=
+  dependencies:
+    debug "^2.3.3"
+    define-property "^0.2.5"
+    extend-shallow "^2.0.1"
+    posix-character-classes "^0.1.0"
+    regex-not "^1.0.0"
+    snapdragon "^0.8.1"
+    to-regex "^3.0.1"
+
+extend-shallow@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
+  integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=
+  dependencies:
+    is-extendable "^0.1.0"
+
+extend-shallow@^3.0.0, extend-shallow@^3.0.2:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8"
+  integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=
+  dependencies:
+    assign-symbols "^1.0.0"
+    is-extendable "^1.0.1"
+
+external-editor@^2.0.4:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5"
+  integrity sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==
+  dependencies:
+    chardet "^0.4.0"
+    iconv-lite "^0.4.17"
+    tmp "^0.0.33"
+
+external-editor@^3.0.3:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495"
+  integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==
+  dependencies:
+    chardet "^0.7.0"
+    iconv-lite "^0.4.24"
+    tmp "^0.0.33"
+
+extglob@^2.0.4:
+  version "2.0.4"
+  resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
+  integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==
+  dependencies:
+    array-unique "^0.3.2"
+    define-property "^1.0.0"
+    expand-brackets "^2.1.4"
+    extend-shallow "^2.0.1"
+    fragment-cache "^0.2.1"
+    regex-not "^1.0.0"
+    snapdragon "^0.8.1"
+    to-regex "^3.0.1"
+
+fast-deep-equal@^1.0.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614"
+  integrity sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=
+
+fast-deep-equal@^3.1.1:
+  version "3.1.1"
+  resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4"
+  integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==
+
+fast-json-stable-stringify@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
+  integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
+
+fast-levenshtein@~2.0.6:
+  version "2.0.6"
+  resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
+  integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
+
+figures@^1.7.0:
+  version "1.7.0"
+  resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e"
+  integrity sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=
+  dependencies:
+    escape-string-regexp "^1.0.5"
+    object-assign "^4.1.0"
+
+figures@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962"
+  integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=
+  dependencies:
+    escape-string-regexp "^1.0.5"
+
+file-entry-cache@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361"
+  integrity sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=
+  dependencies:
+    flat-cache "^1.2.1"
+    object-assign "^4.0.1"
+
+file-entry-cache@^5.0.1:
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c"
+  integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==
+  dependencies:
+    flat-cache "^2.0.1"
+
+fill-range@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
+  integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=
+  dependencies:
+    extend-shallow "^2.0.1"
+    is-number "^3.0.0"
+    repeat-string "^1.6.1"
+    to-regex-range "^2.1.0"
+
+find-up@^2.0.0, find-up@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
+  integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c=
+  dependencies:
+    locate-path "^2.0.0"
+
+find-up@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"
+  integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==
+  dependencies:
+    locate-path "^3.0.0"
+
+flat-cache@^1.2.1:
+  version "1.3.4"
+  resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.4.tgz#2c2ef77525cc2929007dfffa1dd314aa9c9dee6f"
+  integrity sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==
+  dependencies:
+    circular-json "^0.3.1"
+    graceful-fs "^4.1.2"
+    rimraf "~2.6.2"
+    write "^0.2.1"
+
+flat-cache@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0"
+  integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==
+  dependencies:
+    flatted "^2.0.0"
+    rimraf "2.6.3"
+    write "1.0.3"
+
+flatted@^2.0.0:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138"
+  integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==
+
+fn-name@~2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/fn-name/-/fn-name-2.0.1.tgz#5214d7537a4d06a4a301c0cc262feb84188002e7"
+  integrity sha1-UhTXU3pNBqSjAcDMJi/rhBiAAuc=
+
+for-in@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
+  integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=
+
+fragment-cache@^0.2.1:
+  version "0.2.1"
+  resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19"
+  integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=
+  dependencies:
+    map-cache "^0.2.2"
+
+fs.realpath@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+  integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
+
+function-bind@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
+  integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
+
+functional-red-black-tree@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
+  integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=
+
+g-status@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/g-status/-/g-status-2.0.2.tgz#270fd32119e8fc9496f066fe5fe88e0a6bc78b97"
+  integrity sha512-kQoE9qH+T1AHKgSSD0Hkv98bobE90ILQcXAF4wvGgsr7uFqNvwmh8j+Lq3l0RVt3E3HjSbv2B9biEGcEtpHLCA==
+  dependencies:
+    arrify "^1.0.1"
+    matcher "^1.0.0"
+    simple-git "^1.85.0"
+
+get-caller-file@^1.0.1:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a"
+  integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==
+
+get-own-enumerable-property-symbols@^3.0.0:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664"
+  integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==
+
+get-stdin@^5.0.1:
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398"
+  integrity sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=
+
+get-stdin@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b"
+  integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==
+
+get-stream@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
+  integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=
+
+get-stream@^4.0.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5"
+  integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==
+  dependencies:
+    pump "^3.0.0"
+
+get-value@^2.0.3, get-value@^2.0.6:
+  version "2.0.6"
+  resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
+  integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=
+
+glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3:
+  version "7.1.6"
+  resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
+  integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
+  dependencies:
+    fs.realpath "^1.0.0"
+    inflight "^1.0.4"
+    inherits "2"
+    minimatch "^3.0.4"
+    once "^1.3.0"
+    path-is-absolute "^1.0.0"
+
+glob@~7.0.6:
+  version "7.0.6"
+  resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.6.tgz#211bafaf49e525b8cd93260d14ab136152b3f57a"
+  integrity sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=
+  dependencies:
+    fs.realpath "^1.0.0"
+    inflight "^1.0.4"
+    inherits "2"
+    minimatch "^3.0.2"
+    once "^1.3.0"
+    path-is-absolute "^1.0.0"
+
+globals@^11.0.1, globals@^11.1.0, globals@^11.7.0:
+  version "11.12.0"
+  resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
+  integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
+
+globby@^6.1.0:
+  version "6.1.0"
+  resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c"
+  integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=
+  dependencies:
+    array-union "^1.0.1"
+    glob "^7.0.3"
+    object-assign "^4.0.1"
+    pify "^2.0.0"
+    pinkie-promise "^2.0.0"
+
+graceful-fs@^4.1.2:
+  version "4.2.4"
+  resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb"
+  integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==
+
+has-ansi@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
+  integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=
+  dependencies:
+    ansi-regex "^2.0.0"
+
+has-flag@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51"
+  integrity sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=
+
+has-flag@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
+  integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
+
+has-symbols@^1.0.0, has-symbols@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8"
+  integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==
+
+has-value@^0.3.1:
+  version "0.3.1"
+  resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"
+  integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=
+  dependencies:
+    get-value "^2.0.3"
+    has-values "^0.1.4"
+    isobject "^2.0.0"
+
+has-value@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177"
+  integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=
+  dependencies:
+    get-value "^2.0.6"
+    has-values "^1.0.0"
+    isobject "^3.0.0"
+
+has-values@^0.1.4:
+  version "0.1.4"
+  resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771"
+  integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E=
+
+has-values@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f"
+  integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=
+  dependencies:
+    is-number "^3.0.0"
+    kind-of "^4.0.0"
+
+has@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
+  integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
+  dependencies:
+    function-bind "^1.1.1"
+
+hosted-git-info@^2.1.4:
+  version "2.8.8"
+  resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488"
+  integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==
+
+husky@^1.3.1:
+  version "1.3.1"
+  resolved "https://registry.yarnpkg.com/husky/-/husky-1.3.1.tgz#26823e399300388ca2afff11cfa8a86b0033fae0"
+  integrity sha512-86U6sVVVf4b5NYSZ0yvv88dRgBSSXXmHaiq5pP4KDj5JVzdwKgBjEtUPOm8hcoytezFwbU+7gotXNhpHdystlg==
+  dependencies:
+    cosmiconfig "^5.0.7"
+    execa "^1.0.0"
+    find-up "^3.0.0"
+    get-stdin "^6.0.0"
+    is-ci "^2.0.0"
+    pkg-dir "^3.0.0"
+    please-upgrade-node "^3.1.1"
+    read-pkg "^4.0.1"
+    run-node "^1.0.0"
+    slash "^2.0.0"
+
+iconv-lite@^0.4.17, iconv-lite@^0.4.24:
+  version "0.4.24"
+  resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
+  integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
+  dependencies:
+    safer-buffer ">= 2.1.2 < 3"
+
+ignore@^3.2.7, ignore@^3.3.3:
+  version "3.3.10"
+  resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043"
+  integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==
+
+ignore@^4.0.6:
+  version "4.0.6"
+  resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
+  integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==
+
+ignore@^5.0.2:
+  version "5.1.4"
+  resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.4.tgz#84b7b3dbe64552b6ef0eca99f6743dbec6d97adf"
+  integrity sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==
+
+import-fresh@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546"
+  integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY=
+  dependencies:
+    caller-path "^2.0.0"
+    resolve-from "^3.0.0"
+
+import-fresh@^3.0.0:
+  version "3.2.1"
+  resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66"
+  integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==
+  dependencies:
+    parent-module "^1.0.0"
+    resolve-from "^4.0.0"
+
+imurmurhash@^0.1.4:
+  version "0.1.4"
+  resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
+  integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
+
+indent-string@^3.0.0, indent-string@^3.1.0, indent-string@^3.2.0:
+  version "3.2.0"
+  resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289"
+  integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=
+
+inflight@^1.0.4:
+  version "1.0.6"
+  resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+  integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
+  dependencies:
+    once "^1.3.0"
+    wrappy "1"
+
+inherits@2, inherits@^2.0.3, inherits@~2.0.3:
+  version "2.0.4"
+  resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
+  integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
+
+inquirer@^3.0.6:
+  version "3.3.0"
+  resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9"
+  integrity sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==
+  dependencies:
+    ansi-escapes "^3.0.0"
+    chalk "^2.0.0"
+    cli-cursor "^2.1.0"
+    cli-width "^2.0.0"
+    external-editor "^2.0.4"
+    figures "^2.0.0"
+    lodash "^4.3.0"
+    mute-stream "0.0.7"
+    run-async "^2.2.0"
+    rx-lite "^4.0.8"
+    rx-lite-aggregates "^4.0.8"
+    string-width "^2.1.0"
+    strip-ansi "^4.0.0"
+    through "^2.3.6"
+
+inquirer@^6.2.2:
+  version "6.5.2"
+  resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca"
+  integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==
+  dependencies:
+    ansi-escapes "^3.2.0"
+    chalk "^2.4.2"
+    cli-cursor "^2.1.0"
+    cli-width "^2.0.0"
+    external-editor "^3.0.3"
+    figures "^2.0.0"
+    lodash "^4.17.12"
+    mute-stream "0.0.7"
+    run-async "^2.2.0"
+    rxjs "^6.4.0"
+    string-width "^2.1.0"
+    strip-ansi "^5.1.0"
+    through "^2.3.6"
+
+internal-slot@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.2.tgz#9c2e9fb3cd8e5e4256c6f45fe310067fcfa378a3"
+  integrity sha512-2cQNfwhAfJIkU4KZPkDI+Gj5yNNnbqi40W9Gge6dfnk4TocEVm00B3bdiL+JINrbGJil2TeHvM4rETGzk/f/0g==
+  dependencies:
+    es-abstract "^1.17.0-next.1"
+    has "^1.0.3"
+    side-channel "^1.0.2"
+
+invert-kv@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"
+  integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY=
+
+is-accessor-descriptor@^0.1.6:
+  version "0.1.6"
+  resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"
+  integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=
+  dependencies:
+    kind-of "^3.0.2"
+
+is-accessor-descriptor@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656"
+  integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==
+  dependencies:
+    kind-of "^6.0.0"
+
+is-arguments@^1.0.4:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3"
+  integrity sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==
+
+is-arrayish@^0.2.1:
+  version "0.2.1"
+  resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
+  integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
+
+is-buffer@^1.1.5:
+  version "1.1.6"
+  resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
+  integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
+
+is-callable@^1.1.4, is-callable@^1.1.5:
+  version "1.1.5"
+  resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab"
+  integrity sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==
+
+is-ci@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c"
+  integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==
+  dependencies:
+    ci-info "^2.0.0"
+
+is-data-descriptor@^0.1.4:
+  version "0.1.4"
+  resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
+  integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=
+  dependencies:
+    kind-of "^3.0.2"
+
+is-data-descriptor@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7"
+  integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==
+  dependencies:
+    kind-of "^6.0.0"
+
+is-date-object@^1.0.1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e"
+  integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==
+
+is-descriptor@^0.1.0:
+  version "0.1.6"
+  resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca"
+  integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==
+  dependencies:
+    is-accessor-descriptor "^0.1.6"
+    is-data-descriptor "^0.1.4"
+    kind-of "^5.0.0"
+
+is-descriptor@^1.0.0, is-descriptor@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec"
+  integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==
+  dependencies:
+    is-accessor-descriptor "^1.0.0"
+    is-data-descriptor "^1.0.0"
+    kind-of "^6.0.2"
+
+is-directory@^0.3.1:
+  version "0.3.1"
+  resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1"
+  integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=
+
+is-extendable@^0.1.0, is-extendable@^0.1.1:
+  version "0.1.1"
+  resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
+  integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=
+
+is-extendable@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4"
+  integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==
+  dependencies:
+    is-plain-object "^2.0.4"
+
+is-extglob@^2.1.1:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
+  integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
+
+is-fullwidth-code-point@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
+  integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs=
+  dependencies:
+    number-is-nan "^1.0.0"
+
+is-fullwidth-code-point@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
+  integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
+
+is-glob@^4.0.0:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc"
+  integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==
+  dependencies:
+    is-extglob "^2.1.1"
+
+is-number@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
+  integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=
+  dependencies:
+    kind-of "^3.0.2"
+
+is-obj@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
+  integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8=
+
+is-observable@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-1.1.0.tgz#b3e986c8f44de950867cab5403f5a3465005975e"
+  integrity sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==
+  dependencies:
+    symbol-observable "^1.1.0"
+
+is-path-cwd@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d"
+  integrity sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=
+
+is-path-in-cwd@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52"
+  integrity sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==
+  dependencies:
+    is-path-inside "^1.0.0"
+
+is-path-inside@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036"
+  integrity sha1-jvW33lBDej/cprToZe96pVy0gDY=
+  dependencies:
+    path-is-inside "^1.0.1"
+
+is-plain-object@^2.0.3, is-plain-object@^2.0.4:
+  version "2.0.4"
+  resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
+  integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
+  dependencies:
+    isobject "^3.0.1"
+
+is-promise@^2.1.0:
+  version "2.2.2"
+  resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1"
+  integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==
+
+is-regex@^1.0.4, is-regex@^1.0.5:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae"
+  integrity sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==
+  dependencies:
+    has "^1.0.3"
+
+is-regexp@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069"
+  integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk=
+
+is-resolvable@^1.0.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88"
+  integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==
+
+is-stream@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
+  integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
+
+is-string@^1.0.5:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6"
+  integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==
+
+is-symbol@^1.0.2:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937"
+  integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==
+  dependencies:
+    has-symbols "^1.0.1"
+
+is-windows@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
+  integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==
+
+isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+  integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
+
+isexe@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
+  integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
+
+isobject@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
+  integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=
+  dependencies:
+    isarray "1.0.0"
+
+isobject@^3.0.0, isobject@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
+  integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8=
+
+"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
+  integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
+
+js-tokens@^3.0.2:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
+  integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls=
+
+js-yaml@^3.13.0, js-yaml@^3.13.1, js-yaml@^3.9.1:
+  version "3.13.1"
+  resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847"
+  integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==
+  dependencies:
+    argparse "^1.0.7"
+    esprima "^4.0.0"
+
+jsesc@^2.5.1:
+  version "2.5.2"
+  resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
+  integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
+
+json-parse-better-errors@^1.0.1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
+  integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==
+
+json-schema-traverse@^0.3.0:
+  version "0.3.1"
+  resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340"
+  integrity sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=
+
+json-schema-traverse@^0.4.1:
+  version "0.4.1"
+  resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
+  integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
+
+json-stable-stringify-without-jsonify@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
+  integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=
+
+jsx-ast-utils@^2.2.1, jsx-ast-utils@^2.2.3:
+  version "2.2.3"
+  resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.2.3.tgz#8a9364e402448a3ce7f14d357738310d9248054f"
+  integrity sha512-EdIHFMm+1BPynpKOpdPqiOsvnIrInRGJD7bzPZdPkjitQEqpdpUuFpq4T0npZFKTiB3RhWFdGN+oqOJIdhDhQA==
+  dependencies:
+    array-includes "^3.0.3"
+    object.assign "^4.1.0"
+
+kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
+  version "3.2.2"
+  resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
+  integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=
+  dependencies:
+    is-buffer "^1.1.5"
+
+kind-of@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57"
+  integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc=
+  dependencies:
+    is-buffer "^1.1.5"
+
+kind-of@^5.0.0:
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d"
+  integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==
+
+kind-of@^6.0.0, kind-of@^6.0.2:
+  version "6.0.3"
+  resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
+  integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
+
+lcid@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835"
+  integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=
+  dependencies:
+    invert-kv "^1.0.0"
+
+levn@^0.3.0, levn@~0.3.0:
+  version "0.3.0"
+  resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
+  integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=
+  dependencies:
+    prelude-ls "~1.1.2"
+    type-check "~0.3.2"
+
+lint-staged@^8.1.0:
+  version "8.2.1"
+  resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-8.2.1.tgz#752fcf222d9d28f323a3b80f1e668f3654ff221f"
+  integrity sha512-n0tDGR/rTCgQNwXnUf/eWIpPNddGWxC32ANTNYsj2k02iZb7Cz5ox2tytwBu+2r0zDXMEMKw7Y9OD/qsav561A==
+  dependencies:
+    chalk "^2.3.1"
+    commander "^2.14.1"
+    cosmiconfig "^5.2.0"
+    debug "^3.1.0"
+    dedent "^0.7.0"
+    del "^3.0.0"
+    execa "^1.0.0"
+    g-status "^2.0.2"
+    is-glob "^4.0.0"
+    is-windows "^1.0.2"
+    listr "^0.14.2"
+    listr-update-renderer "^0.5.0"
+    lodash "^4.17.11"
+    log-symbols "^2.2.0"
+    micromatch "^3.1.8"
+    npm-which "^3.0.1"
+    p-map "^1.1.1"
+    path-is-inside "^1.0.2"
+    pify "^3.0.0"
+    please-upgrade-node "^3.0.2"
+    staged-git-files "1.1.2"
+    string-argv "^0.0.2"
+    stringify-object "^3.2.2"
+    yup "^0.27.0"
+
+listr-silent-renderer@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e"
+  integrity sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4=
+
+listr-update-renderer@^0.5.0:
+  version "0.5.0"
+  resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz#4ea8368548a7b8aecb7e06d8c95cb45ae2ede6a2"
+  integrity sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA==
+  dependencies:
+    chalk "^1.1.3"
+    cli-truncate "^0.2.1"
+    elegant-spinner "^1.0.1"
+    figures "^1.7.0"
+    indent-string "^3.0.0"
+    log-symbols "^1.0.2"
+    log-update "^2.3.0"
+    strip-ansi "^3.0.1"
+
+listr-verbose-renderer@^0.5.0:
+  version "0.5.0"
+  resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz#f1132167535ea4c1261102b9f28dac7cba1e03db"
+  integrity sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw==
+  dependencies:
+    chalk "^2.4.1"
+    cli-cursor "^2.1.0"
+    date-fns "^1.27.2"
+    figures "^2.0.0"
+
+listr@^0.14.2:
+  version "0.14.3"
+  resolved "https://registry.yarnpkg.com/listr/-/listr-0.14.3.tgz#2fea909604e434be464c50bddba0d496928fa586"
+  integrity sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA==
+  dependencies:
+    "@samverschueren/stream-to-observable" "^0.3.0"
+    is-observable "^1.1.0"
+    is-promise "^2.1.0"
+    is-stream "^1.1.0"
+    listr-silent-renderer "^1.1.1"
+    listr-update-renderer "^0.5.0"
+    listr-verbose-renderer "^0.5.0"
+    p-map "^2.0.0"
+    rxjs "^6.3.3"
+
+load-json-file@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8"
+  integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=
+  dependencies:
+    graceful-fs "^4.1.2"
+    parse-json "^2.2.0"
+    pify "^2.0.0"
+    strip-bom "^3.0.0"
+
+locate-path@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
+  integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=
+  dependencies:
+    p-locate "^2.0.0"
+    path-exists "^3.0.0"
+
+locate-path@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e"
+  integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==
+  dependencies:
+    p-locate "^3.0.0"
+    path-exists "^3.0.0"
+
+lodash.memoize@^4.1.2:
+  version "4.1.2"
+  resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
+  integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=
+
+lodash.merge@^4.6.0:
+  version "4.6.2"
+  resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
+  integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
+
+lodash.unescape@4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/lodash.unescape/-/lodash.unescape-4.0.1.tgz#bf2249886ce514cda112fae9218cdc065211fc9c"
+  integrity sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw=
+
+lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.4, lodash@^4.3.0:
+  version "4.17.15"
+  resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
+  integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==
+
+log-symbols@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18"
+  integrity sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=
+  dependencies:
+    chalk "^1.0.0"
+
+log-symbols@^2.2.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a"
+  integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==
+  dependencies:
+    chalk "^2.0.1"
+
+log-update@^2.3.0:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/log-update/-/log-update-2.3.0.tgz#88328fd7d1ce7938b29283746f0b1bc126b24708"
+  integrity sha1-iDKP19HOeTiykoN0bwsbwSayRwg=
+  dependencies:
+    ansi-escapes "^3.0.0"
+    cli-cursor "^2.0.0"
+    wrap-ansi "^3.0.1"
+
+loglevel-colored-level-prefix@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/loglevel-colored-level-prefix/-/loglevel-colored-level-prefix-1.0.0.tgz#6a40218fdc7ae15fc76c3d0f3e676c465388603e"
+  integrity sha1-akAhj9x64V/HbD0PPmdsRlOIYD4=
+  dependencies:
+    chalk "^1.1.3"
+    loglevel "^1.4.1"
+
+loglevel@^1.4.1:
+  version "1.6.8"
+  resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.8.tgz#8a25fb75d092230ecd4457270d80b54e28011171"
+  integrity sha512-bsU7+gc9AJ2SqpzxwU3+1fedl8zAntbtC5XYlt3s2j1hJcn2PsXSmgN8TaLG/J1/2mod4+cE/3vNL70/c1RNCA==
+
+loose-envify@^1.4.0:
+  version "1.4.0"
+  resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
+  integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
+  dependencies:
+    js-tokens "^3.0.0 || ^4.0.0"
+
+lru-cache@^4.0.1:
+  version "4.1.5"
+  resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd"
+  integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==
+  dependencies:
+    pseudomap "^1.0.2"
+    yallist "^2.1.2"
+
+make-plural@^4.1.1:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/make-plural/-/make-plural-4.3.0.tgz#f23de08efdb0cac2e0c9ba9f315b0dff6b4c2735"
+  integrity sha512-xTYd4JVHpSCW+aqDof6w/MebaMVNTVYBZhbB/vi513xXdiPT92JMVCo0Jq8W2UZnzYRFeVbQiQ+I25l13JuKvA==
+  optionalDependencies:
+    minimist "^1.2.0"
+
+map-cache@^0.2.2:
+  version "0.2.2"
+  resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
+  integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=
+
+map-obj@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9"
+  integrity sha1-plzSkIepJZi4eRJXpSPgISIqwfk=
+
+map-visit@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"
+  integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=
+  dependencies:
+    object-visit "^1.0.0"
+
+matcher@^1.0.0:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/matcher/-/matcher-1.1.1.tgz#51d8301e138f840982b338b116bb0c09af62c1c2"
+  integrity sha512-+BmqxWIubKTRKNWx/ahnCkk3mG8m7OturVlqq6HiojGJTd5hVYbgZm6WzcYPCoB+KBT4Vd6R7WSRG2OADNaCjg==
+  dependencies:
+    escape-string-regexp "^1.0.4"
+
+mem@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76"
+  integrity sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=
+  dependencies:
+    mimic-fn "^1.0.0"
+
+messageformat-parser@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/messageformat-parser/-/messageformat-parser-1.1.0.tgz#13ba2250a76bbde8e0fca0dbb3475f95c594a90a"
+  integrity sha512-Hwem6G3MsKDLS1FtBRGIs8T50P1Q00r3srS6QJePCFbad9fq0nYxwf3rnU2BreApRGhmpKMV7oZI06Sy1c9TPA==
+
+messageformat@^1.0.2:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/messageformat/-/messageformat-1.1.1.tgz#ceaa2e6c86929d4807058275a7372b1bd963bdf6"
+  integrity sha512-Q0uXcDtF5pEZsVSyhzDOGgZZK6ykN79VY9CwU3Nv0gsqx62BjdJW0MT+63UkHQ4exe3HE33ZlxR2/YwoJarRTg==
+  dependencies:
+    glob "~7.0.6"
+    make-plural "^4.1.1"
+    messageformat-parser "^1.1.0"
+    nopt "~3.0.6"
+    reserved-words "^0.1.2"
+
+micromatch@^3.1.8:
+  version "3.1.10"
+  resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
+  integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==
+  dependencies:
+    arr-diff "^4.0.0"
+    array-unique "^0.3.2"
+    braces "^2.3.1"
+    define-property "^2.0.2"
+    extend-shallow "^3.0.2"
+    extglob "^2.0.4"
+    fragment-cache "^0.2.1"
+    kind-of "^6.0.2"
+    nanomatch "^1.2.9"
+    object.pick "^1.3.0"
+    regex-not "^1.0.0"
+    snapdragon "^0.8.1"
+    to-regex "^3.0.2"
+
+mimic-fn@^1.0.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
+  integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==
+
+minimatch@^3.0.2, minimatch@^3.0.4:
+  version "3.0.4"
+  resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
+  integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
+  dependencies:
+    brace-expansion "^1.1.7"
+
+minimist@^1.2.0, minimist@^1.2.5:
+  version "1.2.5"
+  resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
+  integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
+
+minipass@^3.1.1:
+  version "3.3.4"
+  resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.4.tgz#ca99f95dd77c43c7a76bf51e6d200025eee0ffae"
+  integrity sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==
+  dependencies:
+    yallist "^4.0.0"
+
+mixin-deep@^1.2.0:
+  version "1.3.2"
+  resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566"
+  integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==
+  dependencies:
+    for-in "^1.0.2"
+    is-extendable "^1.0.1"
+
+mkdirp@^0.5.1:
+  version "0.5.5"
+  resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
+  integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==
+  dependencies:
+    minimist "^1.2.5"
+
+ms@2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
+  integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
+
+ms@^2.1.1:
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
+  integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
+
+mute-stream@0.0.7:
+  version "0.0.7"
+  resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
+  integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=
+
+nanomatch@^1.2.9:
+  version "1.2.13"
+  resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"
+  integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==
+  dependencies:
+    arr-diff "^4.0.0"
+    array-unique "^0.3.2"
+    define-property "^2.0.2"
+    extend-shallow "^3.0.2"
+    fragment-cache "^0.2.1"
+    is-windows "^1.0.2"
+    kind-of "^6.0.2"
+    object.pick "^1.3.0"
+    regex-not "^1.0.0"
+    snapdragon "^0.8.1"
+    to-regex "^3.0.1"
+
+natural-compare@^1.4.0:
+  version "1.4.0"
+  resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
+  integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
+
+nice-try@^1.0.4:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
+  integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
+
+nopt@~3.0.6:
+  version "3.0.6"
+  resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
+  integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k=
+  dependencies:
+    abbrev "1"
+
+normalize-package-data@^2.3.2:
+  version "2.5.0"
+  resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
+  integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==
+  dependencies:
+    hosted-git-info "^2.1.4"
+    resolve "^1.10.0"
+    semver "2 || 3 || 4 || 5"
+    validate-npm-package-license "^3.0.1"
+
+npm-path@^2.0.2:
+  version "2.0.4"
+  resolved "https://registry.yarnpkg.com/npm-path/-/npm-path-2.0.4.tgz#c641347a5ff9d6a09e4d9bce5580c4f505278e64"
+  integrity sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw==
+  dependencies:
+    which "^1.2.10"
+
+npm-run-path@^2.0.0:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
+  integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=
+  dependencies:
+    path-key "^2.0.0"
+
+npm-which@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/npm-which/-/npm-which-3.0.1.tgz#9225f26ec3a285c209cae67c3b11a6b4ab7140aa"
+  integrity sha1-kiXybsOihcIJyuZ8OxGmtKtxQKo=
+  dependencies:
+    commander "^2.9.0"
+    npm-path "^2.0.2"
+    which "^1.2.10"
+
+number-is-nan@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
+  integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
+
+object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
+  version "4.1.1"
+  resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
+  integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
+
+object-copy@^0.1.0:
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c"
+  integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw=
+  dependencies:
+    copy-descriptor "^0.1.0"
+    define-property "^0.2.5"
+    kind-of "^3.0.3"
+
+object-inspect@^1.7.0:
+  version "1.7.0"
+  resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67"
+  integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==
+
+object-is@^1.0.1:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.2.tgz#c5d2e87ff9e119f78b7a088441519e2eec1573b6"
+  integrity sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ==
+  dependencies:
+    define-properties "^1.1.3"
+    es-abstract "^1.17.5"
+
+object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
+  integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
+
+object-visit@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb"
+  integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=
+  dependencies:
+    isobject "^3.0.0"
+
+object.assign@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da"
+  integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==
+  dependencies:
+    define-properties "^1.1.2"
+    function-bind "^1.1.1"
+    has-symbols "^1.0.0"
+    object-keys "^1.0.11"
+
+object.entries@^1.1.0, object.entries@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.1.tgz#ee1cf04153de02bb093fec33683900f57ce5399b"
+  integrity sha512-ilqR7BgdyZetJutmDPfXCDffGa0/Yzl2ivVNpbx/g4UeWrCdRnFDUBrKJGLhGieRHDATnyZXWBeCb29k9CJysQ==
+  dependencies:
+    define-properties "^1.1.3"
+    es-abstract "^1.17.0-next.1"
+    function-bind "^1.1.1"
+    has "^1.0.3"
+
+object.fromentries@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.2.tgz#4a09c9b9bb3843dd0f89acdb517a794d4f355ac9"
+  integrity sha512-r3ZiBH7MQppDJVLx6fhD618GKNG40CZYH9wgwdhKxBDDbQgjeWGGd4AtkZad84d291YxvWe7bJGuE65Anh0dxQ==
+  dependencies:
+    define-properties "^1.1.3"
+    es-abstract "^1.17.0-next.1"
+    function-bind "^1.1.1"
+    has "^1.0.3"
+
+object.pick@^1.3.0:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747"
+  integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=
+  dependencies:
+    isobject "^3.0.1"
+
+object.values@^1.1.0, object.values@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.1.tgz#68a99ecde356b7e9295a3c5e0ce31dc8c953de5e"
+  integrity sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==
+  dependencies:
+    define-properties "^1.1.3"
+    es-abstract "^1.17.0-next.1"
+    function-bind "^1.1.1"
+    has "^1.0.3"
+
+once@^1.3.0, once@^1.3.1, once@^1.4.0:
+  version "1.4.0"
+  resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+  integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
+  dependencies:
+    wrappy "1"
+
+onetime@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4"
+  integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=
+  dependencies:
+    mimic-fn "^1.0.0"
+
+optionator@^0.8.2:
+  version "0.8.3"
+  resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495"
+  integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==
+  dependencies:
+    deep-is "~0.1.3"
+    fast-levenshtein "~2.0.6"
+    levn "~0.3.0"
+    prelude-ls "~1.1.2"
+    type-check "~0.3.2"
+    word-wrap "~1.2.3"
+
+os-locale@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2"
+  integrity sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==
+  dependencies:
+    execa "^0.7.0"
+    lcid "^1.0.0"
+    mem "^1.1.0"
+
+os-tmpdir@~1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
+  integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
+
+p-finally@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
+  integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=
+
+p-limit@^1.1.0:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8"
+  integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==
+  dependencies:
+    p-try "^1.0.0"
+
+p-limit@^2.0.0:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
+  integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
+  dependencies:
+    p-try "^2.0.0"
+
+p-locate@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
+  integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=
+  dependencies:
+    p-limit "^1.1.0"
+
+p-locate@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4"
+  integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==
+  dependencies:
+    p-limit "^2.0.0"
+
+p-map@^1.1.1:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b"
+  integrity sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==
+
+p-map@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175"
+  integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==
+
+p-try@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
+  integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=
+
+p-try@^2.0.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
+  integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
+
+parent-module@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
+  integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
+  dependencies:
+    callsites "^3.0.0"
+
+parse-json@^2.2.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
+  integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=
+  dependencies:
+    error-ex "^1.2.0"
+
+parse-json@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0"
+  integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=
+  dependencies:
+    error-ex "^1.3.1"
+    json-parse-better-errors "^1.0.1"
+
+pascalcase@^0.1.1:
+  version "0.1.1"
+  resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
+  integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=
+
+path-exists@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
+  integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=
+
+path-is-absolute@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+  integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
+
+path-is-inside@^1.0.1, path-is-inside@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
+  integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=
+
+path-key@^2.0.0, path-key@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
+  integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
+
+path-parse@^1.0.6:
+  version "1.0.6"
+  resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
+  integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
+
+path-type@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73"
+  integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=
+  dependencies:
+    pify "^2.0.0"
+
+pify@^2.0.0:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
+  integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw=
+
+pify@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
+  integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=
+
+pinkie-promise@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
+  integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o=
+  dependencies:
+    pinkie "^2.0.0"
+
+pinkie@^2.0.0:
+  version "2.0.4"
+  resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
+  integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA=
+
+pkg-dir@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b"
+  integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=
+  dependencies:
+    find-up "^2.1.0"
+
+pkg-dir@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3"
+  integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==
+  dependencies:
+    find-up "^3.0.0"
+
+please-upgrade-node@^3.0.2, please-upgrade-node@^3.1.1:
+  version "3.2.0"
+  resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942"
+  integrity sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==
+  dependencies:
+    semver-compare "^1.0.0"
+
+pluralize@^7.0.0:
+  version "7.0.0"
+  resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777"
+  integrity sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==
+
+posix-character-classes@^0.1.0:
+  version "0.1.1"
+  resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
+  integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=
+
+prelude-ls@~1.1.2:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
+  integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=
+
+prettier-eslint-cli@^4.7.1:
+  version "4.7.1"
+  resolved "https://registry.yarnpkg.com/prettier-eslint-cli/-/prettier-eslint-cli-4.7.1.tgz#3d103c494baa4e80b99ad53e2b9db7620101859f"
+  integrity sha512-hQbsGaEVz97oBBcKdsJ46khv0kOGkMyWrXzcFOXW6X8UuetZ/j0yDJkNJgUTVc6PVFbbzBXk+qgd5vos9qzXPQ==
+  dependencies:
+    arrify "^1.0.1"
+    babel-runtime "^6.23.0"
+    boolify "^1.0.0"
+    camelcase-keys "^4.1.0"
+    chalk "2.3.0"
+    common-tags "^1.4.0"
+    eslint "^4.5.0"
+    find-up "^2.1.0"
+    get-stdin "^5.0.1"
+    glob "^7.1.1"
+    ignore "^3.2.7"
+    indent-string "^3.1.0"
+    lodash.memoize "^4.1.2"
+    loglevel-colored-level-prefix "^1.0.0"
+    messageformat "^1.0.2"
+    prettier-eslint "^8.5.0"
+    rxjs "^5.3.0"
+    yargs "10.0.3"
+
+prettier-eslint@^8.5.0:
+  version "8.8.2"
+  resolved "https://registry.yarnpkg.com/prettier-eslint/-/prettier-eslint-8.8.2.tgz#fcb29a48ab4524e234680797fe70e9d136ccaf0b"
+  integrity sha512-2UzApPuxi2yRoyMlXMazgR6UcH9DKJhNgCviIwY3ixZ9THWSSrUww5vkiZ3C48WvpFl1M1y/oU63deSy1puWEA==
+  dependencies:
+    babel-runtime "^6.26.0"
+    common-tags "^1.4.0"
+    dlv "^1.1.0"
+    eslint "^4.0.0"
+    indent-string "^3.2.0"
+    lodash.merge "^4.6.0"
+    loglevel-colored-level-prefix "^1.0.0"
+    prettier "^1.7.0"
+    pretty-format "^23.0.1"
+    require-relative "^0.8.7"
+    typescript "^2.5.1"
+    typescript-eslint-parser "^16.0.0"
+    vue-eslint-parser "^2.0.2"
+
+prettier@^1.7.0:
+  version "1.19.1"
+  resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb"
+  integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==
+
+pretty-format@^23.0.1:
+  version "23.6.0"
+  resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-23.6.0.tgz#5eaac8eeb6b33b987b7fe6097ea6a8a146ab5760"
+  integrity sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw==
+  dependencies:
+    ansi-regex "^3.0.0"
+    ansi-styles "^3.2.0"
+
+process-nextick-args@~2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
+  integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
+
+progress@^2.0.0:
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
+  integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
+
+prop-types@^15.7.2:
+  version "15.7.2"
+  resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"
+  integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==
+  dependencies:
+    loose-envify "^1.4.0"
+    object-assign "^4.1.1"
+    react-is "^16.8.1"
+
+property-expr@^1.5.0:
+  version "1.5.1"
+  resolved "https://registry.yarnpkg.com/property-expr/-/property-expr-1.5.1.tgz#22e8706894a0c8e28d58735804f6ba3a3673314f"
+  integrity sha512-CGuc0VUTGthpJXL36ydB6jnbyOf/rAHFvmVrJlH+Rg0DqqLFQGAP6hIaxD/G0OAmBJPhXDHuEJigrp0e0wFV6g==
+
+pseudomap@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
+  integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM=
+
+pump@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
+  integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
+  dependencies:
+    end-of-stream "^1.1.0"
+    once "^1.3.1"
+
+punycode@^2.1.0:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
+  integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
+
+quick-lru@^1.0.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8"
+  integrity sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=
+
+ramda@^0.26.1:
+  version "0.26.1"
+  resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.26.1.tgz#8d41351eb8111c55353617fc3bbffad8e4d35d06"
+  integrity sha512-hLWjpy7EnsDBb0p+Z3B7rPi3GDeRG5ZtiI33kJhTt+ORCd38AbAIjB/9zRIUoeTbE/AVX5ZkU7m6bznsvrf8eQ==
+
+react-is@^16.8.1:
+  version "16.13.1"
+  resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
+  integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
+
+read-pkg-up@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be"
+  integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=
+  dependencies:
+    find-up "^2.0.0"
+    read-pkg "^2.0.0"
+
+read-pkg@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8"
+  integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=
+  dependencies:
+    load-json-file "^2.0.0"
+    normalize-package-data "^2.3.2"
+    path-type "^2.0.0"
+
+read-pkg@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-4.0.1.tgz#963625378f3e1c4d48c85872b5a6ec7d5d093237"
+  integrity sha1-ljYlN48+HE1IyFhytabsfV0JMjc=
+  dependencies:
+    normalize-package-data "^2.3.2"
+    parse-json "^4.0.0"
+    pify "^3.0.0"
+
+readable-stream@^2.2.2:
+  version "2.3.7"
+  resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
+  integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
+  dependencies:
+    core-util-is "~1.0.0"
+    inherits "~2.0.3"
+    isarray "~1.0.0"
+    process-nextick-args "~2.0.0"
+    safe-buffer "~5.1.1"
+    string_decoder "~1.1.1"
+    util-deprecate "~1.0.1"
+
+regenerator-runtime@^0.11.0:
+  version "0.11.1"
+  resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"
+  integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==
+
+regenerator-runtime@^0.13.4:
+  version "0.13.5"
+  resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz#d878a1d094b4306d10b9096484b33ebd55e26697"
+  integrity sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==
+
+regex-not@^1.0.0, regex-not@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c"
+  integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==
+  dependencies:
+    extend-shallow "^3.0.2"
+    safe-regex "^1.1.0"
+
+regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.3.0:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75"
+  integrity sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==
+  dependencies:
+    define-properties "^1.1.3"
+    es-abstract "^1.17.0-next.1"
+
+regexpp@^1.0.1:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-1.1.0.tgz#0e3516dd0b7904f413d2d4193dce4618c3a689ab"
+  integrity sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==
+
+regexpp@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f"
+  integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==
+
+repeat-element@^1.1.2:
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce"
+  integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==
+
+repeat-string@^1.6.1:
+  version "1.6.1"
+  resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
+  integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc=
+
+require-directory@^2.1.1:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
+  integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I=
+
+require-main-filename@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1"
+  integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=
+
+require-relative@^0.8.7:
+  version "0.8.7"
+  resolved "https://registry.yarnpkg.com/require-relative/-/require-relative-0.8.7.tgz#7999539fc9e047a37928fa196f8e1563dabd36de"
+  integrity sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4=
+
+require-uncached@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3"
+  integrity sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=
+  dependencies:
+    caller-path "^0.1.0"
+    resolve-from "^1.0.0"
+
+reserved-words@^0.1.2:
+  version "0.1.2"
+  resolved "https://registry.yarnpkg.com/reserved-words/-/reserved-words-0.1.2.tgz#00a0940f98cd501aeaaac316411d9adc52b31ab1"
+  integrity sha1-AKCUD5jNUBrqqsMWQR2a3FKzGrE=
+
+resolve-from@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226"
+  integrity sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=
+
+resolve-from@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748"
+  integrity sha1-six699nWiBvItuZTM17rywoYh0g=
+
+resolve-from@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
+  integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
+
+resolve-url@^0.2.1:
+  version "0.2.1"
+  resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
+  integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=
+
+resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.15.1, resolve@^1.8.1:
+  version "1.17.0"
+  resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444"
+  integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==
+  dependencies:
+    path-parse "^1.0.6"
+
+restore-cursor@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"
+  integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368=
+  dependencies:
+    onetime "^2.0.0"
+    signal-exit "^3.0.2"
+
+ret@~0.1.10:
+  version "0.1.15"
+  resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
+  integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
+
+rimraf@2.6.3, rimraf@~2.6.2:
+  version "2.6.3"
+  resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"
+  integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==
+  dependencies:
+    glob "^7.1.3"
+
+rimraf@^2.2.8:
+  version "2.7.1"
+  resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
+  integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
+  dependencies:
+    glob "^7.1.3"
+
+run-async@^2.2.0:
+  version "2.4.1"
+  resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455"
+  integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==
+
+run-node@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/run-node/-/run-node-1.0.0.tgz#46b50b946a2aa2d4947ae1d886e9856fd9cabe5e"
+  integrity sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A==
+
+rx-lite-aggregates@^4.0.8:
+  version "4.0.8"
+  resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be"
+  integrity sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=
+  dependencies:
+    rx-lite "*"
+
+rx-lite@*, rx-lite@^4.0.8:
+  version "4.0.8"
+  resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444"
+  integrity sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=
+
+rxjs@^5.3.0:
+  version "5.5.12"
+  resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.12.tgz#6fa61b8a77c3d793dbaf270bee2f43f652d741cc"
+  integrity sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw==
+  dependencies:
+    symbol-observable "1.0.1"
+
+rxjs@^6.3.3, rxjs@^6.4.0:
+  version "6.5.5"
+  resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.5.tgz#c5c884e3094c8cfee31bf27eb87e54ccfc87f9ec"
+  integrity sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ==
+  dependencies:
+    tslib "^1.9.0"
+
+safe-buffer@~5.1.0, safe-buffer@~5.1.1:
+  version "5.1.2"
+  resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
+  integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
+
+safe-regex@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e"
+  integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4=
+  dependencies:
+    ret "~0.1.10"
+
+"safer-buffer@>= 2.1.2 < 3":
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
+  integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
+
+semver-compare@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc"
+  integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w=
+
+"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5.0, semver@^5.5.1:
+  version "5.7.1"
+  resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
+  integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
+
+semver@5.5.0:
+  version "5.5.0"
+  resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab"
+  integrity sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==
+
+set-blocking@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
+  integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
+
+set-value@^2.0.0, set-value@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b"
+  integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==
+  dependencies:
+    extend-shallow "^2.0.1"
+    is-extendable "^0.1.1"
+    is-plain-object "^2.0.3"
+    split-string "^3.0.1"
+
+shebang-command@^1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
+  integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=
+  dependencies:
+    shebang-regex "^1.0.0"
+
+shebang-regex@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
+  integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=
+
+side-channel@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.2.tgz#df5d1abadb4e4bf4af1cd8852bf132d2f7876947"
+  integrity sha512-7rL9YlPHg7Ancea1S96Pa8/QWb4BtXL/TZvS6B8XFetGBeuhAsfmUspK6DokBeZ64+Kj9TCNRD/30pVz1BvQNA==
+  dependencies:
+    es-abstract "^1.17.0-next.1"
+    object-inspect "^1.7.0"
+
+signal-exit@^3.0.0, signal-exit@^3.0.2:
+  version "3.0.3"
+  resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c"
+  integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==
+
+simple-git@^1.85.0:
+  version "1.132.0"
+  resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-1.132.0.tgz#53ac4c5ec9e74e37c2fd461e23309f22fcdf09b1"
+  integrity sha512-xauHm1YqCTom1sC9eOjfq3/9RKiUA9iPnxBbrY2DdL8l4ADMu0jjM5l5lphQP5YWNqAL2aXC/OeuQ76vHtW5fg==
+  dependencies:
+    debug "^4.0.1"
+
+slash@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44"
+  integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==
+
+slice-ansi@0.0.4:
+  version "0.0.4"
+  resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35"
+  integrity sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=
+
+slice-ansi@1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d"
+  integrity sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==
+  dependencies:
+    is-fullwidth-code-point "^2.0.0"
+
+slice-ansi@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636"
+  integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==
+  dependencies:
+    ansi-styles "^3.2.0"
+    astral-regex "^1.0.0"
+    is-fullwidth-code-point "^2.0.0"
+
+snapdragon-node@^2.0.1:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
+  integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==
+  dependencies:
+    define-property "^1.0.0"
+    isobject "^3.0.0"
+    snapdragon-util "^3.0.1"
+
+snapdragon-util@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2"
+  integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==
+  dependencies:
+    kind-of "^3.2.0"
+
+snapdragon@^0.8.1:
+  version "0.8.2"
+  resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d"
+  integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==
+  dependencies:
+    base "^0.11.1"
+    debug "^2.2.0"
+    define-property "^0.2.5"
+    extend-shallow "^2.0.1"
+    map-cache "^0.2.2"
+    source-map "^0.5.6"
+    source-map-resolve "^0.5.0"
+    use "^3.1.0"
+
+source-map-resolve@^0.5.0:
+  version "0.5.3"
+  resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a"
+  integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==
+  dependencies:
+    atob "^2.1.2"
+    decode-uri-component "^0.2.0"
+    resolve-url "^0.2.1"
+    source-map-url "^0.4.0"
+    urix "^0.1.0"
+
+source-map-url@^0.4.0:
+  version "0.4.0"
+  resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3"
+  integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=
+
+source-map@^0.5.0, source-map@^0.5.6:
+  version "0.5.7"
+  resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
+  integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
+
+spdx-correct@^3.0.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4"
+  integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==
+  dependencies:
+    spdx-expression-parse "^3.0.0"
+    spdx-license-ids "^3.0.0"
+
+spdx-exceptions@^2.1.0:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d"
+  integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==
+
+spdx-expression-parse@^3.0.0:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679"
+  integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==
+  dependencies:
+    spdx-exceptions "^2.1.0"
+    spdx-license-ids "^3.0.0"
+
+spdx-license-ids@^3.0.0:
+  version "3.0.5"
+  resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654"
+  integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==
+
+split-string@^3.0.1, split-string@^3.0.2:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2"
+  integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==
+  dependencies:
+    extend-shallow "^3.0.0"
+
+sprintf-js@~1.0.2:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
+  integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
+
+ssri@^10.0.0:
+  version "10.0.0"
+  resolved "https://registry.yarnpkg.com/ssri/-/ssri-10.0.0.tgz#1e34554cbbc4728f5290674264e21b64aaf27ca7"
+  integrity sha512-64ghGOpqW0k+jh7m5jndBGdVEoPikWwGQmBNN5ks6jyUSMymzHDTlnNHOvzp+6MmHOljr2MokUzvRksnTwG0Iw==
+  dependencies:
+    minipass "^3.1.1"
+
+staged-git-files@1.1.2:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-1.1.2.tgz#4326d33886dc9ecfa29a6193bf511ba90a46454b"
+  integrity sha512-0Eyrk6uXW6tg9PYkhi/V/J4zHp33aNyi2hOCmhFLqLTIhbgqWn5jlSzI+IU0VqrZq6+DbHcabQl/WP6P3BG0QA==
+
+static-extend@^0.1.1:
+  version "0.1.2"
+  resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
+  integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=
+  dependencies:
+    define-property "^0.2.5"
+    object-copy "^0.1.0"
+
+string-argv@^0.0.2:
+  version "0.0.2"
+  resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.0.2.tgz#dac30408690c21f3c3630a3ff3a05877bdcbd736"
+  integrity sha1-2sMECGkMIfPDYwo/86BYd73L1zY=
+
+string-width@^1.0.1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
+  integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=
+  dependencies:
+    code-point-at "^1.0.0"
+    is-fullwidth-code-point "^1.0.0"
+    strip-ansi "^3.0.0"
+
+string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
+  integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
+  dependencies:
+    is-fullwidth-code-point "^2.0.0"
+    strip-ansi "^4.0.0"
+
+string-width@^3.0.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961"
+  integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==
+  dependencies:
+    emoji-regex "^7.0.1"
+    is-fullwidth-code-point "^2.0.0"
+    strip-ansi "^5.1.0"
+
+string.prototype.matchall@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.2.tgz#48bb510326fb9fdeb6a33ceaa81a6ea04ef7648e"
+  integrity sha512-N/jp6O5fMf9os0JU3E72Qhf590RSRZU/ungsL/qJUYVTNv7hTG0P/dbPjxINVN9jpscu3nzYwKESU3P3RY5tOg==
+  dependencies:
+    define-properties "^1.1.3"
+    es-abstract "^1.17.0"
+    has-symbols "^1.0.1"
+    internal-slot "^1.0.2"
+    regexp.prototype.flags "^1.3.0"
+    side-channel "^1.0.2"
+
+string.prototype.trimend@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913"
+  integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==
+  dependencies:
+    define-properties "^1.1.3"
+    es-abstract "^1.17.5"
+
+string.prototype.trimleft@^2.1.1:
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz#4408aa2e5d6ddd0c9a80739b087fbc067c03b3cc"
+  integrity sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==
+  dependencies:
+    define-properties "^1.1.3"
+    es-abstract "^1.17.5"
+    string.prototype.trimstart "^1.0.0"
+
+string.prototype.trimright@^2.1.1:
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz#c76f1cef30f21bbad8afeb8db1511496cfb0f2a3"
+  integrity sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==
+  dependencies:
+    define-properties "^1.1.3"
+    es-abstract "^1.17.5"
+    string.prototype.trimend "^1.0.0"
+
+string.prototype.trimstart@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54"
+  integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==
+  dependencies:
+    define-properties "^1.1.3"
+    es-abstract "^1.17.5"
+
+string_decoder@~1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
+  integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
+  dependencies:
+    safe-buffer "~5.1.0"
+
+stringify-object@^3.2.2:
+  version "3.3.0"
+  resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629"
+  integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==
+  dependencies:
+    get-own-enumerable-property-symbols "^3.0.0"
+    is-obj "^1.0.1"
+    is-regexp "^1.0.0"
+
+strip-ansi@^3.0.0, strip-ansi@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
+  integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
+  dependencies:
+    ansi-regex "^2.0.0"
+
+strip-ansi@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
+  integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8=
+  dependencies:
+    ansi-regex "^3.0.0"
+
+strip-ansi@^5.1.0:
+  version "5.2.0"
+  resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae"
+  integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==
+  dependencies:
+    ansi-regex "^4.1.0"
+
+strip-bom@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
+  integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=
+
+strip-eof@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
+  integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=
+
+strip-json-comments@^2.0.1, strip-json-comments@~2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
+  integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=
+
+supports-color@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
+  integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=
+
+supports-color@^4.0.0:
+  version "4.5.0"
+  resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b"
+  integrity sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=
+  dependencies:
+    has-flag "^2.0.0"
+
+supports-color@^5.3.0:
+  version "5.5.0"
+  resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
+  integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
+  dependencies:
+    has-flag "^3.0.0"
+
+symbol-observable@1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4"
+  integrity sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=
+
+symbol-observable@^1.1.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804"
+  integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==
+
+synchronous-promise@^2.0.6:
+  version "2.0.12"
+  resolved "https://registry.yarnpkg.com/synchronous-promise/-/synchronous-promise-2.0.12.tgz#219934f23c19c9aa716276cf2e1f8d4e5b04d07f"
+  integrity sha512-rIDJiHmIK02tXU+eW1v6a7rNIIiMLm5JUF5Uj2fT6oLSulg7WNDVoqvkYqkFoJzf4v2gmTLppvzegdo9R+7h1Q==
+
+table@4.0.2:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36"
+  integrity sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==
+  dependencies:
+    ajv "^5.2.3"
+    ajv-keywords "^2.1.0"
+    chalk "^2.1.0"
+    lodash "^4.17.4"
+    slice-ansi "1.0.0"
+    string-width "^2.1.1"
+
+table@^5.2.3:
+  version "5.4.6"
+  resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e"
+  integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==
+  dependencies:
+    ajv "^6.10.2"
+    lodash "^4.17.14"
+    slice-ansi "^2.1.0"
+    string-width "^3.0.0"
+
+text-table@^0.2.0, text-table@~0.2.0:
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
+  integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
+
+through@^2.3.6:
+  version "2.3.8"
+  resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
+  integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
+
+tmp@^0.0.33:
+  version "0.0.33"
+  resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
+  integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==
+  dependencies:
+    os-tmpdir "~1.0.2"
+
+to-fast-properties@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
+  integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=
+
+to-object-path@^0.3.0:
+  version "0.3.0"
+  resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af"
+  integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=
+  dependencies:
+    kind-of "^3.0.2"
+
+to-regex-range@^2.1.0:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38"
+  integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=
+  dependencies:
+    is-number "^3.0.0"
+    repeat-string "^1.6.1"
+
+to-regex@^3.0.1, to-regex@^3.0.2:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce"
+  integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==
+  dependencies:
+    define-property "^2.0.2"
+    extend-shallow "^3.0.2"
+    regex-not "^1.0.2"
+    safe-regex "^1.1.0"
+
+toposort@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/toposort/-/toposort-2.0.2.tgz#ae21768175d1559d48bef35420b2f4962f09c330"
+  integrity sha1-riF2gXXRVZ1IvvNUILL0li8JwzA=
+
+tslib@^1.9.0:
+  version "1.13.0"
+  resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043"
+  integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==
+
+type-check@~0.3.2:
+  version "0.3.2"
+  resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
+  integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=
+  dependencies:
+    prelude-ls "~1.1.2"
+
+typedarray@^0.0.6:
+  version "0.0.6"
+  resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
+  integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
+
+typescript-eslint-parser@^16.0.0:
+  version "16.0.1"
+  resolved "https://registry.yarnpkg.com/typescript-eslint-parser/-/typescript-eslint-parser-16.0.1.tgz#b40681c7043b222b9772748b700a000b241c031b"
+  integrity sha512-IKawLTu4A2xN3aN/cPLxvZ0bhxZHILGDKTZWvWNJ3sLNhJ3PjfMEDQmR2VMpdRPrmWOadgWXRwjLBzSA8AGsaQ==
+  dependencies:
+    lodash.unescape "4.0.1"
+    semver "5.5.0"
+
+typescript@^2.5.1:
+  version "2.9.2"
+  resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.9.2.tgz#1cbf61d05d6b96269244eb6a3bce4bd914e0f00c"
+  integrity sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==
+
+union-value@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847"
+  integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==
+  dependencies:
+    arr-union "^3.1.0"
+    get-value "^2.0.6"
+    is-extendable "^0.1.1"
+    set-value "^2.0.1"
+
+unset-value@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"
+  integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=
+  dependencies:
+    has-value "^0.3.1"
+    isobject "^3.0.0"
+
+uri-js@^4.2.2:
+  version "4.2.2"
+  resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0"
+  integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==
+  dependencies:
+    punycode "^2.1.0"
+
+urix@^0.1.0:
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
+  integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=
+
+use@^3.1.0:
+  version "3.1.1"
+  resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
+  integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==
+
+util-deprecate@~1.0.1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+  integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
+
+validate-npm-package-license@^3.0.1:
+  version "3.0.4"
+  resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
+  integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==
+  dependencies:
+    spdx-correct "^3.0.0"
+    spdx-expression-parse "^3.0.0"
+
+vue-eslint-parser@^2.0.2:
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-2.0.3.tgz#c268c96c6d94cfe3d938a5f7593959b0ca3360d1"
+  integrity sha512-ZezcU71Owm84xVF6gfurBQUGg8WQ+WZGxgDEQu1IHFBZNx7BFZg3L1yHxrCBNNwbwFtE1GuvfJKMtb6Xuwc/Bw==
+  dependencies:
+    debug "^3.1.0"
+    eslint-scope "^3.7.1"
+    eslint-visitor-keys "^1.0.0"
+    espree "^3.5.2"
+    esquery "^1.0.0"
+    lodash "^4.17.4"
+
+which-module@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
+  integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=
+
+which@^1.2.10, which@^1.2.9:
+  version "1.3.1"
+  resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
+  integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
+  dependencies:
+    isexe "^2.0.0"
+
+word-wrap@~1.2.3:
+  version "1.2.3"
+  resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
+  integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
+
+wrap-ansi@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85"
+  integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=
+  dependencies:
+    string-width "^1.0.1"
+    strip-ansi "^3.0.1"
+
+wrap-ansi@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz#288a04d87eda5c286e060dfe8f135ce8d007f8ba"
+  integrity sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo=
+  dependencies:
+    string-width "^2.1.1"
+    strip-ansi "^4.0.0"
+
+wrappy@1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+  integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
+
+write@1.0.3:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3"
+  integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==
+  dependencies:
+    mkdirp "^0.5.1"
+
+write@^0.2.1:
+  version "0.2.1"
+  resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757"
+  integrity sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=
+  dependencies:
+    mkdirp "^0.5.1"
+
+xregexp@^4.3.0:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.3.0.tgz#7e92e73d9174a99a59743f67a4ce879a04b5ae50"
+  integrity sha512-7jXDIFXh5yJ/orPn4SXjuVrWWoi4Cr8jfV1eHv9CixKSbU+jY4mxfrBwAuDvupPNKpMUY+FeIqsVw/JLT9+B8g==
+  dependencies:
+    "@babel/runtime-corejs3" "^7.8.3"
+
+y18n@^3.2.1:
+  version "3.2.1"
+  resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41"
+  integrity sha1-bRX7qITAhnnA136I53WegR4H+kE=
+
+yallist@^2.1.2:
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
+  integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=
+
+yallist@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
+  integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
+
+yargs-parser@^8.0.0:
+  version "8.1.0"
+  resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-8.1.0.tgz#f1376a33b6629a5d063782944da732631e966950"
+  integrity sha512-yP+6QqN8BmrgW2ggLtTbdrOyBNSI7zBa4IykmiV5R1wl1JWNxQvWhMfMdmzIYtKU7oP3OOInY/tl2ov3BDjnJQ==
+  dependencies:
+    camelcase "^4.1.0"
+
+yargs@10.0.3:
+  version "10.0.3"
+  resolved "https://registry.yarnpkg.com/yargs/-/yargs-10.0.3.tgz#6542debd9080ad517ec5048fb454efe9e4d4aaae"
+  integrity sha512-DqBpQ8NAUX4GyPP/ijDGHsJya4tYqLQrjPr95HNsr1YwL3+daCfvBwg7+gIC6IdJhR2kATh3hb61vjzMWEtjdw==
+  dependencies:
+    cliui "^3.2.0"
+    decamelize "^1.1.1"
+    find-up "^2.1.0"
+    get-caller-file "^1.0.1"
+    os-locale "^2.0.0"
+    require-directory "^2.1.1"
+    require-main-filename "^1.0.1"
+    set-blocking "^2.0.0"
+    string-width "^2.0.0"
+    which-module "^2.0.0"
+    y18n "^3.2.1"
+    yargs-parser "^8.0.0"
+
+yup@^0.27.0:
+  version "0.27.0"
+  resolved "https://registry.yarnpkg.com/yup/-/yup-0.27.0.tgz#f8cb198c8e7dd2124beddc2457571329096b06e7"
+  integrity sha512-v1yFnE4+u9za42gG/b/081E7uNW9mUj3qtkmelLbW5YPROZzSH/KUUyJu9Wt8vxFJcT9otL/eZopS0YK1L5yPQ==
+  dependencies:
+    "@babel/runtime" "^7.0.0"
+    fn-name "~2.0.1"
+    lodash "^4.17.11"
+    property-expr "^1.5.0"
+    synchronous-promise "^2.0.6"
+    toposort "^2.0.2"
diff --git a/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/yarn.nix b/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/yarn.nix
new file mode 100644
index 000000000000..a6d7f79a7bee
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/yarn.nix
@@ -0,0 +1,3997 @@
+{ fetchurl, fetchgit, linkFarm, runCommand, gnutar }: rec {
+  offline_cache = linkFarm "offline" packages;
+  packages = [
+    {
+      name = "_babel_code_frame___code_frame_7.8.3.tgz";
+      path = fetchurl {
+        name = "_babel_code_frame___code_frame_7.8.3.tgz";
+        url  = "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz";
+        sha512 = "a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==";
+      };
+    }
+    {
+      name = "_babel_generator___generator_7.9.6.tgz";
+      path = fetchurl {
+        name = "_babel_generator___generator_7.9.6.tgz";
+        url  = "https://registry.yarnpkg.com/@babel/generator/-/generator-7.9.6.tgz";
+        sha512 = "+htwWKJbH2bL72HRluF8zumBxzuX0ZZUFl3JLNyoUjM/Ho8wnVpPXM6aUz8cfKDqQ/h7zHqKt4xzJteUosckqQ==";
+      };
+    }
+    {
+      name = "_babel_helper_function_name___helper_function_name_7.9.5.tgz";
+      path = fetchurl {
+        name = "_babel_helper_function_name___helper_function_name_7.9.5.tgz";
+        url  = "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz";
+        sha512 = "JVcQZeXM59Cd1qanDUxv9fgJpt3NeKUaqBqUEvfmQ+BCOKq2xUgaWZW2hr0dkbyJgezYuplEoh5knmrnS68efw==";
+      };
+    }
+    {
+      name = "_babel_helper_get_function_arity___helper_get_function_arity_7.8.3.tgz";
+      path = fetchurl {
+        name = "_babel_helper_get_function_arity___helper_get_function_arity_7.8.3.tgz";
+        url  = "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz";
+        sha512 = "FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==";
+      };
+    }
+    {
+      name = "_babel_helper_split_export_declaration___helper_split_export_declaration_7.8.3.tgz";
+      path = fetchurl {
+        name = "_babel_helper_split_export_declaration___helper_split_export_declaration_7.8.3.tgz";
+        url  = "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz";
+        sha512 = "3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==";
+      };
+    }
+    {
+      name = "_babel_helper_validator_identifier___helper_validator_identifier_7.9.5.tgz";
+      path = fetchurl {
+        name = "_babel_helper_validator_identifier___helper_validator_identifier_7.9.5.tgz";
+        url  = "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz";
+        sha512 = "/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g==";
+      };
+    }
+    {
+      name = "_babel_highlight___highlight_7.9.0.tgz";
+      path = fetchurl {
+        name = "_babel_highlight___highlight_7.9.0.tgz";
+        url  = "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.9.0.tgz";
+        sha512 = "lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==";
+      };
+    }
+    {
+      name = "_babel_parser___parser_7.9.6.tgz";
+      path = fetchurl {
+        name = "_babel_parser___parser_7.9.6.tgz";
+        url  = "https://registry.yarnpkg.com/@babel/parser/-/parser-7.9.6.tgz";
+        sha512 = "AoeIEJn8vt+d/6+PXDRPaksYhnlbMIiejioBZvvMQsOjW/JYK6k/0dKnvvP3EhK5GfMBWDPtrxRtegWdAcdq9Q==";
+      };
+    }
+    {
+      name = "_babel_runtime_corejs3___runtime_corejs3_7.9.6.tgz";
+      path = fetchurl {
+        name = "_babel_runtime_corejs3___runtime_corejs3_7.9.6.tgz";
+        url  = "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.9.6.tgz";
+        sha512 = "6toWAfaALQjt3KMZQc6fABqZwUDDuWzz+cAfPhqyEnzxvdWOAkjwPNxgF8xlmo7OWLsSjaKjsskpKHRLaMArOA==";
+      };
+    }
+    {
+      name = "_babel_runtime___runtime_7.9.6.tgz";
+      path = fetchurl {
+        name = "_babel_runtime___runtime_7.9.6.tgz";
+        url  = "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.9.6.tgz";
+        sha512 = "64AF1xY3OAkFHqOb9s4jpgk1Mm5vDZ4L3acHvAml+53nO1XbXLuDodsVpO4OIUsmemlUHMxNdYMNJmsvOwLrvQ==";
+      };
+    }
+    {
+      name = "_babel_template___template_7.8.6.tgz";
+      path = fetchurl {
+        name = "_babel_template___template_7.8.6.tgz";
+        url  = "https://registry.yarnpkg.com/@babel/template/-/template-7.8.6.tgz";
+        sha512 = "zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==";
+      };
+    }
+    {
+      name = "_babel_traverse___traverse_7.9.6.tgz";
+      path = fetchurl {
+        name = "_babel_traverse___traverse_7.9.6.tgz";
+        url  = "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.9.6.tgz";
+        sha512 = "b3rAHSjbxy6VEAvlxM8OV/0X4XrG72zoxme6q1MOoe2vd0bEc+TwayhuC1+Dfgqh1QEG+pj7atQqvUprHIccsg==";
+      };
+    }
+    {
+      name = "_babel_types___types_7.9.6.tgz";
+      path = fetchurl {
+        name = "_babel_types___types_7.9.6.tgz";
+        url  = "https://registry.yarnpkg.com/@babel/types/-/types-7.9.6.tgz";
+        sha512 = "qxXzvBO//jO9ZnoasKF1uJzHd2+M6Q2ZPIVfnFps8JJvXy0ZBbwbNOmE6SGIY5XOY6d1Bo5lb9d9RJ8nv3WSeA==";
+      };
+    }
+    {
+      name = "_samverschueren_stream_to_observable___stream_to_observable_0.3.0.tgz";
+      path = fetchurl {
+        name = "_samverschueren_stream_to_observable___stream_to_observable_0.3.0.tgz";
+        url  = "https://registry.yarnpkg.com/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz";
+        sha512 = "MI4Xx6LHs4Webyvi6EbspgyAb4D2Q2VtnCQ1blOJcoLS6mVa8lNN2rkIy1CVxfTUpoyIbCTkXES1rLXztFD1lg==";
+      };
+    }
+    {
+      name = "_yarnpkg_lockfile___lockfile_1.1.0.tgz";
+      path = fetchurl {
+        name = "_yarnpkg_lockfile___lockfile_1.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz";
+        sha512 = "GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==";
+      };
+    }
+    {
+      name = "abbrev___abbrev_1.1.1.tgz";
+      path = fetchurl {
+        name = "abbrev___abbrev_1.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz";
+        sha512 = "nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==";
+      };
+    }
+    {
+      name = "acorn_jsx___acorn_jsx_3.0.1.tgz";
+      path = fetchurl {
+        name = "acorn_jsx___acorn_jsx_3.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz";
+        sha1 = "r9+UiPsezvyDSPb7IvRk4ypYs2s=";
+      };
+    }
+    {
+      name = "acorn_jsx___acorn_jsx_5.2.0.tgz";
+      path = fetchurl {
+        name = "acorn_jsx___acorn_jsx_5.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz";
+        sha512 = "HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==";
+      };
+    }
+    {
+      name = "acorn___acorn_3.3.0.tgz";
+      path = fetchurl {
+        name = "acorn___acorn_3.3.0.tgz";
+        url  = "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz";
+        sha1 = "ReN/s56No/JbruP/U2niu18iAXo=";
+      };
+    }
+    {
+      name = "acorn___acorn_5.7.4.tgz";
+      path = fetchurl {
+        name = "acorn___acorn_5.7.4.tgz";
+        url  = "https://registry.yarnpkg.com/acorn/-/acorn-5.7.4.tgz";
+        sha512 = "1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==";
+      };
+    }
+    {
+      name = "acorn___acorn_6.4.1.tgz";
+      path = fetchurl {
+        name = "acorn___acorn_6.4.1.tgz";
+        url  = "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz";
+        sha512 = "ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==";
+      };
+    }
+    {
+      name = "ajv_keywords___ajv_keywords_2.1.1.tgz";
+      path = fetchurl {
+        name = "ajv_keywords___ajv_keywords_2.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz";
+        sha1 = "YXmX/F9gV2iUxDX5QNgZ4TW4B2I=";
+      };
+    }
+    {
+      name = "ajv___ajv_5.5.2.tgz";
+      path = fetchurl {
+        name = "ajv___ajv_5.5.2.tgz";
+        url  = "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz";
+        sha1 = "c7Xuyj+rZT49P5Qis0GtQiBdyWU=";
+      };
+    }
+    {
+      name = "ajv___ajv_6.12.2.tgz";
+      path = fetchurl {
+        name = "ajv___ajv_6.12.2.tgz";
+        url  = "https://registry.yarnpkg.com/ajv/-/ajv-6.12.2.tgz";
+        sha512 = "k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==";
+      };
+    }
+    {
+      name = "ansi_escapes___ansi_escapes_3.2.0.tgz";
+      path = fetchurl {
+        name = "ansi_escapes___ansi_escapes_3.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz";
+        sha512 = "cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==";
+      };
+    }
+    {
+      name = "ansi_regex___ansi_regex_2.1.1.tgz";
+      path = fetchurl {
+        name = "ansi_regex___ansi_regex_2.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz";
+        sha1 = "w7M6te42DYbg5ijwRorn7yfWVN8=";
+      };
+    }
+    {
+      name = "ansi_regex___ansi_regex_3.0.0.tgz";
+      path = fetchurl {
+        name = "ansi_regex___ansi_regex_3.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz";
+        sha1 = "7QMXwyIGT3lGbAKWa922Bas32Zg=";
+      };
+    }
+    {
+      name = "ansi_regex___ansi_regex_4.1.0.tgz";
+      path = fetchurl {
+        name = "ansi_regex___ansi_regex_4.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz";
+        sha512 = "1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==";
+      };
+    }
+    {
+      name = "ansi_styles___ansi_styles_2.2.1.tgz";
+      path = fetchurl {
+        name = "ansi_styles___ansi_styles_2.2.1.tgz";
+        url  = "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz";
+        sha1 = "tDLdM1i2NM914eRmQ2gkBTPB3b4=";
+      };
+    }
+    {
+      name = "ansi_styles___ansi_styles_3.2.1.tgz";
+      path = fetchurl {
+        name = "ansi_styles___ansi_styles_3.2.1.tgz";
+        url  = "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz";
+        sha512 = "VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==";
+      };
+    }
+    {
+      name = "any_observable___any_observable_0.3.0.tgz";
+      path = fetchurl {
+        name = "any_observable___any_observable_0.3.0.tgz";
+        url  = "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz";
+        sha512 = "/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==";
+      };
+    }
+    {
+      name = "argparse___argparse_1.0.10.tgz";
+      path = fetchurl {
+        name = "argparse___argparse_1.0.10.tgz";
+        url  = "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz";
+        sha512 = "o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==";
+      };
+    }
+    {
+      name = "aria_query___aria_query_3.0.0.tgz";
+      path = fetchurl {
+        name = "aria_query___aria_query_3.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/aria-query/-/aria-query-3.0.0.tgz";
+        sha1 = "ZbP8wcoRVajJrmTW7uKX8V1RM8w=";
+      };
+    }
+    {
+      name = "arr_diff___arr_diff_4.0.0.tgz";
+      path = fetchurl {
+        name = "arr_diff___arr_diff_4.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz";
+        sha1 = "1kYQdP6/7HHn4VI1dhoyml3HxSA=";
+      };
+    }
+    {
+      name = "arr_flatten___arr_flatten_1.1.0.tgz";
+      path = fetchurl {
+        name = "arr_flatten___arr_flatten_1.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz";
+        sha512 = "L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==";
+      };
+    }
+    {
+      name = "arr_union___arr_union_3.1.0.tgz";
+      path = fetchurl {
+        name = "arr_union___arr_union_3.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz";
+        sha1 = "45sJrqne+Gao8gbiiK9jkZuuOcQ=";
+      };
+    }
+    {
+      name = "array_includes___array_includes_3.1.1.tgz";
+      path = fetchurl {
+        name = "array_includes___array_includes_3.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.1.tgz";
+        sha512 = "c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==";
+      };
+    }
+    {
+      name = "array_union___array_union_1.0.2.tgz";
+      path = fetchurl {
+        name = "array_union___array_union_1.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz";
+        sha1 = "mjRBDk9OPaI96jdb5b5w8kd47Dk=";
+      };
+    }
+    {
+      name = "array_uniq___array_uniq_1.0.3.tgz";
+      path = fetchurl {
+        name = "array_uniq___array_uniq_1.0.3.tgz";
+        url  = "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz";
+        sha1 = "r2rId6Jcx/dOBYiUdThY39sk/bY=";
+      };
+    }
+    {
+      name = "array_unique___array_unique_0.3.2.tgz";
+      path = fetchurl {
+        name = "array_unique___array_unique_0.3.2.tgz";
+        url  = "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz";
+        sha1 = "qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=";
+      };
+    }
+    {
+      name = "array.prototype.flat___array.prototype.flat_1.2.3.tgz";
+      path = fetchurl {
+        name = "array.prototype.flat___array.prototype.flat_1.2.3.tgz";
+        url  = "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz";
+        sha512 = "gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ==";
+      };
+    }
+    {
+      name = "arrify___arrify_1.0.1.tgz";
+      path = fetchurl {
+        name = "arrify___arrify_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz";
+        sha1 = "iYUI2iIm84DfkEcoRWhJwVAaSw0=";
+      };
+    }
+    {
+      name = "assign_symbols___assign_symbols_1.0.0.tgz";
+      path = fetchurl {
+        name = "assign_symbols___assign_symbols_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz";
+        sha1 = "WWZ/QfrdTyDMvCu5a41Pf3jsA2c=";
+      };
+    }
+    {
+      name = "ast_types_flow___ast_types_flow_0.0.7.tgz";
+      path = fetchurl {
+        name = "ast_types_flow___ast_types_flow_0.0.7.tgz";
+        url  = "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz";
+        sha1 = "9wtzXGvKGlycItmCw+Oef+ujva0=";
+      };
+    }
+    {
+      name = "astral_regex___astral_regex_1.0.0.tgz";
+      path = fetchurl {
+        name = "astral_regex___astral_regex_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz";
+        sha512 = "+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==";
+      };
+    }
+    {
+      name = "atob___atob_2.1.2.tgz";
+      path = fetchurl {
+        name = "atob___atob_2.1.2.tgz";
+        url  = "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz";
+        sha512 = "Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==";
+      };
+    }
+    {
+      name = "axobject_query___axobject_query_2.1.2.tgz";
+      path = fetchurl {
+        name = "axobject_query___axobject_query_2.1.2.tgz";
+        url  = "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.1.2.tgz";
+        sha512 = "ICt34ZmrVt8UQnvPl6TVyDTkmhXmAyAT4Jh5ugfGUX4MOrZ+U/ZY6/sdylRw3qGNr9Ub5AJsaHeDMzNLehRdOQ==";
+      };
+    }
+    {
+      name = "babel_code_frame___babel_code_frame_6.26.0.tgz";
+      path = fetchurl {
+        name = "babel_code_frame___babel_code_frame_6.26.0.tgz";
+        url  = "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz";
+        sha1 = "Y/1D99weO7fONZR9uP42mj9Yx0s=";
+      };
+    }
+    {
+      name = "babel_eslint___babel_eslint_10.1.0.tgz";
+      path = fetchurl {
+        name = "babel_eslint___babel_eslint_10.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.1.0.tgz";
+        sha512 = "ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==";
+      };
+    }
+    {
+      name = "babel_runtime___babel_runtime_6.26.0.tgz";
+      path = fetchurl {
+        name = "babel_runtime___babel_runtime_6.26.0.tgz";
+        url  = "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz";
+        sha1 = "llxwWGaOgrVde/4E/yM3vItWR/4=";
+      };
+    }
+    {
+      name = "balanced_match___balanced_match_1.0.0.tgz";
+      path = fetchurl {
+        name = "balanced_match___balanced_match_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz";
+        sha1 = "ibTRmasr7kneFk6gK4nORi1xt2c=";
+      };
+    }
+    {
+      name = "base___base_0.11.2.tgz";
+      path = fetchurl {
+        name = "base___base_0.11.2.tgz";
+        url  = "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz";
+        sha512 = "5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==";
+      };
+    }
+    {
+      name = "boolify___boolify_1.0.1.tgz";
+      path = fetchurl {
+        name = "boolify___boolify_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/boolify/-/boolify-1.0.1.tgz";
+        sha1 = "tcCeF8rNET0Rt7s+04TMASmU2Gs=";
+      };
+    }
+    {
+      name = "brace_expansion___brace_expansion_1.1.11.tgz";
+      path = fetchurl {
+        name = "brace_expansion___brace_expansion_1.1.11.tgz";
+        url  = "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz";
+        sha512 = "iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==";
+      };
+    }
+    {
+      name = "braces___braces_2.3.2.tgz";
+      path = fetchurl {
+        name = "braces___braces_2.3.2.tgz";
+        url  = "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz";
+        sha512 = "aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==";
+      };
+    }
+    {
+      name = "buffer_from___buffer_from_1.1.1.tgz";
+      path = fetchurl {
+        name = "buffer_from___buffer_from_1.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz";
+        sha512 = "MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==";
+      };
+    }
+    {
+      name = "cache_base___cache_base_1.0.1.tgz";
+      path = fetchurl {
+        name = "cache_base___cache_base_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz";
+        sha512 = "AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==";
+      };
+    }
+    {
+      name = "caller_callsite___caller_callsite_2.0.0.tgz";
+      path = fetchurl {
+        name = "caller_callsite___caller_callsite_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz";
+        sha1 = "hH4PzgoiN1CpoCfFSzNzGtMVQTQ=";
+      };
+    }
+    {
+      name = "caller_path___caller_path_0.1.0.tgz";
+      path = fetchurl {
+        name = "caller_path___caller_path_0.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz";
+        sha1 = "lAhe9jWB7NPaqSREqP6U6CV3dR8=";
+      };
+    }
+    {
+      name = "caller_path___caller_path_2.0.0.tgz";
+      path = fetchurl {
+        name = "caller_path___caller_path_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz";
+        sha1 = "Ro+DBE42mrIBD6xfBs7uFbsssfQ=";
+      };
+    }
+    {
+      name = "callsites___callsites_0.2.0.tgz";
+      path = fetchurl {
+        name = "callsites___callsites_0.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz";
+        sha1 = "r6uWJikQp/M8GaV3WCXGnzTjUMo=";
+      };
+    }
+    {
+      name = "callsites___callsites_2.0.0.tgz";
+      path = fetchurl {
+        name = "callsites___callsites_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz";
+        sha1 = "BuuE8A7qQT2oav/vrL/7Ngk7PFA=";
+      };
+    }
+    {
+      name = "callsites___callsites_3.1.0.tgz";
+      path = fetchurl {
+        name = "callsites___callsites_3.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz";
+        sha512 = "P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==";
+      };
+    }
+    {
+      name = "camelcase_keys___camelcase_keys_4.2.0.tgz";
+      path = fetchurl {
+        name = "camelcase_keys___camelcase_keys_4.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-4.2.0.tgz";
+        sha1 = "oqpfsa9oh1glnDLBQUJteJI7m3c=";
+      };
+    }
+    {
+      name = "camelcase___camelcase_4.1.0.tgz";
+      path = fetchurl {
+        name = "camelcase___camelcase_4.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz";
+        sha1 = "1UVjW+HjPFQmScaRc+Xeas+uNN0=";
+      };
+    }
+    {
+      name = "chalk___chalk_2.3.0.tgz";
+      path = fetchurl {
+        name = "chalk___chalk_2.3.0.tgz";
+        url  = "https://registry.yarnpkg.com/chalk/-/chalk-2.3.0.tgz";
+        sha512 = "Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==";
+      };
+    }
+    {
+      name = "chalk___chalk_1.1.3.tgz";
+      path = fetchurl {
+        name = "chalk___chalk_1.1.3.tgz";
+        url  = "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz";
+        sha1 = "qBFcVeSnAv5NFQq9OHKCKn4J/Jg=";
+      };
+    }
+    {
+      name = "chalk___chalk_2.4.2.tgz";
+      path = fetchurl {
+        name = "chalk___chalk_2.4.2.tgz";
+        url  = "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz";
+        sha512 = "Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==";
+      };
+    }
+    {
+      name = "chardet___chardet_0.4.2.tgz";
+      path = fetchurl {
+        name = "chardet___chardet_0.4.2.tgz";
+        url  = "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz";
+        sha1 = "tUc7M9yXxCTl2Y3IfVXU2KKci/I=";
+      };
+    }
+    {
+      name = "chardet___chardet_0.7.0.tgz";
+      path = fetchurl {
+        name = "chardet___chardet_0.7.0.tgz";
+        url  = "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz";
+        sha512 = "mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==";
+      };
+    }
+    {
+      name = "ci_info___ci_info_2.0.0.tgz";
+      path = fetchurl {
+        name = "ci_info___ci_info_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz";
+        sha512 = "5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==";
+      };
+    }
+    {
+      name = "circular_json___circular_json_0.3.3.tgz";
+      path = fetchurl {
+        name = "circular_json___circular_json_0.3.3.tgz";
+        url  = "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz";
+        sha512 = "UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==";
+      };
+    }
+    {
+      name = "class_utils___class_utils_0.3.6.tgz";
+      path = fetchurl {
+        name = "class_utils___class_utils_0.3.6.tgz";
+        url  = "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz";
+        sha512 = "qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==";
+      };
+    }
+    {
+      name = "cli_cursor___cli_cursor_2.1.0.tgz";
+      path = fetchurl {
+        name = "cli_cursor___cli_cursor_2.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz";
+        sha1 = "s12sN2R5+sw+lHR9QdDQ9SOP/LU=";
+      };
+    }
+    {
+      name = "cli_truncate___cli_truncate_0.2.1.tgz";
+      path = fetchurl {
+        name = "cli_truncate___cli_truncate_0.2.1.tgz";
+        url  = "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz";
+        sha1 = "nxXPuwcFAFNpIWxiasfQWrkN1XQ=";
+      };
+    }
+    {
+      name = "cli_width___cli_width_2.2.1.tgz";
+      path = fetchurl {
+        name = "cli_width___cli_width_2.2.1.tgz";
+        url  = "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz";
+        sha512 = "GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==";
+      };
+    }
+    {
+      name = "cliui___cliui_3.2.0.tgz";
+      path = fetchurl {
+        name = "cliui___cliui_3.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz";
+        sha1 = "EgYBU3qRbSmUD5NNo7SNWFo5IT0=";
+      };
+    }
+    {
+      name = "co___co_4.6.0.tgz";
+      path = fetchurl {
+        name = "co___co_4.6.0.tgz";
+        url  = "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz";
+        sha1 = "bqa989hTrlTMuOR7+gvz+QMfsYQ=";
+      };
+    }
+    {
+      name = "code_point_at___code_point_at_1.1.0.tgz";
+      path = fetchurl {
+        name = "code_point_at___code_point_at_1.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz";
+        sha1 = "DQcLTQQ6W+ozovGkDi7bPZpMz3c=";
+      };
+    }
+    {
+      name = "collection_visit___collection_visit_1.0.0.tgz";
+      path = fetchurl {
+        name = "collection_visit___collection_visit_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz";
+        sha1 = "S8A3PBZLwykbTTaMgpzxqApZ3KA=";
+      };
+    }
+    {
+      name = "color_convert___color_convert_1.9.3.tgz";
+      path = fetchurl {
+        name = "color_convert___color_convert_1.9.3.tgz";
+        url  = "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz";
+        sha512 = "QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==";
+      };
+    }
+    {
+      name = "color_name___color_name_1.1.3.tgz";
+      path = fetchurl {
+        name = "color_name___color_name_1.1.3.tgz";
+        url  = "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz";
+        sha1 = "p9BVi9icQveV3UIyj3QIMcpTvCU=";
+      };
+    }
+    {
+      name = "commander___commander_2.20.3.tgz";
+      path = fetchurl {
+        name = "commander___commander_2.20.3.tgz";
+        url  = "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz";
+        sha512 = "GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==";
+      };
+    }
+    {
+      name = "common_tags___common_tags_1.8.0.tgz";
+      path = fetchurl {
+        name = "common_tags___common_tags_1.8.0.tgz";
+        url  = "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz";
+        sha512 = "6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==";
+      };
+    }
+    {
+      name = "component_emitter___component_emitter_1.3.0.tgz";
+      path = fetchurl {
+        name = "component_emitter___component_emitter_1.3.0.tgz";
+        url  = "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz";
+        sha512 = "Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==";
+      };
+    }
+    {
+      name = "concat_map___concat_map_0.0.1.tgz";
+      path = fetchurl {
+        name = "concat_map___concat_map_0.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz";
+        sha1 = "2Klr13/Wjfd5OnMDajug1UBdR3s=";
+      };
+    }
+    {
+      name = "concat_stream___concat_stream_1.6.2.tgz";
+      path = fetchurl {
+        name = "concat_stream___concat_stream_1.6.2.tgz";
+        url  = "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz";
+        sha512 = "27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==";
+      };
+    }
+    {
+      name = "confusing_browser_globals___confusing_browser_globals_1.0.9.tgz";
+      path = fetchurl {
+        name = "confusing_browser_globals___confusing_browser_globals_1.0.9.tgz";
+        url  = "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.9.tgz";
+        sha512 = "KbS1Y0jMtyPgIxjO7ZzMAuUpAKMt1SzCL9fsrKsX6b0zJPTaT0SiSPmewwVZg9UAO83HVIlEhZF84LIjZ0lmAw==";
+      };
+    }
+    {
+      name = "contains_path___contains_path_0.1.0.tgz";
+      path = fetchurl {
+        name = "contains_path___contains_path_0.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz";
+        sha1 = "/ozxhP9mcLa67wGp1IYaXL7EEgo=";
+      };
+    }
+    {
+      name = "copy_descriptor___copy_descriptor_0.1.1.tgz";
+      path = fetchurl {
+        name = "copy_descriptor___copy_descriptor_0.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz";
+        sha1 = "Z29us8OZl8LuGsOpJP1hJHSPV40=";
+      };
+    }
+    {
+      name = "core_js_pure___core_js_pure_3.6.5.tgz";
+      path = fetchurl {
+        name = "core_js_pure___core_js_pure_3.6.5.tgz";
+        url  = "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.6.5.tgz";
+        sha512 = "lacdXOimsiD0QyNf9BC/mxivNJ/ybBGJXQFKzRekp1WTHoVUWsUHEn+2T8GJAzzIhyOuXA+gOxCVN3l+5PLPUA==";
+      };
+    }
+    {
+      name = "core_js___core_js_2.6.11.tgz";
+      path = fetchurl {
+        name = "core_js___core_js_2.6.11.tgz";
+        url  = "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz";
+        sha512 = "5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==";
+      };
+    }
+    {
+      name = "core_util_is___core_util_is_1.0.2.tgz";
+      path = fetchurl {
+        name = "core_util_is___core_util_is_1.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz";
+        sha1 = "tf1UIgqivFq1eqtxQMlAdUUDwac=";
+      };
+    }
+    {
+      name = "cosmiconfig___cosmiconfig_5.2.1.tgz";
+      path = fetchurl {
+        name = "cosmiconfig___cosmiconfig_5.2.1.tgz";
+        url  = "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz";
+        sha512 = "H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==";
+      };
+    }
+    {
+      name = "cross_spawn___cross_spawn_5.1.0.tgz";
+      path = fetchurl {
+        name = "cross_spawn___cross_spawn_5.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz";
+        sha1 = "6L0O/uWPz/b4+UUQoKVUu/ojVEk=";
+      };
+    }
+    {
+      name = "cross_spawn___cross_spawn_6.0.5.tgz";
+      path = fetchurl {
+        name = "cross_spawn___cross_spawn_6.0.5.tgz";
+        url  = "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz";
+        sha512 = "eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==";
+      };
+    }
+    {
+      name = "damerau_levenshtein___damerau_levenshtein_1.0.6.tgz";
+      path = fetchurl {
+        name = "damerau_levenshtein___damerau_levenshtein_1.0.6.tgz";
+        url  = "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz";
+        sha512 = "JVrozIeElnj3QzfUIt8tB8YMluBJom4Vw9qTPpjGYQ9fYlB3D/rb6OordUxf3xeFB35LKWs0xqcO5U6ySvBtug==";
+      };
+    }
+    {
+      name = "date_fns___date_fns_1.30.1.tgz";
+      path = fetchurl {
+        name = "date_fns___date_fns_1.30.1.tgz";
+        url  = "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz";
+        sha512 = "hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==";
+      };
+    }
+    {
+      name = "debug___debug_2.6.9.tgz";
+      path = fetchurl {
+        name = "debug___debug_2.6.9.tgz";
+        url  = "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz";
+        sha512 = "bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==";
+      };
+    }
+    {
+      name = "debug___debug_3.2.6.tgz";
+      path = fetchurl {
+        name = "debug___debug_3.2.6.tgz";
+        url  = "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz";
+        sha512 = "mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==";
+      };
+    }
+    {
+      name = "debug___debug_4.1.1.tgz";
+      path = fetchurl {
+        name = "debug___debug_4.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz";
+        sha512 = "pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==";
+      };
+    }
+    {
+      name = "decamelize___decamelize_1.2.0.tgz";
+      path = fetchurl {
+        name = "decamelize___decamelize_1.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz";
+        sha1 = "9lNNFRSCabIDUue+4m9QH5oZEpA=";
+      };
+    }
+    {
+      name = "decode_uri_component___decode_uri_component_0.2.0.tgz";
+      path = fetchurl {
+        name = "decode_uri_component___decode_uri_component_0.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz";
+        sha1 = "6zkTMzRYd1y4TNGh+uBiEGu4dUU=";
+      };
+    }
+    {
+      name = "dedent___dedent_0.7.0.tgz";
+      path = fetchurl {
+        name = "dedent___dedent_0.7.0.tgz";
+        url  = "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz";
+        sha1 = "JJXduvbrh0q7Dhvp3yLS5aVEMmw=";
+      };
+    }
+    {
+      name = "deep_equal___deep_equal_1.1.1.tgz";
+      path = fetchurl {
+        name = "deep_equal___deep_equal_1.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz";
+        sha512 = "yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==";
+      };
+    }
+    {
+      name = "deep_is___deep_is_0.1.3.tgz";
+      path = fetchurl {
+        name = "deep_is___deep_is_0.1.3.tgz";
+        url  = "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz";
+        sha1 = "s2nW+128E+7PUk+RsHD+7cNXzzQ=";
+      };
+    }
+    {
+      name = "define_properties___define_properties_1.1.3.tgz";
+      path = fetchurl {
+        name = "define_properties___define_properties_1.1.3.tgz";
+        url  = "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz";
+        sha512 = "3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==";
+      };
+    }
+    {
+      name = "define_property___define_property_0.2.5.tgz";
+      path = fetchurl {
+        name = "define_property___define_property_0.2.5.tgz";
+        url  = "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz";
+        sha1 = "w1se+RjsPJkPmlvFe+BKrOxcgRY=";
+      };
+    }
+    {
+      name = "define_property___define_property_1.0.0.tgz";
+      path = fetchurl {
+        name = "define_property___define_property_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz";
+        sha1 = "dp66rz9KY6rTr56NMEybvnm/sOY=";
+      };
+    }
+    {
+      name = "define_property___define_property_2.0.2.tgz";
+      path = fetchurl {
+        name = "define_property___define_property_2.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz";
+        sha512 = "jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==";
+      };
+    }
+    {
+      name = "del___del_3.0.0.tgz";
+      path = fetchurl {
+        name = "del___del_3.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz";
+        sha1 = "U+z2mf/LyzljdpGrE7rxYIGXZuU=";
+      };
+    }
+    {
+      name = "dlv___dlv_1.1.3.tgz";
+      path = fetchurl {
+        name = "dlv___dlv_1.1.3.tgz";
+        url  = "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz";
+        sha512 = "+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==";
+      };
+    }
+    {
+      name = "docopt___docopt_0.6.2.tgz";
+      path = fetchurl {
+        name = "docopt___docopt_0.6.2.tgz";
+        url  = "https://registry.yarnpkg.com/docopt/-/docopt-0.6.2.tgz";
+        sha1 = "so6eIiDaXsSffqW7JKR3h0Be6xE=";
+      };
+    }
+    {
+      name = "doctrine___doctrine_1.5.0.tgz";
+      path = fetchurl {
+        name = "doctrine___doctrine_1.5.0.tgz";
+        url  = "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz";
+        sha1 = "N53Ocw9hZvds76TmcHoVmwLFpvo=";
+      };
+    }
+    {
+      name = "doctrine___doctrine_2.1.0.tgz";
+      path = fetchurl {
+        name = "doctrine___doctrine_2.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz";
+        sha512 = "35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==";
+      };
+    }
+    {
+      name = "doctrine___doctrine_3.0.0.tgz";
+      path = fetchurl {
+        name = "doctrine___doctrine_3.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz";
+        sha512 = "yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==";
+      };
+    }
+    {
+      name = "elegant_spinner___elegant_spinner_1.0.1.tgz";
+      path = fetchurl {
+        name = "elegant_spinner___elegant_spinner_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz";
+        sha1 = "2wQ1IcldfjA/2PNFvtwzSc+wcp4=";
+      };
+    }
+    {
+      name = "emoji_regex___emoji_regex_7.0.3.tgz";
+      path = fetchurl {
+        name = "emoji_regex___emoji_regex_7.0.3.tgz";
+        url  = "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz";
+        sha512 = "CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==";
+      };
+    }
+    {
+      name = "end_of_stream___end_of_stream_1.4.4.tgz";
+      path = fetchurl {
+        name = "end_of_stream___end_of_stream_1.4.4.tgz";
+        url  = "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz";
+        sha512 = "+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==";
+      };
+    }
+    {
+      name = "error_ex___error_ex_1.3.2.tgz";
+      path = fetchurl {
+        name = "error_ex___error_ex_1.3.2.tgz";
+        url  = "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz";
+        sha512 = "7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==";
+      };
+    }
+    {
+      name = "es_abstract___es_abstract_1.17.5.tgz";
+      path = fetchurl {
+        name = "es_abstract___es_abstract_1.17.5.tgz";
+        url  = "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.5.tgz";
+        sha512 = "BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==";
+      };
+    }
+    {
+      name = "es_to_primitive___es_to_primitive_1.2.1.tgz";
+      path = fetchurl {
+        name = "es_to_primitive___es_to_primitive_1.2.1.tgz";
+        url  = "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz";
+        sha512 = "QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==";
+      };
+    }
+    {
+      name = "escape_string_regexp___escape_string_regexp_1.0.5.tgz";
+      path = fetchurl {
+        name = "escape_string_regexp___escape_string_regexp_1.0.5.tgz";
+        url  = "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz";
+        sha1 = "G2HAViGQqN/2rjuyzwIAyhMLhtQ=";
+      };
+    }
+    {
+      name = "eslint_config_airbnb_base___eslint_config_airbnb_base_13.2.0.tgz";
+      path = fetchurl {
+        name = "eslint_config_airbnb_base___eslint_config_airbnb_base_13.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-13.2.0.tgz";
+        sha512 = "1mg/7eoB4AUeB0X1c/ho4vb2gYkNH8Trr/EgCT/aGmKhhG+F6vF5s8+iRBlWAzFIAphxIdp3YfEKgEl0f9Xg+w==";
+      };
+    }
+    {
+      name = "eslint_config_airbnb___eslint_config_airbnb_17.1.1.tgz";
+      path = fetchurl {
+        name = "eslint_config_airbnb___eslint_config_airbnb_17.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-17.1.1.tgz";
+        sha512 = "xCu//8a/aWqagKljt+1/qAM62BYZeNq04HmdevG5yUGWpja0I/xhqd6GdLRch5oetEGFiJAnvtGuTEAese53Qg==";
+      };
+    }
+    {
+      name = "eslint_config_prettier___eslint_config_prettier_3.6.0.tgz";
+      path = fetchurl {
+        name = "eslint_config_prettier___eslint_config_prettier_3.6.0.tgz";
+        url  = "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-3.6.0.tgz";
+        sha512 = "ixJ4U3uTLXwJts4rmSVW/lMXjlGwCijhBJHk8iVqKKSifeI0qgFEfWl8L63isfc8Od7EiBALF6BX3jKLluf/jQ==";
+      };
+    }
+    {
+      name = "eslint_config_standard___eslint_config_standard_12.0.0.tgz";
+      path = fetchurl {
+        name = "eslint_config_standard___eslint_config_standard_12.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-12.0.0.tgz";
+        sha512 = "COUz8FnXhqFitYj4DTqHzidjIL/t4mumGZto5c7DrBpvWoie+Sn3P4sLEzUGeYhRElWuFEf8K1S1EfvD1vixCQ==";
+      };
+    }
+    {
+      name = "eslint_import_resolver_node___eslint_import_resolver_node_0.3.3.tgz";
+      path = fetchurl {
+        name = "eslint_import_resolver_node___eslint_import_resolver_node_0.3.3.tgz";
+        url  = "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.3.tgz";
+        sha512 = "b8crLDo0M5RSe5YG8Pu2DYBj71tSB6OvXkfzwbJU2w7y8P4/yo0MyF8jU26IEuEuHF2K5/gcAJE3LhQGqBBbVg==";
+      };
+    }
+    {
+      name = "eslint_module_utils___eslint_module_utils_2.6.0.tgz";
+      path = fetchurl {
+        name = "eslint_module_utils___eslint_module_utils_2.6.0.tgz";
+        url  = "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz";
+        sha512 = "6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==";
+      };
+    }
+    {
+      name = "eslint_plugin_es___eslint_plugin_es_1.4.1.tgz";
+      path = fetchurl {
+        name = "eslint_plugin_es___eslint_plugin_es_1.4.1.tgz";
+        url  = "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-1.4.1.tgz";
+        sha512 = "5fa/gR2yR3NxQf+UXkeLeP8FBBl6tSgdrAz1+cF84v1FMM4twGwQoqTnn+QxFLcPOrF4pdKEJKDB/q9GoyJrCA==";
+      };
+    }
+    {
+      name = "eslint_plugin_import___eslint_plugin_import_2.20.2.tgz";
+      path = fetchurl {
+        name = "eslint_plugin_import___eslint_plugin_import_2.20.2.tgz";
+        url  = "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.20.2.tgz";
+        sha512 = "FObidqpXrR8OnCh4iNsxy+WACztJLXAHBO5hK79T1Hc77PgQZkyDGA5Ag9xAvRpglvLNxhH/zSmZ70/pZ31dHg==";
+      };
+    }
+    {
+      name = "eslint_plugin_jsx_a11y___eslint_plugin_jsx_a11y_6.2.3.tgz";
+      path = fetchurl {
+        name = "eslint_plugin_jsx_a11y___eslint_plugin_jsx_a11y_6.2.3.tgz";
+        url  = "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.3.tgz";
+        sha512 = "CawzfGt9w83tyuVekn0GDPU9ytYtxyxyFZ3aSWROmnRRFQFT2BiPJd7jvRdzNDi6oLWaS2asMeYSNMjWTV4eNg==";
+      };
+    }
+    {
+      name = "eslint_plugin_node___eslint_plugin_node_8.0.1.tgz";
+      path = fetchurl {
+        name = "eslint_plugin_node___eslint_plugin_node_8.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-8.0.1.tgz";
+        sha512 = "ZjOjbjEi6jd82rIpFSgagv4CHWzG9xsQAVp1ZPlhRnnYxcTgENUVBvhYmkQ7GvT1QFijUSo69RaiOJKhMu6i8w==";
+      };
+    }
+    {
+      name = "eslint_plugin_promise___eslint_plugin_promise_4.2.1.tgz";
+      path = fetchurl {
+        name = "eslint_plugin_promise___eslint_plugin_promise_4.2.1.tgz";
+        url  = "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.2.1.tgz";
+        sha512 = "VoM09vT7bfA7D+upt+FjeBO5eHIJQBUWki1aPvB+vbNiHS3+oGIJGIeyBtKQTME6UPXXy3vV07OL1tHd3ANuDw==";
+      };
+    }
+    {
+      name = "eslint_plugin_react___eslint_plugin_react_7.20.0.tgz";
+      path = fetchurl {
+        name = "eslint_plugin_react___eslint_plugin_react_7.20.0.tgz";
+        url  = "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.20.0.tgz";
+        sha512 = "rqe1abd0vxMjmbPngo4NaYxTcR3Y4Hrmc/jg4T+sYz63yqlmJRknpEQfmWY+eDWPuMmix6iUIK+mv0zExjeLgA==";
+      };
+    }
+    {
+      name = "eslint_plugin_standard___eslint_plugin_standard_4.0.1.tgz";
+      path = fetchurl {
+        name = "eslint_plugin_standard___eslint_plugin_standard_4.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/eslint-plugin-standard/-/eslint-plugin-standard-4.0.1.tgz";
+        sha512 = "v/KBnfyaOMPmZc/dmc6ozOdWqekGp7bBGq4jLAecEfPGmfKiWS4sA8sC0LqiV9w5qmXAtXVn4M3p1jSyhY85SQ==";
+      };
+    }
+    {
+      name = "eslint_scope___eslint_scope_3.7.3.tgz";
+      path = fetchurl {
+        name = "eslint_scope___eslint_scope_3.7.3.tgz";
+        url  = "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.3.tgz";
+        sha512 = "W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA==";
+      };
+    }
+    {
+      name = "eslint_scope___eslint_scope_4.0.3.tgz";
+      path = fetchurl {
+        name = "eslint_scope___eslint_scope_4.0.3.tgz";
+        url  = "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz";
+        sha512 = "p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==";
+      };
+    }
+    {
+      name = "eslint_utils___eslint_utils_1.4.3.tgz";
+      path = fetchurl {
+        name = "eslint_utils___eslint_utils_1.4.3.tgz";
+        url  = "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz";
+        sha512 = "fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==";
+      };
+    }
+    {
+      name = "eslint_visitor_keys___eslint_visitor_keys_1.1.0.tgz";
+      path = fetchurl {
+        name = "eslint_visitor_keys___eslint_visitor_keys_1.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz";
+        sha512 = "8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==";
+      };
+    }
+    {
+      name = "eslint___eslint_4.19.1.tgz";
+      path = fetchurl {
+        name = "eslint___eslint_4.19.1.tgz";
+        url  = "https://registry.yarnpkg.com/eslint/-/eslint-4.19.1.tgz";
+        sha512 = "bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==";
+      };
+    }
+    {
+      name = "eslint___eslint_5.16.0.tgz";
+      path = fetchurl {
+        name = "eslint___eslint_5.16.0.tgz";
+        url  = "https://registry.yarnpkg.com/eslint/-/eslint-5.16.0.tgz";
+        sha512 = "S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==";
+      };
+    }
+    {
+      name = "espree___espree_3.5.4.tgz";
+      path = fetchurl {
+        name = "espree___espree_3.5.4.tgz";
+        url  = "https://registry.yarnpkg.com/espree/-/espree-3.5.4.tgz";
+        sha512 = "yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==";
+      };
+    }
+    {
+      name = "espree___espree_5.0.1.tgz";
+      path = fetchurl {
+        name = "espree___espree_5.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/espree/-/espree-5.0.1.tgz";
+        sha512 = "qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==";
+      };
+    }
+    {
+      name = "esprima___esprima_4.0.1.tgz";
+      path = fetchurl {
+        name = "esprima___esprima_4.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz";
+        sha512 = "eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==";
+      };
+    }
+    {
+      name = "esquery___esquery_1.3.1.tgz";
+      path = fetchurl {
+        name = "esquery___esquery_1.3.1.tgz";
+        url  = "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz";
+        sha512 = "olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==";
+      };
+    }
+    {
+      name = "esrecurse___esrecurse_4.2.1.tgz";
+      path = fetchurl {
+        name = "esrecurse___esrecurse_4.2.1.tgz";
+        url  = "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz";
+        sha512 = "64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==";
+      };
+    }
+    {
+      name = "estraverse___estraverse_4.3.0.tgz";
+      path = fetchurl {
+        name = "estraverse___estraverse_4.3.0.tgz";
+        url  = "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz";
+        sha512 = "39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==";
+      };
+    }
+    {
+      name = "estraverse___estraverse_5.1.0.tgz";
+      path = fetchurl {
+        name = "estraverse___estraverse_5.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/estraverse/-/estraverse-5.1.0.tgz";
+        sha512 = "FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw==";
+      };
+    }
+    {
+      name = "esutils___esutils_2.0.3.tgz";
+      path = fetchurl {
+        name = "esutils___esutils_2.0.3.tgz";
+        url  = "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz";
+        sha512 = "kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==";
+      };
+    }
+    {
+      name = "execa___execa_0.7.0.tgz";
+      path = fetchurl {
+        name = "execa___execa_0.7.0.tgz";
+        url  = "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz";
+        sha1 = "lEvs00zEHuMqY6n68nrVpl/Fl3c=";
+      };
+    }
+    {
+      name = "execa___execa_1.0.0.tgz";
+      path = fetchurl {
+        name = "execa___execa_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz";
+        sha512 = "adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==";
+      };
+    }
+    {
+      name = "expand_brackets___expand_brackets_2.1.4.tgz";
+      path = fetchurl {
+        name = "expand_brackets___expand_brackets_2.1.4.tgz";
+        url  = "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz";
+        sha1 = "t3c14xXOMPa27/D4OwQVGiJEliI=";
+      };
+    }
+    {
+      name = "extend_shallow___extend_shallow_2.0.1.tgz";
+      path = fetchurl {
+        name = "extend_shallow___extend_shallow_2.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz";
+        sha1 = "Ua99YUrZqfYQ6huvu5idaxxWiQ8=";
+      };
+    }
+    {
+      name = "extend_shallow___extend_shallow_3.0.2.tgz";
+      path = fetchurl {
+        name = "extend_shallow___extend_shallow_3.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz";
+        sha1 = "Jqcarwc7OfshJxcnRhMcJwQCjbg=";
+      };
+    }
+    {
+      name = "external_editor___external_editor_2.2.0.tgz";
+      path = fetchurl {
+        name = "external_editor___external_editor_2.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz";
+        sha512 = "bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==";
+      };
+    }
+    {
+      name = "external_editor___external_editor_3.1.0.tgz";
+      path = fetchurl {
+        name = "external_editor___external_editor_3.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz";
+        sha512 = "hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==";
+      };
+    }
+    {
+      name = "extglob___extglob_2.0.4.tgz";
+      path = fetchurl {
+        name = "extglob___extglob_2.0.4.tgz";
+        url  = "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz";
+        sha512 = "Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==";
+      };
+    }
+    {
+      name = "fast_deep_equal___fast_deep_equal_1.1.0.tgz";
+      path = fetchurl {
+        name = "fast_deep_equal___fast_deep_equal_1.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz";
+        sha1 = "wFNHeBfIa1HaqFPIHgWbcz0CNhQ=";
+      };
+    }
+    {
+      name = "fast_deep_equal___fast_deep_equal_3.1.1.tgz";
+      path = fetchurl {
+        name = "fast_deep_equal___fast_deep_equal_3.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz";
+        sha512 = "8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==";
+      };
+    }
+    {
+      name = "fast_json_stable_stringify___fast_json_stable_stringify_2.1.0.tgz";
+      path = fetchurl {
+        name = "fast_json_stable_stringify___fast_json_stable_stringify_2.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz";
+        sha512 = "lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==";
+      };
+    }
+    {
+      name = "fast_levenshtein___fast_levenshtein_2.0.6.tgz";
+      path = fetchurl {
+        name = "fast_levenshtein___fast_levenshtein_2.0.6.tgz";
+        url  = "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz";
+        sha1 = "PYpcZog6FqMMqGQ+hR8Zuqd5eRc=";
+      };
+    }
+    {
+      name = "figures___figures_1.7.0.tgz";
+      path = fetchurl {
+        name = "figures___figures_1.7.0.tgz";
+        url  = "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz";
+        sha1 = "y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=";
+      };
+    }
+    {
+      name = "figures___figures_2.0.0.tgz";
+      path = fetchurl {
+        name = "figures___figures_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz";
+        sha1 = "OrGi0qYsi/tDGgyUy3l6L84nyWI=";
+      };
+    }
+    {
+      name = "file_entry_cache___file_entry_cache_2.0.0.tgz";
+      path = fetchurl {
+        name = "file_entry_cache___file_entry_cache_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz";
+        sha1 = "w5KZDD5oR4PYOLjISkXYoEhFg2E=";
+      };
+    }
+    {
+      name = "file_entry_cache___file_entry_cache_5.0.1.tgz";
+      path = fetchurl {
+        name = "file_entry_cache___file_entry_cache_5.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz";
+        sha512 = "bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==";
+      };
+    }
+    {
+      name = "fill_range___fill_range_4.0.0.tgz";
+      path = fetchurl {
+        name = "fill_range___fill_range_4.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz";
+        sha1 = "1USBHUKPmOsGpj3EAtJAPDKMOPc=";
+      };
+    }
+    {
+      name = "find_up___find_up_2.1.0.tgz";
+      path = fetchurl {
+        name = "find_up___find_up_2.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz";
+        sha1 = "RdG35QbHF93UgndaK3eSCjwMV6c=";
+      };
+    }
+    {
+      name = "find_up___find_up_3.0.0.tgz";
+      path = fetchurl {
+        name = "find_up___find_up_3.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz";
+        sha512 = "1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==";
+      };
+    }
+    {
+      name = "flat_cache___flat_cache_1.3.4.tgz";
+      path = fetchurl {
+        name = "flat_cache___flat_cache_1.3.4.tgz";
+        url  = "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.4.tgz";
+        sha512 = "VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==";
+      };
+    }
+    {
+      name = "flat_cache___flat_cache_2.0.1.tgz";
+      path = fetchurl {
+        name = "flat_cache___flat_cache_2.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz";
+        sha512 = "LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==";
+      };
+    }
+    {
+      name = "flatted___flatted_2.0.2.tgz";
+      path = fetchurl {
+        name = "flatted___flatted_2.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz";
+        sha512 = "r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==";
+      };
+    }
+    {
+      name = "fn_name___fn_name_2.0.1.tgz";
+      path = fetchurl {
+        name = "fn_name___fn_name_2.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/fn-name/-/fn-name-2.0.1.tgz";
+        sha1 = "UhTXU3pNBqSjAcDMJi/rhBiAAuc=";
+      };
+    }
+    {
+      name = "for_in___for_in_1.0.2.tgz";
+      path = fetchurl {
+        name = "for_in___for_in_1.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz";
+        sha1 = "gQaNKVqBQuwKxybG4iAMMPttXoA=";
+      };
+    }
+    {
+      name = "fragment_cache___fragment_cache_0.2.1.tgz";
+      path = fetchurl {
+        name = "fragment_cache___fragment_cache_0.2.1.tgz";
+        url  = "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz";
+        sha1 = "QpD60n8T6Jvn8zeZxrxaCr//DRk=";
+      };
+    }
+    {
+      name = "fs.realpath___fs.realpath_1.0.0.tgz";
+      path = fetchurl {
+        name = "fs.realpath___fs.realpath_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz";
+        sha1 = "FQStJSMVjKpA20onh8sBQRmU6k8=";
+      };
+    }
+    {
+      name = "function_bind___function_bind_1.1.1.tgz";
+      path = fetchurl {
+        name = "function_bind___function_bind_1.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz";
+        sha512 = "yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==";
+      };
+    }
+    {
+      name = "functional_red_black_tree___functional_red_black_tree_1.0.1.tgz";
+      path = fetchurl {
+        name = "functional_red_black_tree___functional_red_black_tree_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz";
+        sha1 = "GwqzvVU7Kg1jmdKcDj6gslIHgyc=";
+      };
+    }
+    {
+      name = "g_status___g_status_2.0.2.tgz";
+      path = fetchurl {
+        name = "g_status___g_status_2.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/g-status/-/g-status-2.0.2.tgz";
+        sha512 = "kQoE9qH+T1AHKgSSD0Hkv98bobE90ILQcXAF4wvGgsr7uFqNvwmh8j+Lq3l0RVt3E3HjSbv2B9biEGcEtpHLCA==";
+      };
+    }
+    {
+      name = "get_caller_file___get_caller_file_1.0.3.tgz";
+      path = fetchurl {
+        name = "get_caller_file___get_caller_file_1.0.3.tgz";
+        url  = "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz";
+        sha512 = "3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==";
+      };
+    }
+    {
+      name = "get_own_enumerable_property_symbols___get_own_enumerable_property_symbols_3.0.2.tgz";
+      path = fetchurl {
+        name = "get_own_enumerable_property_symbols___get_own_enumerable_property_symbols_3.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz";
+        sha512 = "I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==";
+      };
+    }
+    {
+      name = "get_stdin___get_stdin_5.0.1.tgz";
+      path = fetchurl {
+        name = "get_stdin___get_stdin_5.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz";
+        sha1 = "Ei4WFZHiH/TFJTAwVpPyDmOTo5g=";
+      };
+    }
+    {
+      name = "get_stdin___get_stdin_6.0.0.tgz";
+      path = fetchurl {
+        name = "get_stdin___get_stdin_6.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz";
+        sha512 = "jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==";
+      };
+    }
+    {
+      name = "get_stream___get_stream_3.0.0.tgz";
+      path = fetchurl {
+        name = "get_stream___get_stream_3.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz";
+        sha1 = "jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=";
+      };
+    }
+    {
+      name = "get_stream___get_stream_4.1.0.tgz";
+      path = fetchurl {
+        name = "get_stream___get_stream_4.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz";
+        sha512 = "GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==";
+      };
+    }
+    {
+      name = "get_value___get_value_2.0.6.tgz";
+      path = fetchurl {
+        name = "get_value___get_value_2.0.6.tgz";
+        url  = "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz";
+        sha1 = "3BXKHGcjh8p2vTesCjlbogQqLCg=";
+      };
+    }
+    {
+      name = "glob___glob_7.1.6.tgz";
+      path = fetchurl {
+        name = "glob___glob_7.1.6.tgz";
+        url  = "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz";
+        sha512 = "LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==";
+      };
+    }
+    {
+      name = "glob___glob_7.0.6.tgz";
+      path = fetchurl {
+        name = "glob___glob_7.0.6.tgz";
+        url  = "https://registry.yarnpkg.com/glob/-/glob-7.0.6.tgz";
+        sha1 = "IRuvr0nlJbjNkyYNFKsTYVKz9Xo=";
+      };
+    }
+    {
+      name = "globals___globals_11.12.0.tgz";
+      path = fetchurl {
+        name = "globals___globals_11.12.0.tgz";
+        url  = "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz";
+        sha512 = "WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==";
+      };
+    }
+    {
+      name = "globby___globby_6.1.0.tgz";
+      path = fetchurl {
+        name = "globby___globby_6.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz";
+        sha1 = "9abXDoOV4hyFj7BInWTfAkJNUGw=";
+      };
+    }
+    {
+      name = "graceful_fs___graceful_fs_4.2.4.tgz";
+      path = fetchurl {
+        name = "graceful_fs___graceful_fs_4.2.4.tgz";
+        url  = "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz";
+        sha512 = "WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==";
+      };
+    }
+    {
+      name = "has_ansi___has_ansi_2.0.0.tgz";
+      path = fetchurl {
+        name = "has_ansi___has_ansi_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz";
+        sha1 = "NPUEnOHs3ysGSa8+8k5F7TVBbZE=";
+      };
+    }
+    {
+      name = "has_flag___has_flag_2.0.0.tgz";
+      path = fetchurl {
+        name = "has_flag___has_flag_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz";
+        sha1 = "6CB68cx7MNRGzHC3NLXovhj4jVE=";
+      };
+    }
+    {
+      name = "has_flag___has_flag_3.0.0.tgz";
+      path = fetchurl {
+        name = "has_flag___has_flag_3.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz";
+        sha1 = "tdRU3CGZriJWmfNGfloH87lVuv0=";
+      };
+    }
+    {
+      name = "has_symbols___has_symbols_1.0.1.tgz";
+      path = fetchurl {
+        name = "has_symbols___has_symbols_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz";
+        sha512 = "PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==";
+      };
+    }
+    {
+      name = "has_value___has_value_0.3.1.tgz";
+      path = fetchurl {
+        name = "has_value___has_value_0.3.1.tgz";
+        url  = "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz";
+        sha1 = "ex9YutpiyoJ+wKIHgCVlSEWZXh8=";
+      };
+    }
+    {
+      name = "has_value___has_value_1.0.0.tgz";
+      path = fetchurl {
+        name = "has_value___has_value_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz";
+        sha1 = "GLKB2lhbHFxR3vJMkw7SmgvmsXc=";
+      };
+    }
+    {
+      name = "has_values___has_values_0.1.4.tgz";
+      path = fetchurl {
+        name = "has_values___has_values_0.1.4.tgz";
+        url  = "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz";
+        sha1 = "bWHeldkd/Km5oCCJrThL/49it3E=";
+      };
+    }
+    {
+      name = "has_values___has_values_1.0.0.tgz";
+      path = fetchurl {
+        name = "has_values___has_values_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz";
+        sha1 = "lbC2P+whRmGab+V/51Yo1aOe/k8=";
+      };
+    }
+    {
+      name = "has___has_1.0.3.tgz";
+      path = fetchurl {
+        name = "has___has_1.0.3.tgz";
+        url  = "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz";
+        sha512 = "f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==";
+      };
+    }
+    {
+      name = "hosted_git_info___hosted_git_info_2.8.8.tgz";
+      path = fetchurl {
+        name = "hosted_git_info___hosted_git_info_2.8.8.tgz";
+        url  = "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz";
+        sha512 = "f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==";
+      };
+    }
+    {
+      name = "husky___husky_1.3.1.tgz";
+      path = fetchurl {
+        name = "husky___husky_1.3.1.tgz";
+        url  = "https://registry.yarnpkg.com/husky/-/husky-1.3.1.tgz";
+        sha512 = "86U6sVVVf4b5NYSZ0yvv88dRgBSSXXmHaiq5pP4KDj5JVzdwKgBjEtUPOm8hcoytezFwbU+7gotXNhpHdystlg==";
+      };
+    }
+    {
+      name = "iconv_lite___iconv_lite_0.4.24.tgz";
+      path = fetchurl {
+        name = "iconv_lite___iconv_lite_0.4.24.tgz";
+        url  = "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz";
+        sha512 = "v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==";
+      };
+    }
+    {
+      name = "ignore___ignore_3.3.10.tgz";
+      path = fetchurl {
+        name = "ignore___ignore_3.3.10.tgz";
+        url  = "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz";
+        sha512 = "Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==";
+      };
+    }
+    {
+      name = "ignore___ignore_4.0.6.tgz";
+      path = fetchurl {
+        name = "ignore___ignore_4.0.6.tgz";
+        url  = "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz";
+        sha512 = "cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==";
+      };
+    }
+    {
+      name = "ignore___ignore_5.1.4.tgz";
+      path = fetchurl {
+        name = "ignore___ignore_5.1.4.tgz";
+        url  = "https://registry.yarnpkg.com/ignore/-/ignore-5.1.4.tgz";
+        sha512 = "MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==";
+      };
+    }
+    {
+      name = "import_fresh___import_fresh_2.0.0.tgz";
+      path = fetchurl {
+        name = "import_fresh___import_fresh_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz";
+        sha1 = "2BNVwVYS04bGH53dOSLUMEgipUY=";
+      };
+    }
+    {
+      name = "import_fresh___import_fresh_3.2.1.tgz";
+      path = fetchurl {
+        name = "import_fresh___import_fresh_3.2.1.tgz";
+        url  = "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz";
+        sha512 = "6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==";
+      };
+    }
+    {
+      name = "imurmurhash___imurmurhash_0.1.4.tgz";
+      path = fetchurl {
+        name = "imurmurhash___imurmurhash_0.1.4.tgz";
+        url  = "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz";
+        sha1 = "khi5srkoojixPcT7a21XbyMUU+o=";
+      };
+    }
+    {
+      name = "indent_string___indent_string_3.2.0.tgz";
+      path = fetchurl {
+        name = "indent_string___indent_string_3.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz";
+        sha1 = "Sl/W0nzDMvN+VBmlBNu4NxBckok=";
+      };
+    }
+    {
+      name = "inflight___inflight_1.0.6.tgz";
+      path = fetchurl {
+        name = "inflight___inflight_1.0.6.tgz";
+        url  = "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz";
+        sha1 = "Sb1jMdfQLQwJvJEKEHW6gWW1bfk=";
+      };
+    }
+    {
+      name = "inherits___inherits_2.0.4.tgz";
+      path = fetchurl {
+        name = "inherits___inherits_2.0.4.tgz";
+        url  = "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz";
+        sha512 = "k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==";
+      };
+    }
+    {
+      name = "inquirer___inquirer_3.3.0.tgz";
+      path = fetchurl {
+        name = "inquirer___inquirer_3.3.0.tgz";
+        url  = "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz";
+        sha512 = "h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==";
+      };
+    }
+    {
+      name = "inquirer___inquirer_6.5.2.tgz";
+      path = fetchurl {
+        name = "inquirer___inquirer_6.5.2.tgz";
+        url  = "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz";
+        sha512 = "cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==";
+      };
+    }
+    {
+      name = "internal_slot___internal_slot_1.0.2.tgz";
+      path = fetchurl {
+        name = "internal_slot___internal_slot_1.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.2.tgz";
+        sha512 = "2cQNfwhAfJIkU4KZPkDI+Gj5yNNnbqi40W9Gge6dfnk4TocEVm00B3bdiL+JINrbGJil2TeHvM4rETGzk/f/0g==";
+      };
+    }
+    {
+      name = "invert_kv___invert_kv_1.0.0.tgz";
+      path = fetchurl {
+        name = "invert_kv___invert_kv_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz";
+        sha1 = "EEqOSqym09jNFXqO+L+rLXo//bY=";
+      };
+    }
+    {
+      name = "is_accessor_descriptor___is_accessor_descriptor_0.1.6.tgz";
+      path = fetchurl {
+        name = "is_accessor_descriptor___is_accessor_descriptor_0.1.6.tgz";
+        url  = "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz";
+        sha1 = "qeEss66Nh2cn7u84Q/igiXtcmNY=";
+      };
+    }
+    {
+      name = "is_accessor_descriptor___is_accessor_descriptor_1.0.0.tgz";
+      path = fetchurl {
+        name = "is_accessor_descriptor___is_accessor_descriptor_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz";
+        sha512 = "m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==";
+      };
+    }
+    {
+      name = "is_arguments___is_arguments_1.0.4.tgz";
+      path = fetchurl {
+        name = "is_arguments___is_arguments_1.0.4.tgz";
+        url  = "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz";
+        sha512 = "xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==";
+      };
+    }
+    {
+      name = "is_arrayish___is_arrayish_0.2.1.tgz";
+      path = fetchurl {
+        name = "is_arrayish___is_arrayish_0.2.1.tgz";
+        url  = "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz";
+        sha1 = "d8mYQFJ6qOyxqLppe4BkWnqSap0=";
+      };
+    }
+    {
+      name = "is_buffer___is_buffer_1.1.6.tgz";
+      path = fetchurl {
+        name = "is_buffer___is_buffer_1.1.6.tgz";
+        url  = "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz";
+        sha512 = "NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==";
+      };
+    }
+    {
+      name = "is_callable___is_callable_1.1.5.tgz";
+      path = fetchurl {
+        name = "is_callable___is_callable_1.1.5.tgz";
+        url  = "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.5.tgz";
+        sha512 = "ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==";
+      };
+    }
+    {
+      name = "is_ci___is_ci_2.0.0.tgz";
+      path = fetchurl {
+        name = "is_ci___is_ci_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz";
+        sha512 = "YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==";
+      };
+    }
+    {
+      name = "is_data_descriptor___is_data_descriptor_0.1.4.tgz";
+      path = fetchurl {
+        name = "is_data_descriptor___is_data_descriptor_0.1.4.tgz";
+        url  = "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz";
+        sha1 = "C17mSDiOLIYCgueT8YVv7D8wG1Y=";
+      };
+    }
+    {
+      name = "is_data_descriptor___is_data_descriptor_1.0.0.tgz";
+      path = fetchurl {
+        name = "is_data_descriptor___is_data_descriptor_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz";
+        sha512 = "jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==";
+      };
+    }
+    {
+      name = "is_date_object___is_date_object_1.0.2.tgz";
+      path = fetchurl {
+        name = "is_date_object___is_date_object_1.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz";
+        sha512 = "USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==";
+      };
+    }
+    {
+      name = "is_descriptor___is_descriptor_0.1.6.tgz";
+      path = fetchurl {
+        name = "is_descriptor___is_descriptor_0.1.6.tgz";
+        url  = "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz";
+        sha512 = "avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==";
+      };
+    }
+    {
+      name = "is_descriptor___is_descriptor_1.0.2.tgz";
+      path = fetchurl {
+        name = "is_descriptor___is_descriptor_1.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz";
+        sha512 = "2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==";
+      };
+    }
+    {
+      name = "is_directory___is_directory_0.3.1.tgz";
+      path = fetchurl {
+        name = "is_directory___is_directory_0.3.1.tgz";
+        url  = "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz";
+        sha1 = "YTObbyR1/Hcv2cnYP1yFddwVSuE=";
+      };
+    }
+    {
+      name = "is_extendable___is_extendable_0.1.1.tgz";
+      path = fetchurl {
+        name = "is_extendable___is_extendable_0.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz";
+        sha1 = "YrEQ4omkcUGOPsNqYX1HLjAd/Ik=";
+      };
+    }
+    {
+      name = "is_extendable___is_extendable_1.0.1.tgz";
+      path = fetchurl {
+        name = "is_extendable___is_extendable_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz";
+        sha512 = "arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==";
+      };
+    }
+    {
+      name = "is_extglob___is_extglob_2.1.1.tgz";
+      path = fetchurl {
+        name = "is_extglob___is_extglob_2.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz";
+        sha1 = "qIwCU1eR8C7TfHahueqXc8gz+MI=";
+      };
+    }
+    {
+      name = "is_fullwidth_code_point___is_fullwidth_code_point_1.0.0.tgz";
+      path = fetchurl {
+        name = "is_fullwidth_code_point___is_fullwidth_code_point_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz";
+        sha1 = "754xOG8DGn8NZDr4L95QxFfvAMs=";
+      };
+    }
+    {
+      name = "is_fullwidth_code_point___is_fullwidth_code_point_2.0.0.tgz";
+      path = fetchurl {
+        name = "is_fullwidth_code_point___is_fullwidth_code_point_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz";
+        sha1 = "o7MKXE8ZkYMWeqq5O+764937ZU8=";
+      };
+    }
+    {
+      name = "is_glob___is_glob_4.0.1.tgz";
+      path = fetchurl {
+        name = "is_glob___is_glob_4.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz";
+        sha512 = "5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==";
+      };
+    }
+    {
+      name = "is_number___is_number_3.0.0.tgz";
+      path = fetchurl {
+        name = "is_number___is_number_3.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz";
+        sha1 = "JP1iAaR4LPUFYcgQJ2r8fRLXEZU=";
+      };
+    }
+    {
+      name = "is_obj___is_obj_1.0.1.tgz";
+      path = fetchurl {
+        name = "is_obj___is_obj_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz";
+        sha1 = "PkcprB9f3gJc19g6iW2rn09n2w8=";
+      };
+    }
+    {
+      name = "is_observable___is_observable_1.1.0.tgz";
+      path = fetchurl {
+        name = "is_observable___is_observable_1.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/is-observable/-/is-observable-1.1.0.tgz";
+        sha512 = "NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==";
+      };
+    }
+    {
+      name = "is_path_cwd___is_path_cwd_1.0.0.tgz";
+      path = fetchurl {
+        name = "is_path_cwd___is_path_cwd_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz";
+        sha1 = "0iXsIxMuie3Tj9p2dHLmLmXxEG0=";
+      };
+    }
+    {
+      name = "is_path_in_cwd___is_path_in_cwd_1.0.1.tgz";
+      path = fetchurl {
+        name = "is_path_in_cwd___is_path_in_cwd_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz";
+        sha512 = "FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==";
+      };
+    }
+    {
+      name = "is_path_inside___is_path_inside_1.0.1.tgz";
+      path = fetchurl {
+        name = "is_path_inside___is_path_inside_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz";
+        sha1 = "jvW33lBDej/cprToZe96pVy0gDY=";
+      };
+    }
+    {
+      name = "is_plain_object___is_plain_object_2.0.4.tgz";
+      path = fetchurl {
+        name = "is_plain_object___is_plain_object_2.0.4.tgz";
+        url  = "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz";
+        sha512 = "h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==";
+      };
+    }
+    {
+      name = "is_promise___is_promise_2.2.2.tgz";
+      path = fetchurl {
+        name = "is_promise___is_promise_2.2.2.tgz";
+        url  = "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz";
+        sha512 = "+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==";
+      };
+    }
+    {
+      name = "is_regex___is_regex_1.0.5.tgz";
+      path = fetchurl {
+        name = "is_regex___is_regex_1.0.5.tgz";
+        url  = "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz";
+        sha512 = "vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==";
+      };
+    }
+    {
+      name = "is_regexp___is_regexp_1.0.0.tgz";
+      path = fetchurl {
+        name = "is_regexp___is_regexp_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz";
+        sha1 = "/S2INUXEa6xaYz57mgnof6LLUGk=";
+      };
+    }
+    {
+      name = "is_resolvable___is_resolvable_1.1.0.tgz";
+      path = fetchurl {
+        name = "is_resolvable___is_resolvable_1.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz";
+        sha512 = "qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==";
+      };
+    }
+    {
+      name = "is_stream___is_stream_1.1.0.tgz";
+      path = fetchurl {
+        name = "is_stream___is_stream_1.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz";
+        sha1 = "EtSj3U5o4Lec6428hBc66A2RykQ=";
+      };
+    }
+    {
+      name = "is_string___is_string_1.0.5.tgz";
+      path = fetchurl {
+        name = "is_string___is_string_1.0.5.tgz";
+        url  = "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz";
+        sha512 = "buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==";
+      };
+    }
+    {
+      name = "is_symbol___is_symbol_1.0.3.tgz";
+      path = fetchurl {
+        name = "is_symbol___is_symbol_1.0.3.tgz";
+        url  = "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz";
+        sha512 = "OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==";
+      };
+    }
+    {
+      name = "is_windows___is_windows_1.0.2.tgz";
+      path = fetchurl {
+        name = "is_windows___is_windows_1.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz";
+        sha512 = "eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==";
+      };
+    }
+    {
+      name = "isarray___isarray_1.0.0.tgz";
+      path = fetchurl {
+        name = "isarray___isarray_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz";
+        sha1 = "u5NdSFgsuhaMBoNJV6VKPgcSTxE=";
+      };
+    }
+    {
+      name = "isexe___isexe_2.0.0.tgz";
+      path = fetchurl {
+        name = "isexe___isexe_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz";
+        sha1 = "6PvzdNxVb/iUehDcsFctYz8s+hA=";
+      };
+    }
+    {
+      name = "isobject___isobject_2.1.0.tgz";
+      path = fetchurl {
+        name = "isobject___isobject_2.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz";
+        sha1 = "8GVWEJaj8dou9GJy+BXIQNh+DIk=";
+      };
+    }
+    {
+      name = "isobject___isobject_3.0.1.tgz";
+      path = fetchurl {
+        name = "isobject___isobject_3.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz";
+        sha1 = "TkMekrEalzFjaqH5yNHMvP2reN8=";
+      };
+    }
+    {
+      name = "js_tokens___js_tokens_4.0.0.tgz";
+      path = fetchurl {
+        name = "js_tokens___js_tokens_4.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz";
+        sha512 = "RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==";
+      };
+    }
+    {
+      name = "js_tokens___js_tokens_3.0.2.tgz";
+      path = fetchurl {
+        name = "js_tokens___js_tokens_3.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz";
+        sha1 = "mGbfOVECEw449/mWvOtlRDIJwls=";
+      };
+    }
+    {
+      name = "js_yaml___js_yaml_3.13.1.tgz";
+      path = fetchurl {
+        name = "js_yaml___js_yaml_3.13.1.tgz";
+        url  = "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz";
+        sha512 = "YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==";
+      };
+    }
+    {
+      name = "jsesc___jsesc_2.5.2.tgz";
+      path = fetchurl {
+        name = "jsesc___jsesc_2.5.2.tgz";
+        url  = "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz";
+        sha512 = "OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==";
+      };
+    }
+    {
+      name = "json_parse_better_errors___json_parse_better_errors_1.0.2.tgz";
+      path = fetchurl {
+        name = "json_parse_better_errors___json_parse_better_errors_1.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz";
+        sha512 = "mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==";
+      };
+    }
+    {
+      name = "json_schema_traverse___json_schema_traverse_0.3.1.tgz";
+      path = fetchurl {
+        name = "json_schema_traverse___json_schema_traverse_0.3.1.tgz";
+        url  = "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz";
+        sha1 = "NJptRMU6Ud6JtAgFxdXlm0F9M0A=";
+      };
+    }
+    {
+      name = "json_schema_traverse___json_schema_traverse_0.4.1.tgz";
+      path = fetchurl {
+        name = "json_schema_traverse___json_schema_traverse_0.4.1.tgz";
+        url  = "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz";
+        sha512 = "xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==";
+      };
+    }
+    {
+      name = "json_stable_stringify_without_jsonify___json_stable_stringify_without_jsonify_1.0.1.tgz";
+      path = fetchurl {
+        name = "json_stable_stringify_without_jsonify___json_stable_stringify_without_jsonify_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz";
+        sha1 = "nbe1lJatPzz+8wp1FC0tkwrXJlE=";
+      };
+    }
+    {
+      name = "jsx_ast_utils___jsx_ast_utils_2.2.3.tgz";
+      path = fetchurl {
+        name = "jsx_ast_utils___jsx_ast_utils_2.2.3.tgz";
+        url  = "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.2.3.tgz";
+        sha512 = "EdIHFMm+1BPynpKOpdPqiOsvnIrInRGJD7bzPZdPkjitQEqpdpUuFpq4T0npZFKTiB3RhWFdGN+oqOJIdhDhQA==";
+      };
+    }
+    {
+      name = "kind_of___kind_of_3.2.2.tgz";
+      path = fetchurl {
+        name = "kind_of___kind_of_3.2.2.tgz";
+        url  = "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz";
+        sha1 = "MeohpzS6ubuw8yRm2JOupR5KPGQ=";
+      };
+    }
+    {
+      name = "kind_of___kind_of_4.0.0.tgz";
+      path = fetchurl {
+        name = "kind_of___kind_of_4.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz";
+        sha1 = "IIE989cSkosgc3hpGkUGb65y3Vc=";
+      };
+    }
+    {
+      name = "kind_of___kind_of_5.1.0.tgz";
+      path = fetchurl {
+        name = "kind_of___kind_of_5.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz";
+        sha512 = "NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==";
+      };
+    }
+    {
+      name = "kind_of___kind_of_6.0.3.tgz";
+      path = fetchurl {
+        name = "kind_of___kind_of_6.0.3.tgz";
+        url  = "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz";
+        sha512 = "dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==";
+      };
+    }
+    {
+      name = "lcid___lcid_1.0.0.tgz";
+      path = fetchurl {
+        name = "lcid___lcid_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz";
+        sha1 = "MIrMr6C8SDo4Z7S28rlQYlHRuDU=";
+      };
+    }
+    {
+      name = "levn___levn_0.3.0.tgz";
+      path = fetchurl {
+        name = "levn___levn_0.3.0.tgz";
+        url  = "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz";
+        sha1 = "OwmSTt+fCDwEkP3UwLxEIeBHZO4=";
+      };
+    }
+    {
+      name = "lint_staged___lint_staged_8.2.1.tgz";
+      path = fetchurl {
+        name = "lint_staged___lint_staged_8.2.1.tgz";
+        url  = "https://registry.yarnpkg.com/lint-staged/-/lint-staged-8.2.1.tgz";
+        sha512 = "n0tDGR/rTCgQNwXnUf/eWIpPNddGWxC32ANTNYsj2k02iZb7Cz5ox2tytwBu+2r0zDXMEMKw7Y9OD/qsav561A==";
+      };
+    }
+    {
+      name = "listr_silent_renderer___listr_silent_renderer_1.1.1.tgz";
+      path = fetchurl {
+        name = "listr_silent_renderer___listr_silent_renderer_1.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz";
+        sha1 = "kktaN1cVN3C/Go4/v3S4u/P5JC4=";
+      };
+    }
+    {
+      name = "listr_update_renderer___listr_update_renderer_0.5.0.tgz";
+      path = fetchurl {
+        name = "listr_update_renderer___listr_update_renderer_0.5.0.tgz";
+        url  = "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz";
+        sha512 = "tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA==";
+      };
+    }
+    {
+      name = "listr_verbose_renderer___listr_verbose_renderer_0.5.0.tgz";
+      path = fetchurl {
+        name = "listr_verbose_renderer___listr_verbose_renderer_0.5.0.tgz";
+        url  = "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz";
+        sha512 = "04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw==";
+      };
+    }
+    {
+      name = "listr___listr_0.14.3.tgz";
+      path = fetchurl {
+        name = "listr___listr_0.14.3.tgz";
+        url  = "https://registry.yarnpkg.com/listr/-/listr-0.14.3.tgz";
+        sha512 = "RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA==";
+      };
+    }
+    {
+      name = "load_json_file___load_json_file_2.0.0.tgz";
+      path = fetchurl {
+        name = "load_json_file___load_json_file_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz";
+        sha1 = "eUfkIUmvgNaWy/eXvKq8/h/inKg=";
+      };
+    }
+    {
+      name = "locate_path___locate_path_2.0.0.tgz";
+      path = fetchurl {
+        name = "locate_path___locate_path_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz";
+        sha1 = "K1aLJl7slExtnA3pw9u7ygNUzY4=";
+      };
+    }
+    {
+      name = "locate_path___locate_path_3.0.0.tgz";
+      path = fetchurl {
+        name = "locate_path___locate_path_3.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz";
+        sha512 = "7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==";
+      };
+    }
+    {
+      name = "lodash.memoize___lodash.memoize_4.1.2.tgz";
+      path = fetchurl {
+        name = "lodash.memoize___lodash.memoize_4.1.2.tgz";
+        url  = "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz";
+        sha1 = "vMbEmkKihA7Zl/Mj6tpezRguC/4=";
+      };
+    }
+    {
+      name = "lodash.merge___lodash.merge_4.6.2.tgz";
+      path = fetchurl {
+        name = "lodash.merge___lodash.merge_4.6.2.tgz";
+        url  = "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz";
+        sha512 = "0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==";
+      };
+    }
+    {
+      name = "lodash.unescape___lodash.unescape_4.0.1.tgz";
+      path = fetchurl {
+        name = "lodash.unescape___lodash.unescape_4.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/lodash.unescape/-/lodash.unescape-4.0.1.tgz";
+        sha1 = "vyJJiGzlFM2hEvrpIYzcBlIR/Jw=";
+      };
+    }
+    {
+      name = "lodash___lodash_4.17.15.tgz";
+      path = fetchurl {
+        name = "lodash___lodash_4.17.15.tgz";
+        url  = "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz";
+        sha512 = "8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==";
+      };
+    }
+    {
+      name = "log_symbols___log_symbols_1.0.2.tgz";
+      path = fetchurl {
+        name = "log_symbols___log_symbols_1.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz";
+        sha1 = "N2/3tY6jCGoPCfrMdGF+ylAeGhg=";
+      };
+    }
+    {
+      name = "log_symbols___log_symbols_2.2.0.tgz";
+      path = fetchurl {
+        name = "log_symbols___log_symbols_2.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz";
+        sha512 = "VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==";
+      };
+    }
+    {
+      name = "log_update___log_update_2.3.0.tgz";
+      path = fetchurl {
+        name = "log_update___log_update_2.3.0.tgz";
+        url  = "https://registry.yarnpkg.com/log-update/-/log-update-2.3.0.tgz";
+        sha1 = "iDKP19HOeTiykoN0bwsbwSayRwg=";
+      };
+    }
+    {
+      name = "loglevel_colored_level_prefix___loglevel_colored_level_prefix_1.0.0.tgz";
+      path = fetchurl {
+        name = "loglevel_colored_level_prefix___loglevel_colored_level_prefix_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/loglevel-colored-level-prefix/-/loglevel-colored-level-prefix-1.0.0.tgz";
+        sha1 = "akAhj9x64V/HbD0PPmdsRlOIYD4=";
+      };
+    }
+    {
+      name = "loglevel___loglevel_1.6.8.tgz";
+      path = fetchurl {
+        name = "loglevel___loglevel_1.6.8.tgz";
+        url  = "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.8.tgz";
+        sha512 = "bsU7+gc9AJ2SqpzxwU3+1fedl8zAntbtC5XYlt3s2j1hJcn2PsXSmgN8TaLG/J1/2mod4+cE/3vNL70/c1RNCA==";
+      };
+    }
+    {
+      name = "loose_envify___loose_envify_1.4.0.tgz";
+      path = fetchurl {
+        name = "loose_envify___loose_envify_1.4.0.tgz";
+        url  = "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz";
+        sha512 = "lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==";
+      };
+    }
+    {
+      name = "lru_cache___lru_cache_4.1.5.tgz";
+      path = fetchurl {
+        name = "lru_cache___lru_cache_4.1.5.tgz";
+        url  = "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz";
+        sha512 = "sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==";
+      };
+    }
+    {
+      name = "make_plural___make_plural_4.3.0.tgz";
+      path = fetchurl {
+        name = "make_plural___make_plural_4.3.0.tgz";
+        url  = "https://registry.yarnpkg.com/make-plural/-/make-plural-4.3.0.tgz";
+        sha512 = "xTYd4JVHpSCW+aqDof6w/MebaMVNTVYBZhbB/vi513xXdiPT92JMVCo0Jq8W2UZnzYRFeVbQiQ+I25l13JuKvA==";
+      };
+    }
+    {
+      name = "map_cache___map_cache_0.2.2.tgz";
+      path = fetchurl {
+        name = "map_cache___map_cache_0.2.2.tgz";
+        url  = "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz";
+        sha1 = "wyq9C9ZSXZsFFkW7TyasXcmKDb8=";
+      };
+    }
+    {
+      name = "map_obj___map_obj_2.0.0.tgz";
+      path = fetchurl {
+        name = "map_obj___map_obj_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/map-obj/-/map-obj-2.0.0.tgz";
+        sha1 = "plzSkIepJZi4eRJXpSPgISIqwfk=";
+      };
+    }
+    {
+      name = "map_visit___map_visit_1.0.0.tgz";
+      path = fetchurl {
+        name = "map_visit___map_visit_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz";
+        sha1 = "7Nyo8TFE5mDxtb1B8S80edmN+48=";
+      };
+    }
+    {
+      name = "matcher___matcher_1.1.1.tgz";
+      path = fetchurl {
+        name = "matcher___matcher_1.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/matcher/-/matcher-1.1.1.tgz";
+        sha512 = "+BmqxWIubKTRKNWx/ahnCkk3mG8m7OturVlqq6HiojGJTd5hVYbgZm6WzcYPCoB+KBT4Vd6R7WSRG2OADNaCjg==";
+      };
+    }
+    {
+      name = "mem___mem_1.1.0.tgz";
+      path = fetchurl {
+        name = "mem___mem_1.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz";
+        sha1 = "Xt1StIXKHZAP5kiVUFOZoN+kX3Y=";
+      };
+    }
+    {
+      name = "messageformat_parser___messageformat_parser_1.1.0.tgz";
+      path = fetchurl {
+        name = "messageformat_parser___messageformat_parser_1.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/messageformat-parser/-/messageformat-parser-1.1.0.tgz";
+        sha512 = "Hwem6G3MsKDLS1FtBRGIs8T50P1Q00r3srS6QJePCFbad9fq0nYxwf3rnU2BreApRGhmpKMV7oZI06Sy1c9TPA==";
+      };
+    }
+    {
+      name = "messageformat___messageformat_1.1.1.tgz";
+      path = fetchurl {
+        name = "messageformat___messageformat_1.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/messageformat/-/messageformat-1.1.1.tgz";
+        sha512 = "Q0uXcDtF5pEZsVSyhzDOGgZZK6ykN79VY9CwU3Nv0gsqx62BjdJW0MT+63UkHQ4exe3HE33ZlxR2/YwoJarRTg==";
+      };
+    }
+    {
+      name = "micromatch___micromatch_3.1.10.tgz";
+      path = fetchurl {
+        name = "micromatch___micromatch_3.1.10.tgz";
+        url  = "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz";
+        sha512 = "MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==";
+      };
+    }
+    {
+      name = "mimic_fn___mimic_fn_1.2.0.tgz";
+      path = fetchurl {
+        name = "mimic_fn___mimic_fn_1.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz";
+        sha512 = "jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==";
+      };
+    }
+    {
+      name = "minimatch___minimatch_3.0.4.tgz";
+      path = fetchurl {
+        name = "minimatch___minimatch_3.0.4.tgz";
+        url  = "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz";
+        sha512 = "yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==";
+      };
+    }
+    {
+      name = "minimist___minimist_1.2.5.tgz";
+      path = fetchurl {
+        name = "minimist___minimist_1.2.5.tgz";
+        url  = "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz";
+        sha512 = "FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==";
+      };
+    }
+    {
+      name = "minipass___minipass_3.3.4.tgz";
+      path = fetchurl {
+        name = "minipass___minipass_3.3.4.tgz";
+        url  = "https://registry.yarnpkg.com/minipass/-/minipass-3.3.4.tgz";
+        sha512 = "I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==";
+      };
+    }
+    {
+      name = "mixin_deep___mixin_deep_1.3.2.tgz";
+      path = fetchurl {
+        name = "mixin_deep___mixin_deep_1.3.2.tgz";
+        url  = "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz";
+        sha512 = "WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==";
+      };
+    }
+    {
+      name = "mkdirp___mkdirp_0.5.5.tgz";
+      path = fetchurl {
+        name = "mkdirp___mkdirp_0.5.5.tgz";
+        url  = "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz";
+        sha512 = "NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==";
+      };
+    }
+    {
+      name = "ms___ms_2.0.0.tgz";
+      path = fetchurl {
+        name = "ms___ms_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz";
+        sha1 = "VgiurfwAvmwpAd9fmGF4jeDVl8g=";
+      };
+    }
+    {
+      name = "ms___ms_2.1.2.tgz";
+      path = fetchurl {
+        name = "ms___ms_2.1.2.tgz";
+        url  = "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz";
+        sha512 = "sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==";
+      };
+    }
+    {
+      name = "mute_stream___mute_stream_0.0.7.tgz";
+      path = fetchurl {
+        name = "mute_stream___mute_stream_0.0.7.tgz";
+        url  = "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz";
+        sha1 = "MHXOk7whuPq0PhvE2n6BFe0ee6s=";
+      };
+    }
+    {
+      name = "nanomatch___nanomatch_1.2.13.tgz";
+      path = fetchurl {
+        name = "nanomatch___nanomatch_1.2.13.tgz";
+        url  = "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz";
+        sha512 = "fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==";
+      };
+    }
+    {
+      name = "natural_compare___natural_compare_1.4.0.tgz";
+      path = fetchurl {
+        name = "natural_compare___natural_compare_1.4.0.tgz";
+        url  = "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz";
+        sha1 = "Sr6/7tdUHywnrPspvbvRXI1bpPc=";
+      };
+    }
+    {
+      name = "nice_try___nice_try_1.0.5.tgz";
+      path = fetchurl {
+        name = "nice_try___nice_try_1.0.5.tgz";
+        url  = "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz";
+        sha512 = "1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==";
+      };
+    }
+    {
+      name = "nopt___nopt_3.0.6.tgz";
+      path = fetchurl {
+        name = "nopt___nopt_3.0.6.tgz";
+        url  = "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz";
+        sha1 = "xkZdvwirzU2zWTF/eaxopkayj/k=";
+      };
+    }
+    {
+      name = "normalize_package_data___normalize_package_data_2.5.0.tgz";
+      path = fetchurl {
+        name = "normalize_package_data___normalize_package_data_2.5.0.tgz";
+        url  = "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz";
+        sha512 = "/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==";
+      };
+    }
+    {
+      name = "npm_path___npm_path_2.0.4.tgz";
+      path = fetchurl {
+        name = "npm_path___npm_path_2.0.4.tgz";
+        url  = "https://registry.yarnpkg.com/npm-path/-/npm-path-2.0.4.tgz";
+        sha512 = "IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw==";
+      };
+    }
+    {
+      name = "npm_run_path___npm_run_path_2.0.2.tgz";
+      path = fetchurl {
+        name = "npm_run_path___npm_run_path_2.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz";
+        sha1 = "NakjLfo11wZ7TLLd8jV7GHFTbF8=";
+      };
+    }
+    {
+      name = "npm_which___npm_which_3.0.1.tgz";
+      path = fetchurl {
+        name = "npm_which___npm_which_3.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/npm-which/-/npm-which-3.0.1.tgz";
+        sha1 = "kiXybsOihcIJyuZ8OxGmtKtxQKo=";
+      };
+    }
+    {
+      name = "number_is_nan___number_is_nan_1.0.1.tgz";
+      path = fetchurl {
+        name = "number_is_nan___number_is_nan_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz";
+        sha1 = "CXtgK1NCKlIsGvuHkDGDNpQaAR0=";
+      };
+    }
+    {
+      name = "object_assign___object_assign_4.1.1.tgz";
+      path = fetchurl {
+        name = "object_assign___object_assign_4.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz";
+        sha1 = "IQmtx5ZYh8/AXLvUQsrIv7s2CGM=";
+      };
+    }
+    {
+      name = "object_copy___object_copy_0.1.0.tgz";
+      path = fetchurl {
+        name = "object_copy___object_copy_0.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz";
+        sha1 = "fn2Fi3gb18mRpBupde04EnVOmYw=";
+      };
+    }
+    {
+      name = "object_inspect___object_inspect_1.7.0.tgz";
+      path = fetchurl {
+        name = "object_inspect___object_inspect_1.7.0.tgz";
+        url  = "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz";
+        sha512 = "a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==";
+      };
+    }
+    {
+      name = "object_is___object_is_1.1.2.tgz";
+      path = fetchurl {
+        name = "object_is___object_is_1.1.2.tgz";
+        url  = "https://registry.yarnpkg.com/object-is/-/object-is-1.1.2.tgz";
+        sha512 = "5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ==";
+      };
+    }
+    {
+      name = "object_keys___object_keys_1.1.1.tgz";
+      path = fetchurl {
+        name = "object_keys___object_keys_1.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz";
+        sha512 = "NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==";
+      };
+    }
+    {
+      name = "object_visit___object_visit_1.0.1.tgz";
+      path = fetchurl {
+        name = "object_visit___object_visit_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz";
+        sha1 = "95xEk68MU3e1n+OdOV5BBC3QRbs=";
+      };
+    }
+    {
+      name = "object.assign___object.assign_4.1.0.tgz";
+      path = fetchurl {
+        name = "object.assign___object.assign_4.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz";
+        sha512 = "exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==";
+      };
+    }
+    {
+      name = "object.entries___object.entries_1.1.1.tgz";
+      path = fetchurl {
+        name = "object.entries___object.entries_1.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.1.tgz";
+        sha512 = "ilqR7BgdyZetJutmDPfXCDffGa0/Yzl2ivVNpbx/g4UeWrCdRnFDUBrKJGLhGieRHDATnyZXWBeCb29k9CJysQ==";
+      };
+    }
+    {
+      name = "object.fromentries___object.fromentries_2.0.2.tgz";
+      path = fetchurl {
+        name = "object.fromentries___object.fromentries_2.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.2.tgz";
+        sha512 = "r3ZiBH7MQppDJVLx6fhD618GKNG40CZYH9wgwdhKxBDDbQgjeWGGd4AtkZad84d291YxvWe7bJGuE65Anh0dxQ==";
+      };
+    }
+    {
+      name = "object.pick___object.pick_1.3.0.tgz";
+      path = fetchurl {
+        name = "object.pick___object.pick_1.3.0.tgz";
+        url  = "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz";
+        sha1 = "h6EKxMFpS9Lhy/U1kaZhQftd10c=";
+      };
+    }
+    {
+      name = "object.values___object.values_1.1.1.tgz";
+      path = fetchurl {
+        name = "object.values___object.values_1.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/object.values/-/object.values-1.1.1.tgz";
+        sha512 = "WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==";
+      };
+    }
+    {
+      name = "once___once_1.4.0.tgz";
+      path = fetchurl {
+        name = "once___once_1.4.0.tgz";
+        url  = "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz";
+        sha1 = "WDsap3WWHUsROsF9nFC6753Xa9E=";
+      };
+    }
+    {
+      name = "onetime___onetime_2.0.1.tgz";
+      path = fetchurl {
+        name = "onetime___onetime_2.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz";
+        sha1 = "BnQoIw/WdEOyeUsiu6UotoZ5YtQ=";
+      };
+    }
+    {
+      name = "optionator___optionator_0.8.3.tgz";
+      path = fetchurl {
+        name = "optionator___optionator_0.8.3.tgz";
+        url  = "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz";
+        sha512 = "+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==";
+      };
+    }
+    {
+      name = "os_locale___os_locale_2.1.0.tgz";
+      path = fetchurl {
+        name = "os_locale___os_locale_2.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz";
+        sha512 = "3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==";
+      };
+    }
+    {
+      name = "os_tmpdir___os_tmpdir_1.0.2.tgz";
+      path = fetchurl {
+        name = "os_tmpdir___os_tmpdir_1.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz";
+        sha1 = "u+Z0BseaqFxc/sdm/lc0VV36EnQ=";
+      };
+    }
+    {
+      name = "p_finally___p_finally_1.0.0.tgz";
+      path = fetchurl {
+        name = "p_finally___p_finally_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz";
+        sha1 = "P7z7FbiZpEEjs0ttzBi3JDNqLK4=";
+      };
+    }
+    {
+      name = "p_limit___p_limit_1.3.0.tgz";
+      path = fetchurl {
+        name = "p_limit___p_limit_1.3.0.tgz";
+        url  = "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz";
+        sha512 = "vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==";
+      };
+    }
+    {
+      name = "p_limit___p_limit_2.3.0.tgz";
+      path = fetchurl {
+        name = "p_limit___p_limit_2.3.0.tgz";
+        url  = "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz";
+        sha512 = "//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==";
+      };
+    }
+    {
+      name = "p_locate___p_locate_2.0.0.tgz";
+      path = fetchurl {
+        name = "p_locate___p_locate_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz";
+        sha1 = "IKAQOyIqcMj9OcwuWAaA893l7EM=";
+      };
+    }
+    {
+      name = "p_locate___p_locate_3.0.0.tgz";
+      path = fetchurl {
+        name = "p_locate___p_locate_3.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz";
+        sha512 = "x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==";
+      };
+    }
+    {
+      name = "p_map___p_map_1.2.0.tgz";
+      path = fetchurl {
+        name = "p_map___p_map_1.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz";
+        sha512 = "r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==";
+      };
+    }
+    {
+      name = "p_map___p_map_2.1.0.tgz";
+      path = fetchurl {
+        name = "p_map___p_map_2.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz";
+        sha512 = "y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==";
+      };
+    }
+    {
+      name = "p_try___p_try_1.0.0.tgz";
+      path = fetchurl {
+        name = "p_try___p_try_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz";
+        sha1 = "y8ec26+P1CKOE/Yh8rGiN8GyB7M=";
+      };
+    }
+    {
+      name = "p_try___p_try_2.2.0.tgz";
+      path = fetchurl {
+        name = "p_try___p_try_2.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz";
+        sha512 = "R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==";
+      };
+    }
+    {
+      name = "parent_module___parent_module_1.0.1.tgz";
+      path = fetchurl {
+        name = "parent_module___parent_module_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz";
+        sha512 = "GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==";
+      };
+    }
+    {
+      name = "parse_json___parse_json_2.2.0.tgz";
+      path = fetchurl {
+        name = "parse_json___parse_json_2.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz";
+        sha1 = "9ID0BDTvgHQfhGkJn43qGPVaTck=";
+      };
+    }
+    {
+      name = "parse_json___parse_json_4.0.0.tgz";
+      path = fetchurl {
+        name = "parse_json___parse_json_4.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz";
+        sha1 = "vjX1Qlvh9/bHRxhPmKeIy5lHfuA=";
+      };
+    }
+    {
+      name = "pascalcase___pascalcase_0.1.1.tgz";
+      path = fetchurl {
+        name = "pascalcase___pascalcase_0.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz";
+        sha1 = "s2PlXoAGym/iF4TS2yK9FdeRfxQ=";
+      };
+    }
+    {
+      name = "path_exists___path_exists_3.0.0.tgz";
+      path = fetchurl {
+        name = "path_exists___path_exists_3.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz";
+        sha1 = "zg6+ql94yxiSXqfYENe1mwEP1RU=";
+      };
+    }
+    {
+      name = "path_is_absolute___path_is_absolute_1.0.1.tgz";
+      path = fetchurl {
+        name = "path_is_absolute___path_is_absolute_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz";
+        sha1 = "F0uSaHNVNP+8es5r9TpanhtcX18=";
+      };
+    }
+    {
+      name = "path_is_inside___path_is_inside_1.0.2.tgz";
+      path = fetchurl {
+        name = "path_is_inside___path_is_inside_1.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz";
+        sha1 = "NlQX3t5EQw0cEa9hAn+s8HS9/FM=";
+      };
+    }
+    {
+      name = "path_key___path_key_2.0.1.tgz";
+      path = fetchurl {
+        name = "path_key___path_key_2.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz";
+        sha1 = "QRyttXTFoUDTpLGRDUDYDMn0C0A=";
+      };
+    }
+    {
+      name = "path_parse___path_parse_1.0.6.tgz";
+      path = fetchurl {
+        name = "path_parse___path_parse_1.0.6.tgz";
+        url  = "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz";
+        sha512 = "GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==";
+      };
+    }
+    {
+      name = "path_type___path_type_2.0.0.tgz";
+      path = fetchurl {
+        name = "path_type___path_type_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz";
+        sha1 = "8BLMuEFbcJb8LaoQVMPXI4lZTHM=";
+      };
+    }
+    {
+      name = "pify___pify_2.3.0.tgz";
+      path = fetchurl {
+        name = "pify___pify_2.3.0.tgz";
+        url  = "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz";
+        sha1 = "7RQaasBDqEnqWISY59yosVMw6Qw=";
+      };
+    }
+    {
+      name = "pify___pify_3.0.0.tgz";
+      path = fetchurl {
+        name = "pify___pify_3.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz";
+        sha1 = "5aSs0sEB/fPZpNB/DbxNtJ3SgXY=";
+      };
+    }
+    {
+      name = "pinkie_promise___pinkie_promise_2.0.1.tgz";
+      path = fetchurl {
+        name = "pinkie_promise___pinkie_promise_2.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz";
+        sha1 = "ITXW36ejWMBprJsXh3YogihFD/o=";
+      };
+    }
+    {
+      name = "pinkie___pinkie_2.0.4.tgz";
+      path = fetchurl {
+        name = "pinkie___pinkie_2.0.4.tgz";
+        url  = "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz";
+        sha1 = "clVrgM+g1IqXToDnckjoDtT3+HA=";
+      };
+    }
+    {
+      name = "pkg_dir___pkg_dir_2.0.0.tgz";
+      path = fetchurl {
+        name = "pkg_dir___pkg_dir_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz";
+        sha1 = "9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=";
+      };
+    }
+    {
+      name = "pkg_dir___pkg_dir_3.0.0.tgz";
+      path = fetchurl {
+        name = "pkg_dir___pkg_dir_3.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz";
+        sha512 = "/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==";
+      };
+    }
+    {
+      name = "please_upgrade_node___please_upgrade_node_3.2.0.tgz";
+      path = fetchurl {
+        name = "please_upgrade_node___please_upgrade_node_3.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz";
+        sha512 = "gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==";
+      };
+    }
+    {
+      name = "pluralize___pluralize_7.0.0.tgz";
+      path = fetchurl {
+        name = "pluralize___pluralize_7.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz";
+        sha512 = "ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==";
+      };
+    }
+    {
+      name = "posix_character_classes___posix_character_classes_0.1.1.tgz";
+      path = fetchurl {
+        name = "posix_character_classes___posix_character_classes_0.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz";
+        sha1 = "AerA/jta9xoqbAL+q7jB/vfgDqs=";
+      };
+    }
+    {
+      name = "prelude_ls___prelude_ls_1.1.2.tgz";
+      path = fetchurl {
+        name = "prelude_ls___prelude_ls_1.1.2.tgz";
+        url  = "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz";
+        sha1 = "IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=";
+      };
+    }
+    {
+      name = "prettier_eslint_cli___prettier_eslint_cli_4.7.1.tgz";
+      path = fetchurl {
+        name = "prettier_eslint_cli___prettier_eslint_cli_4.7.1.tgz";
+        url  = "https://registry.yarnpkg.com/prettier-eslint-cli/-/prettier-eslint-cli-4.7.1.tgz";
+        sha512 = "hQbsGaEVz97oBBcKdsJ46khv0kOGkMyWrXzcFOXW6X8UuetZ/j0yDJkNJgUTVc6PVFbbzBXk+qgd5vos9qzXPQ==";
+      };
+    }
+    {
+      name = "prettier_eslint___prettier_eslint_8.8.2.tgz";
+      path = fetchurl {
+        name = "prettier_eslint___prettier_eslint_8.8.2.tgz";
+        url  = "https://registry.yarnpkg.com/prettier-eslint/-/prettier-eslint-8.8.2.tgz";
+        sha512 = "2UzApPuxi2yRoyMlXMazgR6UcH9DKJhNgCviIwY3ixZ9THWSSrUww5vkiZ3C48WvpFl1M1y/oU63deSy1puWEA==";
+      };
+    }
+    {
+      name = "prettier___prettier_1.19.1.tgz";
+      path = fetchurl {
+        name = "prettier___prettier_1.19.1.tgz";
+        url  = "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz";
+        sha512 = "s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==";
+      };
+    }
+    {
+      name = "pretty_format___pretty_format_23.6.0.tgz";
+      path = fetchurl {
+        name = "pretty_format___pretty_format_23.6.0.tgz";
+        url  = "https://registry.yarnpkg.com/pretty-format/-/pretty-format-23.6.0.tgz";
+        sha512 = "zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw==";
+      };
+    }
+    {
+      name = "process_nextick_args___process_nextick_args_2.0.1.tgz";
+      path = fetchurl {
+        name = "process_nextick_args___process_nextick_args_2.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz";
+        sha512 = "3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==";
+      };
+    }
+    {
+      name = "progress___progress_2.0.3.tgz";
+      path = fetchurl {
+        name = "progress___progress_2.0.3.tgz";
+        url  = "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz";
+        sha512 = "7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==";
+      };
+    }
+    {
+      name = "prop_types___prop_types_15.7.2.tgz";
+      path = fetchurl {
+        name = "prop_types___prop_types_15.7.2.tgz";
+        url  = "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz";
+        sha512 = "8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==";
+      };
+    }
+    {
+      name = "property_expr___property_expr_1.5.1.tgz";
+      path = fetchurl {
+        name = "property_expr___property_expr_1.5.1.tgz";
+        url  = "https://registry.yarnpkg.com/property-expr/-/property-expr-1.5.1.tgz";
+        sha512 = "CGuc0VUTGthpJXL36ydB6jnbyOf/rAHFvmVrJlH+Rg0DqqLFQGAP6hIaxD/G0OAmBJPhXDHuEJigrp0e0wFV6g==";
+      };
+    }
+    {
+      name = "pseudomap___pseudomap_1.0.2.tgz";
+      path = fetchurl {
+        name = "pseudomap___pseudomap_1.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz";
+        sha1 = "8FKijacOYYkX7wqKw0wa5aaChrM=";
+      };
+    }
+    {
+      name = "pump___pump_3.0.0.tgz";
+      path = fetchurl {
+        name = "pump___pump_3.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz";
+        sha512 = "LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==";
+      };
+    }
+    {
+      name = "punycode___punycode_2.1.1.tgz";
+      path = fetchurl {
+        name = "punycode___punycode_2.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz";
+        sha512 = "XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==";
+      };
+    }
+    {
+      name = "quick_lru___quick_lru_1.1.0.tgz";
+      path = fetchurl {
+        name = "quick_lru___quick_lru_1.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz";
+        sha1 = "Q2CxfGETatOAeDl/8RQW4Ybc+7g=";
+      };
+    }
+    {
+      name = "ramda___ramda_0.26.1.tgz";
+      path = fetchurl {
+        name = "ramda___ramda_0.26.1.tgz";
+        url  = "https://registry.yarnpkg.com/ramda/-/ramda-0.26.1.tgz";
+        sha512 = "hLWjpy7EnsDBb0p+Z3B7rPi3GDeRG5ZtiI33kJhTt+ORCd38AbAIjB/9zRIUoeTbE/AVX5ZkU7m6bznsvrf8eQ==";
+      };
+    }
+    {
+      name = "react_is___react_is_16.13.1.tgz";
+      path = fetchurl {
+        name = "react_is___react_is_16.13.1.tgz";
+        url  = "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz";
+        sha512 = "24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==";
+      };
+    }
+    {
+      name = "read_pkg_up___read_pkg_up_2.0.0.tgz";
+      path = fetchurl {
+        name = "read_pkg_up___read_pkg_up_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz";
+        sha1 = "a3KoBImE4MQeeVEP1en6mbO1Sb4=";
+      };
+    }
+    {
+      name = "read_pkg___read_pkg_2.0.0.tgz";
+      path = fetchurl {
+        name = "read_pkg___read_pkg_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz";
+        sha1 = "jvHAYjxqbbDcZxPEv6xGMysjaPg=";
+      };
+    }
+    {
+      name = "read_pkg___read_pkg_4.0.1.tgz";
+      path = fetchurl {
+        name = "read_pkg___read_pkg_4.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/read-pkg/-/read-pkg-4.0.1.tgz";
+        sha1 = "ljYlN48+HE1IyFhytabsfV0JMjc=";
+      };
+    }
+    {
+      name = "readable_stream___readable_stream_2.3.7.tgz";
+      path = fetchurl {
+        name = "readable_stream___readable_stream_2.3.7.tgz";
+        url  = "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz";
+        sha512 = "Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==";
+      };
+    }
+    {
+      name = "regenerator_runtime___regenerator_runtime_0.11.1.tgz";
+      path = fetchurl {
+        name = "regenerator_runtime___regenerator_runtime_0.11.1.tgz";
+        url  = "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz";
+        sha512 = "MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==";
+      };
+    }
+    {
+      name = "regenerator_runtime___regenerator_runtime_0.13.5.tgz";
+      path = fetchurl {
+        name = "regenerator_runtime___regenerator_runtime_0.13.5.tgz";
+        url  = "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz";
+        sha512 = "ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==";
+      };
+    }
+    {
+      name = "regex_not___regex_not_1.0.2.tgz";
+      path = fetchurl {
+        name = "regex_not___regex_not_1.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz";
+        sha512 = "J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==";
+      };
+    }
+    {
+      name = "regexp.prototype.flags___regexp.prototype.flags_1.3.0.tgz";
+      path = fetchurl {
+        name = "regexp.prototype.flags___regexp.prototype.flags_1.3.0.tgz";
+        url  = "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz";
+        sha512 = "2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==";
+      };
+    }
+    {
+      name = "regexpp___regexpp_1.1.0.tgz";
+      path = fetchurl {
+        name = "regexpp___regexpp_1.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/regexpp/-/regexpp-1.1.0.tgz";
+        sha512 = "LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==";
+      };
+    }
+    {
+      name = "regexpp___regexpp_2.0.1.tgz";
+      path = fetchurl {
+        name = "regexpp___regexpp_2.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz";
+        sha512 = "lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==";
+      };
+    }
+    {
+      name = "repeat_element___repeat_element_1.1.3.tgz";
+      path = fetchurl {
+        name = "repeat_element___repeat_element_1.1.3.tgz";
+        url  = "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz";
+        sha512 = "ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==";
+      };
+    }
+    {
+      name = "repeat_string___repeat_string_1.6.1.tgz";
+      path = fetchurl {
+        name = "repeat_string___repeat_string_1.6.1.tgz";
+        url  = "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz";
+        sha1 = "jcrkcOHIirwtYA//Sndihtp15jc=";
+      };
+    }
+    {
+      name = "require_directory___require_directory_2.1.1.tgz";
+      path = fetchurl {
+        name = "require_directory___require_directory_2.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz";
+        sha1 = "jGStX9MNqxyXbiNE/+f3kqam30I=";
+      };
+    }
+    {
+      name = "require_main_filename___require_main_filename_1.0.1.tgz";
+      path = fetchurl {
+        name = "require_main_filename___require_main_filename_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz";
+        sha1 = "l/cXtp1IeE9fUmpsWqj/3aBVpNE=";
+      };
+    }
+    {
+      name = "require_relative___require_relative_0.8.7.tgz";
+      path = fetchurl {
+        name = "require_relative___require_relative_0.8.7.tgz";
+        url  = "https://registry.yarnpkg.com/require-relative/-/require-relative-0.8.7.tgz";
+        sha1 = "eZlTn8ngR6N5KPoZb44VY9q9Nt4=";
+      };
+    }
+    {
+      name = "require_uncached___require_uncached_1.0.3.tgz";
+      path = fetchurl {
+        name = "require_uncached___require_uncached_1.0.3.tgz";
+        url  = "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz";
+        sha1 = "Tg1W1slmL9MeQwEcS5WqSZVUIdM=";
+      };
+    }
+    {
+      name = "reserved_words___reserved_words_0.1.2.tgz";
+      path = fetchurl {
+        name = "reserved_words___reserved_words_0.1.2.tgz";
+        url  = "https://registry.yarnpkg.com/reserved-words/-/reserved-words-0.1.2.tgz";
+        sha1 = "AKCUD5jNUBrqqsMWQR2a3FKzGrE=";
+      };
+    }
+    {
+      name = "resolve_from___resolve_from_1.0.1.tgz";
+      path = fetchurl {
+        name = "resolve_from___resolve_from_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz";
+        sha1 = "Jsv+k10a7uq7Kbw/5a6wHpPUQiY=";
+      };
+    }
+    {
+      name = "resolve_from___resolve_from_3.0.0.tgz";
+      path = fetchurl {
+        name = "resolve_from___resolve_from_3.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz";
+        sha1 = "six699nWiBvItuZTM17rywoYh0g=";
+      };
+    }
+    {
+      name = "resolve_from___resolve_from_4.0.0.tgz";
+      path = fetchurl {
+        name = "resolve_from___resolve_from_4.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz";
+        sha512 = "pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==";
+      };
+    }
+    {
+      name = "resolve_url___resolve_url_0.2.1.tgz";
+      path = fetchurl {
+        name = "resolve_url___resolve_url_0.2.1.tgz";
+        url  = "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz";
+        sha1 = "LGN/53yJOv0qZj/iGqkIAGjiBSo=";
+      };
+    }
+    {
+      name = "resolve___resolve_1.17.0.tgz";
+      path = fetchurl {
+        name = "resolve___resolve_1.17.0.tgz";
+        url  = "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz";
+        sha512 = "ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==";
+      };
+    }
+    {
+      name = "restore_cursor___restore_cursor_2.0.0.tgz";
+      path = fetchurl {
+        name = "restore_cursor___restore_cursor_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz";
+        sha1 = "n37ih/gv0ybU/RYpI9YhKe7g368=";
+      };
+    }
+    {
+      name = "ret___ret_0.1.15.tgz";
+      path = fetchurl {
+        name = "ret___ret_0.1.15.tgz";
+        url  = "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz";
+        sha512 = "TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==";
+      };
+    }
+    {
+      name = "rimraf___rimraf_2.6.3.tgz";
+      path = fetchurl {
+        name = "rimraf___rimraf_2.6.3.tgz";
+        url  = "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz";
+        sha512 = "mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==";
+      };
+    }
+    {
+      name = "rimraf___rimraf_2.7.1.tgz";
+      path = fetchurl {
+        name = "rimraf___rimraf_2.7.1.tgz";
+        url  = "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz";
+        sha512 = "uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==";
+      };
+    }
+    {
+      name = "run_async___run_async_2.4.1.tgz";
+      path = fetchurl {
+        name = "run_async___run_async_2.4.1.tgz";
+        url  = "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz";
+        sha512 = "tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==";
+      };
+    }
+    {
+      name = "run_node___run_node_1.0.0.tgz";
+      path = fetchurl {
+        name = "run_node___run_node_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/run-node/-/run-node-1.0.0.tgz";
+        sha512 = "kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A==";
+      };
+    }
+    {
+      name = "rx_lite_aggregates___rx_lite_aggregates_4.0.8.tgz";
+      path = fetchurl {
+        name = "rx_lite_aggregates___rx_lite_aggregates_4.0.8.tgz";
+        url  = "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz";
+        sha1 = "dTuHqJoRyVRnxKwWJsTvxOBcZ74=";
+      };
+    }
+    {
+      name = "rx_lite___rx_lite_4.0.8.tgz";
+      path = fetchurl {
+        name = "rx_lite___rx_lite_4.0.8.tgz";
+        url  = "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz";
+        sha1 = "Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=";
+      };
+    }
+    {
+      name = "rxjs___rxjs_5.5.12.tgz";
+      path = fetchurl {
+        name = "rxjs___rxjs_5.5.12.tgz";
+        url  = "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.12.tgz";
+        sha512 = "xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw==";
+      };
+    }
+    {
+      name = "rxjs___rxjs_6.5.5.tgz";
+      path = fetchurl {
+        name = "rxjs___rxjs_6.5.5.tgz";
+        url  = "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.5.tgz";
+        sha512 = "WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ==";
+      };
+    }
+    {
+      name = "safe_buffer___safe_buffer_5.1.2.tgz";
+      path = fetchurl {
+        name = "safe_buffer___safe_buffer_5.1.2.tgz";
+        url  = "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz";
+        sha512 = "Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==";
+      };
+    }
+    {
+      name = "safe_regex___safe_regex_1.1.0.tgz";
+      path = fetchurl {
+        name = "safe_regex___safe_regex_1.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz";
+        sha1 = "QKNmnzsHfR6UPURinhV91IAjvy4=";
+      };
+    }
+    {
+      name = "safer_buffer___safer_buffer_2.1.2.tgz";
+      path = fetchurl {
+        name = "safer_buffer___safer_buffer_2.1.2.tgz";
+        url  = "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz";
+        sha512 = "YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==";
+      };
+    }
+    {
+      name = "semver_compare___semver_compare_1.0.0.tgz";
+      path = fetchurl {
+        name = "semver_compare___semver_compare_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz";
+        sha1 = "De4hahyUGrN+nvsXiPavxf9VN/w=";
+      };
+    }
+    {
+      name = "semver___semver_5.7.1.tgz";
+      path = fetchurl {
+        name = "semver___semver_5.7.1.tgz";
+        url  = "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz";
+        sha512 = "sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==";
+      };
+    }
+    {
+      name = "semver___semver_5.5.0.tgz";
+      path = fetchurl {
+        name = "semver___semver_5.5.0.tgz";
+        url  = "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz";
+        sha512 = "4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==";
+      };
+    }
+    {
+      name = "set_blocking___set_blocking_2.0.0.tgz";
+      path = fetchurl {
+        name = "set_blocking___set_blocking_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz";
+        sha1 = "BF+XgtARrppoA93TgrJDkrPYkPc=";
+      };
+    }
+    {
+      name = "set_value___set_value_2.0.1.tgz";
+      path = fetchurl {
+        name = "set_value___set_value_2.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz";
+        sha512 = "JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==";
+      };
+    }
+    {
+      name = "shebang_command___shebang_command_1.2.0.tgz";
+      path = fetchurl {
+        name = "shebang_command___shebang_command_1.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz";
+        sha1 = "RKrGW2lbAzmJaMOfNj/uXer98eo=";
+      };
+    }
+    {
+      name = "shebang_regex___shebang_regex_1.0.0.tgz";
+      path = fetchurl {
+        name = "shebang_regex___shebang_regex_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz";
+        sha1 = "2kL0l0DAtC2yypcoVxyxkMmO/qM=";
+      };
+    }
+    {
+      name = "side_channel___side_channel_1.0.2.tgz";
+      path = fetchurl {
+        name = "side_channel___side_channel_1.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.2.tgz";
+        sha512 = "7rL9YlPHg7Ancea1S96Pa8/QWb4BtXL/TZvS6B8XFetGBeuhAsfmUspK6DokBeZ64+Kj9TCNRD/30pVz1BvQNA==";
+      };
+    }
+    {
+      name = "signal_exit___signal_exit_3.0.3.tgz";
+      path = fetchurl {
+        name = "signal_exit___signal_exit_3.0.3.tgz";
+        url  = "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz";
+        sha512 = "VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==";
+      };
+    }
+    {
+      name = "simple_git___simple_git_1.132.0.tgz";
+      path = fetchurl {
+        name = "simple_git___simple_git_1.132.0.tgz";
+        url  = "https://registry.yarnpkg.com/simple-git/-/simple-git-1.132.0.tgz";
+        sha512 = "xauHm1YqCTom1sC9eOjfq3/9RKiUA9iPnxBbrY2DdL8l4ADMu0jjM5l5lphQP5YWNqAL2aXC/OeuQ76vHtW5fg==";
+      };
+    }
+    {
+      name = "slash___slash_2.0.0.tgz";
+      path = fetchurl {
+        name = "slash___slash_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz";
+        sha512 = "ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==";
+      };
+    }
+    {
+      name = "slice_ansi___slice_ansi_0.0.4.tgz";
+      path = fetchurl {
+        name = "slice_ansi___slice_ansi_0.0.4.tgz";
+        url  = "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz";
+        sha1 = "7b+JA/ZvfOL46v1s7tZeJkyDGzU=";
+      };
+    }
+    {
+      name = "slice_ansi___slice_ansi_1.0.0.tgz";
+      path = fetchurl {
+        name = "slice_ansi___slice_ansi_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz";
+        sha512 = "POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==";
+      };
+    }
+    {
+      name = "slice_ansi___slice_ansi_2.1.0.tgz";
+      path = fetchurl {
+        name = "slice_ansi___slice_ansi_2.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz";
+        sha512 = "Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==";
+      };
+    }
+    {
+      name = "snapdragon_node___snapdragon_node_2.1.1.tgz";
+      path = fetchurl {
+        name = "snapdragon_node___snapdragon_node_2.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz";
+        sha512 = "O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==";
+      };
+    }
+    {
+      name = "snapdragon_util___snapdragon_util_3.0.1.tgz";
+      path = fetchurl {
+        name = "snapdragon_util___snapdragon_util_3.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz";
+        sha512 = "mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==";
+      };
+    }
+    {
+      name = "snapdragon___snapdragon_0.8.2.tgz";
+      path = fetchurl {
+        name = "snapdragon___snapdragon_0.8.2.tgz";
+        url  = "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz";
+        sha512 = "FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==";
+      };
+    }
+    {
+      name = "source_map_resolve___source_map_resolve_0.5.3.tgz";
+      path = fetchurl {
+        name = "source_map_resolve___source_map_resolve_0.5.3.tgz";
+        url  = "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz";
+        sha512 = "Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==";
+      };
+    }
+    {
+      name = "source_map_url___source_map_url_0.4.0.tgz";
+      path = fetchurl {
+        name = "source_map_url___source_map_url_0.4.0.tgz";
+        url  = "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz";
+        sha1 = "PpNdfd1zYxuXZZlW1VEo6HtQhKM=";
+      };
+    }
+    {
+      name = "source_map___source_map_0.5.7.tgz";
+      path = fetchurl {
+        name = "source_map___source_map_0.5.7.tgz";
+        url  = "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz";
+        sha1 = "igOdLRAh0i0eoUyA2OpGi6LvP8w=";
+      };
+    }
+    {
+      name = "spdx_correct___spdx_correct_3.1.0.tgz";
+      path = fetchurl {
+        name = "spdx_correct___spdx_correct_3.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz";
+        sha512 = "lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==";
+      };
+    }
+    {
+      name = "spdx_exceptions___spdx_exceptions_2.3.0.tgz";
+      path = fetchurl {
+        name = "spdx_exceptions___spdx_exceptions_2.3.0.tgz";
+        url  = "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz";
+        sha512 = "/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==";
+      };
+    }
+    {
+      name = "spdx_expression_parse___spdx_expression_parse_3.0.1.tgz";
+      path = fetchurl {
+        name = "spdx_expression_parse___spdx_expression_parse_3.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz";
+        sha512 = "cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==";
+      };
+    }
+    {
+      name = "spdx_license_ids___spdx_license_ids_3.0.5.tgz";
+      path = fetchurl {
+        name = "spdx_license_ids___spdx_license_ids_3.0.5.tgz";
+        url  = "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz";
+        sha512 = "J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==";
+      };
+    }
+    {
+      name = "split_string___split_string_3.1.0.tgz";
+      path = fetchurl {
+        name = "split_string___split_string_3.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz";
+        sha512 = "NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==";
+      };
+    }
+    {
+      name = "sprintf_js___sprintf_js_1.0.3.tgz";
+      path = fetchurl {
+        name = "sprintf_js___sprintf_js_1.0.3.tgz";
+        url  = "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz";
+        sha1 = "BOaSb2YolTVPPdAVIDYzuFcpfiw=";
+      };
+    }
+    {
+      name = "ssri___ssri_10.0.0.tgz";
+      path = fetchurl {
+        name = "ssri___ssri_10.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/ssri/-/ssri-10.0.0.tgz";
+        sha512 = "64ghGOpqW0k+jh7m5jndBGdVEoPikWwGQmBNN5ks6jyUSMymzHDTlnNHOvzp+6MmHOljr2MokUzvRksnTwG0Iw==";
+      };
+    }
+    {
+      name = "staged_git_files___staged_git_files_1.1.2.tgz";
+      path = fetchurl {
+        name = "staged_git_files___staged_git_files_1.1.2.tgz";
+        url  = "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-1.1.2.tgz";
+        sha512 = "0Eyrk6uXW6tg9PYkhi/V/J4zHp33aNyi2hOCmhFLqLTIhbgqWn5jlSzI+IU0VqrZq6+DbHcabQl/WP6P3BG0QA==";
+      };
+    }
+    {
+      name = "static_extend___static_extend_0.1.2.tgz";
+      path = fetchurl {
+        name = "static_extend___static_extend_0.1.2.tgz";
+        url  = "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz";
+        sha1 = "YICcOcv/VTNyJv1eC1IPNB8ftcY=";
+      };
+    }
+    {
+      name = "string_argv___string_argv_0.0.2.tgz";
+      path = fetchurl {
+        name = "string_argv___string_argv_0.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/string-argv/-/string-argv-0.0.2.tgz";
+        sha1 = "2sMECGkMIfPDYwo/86BYd73L1zY=";
+      };
+    }
+    {
+      name = "string_width___string_width_1.0.2.tgz";
+      path = fetchurl {
+        name = "string_width___string_width_1.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz";
+        sha1 = "EYvfW4zcUaKn5w0hHgfisLmxB9M=";
+      };
+    }
+    {
+      name = "string_width___string_width_2.1.1.tgz";
+      path = fetchurl {
+        name = "string_width___string_width_2.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz";
+        sha512 = "nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==";
+      };
+    }
+    {
+      name = "string_width___string_width_3.1.0.tgz";
+      path = fetchurl {
+        name = "string_width___string_width_3.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz";
+        sha512 = "vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==";
+      };
+    }
+    {
+      name = "string.prototype.matchall___string.prototype.matchall_4.0.2.tgz";
+      path = fetchurl {
+        name = "string.prototype.matchall___string.prototype.matchall_4.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.2.tgz";
+        sha512 = "N/jp6O5fMf9os0JU3E72Qhf590RSRZU/ungsL/qJUYVTNv7hTG0P/dbPjxINVN9jpscu3nzYwKESU3P3RY5tOg==";
+      };
+    }
+    {
+      name = "string.prototype.trimend___string.prototype.trimend_1.0.1.tgz";
+      path = fetchurl {
+        name = "string.prototype.trimend___string.prototype.trimend_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz";
+        sha512 = "LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==";
+      };
+    }
+    {
+      name = "string.prototype.trimleft___string.prototype.trimleft_2.1.2.tgz";
+      path = fetchurl {
+        name = "string.prototype.trimleft___string.prototype.trimleft_2.1.2.tgz";
+        url  = "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz";
+        sha512 = "gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==";
+      };
+    }
+    {
+      name = "string.prototype.trimright___string.prototype.trimright_2.1.2.tgz";
+      path = fetchurl {
+        name = "string.prototype.trimright___string.prototype.trimright_2.1.2.tgz";
+        url  = "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz";
+        sha512 = "ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==";
+      };
+    }
+    {
+      name = "string.prototype.trimstart___string.prototype.trimstart_1.0.1.tgz";
+      path = fetchurl {
+        name = "string.prototype.trimstart___string.prototype.trimstart_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz";
+        sha512 = "XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==";
+      };
+    }
+    {
+      name = "string_decoder___string_decoder_1.1.1.tgz";
+      path = fetchurl {
+        name = "string_decoder___string_decoder_1.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz";
+        sha512 = "n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==";
+      };
+    }
+    {
+      name = "stringify_object___stringify_object_3.3.0.tgz";
+      path = fetchurl {
+        name = "stringify_object___stringify_object_3.3.0.tgz";
+        url  = "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz";
+        sha512 = "rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==";
+      };
+    }
+    {
+      name = "strip_ansi___strip_ansi_3.0.1.tgz";
+      path = fetchurl {
+        name = "strip_ansi___strip_ansi_3.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz";
+        sha1 = "ajhfuIU9lS1f8F0Oiq+UJ43GPc8=";
+      };
+    }
+    {
+      name = "strip_ansi___strip_ansi_4.0.0.tgz";
+      path = fetchurl {
+        name = "strip_ansi___strip_ansi_4.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz";
+        sha1 = "qEeQIusaw2iocTibY1JixQXuNo8=";
+      };
+    }
+    {
+      name = "strip_ansi___strip_ansi_5.2.0.tgz";
+      path = fetchurl {
+        name = "strip_ansi___strip_ansi_5.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz";
+        sha512 = "DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==";
+      };
+    }
+    {
+      name = "strip_bom___strip_bom_3.0.0.tgz";
+      path = fetchurl {
+        name = "strip_bom___strip_bom_3.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz";
+        sha1 = "IzTBjpx1n3vdVv3vfprj1YjmjtM=";
+      };
+    }
+    {
+      name = "strip_eof___strip_eof_1.0.0.tgz";
+      path = fetchurl {
+        name = "strip_eof___strip_eof_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz";
+        sha1 = "u0P/VZim6wXYm1n80SnJgzE2Br8=";
+      };
+    }
+    {
+      name = "strip_json_comments___strip_json_comments_2.0.1.tgz";
+      path = fetchurl {
+        name = "strip_json_comments___strip_json_comments_2.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz";
+        sha1 = "PFMZQukIwml8DsNEhYwobHygpgo=";
+      };
+    }
+    {
+      name = "supports_color___supports_color_2.0.0.tgz";
+      path = fetchurl {
+        name = "supports_color___supports_color_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz";
+        sha1 = "U10EXOa2Nj+kARcIRimZXp3zJMc=";
+      };
+    }
+    {
+      name = "supports_color___supports_color_4.5.0.tgz";
+      path = fetchurl {
+        name = "supports_color___supports_color_4.5.0.tgz";
+        url  = "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz";
+        sha1 = "vnoN5ITexcXN34s9WRJQRJEvY1s=";
+      };
+    }
+    {
+      name = "supports_color___supports_color_5.5.0.tgz";
+      path = fetchurl {
+        name = "supports_color___supports_color_5.5.0.tgz";
+        url  = "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz";
+        sha512 = "QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==";
+      };
+    }
+    {
+      name = "symbol_observable___symbol_observable_1.0.1.tgz";
+      path = fetchurl {
+        name = "symbol_observable___symbol_observable_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz";
+        sha1 = "g0D8RwLDEi310iKI+IKD9RPT/dQ=";
+      };
+    }
+    {
+      name = "symbol_observable___symbol_observable_1.2.0.tgz";
+      path = fetchurl {
+        name = "symbol_observable___symbol_observable_1.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz";
+        sha512 = "e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==";
+      };
+    }
+    {
+      name = "synchronous_promise___synchronous_promise_2.0.12.tgz";
+      path = fetchurl {
+        name = "synchronous_promise___synchronous_promise_2.0.12.tgz";
+        url  = "https://registry.yarnpkg.com/synchronous-promise/-/synchronous-promise-2.0.12.tgz";
+        sha512 = "rIDJiHmIK02tXU+eW1v6a7rNIIiMLm5JUF5Uj2fT6oLSulg7WNDVoqvkYqkFoJzf4v2gmTLppvzegdo9R+7h1Q==";
+      };
+    }
+    {
+      name = "table___table_4.0.2.tgz";
+      path = fetchurl {
+        name = "table___table_4.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz";
+        sha512 = "UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==";
+      };
+    }
+    {
+      name = "table___table_5.4.6.tgz";
+      path = fetchurl {
+        name = "table___table_5.4.6.tgz";
+        url  = "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz";
+        sha512 = "wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==";
+      };
+    }
+    {
+      name = "text_table___text_table_0.2.0.tgz";
+      path = fetchurl {
+        name = "text_table___text_table_0.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz";
+        sha1 = "f17oI66AUgfACvLfSoTsP8+lcLQ=";
+      };
+    }
+    {
+      name = "through___through_2.3.8.tgz";
+      path = fetchurl {
+        name = "through___through_2.3.8.tgz";
+        url  = "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz";
+        sha1 = "DdTJ/6q8NXlgsbckEV1+Doai4fU=";
+      };
+    }
+    {
+      name = "tmp___tmp_0.0.33.tgz";
+      path = fetchurl {
+        name = "tmp___tmp_0.0.33.tgz";
+        url  = "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz";
+        sha512 = "jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==";
+      };
+    }
+    {
+      name = "to_fast_properties___to_fast_properties_2.0.0.tgz";
+      path = fetchurl {
+        name = "to_fast_properties___to_fast_properties_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz";
+        sha1 = "3F5pjL0HkmW8c+A3doGk5Og/YW4=";
+      };
+    }
+    {
+      name = "to_object_path___to_object_path_0.3.0.tgz";
+      path = fetchurl {
+        name = "to_object_path___to_object_path_0.3.0.tgz";
+        url  = "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz";
+        sha1 = "KXWIt7Dn4KwI4E5nL4XB9JmeF68=";
+      };
+    }
+    {
+      name = "to_regex_range___to_regex_range_2.1.1.tgz";
+      path = fetchurl {
+        name = "to_regex_range___to_regex_range_2.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz";
+        sha1 = "fIDBe53+vlmeJzZ+DU3VWQFB2zg=";
+      };
+    }
+    {
+      name = "to_regex___to_regex_3.0.2.tgz";
+      path = fetchurl {
+        name = "to_regex___to_regex_3.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz";
+        sha512 = "FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==";
+      };
+    }
+    {
+      name = "toposort___toposort_2.0.2.tgz";
+      path = fetchurl {
+        name = "toposort___toposort_2.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/toposort/-/toposort-2.0.2.tgz";
+        sha1 = "riF2gXXRVZ1IvvNUILL0li8JwzA=";
+      };
+    }
+    {
+      name = "tslib___tslib_1.13.0.tgz";
+      path = fetchurl {
+        name = "tslib___tslib_1.13.0.tgz";
+        url  = "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz";
+        sha512 = "i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==";
+      };
+    }
+    {
+      name = "type_check___type_check_0.3.2.tgz";
+      path = fetchurl {
+        name = "type_check___type_check_0.3.2.tgz";
+        url  = "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz";
+        sha1 = "WITKtRLPHTVeP7eE8wgEsrUg23I=";
+      };
+    }
+    {
+      name = "typedarray___typedarray_0.0.6.tgz";
+      path = fetchurl {
+        name = "typedarray___typedarray_0.0.6.tgz";
+        url  = "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz";
+        sha1 = "hnrHTjhkGHsdPUfZlqeOxciDB3c=";
+      };
+    }
+    {
+      name = "typescript_eslint_parser___typescript_eslint_parser_16.0.1.tgz";
+      path = fetchurl {
+        name = "typescript_eslint_parser___typescript_eslint_parser_16.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/typescript-eslint-parser/-/typescript-eslint-parser-16.0.1.tgz";
+        sha512 = "IKawLTu4A2xN3aN/cPLxvZ0bhxZHILGDKTZWvWNJ3sLNhJ3PjfMEDQmR2VMpdRPrmWOadgWXRwjLBzSA8AGsaQ==";
+      };
+    }
+    {
+      name = "typescript___typescript_2.9.2.tgz";
+      path = fetchurl {
+        name = "typescript___typescript_2.9.2.tgz";
+        url  = "https://registry.yarnpkg.com/typescript/-/typescript-2.9.2.tgz";
+        sha512 = "Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==";
+      };
+    }
+    {
+      name = "union_value___union_value_1.0.1.tgz";
+      path = fetchurl {
+        name = "union_value___union_value_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz";
+        sha512 = "tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==";
+      };
+    }
+    {
+      name = "unset_value___unset_value_1.0.0.tgz";
+      path = fetchurl {
+        name = "unset_value___unset_value_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz";
+        sha1 = "g3aHP30jNRef+x5vw6jtDfyKtVk=";
+      };
+    }
+    {
+      name = "uri_js___uri_js_4.2.2.tgz";
+      path = fetchurl {
+        name = "uri_js___uri_js_4.2.2.tgz";
+        url  = "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz";
+        sha512 = "KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==";
+      };
+    }
+    {
+      name = "urix___urix_0.1.0.tgz";
+      path = fetchurl {
+        name = "urix___urix_0.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz";
+        sha1 = "2pN/emLiH+wf0Y1Js1wpNQZ6bHI=";
+      };
+    }
+    {
+      name = "use___use_3.1.1.tgz";
+      path = fetchurl {
+        name = "use___use_3.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz";
+        sha512 = "cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==";
+      };
+    }
+    {
+      name = "util_deprecate___util_deprecate_1.0.2.tgz";
+      path = fetchurl {
+        name = "util_deprecate___util_deprecate_1.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz";
+        sha1 = "RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=";
+      };
+    }
+    {
+      name = "validate_npm_package_license___validate_npm_package_license_3.0.4.tgz";
+      path = fetchurl {
+        name = "validate_npm_package_license___validate_npm_package_license_3.0.4.tgz";
+        url  = "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz";
+        sha512 = "DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==";
+      };
+    }
+    {
+      name = "vue_eslint_parser___vue_eslint_parser_2.0.3.tgz";
+      path = fetchurl {
+        name = "vue_eslint_parser___vue_eslint_parser_2.0.3.tgz";
+        url  = "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-2.0.3.tgz";
+        sha512 = "ZezcU71Owm84xVF6gfurBQUGg8WQ+WZGxgDEQu1IHFBZNx7BFZg3L1yHxrCBNNwbwFtE1GuvfJKMtb6Xuwc/Bw==";
+      };
+    }
+    {
+      name = "which_module___which_module_2.0.0.tgz";
+      path = fetchurl {
+        name = "which_module___which_module_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz";
+        sha1 = "2e8H3Od7mQK4o6j6SzHD4/fm6Ho=";
+      };
+    }
+    {
+      name = "which___which_1.3.1.tgz";
+      path = fetchurl {
+        name = "which___which_1.3.1.tgz";
+        url  = "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz";
+        sha512 = "HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==";
+      };
+    }
+    {
+      name = "word_wrap___word_wrap_1.2.3.tgz";
+      path = fetchurl {
+        name = "word_wrap___word_wrap_1.2.3.tgz";
+        url  = "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz";
+        sha512 = "Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==";
+      };
+    }
+    {
+      name = "wrap_ansi___wrap_ansi_2.1.0.tgz";
+      path = fetchurl {
+        name = "wrap_ansi___wrap_ansi_2.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz";
+        sha1 = "2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=";
+      };
+    }
+    {
+      name = "wrap_ansi___wrap_ansi_3.0.1.tgz";
+      path = fetchurl {
+        name = "wrap_ansi___wrap_ansi_3.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz";
+        sha1 = "KIoE2H7aXChuBg3+jxNc6NAH+Lo=";
+      };
+    }
+    {
+      name = "wrappy___wrappy_1.0.2.tgz";
+      path = fetchurl {
+        name = "wrappy___wrappy_1.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz";
+        sha1 = "tSQ9jz7BqjXxNkYFvA0QNuMKtp8=";
+      };
+    }
+    {
+      name = "write___write_1.0.3.tgz";
+      path = fetchurl {
+        name = "write___write_1.0.3.tgz";
+        url  = "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz";
+        sha512 = "/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==";
+      };
+    }
+    {
+      name = "write___write_0.2.1.tgz";
+      path = fetchurl {
+        name = "write___write_0.2.1.tgz";
+        url  = "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz";
+        sha1 = "X8A4KOJkzqP+kUVUdvejxWbLB1c=";
+      };
+    }
+    {
+      name = "xregexp___xregexp_4.3.0.tgz";
+      path = fetchurl {
+        name = "xregexp___xregexp_4.3.0.tgz";
+        url  = "https://registry.yarnpkg.com/xregexp/-/xregexp-4.3.0.tgz";
+        sha512 = "7jXDIFXh5yJ/orPn4SXjuVrWWoi4Cr8jfV1eHv9CixKSbU+jY4mxfrBwAuDvupPNKpMUY+FeIqsVw/JLT9+B8g==";
+      };
+    }
+    {
+      name = "y18n___y18n_3.2.1.tgz";
+      path = fetchurl {
+        name = "y18n___y18n_3.2.1.tgz";
+        url  = "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz";
+        sha1 = "bRX7qITAhnnA136I53WegR4H+kE=";
+      };
+    }
+    {
+      name = "yallist___yallist_2.1.2.tgz";
+      path = fetchurl {
+        name = "yallist___yallist_2.1.2.tgz";
+        url  = "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz";
+        sha1 = "HBH5IY8HYImkfdUS+TxmmaaoHVI=";
+      };
+    }
+    {
+      name = "yallist___yallist_4.0.0.tgz";
+      path = fetchurl {
+        name = "yallist___yallist_4.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz";
+        sha512 = "3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==";
+      };
+    }
+    {
+      name = "yargs_parser___yargs_parser_8.1.0.tgz";
+      path = fetchurl {
+        name = "yargs_parser___yargs_parser_8.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-8.1.0.tgz";
+        sha512 = "yP+6QqN8BmrgW2ggLtTbdrOyBNSI7zBa4IykmiV5R1wl1JWNxQvWhMfMdmzIYtKU7oP3OOInY/tl2ov3BDjnJQ==";
+      };
+    }
+    {
+      name = "yargs___yargs_10.0.3.tgz";
+      path = fetchurl {
+        name = "yargs___yargs_10.0.3.tgz";
+        url  = "https://registry.yarnpkg.com/yargs/-/yargs-10.0.3.tgz";
+        sha512 = "DqBpQ8NAUX4GyPP/ijDGHsJya4tYqLQrjPr95HNsr1YwL3+daCfvBwg7+gIC6IdJhR2kATh3hb61vjzMWEtjdw==";
+      };
+    }
+    {
+      name = "yup___yup_0.27.0.tgz";
+      path = fetchurl {
+        name = "yup___yup_0.27.0.tgz";
+        url  = "https://registry.yarnpkg.com/yup/-/yup-0.27.0.tgz";
+        sha512 = "v1yFnE4+u9za42gG/b/081E7uNW9mUj3qtkmelLbW5YPROZzSH/KUUyJu9Wt8vxFJcT9otL/eZopS0YK1L5yPQ==";
+      };
+    }
+  ];
+}
diff --git a/nixpkgs/pkgs/development/tools/yo/default.nix b/nixpkgs/pkgs/development/tools/yo/default.nix
new file mode 100644
index 000000000000..325939a7609b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/yo/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, buildNpmPackage
+, fetchFromGitHub
+}:
+
+buildNpmPackage rec {
+  pname = "yo";
+  version = "4.3.1";
+
+  src = fetchFromGitHub {
+    owner = "yeoman";
+    repo = "yo";
+    rev = "v${version}";
+    hash = "sha256-vnvcg3hvAYcqS11enBEHtpTwTOy4puY5i/6zPOHCywo=";
+  };
+
+  npmDepsHash = "sha256-QkEPaepvI6NfEEmqnVA4Xx/tByn6goyGWVpoJNMigd8=";
+
+  dontNpmBuild = true;
+
+  meta = {
+    description = "CLI tool for running Yeoman generators";
+    homepage = "https://github.com/yeoman/yo";
+    license = lib.licenses.bsd2;
+    mainProgram = "yo";
+    maintainers = with lib.maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/yq-go/default.nix b/nixpkgs/pkgs/development/tools/yq-go/default.nix
new file mode 100644
index 000000000000..fb627f52e011
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/yq-go/default.nix
@@ -0,0 +1,40 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles, runCommand, yq-go }:
+
+buildGoModule rec {
+  pname = "yq-go";
+  version = "4.40.7";
+
+  src = fetchFromGitHub {
+    owner = "mikefarah";
+    repo = "yq";
+    rev = "v${version}";
+    hash = "sha256-VvA6PYJYRejGlYDb/gyHDQSNOwDWSE7vXPqYGrVLtko=";
+  };
+
+  vendorHash = "sha256-5jc9AQ1T4818kvAF6SU6JEdCQWt1gRJnESXRMGvqrB0=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    installShellCompletion --cmd yq \
+      --bash <($out/bin/yq shell-completion bash) \
+      --fish <($out/bin/yq shell-completion fish) \
+      --zsh <($out/bin/yq shell-completion zsh)
+  '';
+
+  passthru.tests = {
+    simple = runCommand "${pname}-test" { } ''
+      echo "test: 1" | ${yq-go}/bin/yq eval -j > $out
+      [ "$(cat $out | tr -d $'\n ')" = '{"test":1}' ]
+    '';
+  };
+
+  meta = with lib; {
+    description = "Portable command-line YAML processor";
+    homepage = "https://mikefarah.gitbook.io/yq/";
+    changelog = "https://github.com/mikefarah/yq/raw/v${version}/release_notes.txt";
+    mainProgram = "yq";
+    license = [ licenses.mit ];
+    maintainers = with maintainers; [ lewo SuperSandro2000 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ytt/default.nix b/nixpkgs/pkgs/development/tools/ytt/default.nix
new file mode 100644
index 000000000000..0520871d698c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ytt/default.nix
@@ -0,0 +1,37 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles }:
+
+buildGoModule rec {
+  pname = "ytt";
+  version = "0.48.0";
+
+  src = fetchFromGitHub {
+    owner = "vmware-tanzu";
+    repo = "carvel-ytt";
+    rev = "v${version}";
+    sha256 = "sha256-jHSSccD9jQGR2bblp1J9LQNPiTI47hsjPBmtPVmIRtI=";
+  };
+
+  vendorHash = null;
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  ldflags = [
+    "-X github.com/vmware-tanzu/carvel-ytt/pkg/version.Version=${version}"
+  ];
+
+  subPackages = [ "cmd/ytt" ];
+
+  postInstall = ''
+    installShellCompletion --cmd ytt \
+      --bash <($out/bin/ytt completion bash) \
+      --fish <($out/bin/ytt completion fish) \
+      --zsh <($out/bin/ytt completion zsh)
+  '';
+
+  meta = with lib; {
+    description = "YAML templating tool that allows configuration of complex software via reusable templates with user-provided values";
+    homepage = "https://get-ytt.io";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ brodes techknowlogick ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/yuicompressor/default.nix b/nixpkgs/pkgs/development/tools/yuicompressor/default.nix
new file mode 100644
index 000000000000..fdde9941bd5e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/yuicompressor/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchurl, makeWrapper, jre }:
+
+stdenv.mkDerivation rec {
+  pname = "yuicompressor";
+  version = "2.4.8";
+
+  src = fetchurl {
+    url = "https://github.com/yui/yuicompressor/releases/download/v${version}/${pname}-${version}.jar";
+    sha256 = "1qjxlak9hbl9zd3dl5ks0w4zx5z64wjsbk7ic73r1r45fasisdrh";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ jre ];
+
+  buildCommand = ''
+    mkdir -p $out/{bin,lib}
+    ln -s $src $out/lib/yuicompressor.jar
+    makeWrapper ${jre}/bin/java $out/bin/yuicompressor --add-flags \
+     "-cp $out/lib/yuicompressor.jar com.yahoo.platform.yui.compressor.YUICompressor"
+  '';
+
+  meta = with lib; {
+    description = "A JavaScript and CSS minifier";
+    homepage = "http://yui.github.io/yuicompressor/";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ jwiegley ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/zed/default.nix b/nixpkgs/pkgs/development/tools/zed/default.nix
new file mode 100644
index 000000000000..6164b6d4c624
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/zed/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, testers
+, zed
+}:
+
+buildGoModule rec {
+  pname = "zed";
+  version = "1.13.0";
+
+  src = fetchFromGitHub {
+    owner = "brimdata";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-xyTHCBvklK8x6V7WsWDYytnVEfLcja78crvs62WJJ9o=";
+  };
+
+  vendorHash = "sha256-m8GOKBwXlNhjEIkkbaIOAGslX4WRVPZ0OknGEG29b4E=";
+
+  subPackages = [ "cmd/zed" "cmd/zq" ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=github.com/brimdata/zed/cli.version=${version}"
+  ];
+
+  passthru.tests = {
+    zed-version = testers.testVersion {
+      package = zed;
+    };
+    zq-version = testers.testVersion {
+      package = zed;
+      command = "zq --version";
+    };
+  };
+
+  meta = with lib; {
+    description = "A novel data lake based on super-structured data";
+    homepage = "https://zed.brimdata.io";
+    changelog = "https://github.com/brimdata/zed/blob/v${version}/CHANGELOG.md";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ dit7ya knl ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/zld/default.nix b/nixpkgs/pkgs/development/tools/zld/default.nix
new file mode 100644
index 000000000000..95a642137f0b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/zld/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, lib, fetchzip }:
+
+stdenv.mkDerivation rec {
+  pname = "zld";
+  version = "1.3.4";
+  src = fetchzip {
+    url = "https://github.com/michaeleisel/zld/releases/download/${version}/zld.zip";
+    sha256 = "sha256-w1Pe96sdCbrfYdfBpD0BBXu7cFdW3cpo0PCn1+UyZI8=";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp zld $out/bin/
+  '';
+
+  meta = with lib; {
+    description = "A faster version of Apple's linker";
+    homepage = "https://github.com/michaeleisel/zld";
+    license = licenses.mit;
+    maintainers = [ maintainers.rgnns ];
+    platforms = platforms.darwin;
+    hydraPlatforms = [];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/zprint/default.nix b/nixpkgs/pkgs/development/tools/zprint/default.nix
new file mode 100644
index 000000000000..6e76f0819fc1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/zprint/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, buildGraalvmNativeImage
+, fetchurl
+, testers
+, zprint
+}:
+
+buildGraalvmNativeImage rec {
+  pname = "zprint";
+  version = "1.2.8";
+
+  src = fetchurl {
+    url = "https://github.com/kkinnear/${pname}/releases/download/${version}/${pname}-filter-${version}";
+    sha256 = "sha256-o0yoW45a5r+sTGvjEqr5VZgQKm72qsPH/kbLTbMTgEM=";
+  };
+
+  extraNativeImageBuildArgs = [
+    "--no-server"
+    "-H:EnableURLProtocols=https,http"
+    "-H:+ReportExceptionStackTraces"
+    "--report-unsupported-elements-at-runtime"
+    "--initialize-at-build-time"
+    "--no-fallback"
+  ];
+
+  passthru.tests.version = testers.testVersion {
+    inherit version;
+    package = zprint;
+    command = "zprint --version";
+  };
+
+  meta = with lib; {
+    description = "Clojure/EDN source code formatter and pretty printer";
+    longDescription = ''
+      Library and command line tool providing a variety of pretty printing capabilities
+      for both Clojure code and Clojure/EDN structures. It can meet almost anyone's needs.
+      As such, it supports a number of major source code formatting approaches
+    '';
+    homepage = "https://github.com/kkinnear/zprint";
+    license = licenses.mit;
+    maintainers = with maintainers; [ stelcodes ];
+    mainProgram = "zprint";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/zsv/default.nix b/nixpkgs/pkgs/development/tools/zsv/default.nix
new file mode 100644
index 000000000000..d9575d92bb38
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/zsv/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromGitHub, perl, jq }:
+
+stdenv.mkDerivation rec {
+  pname = "zsv";
+  version = "0.3.8-alpha";
+
+  src = fetchFromGitHub {
+    owner = "liquidaty";
+    repo = "zsv";
+    rev = "v${version}";
+    hash = "sha256-+6oZvMlfLVTDLRlqOpgdZP2YxT6Zlt13wBMFlryBrXY=";
+  };
+
+  nativeBuildInputs = [ perl ];
+
+  buildInputs = [ jq ];
+
+  configureFlags = [
+    "--jq-prefix=${jq.lib}"
+  ];
+
+  meta = with lib; {
+    description = "World's fastest (simd) CSV parser, with an extensible CLI";
+    homepage = "https://github.com/liquidaty/zsv";
+    changelog = "https://github.com/liquidaty/zsv/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ marsam ];
+    platforms = platforms.all;
+  };
+}